diff --git a/Gruntfile.coffee b/Gruntfile.coffee index d2eb9a23..1880e2b6 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -10,14 +10,14 @@ module.exports = (grunt) -> sourceMap: true expand: true src: ["lib/**/*.coffee"] - dest: "dest/lib" + dest: "dest/" ext: ".js" test: #options: #bare: true expand: true src: ["test/**/*.coffee"] - dest: "dest/test" + dest: "dest/" ext: ".js" watch: @@ -32,7 +32,7 @@ module.exports = (grunt) -> "<%= coffee.test.src %>" "examples/*" ] - tasks: ["coffeelint", "literate", "browserify", "test", "codo"] + tasks: ["build"] simplemocha: all: @@ -65,22 +65,36 @@ module.exports = (grunt) -> options: name: "Yatta!" title: "Yatta! Documentation" - extras: ["LICENSE-LGPL"] + extras: ["LICENSE-LGPL", "examples/README.md", "examples/IwcJson.md"] #undocumented: yes verbose: false stats: true src: ["./lib"] browserify: - dist: + dest: files: 'dest/browser/Yatta_test.js': ['test/**/*.coffee'] - 'dest/browser/Connectors/IwcConnector.js': ['lib/Connectors/IwcConnector.coffee'] + options: + transform: ['coffeeify'] + debug: true + bundleOptions: {debug: true} + # Serve files via http-server + lib: + files: 'dest/browser/Frameworks/JsonIwcYatta.js': ['./lib/Frameworks/JsonYatta.coffee', './lib/Connectors/IwcConnector.coffee'] options: transform: ['coffeeify'] debug: false bundleOptions: {debug: false} - # Serve files via http-server + uglify: + browser: + files: [ + expand: true + cwd: './dest/browser/' + src: '**/*.js' + dest: './dest/browser' + ext: '.min.js' + ] connect: server: options: @@ -105,6 +119,7 @@ module.exports = (grunt) -> # These plugins provide necessary tasks. grunt.loadNpmTasks "grunt-browserify" + grunt.loadNpmTasks "grunt-contrib-uglify" grunt.loadNpmTasks "grunt-contrib-coffee" grunt.loadNpmTasks 'grunt-contrib-connect' grunt.loadNpmTasks "grunt-contrib-watch" @@ -113,6 +128,7 @@ module.exports = (grunt) -> grunt.loadNpmTasks "grunt-coffeelint" grunt.loadNpmTasks "grunt-codo" - grunt.registerTask "default", ["coffee","coffeelint", "literate", "browserify", "simplemocha", "watch"] + grunt.registerTask "build", ["test", "coffee","coffeelint", "literate", "browserify", "uglify", "codo"] + grunt.registerTask "default", ["build", "watch"] grunt.registerTask "production", ["coffee"] grunt.registerTask "test", ["simplemocha"] diff --git a/README.md b/README.md index b37b520b..fd1aba2d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ # Yatta! -A Collaboration Framework for arbitrary data structures that is _not_ based on the Operational Transformation. +A Collaboration Framework for arbitrary data structures that is _not_ based on Operational Transformation. diff --git a/dest/browser/Connectors/IwcConnector.js b/dest/browser/Connectors/IwcConnector.js deleted file mode 100644 index 6b64f2cb..00000000 --- a/dest/browser/Connectors/IwcConnector.js +++ /dev/null @@ -1,130 +0,0 @@ -(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;od;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;;){if(this.origin===b)break;if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;;){if(null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d===this.next_cl)break;if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;;){if(b=b.next_cl,b.isDeleted()||(a-=1),0===a)break;if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!")}return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this +}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function c(a,b,d){function e(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=b[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,c,a,b,d)}return b[g].exports}for(var f="function"==typeof require&&require,g=0;gd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function d(a,b,c){function e(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=b[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,d,a,b,c)}return b[g].exports}for(var f="function"==typeof require&&require,g=0;gd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b); +return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function e(a,b,c){function d(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=b[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return d(c?c:b)},j,j.exports,e,a,b,c)}return b[g].exports}for(var f="function"==typeof require&&require,g=0;gd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d) +},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function f(a,b,c){function d(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(e)return e(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=b[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return d(c?c:b)},j,j.exports,f,a,b,c)}return b[g].exports}for(var e="function"==typeof require&&require,g=0;gd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function g(a,b,c){function d(f,h){if(!b[f]){if(!a[f]){var i="function"==typeof require&&require;if(!h&&i)return i(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var j=b[f]={exports:{}};a[f][0].call(j.exports,function(b){var c=a[f][1][b];return d(c?c:b)},j,j.exports,g,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;fd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!"); +return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function h(a,b,c){function d(f,g){if(!b[f]){if(!a[f]){var i="function"==typeof require&&require;if(!g&&i)return i(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var j=b[f]={exports:{}};a[f][0].call(j.exports,function(b){var c=a[f][1][b];return d(c?c:b)},j,j.exports,h,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;fd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a +}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function i(a,b,c){function d(f,g){if(!b[f]){if(!a[f]){var h="function"==typeof require&&require;if(!g&&h)return h(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var j=b[f]={exports:{}};a[f][0].call(j.exports,function(b){var c=a[f][1][b];return d(c?c:b)},j,j.exports,i,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;fd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function j(a,b,c){function d(f,g){if(!b[f]){if(!a[f]){var h="function"==typeof require&&require;if(!g&&h)return h(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var i=b[f]={exports:{}};a[f][0].call(i.exports,function(b){var c=a[f][1][b];return d(c?c:b)},i,i.exports,j,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;fd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]),!function k(a,b,c){function d(f,g){if(!b[f]){if(!a[f]){var h="function"==typeof require&&require;if(!g&&h)return h(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var i=b[f]={exports:{}};a[f][0].call(i.exports,function(b){var c=a[f][1][b];return d(c?c:b)},i,i.exports,k,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;fd;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":4,"../Types/JsonTypes.coffee":6}],4:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],5:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],6:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":8}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":5}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e) +},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":7}]},{},[3,1]); \ No newline at end of file diff --git a/dest/browser/Widgets/libs/DUIClient.min.js b/dest/browser/Widgets/libs/DUIClient.min.js new file mode 100644 index 00000000..0a89610e --- /dev/null +++ b/dest/browser/Widgets/libs/DUIClient.min.js @@ -0,0 +1,2 @@ +DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g) +},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}},DUIClient=function(){var a=parent.document.getElementById(self.frameElement.id).parentNode.id.split("-")[1],b=this,c=new iwc.Client(["*"]);c._componentName="duiclient-"+a,this.externalCallback=function(){},this._onUpdateState=function(a){var b=a.extras.isForMigration;b?this.finishMigration(a):this.updateState(a)},this.getIwcClient=function(){return c},this._onGetWidgetState=function(b){var d=null,e=!1;null!=b.extras.target&&(d=b.extras.target,e=!0);var f=this.getWidgetState(e),g={};g=e?{action:"DUI_WS_MIG",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{target:d,widgetId:a,widgetStates:f}}:{action:"DUI_WS",categories:["DUI"],component:b.sender,data:"",dataType:"",extras:{widgetId:a,widgetStates:f}},c.publish(g)},this._onAppStateChange=function(a){this.changeWithApp(a)},this._prepareMigration=function(){console.log("do sth before the widget is removed"),this.prepareMigration()},this._logOff=function(){var b=this.getWidgetState(!1);resIntent={action:"DUI_WS_LOGOFF",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a,widgetStates:b}},c.publish(resIntent)};var d=function(c){if(b.externalCallback(c),("undefined"==typeof c.flags||-1==c.flags.indexOf("PUBLISH_GLOBAL"))&&"undefined"!=typeof c.categories&&-1!=c.categories.indexOf("DUI")){var d=c.action;if("undefined"!=typeof c.extras.widgetId&&c.extras.widgetId==a){if("DUI_UPDATE_STATE"==d)return void b._onUpdateState(c);if("DUI_GET_WS"==d)return void b._onGetWidgetState(c);if("DUI_PRE_MIG"==d)return void b._prepareMigration(c)}else if("undefined"==typeof c.extras.widgetId){if("DUI_LOG_OFF"==d)return void b._logOff(c);if("DUI_APP_CHANGE"==d)return void b._onAppStateChange(c);if("DUI_REG_CLIENT"==d)return void b.initOK();"DUI_AS"==d&&b.onAppState(c.extras.appStates)}}};c.connect(d),this.getWidgetState=function(){console.log("the widget collects it is state and return, overwrite it");var a={};return a},this.changeWithApp=function(a){var b=a.extras.oldStates,c=a.extras.newStates;console.log(b),console.log(c),console.log("the widget may need to change something following the whole app")},this.prepareMigration=function(){this.prepareMigDone()},this.updateState=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("update the widget state, widget need to overwrite it")},this.finishMigration=function(a){var b={};b=a.extras.widgetStates;var c=a.extras.appStates;console.log(b),"undefined"!=typeof c&&console.log(c),console.log("the migration is done, the widget may need to perform special inits before update the widget state e.g. login to the lasServer again.")},this.prepareMigDone=function(){var b={component:"duimanager",categories:["DUI"],action:"DUI_PRE_MIG_OK",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.saveWidgetState=function(){var b=this.getWidgetState(!1),d={action:"DUI_SAVE_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetStates:b,widgetId:a}};c.publish(d)},this.sendIntent=function(a){c.publish(a)},this.requireWidgetState=function(){var b={action:"DUI_REQ_WS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.setAppState=function(a){var b={action:"DUI_SET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{states:a}};c.publish(b)},this.getAppState=function(){var a={action:"DUI_GET_AS",categories:["DUI"],component:"duimanager",data:"",dataType:""};c.publish(a)},this.onAppState=function(){},this.initOK=function(){var b={action:"DUI_CLIENT_OK",categories:["DUI"],component:"duimanager",data:"",dataType:"",extras:{widgetId:a}};c.publish(b)},this.publishToUser=function(a){var b={action:"DUI_PUB_USER",categories:["DUI"],component:"duimanager",data:JSON.stringify(a),dataType:"application/json",extras:{}};c.publish(a),c.publish(b)},this.connect=function(a){this.externalCallback=a}}; \ No newline at end of file diff --git a/dest/browser/Yatta_test.js b/dest/browser/Yatta_test.js index 1d7e2378..8a03b228 100644 --- a/dest/browser/Yatta_test.js +++ b/dest/browser/Yatta_test.js @@ -1363,2075 +1363,9 @@ module.exports = function(HB) { },{"./StructuredTypes.coffee":8}],10:[function(require,module,exports){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ - -var base64 = require('base64-js') -var ieee754 = require('ieee754') - -exports.Buffer = Buffer -exports.SlowBuffer = Buffer -exports.INSPECT_MAX_BYTES = 50 -Buffer.poolSize = 8192 - -/** - * If `TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * Note: - * - * - Implementation must support adding new properties to `Uint8Array` instances. - * Firefox 4-29 lacked support, fixed in Firefox 30+. - * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. - * - * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. - * - * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of - * incorrect length in some situations. - * - * We detect these buggy browsers and set `TYPED_ARRAY_SUPPORT` to `false` so they will - * get the Object implementation, which is slower but will work correctly. - */ -var TYPED_ARRAY_SUPPORT = (function () { - try { - var buf = new ArrayBuffer(0) - var arr = new Uint8Array(buf) - arr.foo = function () { return 42 } - return 42 === arr.foo() && // typed array instances can be augmented - typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` - new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` - } catch (e) { - return false - } -})() - -/** - * Class: Buffer - * ============= - * - * The Buffer constructor returns instances of `Uint8Array` that are augmented - * with function properties for all the node `Buffer` API functions. We use - * `Uint8Array` so that square bracket notation works as expected -- it returns - * a single octet. - * - * By augmenting the instances, we can avoid modifying the `Uint8Array` - * prototype. - */ -function Buffer (subject, encoding, noZero) { - if (!(this instanceof Buffer)) - return new Buffer(subject, encoding, noZero) - - var type = typeof subject - - // Find the length - var length - if (type === 'number') - length = subject > 0 ? subject >>> 0 : 0 - else if (type === 'string') { - if (encoding === 'base64') - subject = base64clean(subject) - length = Buffer.byteLength(subject, encoding) - } else if (type === 'object' && subject !== null) { // assume object is array-like - if (subject.type === 'Buffer' && isArray(subject.data)) - subject = subject.data - length = +subject.length > 0 ? Math.floor(+subject.length) : 0 - } else - throw new Error('First argument needs to be a number, array or string.') - - var buf - if (TYPED_ARRAY_SUPPORT) { - // Preferred: Return an augmented `Uint8Array` instance for best performance - buf = Buffer._augment(new Uint8Array(length)) - } else { - // Fallback: Return THIS instance of Buffer (created by `new`) - buf = this - buf.length = length - buf._isBuffer = true - } - - var i - if (TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') { - // Speed optimization -- use set if we're copying from a typed array - buf._set(subject) - } else if (isArrayish(subject)) { - // Treat array-ish objects as a byte array - if (Buffer.isBuffer(subject)) { - for (i = 0; i < length; i++) - buf[i] = subject.readUInt8(i) - } else { - for (i = 0; i < length; i++) - buf[i] = ((subject[i] % 256) + 256) % 256 - } - } else if (type === 'string') { - buf.write(subject, 0, encoding) - } else if (type === 'number' && !TYPED_ARRAY_SUPPORT && !noZero) { - for (i = 0; i < length; i++) { - buf[i] = 0 - } - } - - return buf -} - -// STATIC METHODS -// ============== - -Buffer.isEncoding = function (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'binary': - case 'base64': - case 'raw': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.isBuffer = function (b) { - return !!(b != null && b._isBuffer) -} - -Buffer.byteLength = function (str, encoding) { - var ret - str = str.toString() - switch (encoding || 'utf8') { - case 'hex': - ret = str.length / 2 - break - case 'utf8': - case 'utf-8': - ret = utf8ToBytes(str).length - break - case 'ascii': - case 'binary': - case 'raw': - ret = str.length - break - case 'base64': - ret = base64ToBytes(str).length - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = str.length * 2 - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.concat = function (list, totalLength) { - assert(isArray(list), 'Usage: Buffer.concat(list[, length])') - - if (list.length === 0) { - return new Buffer(0) - } else if (list.length === 1) { - return list[0] - } - - var i - if (totalLength === undefined) { - totalLength = 0 - for (i = 0; i < list.length; i++) { - totalLength += list[i].length - } - } - - var buf = new Buffer(totalLength) - var pos = 0 - for (i = 0; i < list.length; i++) { - var item = list[i] - item.copy(buf, pos) - pos += item.length - } - return buf -} - -Buffer.compare = function (a, b) { - assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers') - var x = a.length - var y = b.length - for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {} - if (i !== len) { - x = a[i] - y = b[i] - } - if (x < y) { - return -1 - } - if (y < x) { - return 1 - } - return 0 -} - -// BUFFER INSTANCE METHODS -// ======================= - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - assert(strLen % 2 === 0, 'Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; i++) { - var byte = parseInt(string.substr(i * 2, 2), 16) - assert(!isNaN(byte), 'Invalid hex string') - buf[offset + i] = byte - } - return i -} - -function utf8Write (buf, string, offset, length) { - var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length) - return charsWritten -} - -function asciiWrite (buf, string, offset, length) { - var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length) - return charsWritten -} - -function binaryWrite (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length) - return charsWritten -} - -function utf16leWrite (buf, string, offset, length) { - var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length) - return charsWritten -} - -Buffer.prototype.write = function (string, offset, length, encoding) { - // Support both (string, offset, length, encoding) - // and the legacy (string, encoding, offset, length) - if (isFinite(offset)) { - if (!isFinite(length)) { - encoding = length - length = undefined - } - } else { // legacy - var swap = encoding - encoding = offset - offset = length - length = swap - } - - offset = Number(offset) || 0 - var remaining = this.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - encoding = String(encoding || 'utf8').toLowerCase() - - var ret - switch (encoding) { - case 'hex': - ret = hexWrite(this, string, offset, length) - break - case 'utf8': - case 'utf-8': - ret = utf8Write(this, string, offset, length) - break - case 'ascii': - ret = asciiWrite(this, string, offset, length) - break - case 'binary': - ret = binaryWrite(this, string, offset, length) - break - case 'base64': - ret = base64Write(this, string, offset, length) - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = utf16leWrite(this, string, offset, length) - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.prototype.toString = function (encoding, start, end) { - var self = this - - encoding = String(encoding || 'utf8').toLowerCase() - start = Number(start) || 0 - end = (end === undefined) ? self.length : Number(end) - - // Fastpath empty strings - if (end === start) - return '' - - var ret - switch (encoding) { - case 'hex': - ret = hexSlice(self, start, end) - break - case 'utf8': - case 'utf-8': - ret = utf8Slice(self, start, end) - break - case 'ascii': - ret = asciiSlice(self, start, end) - break - case 'binary': - ret = binarySlice(self, start, end) - break - case 'base64': - ret = base64Slice(self, start, end) - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = utf16leSlice(self, start, end) - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.prototype.toJSON = function () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -Buffer.prototype.equals = function (b) { - assert(Buffer.isBuffer(b), 'Argument must be a Buffer') - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.compare = function (b) { - assert(Buffer.isBuffer(b), 'Argument must be a Buffer') - return Buffer.compare(this, b) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function (target, target_start, start, end) { - var source = this - - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (!target_start) target_start = 0 - - // Copy 0 bytes; we're done - if (end === start) return - if (target.length === 0 || source.length === 0) return - - // Fatal error conditions - assert(end >= start, 'sourceEnd < sourceStart') - assert(target_start >= 0 && target_start < target.length, - 'targetStart out of bounds') - assert(start >= 0 && start < source.length, 'sourceStart out of bounds') - assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) - end = this.length - if (target.length - target_start < end - start) - end = target.length - target_start + start - - var len = end - start - - if (len < 100 || !TYPED_ARRAY_SUPPORT) { - for (var i = 0; i < len; i++) { - target[i + target_start] = this[i + start] - } - } else { - target._set(this.subarray(start, start + len), target_start) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - var res = '' - var tmp = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - if (buf[i] <= 0x7F) { - res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) - tmp = '' - } else { - tmp += '%' + buf[i].toString(16) - } - } - - return res + decodeUtf8Char(tmp) -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function binarySlice (buf, start, end) { - return asciiSlice(buf, start, end) -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; i++) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) - } - return res -} - -Buffer.prototype.slice = function (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len; - if (start < 0) - start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) - end = 0 - } else if (end > len) { - end = len - } - - if (end < start) - end = start - - if (TYPED_ARRAY_SUPPORT) { - return Buffer._augment(this.subarray(start, end)) - } else { - var sliceLen = end - start - var newBuf = new Buffer(sliceLen, undefined, true) - for (var i = 0; i < sliceLen; i++) { - newBuf[i] = this[i + start] - } - return newBuf - } -} - -// `get` will be removed in Node 0.13+ -Buffer.prototype.get = function (offset) { - console.log('.get() is deprecated. Access using array indexes instead.') - return this.readUInt8(offset) -} - -// `set` will be removed in Node 0.13+ -Buffer.prototype.set = function (v, offset) { - console.log('.set() is deprecated. Access using array indexes instead.') - return this.writeUInt8(v, offset) -} - -Buffer.prototype.readUInt8 = function (offset, noAssert) { - if (!noAssert) { - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'Trying to read beyond buffer length') - } - - if (offset >= this.length) - return - - return this[offset] -} - -function readUInt16 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val - if (littleEndian) { - val = buf[offset] - if (offset + 1 < len) - val |= buf[offset + 1] << 8 - } else { - val = buf[offset] << 8 - if (offset + 1 < len) - val |= buf[offset + 1] - } - return val -} - -Buffer.prototype.readUInt16LE = function (offset, noAssert) { - return readUInt16(this, offset, true, noAssert) -} - -Buffer.prototype.readUInt16BE = function (offset, noAssert) { - return readUInt16(this, offset, false, noAssert) -} - -function readUInt32 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val - if (littleEndian) { - if (offset + 2 < len) - val = buf[offset + 2] << 16 - if (offset + 1 < len) - val |= buf[offset + 1] << 8 - val |= buf[offset] - if (offset + 3 < len) - val = val + (buf[offset + 3] << 24 >>> 0) - } else { - if (offset + 1 < len) - val = buf[offset + 1] << 16 - if (offset + 2 < len) - val |= buf[offset + 2] << 8 - if (offset + 3 < len) - val |= buf[offset + 3] - val = val + (buf[offset] << 24 >>> 0) - } - return val -} - -Buffer.prototype.readUInt32LE = function (offset, noAssert) { - return readUInt32(this, offset, true, noAssert) -} - -Buffer.prototype.readUInt32BE = function (offset, noAssert) { - return readUInt32(this, offset, false, noAssert) -} - -Buffer.prototype.readInt8 = function (offset, noAssert) { - if (!noAssert) { - assert(offset !== undefined && offset !== null, - 'missing offset') - assert(offset < this.length, 'Trying to read beyond buffer length') - } - - if (offset >= this.length) - return - - var neg = this[offset] & 0x80 - if (neg) - return (0xff - this[offset] + 1) * -1 - else - return this[offset] -} - -function readInt16 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val = readUInt16(buf, offset, littleEndian, true) - var neg = val & 0x8000 - if (neg) - return (0xffff - val + 1) * -1 - else - return val -} - -Buffer.prototype.readInt16LE = function (offset, noAssert) { - return readInt16(this, offset, true, noAssert) -} - -Buffer.prototype.readInt16BE = function (offset, noAssert) { - return readInt16(this, offset, false, noAssert) -} - -function readInt32 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val = readUInt32(buf, offset, littleEndian, true) - var neg = val & 0x80000000 - if (neg) - return (0xffffffff - val + 1) * -1 - else - return val -} - -Buffer.prototype.readInt32LE = function (offset, noAssert) { - return readInt32(this, offset, true, noAssert) -} - -Buffer.prototype.readInt32BE = function (offset, noAssert) { - return readInt32(this, offset, false, noAssert) -} - -function readFloat (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - return ieee754.read(buf, offset, littleEndian, 23, 4) -} - -Buffer.prototype.readFloatLE = function (offset, noAssert) { - return readFloat(this, offset, true, noAssert) -} - -Buffer.prototype.readFloatBE = function (offset, noAssert) { - return readFloat(this, offset, false, noAssert) -} - -function readDouble (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset + 7 < buf.length, 'Trying to read beyond buffer length') - } - - return ieee754.read(buf, offset, littleEndian, 52, 8) -} - -Buffer.prototype.readDoubleLE = function (offset, noAssert) { - return readDouble(this, offset, true, noAssert) -} - -Buffer.prototype.readDoubleBE = function (offset, noAssert) { - return readDouble(this, offset, false, noAssert) -} - -Buffer.prototype.writeUInt8 = function (value, offset, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'trying to write beyond buffer length') - verifuint(value, 0xff) - } - - if (offset >= this.length) return - - this[offset] = value - return offset + 1 -} - -function writeUInt16 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'trying to write beyond buffer length') - verifuint(value, 0xffff) - } - - var len = buf.length - if (offset >= len) - return - - for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) { - buf[offset + i] = - (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } - return offset + 2 -} - -Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) { - return writeUInt16(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) { - return writeUInt16(this, value, offset, false, noAssert) -} - -function writeUInt32 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'trying to write beyond buffer length') - verifuint(value, 0xffffffff) - } - - var len = buf.length - if (offset >= len) - return - - for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) { - buf[offset + i] = - (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } - return offset + 4 -} - -Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) { - return writeUInt32(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) { - return writeUInt32(this, value, offset, false, noAssert) -} - -Buffer.prototype.writeInt8 = function (value, offset, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7f, -0x80) - } - - if (offset >= this.length) - return - - if (value >= 0) - this.writeUInt8(value, offset, noAssert) - else - this.writeUInt8(0xff + value + 1, offset, noAssert) - return offset + 1 -} - -function writeInt16 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7fff, -0x8000) - } - - var len = buf.length - if (offset >= len) - return - - if (value >= 0) - writeUInt16(buf, value, offset, littleEndian, noAssert) - else - writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert) - return offset + 2 -} - -Buffer.prototype.writeInt16LE = function (value, offset, noAssert) { - return writeInt16(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeInt16BE = function (value, offset, noAssert) { - return writeInt16(this, value, offset, false, noAssert) -} - -function writeInt32 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7fffffff, -0x80000000) - } - - var len = buf.length - if (offset >= len) - return - - if (value >= 0) - writeUInt32(buf, value, offset, littleEndian, noAssert) - else - writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert) - return offset + 4 -} - -Buffer.prototype.writeInt32LE = function (value, offset, noAssert) { - return writeInt32(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeInt32BE = function (value, offset, noAssert) { - return writeInt32(this, value, offset, false, noAssert) -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') - verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - - var len = buf.length - if (offset >= len) - return - - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 7 < buf.length, - 'Trying to write beyond buffer length') - verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - - var len = buf.length - if (offset >= len) - return - - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// fill(value, start=0, end=buffer.length) -Buffer.prototype.fill = function (value, start, end) { - if (!value) value = 0 - if (!start) start = 0 - if (!end) end = this.length - - assert(end >= start, 'end < start') - - // Fill 0 bytes; we're done - if (end === start) return - if (this.length === 0) return - - assert(start >= 0 && start < this.length, 'start out of bounds') - assert(end >= 0 && end <= this.length, 'end out of bounds') - - var i - if (typeof value === 'number') { - for (i = start; i < end; i++) { - this[i] = value - } - } else { - var bytes = utf8ToBytes(value.toString()) - var len = bytes.length - for (i = start; i < end; i++) { - this[i] = bytes[i % len] - } - } - - return this -} - -Buffer.prototype.inspect = function () { - var out = [] - var len = this.length - for (var i = 0; i < len; i++) { - out[i] = toHex(this[i]) - if (i === exports.INSPECT_MAX_BYTES) { - out[i + 1] = '...' - break - } - } - return '' -} - -/** - * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. - * Added in Node 0.12. Only available in browsers that support ArrayBuffer. - */ -Buffer.prototype.toArrayBuffer = function () { - if (typeof Uint8Array !== 'undefined') { - if (TYPED_ARRAY_SUPPORT) { - return (new Buffer(this)).buffer - } else { - var buf = new Uint8Array(this.length) - for (var i = 0, len = buf.length; i < len; i += 1) { - buf[i] = this[i] - } - return buf.buffer - } - } else { - throw new Error('Buffer.toArrayBuffer not supported in this browser') - } -} - -// HELPER FUNCTIONS -// ================ - -var BP = Buffer.prototype - -/** - * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods - */ -Buffer._augment = function (arr) { - arr._isBuffer = true - - // save reference to original Uint8Array get/set methods before overwriting - arr._get = arr.get - arr._set = arr.set - - // deprecated, will be removed in node 0.13+ - arr.get = BP.get - arr.set = BP.set - - arr.write = BP.write - arr.toString = BP.toString - arr.toLocaleString = BP.toString - arr.toJSON = BP.toJSON - arr.equals = BP.equals - arr.compare = BP.compare - arr.copy = BP.copy - arr.slice = BP.slice - arr.readUInt8 = BP.readUInt8 - arr.readUInt16LE = BP.readUInt16LE - arr.readUInt16BE = BP.readUInt16BE - arr.readUInt32LE = BP.readUInt32LE - arr.readUInt32BE = BP.readUInt32BE - arr.readInt8 = BP.readInt8 - arr.readInt16LE = BP.readInt16LE - arr.readInt16BE = BP.readInt16BE - arr.readInt32LE = BP.readInt32LE - arr.readInt32BE = BP.readInt32BE - arr.readFloatLE = BP.readFloatLE - arr.readFloatBE = BP.readFloatBE - arr.readDoubleLE = BP.readDoubleLE - arr.readDoubleBE = BP.readDoubleBE - arr.writeUInt8 = BP.writeUInt8 - arr.writeUInt16LE = BP.writeUInt16LE - arr.writeUInt16BE = BP.writeUInt16BE - arr.writeUInt32LE = BP.writeUInt32LE - arr.writeUInt32BE = BP.writeUInt32BE - arr.writeInt8 = BP.writeInt8 - arr.writeInt16LE = BP.writeInt16LE - arr.writeInt16BE = BP.writeInt16BE - arr.writeInt32LE = BP.writeInt32LE - arr.writeInt32BE = BP.writeInt32BE - arr.writeFloatLE = BP.writeFloatLE - arr.writeFloatBE = BP.writeFloatBE - arr.writeDoubleLE = BP.writeDoubleLE - arr.writeDoubleBE = BP.writeDoubleBE - arr.fill = BP.fill - arr.inspect = BP.inspect - arr.toArrayBuffer = BP.toArrayBuffer - - return arr -} - -var INVALID_BASE64_RE = /[^+\/0-9A-z]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = stringtrim(str).replace(INVALID_BASE64_RE, '') - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} - -function isArray (subject) { - return (Array.isArray || function (subject) { - return Object.prototype.toString.call(subject) === '[object Array]' - })(subject) -} - -function isArrayish (subject) { - return isArray(subject) || Buffer.isBuffer(subject) || - subject && typeof subject === 'object' && - typeof subject.length === 'number' -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - var b = str.charCodeAt(i) - if (b <= 0x7F) { - byteArray.push(b) - } else { - var start = i - if (b >= 0xD800 && b <= 0xDFFF) i++ - var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%') - for (var j = 0; j < h.length; j++) { - byteArray.push(parseInt(h[j], 16)) - } - } - } - return byteArray -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; i++) { - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(str) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; i++) { - if ((i + offset >= dst.length) || (i >= src.length)) - break - dst[i + offset] = src[i] - } - return i -} - -function decodeUtf8Char (str) { - try { - return decodeURIComponent(str) - } catch (err) { - return String.fromCharCode(0xFFFD) // UTF 8 invalid char - } -} - -/* - * We have to make sure that the value is a valid integer. This means that it - * is non-negative. It has no fractional component and that it does not - * exceed the maximum allowed value. - */ -function verifuint (value, max) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value >= 0, 'specified a negative value for writing an unsigned value') - assert(value <= max, 'value is larger than maximum value for type') - assert(Math.floor(value) === value, 'value has a fractional component') -} - -function verifsint (value, max, min) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value <= max, 'value larger than maximum allowed value') - assert(value >= min, 'value smaller than minimum allowed value') - assert(Math.floor(value) === value, 'value has a fractional component') -} - -function verifIEEE754 (value, max, min) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value <= max, 'value larger than maximum allowed value') - assert(value >= min, 'value smaller than minimum allowed value') -} - -function assert (test, message) { - if (!test) throw new Error(message || 'Failed assertion') -} - -},{"base64-js":11,"ieee754":12}],11:[function(require,module,exports){ -var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - -;(function (exports) { - 'use strict'; - - var Arr = (typeof Uint8Array !== 'undefined') - ? Uint8Array - : Array - - var PLUS = '+'.charCodeAt(0) - var SLASH = '/'.charCodeAt(0) - var NUMBER = '0'.charCodeAt(0) - var LOWER = 'a'.charCodeAt(0) - var UPPER = 'A'.charCodeAt(0) - - function decode (elt) { - var code = elt.charCodeAt(0) - if (code === PLUS) - return 62 // '+' - if (code === SLASH) - return 63 // '/' - if (code < NUMBER) - return -1 //no match - if (code < NUMBER + 10) - return code - NUMBER + 26 + 26 - if (code < UPPER + 26) - return code - UPPER - if (code < LOWER + 26) - return code - LOWER + 26 - } - - function b64ToByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - - if (b64.length % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - var len = b64.length - placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 - - // base64 is 4/3 + up to two characters of the original data - arr = new Arr(b64.length * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? b64.length - 4 : b64.length - - var L = 0 - - function push (v) { - arr[L++] = v - } - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) - push((tmp & 0xFF0000) >> 16) - push((tmp & 0xFF00) >> 8) - push(tmp & 0xFF) - } - - if (placeHolders === 2) { - tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) - push(tmp & 0xFF) - } else if (placeHolders === 1) { - tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) - push((tmp >> 8) & 0xFF) - push(tmp & 0xFF) - } - - return arr - } - - function uint8ToBase64 (uint8) { - var i, - extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes - output = "", - temp, length - - function encode (num) { - return lookup.charAt(num) - } - - function tripletToBase64 (num) { - return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) - } - - // go through the array every three bytes, we'll deal with trailing stuff later - for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { - temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output += tripletToBase64(temp) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - switch (extraBytes) { - case 1: - temp = uint8[uint8.length - 1] - output += encode(temp >> 2) - output += encode((temp << 4) & 0x3F) - output += '==' - break - case 2: - temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) - output += encode(temp >> 10) - output += encode((temp >> 4) & 0x3F) - output += encode((temp << 2) & 0x3F) - output += '=' - break - } - - return output - } - - exports.toByteArray = b64ToByteArray - exports.fromByteArray = uint8ToBase64 -}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) - -},{}],12:[function(require,module,exports){ -exports.read = function(buffer, offset, isLE, mLen, nBytes) { - var e, m, - eLen = nBytes * 8 - mLen - 1, - eMax = (1 << eLen) - 1, - eBias = eMax >> 1, - nBits = -7, - i = isLE ? (nBytes - 1) : 0, - d = isLE ? -1 : 1, - s = buffer[offset + i]; - - i += d; - - e = s & ((1 << (-nBits)) - 1); - s >>= (-nBits); - nBits += eLen; - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); - - m = e & ((1 << (-nBits)) - 1); - e >>= (-nBits); - nBits += mLen; - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); - - if (e === 0) { - e = 1 - eBias; - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity); - } else { - m = m + Math.pow(2, mLen); - e = e - eBias; - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen); -}; - -exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c, - eLen = nBytes * 8 - mLen - 1, - eMax = (1 << eLen) - 1, - eBias = eMax >> 1, - rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), - i = isLE ? 0 : (nBytes - 1), - d = isLE ? 1 : -1, - s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; - - value = Math.abs(value); - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0; - e = eMax; - } else { - e = Math.floor(Math.log(value) / Math.LN2); - if (value * (c = Math.pow(2, -e)) < 1) { - e--; - c *= 2; - } - if (e + eBias >= 1) { - value += rt / c; - } else { - value += rt * Math.pow(2, 1 - eBias); - } - if (value * c >= 2) { - e++; - c /= 2; - } - - if (e + eBias >= eMax) { - m = 0; - e = eMax; - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen); - e = e + eBias; - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); - e = 0; - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); - - e = (e << mLen) | m; - eLen += mLen; - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); - - buffer[offset + i - d] |= s * 128; -}; - -},{}],13:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - 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 { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],14:[function(require,module,exports){ -// shim for using process in browser - -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'); -} - -// TODO(shtylman) -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; - -},{}],15:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],16:[function(require,module,exports){ -(function (process,global){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -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; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - 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]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - 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; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -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] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + 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) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - 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 = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - 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'); - // For some reason typeof null is "object", so special case here. - 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]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -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' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./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']; - -// 26 Feb 16:19:34 -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(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - 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,require("FWaASH"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":15,"FWaASH":14,"inherits":13}],17:[function(require,module,exports){ module.exports = require('./lib/chai'); -},{"./lib/chai":18}],18:[function(require,module,exports){ +},{"./lib/chai":11}],11:[function(require,module,exports){ /*! * chai * Copyright(c) 2011-2014 Jake Luer @@ -3520,7 +1454,7 @@ exports.use(should); var assert = require('./chai/interface/assert'); exports.use(assert); -},{"./chai/assertion":19,"./chai/config":20,"./chai/core/assertions":21,"./chai/interface/assert":22,"./chai/interface/expect":23,"./chai/interface/should":24,"./chai/utils":35,"assertion-error":44}],19:[function(require,module,exports){ +},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(require,module,exports){ /*! * chai * http://chaijs.com @@ -3652,7 +1586,7 @@ module.exports = function (_chai, util) { }); }; -},{"./config":20}],20:[function(require,module,exports){ +},{"./config":13}],13:[function(require,module,exports){ module.exports = { /** @@ -3704,7 +1638,7 @@ module.exports = { }; -},{}],21:[function(require,module,exports){ +},{}],14:[function(require,module,exports){ /*! * chai * http://chaijs.com @@ -5020,7 +2954,7 @@ module.exports = function (chai, _) { }); }; -},{}],22:[function(require,module,exports){ +},{}],15:[function(require,module,exports){ /*! * chai * Copyright(c) 2011-2014 Jake Luer @@ -6078,7 +4012,7 @@ module.exports = function (chai, util) { ('Throw', 'throws'); }; -},{}],23:[function(require,module,exports){ +},{}],16:[function(require,module,exports){ /*! * chai * Copyright(c) 2011-2014 Jake Luer @@ -6092,7 +4026,7 @@ module.exports = function (chai, util) { }; -},{}],24:[function(require,module,exports){ +},{}],17:[function(require,module,exports){ /*! * chai * Copyright(c) 2011-2014 Jake Luer @@ -6172,7 +4106,7 @@ module.exports = function (chai, util) { chai.Should = loadShould; }; -},{}],25:[function(require,module,exports){ +},{}],18:[function(require,module,exports){ /*! * Chai - addChainingMethod utility * Copyright(c) 2012-2014 Jake Luer @@ -6285,7 +4219,7 @@ module.exports = function (ctx, name, method, chainingBehavior) { }); }; -},{"../config":20,"./flag":28,"./transferFlags":42}],26:[function(require,module,exports){ +},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(require,module,exports){ /*! * Chai - addMethod utility * Copyright(c) 2012-2014 Jake Luer @@ -6330,7 +4264,7 @@ module.exports = function (ctx, name, method) { }; }; -},{"../config":20,"./flag":28}],27:[function(require,module,exports){ +},{"../config":13,"./flag":21}],20:[function(require,module,exports){ /*! * Chai - addProperty utility * Copyright(c) 2012-2014 Jake Luer @@ -6372,7 +4306,7 @@ module.exports = function (ctx, name, getter) { }); }; -},{}],28:[function(require,module,exports){ +},{}],21:[function(require,module,exports){ /*! * Chai - flag utility * Copyright(c) 2012-2014 Jake Luer @@ -6406,7 +4340,7 @@ module.exports = function (obj, key, value) { } }; -},{}],29:[function(require,module,exports){ +},{}],22:[function(require,module,exports){ /*! * Chai - getActual utility * Copyright(c) 2012-2014 Jake Luer @@ -6426,7 +4360,7 @@ module.exports = function (obj, args) { return args.length > 4 ? args[4] : obj._obj; }; -},{}],30:[function(require,module,exports){ +},{}],23:[function(require,module,exports){ /*! * Chai - getEnumerableProperties utility * Copyright(c) 2012-2014 Jake Luer @@ -6453,7 +4387,7 @@ module.exports = function getEnumerableProperties(object) { return result; }; -},{}],31:[function(require,module,exports){ +},{}],24:[function(require,module,exports){ /*! * Chai - message composition utility * Copyright(c) 2012-2014 Jake Luer @@ -6504,7 +4438,7 @@ module.exports = function (obj, args) { return flagMsg ? flagMsg + ': ' + msg : msg; }; -},{"./flag":28,"./getActual":29,"./inspect":36,"./objDisplay":37}],32:[function(require,module,exports){ +},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(require,module,exports){ /*! * Chai - getName utility * Copyright(c) 2012-2014 Jake Luer @@ -6526,7 +4460,7 @@ module.exports = function (func) { return match && match[1] ? match[1] : ""; }; -},{}],33:[function(require,module,exports){ +},{}],26:[function(require,module,exports){ /*! * Chai - getPathValue utility * Copyright(c) 2012-2014 Jake Luer @@ -6630,7 +4564,7 @@ function _getPathValue (parsed, obj) { return res; }; -},{}],34:[function(require,module,exports){ +},{}],27:[function(require,module,exports){ /*! * Chai - getProperties utility * Copyright(c) 2012-2014 Jake Luer @@ -6667,7 +4601,7 @@ module.exports = function getProperties(object) { return result; }; -},{}],35:[function(require,module,exports){ +},{}],28:[function(require,module,exports){ /*! * chai * Copyright(c) 2011 Jake Luer @@ -6783,7 +4717,7 @@ exports.addChainableMethod = require('./addChainableMethod'); exports.overwriteChainableMethod = require('./overwriteChainableMethod'); -},{"./addChainableMethod":25,"./addMethod":26,"./addProperty":27,"./flag":28,"./getActual":29,"./getMessage":31,"./getName":32,"./getPathValue":33,"./inspect":36,"./objDisplay":37,"./overwriteChainableMethod":38,"./overwriteMethod":39,"./overwriteProperty":40,"./test":41,"./transferFlags":42,"./type":43,"deep-eql":45}],36:[function(require,module,exports){ +},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(require,module,exports){ // This is (almost) directly from Node.js utils // https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js @@ -7105,7 +5039,7 @@ function objectToString(o) { return Object.prototype.toString.call(o); } -},{"./getEnumerableProperties":30,"./getName":32,"./getProperties":34}],37:[function(require,module,exports){ +},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(require,module,exports){ /*! * Chai - flag utility * Copyright(c) 2012-2014 Jake Luer @@ -7156,7 +5090,7 @@ module.exports = function (obj) { } }; -},{"../config":20,"./inspect":36}],38:[function(require,module,exports){ +},{"../config":13,"./inspect":29}],31:[function(require,module,exports){ /*! * Chai - overwriteChainableMethod utility * Copyright(c) 2012-2014 Jake Luer @@ -7211,7 +5145,7 @@ module.exports = function (ctx, name, method, chainingBehavior) { }; }; -},{}],39:[function(require,module,exports){ +},{}],32:[function(require,module,exports){ /*! * Chai - overwriteMethod utility * Copyright(c) 2012-2014 Jake Luer @@ -7264,7 +5198,7 @@ module.exports = function (ctx, name, method) { } }; -},{}],40:[function(require,module,exports){ +},{}],33:[function(require,module,exports){ /*! * Chai - overwriteProperty utility * Copyright(c) 2012-2014 Jake Luer @@ -7320,7 +5254,7 @@ module.exports = function (ctx, name, getter) { }); }; -},{}],41:[function(require,module,exports){ +},{}],34:[function(require,module,exports){ /*! * Chai - test utility * Copyright(c) 2012-2014 Jake Luer @@ -7348,7 +5282,7 @@ module.exports = function (obj, args) { return negate ? !expr : expr; }; -},{"./flag":28}],42:[function(require,module,exports){ +},{"./flag":21}],35:[function(require,module,exports){ /*! * Chai - transferFlags utility * Copyright(c) 2012-2014 Jake Luer @@ -7394,7 +5328,7 @@ module.exports = function (assertion, object, includeAll) { } }; -},{}],43:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ /*! * Chai - type utility * Copyright(c) 2012-2014 Jake Luer @@ -7441,7 +5375,7 @@ module.exports = function (obj) { return typeof obj; }; -},{}],44:[function(require,module,exports){ +},{}],37:[function(require,module,exports){ /*! * assertion-error * Copyright(c) 2013 Jake Luer @@ -7553,10 +5487,10 @@ AssertionError.prototype.toJSON = function (stack) { return props; }; -},{}],45:[function(require,module,exports){ +},{}],38:[function(require,module,exports){ module.exports = require('./lib/eql'); -},{"./lib/eql":46}],46:[function(require,module,exports){ +},{"./lib/eql":39}],39:[function(require,module,exports){ /*! * deep-eql * Copyright(c) 2013 Jake Luer @@ -7815,10 +5749,10 @@ function objectEqual(a, b, m) { return true; } -},{"buffer":10,"type-detect":47}],47:[function(require,module,exports){ +},{"buffer":42,"type-detect":40}],40:[function(require,module,exports){ module.exports = require('./lib/type'); -},{"./lib/type":48}],48:[function(require,module,exports){ +},{"./lib/type":41}],41:[function(require,module,exports){ /*! * type-detect * Copyright(c) 2013 jake luer @@ -7962,7 +5896,2073 @@ Library.prototype.test = function (obj, type) { } }; -},{}],49:[function(require,module,exports){ +},{}],42:[function(require,module,exports){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +var base64 = require('base64-js') +var ieee754 = require('ieee754') + +exports.Buffer = Buffer +exports.SlowBuffer = Buffer +exports.INSPECT_MAX_BYTES = 50 +Buffer.poolSize = 8192 + +/** + * If `TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Note: + * + * - Implementation must support adding new properties to `Uint8Array` instances. + * Firefox 4-29 lacked support, fixed in Firefox 30+. + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + * + * We detect these buggy browsers and set `TYPED_ARRAY_SUPPORT` to `false` so they will + * get the Object implementation, which is slower but will work correctly. + */ +var TYPED_ARRAY_SUPPORT = (function () { + try { + var buf = new ArrayBuffer(0) + var arr = new Uint8Array(buf) + arr.foo = function () { return 42 } + return 42 === arr.foo() && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +})() + +/** + * Class: Buffer + * ============= + * + * The Buffer constructor returns instances of `Uint8Array` that are augmented + * with function properties for all the node `Buffer` API functions. We use + * `Uint8Array` so that square bracket notation works as expected -- it returns + * a single octet. + * + * By augmenting the instances, we can avoid modifying the `Uint8Array` + * prototype. + */ +function Buffer (subject, encoding, noZero) { + if (!(this instanceof Buffer)) + return new Buffer(subject, encoding, noZero) + + var type = typeof subject + + // Find the length + var length + if (type === 'number') + length = subject > 0 ? subject >>> 0 : 0 + else if (type === 'string') { + if (encoding === 'base64') + subject = base64clean(subject) + length = Buffer.byteLength(subject, encoding) + } else if (type === 'object' && subject !== null) { // assume object is array-like + if (subject.type === 'Buffer' && isArray(subject.data)) + subject = subject.data + length = +subject.length > 0 ? Math.floor(+subject.length) : 0 + } else + throw new Error('First argument needs to be a number, array or string.') + + var buf + if (TYPED_ARRAY_SUPPORT) { + // Preferred: Return an augmented `Uint8Array` instance for best performance + buf = Buffer._augment(new Uint8Array(length)) + } else { + // Fallback: Return THIS instance of Buffer (created by `new`) + buf = this + buf.length = length + buf._isBuffer = true + } + + var i + if (TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') { + // Speed optimization -- use set if we're copying from a typed array + buf._set(subject) + } else if (isArrayish(subject)) { + // Treat array-ish objects as a byte array + if (Buffer.isBuffer(subject)) { + for (i = 0; i < length; i++) + buf[i] = subject.readUInt8(i) + } else { + for (i = 0; i < length; i++) + buf[i] = ((subject[i] % 256) + 256) % 256 + } + } else if (type === 'string') { + buf.write(subject, 0, encoding) + } else if (type === 'number' && !TYPED_ARRAY_SUPPORT && !noZero) { + for (i = 0; i < length; i++) { + buf[i] = 0 + } + } + + return buf +} + +// STATIC METHODS +// ============== + +Buffer.isEncoding = function (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'raw': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.isBuffer = function (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.byteLength = function (str, encoding) { + var ret + str = str.toString() + switch (encoding || 'utf8') { + case 'hex': + ret = str.length / 2 + break + case 'utf8': + case 'utf-8': + ret = utf8ToBytes(str).length + break + case 'ascii': + case 'binary': + case 'raw': + ret = str.length + break + case 'base64': + ret = base64ToBytes(str).length + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = str.length * 2 + break + default: + throw new Error('Unknown encoding') + } + return ret +} + +Buffer.concat = function (list, totalLength) { + assert(isArray(list), 'Usage: Buffer.concat(list[, length])') + + if (list.length === 0) { + return new Buffer(0) + } else if (list.length === 1) { + return list[0] + } + + var i + if (totalLength === undefined) { + totalLength = 0 + for (i = 0; i < list.length; i++) { + totalLength += list[i].length + } + } + + var buf = new Buffer(totalLength) + var pos = 0 + for (i = 0; i < list.length; i++) { + var item = list[i] + item.copy(buf, pos) + pos += item.length + } + return buf +} + +Buffer.compare = function (a, b) { + assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers') + var x = a.length + var y = b.length + for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {} + if (i !== len) { + x = a[i] + y = b[i] + } + if (x < y) { + return -1 + } + if (y < x) { + return 1 + } + return 0 +} + +// BUFFER INSTANCE METHODS +// ======================= + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + assert(strLen % 2 === 0, 'Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; i++) { + var byte = parseInt(string.substr(i * 2, 2), 16) + assert(!isNaN(byte), 'Invalid hex string') + buf[offset + i] = byte + } + return i +} + +function utf8Write (buf, string, offset, length) { + var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length) + return charsWritten +} + +function asciiWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length) + return charsWritten +} + +function binaryWrite (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length) + return charsWritten +} + +function utf16leWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length) + return charsWritten +} + +Buffer.prototype.write = function (string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length + length = undefined + } + } else { // legacy + var swap = encoding + encoding = offset + offset = length + length = swap + } + + offset = Number(offset) || 0 + var remaining = this.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + encoding = String(encoding || 'utf8').toLowerCase() + + var ret + switch (encoding) { + case 'hex': + ret = hexWrite(this, string, offset, length) + break + case 'utf8': + case 'utf-8': + ret = utf8Write(this, string, offset, length) + break + case 'ascii': + ret = asciiWrite(this, string, offset, length) + break + case 'binary': + ret = binaryWrite(this, string, offset, length) + break + case 'base64': + ret = base64Write(this, string, offset, length) + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = utf16leWrite(this, string, offset, length) + break + default: + throw new Error('Unknown encoding') + } + return ret +} + +Buffer.prototype.toString = function (encoding, start, end) { + var self = this + + encoding = String(encoding || 'utf8').toLowerCase() + start = Number(start) || 0 + end = (end === undefined) ? self.length : Number(end) + + // Fastpath empty strings + if (end === start) + return '' + + var ret + switch (encoding) { + case 'hex': + ret = hexSlice(self, start, end) + break + case 'utf8': + case 'utf-8': + ret = utf8Slice(self, start, end) + break + case 'ascii': + ret = asciiSlice(self, start, end) + break + case 'binary': + ret = binarySlice(self, start, end) + break + case 'base64': + ret = base64Slice(self, start, end) + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = utf16leSlice(self, start, end) + break + default: + throw new Error('Unknown encoding') + } + return ret +} + +Buffer.prototype.toJSON = function () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +Buffer.prototype.equals = function (b) { + assert(Buffer.isBuffer(b), 'Argument must be a Buffer') + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.compare = function (b) { + assert(Buffer.isBuffer(b), 'Argument must be a Buffer') + return Buffer.compare(this, b) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function (target, target_start, start, end) { + var source = this + + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (!target_start) target_start = 0 + + // Copy 0 bytes; we're done + if (end === start) return + if (target.length === 0 || source.length === 0) return + + // Fatal error conditions + assert(end >= start, 'sourceEnd < sourceStart') + assert(target_start >= 0 && target_start < target.length, + 'targetStart out of bounds') + assert(start >= 0 && start < source.length, 'sourceStart out of bounds') + assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) + end = this.length + if (target.length - target_start < end - start) + end = target.length - target_start + start + + var len = end - start + + if (len < 100 || !TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < len; i++) { + target[i + target_start] = this[i + start] + } + } else { + target._set(this.subarray(start, start + len), target_start) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + var res = '' + var tmp = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + if (buf[i] <= 0x7F) { + res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) + tmp = '' + } else { + tmp += '%' + buf[i].toString(16) + } + } + + return res + decodeUtf8Char(tmp) +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function binarySlice (buf, start, end) { + return asciiSlice(buf, start, end) +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; i++) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len; + if (start < 0) + start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) + end = 0 + } else if (end > len) { + end = len + } + + if (end < start) + end = start + + if (TYPED_ARRAY_SUPPORT) { + return Buffer._augment(this.subarray(start, end)) + } else { + var sliceLen = end - start + var newBuf = new Buffer(sliceLen, undefined, true) + for (var i = 0; i < sliceLen; i++) { + newBuf[i] = this[i + start] + } + return newBuf + } +} + +// `get` will be removed in Node 0.13+ +Buffer.prototype.get = function (offset) { + console.log('.get() is deprecated. Access using array indexes instead.') + return this.readUInt8(offset) +} + +// `set` will be removed in Node 0.13+ +Buffer.prototype.set = function (v, offset) { + console.log('.set() is deprecated. Access using array indexes instead.') + return this.writeUInt8(v, offset) +} + +Buffer.prototype.readUInt8 = function (offset, noAssert) { + if (!noAssert) { + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset < this.length, 'Trying to read beyond buffer length') + } + + if (offset >= this.length) + return + + return this[offset] +} + +function readUInt16 (buf, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') + } + + var len = buf.length + if (offset >= len) + return + + var val + if (littleEndian) { + val = buf[offset] + if (offset + 1 < len) + val |= buf[offset + 1] << 8 + } else { + val = buf[offset] << 8 + if (offset + 1 < len) + val |= buf[offset + 1] + } + return val +} + +Buffer.prototype.readUInt16LE = function (offset, noAssert) { + return readUInt16(this, offset, true, noAssert) +} + +Buffer.prototype.readUInt16BE = function (offset, noAssert) { + return readUInt16(this, offset, false, noAssert) +} + +function readUInt32 (buf, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') + } + + var len = buf.length + if (offset >= len) + return + + var val + if (littleEndian) { + if (offset + 2 < len) + val = buf[offset + 2] << 16 + if (offset + 1 < len) + val |= buf[offset + 1] << 8 + val |= buf[offset] + if (offset + 3 < len) + val = val + (buf[offset + 3] << 24 >>> 0) + } else { + if (offset + 1 < len) + val = buf[offset + 1] << 16 + if (offset + 2 < len) + val |= buf[offset + 2] << 8 + if (offset + 3 < len) + val |= buf[offset + 3] + val = val + (buf[offset] << 24 >>> 0) + } + return val +} + +Buffer.prototype.readUInt32LE = function (offset, noAssert) { + return readUInt32(this, offset, true, noAssert) +} + +Buffer.prototype.readUInt32BE = function (offset, noAssert) { + return readUInt32(this, offset, false, noAssert) +} + +Buffer.prototype.readInt8 = function (offset, noAssert) { + if (!noAssert) { + assert(offset !== undefined && offset !== null, + 'missing offset') + assert(offset < this.length, 'Trying to read beyond buffer length') + } + + if (offset >= this.length) + return + + var neg = this[offset] & 0x80 + if (neg) + return (0xff - this[offset] + 1) * -1 + else + return this[offset] +} + +function readInt16 (buf, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') + } + + var len = buf.length + if (offset >= len) + return + + var val = readUInt16(buf, offset, littleEndian, true) + var neg = val & 0x8000 + if (neg) + return (0xffff - val + 1) * -1 + else + return val +} + +Buffer.prototype.readInt16LE = function (offset, noAssert) { + return readInt16(this, offset, true, noAssert) +} + +Buffer.prototype.readInt16BE = function (offset, noAssert) { + return readInt16(this, offset, false, noAssert) +} + +function readInt32 (buf, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') + } + + var len = buf.length + if (offset >= len) + return + + var val = readUInt32(buf, offset, littleEndian, true) + var neg = val & 0x80000000 + if (neg) + return (0xffffffff - val + 1) * -1 + else + return val +} + +Buffer.prototype.readInt32LE = function (offset, noAssert) { + return readInt32(this, offset, true, noAssert) +} + +Buffer.prototype.readInt32BE = function (offset, noAssert) { + return readInt32(this, offset, false, noAssert) +} + +function readFloat (buf, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') + } + + return ieee754.read(buf, offset, littleEndian, 23, 4) +} + +Buffer.prototype.readFloatLE = function (offset, noAssert) { + return readFloat(this, offset, true, noAssert) +} + +Buffer.prototype.readFloatBE = function (offset, noAssert) { + return readFloat(this, offset, false, noAssert) +} + +function readDouble (buf, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset + 7 < buf.length, 'Trying to read beyond buffer length') + } + + return ieee754.read(buf, offset, littleEndian, 52, 8) +} + +Buffer.prototype.readDoubleLE = function (offset, noAssert) { + return readDouble(this, offset, true, noAssert) +} + +Buffer.prototype.readDoubleBE = function (offset, noAssert) { + return readDouble(this, offset, false, noAssert) +} + +Buffer.prototype.writeUInt8 = function (value, offset, noAssert) { + if (!noAssert) { + assert(value !== undefined && value !== null, 'missing value') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset < this.length, 'trying to write beyond buffer length') + verifuint(value, 0xff) + } + + if (offset >= this.length) return + + this[offset] = value + return offset + 1 +} + +function writeUInt16 (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(value !== undefined && value !== null, 'missing value') + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 1 < buf.length, 'trying to write beyond buffer length') + verifuint(value, 0xffff) + } + + var len = buf.length + if (offset >= len) + return + + for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) { + buf[offset + i] = + (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } + return offset + 2 +} + +Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) { + return writeUInt16(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) { + return writeUInt16(this, value, offset, false, noAssert) +} + +function writeUInt32 (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(value !== undefined && value !== null, 'missing value') + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 3 < buf.length, 'trying to write beyond buffer length') + verifuint(value, 0xffffffff) + } + + var len = buf.length + if (offset >= len) + return + + for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) { + buf[offset + i] = + (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } + return offset + 4 +} + +Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) { + return writeUInt32(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) { + return writeUInt32(this, value, offset, false, noAssert) +} + +Buffer.prototype.writeInt8 = function (value, offset, noAssert) { + if (!noAssert) { + assert(value !== undefined && value !== null, 'missing value') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset < this.length, 'Trying to write beyond buffer length') + verifsint(value, 0x7f, -0x80) + } + + if (offset >= this.length) + return + + if (value >= 0) + this.writeUInt8(value, offset, noAssert) + else + this.writeUInt8(0xff + value + 1, offset, noAssert) + return offset + 1 +} + +function writeInt16 (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(value !== undefined && value !== null, 'missing value') + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 1 < buf.length, 'Trying to write beyond buffer length') + verifsint(value, 0x7fff, -0x8000) + } + + var len = buf.length + if (offset >= len) + return + + if (value >= 0) + writeUInt16(buf, value, offset, littleEndian, noAssert) + else + writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert) + return offset + 2 +} + +Buffer.prototype.writeInt16LE = function (value, offset, noAssert) { + return writeInt16(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeInt16BE = function (value, offset, noAssert) { + return writeInt16(this, value, offset, false, noAssert) +} + +function writeInt32 (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(value !== undefined && value !== null, 'missing value') + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') + verifsint(value, 0x7fffffff, -0x80000000) + } + + var len = buf.length + if (offset >= len) + return + + if (value >= 0) + writeUInt32(buf, value, offset, littleEndian, noAssert) + else + writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert) + return offset + 4 +} + +Buffer.prototype.writeInt32LE = function (value, offset, noAssert) { + return writeInt32(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeInt32BE = function (value, offset, noAssert) { + return writeInt32(this, value, offset, false, noAssert) +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(value !== undefined && value !== null, 'missing value') + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') + verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + + var len = buf.length + if (offset >= len) + return + + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + assert(value !== undefined && value !== null, 'missing value') + assert(typeof littleEndian === 'boolean', 'missing or invalid endian') + assert(offset !== undefined && offset !== null, 'missing offset') + assert(offset + 7 < buf.length, + 'Trying to write beyond buffer length') + verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + + var len = buf.length + if (offset >= len) + return + + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function (value, start, end) { + if (!value) value = 0 + if (!start) start = 0 + if (!end) end = this.length + + assert(end >= start, 'end < start') + + // Fill 0 bytes; we're done + if (end === start) return + if (this.length === 0) return + + assert(start >= 0 && start < this.length, 'start out of bounds') + assert(end >= 0 && end <= this.length, 'end out of bounds') + + var i + if (typeof value === 'number') { + for (i = start; i < end; i++) { + this[i] = value + } + } else { + var bytes = utf8ToBytes(value.toString()) + var len = bytes.length + for (i = start; i < end; i++) { + this[i] = bytes[i % len] + } + } + + return this +} + +Buffer.prototype.inspect = function () { + var out = [] + var len = this.length + for (var i = 0; i < len; i++) { + out[i] = toHex(this[i]) + if (i === exports.INSPECT_MAX_BYTES) { + out[i + 1] = '...' + break + } + } + return '' +} + +/** + * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. + * Added in Node 0.12. Only available in browsers that support ArrayBuffer. + */ +Buffer.prototype.toArrayBuffer = function () { + if (typeof Uint8Array !== 'undefined') { + if (TYPED_ARRAY_SUPPORT) { + return (new Buffer(this)).buffer + } else { + var buf = new Uint8Array(this.length) + for (var i = 0, len = buf.length; i < len; i += 1) { + buf[i] = this[i] + } + return buf.buffer + } + } else { + throw new Error('Buffer.toArrayBuffer not supported in this browser') + } +} + +// HELPER FUNCTIONS +// ================ + +var BP = Buffer.prototype + +/** + * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods + */ +Buffer._augment = function (arr) { + arr._isBuffer = true + + // save reference to original Uint8Array get/set methods before overwriting + arr._get = arr.get + arr._set = arr.set + + // deprecated, will be removed in node 0.13+ + arr.get = BP.get + arr.set = BP.set + + arr.write = BP.write + arr.toString = BP.toString + arr.toLocaleString = BP.toString + arr.toJSON = BP.toJSON + arr.equals = BP.equals + arr.compare = BP.compare + arr.copy = BP.copy + arr.slice = BP.slice + arr.readUInt8 = BP.readUInt8 + arr.readUInt16LE = BP.readUInt16LE + arr.readUInt16BE = BP.readUInt16BE + arr.readUInt32LE = BP.readUInt32LE + arr.readUInt32BE = BP.readUInt32BE + arr.readInt8 = BP.readInt8 + arr.readInt16LE = BP.readInt16LE + arr.readInt16BE = BP.readInt16BE + arr.readInt32LE = BP.readInt32LE + arr.readInt32BE = BP.readInt32BE + arr.readFloatLE = BP.readFloatLE + arr.readFloatBE = BP.readFloatBE + arr.readDoubleLE = BP.readDoubleLE + arr.readDoubleBE = BP.readDoubleBE + arr.writeUInt8 = BP.writeUInt8 + arr.writeUInt16LE = BP.writeUInt16LE + arr.writeUInt16BE = BP.writeUInt16BE + arr.writeUInt32LE = BP.writeUInt32LE + arr.writeUInt32BE = BP.writeUInt32BE + arr.writeInt8 = BP.writeInt8 + arr.writeInt16LE = BP.writeInt16LE + arr.writeInt16BE = BP.writeInt16BE + arr.writeInt32LE = BP.writeInt32LE + arr.writeInt32BE = BP.writeInt32BE + arr.writeFloatLE = BP.writeFloatLE + arr.writeFloatBE = BP.writeFloatBE + arr.writeDoubleLE = BP.writeDoubleLE + arr.writeDoubleBE = BP.writeDoubleBE + arr.fill = BP.fill + arr.inspect = BP.inspect + arr.toArrayBuffer = BP.toArrayBuffer + + return arr +} + +var INVALID_BASE64_RE = /[^+\/0-9A-z]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function isArray (subject) { + return (Array.isArray || function (subject) { + return Object.prototype.toString.call(subject) === '[object Array]' + })(subject) +} + +function isArrayish (subject) { + return isArray(subject) || Buffer.isBuffer(subject) || + subject && typeof subject === 'object' && + typeof subject.length === 'number' +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + var b = str.charCodeAt(i) + if (b <= 0x7F) { + byteArray.push(b) + } else { + var start = i + if (b >= 0xD800 && b <= 0xDFFF) i++ + var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%') + for (var j = 0; j < h.length; j++) { + byteArray.push(parseInt(h[j], 16)) + } + } + } + return byteArray +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; i++) { + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(str) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; i++) { + if ((i + offset >= dst.length) || (i >= src.length)) + break + dst[i + offset] = src[i] + } + return i +} + +function decodeUtf8Char (str) { + try { + return decodeURIComponent(str) + } catch (err) { + return String.fromCharCode(0xFFFD) // UTF 8 invalid char + } +} + +/* + * We have to make sure that the value is a valid integer. This means that it + * is non-negative. It has no fractional component and that it does not + * exceed the maximum allowed value. + */ +function verifuint (value, max) { + assert(typeof value === 'number', 'cannot write a non-number as a number') + assert(value >= 0, 'specified a negative value for writing an unsigned value') + assert(value <= max, 'value is larger than maximum value for type') + assert(Math.floor(value) === value, 'value has a fractional component') +} + +function verifsint (value, max, min) { + assert(typeof value === 'number', 'cannot write a non-number as a number') + assert(value <= max, 'value larger than maximum allowed value') + assert(value >= min, 'value smaller than minimum allowed value') + assert(Math.floor(value) === value, 'value has a fractional component') +} + +function verifIEEE754 (value, max, min) { + assert(typeof value === 'number', 'cannot write a non-number as a number') + assert(value <= max, 'value larger than maximum allowed value') + assert(value >= min, 'value smaller than minimum allowed value') +} + +function assert (test, message) { + if (!test) throw new Error(message || 'Failed assertion') +} + +},{"base64-js":43,"ieee754":44}],43:[function(require,module,exports){ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS) + return 62 // '+' + if (code === SLASH) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],44:[function(require,module,exports){ +exports.read = function(buffer, offset, isLE, mLen, nBytes) { + var e, m, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = isLE ? (nBytes - 1) : 0, + d = isLE ? -1 : 1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = isLE ? 0 : (nBytes - 1), + d = isLE ? 1 : -1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +},{}],45:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + 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 { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],46:[function(require,module,exports){ +// shim for using process in browser + +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'); +} + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +},{}],47:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],48:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +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; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + 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]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + 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; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +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] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + 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) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + 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 = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + 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'); + // For some reason typeof null is "object", so special case here. + 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]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +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' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./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']; + +// 26 Feb 16:19:34 +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(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + 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,require("JkpR2F"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./support/isBuffer":47,"JkpR2F":46,"inherits":45}],49:[function(require,module,exports){ (function (sinonChai) { "use strict"; @@ -8475,7 +8475,7 @@ var sinon = (function (formatio) { return sinon; }(typeof formatio == "object" && formatio)); -},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,"formatio":63,"util":16}],51:[function(require,module,exports){ +},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,"formatio":63,"util":48}],51:[function(require,module,exports){ (function (global){ /** * @depend ../sinon.js @@ -9015,8 +9015,8 @@ var sinon = (function (formatio) { } }(typeof sinon == "object" && sinon || null)); -}).call(this,require("FWaASH")) -},{"../sinon":50,"FWaASH":14}],53:[function(require,module,exports){ +}).call(this,require("JkpR2F")) +},{"../sinon":50,"JkpR2F":46}],53:[function(require,module,exports){ /** * @depend ../sinon.js * @depend match.js @@ -13502,7 +13502,7 @@ describe "JsonYatta", -> */ -},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,"chai":17,"sinon":50,"sinon-chai":49,"underscore":65}],67:[function(require,module,exports){ +},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,"chai":10,"sinon":50,"sinon-chai":49,"underscore":65}],67:[function(require,module,exports){ var Connector_uninitialized, Yatta, chai, expect, should, sinon, sinonChai, _; chai = require('chai'); @@ -13665,7 +13665,7 @@ describe "TextYatta", -> */ -},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,"chai":17,"sinon":50,"sinon-chai":49,"underscore":65}],68:[function(require,module,exports){ +},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,"chai":10,"sinon":50,"sinon-chai":49,"underscore":65}],68:[function(require,module,exports){ var Connector_uninitialized, Test, Yatta, chai, expect, should, sinon, sinonChai, _, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; @@ -13695,9 +13695,9 @@ Test = (function() { this.generateReplaceOp = __bind(this.generateReplaceOp, this); this.generateInsertOp = __bind(this.generateInsertOp, this); this.number_of_test_cases_multiplier = 1; - this.repeat_this = 10 * this.number_of_test_cases_multiplier; - this.doSomething_amount = 200 * this.number_of_test_cases_multiplier; - this.number_of_engines = 12 + this.number_of_test_cases_multiplier - 1; + this.repeat_this = 1 * this.number_of_test_cases_multiplier; + this.doSomething_amount = 5000 * this.number_of_test_cases_multiplier; + this.number_of_engines = 10 + this.number_of_test_cases_multiplier - 1; this.time = 0; this.ops = 0; this.time_now = 0; @@ -13800,7 +13800,7 @@ Test = (function() { this.ops += number_of_created_operations * this.users.length; ops_per_msek = Math.floor(this.ops / this.time); if (test_number != null) { - console.log(("" + test_number + "/" + this.repeat_this + ": Every collaborator (" + this.users.length + ") applied " + this.number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek).")); + console.log(("" + test_number + "/" + this.repeat_this + ": Every collaborator (" + this.users.length + ") applied " + number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek).")); } _results = []; for (i = _j = 0, _ref1 = this.users.length - 1; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) { @@ -13900,10 +13900,16 @@ describe("JsonYatta", function() { this.yTest.getSomeUser().val('b', { 'a': {} }); + this.yTest.getSomeUser().val('c', { + 'a': 'c' + }); this.yTest.getSomeUser().val('c', { 'a': 'b' }); - return this.yTest.compareAll(); + this.yTest.compareAll(); + this.yTest.getSomeUser().value.a.a.q.insertText(0, 'AAA'); + this.yTest.compareAll(); + return expect(this.yTest.getSomeUser().value.a.a.q.val()).to.equal("AAAdtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"); }); it("handles some immutable tests", function() { this.yTest.getSomeUser().val('string', "text", "immutable"); @@ -13922,4 +13928,5 @@ describe("JsonYatta", function() { }); -},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,"chai":17,"sinon":50,"sinon-chai":49,"underscore":65}]},{},[66,67,68]); \ No newline at end of file +},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,"chai":10,"sinon":50,"sinon-chai":49,"underscore":65}]},{},[66,67,68]) +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvZ3J1bnQtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL2xpYi9Db25uZWN0b3JzL1Rlc3RDb25uZWN0b3IuY29mZmVlIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL2xpYi9FbmdpbmUuY29mZmVlIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL2xpYi9GcmFtZXdvcmtzL0pzb25ZYXR0YS5jb2ZmZWUiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbGliL0ZyYW1ld29ya3MvVGV4dFlhdHRhLmNvZmZlZSIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9saWIvSGlzdG9yeUJ1ZmZlci5jb2ZmZWUiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbGliL1R5cGVzL0Jhc2ljVHlwZXMuY29mZmVlIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL2xpYi9UeXBlcy9Kc29uVHlwZXMuY29mZmVlIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL2xpYi9UeXBlcy9TdHJ1Y3R1cmVkVHlwZXMuY29mZmVlIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL2xpYi9UeXBlcy9UZXh0VHlwZXMuY29mZmVlIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2luZGV4LmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2Fzc2VydGlvbi5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9jb25maWcuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvY29yZS9hc3NlcnRpb25zLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL2ludGVyZmFjZS9hc3NlcnQuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvaW50ZXJmYWNlL2V4cGVjdC5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS9pbnRlcmZhY2Uvc2hvdWxkLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9hZGRNZXRob2QuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvYWRkUHJvcGVydHkuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZmxhZy5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRBY3R1YWwuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZ2V0RW51bWVyYWJsZVByb3BlcnRpZXMuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvZ2V0TWVzc2FnZS5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXROYW1lLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2dldFBhdGhWYWx1ZS5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9nZXRQcm9wZXJ0aWVzLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2luZGV4LmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL2luc3BlY3QuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb2JqRGlzcGxheS5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy9vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZVByb3BlcnR5LmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL2xpYi9jaGFpL3V0aWxzL3Rlc3QuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvY2hhaS9saWIvY2hhaS91dGlscy90eXBlLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL25vZGVfbW9kdWxlcy9hc3NlcnRpb24tZXJyb3IvaW5kZXguanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbm9kZV9tb2R1bGVzL2RlZXAtZXFsL2luZGV4LmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL25vZGVfbW9kdWxlcy9kZWVwLWVxbC9saWIvZXFsLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9jaGFpL25vZGVfbW9kdWxlcy9kZWVwLWVxbC9ub2RlX21vZHVsZXMvdHlwZS1kZXRlY3QvaW5kZXguanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2NoYWkvbm9kZV9tb2R1bGVzL2RlZXAtZXFsL25vZGVfbW9kdWxlcy90eXBlLWRldGVjdC9saWIvdHlwZS5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvZ3J1bnQtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9ncnVudC1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9idWZmZXIvbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9saWIvYjY0LmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9ncnVudC1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9idWZmZXIvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2dydW50LWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL2dydW50LWJyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvZ3J1bnQtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvZ3J1bnQtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9zaW5vbi1jaGFpL2xpYi9zaW5vbi1jaGFpLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9zaW5vbi9saWIvc2lub24uanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL3Npbm9uL2xpYi9zaW5vbi9hc3NlcnQuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL3Npbm9uL2xpYi9zaW5vbi9iZWhhdmlvci5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvc2lub24vbGliL3Npbm9uL2NhbGwuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL3Npbm9uL2xpYi9zaW5vbi9jb2xsZWN0aW9uLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9zaW5vbi9saWIvc2lub24vbWF0Y2guanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL3Npbm9uL2xpYi9zaW5vbi9tb2NrLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9zaW5vbi9saWIvc2lub24vc2FuZGJveC5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvc2lub24vbGliL3Npbm9uL3NweS5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvc2lub24vbGliL3Npbm9uL3N0dWIuanMiLCIvaG9tZS9kbW9uYWQvRHJvcGJveC9ZYXR0YSEvbm9kZV9tb2R1bGVzL3Npbm9uL2xpYi9zaW5vbi90ZXN0LmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9zaW5vbi9saWIvc2lub24vdGVzdF9jYXNlLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL25vZGVfbW9kdWxlcy9zaW5vbi9saWIvc2lub24vdXRpbC9mYWtlX3RpbWVycy5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvc2lub24vbm9kZV9tb2R1bGVzL2Zvcm1hdGlvL2xpYi9mb3JtYXRpby5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvc2lub24vbm9kZV9tb2R1bGVzL2Zvcm1hdGlvL25vZGVfbW9kdWxlcy9zYW1zYW0vbGliL3NhbXNhbS5qcyIsIi9ob21lL2Rtb25hZC9Ecm9wYm94L1lhdHRhIS9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLmpzIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL3Rlc3QvSnNvbllhdHRhX3Rlc3QuY29mZmVlIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL3Rlc3QvVGV4dFlhdHRhX3Rlc3QuY29mZmVlIiwiL2hvbWUvZG1vbmFkL0Ryb3Bib3gvWWF0dGEhL3Rlc3QvWWF0dGFfdGVzdC5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNDQSxJQUFBLENBQUE7O0FBQUEsQ0FBQSxHQUFJLE9BQUEsQ0FBUSxZQUFSLENBQUosQ0FBQTs7QUFBQSxNQUVNLENBQUMsT0FBUCxHQUFpQixTQUFDLFNBQUQsR0FBQTtBQUtmLE1BQUEsYUFBQTtTQUFNO0FBQ1MsSUFBQSx1QkFBRSxNQUFGLEVBQVcsRUFBWCxFQUFnQixrQkFBaEIsR0FBQTtBQUNYLFVBQUEsZ0NBQUE7QUFBQSxNQURZLElBQUMsQ0FBQSxTQUFBLE1BQ2IsQ0FBQTtBQUFBLE1BRHFCLElBQUMsQ0FBQSxLQUFBLEVBQ3RCLENBQUE7QUFBQSxNQUQwQixJQUFDLENBQUEscUJBQUEsa0JBQzNCLENBQUE7QUFBQSxNQUFBLEtBQUEsR0FBUSxDQUFBLFNBQUEsS0FBQSxHQUFBO2VBQUEsU0FBQyxDQUFELEdBQUE7aUJBQ04sS0FBQyxDQUFBLElBQUQsQ0FBTSxDQUFOLEVBRE07UUFBQSxFQUFBO01BQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUFSLENBQUE7QUFBQSxNQUVBLElBQUMsQ0FBQSxrQkFBa0IsQ0FBQyxJQUFwQixDQUF5QixLQUF6QixDQUZBLENBQUE7QUFBQSxNQUlBLElBQUMsQ0FBQSxrQkFBRCxHQUFzQixFQUp0QixDQUFBO0FBQUEsTUFLQSx5QkFBQSxHQUE0QixDQUFBLFNBQUEsS0FBQSxHQUFBO2VBQUEsU0FBQyxDQUFELEdBQUE7aUJBQzFCLEtBQUMsQ0FBQSxrQkFBa0IsQ0FBQyxJQUFwQixDQUF5QixDQUF6QixFQUQwQjtRQUFBLEVBQUE7TUFBQSxDQUFBLENBQUEsQ0FBQSxJQUFBLENBTDVCLENBQUE7QUFBQSxNQU9BLElBQUMsQ0FBQSxrQkFBa0IsQ0FBQyxJQUFwQixDQUF5Qix5QkFBekIsQ0FQQSxDQUFBO0FBUUEsTUFBQSxJQUFHLENBQUEsc0JBQUssU0FBUyxDQUFFLGdCQUFYLEtBQXFCLENBQXRCLENBQVA7QUFDRSxRQUFBLElBQUMsQ0FBQSxNQUFNLENBQUMsUUFBUixDQUFpQixTQUFVLENBQUEsQ0FBQSxDQUFFLENBQUMsZ0JBQWIsQ0FBQSxDQUErQixDQUFDLE9BQWhDLENBQUEsQ0FBakIsQ0FBQSxDQURGO09BUkE7QUFBQSxNQVdBLElBQUMsQ0FBQSxVQUFELEdBQWMsRUFYZCxDQURXO0lBQUEsQ0FBYjs7QUFBQSw0QkFjQSxzQkFBQSxHQUF3QixTQUFBLEdBQUE7YUFDdEIsSUFBQyxDQUFBLG1CQURxQjtJQUFBLENBZHhCLENBQUE7O0FBQUEsNEJBaUJBLGNBQUEsR0FBZ0IsU0FBQSxHQUFBO0FBQ2QsTUFBQSxJQUFHLFNBQVMsQ0FBQyxNQUFWLEdBQW1CLENBQXRCO2VBQ0UsU0FBVSxDQUFBLENBQUEsQ0FBRSxDQUFDLGNBQWIsQ0FBQSxDQUE2QixDQUFDLE1BQTlCLENBQUEsRUFERjtPQURjO0lBQUEsQ0FqQmhCLENBQUE7O0FBQUEsNEJBcUJBLElBQUEsR0FBTSxTQUFDLENBQUQsR0FBQTtBQUNKLFVBQUEsd0JBQUE7QUFBQSxNQUFBLElBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU4sS0FBaUIsSUFBQyxDQUFBLEVBQUUsQ0FBQyxTQUFKLENBQUEsQ0FBbEIsQ0FBQSxJQUF1QyxDQUFDLE1BQUEsQ0FBQSxDQUFRLENBQUMsR0FBRyxDQUFDLFNBQWIsS0FBNEIsUUFBN0IsQ0FBMUM7QUFDRTthQUFBLGdEQUFBOytCQUFBO0FBQ0UsVUFBQSxJQUFHLElBQUksQ0FBQyxTQUFMLENBQUEsQ0FBQSxLQUFzQixJQUFDLENBQUEsRUFBRSxDQUFDLFNBQUosQ0FBQSxDQUF6QjswQkFDRSxJQUFJLENBQUMsWUFBTCxDQUFBLENBQW1CLENBQUMsT0FBcEIsQ0FBNEIsQ0FBNUIsR0FERjtXQUFBLE1BQUE7a0NBQUE7V0FERjtBQUFBO3dCQURGO09BREk7SUFBQSxDQXJCTixDQUFBOztBQUFBLDRCQTJCQSxPQUFBLEdBQVMsU0FBQyxDQUFELEdBQUE7QUFDUCxVQUFBLFlBQUE7O3VCQUEwQjtPQUExQjthQUNBLElBQUMsQ0FBQSxVQUFXLENBQUEsQ0FBQyxDQUFDLE9BQUYsQ0FBVSxDQUFDLElBQXZCLENBQTRCLENBQTVCLEVBRk87SUFBQSxDQTNCVCxDQUFBOztBQUFBLDRCQStCQSxRQUFBLEdBQVUsU0FBQyxJQUFELEdBQUE7QUFDUixVQUFBLElBQUE7QUFBQSxNQUFBLGtEQUFvQixDQUFFLGdCQUFuQixHQUE0QixDQUEvQjtlQUNFLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBUixDQUFnQixJQUFDLENBQUEsVUFBVyxDQUFBLElBQUEsQ0FBSyxDQUFDLEtBQWxCLENBQUEsQ0FBaEIsRUFERjtPQURRO0lBQUEsQ0EvQlYsQ0FBQTs7QUFBQSw0QkFtQ0EsY0FBQSxHQUFnQixTQUFBLEdBQUE7YUFDZCxJQUFDLENBQUEsUUFBRCxDQUFXLENBQUMsQ0FBQyxNQUFGLENBQVMsQ0FBVCxFQUFhLFNBQVMsQ0FBQyxNQUFWLEdBQWlCLENBQTlCLENBQVgsRUFEYztJQUFBLENBbkNoQixDQUFBOztBQUFBLDRCQXNDQSxRQUFBLEdBQVUsU0FBQSxHQUFBO0FBQ1IsVUFBQSxZQUFBO0FBQUE7QUFBQSxXQUFBLFNBQUE7c0JBQUE7QUFDRSxRQUFBLElBQUMsQ0FBQSxNQUFNLENBQUMsUUFBUixDQUFpQixHQUFqQixDQUFBLENBREY7QUFBQSxPQUFBO2FBRUEsSUFBQyxDQUFBLFVBQUQsR0FBYyxHQUhOO0lBQUEsQ0F0Q1YsQ0FBQTs7QUFBQSw0QkEwQ0EsSUFBQSxHQUFNLFNBQUEsR0FBQTtBQUNKLFlBQVUsSUFBQSxLQUFBLENBQU0sdUJBQU4sQ0FBVixDQURJO0lBQUEsQ0ExQ04sQ0FBQTs7eUJBQUE7O09BTmE7QUFBQSxDQUZqQixDQUFBOzs7O0FDR0EsSUFBQSxNQUFBOztBQUFBO0FBQ2UsRUFBQSxnQkFBRSxFQUFGLEVBQU8sTUFBUCxHQUFBO0FBQ1gsSUFEWSxJQUFDLENBQUEsS0FBQSxFQUNiLENBQUE7QUFBQSxJQURpQixJQUFDLENBQUEsU0FBQSxNQUNsQixDQUFBO0FBQUEsSUFBQSxJQUFDLENBQUEsZUFBRCxHQUFtQixFQUFuQixDQURXO0VBQUEsQ0FBYjs7QUFBQSxtQkFHQSxjQUFBLEdBQWdCLFNBQUMsSUFBRCxHQUFBO0FBQ2QsUUFBQSxVQUFBO0FBQUEsSUFBQSxVQUFBLEdBQWEsSUFBQyxDQUFBLE1BQU8sQ0FBQSxJQUFJLENBQUMsSUFBTCxDQUFyQixDQUFBO0FBQ0EsSUFBQSxJQUFHLGtCQUFIO2FBQ0UsVUFBQSxDQUFXLElBQVgsRUFERjtLQUFBLE1BQUE7QUFHRSxZQUFVLElBQUEsS0FBQSxDQUFPLDBDQUFBLEdBQXlDLElBQUksQ0FBQyxJQUE5QyxHQUFvRCxtQkFBcEQsR0FBc0UsQ0FBQSxJQUFJLENBQUMsU0FBTCxDQUFlLElBQWYsQ0FBQSxDQUF0RSxHQUEyRixHQUFsRyxDQUFWLENBSEY7S0FGYztFQUFBLENBSGhCLENBQUE7O0FBQUEsbUJBVUEsUUFBQSxHQUFVLFNBQUMsUUFBRCxHQUFBO0FBQ1IsUUFBQSxzQ0FBQTtBQUFBLElBQUEsR0FBQSxHQUFNLEVBQU4sQ0FBQTtBQUNBLFNBQUEsK0NBQUE7dUJBQUE7QUFDRSxNQUFBLEdBQUcsQ0FBQyxJQUFKLENBQVMsSUFBQyxDQUFBLGNBQUQsQ0FBZ0IsQ0FBaEIsQ0FBVCxDQUFBLENBREY7QUFBQSxLQURBO0FBR0EsU0FBQSw0Q0FBQTtrQkFBQTtBQUNFLE1BQUEsSUFBQyxDQUFBLEVBQUUsQ0FBQyxZQUFKLENBQWlCLENBQWpCLENBQUEsQ0FERjtBQUFBLEtBSEE7QUFLQSxTQUFBLDRDQUFBO2tCQUFBO0FBQ0UsTUFBQSxJQUFHLENBQUEsQ0FBSyxDQUFDLE9BQUYsQ0FBQSxDQUFQO0FBQ0UsUUFBQSxJQUFDLENBQUEsZUFBZSxDQUFDLElBQWpCLENBQXNCLENBQXRCLENBQUEsQ0FERjtPQURGO0FBQUEsS0FMQTtXQVFBLElBQUMsQ0FBQSxjQUFELENBQUEsRUFUUTtFQUFBLENBVlYsQ0FBQTs7QUFBQSxtQkFxQkEsT0FBQSxHQUFTLFNBQUMsT0FBRCxHQUFBO0FBRVAsUUFBQSxDQUFBO0FBQUEsSUFBQSxDQUFBLEdBQUksSUFBQyxDQUFBLGNBQUQsQ0FBZ0IsT0FBaEIsQ0FBSixDQUFBO0FBQUEsSUFDQSxJQUFDLENBQUEsRUFBRSxDQUFDLFlBQUosQ0FBaUIsQ0FBakIsQ0FEQSxDQUFBO0FBRUEsSUFBQSxJQUFHLENBQUEsQ0FBSyxDQUFDLE9BQUYsQ0FBQSxDQUFQO0FBQ0UsTUFBQSxJQUFDLENBQUEsZUFBZSxDQUFDLElBQWpCLENBQXNCLENBQXRCLENBQUEsQ0FERjtLQUZBO1dBSUEsSUFBQyxDQUFBLGNBQUQsQ0FBQSxFQU5PO0VBQUEsQ0FyQlQsQ0FBQTs7QUFBQSxtQkE2QkEsY0FBQSxHQUFnQixTQUFBLEdBQUE7QUFDZCxRQUFBLHFEQUFBO0FBQUE7V0FBTSxJQUFOLEdBQUE7QUFDRSxNQUFBLFVBQUEsR0FBYSxJQUFDLENBQUEsZUFBZSxDQUFDLE1BQTlCLENBQUE7QUFBQSxNQUNBLFdBQUEsR0FBYyxFQURkLENBQUE7QUFFQTtBQUFBLFdBQUEsMkNBQUE7c0JBQUE7QUFDRSxRQUFBLElBQUcsQ0FBQSxFQUFNLENBQUMsT0FBSCxDQUFBLENBQVA7QUFDRSxVQUFBLFdBQVcsQ0FBQyxJQUFaLENBQWlCLEVBQWpCLENBQUEsQ0FERjtTQURGO0FBQUEsT0FGQTtBQUFBLE1BS0EsSUFBQyxDQUFBLGVBQUQsR0FBbUIsV0FMbkIsQ0FBQTtBQU1BLE1BQUEsSUFBRyxJQUFDLENBQUEsZUFBZSxDQUFDLE1BQWpCLEtBQTJCLFVBQTlCO0FBQ0UsY0FERjtPQUFBLE1BQUE7OEJBQUE7T0FQRjtJQUFBLENBQUE7b0JBRGM7RUFBQSxDQTdCaEIsQ0FBQTs7Z0JBQUE7O0lBREYsQ0FBQTs7QUFBQSxNQTRDTSxDQUFDLE9BQVAsR0FBaUIsTUE1Q2pCLENBQUE7Ozs7QUNIQSxJQUFBLDBEQUFBOztBQUFBLHdCQUFBLEdBQTJCLE9BQUEsQ0FBUSwyQkFBUixDQUEzQixDQUFBOztBQUFBLGFBQ0EsR0FBZ0IsT0FBQSxDQUFRLHlCQUFSLENBRGhCLENBQUE7O0FBQUEsTUFFQSxHQUFTLE9BQUEsQ0FBUSxrQkFBUixDQUZULENBQUE7O0FBQUE7QUFZZSxFQUFBLG1CQUFDLE9BQUQsRUFBVSxTQUFWLEdBQUE7QUFDWCxRQUFBLGlDQUFBO0FBQUEsSUFBQSxJQUFDLENBQUEsRUFBRCxHQUFVLElBQUEsYUFBQSxDQUFjLE9BQWQsQ0FBVixDQUFBO0FBQUEsSUFDQSxVQUFBLEdBQWEsd0JBQUEsQ0FBeUIsSUFBQyxDQUFBLEVBQTFCLENBRGIsQ0FBQTtBQUFBLElBRUEsSUFBQyxDQUFBLE1BQUQsR0FBYyxJQUFBLE1BQUEsQ0FBTyxJQUFDLENBQUEsRUFBUixFQUFZLFVBQVUsQ0FBQyxNQUF2QixDQUZkLENBQUE7QUFBQSxJQUdBLElBQUMsQ0FBQSxTQUFELEdBQWlCLElBQUEsU0FBQSxDQUFVLElBQUMsQ0FBQSxNQUFYLEVBQW1CLElBQUMsQ0FBQSxFQUFwQixFQUF3QixVQUFVLENBQUMsa0JBQW5DLEVBQXVELElBQXZELENBSGpCLENBQUE7QUFBQSxJQUlBLFNBQUEsR0FBWSxJQUFDLENBQUEsU0FBUyxDQUFDLGNBQVgsQ0FBQSxDQUpaLENBQUE7QUFLQSxJQUFBLElBQU8saUJBQVA7QUFDRSxNQUFBLFVBQUEsR0FBaUIsSUFBQSxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQWpCLENBQTBCLElBQUMsQ0FBQSxFQUFFLENBQUMsMEJBQUosQ0FBQSxDQUExQixDQUFqQixDQUFBO0FBQUEsTUFDQSxJQUFDLENBQUEsRUFBRSxDQUFDLFlBQUosQ0FBaUIsVUFBakIsQ0FEQSxDQUFBO0FBQUEsTUFFQSxVQUFVLENBQUMsT0FBWCxDQUFBLENBRkEsQ0FBQTtBQUFBLE1BR0EsSUFBQyxDQUFBLFlBQUQsR0FBZ0IsVUFIaEIsQ0FERjtLQUFBLE1BQUE7QUFNRSxNQUFBLElBQUMsQ0FBQSxZQUFELEdBQWdCLElBQUMsQ0FBQSxFQUFFLENBQUMsWUFBSixDQUFpQixTQUFqQixDQUFoQixDQU5GO0tBTlc7RUFBQSxDQUFiOztBQUFBLHNCQWlCQSxjQUFBLEdBQWdCLFNBQUEsR0FBQTtXQUNkLElBQUMsQ0FBQSxhQURhO0VBQUEsQ0FqQmhCLENBQUE7O0FBQUEsc0JBdUJBLFNBQUEsR0FBVyxTQUFBLEdBQUE7V0FDVCxJQUFDLENBQUEsT0FEUTtFQUFBLENBdkJYLENBQUE7O0FBQUEsc0JBNkJBLFlBQUEsR0FBYyxTQUFBLEdBQUE7V0FDWixJQUFDLENBQUEsVUFEVztFQUFBLENBN0JkLENBQUE7O0FBQUEsc0JBbUNBLGdCQUFBLEdBQWtCLFNBQUEsR0FBQTtXQUNoQixJQUFDLENBQUEsR0FEZTtFQUFBLENBbkNsQixDQUFBOztBQUFBLHNCQXlDQSxpQkFBQSxHQUFtQixTQUFDLE9BQUQsR0FBQTtXQUNoQixJQUFDLENBQUEsWUFBWSxDQUFDLGlCQUFkLENBQWdDLE9BQWhDLEVBRGdCO0VBQUEsQ0F6Q25CLENBQUE7O0FBQUEsc0JBaURBLFNBQUEsR0FBVyxTQUFBLEdBQUE7V0FDVCxJQUFDLENBQUEsRUFBRSxDQUFDLFNBQUosQ0FBQSxFQURTO0VBQUEsQ0FqRFgsQ0FBQTs7QUFBQSxzQkF1REEsR0FBQSxHQUFNLFNBQUMsSUFBRCxFQUFPLE9BQVAsRUFBZ0IsT0FBaEIsR0FBQTtXQUNKLElBQUMsQ0FBQSxZQUFZLENBQUMsR0FBZCxDQUFrQixJQUFsQixFQUF3QixPQUF4QixFQUFpQyxPQUFqQyxFQURJO0VBQUEsQ0F2RE4sQ0FBQTs7QUFBQSxFQTZEQSxNQUFNLENBQUMsY0FBUCxDQUFzQixTQUFTLENBQUMsU0FBaEMsRUFBMkMsT0FBM0MsRUFDRTtBQUFBLElBQUEsR0FBQSxFQUFNLFNBQUEsR0FBQTthQUFHLElBQUMsQ0FBQSxZQUFZLENBQUMsTUFBakI7SUFBQSxDQUFOO0FBQUEsSUFDQSxHQUFBLEVBQU0sU0FBQyxDQUFELEdBQUE7QUFDSixVQUFBLHVCQUFBO0FBQUEsTUFBQSxJQUFHLENBQUMsQ0FBQyxXQUFGLEtBQWlCLEVBQUUsQ0FBQyxXQUF2QjtBQUNFO2FBQUEsV0FBQTs0QkFBQTtBQUNFLHdCQUFBLElBQUMsQ0FBQSxHQUFELENBQUssTUFBTCxFQUFhLEtBQWIsRUFBb0IsV0FBcEIsRUFBQSxDQURGO0FBQUE7d0JBREY7T0FBQSxNQUFBO0FBSUUsY0FBVSxJQUFBLEtBQUEsQ0FBTSxrQ0FBTixDQUFWLENBSkY7T0FESTtJQUFBLENBRE47R0FERixDQTdEQSxDQUFBOzttQkFBQTs7SUFaRixDQUFBOzs7RUFpRkEsTUFBTSxDQUFFLFNBQVIsR0FBb0I7Q0FqRnBCOztBQUFBLE1Ba0ZNLENBQUMsT0FBUCxHQUFpQixTQWxGakIsQ0FBQTs7OztBQ0FBLElBQUEsMERBQUE7O0FBQUEsd0JBQUEsR0FBMkIsT0FBQSxDQUFRLDJCQUFSLENBQTNCLENBQUE7O0FBQUEsYUFDQSxHQUFnQixPQUFBLENBQVEseUJBQVIsQ0FEaEIsQ0FBQTs7QUFBQSxNQUVBLEdBQVMsT0FBQSxDQUFRLGtCQUFSLENBRlQsQ0FBQTs7QUFBQTtBQVFlLEVBQUEsbUJBQUMsT0FBRCxFQUFVLFNBQVYsR0FBQTtBQUNYLFFBQUEsaUNBQUE7QUFBQSxJQUFBLElBQUMsQ0FBQSxFQUFELEdBQVUsSUFBQSxhQUFBLENBQWMsT0FBZCxDQUFWLENBQUE7QUFBQSxJQUNBLFVBQUEsR0FBYSx3QkFBQSxDQUF5QixJQUFDLENBQUEsRUFBMUIsQ0FEYixDQUFBO0FBQUEsSUFFQSxJQUFDLENBQUEsTUFBRCxHQUFjLElBQUEsTUFBQSxDQUFPLElBQUMsQ0FBQSxFQUFSLEVBQVksVUFBVSxDQUFDLE1BQXZCLENBRmQsQ0FBQTtBQUFBLElBR0EsSUFBQyxDQUFBLFNBQUQsR0FBaUIsSUFBQSxTQUFBLENBQVUsSUFBQyxDQUFBLE1BQVgsRUFBbUIsSUFBQyxDQUFBLEVBQXBCLEVBQXdCLFVBQVUsQ0FBQyxrQkFBbkMsQ0FIakIsQ0FBQTtBQUFBLElBSUEsU0FBQSxHQUFZLElBQUMsQ0FBQSxTQUFTLENBQUMsY0FBWCxDQUFBLENBSlosQ0FBQTtBQUtBLElBQUEsSUFBTyxpQkFBUDtBQUNFLE1BQUEsVUFBQSxHQUFpQixJQUFBLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBakIsQ0FBc0IsSUFBQyxDQUFBLEVBQUUsQ0FBQywwQkFBSixDQUFBLENBQXRCLENBQWpCLENBQUE7QUFBQSxNQUNBLElBQUMsQ0FBQSxFQUFFLENBQUMsWUFBSixDQUFpQixVQUFqQixDQURBLENBQUE7QUFBQSxNQUVBLFVBQVUsQ0FBQyxPQUFYLENBQUEsQ0FGQSxDQUFBO0FBQUEsTUFHQSxJQUFDLENBQUEsWUFBRCxHQUFnQixJQUFDLENBQUEsRUFBRSxDQUFDLFlBQUosQ0FBcUIsSUFBQSxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWpCLENBQWdDLFVBQWhDLEVBQTRDLElBQUMsQ0FBQSxFQUFFLENBQUMsMEJBQUosQ0FBQSxDQUE1QyxDQUFyQixDQUFrRyxDQUFDLE9BQW5HLENBQUEsQ0FIaEIsQ0FERjtLQUFBLE1BQUE7QUFNRSxNQUFBLElBQUMsQ0FBQSxZQUFELEdBQWdCLElBQUMsQ0FBQSxFQUFFLENBQUMsWUFBSixDQUFpQixTQUFqQixDQUFoQixDQU5GO0tBTlc7RUFBQSxDQUFiOztBQUFBLHNCQWNBLGNBQUEsR0FBZ0IsU0FBQSxHQUFBO1dBQ2QsSUFBQyxDQUFBLGFBRGE7RUFBQSxDQWRoQixDQUFBOztBQUFBLHNCQWlCQSxTQUFBLEdBQVcsU0FBQSxHQUFBO1dBQ1QsSUFBQyxDQUFBLE9BRFE7RUFBQSxDQWpCWCxDQUFBOztBQUFBLHNCQW9CQSxZQUFBLEdBQWMsU0FBQSxHQUFBO1dBQ1osSUFBQyxDQUFBLFVBRFc7RUFBQSxDQXBCZCxDQUFBOztBQUFBLHNCQXVCQSxnQkFBQSxHQUFrQixTQUFBLEdBQUE7V0FDaEIsSUFBQyxDQUFBLEdBRGU7RUFBQSxDQXZCbEIsQ0FBQTs7QUFBQSxzQkEwQkEsU0FBQSxHQUFXLFNBQUEsR0FBQTtXQUNULElBQUMsQ0FBQSxFQUFFLENBQUMsU0FBSixDQUFBLEVBRFM7RUFBQSxDQTFCWCxDQUFBOztBQUFBLHNCQTZCQSxHQUFBLEdBQUssU0FBQSxHQUFBO1dBQ0gsSUFBQyxDQUFBLFlBQVksQ0FBQyxHQUFkLENBQUEsQ0FBbUIsQ0FBQyxHQUFwQixDQUFBLEVBREc7RUFBQSxDQTdCTCxDQUFBOztBQUFBLHNCQWdDQSxVQUFBLEdBQVksU0FBQyxHQUFELEVBQU0sT0FBTixHQUFBO1dBQ1YsSUFBQyxDQUFBLFlBQVksQ0FBQyxHQUFkLENBQUEsQ0FBbUIsQ0FBQyxVQUFwQixDQUErQixHQUEvQixFQUFvQyxPQUFwQyxFQURVO0VBQUEsQ0FoQ1osQ0FBQTs7QUFBQSxzQkFtQ0EsVUFBQSxHQUFZLFNBQUMsR0FBRCxFQUFNLE1BQU4sR0FBQTtXQUNWLElBQUMsQ0FBQSxZQUFZLENBQUMsR0FBZCxDQUFBLENBQW1CLENBQUMsVUFBcEIsQ0FBK0IsR0FBL0IsRUFBb0MsTUFBcEMsRUFEVTtFQUFBLENBbkNaLENBQUE7O0FBQUEsc0JBc0NBLFdBQUEsR0FBYSxTQUFDLElBQUQsR0FBQTtXQUNYLElBQUMsQ0FBQSxZQUFZLENBQUMsR0FBZCxDQUFBLENBQW1CLENBQUMsV0FBcEIsQ0FBZ0MsSUFBaEMsRUFEVztFQUFBLENBdENiLENBQUE7O21CQUFBOztJQVJGLENBQUE7O0FBQUEsTUFrRE0sQ0FBQyxPQUFQLEdBQWlCLFNBbERqQixDQUFBOzs7O0FDS0EsSUFBQSxhQUFBOztBQUFBO0FBTWUsRUFBQSx1QkFBRSxPQUFGLEdBQUE7QUFDWCxJQURZLElBQUMsQ0FBQSxVQUFBLE9BQ2IsQ0FBQTtBQUFBLElBQUEsSUFBQyxDQUFBLGlCQUFELEdBQXFCLEVBQXJCLENBQUE7QUFBQSxJQUNBLElBQUMsQ0FBQSxNQUFELEdBQVUsRUFEVixDQUFBO0FBQUEsSUFFQSxJQUFDLENBQUEsZ0JBQUQsR0FBb0IsRUFGcEIsQ0FEVztFQUFBLENBQWI7O0FBQUEsMEJBUUEsU0FBQSxHQUFXLFNBQUEsR0FBQTtXQUNULElBQUMsQ0FBQSxRQURRO0VBQUEsQ0FSWCxDQUFBOztBQUFBLDBCQWNBLG1CQUFBLEdBQXFCLFNBQUEsR0FBQTtBQUNuQixRQUFBLG9CQUFBO0FBQUEsSUFBQSxHQUFBLEdBQU0sRUFBTixDQUFBO0FBQ0E7QUFBQSxTQUFBLFlBQUE7dUJBQUE7QUFDRSxNQUFBLEdBQUksQ0FBQSxJQUFBLENBQUosR0FBWSxHQUFaLENBREY7QUFBQSxLQURBO1dBR0EsSUFKbUI7RUFBQSxDQWRyQixDQUFBOztBQUFBLDBCQW9CQSxPQUFBLEdBQVMsU0FBQSxHQUFBO0FBQ1AsUUFBQSxxQ0FBQTtBQUFBLElBQUEsSUFBQSxHQUFPLEVBQVAsQ0FBQTtBQUNBO0FBQUEsU0FBQSxjQUFBOzBCQUFBO0FBQ0UsV0FBQSxnQkFBQTsyQkFBQTtBQUNFLFFBQUEsSUFBRyxDQUFBLEtBQUksQ0FBTSxRQUFBLENBQVMsUUFBVCxDQUFOLENBQVA7QUFDRSxVQUFBLElBQUksQ0FBQyxJQUFMLENBQVUsQ0FBQyxDQUFDLE9BQUYsQ0FBQSxDQUFWLENBQUEsQ0FERjtTQURGO0FBQUEsT0FERjtBQUFBLEtBREE7V0FLQSxLQU5PO0VBQUEsQ0FwQlQsQ0FBQTs7QUFBQSwwQkFpQ0EsMEJBQUEsR0FBNEIsU0FBQyxPQUFELEdBQUE7QUFDMUIsUUFBQSxHQUFBO0FBQUEsSUFBQSxJQUFPLGVBQVA7QUFDRSxNQUFBLE9BQUEsR0FBVSxJQUFDLENBQUEsT0FBWCxDQURGO0tBQUE7QUFFQSxJQUFBLElBQU8sdUNBQVA7QUFDRSxNQUFBLElBQUMsQ0FBQSxpQkFBa0IsQ0FBQSxPQUFBLENBQW5CLEdBQThCLENBQTlCLENBREY7S0FGQTtBQUFBLElBSUEsR0FBQSxHQUFNO0FBQUEsTUFDRixTQUFBLEVBQVksT0FEVjtBQUFBLE1BRUYsV0FBQSxFQUFjLElBQUMsQ0FBQSxpQkFBa0IsQ0FBQSxPQUFBLENBRi9CO0tBSk4sQ0FBQTtBQUFBLElBUUEsSUFBQyxDQUFBLGlCQUFrQixDQUFBLE9BQUEsQ0FBbkIsRUFSQSxDQUFBO1dBU0EsSUFWMEI7RUFBQSxDQWpDNUIsQ0FBQTs7QUFBQSwwQkE4Q0EsWUFBQSxHQUFjLFNBQUMsR0FBRCxHQUFBO0FBQ1osUUFBQSxJQUFBO0FBQUEsSUFBQSxJQUFHLEdBQUEsWUFBZSxNQUFsQjs2REFDd0IsQ0FBQSxHQUFHLENBQUMsU0FBSixXQUR4QjtLQUFBLE1BRUssSUFBTyxXQUFQO0FBQUE7S0FBQSxNQUFBO0FBRUgsWUFBVSxJQUFBLEtBQUEsQ0FBTSxrQ0FBTixDQUFWLENBRkc7S0FITztFQUFBLENBOUNkLENBQUE7O0FBQUEsMEJBdURBLFlBQUEsR0FBYyxTQUFDLENBQUQsR0FBQTtBQUNaLElBQUEsSUFBTyw4QkFBUDtBQUNFLE1BQUEsSUFBQyxDQUFBLE1BQU8sQ0FBQSxDQUFDLENBQUMsT0FBRixDQUFSLEdBQXFCLEVBQXJCLENBREY7S0FBQTtBQUVBLElBQUEsSUFBTyx5Q0FBUDtBQUNFLE1BQUEsSUFBQyxDQUFBLGlCQUFrQixDQUFBLENBQUMsQ0FBQyxPQUFGLENBQW5CLEdBQWdDLENBQWhDLENBREY7S0FGQTtBQU1BLElBQUEsSUFBRywyQ0FBSDtBQUNFLFlBQVUsSUFBQSxLQUFBLENBQU0sb0NBQU4sQ0FBVixDQURGO0tBTkE7QUFBQSxJQVFBLElBQUMsQ0FBQSxNQUFPLENBQUEsQ0FBQyxDQUFDLE9BQUYsQ0FBVyxDQUFBLENBQUMsQ0FBQyxTQUFGLENBQW5CLEdBQWtDLENBUmxDLENBQUE7QUFTQSxJQUFBLElBQUcsTUFBQSxDQUFBLENBQVEsQ0FBQyxTQUFULEtBQXNCLFFBQXRCLElBQW1DLENBQUMsQ0FBQyxPQUFGLEtBQWUsSUFBQyxDQUFBLFNBQUQsQ0FBQSxDQUFyRDtBQUNFLE1BQUEsSUFBQyxDQUFBLGlCQUFrQixDQUFBLENBQUMsQ0FBQyxPQUFGLENBQW5CLEVBQUEsQ0FERjtLQVRBO1dBV0EsRUFaWTtFQUFBLENBdkRkLENBQUE7O3VCQUFBOztJQU5GLENBQUE7O0FBQUEsTUEyRU0sQ0FBQyxPQUFQLEdBQWlCLGFBM0VqQixDQUFBOzs7O0FDTkEsSUFBQTtpU0FBQTs7QUFBQSxNQUFNLENBQUMsT0FBUCxHQUFpQixTQUFDLEVBQUQsR0FBQTtBQUVmLE1BQUEsaUZBQUE7QUFBQSxFQUFBLE1BQUEsR0FBUyxFQUFULENBQUE7QUFBQSxFQUNBLGtCQUFBLEdBQXFCLEVBRHJCLENBQUE7QUFBQSxFQWFNO0FBTVMsSUFBQSxtQkFBQyxHQUFELEdBQUE7QUFDWCxNQUFBLElBQU8sV0FBUDtBQUNFLFFBQUEsR0FBQSxHQUFNLEVBQUUsQ0FBQywwQkFBSCxDQUFBLENBQU4sQ0FERjtPQUFBO0FBQUEsTUFHYSxJQUFDLENBQUEsY0FBWixVQURGLEVBRWdCLElBQUMsQ0FBQSxnQkFBZixZQUpGLENBRFc7SUFBQSxDQUFiOztBQUFBLHdCQVdBLE1BQUEsR0FBUSxTQUFBLEdBQUE7YUFDTjtBQUFBLFFBQUUsU0FBQSxFQUFXLElBQUMsQ0FBQSxPQUFkO0FBQUEsUUFBdUIsV0FBQSxFQUFhLElBQUMsQ0FBQSxTQUFyQztRQURNO0lBQUEsQ0FYUixDQUFBOztBQUFBLHdCQWtCQSxPQUFBLEdBQVMsU0FBQSxHQUFBO0FBQ1AsVUFBQSxXQUFBO0FBQUEsTUFBQSxJQUFDLENBQUEsV0FBRCxHQUFlLElBQWYsQ0FBQTtBQUNBLFdBQUEseURBQUE7bUNBQUE7QUFDRSxRQUFBLENBQUEsQ0FBRSxJQUFDLENBQUEsT0FBRCxDQUFBLENBQUYsQ0FBQSxDQURGO0FBQUEsT0FEQTthQUdBLEtBSk87SUFBQSxDQWxCVCxDQUFBOztBQUFBLHdCQTBDQSxhQUFBLEdBQWUsU0FBQyxJQUFELEVBQU8sRUFBUCxHQUFBO0FBT2IsTUFBQSxJQUFHLDBDQUFIO2VBRUUsSUFBRSxDQUFBLElBQUEsQ0FBRixHQUFVLEdBRlo7T0FBQSxNQUdLLElBQUcsVUFBSDs7VUFFSCxJQUFDLENBQUEsWUFBYTtTQUFkO2VBQ0EsSUFBQyxDQUFBLFNBQVUsQ0FBQSxJQUFBLENBQVgsR0FBbUIsR0FIaEI7T0FWUTtJQUFBLENBMUNmLENBQUE7O0FBQUEsd0JBZ0VBLHVCQUFBLEdBQXlCLFNBQUEsR0FBQTtBQUN2QixVQUFBLCtDQUFBO0FBQUEsTUFBQSxjQUFBLEdBQWlCLEVBQWpCLENBQUE7QUFBQSxNQUNBLE9BQUEsR0FBVSxJQURWLENBQUE7QUFFQTtBQUFBLFdBQUEsWUFBQTs0QkFBQTtBQUNFLFFBQUEsRUFBQSxHQUFLLEVBQUUsQ0FBQyxZQUFILENBQWdCLE1BQWhCLENBQUwsQ0FBQTtBQUNBLFFBQUEsSUFBRyxFQUFIO0FBQ0UsVUFBQSxJQUFFLENBQUEsSUFBQSxDQUFGLEdBQVUsRUFBVixDQURGO1NBQUEsTUFBQTtBQUdFLFVBQUEsY0FBZSxDQUFBLElBQUEsQ0FBZixHQUF1QixNQUF2QixDQUFBO0FBQUEsVUFDQSxPQUFBLEdBQVUsS0FEVixDQUhGO1NBRkY7QUFBQSxPQUZBO0FBQUEsTUFTQSxNQUFBLENBQUEsSUFBUSxDQUFBLFNBVFIsQ0FBQTtBQVVBLE1BQUEsSUFBRyxDQUFBLE9BQUg7QUFDRSxRQUFBLElBQUMsQ0FBQSxTQUFELEdBQWEsY0FBYixDQURGO09BVkE7YUFZQSxRQWJ1QjtJQUFBLENBaEV6QixDQUFBOztxQkFBQTs7TUFuQkYsQ0FBQTtBQUFBLEVBdUdNO0FBTUosNkJBQUEsQ0FBQTs7QUFBYSxJQUFBLGdCQUFDLEdBQUQsRUFBTSxPQUFOLEdBQUE7QUFDWCxNQUFBLElBQUMsQ0FBQSxhQUFELENBQWUsU0FBZixFQUEwQixPQUExQixDQUFBLENBQUE7QUFBQSxNQUNBLHdDQUFNLEdBQU4sQ0FEQSxDQURXO0lBQUEsQ0FBYjs7QUFBQSxxQkFTQSxPQUFBLEdBQVMsU0FBQSxHQUFBO2FBQ1A7QUFBQSxRQUNFLE1BQUEsRUFBUSxRQURWO0FBQUEsUUFFRSxLQUFBLEVBQU8sSUFBQyxDQUFBLE1BQUQsQ0FBQSxDQUZUO0FBQUEsUUFHRSxTQUFBLEVBQVcsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUFULENBQUEsQ0FIYjtRQURPO0lBQUEsQ0FUVCxDQUFBOztBQUFBLHFCQW9CQSxPQUFBLEdBQVMsU0FBQSxHQUFBO0FBQ1AsTUFBQSxJQUFHLElBQUMsQ0FBQSx1QkFBRCxDQUFBLENBQUg7QUFDRSxRQUFBLElBQUMsQ0FBQSxPQUFPLENBQUMsV0FBVCxDQUFxQixJQUFyQixDQUFBLENBQUE7QUFBQSxRQUNBLHFDQUFBLFNBQUEsQ0FEQSxDQUFBO2VBRUEsS0FIRjtPQUFBLE1BQUE7ZUFLRSxNQUxGO09BRE87SUFBQSxDQXBCVCxDQUFBOztrQkFBQTs7S0FObUIsVUF2R3JCLENBQUE7QUFBQSxFQTRJQSxNQUFPLENBQUEsUUFBQSxDQUFQLEdBQW1CLFNBQUMsQ0FBRCxHQUFBO0FBQ2pCLFFBQUEsZ0JBQUE7QUFBQSxJQUNVLFFBQVIsTUFERixFQUVhLGdCQUFYLFVBRkYsQ0FBQTtXQUlJLElBQUEsTUFBQSxDQUFPLEdBQVAsRUFBWSxXQUFaLEVBTGE7RUFBQSxDQTVJbkIsQ0FBQTtBQUFBLEVBNEpNO0FBU0osNkJBQUEsQ0FBQTs7QUFBYSxJQUFBLGdCQUFDLEdBQUQsRUFBTSxPQUFOLEVBQWUsT0FBZixFQUF3QixNQUF4QixHQUFBO0FBQ1gsTUFBQSxJQUFDLENBQUEsYUFBRCxDQUFlLFNBQWYsRUFBMEIsT0FBMUIsQ0FBQSxDQUFBO0FBQUEsTUFDQSxJQUFDLENBQUEsYUFBRCxDQUFlLFNBQWYsRUFBMEIsT0FBMUIsQ0FEQSxDQUFBO0FBRUEsTUFBQSxJQUFHLGNBQUg7QUFDRSxRQUFBLElBQUMsQ0FBQSxhQUFELENBQWUsUUFBZixFQUF5QixNQUF6QixDQUFBLENBREY7T0FBQSxNQUFBO0FBR0UsUUFBQSxJQUFDLENBQUEsYUFBRCxDQUFlLFFBQWYsRUFBeUIsT0FBekIsQ0FBQSxDQUhGO09BRkE7QUFBQSxNQU1BLHdDQUFNLEdBQU4sQ0FOQSxDQURXO0lBQUEsQ0FBYjs7QUFBQSxxQkFZQSxXQUFBLEdBQWEsU0FBQyxDQUFELEdBQUE7O1FBQ1gsSUFBQyxDQUFBLGFBQWM7T0FBZjthQUNBLElBQUMsQ0FBQSxVQUFVLENBQUMsSUFBWixDQUFpQixDQUFqQixFQUZXO0lBQUEsQ0FaYixDQUFBOztBQUFBLHFCQW1CQSxTQUFBLEdBQVcsU0FBQSxHQUFBO0FBQ1QsVUFBQSxJQUFBO3FEQUFXLENBQUUsZ0JBQWIsR0FBc0IsRUFEYjtJQUFBLENBbkJYLENBQUE7O0FBQUEscUJBMEJBLG1CQUFBLEdBQXFCLFNBQUEsR0FBQTtBQUNuQixVQUFBLElBQUE7QUFBQSxNQUFBLENBQUEsR0FBSSxDQUFKLENBQUE7QUFBQSxNQUNBLENBQUEsR0FBSSxJQUFDLENBQUEsT0FETCxDQUFBO0FBRUEsYUFBTSxJQUFOLEdBQUE7QUFDRSxRQUFBLElBQUcsSUFBQyxDQUFBLE1BQUQsS0FBVyxDQUFkO0FBQ0UsZ0JBREY7U0FBQTtBQUFBLFFBRUEsQ0FBQSxFQUZBLENBQUE7QUFJQSxRQUFBLElBQUcsSUFBQSxLQUFLLElBQUMsQ0FBQSxPQUFUO0FBQ0UsZ0JBQVUsSUFBQSxLQUFBLENBQU0sNEJBQU4sQ0FBVixDQURGO1NBSkE7QUFBQSxRQU1BLENBQUEsR0FBSSxDQUFDLENBQUMsT0FOTixDQURGO01BQUEsQ0FGQTthQVVBLEVBWG1CO0lBQUEsQ0ExQnJCLENBQUE7O0FBQUEscUJBMkNBLFNBQUEsR0FBVyxTQUFBLEdBQUE7QUFDVCxVQUFBLENBQUE7QUFBQSxNQUFBLENBQUEsR0FBSSxJQUFDLENBQUEsT0FBTCxDQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsUUFBQSxNQUFBLEVBQVEsU0FBQyxPQUFELEVBQVMsT0FBVCxHQUFBO0FBQ04sY0FBQSxRQUFBO0FBQUE7aUJBQU0sSUFBTixHQUFBO0FBQ0UsWUFBQSxJQUFHLENBQUMsQ0FBQyxTQUFGLENBQUEsQ0FBSDs0QkFDRSxDQUFBLEdBQUksQ0FBRSxDQUFBLE9BQUEsR0FEUjthQUFBLE1BQUE7QUFHRSxjQUFBLElBQUUsQ0FBQSxPQUFBLENBQUYsR0FBYSxDQUFiLENBQUE7QUFFQSxvQkFMRjthQURGO1VBQUEsQ0FBQTswQkFETTtRQUFBLENBQVI7T0FBQSxDQURBLENBQUE7QUFBQSxNQVNBLE1BQUEsQ0FBTyxTQUFQLEVBQWtCLFNBQWxCLENBVEEsQ0FBQTthQVVBLE1BQUEsQ0FBTyxTQUFQLEVBQWtCLFNBQWxCLEVBWFM7SUFBQSxDQTNDWCxDQUFBOztBQUFBLHFCQThEQSxPQUFBLEdBQVMsU0FBQSxHQUFBO0FBQ1AsVUFBQSxxQ0FBQTtBQUFBLE1BQUEsSUFBRyx3QkFBSDtBQUNFLGVBQU8sSUFBUCxDQURGO09BQUE7QUFFQSxNQUFBLElBQUcsQ0FBQSxJQUFLLENBQUEsdUJBQUQsQ0FBQSxDQUFQO0FBQ0UsZUFBTyxLQUFQLENBREY7T0FBQSxNQUFBO0FBR0UsUUFBQSx5Q0FBVyxDQUFFLHVCQUFWLENBQUEsV0FBQSwyQ0FBZ0QsQ0FBRSx1QkFBVixDQUFBLFdBQXhDLElBQWdGLElBQUMsQ0FBQSxPQUFPLENBQUMsT0FBVCxLQUFzQixJQUF6RztBQUNFLFVBQUEsa0JBQUEsR0FBcUIsQ0FBckIsQ0FBQTtBQUFBLFVBQ0EsQ0FBQSxHQUFJLElBQUMsQ0FBQSxPQUFPLENBQUMsT0FEYixDQUFBO0FBQUEsVUFFQSxDQUFBLEdBQUksQ0FGSixDQUFBO0FBZUEsaUJBQU0sSUFBTixHQUFBO0FBQ0UsWUFBQSxJQUFPLFNBQVA7QUFFRSxjQUFBLE9BQU8sQ0FBQyxHQUFSLENBQVksSUFBSSxDQUFDLFNBQUwsQ0FBZSxJQUFDLENBQUEsT0FBTyxDQUFDLE1BQVQsQ0FBQSxDQUFmLENBQVosQ0FBQSxDQUFBO0FBQUEsY0FDQSxPQUFPLENBQUMsR0FBUixDQUFZLElBQUksQ0FBQyxTQUFMLENBQWUsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUFULENBQUEsQ0FBZixDQUFaLENBREEsQ0FGRjthQUFBO0FBSUEsWUFBQSxJQUFHLENBQUEsS0FBTyxJQUFDLENBQUEsT0FBWDtBQUVFLGNBQUEsSUFBRyxDQUFDLENBQUMsbUJBQUYsQ0FBQSxDQUFBLEtBQTJCLENBQTlCO0FBRUUsZ0JBQUEsSUFBRyxDQUFDLENBQUMsT0FBRixHQUFZLElBQUMsQ0FBQSxPQUFoQjtBQUNFLGtCQUFBLElBQUMsQ0FBQSxPQUFELEdBQVcsQ0FBWCxDQUFBO0FBQUEsa0JBQ0Esa0JBQUEsR0FBcUIsQ0FBQSxHQUFJLENBRHpCLENBREY7aUJBQUEsTUFBQTtBQUFBO2lCQUZGO2VBQUEsTUFPSyxJQUFHLENBQUMsQ0FBQyxtQkFBRixDQUFBLENBQUEsR0FBMEIsQ0FBN0I7QUFFSCxnQkFBQSxJQUFHLENBQUEsR0FBSSxrQkFBSixJQUEwQixDQUFDLENBQUMsbUJBQUYsQ0FBQSxDQUE3QjtBQUNFLGtCQUFBLElBQUMsQ0FBQSxPQUFELEdBQVcsQ0FBWCxDQUFBO0FBQUEsa0JBQ0Esa0JBQUEsR0FBcUIsQ0FBQSxHQUFJLENBRHpCLENBREY7aUJBQUEsTUFBQTtBQUFBO2lCQUZHO2VBQUEsTUFBQTtBQVNILHNCQVRHO2VBUEw7QUFBQSxjQWlCQSxDQUFBLEVBakJBLENBQUE7QUFBQSxjQWtCQSxDQUFBLEdBQUksQ0FBQyxDQUFDLE9BbEJOLENBRkY7YUFBQSxNQUFBO0FBdUJFLG9CQXZCRjthQUxGO1VBQUEsQ0FmQTtBQUFBLFVBNkNBLElBQUMsQ0FBQSxPQUFELEdBQVcsSUFBQyxDQUFBLE9BQU8sQ0FBQyxPQTdDcEIsQ0FBQTtBQUFBLFVBOENBLElBQUMsQ0FBQSxPQUFPLENBQUMsT0FBVCxHQUFtQixJQTlDbkIsQ0FBQTtBQUFBLFVBK0NBLElBQUMsQ0FBQSxPQUFPLENBQUMsT0FBVCxHQUFtQixJQS9DbkIsQ0FERjtTQUFBO0FBQUEsUUFpREEscUNBQUEsU0FBQSxDQWpEQSxDQUFBO2VBa0RBLEtBckRGO09BSE87SUFBQSxDQTlEVCxDQUFBOztrQkFBQTs7S0FUbUIsVUE1SnJCLENBQUE7QUFBQSxFQWdTTTtBQU1KLHNDQUFBLENBQUE7O0FBQWEsSUFBQSx5QkFBQyxHQUFELEVBQU8sT0FBUCxFQUFtQixJQUFuQixFQUF5QixJQUF6QixFQUErQixNQUEvQixHQUFBO0FBQ1gsTUFEaUIsSUFBQyxDQUFBLDRCQUFBLFVBQVEsRUFDMUIsQ0FBQTtBQUFBLE1BQUEsaURBQU0sR0FBTixFQUFXLElBQVgsRUFBaUIsSUFBakIsRUFBdUIsTUFBdkIsQ0FBQSxDQURXO0lBQUEsQ0FBYjs7QUFBQSw4QkFNQSxHQUFBLEdBQU0sU0FBQSxHQUFBO2FBQ0osSUFBQyxDQUFBLFFBREc7SUFBQSxDQU5OLENBQUE7O0FBQUEsOEJBU0EsT0FBQSxHQUFTLFNBQUEsR0FBQTtBQUNQLFVBQUEsSUFBQTtBQUFBLE1BQUEsSUFBQSxHQUFPO0FBQUEsUUFDTCxNQUFBLEVBQVEsaUJBREg7QUFBQSxRQUVMLEtBQUEsRUFBUSxJQUFDLENBQUEsTUFBRCxDQUFBLENBRkg7QUFBQSxRQUdMLFNBQUEsRUFBWSxJQUFDLENBQUEsT0FIUjtPQUFQLENBQUE7QUFLQSxNQUFBLElBQUcsb0JBQUg7QUFDRSxRQUFBLElBQUssQ0FBQSxNQUFBLENBQUwsR0FBZSxJQUFDLENBQUEsT0FBTyxDQUFDLE1BQVQsQ0FBQSxDQUFmLENBREY7T0FMQTtBQU9BLE1BQUEsSUFBRyxvQkFBSDtBQUNFLFFBQUEsSUFBSyxDQUFBLE1BQUEsQ0FBTCxHQUFlLElBQUMsQ0FBQSxPQUFPLENBQUMsTUFBVCxDQUFBLENBQWYsQ0FERjtPQVBBO0FBU0EsTUFBQSxJQUFHLHFCQUFBLElBQWEsSUFBQyxDQUFBLE1BQUQsS0FBYSxJQUFDLENBQUEsT0FBOUI7QUFDRSxRQUFBLElBQUssQ0FBQSxRQUFBLENBQUwsR0FBaUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLENBQUEsQ0FBakIsQ0FERjtPQVRBO2FBV0EsS0FaTztJQUFBLENBVFQsQ0FBQTs7MkJBQUE7O0tBTjRCLE9BaFM5QixDQUFBO0FBQUEsRUE2VEEsTUFBTyxDQUFBLGlCQUFBLENBQVAsR0FBNEIsU0FBQyxJQUFELEdBQUE7QUFDMUIsUUFBQSxnQ0FBQTtBQUFBLElBQ1UsV0FBUixNQURGLEVBRWMsZUFBWixVQUZGLEVBR1UsWUFBUixPQUhGLEVBSVUsWUFBUixPQUpGLEVBS2EsY0FBWCxTQUxGLENBQUE7V0FPSSxJQUFBLGVBQUEsQ0FBZ0IsR0FBaEIsRUFBcUIsT0FBckIsRUFBOEIsSUFBOUIsRUFBb0MsSUFBcEMsRUFBMEMsTUFBMUMsRUFSc0I7RUFBQSxDQTdUNUIsQ0FBQTtBQUFBLEVBNFVNO0FBS0osZ0NBQUEsQ0FBQTs7OztLQUFBOztBQUFBLHdCQUFBLE9BQUEsR0FBUyxTQUFBLEdBQUE7QUFDUCxVQUFBLFdBQUE7QUFBQSxNQUFBLElBQUcsSUFBQyxDQUFBLHVCQUFELENBQUEsQ0FBSDtBQUNFLGFBQUEseURBQUE7cUNBQUE7QUFDRSxVQUFBLENBQUEsQ0FBRSxJQUFDLENBQUEsT0FBRCxDQUFBLENBQUYsQ0FBQSxDQURGO0FBQUEsU0FBQTtlQUVBLEtBSEY7T0FBQSxNQUFBO2VBS0UsTUFMRjtPQURPO0lBQUEsQ0FBVCxDQUFBOztBQUFBLHdCQVdBLE9BQUEsR0FBUyxTQUFBLEdBQUE7QUFDUCxVQUFBLFdBQUE7YUFBQTtBQUFBLFFBQ0UsTUFBQSxFQUFTLFdBRFg7QUFBQSxRQUVFLEtBQUEsRUFBUSxJQUFDLENBQUEsTUFBRCxDQUFBLENBRlY7QUFBQSxRQUdFLE1BQUEsc0NBQWlCLENBQUUsTUFBVixDQUFBLFVBSFg7QUFBQSxRQUlFLE1BQUEsd0NBQWlCLENBQUUsTUFBVixDQUFBLFVBSlg7UUFETztJQUFBLENBWFQsQ0FBQTs7cUJBQUE7O0tBTHNCLE9BNVV4QixDQUFBO0FBQUEsRUFvV0EsTUFBTyxDQUFBLFdBQUEsQ0FBUCxHQUFzQixTQUFDLElBQUQsR0FBQTtBQUNsQixRQUFBLGVBQUE7QUFBQSxJQUNVLFdBQVIsTUFERixFQUVXLFlBQVQsT0FGRixFQUdXLFlBQVQsT0FIRixDQUFBO1dBS0ksSUFBQSxTQUFBLENBQVUsR0FBVixFQUFlLElBQWYsRUFBcUIsSUFBckIsRUFOYztFQUFBLENBcFd0QixDQUFBO1NBNldBO0FBQUEsSUFDRSxPQUFBLEVBQ0U7QUFBQSxNQUFBLFFBQUEsRUFBVyxNQUFYO0FBQUEsTUFDQSxRQUFBLEVBQVcsTUFEWDtBQUFBLE1BRUEsV0FBQSxFQUFhLFNBRmI7QUFBQSxNQUdBLFdBQUEsRUFBYSxTQUhiO0FBQUEsTUFJQSxpQkFBQSxFQUFvQixlQUpwQjtLQUZKO0FBQUEsSUFPRSxRQUFBLEVBQVcsTUFQYjtBQUFBLElBUUUsb0JBQUEsRUFBdUIsa0JBUnpCO0lBL1dlO0FBQUEsQ0FBakIsQ0FBQTs7OztBQ0FBLElBQUEsd0JBQUE7RUFBQTtpU0FBQTs7QUFBQSx3QkFBQSxHQUEyQixPQUFBLENBQVEsb0JBQVIsQ0FBM0IsQ0FBQTs7QUFBQSxNQUVNLENBQUMsT0FBUCxHQUFpQixTQUFDLEVBQUQsR0FBQTtBQUNmLE1BQUEsc0RBQUE7QUFBQSxFQUFBLFVBQUEsR0FBYSx3QkFBQSxDQUF5QixFQUF6QixDQUFiLENBQUE7QUFBQSxFQUNBLEtBQUEsR0FBUSxVQUFVLENBQUMsS0FEbkIsQ0FBQTtBQUFBLEVBRUEsTUFBQSxHQUFTLFVBQVUsQ0FBQyxNQUZwQixDQUFBO0FBQUEsRUFJQSxpQkFBQSxHQUFvQixTQUFDLFNBQUQsR0FBQTtBQTBEbEIsUUFBQSxXQUFBO0FBQUEsSUFBTTtBQUNTLE1BQUEscUJBQUMsUUFBRCxHQUFBO0FBQ1gsWUFBQSxvQkFBQTtBQUFBO0FBQUEsY0FDSyxTQUFDLElBQUQsRUFBTyxHQUFQLEdBQUE7aUJBQ0QsTUFBTSxDQUFDLGNBQVAsQ0FBc0IsV0FBVyxDQUFDLFNBQWxDLEVBQTZDLElBQTdDLEVBQ0U7QUFBQSxZQUFBLEdBQUEsRUFBTSxTQUFBLEdBQUE7QUFDSixrQkFBQSxDQUFBO0FBQUEsY0FBQSxDQUFBLEdBQUksR0FBRyxDQUFDLEdBQUosQ0FBQSxDQUFKLENBQUE7QUFDQSxjQUFBLElBQUcsQ0FBQSxZQUFhLFFBQWhCO3VCQUNFLGlCQUFBLENBQWtCLENBQWxCLEVBREY7ZUFBQSxNQUVLLElBQUcsQ0FBQSxZQUFhLEtBQUssQ0FBQyxlQUF0Qjt1QkFDSCxDQUFDLENBQUMsR0FBRixDQUFBLEVBREc7ZUFBQSxNQUFBO3VCQUdILEVBSEc7ZUFKRDtZQUFBLENBQU47QUFBQSxZQVFBLEdBQUEsRUFBTSxTQUFDLENBQUQsR0FBQTtBQUNKLGtCQUFBLGtDQUFBO0FBQUEsY0FBQSxJQUFHLENBQUMsQ0FBQyxXQUFGLEtBQWlCLEVBQUUsQ0FBQyxXQUF2QjtBQUNFLGdCQUFBLFNBQUEsR0FBWSxRQUFRLENBQUMsR0FBVCxDQUFhLElBQWIsQ0FBWixDQUFBO0FBQ0E7cUJBQUEsV0FBQTtvQ0FBQTtBQUNFLGdDQUFBLFNBQVMsQ0FBQyxHQUFWLENBQWMsTUFBZCxFQUFzQixLQUF0QixFQUE2QixXQUE3QixFQUFBLENBREY7QUFBQTtnQ0FGRjtlQUFBLE1BQUE7dUJBS0UsUUFBUSxDQUFDLEdBQVQsQ0FBYSxJQUFiLEVBQW1CLENBQW5CLEVBQXNCLFdBQXRCLEVBTEY7ZUFESTtZQUFBLENBUk47QUFBQSxZQWVBLFVBQUEsRUFBWSxJQWZaO0FBQUEsWUFnQkEsWUFBQSxFQUFjLEtBaEJkO1dBREYsRUFEQztRQUFBLENBREw7QUFBQSxhQUFBLFlBQUE7MkJBQUE7QUFDRSxjQUFJLE1BQU0sSUFBVixDQURGO0FBQUEsU0FEVztNQUFBLENBQWI7O3lCQUFBOztRQURGLENBQUE7V0FzQkksSUFBQSxXQUFBLENBQVksU0FBWixFQWhGYztFQUFBLENBSnBCLENBQUE7QUFBQSxFQXlGTTtBQU9KLCtCQUFBLENBQUE7O0FBQWEsSUFBQSxrQkFBQyxHQUFELEVBQU0sYUFBTixFQUFxQixPQUFyQixHQUFBO0FBQ1gsVUFBQSxPQUFBO0FBQUEsTUFBQSwwQ0FBTSxHQUFOLENBQUEsQ0FBQTtBQUNBLE1BQUEsSUFBRyxxQkFBSDtBQUNFLFFBQUEsSUFBRyxNQUFBLENBQUEsYUFBQSxLQUEwQixRQUE3QjtBQUNFLGdCQUFVLElBQUEsS0FBQSxDQUFPLHdFQUFBLEdBQXVFLENBQUEsTUFBQSxDQUFBLGFBQUEsQ0FBdkUsR0FBNkYsR0FBcEcsQ0FBVixDQURGO1NBQUE7QUFFQSxhQUFBLHFCQUFBO2tDQUFBO0FBQ0UsVUFBQSxJQUFDLENBQUEsR0FBRCxDQUFLLElBQUwsRUFBVyxDQUFYLEVBQWMsT0FBZCxDQUFBLENBREY7QUFBQSxTQUhGO09BRlc7SUFBQSxDQUFiOztBQUFBLHVCQVFBLGVBQUEsR0FDRSxJQVRGLENBQUE7O0FBQUEsdUJBV0EsaUJBQUEsR0FBbUIsU0FBQyxPQUFELEdBQUE7QUFDakIsTUFBQSxJQUFHLE9BQUEsS0FBVyxJQUFYLElBQW1CLE9BQUEsS0FBVyxTQUFqQztBQUNFLFFBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxlQUFuQixHQUFxQyxJQUFyQyxDQURGO09BQUEsTUFFSyxJQUFHLE9BQUEsS0FBVyxLQUFYLElBQW9CLE9BQUEsS0FBVyxXQUFsQztBQUNILFFBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxlQUFuQixHQUFxQyxLQUFyQyxDQURHO09BQUEsTUFBQTtBQUdILGNBQVUsSUFBQSxLQUFBLENBQU0sOENBQU4sQ0FBVixDQUhHO09BRkw7YUFNQSxLQVBpQjtJQUFBLENBWG5CLENBQUE7O0FBQUEsdUJBb0NBLEdBQUEsR0FBSyxTQUFDLElBQUQsRUFBTyxPQUFQLEVBQWdCLE9BQWhCLEdBQUE7QUFDSCxVQUFBLDBCQUFBO0FBQUEsTUFBQSxJQUFHLE1BQUEsQ0FBQSxJQUFBLEtBQWUsUUFBbEI7QUFHRSxhQUFBLGNBQUE7MkJBQUE7QUFDRSxVQUFBLElBQUMsQ0FBQSxHQUFELENBQUssTUFBTCxFQUFZLENBQVosRUFBYyxPQUFkLENBQUEsQ0FERjtBQUFBLFNBQUE7ZUFFQSxLQUxGO09BQUEsTUFNSyxJQUFHLGNBQUEsSUFBVSxpQkFBYjtBQUNILFFBQUEsSUFBRyxlQUFIO0FBQ0UsVUFBQSxJQUFHLE9BQUEsS0FBVyxJQUFYLElBQW1CLE9BQUEsS0FBVyxTQUFqQztBQUNFLFlBQUEsT0FBQSxHQUFVLElBQVYsQ0FERjtXQUFBLE1BQUE7QUFHRSxZQUFBLE9BQUEsR0FBVSxLQUFWLENBSEY7V0FERjtTQUFBLE1BQUE7QUFNRSxVQUFBLE9BQUEsR0FBVSxJQUFDLENBQUEsZUFBWCxDQU5GO1NBQUE7QUFPQSxRQUFBLElBQUcsTUFBQSxDQUFBLE9BQUEsS0FBa0IsVUFBckI7aUJBQ0UsS0FERjtTQUFBLE1BRUssSUFBRyxDQUFDLENBQUMsQ0FBQSxPQUFELENBQUEsSUFBaUIsTUFBQSxDQUFBLE9BQUEsS0FBa0IsUUFBcEMsQ0FBQSxJQUFrRCxPQUFPLENBQUMsV0FBUixLQUF5QixNQUE5RTtBQUNILFVBQUEsR0FBQSxHQUFNLEVBQUUsQ0FBQyxZQUFILENBQW9CLElBQUEsS0FBSyxDQUFDLGVBQU4sQ0FBc0IsTUFBdEIsRUFBaUMsT0FBakMsQ0FBcEIsQ0FBNkQsQ0FBQyxPQUE5RCxDQUFBLENBQU4sQ0FBQTtpQkFDQSxrQ0FBTSxJQUFOLEVBQVksR0FBWixFQUZHO1NBQUEsTUFBQTtBQUlILFVBQUEsSUFBRyxNQUFBLENBQUEsT0FBQSxLQUFrQixRQUFyQjtBQUNFLFlBQUEsSUFBQSxHQUFPLEVBQUUsQ0FBQyxZQUFILENBQW9CLElBQUEsS0FBSyxDQUFDLElBQU4sQ0FBVyxFQUFFLENBQUMsMEJBQUgsQ0FBQSxDQUFYLEVBQTRDLE9BQTVDLENBQXBCLENBQXdFLENBQUMsT0FBekUsQ0FBQSxDQUFQLENBQUE7bUJBQ0Esa0NBQU0sSUFBTixFQUFZLElBQVosRUFGRjtXQUFBLE1BR0ssSUFBRyxPQUFPLENBQUMsV0FBUixLQUF1QixNQUExQjtBQUNILFlBQUEsSUFBQSxHQUFPLEVBQUUsQ0FBQyxZQUFILENBQW9CLElBQUEsUUFBQSxDQUFTLEVBQUUsQ0FBQywwQkFBSCxDQUFBLENBQVQsRUFBMEMsT0FBMUMsRUFBbUQsT0FBbkQsQ0FBcEIsQ0FBK0UsQ0FBQyxPQUFoRixDQUFBLENBQVAsQ0FBQTttQkFDQSxrQ0FBTSxJQUFOLEVBQVksSUFBWixFQUZHO1dBQUEsTUFBQTtBQUlILGtCQUFVLElBQUEsS0FBQSxDQUFPLG1CQUFBLEdBQWtCLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBbEIsR0FBa0MsdUNBQXpDLENBQVYsQ0FKRztXQVBGO1NBVkY7T0FBQSxNQUFBO2VBdUJILGtDQUFNLElBQU4sRUFBWSxPQUFaLEVBdkJHO09BUEY7SUFBQSxDQXBDTCxDQUFBOztBQUFBLElBb0VBLE1BQU0sQ0FBQyxjQUFQLENBQXNCLFFBQVEsQ0FBQyxTQUEvQixFQUEwQyxPQUExQyxFQUNFO0FBQUEsTUFBQSxHQUFBLEVBQU0sU0FBQSxHQUFBO2VBQUcsaUJBQUEsQ0FBa0IsSUFBbEIsRUFBSDtNQUFBLENBQU47QUFBQSxNQUNBLEdBQUEsRUFBTSxTQUFDLENBQUQsR0FBQTtBQUNKLFlBQUEsdUJBQUE7QUFBQSxRQUFBLElBQUcsQ0FBQyxDQUFDLFdBQUYsS0FBaUIsRUFBRSxDQUFDLFdBQXZCO0FBQ0U7ZUFBQSxXQUFBOzhCQUFBO0FBQ0UsMEJBQUEsSUFBQyxDQUFBLEdBQUQsQ0FBSyxNQUFMLEVBQWEsS0FBYixFQUFvQixXQUFwQixFQUFBLENBREY7QUFBQTswQkFERjtTQUFBLE1BQUE7QUFJRSxnQkFBVSxJQUFBLEtBQUEsQ0FBTSxrQ0FBTixDQUFWLENBSkY7U0FESTtNQUFBLENBRE47S0FERixDQXBFQSxDQUFBOztBQUFBLHVCQWdGQSxPQUFBLEdBQVMsU0FBQSxHQUFBO2FBQ1A7QUFBQSxRQUNFLE1BQUEsRUFBUyxVQURYO0FBQUEsUUFFRSxLQUFBLEVBQVEsSUFBQyxDQUFBLE1BQUQsQ0FBQSxDQUZWO1FBRE87SUFBQSxDQWhGVCxDQUFBOztvQkFBQTs7S0FQcUIsS0FBSyxDQUFDLFdBekY3QixDQUFBO0FBQUEsRUFzTEEsTUFBTyxDQUFBLFVBQUEsQ0FBUCxHQUFxQixTQUFDLElBQUQsR0FBQTtBQUNuQixRQUFBLEdBQUE7QUFBQSxJQUNVLE1BQ04sS0FERixNQURGLENBQUE7V0FHSSxJQUFBLFFBQUEsQ0FBUyxHQUFULEVBSmU7RUFBQSxDQXRMckIsQ0FBQTtBQUFBLEVBK0xBLEtBQU0sQ0FBQSxVQUFBLENBQU4sR0FBb0IsUUEvTHBCLENBQUE7U0FpTUEsV0FsTWU7QUFBQSxDQUZqQixDQUFBOzs7O0FDQUEsSUFBQSx5QkFBQTtFQUFBO2lTQUFBOztBQUFBLHlCQUFBLEdBQTRCLE9BQUEsQ0FBUSxxQkFBUixDQUE1QixDQUFBOztBQUFBLE1BRU0sQ0FBQyxPQUFQLEdBQWlCLFNBQUMsRUFBRCxHQUFBO0FBQ2YsTUFBQSx5RkFBQTtBQUFBLEVBQUEsV0FBQSxHQUFjLHlCQUFBLENBQTBCLEVBQTFCLENBQWQsQ0FBQTtBQUFBLEVBQ0EsS0FBQSxHQUFRLFdBQVcsQ0FBQyxLQURwQixDQUFBO0FBQUEsRUFFQSxNQUFBLEdBQVMsV0FBVyxDQUFDLE1BRnJCLENBQUE7QUFBQSxFQU9NO0FBS0osaUNBQUEsQ0FBQTs7QUFBYSxJQUFBLG9CQUFDLEdBQUQsR0FBQTtBQUNYLE1BQUEsSUFBQyxDQUFBLEdBQUQsR0FBTyxFQUFQLENBQUE7QUFBQSxNQUNBLDRDQUFNLEdBQU4sQ0FEQSxDQURXO0lBQUEsQ0FBYjs7QUFBQSx5QkFJQSxHQUFBLEdBQUssU0FBQyxJQUFELEVBQU8sT0FBUCxHQUFBO0FBQ0gsVUFBQSwyQkFBQTtBQUFBLE1BQUEsSUFBRyxlQUFIO0FBQ0UsUUFBQSxJQUFPLHNCQUFQO0FBQ0UsVUFBQSxFQUFFLENBQUMsWUFBSCxDQUFvQixJQUFBLE9BQUEsQ0FBUSxFQUFFLENBQUMsMEJBQUgsQ0FBQSxDQUFSLEVBQXlDLElBQXpDLEVBQTRDLElBQTVDLENBQXBCLENBQXFFLENBQUMsT0FBdEUsQ0FBQSxDQUFBLENBREY7U0FBQTtBQUFBLFFBRUEsSUFBQyxDQUFBLEdBQUksQ0FBQSxJQUFBLENBQUssQ0FBQyxPQUFYLENBQW1CLE9BQW5CLENBRkEsQ0FBQTtlQUdBLEtBSkY7T0FBQSxNQUtLLElBQUcsWUFBSDtBQUNILFFBQUEsR0FBQSx5Q0FBZ0IsQ0FBRSxHQUFaLENBQUEsVUFBTixDQUFBO0FBQ0EsUUFBQSxJQUFHLEdBQUEsWUFBZSxLQUFLLENBQUMsZUFBeEI7aUJBQ0UsR0FBRyxDQUFDLEdBQUosQ0FBQSxFQURGO1NBQUEsTUFBQTtpQkFHRSxJQUhGO1NBRkc7T0FBQSxNQUFBO0FBT0gsUUFBQSxNQUFBLEdBQVMsRUFBVCxDQUFBO0FBQ0E7QUFBQSxhQUFBLGFBQUE7MEJBQUE7QUFDRSxVQUFBLEdBQUEsR0FBTSxDQUFDLENBQUMsR0FBRixDQUFBLENBQU4sQ0FBQTtBQUNBLFVBQUEsSUFBRyxHQUFBLFlBQWUsS0FBSyxDQUFDLGVBQXJCLElBQXdDLEdBQUEsWUFBZSxVQUExRDtBQUNFLFlBQUEsR0FBQSxHQUFNLEdBQUcsQ0FBQyxHQUFKLENBQUEsQ0FBTixDQURGO1dBREE7QUFBQSxVQUdBLE1BQU8sQ0FBQSxJQUFBLENBQVAsR0FBZSxHQUhmLENBREY7QUFBQSxTQURBO2VBTUEsT0FiRztPQU5GO0lBQUEsQ0FKTCxDQUFBOztzQkFBQTs7S0FMdUIsS0FBSyxDQUFDLFVBUC9CLENBQUE7QUFBQSxFQTJDTTtBQU9KLDhCQUFBLENBQUE7O0FBQWEsSUFBQSxpQkFBQyxHQUFELEVBQU0sV0FBTixFQUFvQixJQUFwQixHQUFBO0FBQ1gsTUFEOEIsSUFBQyxDQUFBLE9BQUEsSUFDL0IsQ0FBQTtBQUFBLE1BQUEsSUFBQyxDQUFBLGFBQUQsQ0FBZSxhQUFmLEVBQThCLFdBQTlCLENBQUEsQ0FBQTtBQUFBLE1BQ0EseUNBQU0sR0FBTixDQURBLENBRFc7SUFBQSxDQUFiOztBQUFBLHNCQUlBLE9BQUEsR0FBUyxTQUFBLEdBQUE7QUFDUCxVQUFBLGlDQUFBO0FBQUEsTUFBQSxJQUFHLENBQUEsSUFBSyxDQUFBLHVCQUFELENBQUEsQ0FBUDtBQUNFLGVBQU8sS0FBUCxDQURGO09BQUEsTUFBQTtBQUdFLFFBQUEsS0FBQSxHQUFRLElBQUMsQ0FBQSxXQUFXLENBQUMsTUFBYixDQUFBLENBQVIsQ0FBQTtBQUFBLFFBQ0EsS0FBSyxDQUFDLFNBQU4sR0FBbUIsR0FBQSxHQUFFLEtBQUssQ0FBQyxTQUFSLEdBQW1CLE1BQW5CLEdBQXdCLElBQUMsQ0FBQSxJQUQ1QyxDQUFBO0FBRUEsUUFBQSxJQUFPLDhCQUFQO0FBQ0UsVUFBQSxPQUFBLEdBQVUsSUFBQyxDQUFBLFdBQVcsQ0FBQyxNQUFiLENBQUEsQ0FBVixDQUFBO0FBQUEsVUFDQSxPQUFPLENBQUMsU0FBUixHQUFxQixHQUFBLEdBQUUsT0FBTyxDQUFDLFNBQVYsR0FBcUIsTUFBckIsR0FBMEIsSUFBQyxDQUFBLElBQTNCLEdBQWlDLFlBRHRELENBQUE7QUFBQSxVQUVBLE9BQUEsR0FBVSxJQUFDLENBQUEsV0FBVyxDQUFDLE1BQWIsQ0FBQSxDQUZWLENBQUE7QUFBQSxVQUdBLE9BQU8sQ0FBQyxTQUFSLEdBQXFCLEdBQUEsR0FBRSxPQUFPLENBQUMsU0FBVixHQUFxQixNQUFyQixHQUEwQixJQUFDLENBQUEsSUFBM0IsR0FBaUMsTUFIdEQsQ0FBQTtBQUFBLFVBSUEsR0FBQSxHQUFNLEVBQUUsQ0FBQyxZQUFILENBQW9CLElBQUEsS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsT0FBaEIsRUFBeUIsTUFBekIsRUFBb0MsT0FBcEMsQ0FBcEIsQ0FKTixDQUFBO0FBQUEsVUFLQSxHQUFBLEdBQU0sRUFBRSxDQUFDLFlBQUgsQ0FBb0IsSUFBQSxLQUFLLENBQUMsU0FBTixDQUFnQixPQUFoQixFQUF5QixHQUF6QixFQUE4QixNQUE5QixDQUFwQixDQUE0RCxDQUFDLE9BQTdELENBQUEsQ0FMTixDQUFBO0FBQUEsVUFNQSxHQUFHLENBQUMsT0FBSixDQUFBLENBTkEsQ0FBQTtBQUFBLFVBT0EsSUFBQyxDQUFBLFdBQVcsQ0FBQyxHQUFJLENBQUEsSUFBQyxDQUFBLElBQUQsQ0FBakIsR0FBMEIsRUFBRSxDQUFDLFlBQUgsQ0FBb0IsSUFBQSxjQUFBLENBQWUsTUFBZixFQUEwQixLQUExQixFQUFpQyxHQUFqQyxFQUFzQyxHQUF0QyxDQUFwQixDQUE4RCxDQUFDLE9BQS9ELENBQUEsQ0FQMUIsQ0FERjtTQUZBO2VBV0Esc0NBQUEsU0FBQSxFQWRGO09BRE87SUFBQSxDQUpULENBQUE7O0FBQUEsc0JBcUJBLE9BQUEsR0FBUyxTQUFBLEdBQUE7YUFDUDtBQUFBLFFBQ0UsTUFBQSxFQUFTLFNBRFg7QUFBQSxRQUVFLEtBQUEsRUFBUSxJQUFDLENBQUEsTUFBRCxDQUFBLENBRlY7QUFBQSxRQUdFLGFBQUEsRUFBZ0IsSUFBQyxDQUFBLFdBQVcsQ0FBQyxNQUFiLENBQUEsQ0FIbEI7QUFBQSxRQUlFLE1BQUEsRUFBUyxJQUFDLENBQUEsSUFKWjtRQURPO0lBQUEsQ0FyQlQsQ0FBQTs7bUJBQUE7O0tBUG9CLEtBQUssQ0FBQyxVQTNDNUIsQ0FBQTtBQUFBLEVBK0VBLE1BQU8sQ0FBQSxTQUFBLENBQVAsR0FBb0IsU0FBQyxJQUFELEdBQUE7QUFDbEIsUUFBQSxzQkFBQTtBQUFBLElBQ2tCLG1CQUFoQixjQURGLEVBRVUsV0FBUixNQUZGLEVBR1csWUFBVCxPQUhGLENBQUE7V0FLSSxJQUFBLE9BQUEsQ0FBUSxHQUFSLEVBQWEsV0FBYixFQUEwQixJQUExQixFQU5jO0VBQUEsQ0EvRXBCLENBQUE7QUFBQSxFQTBGTTtBQU9KLGtDQUFBLENBQUE7O0FBQWEsSUFBQSxxQkFBQyxHQUFELEVBQU0sU0FBTixFQUFpQixHQUFqQixFQUFzQixJQUF0QixFQUE0QixJQUE1QixFQUFrQyxNQUFsQyxHQUFBO0FBQ1gsTUFBQSxJQUFHLG1CQUFBLElBQWUsYUFBbEI7QUFDRSxRQUFBLElBQUMsQ0FBQSxhQUFELENBQWUsV0FBZixFQUE0QixTQUE1QixDQUFBLENBQUE7QUFBQSxRQUNBLElBQUMsQ0FBQSxhQUFELENBQWUsS0FBZixFQUFzQixHQUF0QixDQURBLENBREY7T0FBQSxNQUFBO0FBSUUsUUFBQSxJQUFDLENBQUEsU0FBRCxHQUFhLEVBQUUsQ0FBQyxZQUFILENBQW9CLElBQUEsS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsRUFBRSxDQUFDLDBCQUFILENBQUEsQ0FBaEIsRUFBaUQsTUFBakQsRUFBNEQsTUFBNUQsQ0FBcEIsQ0FBYixDQUFBO0FBQUEsUUFDQSxJQUFDLENBQUEsR0FBRCxHQUFhLEVBQUUsQ0FBQyxZQUFILENBQW9CLElBQUEsS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsRUFBRSxDQUFDLDBCQUFILENBQUEsQ0FBaEIsRUFBaUQsSUFBQyxDQUFBLFNBQWxELEVBQTZELE1BQTdELENBQXBCLENBRGIsQ0FBQTtBQUFBLFFBRUEsSUFBQyxDQUFBLFNBQVMsQ0FBQyxPQUFYLEdBQXFCLElBQUMsQ0FBQSxHQUZ0QixDQUFBO0FBQUEsUUFHQSxJQUFDLENBQUEsU0FBUyxDQUFDLE9BQVgsQ0FBQSxDQUhBLENBQUE7QUFBQSxRQUlBLElBQUMsQ0FBQSxHQUFHLENBQUMsT0FBTCxDQUFBLENBSkEsQ0FKRjtPQUFBO0FBQUEsTUFVQSw2Q0FBTSxHQUFOLEVBQVcsSUFBWCxFQUFpQixJQUFqQixFQUF1QixNQUF2QixDQVZBLENBRFc7SUFBQSxDQUFiOztBQUFBLDBCQWNBLGdCQUFBLEdBQWtCLFNBQUEsR0FBQTthQUNoQixJQUFDLENBQUEsR0FBRyxDQUFDLFFBRFc7SUFBQSxDQWRsQixDQUFBOztBQUFBLDBCQWtCQSxpQkFBQSxHQUFtQixTQUFBLEdBQUE7YUFDakIsSUFBQyxDQUFBLFNBQVMsQ0FBQyxRQURNO0lBQUEsQ0FsQm5CLENBQUE7O0FBQUEsMEJBdUJBLE9BQUEsR0FBUyxTQUFBLEdBQUE7QUFDUCxVQUFBLFNBQUE7QUFBQSxNQUFBLENBQUEsR0FBSSxJQUFDLENBQUEsU0FBUyxDQUFDLE9BQWYsQ0FBQTtBQUFBLE1BQ0EsTUFBQSxHQUFTLEVBRFQsQ0FBQTtBQUVBLGFBQU0sQ0FBQSxLQUFPLElBQUMsQ0FBQSxHQUFkLEdBQUE7QUFDRSxRQUFBLE1BQU0sQ0FBQyxJQUFQLENBQVksQ0FBWixDQUFBLENBQUE7QUFBQSxRQUNBLENBQUEsR0FBSSxDQUFDLENBQUMsT0FETixDQURGO01BQUEsQ0FGQTthQUtBLE9BTk87SUFBQSxDQXZCVCxDQUFBOztBQUFBLDBCQWtDQSxzQkFBQSxHQUF3QixTQUFDLFFBQUQsR0FBQTtBQUN0QixVQUFBLENBQUE7QUFBQSxNQUFBLENBQUEsR0FBSSxJQUFDLENBQUEsU0FBUyxDQUFDLE9BQWYsQ0FBQTtBQUNBLE1BQUEsSUFBRyxRQUFBLEdBQVcsQ0FBZDtBQUNFLGVBQU0sSUFBTixHQUFBO0FBQ0UsVUFBQSxDQUFBLEdBQUksQ0FBQyxDQUFDLE9BQU4sQ0FBQTtBQUNBLFVBQUEsSUFBRyxDQUFBLENBQUssQ0FBQyxTQUFGLENBQUEsQ0FBUDtBQUNFLFlBQUEsUUFBQSxJQUFZLENBQVosQ0FERjtXQURBO0FBR0EsVUFBQSxJQUFHLFFBQUEsS0FBWSxDQUFmO0FBQ0Usa0JBREY7V0FIQTtBQUtBLFVBQUEsSUFBRyxDQUFBLFlBQWEsS0FBSyxDQUFDLFNBQXRCO0FBQ0Usa0JBQVUsSUFBQSxLQUFBLENBQU0seURBQU4sQ0FBVixDQURGO1dBTkY7UUFBQSxDQURGO09BREE7YUFVQSxFQVhzQjtJQUFBLENBbEN4QixDQUFBOzt1QkFBQTs7S0FQd0IsS0FBSyxDQUFDLE9BMUZoQyxDQUFBO0FBQUEsRUF1Sk07QUFNSixxQ0FBQSxDQUFBOztBQUFhLElBQUEsd0JBQUMsZUFBRCxFQUFrQixHQUFsQixFQUF1QixTQUF2QixFQUFrQyxHQUFsQyxFQUF1QyxJQUF2QyxFQUE2QyxJQUE3QyxFQUFtRCxNQUFuRCxHQUFBO0FBQ1gsTUFBQSxnREFBTSxHQUFOLEVBQVcsU0FBWCxFQUFzQixHQUF0QixFQUEyQixJQUEzQixFQUFpQyxJQUFqQyxFQUF1QyxNQUF2QyxDQUFBLENBQUE7QUFDQSxNQUFBLElBQUcsdUJBQUg7QUFDRSxRQUFBLElBQUMsQ0FBQSxPQUFELENBQVMsZUFBVCxDQUFBLENBREY7T0FGVztJQUFBLENBQWI7O0FBQUEsNkJBS0EsT0FBQSxHQUFTLFNBQUMsT0FBRCxHQUFBO0FBQ1AsVUFBQSxLQUFBO0FBQUEsTUFBQSxDQUFBLEdBQUksSUFBQyxDQUFBLGdCQUFELENBQUEsQ0FBSixDQUFBO0FBQUEsTUFDQSxFQUFBLEdBQVMsSUFBQSxXQUFBLENBQVksT0FBWixFQUFxQixJQUFyQixFQUF3QixFQUFFLENBQUMsMEJBQUgsQ0FBQSxDQUF4QixFQUF5RCxDQUF6RCxFQUE0RCxDQUFDLENBQUMsT0FBOUQsQ0FEVCxDQUFBO2FBRUEsRUFBRSxDQUFDLFlBQUgsQ0FBZ0IsRUFBaEIsQ0FBbUIsQ0FBQyxPQUFwQixDQUFBLEVBSE87SUFBQSxDQUxULENBQUE7O0FBQUEsNkJBVUEsR0FBQSxHQUFLLFNBQUEsR0FBQTtBQUNILFVBQUEsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUFJLElBQUMsQ0FBQSxnQkFBRCxDQUFBLENBQUosQ0FBQTtBQUNBLE1BQUEsSUFBRyxDQUFBLFlBQWEsS0FBSyxDQUFDLFNBQXRCO0FBQ0UsY0FBVSxJQUFBLEtBQUEsQ0FBTSxNQUFOLENBQVYsQ0FERjtPQURBO2FBR0EsQ0FBQyxDQUFDLEdBQUYsQ0FBQSxFQUpHO0lBQUEsQ0FWTCxDQUFBOztBQUFBLDZCQWdCQSxPQUFBLEdBQVMsU0FBQSxHQUFBO0FBQ1AsVUFBQSxJQUFBO0FBQUEsTUFBQSxJQUFBLEdBQ0U7QUFBQSxRQUNFLE1BQUEsRUFBUSxnQkFEVjtBQUFBLFFBRUUsS0FBQSxFQUFRLElBQUMsQ0FBQSxNQUFELENBQUEsQ0FGVjtBQUFBLFFBR0UsV0FBQSxFQUFjLElBQUMsQ0FBQSxTQUFTLENBQUMsTUFBWCxDQUFBLENBSGhCO0FBQUEsUUFJRSxLQUFBLEVBQVEsSUFBQyxDQUFBLEdBQUcsQ0FBQyxNQUFMLENBQUEsQ0FKVjtPQURGLENBQUE7QUFPQSxNQUFBLElBQUcsc0JBQUEsSUFBYyxzQkFBakI7QUFDRSxRQUFBLElBQUssQ0FBQSxNQUFBLENBQUwsR0FBZSxJQUFDLENBQUEsT0FBTyxDQUFDLE1BQVQsQ0FBQSxDQUFmLENBQUE7QUFBQSxRQUNBLElBQUssQ0FBQSxNQUFBLENBQUwsR0FBZSxJQUFDLENBQUEsT0FBTyxDQUFDLE1BQVQsQ0FBQSxDQURmLENBREY7T0FQQTtBQVVBLE1BQUEsSUFBRyxxQkFBQSxJQUFhLElBQUMsQ0FBQSxNQUFELEtBQWEsSUFBQyxDQUFBLE9BQTlCO0FBQ0UsUUFBQSxJQUFLLENBQUEsUUFBQSxDQUFMLEdBQWlCLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixDQUFBLENBQWpCLENBREY7T0FWQTthQVlBLEtBYk87SUFBQSxDQWhCVCxDQUFBOzswQkFBQTs7S0FOMkIsWUF2SjdCLENBQUE7QUFBQSxFQTRMQSxNQUFPLENBQUEsZ0JBQUEsQ0FBUCxHQUEyQixTQUFDLElBQUQsR0FBQTtBQUN6QixRQUFBLGdEQUFBO0FBQUEsSUFDYyxlQUFaLFVBREYsRUFFVSxXQUFSLE1BRkYsRUFHVSxZQUFSLE9BSEYsRUFJVSxZQUFSLE9BSkYsRUFLYSxjQUFYLFNBTEYsRUFNZ0IsaUJBQWQsWUFORixFQU9VLFdBQVIsTUFQRixDQUFBO1dBU0ksSUFBQSxjQUFBLENBQWUsT0FBZixFQUF3QixHQUF4QixFQUE2QixTQUE3QixFQUF3QyxHQUF4QyxFQUE2QyxJQUE3QyxFQUFtRCxJQUFuRCxFQUF5RCxNQUF6RCxFQVZxQjtFQUFBLENBNUwzQixDQUFBO0FBQUEsRUE2TU07QUFPSixrQ0FBQSxDQUFBOztBQUFhLElBQUEscUJBQUMsT0FBRCxFQUFVLE1BQVYsRUFBa0IsR0FBbEIsRUFBdUIsSUFBdkIsRUFBNkIsSUFBN0IsRUFBbUMsTUFBbkMsR0FBQTtBQUNYLE1BQUEsSUFBQyxDQUFBLGFBQUQsQ0FBZSxTQUFmLEVBQTBCLE9BQTFCLENBQUEsQ0FBQTtBQUFBLE1BQ0EsSUFBQyxDQUFBLGFBQUQsQ0FBZSxRQUFmLEVBQXlCLE1BQXpCLENBREEsQ0FBQTtBQUVBLE1BQUEsSUFBRyxDQUFBLENBQUssY0FBQSxJQUFVLGNBQVYsSUFBb0IsaUJBQXJCLENBQVA7QUFDRSxjQUFVLElBQUEsS0FBQSxDQUFNLGdFQUFOLENBQVYsQ0FERjtPQUZBO0FBQUEsTUFJQSw2Q0FBTSxHQUFOLEVBQVcsSUFBWCxFQUFpQixJQUFqQixFQUF1QixNQUF2QixDQUpBLENBRFc7SUFBQSxDQUFiOztBQUFBLDBCQU9BLEdBQUEsR0FBSyxTQUFBLEdBQUE7YUFDSCxJQUFDLENBQUEsUUFERTtJQUFBLENBUEwsQ0FBQTs7QUFBQSwwQkFVQSxPQUFBLEdBQVMsU0FBQyxPQUFELEdBQUE7YUFDUCxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQVIsQ0FBZ0IsT0FBaEIsRUFETztJQUFBLENBVlQsQ0FBQTs7QUFBQSwwQkFhQSxPQUFBLEdBQVMsU0FBQSxHQUFBO0FBQ1AsVUFBQSxLQUFBO0FBQUEsTUFBQSxJQUFHLENBQUEsSUFBSyxDQUFBLHVCQUFELENBQUEsQ0FBUDtBQUNFLGVBQU8sS0FBUCxDQURGO09BQUEsTUFBQTs7ZUFHVSxDQUFDLGtCQUFtQixJQUFDLENBQUE7U0FBN0I7QUFBQSxRQUNBLDBDQUFBLFNBQUEsQ0FEQSxDQUFBO2VBRUEsS0FMRjtPQURPO0lBQUEsQ0FiVCxDQUFBOztBQUFBLDBCQXlCQSxPQUFBLEdBQVMsU0FBQSxHQUFBO0FBQ1AsVUFBQSxJQUFBO0FBQUEsTUFBQSxJQUFBLEdBQ0U7QUFBQSxRQUNFLE1BQUEsRUFBUSxhQURWO0FBQUEsUUFFRSxTQUFBLEVBQVcsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUFULENBQUEsQ0FGYjtBQUFBLFFBR0UsZ0JBQUEsRUFBbUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLENBQUEsQ0FIckI7QUFBQSxRQUlFLE1BQUEsRUFBUSxJQUFDLENBQUEsT0FBTyxDQUFDLE1BQVQsQ0FBQSxDQUpWO0FBQUEsUUFLRSxNQUFBLEVBQVEsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUFULENBQUEsQ0FMVjtBQUFBLFFBTUUsS0FBQSxFQUFRLElBQUMsQ0FBQSxNQUFELENBQUEsQ0FOVjtPQURGLENBQUE7QUFTQSxNQUFBLElBQUcscUJBQUEsSUFBYSxJQUFDLENBQUEsTUFBRCxLQUFhLElBQUMsQ0FBQSxPQUE5QjtBQUNFLFFBQUEsSUFBSyxDQUFBLFFBQUEsQ0FBTCxHQUFpQixJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVIsQ0FBQSxDQUFqQixDQURGO09BVEE7YUFXQSxLQVpPO0lBQUEsQ0F6QlQsQ0FBQTs7dUJBQUE7O0tBUHdCLEtBQUssQ0FBQyxPQTdNaEMsQ0FBQTtBQUFBLEVBMlBBLE1BQU8sQ0FBQSxhQUFBLENBQVAsR0FBd0IsU0FBQyxJQUFELEdBQUE7QUFDdEIsUUFBQSx3Q0FBQTtBQUFBLElBQ2MsZUFBWixVQURGLEVBRXFCLGNBQW5CLGlCQUZGLEVBR1UsV0FBUixNQUhGLEVBSVUsWUFBUixPQUpGLEVBS1UsWUFBUixPQUxGLEVBTWEsY0FBWCxTQU5GLENBQUE7V0FRSSxJQUFBLFdBQUEsQ0FBWSxPQUFaLEVBQXFCLE1BQXJCLEVBQTZCLEdBQTdCLEVBQWtDLElBQWxDLEVBQXdDLElBQXhDLEVBQThDLE1BQTlDLEVBVGtCO0VBQUEsQ0EzUHhCLENBQUE7QUFBQSxFQXdRQSxLQUFNLENBQUEsYUFBQSxDQUFOLEdBQXVCLFdBeFF2QixDQUFBO0FBQUEsRUF5UUEsS0FBTSxDQUFBLFlBQUEsQ0FBTixHQUFzQixVQXpRdEIsQ0FBQTtBQUFBLEVBMFFBLEtBQU0sQ0FBQSxnQkFBQSxDQUFOLEdBQTBCLGNBMVExQixDQUFBO0FBQUEsRUEyUUEsS0FBTSxDQUFBLGFBQUEsQ0FBTixHQUF1QixXQTNRdkIsQ0FBQTtTQTZRQSxZQTlRZTtBQUFBLENBRmpCLENBQUE7Ozs7QUNBQSxJQUFBLDhCQUFBO0VBQUE7aVNBQUE7O0FBQUEsOEJBQUEsR0FBaUMsT0FBQSxDQUFRLDBCQUFSLENBQWpDLENBQUE7O0FBQUEsTUFFTSxDQUFDLE9BQVAsR0FBaUIsU0FBQyxFQUFELEdBQUE7QUFDZixNQUFBLDZEQUFBO0FBQUEsRUFBQSxnQkFBQSxHQUFtQiw4QkFBQSxDQUErQixFQUEvQixDQUFuQixDQUFBO0FBQUEsRUFDQSxLQUFBLEdBQVEsZ0JBQWdCLENBQUMsS0FEekIsQ0FBQTtBQUFBLEVBRUEsTUFBQSxHQUFTLGdCQUFnQixDQUFDLE1BRjFCLENBQUE7QUFBQSxFQVFNO0FBQU4saUNBQUEsQ0FBQTs7OztLQUFBOztzQkFBQTs7S0FBeUIsS0FBSyxDQUFDLE9BUi9CLENBQUE7QUFBQSxFQVNBLE1BQU8sQ0FBQSxZQUFBLENBQVAsR0FBdUIsTUFBTyxDQUFBLFFBQUEsQ0FUOUIsQ0FBQTtBQUFBLEVBY007QUFLSixpQ0FBQSxDQUFBOztBQUFhLElBQUEsb0JBQUUsT0FBRixFQUFXLEdBQVgsRUFBZ0IsSUFBaEIsRUFBc0IsSUFBdEIsRUFBNEIsTUFBNUIsR0FBQTtBQUNYLE1BRFksSUFBQyxDQUFBLFVBQUEsT0FDYixDQUFBO0FBQUEsTUFBQSxJQUFHLENBQUEsQ0FBSyxjQUFBLElBQVUsY0FBWCxDQUFQO0FBQ0UsY0FBVSxJQUFBLEtBQUEsQ0FBTSxzREFBTixDQUFWLENBREY7T0FBQTtBQUFBLE1BRUEsNENBQU0sR0FBTixFQUFXLElBQVgsRUFBaUIsSUFBakIsRUFBdUIsTUFBdkIsQ0FGQSxDQURXO0lBQUEsQ0FBYjs7QUFBQSx5QkFPQSxTQUFBLEdBQVcsU0FBQSxHQUFBO0FBQ1QsTUFBQSxJQUFHLElBQUMsQ0FBQSxTQUFELENBQUEsQ0FBSDtlQUNFLEVBREY7T0FBQSxNQUFBO2VBR0UsSUFBQyxDQUFBLE9BQU8sQ0FBQyxPQUhYO09BRFM7SUFBQSxDQVBYLENBQUE7O0FBQUEseUJBa0JBLEdBQUEsR0FBSyxTQUFDLGdCQUFELEdBQUE7QUFDSCxNQUFBLElBQUcsSUFBQyxDQUFBLFNBQUQsQ0FBQSxDQUFIO2VBQ0UsR0FERjtPQUFBLE1BQUE7ZUFHRSxJQUFDLENBQUEsUUFISDtPQURHO0lBQUEsQ0FsQkwsQ0FBQTs7QUFBQSx5QkE0QkEsT0FBQSxHQUFTLFNBQUEsR0FBQTtBQUNQLFVBQUEsSUFBQTtBQUFBLE1BQUEsSUFBQSxHQUNFO0FBQUEsUUFDRSxNQUFBLEVBQVEsWUFEVjtBQUFBLFFBRUUsU0FBQSxFQUFXLElBQUMsQ0FBQSxPQUZkO0FBQUEsUUFHRSxLQUFBLEVBQVEsSUFBQyxDQUFBLE1BQUQsQ0FBQSxDQUhWO0FBQUEsUUFJRSxNQUFBLEVBQVEsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUFULENBQUEsQ0FKVjtBQUFBLFFBS0UsTUFBQSxFQUFRLElBQUMsQ0FBQSxPQUFPLENBQUMsTUFBVCxDQUFBLENBTFY7T0FERixDQUFBO0FBUUEsTUFBQSxJQUFHLHFCQUFBLElBQWEsSUFBQyxDQUFBLE1BQUQsS0FBYSxJQUFDLENBQUEsT0FBOUI7QUFDRSxRQUFBLElBQUssQ0FBQSxRQUFBLENBQUwsR0FBaUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLENBQUEsQ0FBakIsQ0FERjtPQVJBO2FBVUEsS0FYTztJQUFBLENBNUJULENBQUE7O3NCQUFBOztLQUx1QixLQUFLLENBQUMsT0FkL0IsQ0FBQTtBQUFBLEVBNERBLE1BQU8sQ0FBQSxZQUFBLENBQVAsR0FBdUIsU0FBQyxJQUFELEdBQUE7QUFDckIsUUFBQSxnQ0FBQTtBQUFBLElBQ2MsZUFBWixVQURGLEVBRVUsV0FBUixNQUZGLEVBR1UsWUFBUixPQUhGLEVBSVUsWUFBUixPQUpGLEVBS2EsY0FBWCxTQUxGLENBQUE7V0FPSSxJQUFBLFVBQUEsQ0FBVyxPQUFYLEVBQW9CLEdBQXBCLEVBQXlCLElBQXpCLEVBQStCLElBQS9CLEVBQXFDLE1BQXJDLEVBUmlCO0VBQUEsQ0E1RHZCLENBQUE7QUFBQSxFQXlFTTtBQU1KLDJCQUFBLENBQUE7O0FBQWEsSUFBQSxjQUFDLEdBQUQsRUFBTSxlQUFOLEVBQXVCLFNBQXZCLEVBQWtDLEdBQWxDLEVBQXVDLElBQXZDLEVBQTZDLElBQTdDLEVBQW1ELE1BQW5ELEdBQUE7QUFDWCxNQUFBLHNDQUFNLEdBQU4sRUFBVyxTQUFYLEVBQXNCLEdBQXRCLEVBQTJCLElBQTNCLEVBQWlDLElBQWpDLEVBQXVDLE1BQXZDLENBQUEsQ0FBQTtBQUNBLE1BQUEsSUFBRyx1QkFBSDtBQUNFLFFBQUEsSUFBQyxDQUFBLFVBQUQsQ0FBWSxDQUFaLEVBQWUsZUFBZixDQUFBLENBREY7T0FGVztJQUFBLENBQWI7O0FBQUEsbUJBT0EsVUFBQSxHQUFZLFNBQUMsUUFBRCxFQUFXLE9BQVgsR0FBQTtBQUNWLFVBQUEsNEJBQUE7QUFBQSxNQUFBLENBQUEsR0FBSSxJQUFDLENBQUEsc0JBQUQsQ0FBd0IsUUFBeEIsQ0FBSixDQUFBO0FBQ0E7V0FBQSw4Q0FBQTt3QkFBQTtBQUNFLFFBQUEsRUFBQSxHQUFTLElBQUEsVUFBQSxDQUFXLENBQVgsRUFBYyxFQUFFLENBQUMsMEJBQUgsQ0FBQSxDQUFkLEVBQStDLENBQUMsQ0FBQyxPQUFqRCxFQUEwRCxDQUExRCxDQUFULENBQUE7QUFBQSxzQkFDQSxFQUFFLENBQUMsWUFBSCxDQUFnQixFQUFoQixDQUFtQixDQUFDLE9BQXBCLENBQUEsRUFEQSxDQURGO0FBQUE7c0JBRlU7SUFBQSxDQVBaLENBQUE7O0FBQUEsbUJBZ0JBLFVBQUEsR0FBWSxTQUFDLFFBQUQsRUFBVyxNQUFYLEdBQUE7QUFDVixVQUFBLHFCQUFBO0FBQUEsTUFBQSxDQUFBLEdBQUksSUFBQyxDQUFBLHNCQUFELENBQXdCLFFBQXhCLENBQUosQ0FBQTtBQUVBO1dBQVMsa0ZBQVQsR0FBQTtBQUNFLFFBQUEsQ0FBQSxHQUFJLEVBQUUsQ0FBQyxZQUFILENBQW9CLElBQUEsVUFBQSxDQUFXLEVBQUUsQ0FBQywwQkFBSCxDQUFBLENBQVgsRUFBNEMsQ0FBNUMsQ0FBcEIsQ0FBa0UsQ0FBQyxPQUFuRSxDQUFBLENBQUosQ0FBQTtBQUFBLFFBQ0EsQ0FBQSxHQUFJLENBQUMsQ0FBQyxPQUROLENBQUE7QUFFQSxlQUFNLENBQUMsQ0FBQyxTQUFGLENBQUEsQ0FBTixHQUFBO0FBQ0UsVUFBQSxJQUFHLENBQUEsWUFBYSxLQUFLLENBQUMsU0FBdEI7QUFDRSxrQkFBVSxJQUFBLEtBQUEsQ0FBTSx1Q0FBTixDQUFWLENBREY7V0FBQTtBQUFBLFVBRUEsQ0FBQSxHQUFJLENBQUMsQ0FBQyxPQUZOLENBREY7UUFBQSxDQUZBO0FBQUEsc0JBTUEsQ0FBQyxDQUFDLE9BQUYsQ0FBQSxFQU5BLENBREY7QUFBQTtzQkFIVTtJQUFBLENBaEJaLENBQUE7O0FBQUEsbUJBbUNBLFdBQUEsR0FBYSxTQUFDLElBQUQsR0FBQTtBQUNYLFVBQUEsSUFBQTtBQUFBLE1BQUEsSUFBRyw0QkFBSDtBQUNFLFFBQUEsSUFBQSxHQUFPLEVBQUUsQ0FBQyxZQUFILENBQW9CLElBQUEsSUFBQSxDQUFLLEVBQUUsQ0FBQywwQkFBSCxDQUFBLENBQUwsQ0FBcEIsQ0FBeUQsQ0FBQyxPQUExRCxDQUFBLENBQVAsQ0FBQTtBQUFBLFFBQ0EsSUFBSSxDQUFDLFVBQUwsQ0FBZ0IsQ0FBaEIsRUFBbUIsSUFBbkIsQ0FEQSxDQUFBO2VBRUEsSUFBQyxDQUFBLGVBQWUsQ0FBQyxPQUFqQixDQUF5QixJQUF6QixFQUhGO09BQUEsTUFBQTtBQUtFLGNBQVUsSUFBQSxLQUFBLENBQU0sNERBQU4sQ0FBVixDQUxGO09BRFc7SUFBQSxDQW5DYixDQUFBOztBQUFBLG1CQThDQSxHQUFBLEdBQUssU0FBQSxHQUFBO0FBQ0gsVUFBQSxJQUFBO0FBQUEsTUFBQSxDQUFBOztBQUFJO0FBQUE7YUFBQSwyQ0FBQTt1QkFBQTtBQUNGLFVBQUEsSUFBRyxhQUFIOzBCQUNFLENBQUMsQ0FBQyxHQUFGLENBQUEsR0FERjtXQUFBLE1BQUE7MEJBR0UsSUFIRjtXQURFO0FBQUE7O21CQUFKLENBQUE7YUFLQSxDQUFDLENBQUMsSUFBRixDQUFPLEVBQVAsRUFORztJQUFBLENBOUNMLENBQUE7O0FBQUEsbUJBMERBLGlCQUFBLEdBQW1CLFNBQUMsRUFBRCxHQUFBO0FBQ2pCLE1BQUEsSUFBQyxDQUFBLGFBQUQsQ0FBZSxpQkFBZixFQUFrQyxFQUFsQyxDQUFBLENBQUE7YUFDQSxJQUFDLENBQUEsd0JBRmdCO0lBQUEsQ0ExRG5CLENBQUE7O0FBQUEsbUJBOERBLE9BQUEsR0FBUyxTQUFBLEdBQUE7QUFDUCxVQUFBLElBQUE7QUFBQSxNQUFBLElBQUEsR0FBTztBQUFBLFFBQ0wsTUFBQSxFQUFRLE1BREg7QUFBQSxRQUVMLEtBQUEsRUFBUSxJQUFDLENBQUEsTUFBRCxDQUFBLENBRkg7QUFBQSxRQUdMLFdBQUEsRUFBYyxJQUFDLENBQUEsU0FBUyxDQUFDLE1BQVgsQ0FBQSxDQUhUO0FBQUEsUUFJTCxLQUFBLEVBQVEsSUFBQyxDQUFBLEdBQUcsQ0FBQyxNQUFMLENBQUEsQ0FKSDtPQUFQLENBQUE7QUFNQSxNQUFBLElBQUcsb0JBQUg7QUFDRSxRQUFBLElBQUssQ0FBQSxNQUFBLENBQUwsR0FBZSxJQUFDLENBQUEsT0FBTyxDQUFDLE1BQVQsQ0FBQSxDQUFmLENBREY7T0FOQTtBQVFBLE1BQUEsSUFBRyxvQkFBSDtBQUNFLFFBQUEsSUFBSyxDQUFBLE1BQUEsQ0FBTCxHQUFlLElBQUMsQ0FBQSxPQUFPLENBQUMsTUFBVCxDQUFBLENBQWYsQ0FERjtPQVJBO0FBVUEsTUFBQSxJQUFHLHFCQUFBLElBQWEsSUFBQyxDQUFBLE1BQUQsS0FBYSxJQUFDLENBQUEsT0FBOUI7QUFDRSxRQUFBLElBQUssQ0FBQSxRQUFBLENBQUwsR0FBaUIsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLENBQUEsQ0FBakIsQ0FERjtPQVZBO2FBWUEsS0FiTztJQUFBLENBOURULENBQUE7O2dCQUFBOztLQU5pQixLQUFLLENBQUMsWUF6RXpCLENBQUE7QUFBQSxFQTRKQSxNQUFPLENBQUEsTUFBQSxDQUFQLEdBQWlCLFNBQUMsSUFBRCxHQUFBO0FBQ2YsUUFBQSx1Q0FBQTtBQUFBLElBQ1UsV0FBUixNQURGLEVBRWdCLGlCQUFkLFlBRkYsRUFHVSxXQUFSLE1BSEYsRUFJVSxZQUFSLE9BSkYsRUFLVSxZQUFSLE9BTEYsRUFNYSxjQUFYLFNBTkYsQ0FBQTtXQVFJLElBQUEsSUFBQSxDQUFLLEdBQUwsRUFBVSxNQUFWLEVBQXFCLFNBQXJCLEVBQWdDLEdBQWhDLEVBQXFDLElBQXJDLEVBQTJDLElBQTNDLEVBQWlELE1BQWpELEVBVFc7RUFBQSxDQTVKakIsQ0FBQTtBQUFBLEVBdUtBLEtBQU0sQ0FBQSxZQUFBLENBQU4sR0FBc0IsVUF2S3RCLENBQUE7QUFBQSxFQXdLQSxLQUFNLENBQUEsWUFBQSxDQUFOLEdBQXNCLFVBeEt0QixDQUFBO0FBQUEsRUF5S0EsS0FBTSxDQUFBLE1BQUEsQ0FBTixHQUFnQixJQXpLaEIsQ0FBQTtTQTBLQSxpQkEzS2U7QUFBQSxDQUZqQixDQUFBOzs7O0FDQUE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNseUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hpQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalFBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9YQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN01BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25jQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvekNBLElBQUEseUVBQUE7O0FBQUEsSUFBQSxHQUFZLE9BQUEsQ0FBUSxNQUFSLENBQVosQ0FBQTs7QUFBQSxNQUNBLEdBQVksSUFBSSxDQUFDLE1BRGpCLENBQUE7O0FBQUEsTUFFQSxHQUFZLElBQUksQ0FBQyxNQUFMLENBQUEsQ0FGWixDQUFBOztBQUFBLEtBR0EsR0FBWSxPQUFBLENBQVEsT0FBUixDQUhaLENBQUE7O0FBQUEsU0FJQSxHQUFZLE9BQUEsQ0FBUSxZQUFSLENBSlosQ0FBQTs7QUFBQSxDQUtBLEdBQUksT0FBQSxDQUFRLFlBQVIsQ0FMSixDQUFBOztBQUFBLElBT0ksQ0FBQyxHQUFMLENBQVMsU0FBVCxDQVBBLENBQUE7O0FBQUEsS0FTQSxHQUFRLE9BQUEsQ0FBUSxvQ0FBUixDQVRSLENBQUE7O0FBQUEsdUJBVUEsR0FBMEIsT0FBQSxDQUFRLHdDQUFSLENBVjFCLENBQUE7O0FBV0E7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FYQTs7OztBQ0FBLElBQUEseUVBQUE7O0FBQUEsSUFBQSxHQUFZLE9BQUEsQ0FBUSxNQUFSLENBQVosQ0FBQTs7QUFBQSxNQUNBLEdBQVksSUFBSSxDQUFDLE1BRGpCLENBQUE7O0FBQUEsTUFFQSxHQUFZLElBQUksQ0FBQyxNQUFMLENBQUEsQ0FGWixDQUFBOztBQUFBLEtBR0EsR0FBWSxPQUFBLENBQVEsT0FBUixDQUhaLENBQUE7O0FBQUEsU0FJQSxHQUFZLE9BQUEsQ0FBUSxZQUFSLENBSlosQ0FBQTs7QUFBQSxDQUtBLEdBQUksT0FBQSxDQUFRLFlBQVIsQ0FMSixDQUFBOztBQUFBLElBT0ksQ0FBQyxHQUFMLENBQVMsU0FBVCxDQVBBLENBQUE7O0FBQUEsS0FTQSxHQUFRLE9BQUEsQ0FBUSxvQ0FBUixDQVRSLENBQUE7O0FBQUEsdUJBVUEsR0FBMEIsT0FBQSxDQUFRLHdDQUFSLENBVjFCLENBQUE7O0FBV0E7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBWEE7Ozs7QUNBQSxJQUFBLCtFQUFBO0VBQUEsa0ZBQUE7O0FBQUEsSUFBQSxHQUFZLE9BQUEsQ0FBUSxNQUFSLENBQVosQ0FBQTs7QUFBQSxNQUNBLEdBQVksSUFBSSxDQUFDLE1BRGpCLENBQUE7O0FBQUEsTUFFQSxHQUFZLElBQUksQ0FBQyxNQUFMLENBQUEsQ0FGWixDQUFBOztBQUFBLEtBR0EsR0FBWSxPQUFBLENBQVEsT0FBUixDQUhaLENBQUE7O0FBQUEsU0FJQSxHQUFZLE9BQUEsQ0FBUSxZQUFSLENBSlosQ0FBQTs7QUFBQSxDQUtBLEdBQUksT0FBQSxDQUFRLFlBQVIsQ0FMSixDQUFBOztBQUFBLElBT0ksQ0FBQyxHQUFMLENBQVMsU0FBVCxDQVBBLENBQUE7O0FBQUEsS0FTQSxHQUFRLE9BQUEsQ0FBUSxvQ0FBUixDQVRSLENBQUE7O0FBQUEsdUJBVUEsR0FBMEIsT0FBQSxDQUFRLHdDQUFSLENBVjFCLENBQUE7O0FBQUE7QUFhZSxFQUFBLGNBQUEsR0FBQTtBQUNYLHlEQUFBLENBQUE7QUFBQSwrREFBQSxDQUFBO0FBQUEsK0RBQUEsQ0FBQTtBQUFBLGlFQUFBLENBQUE7QUFBQSwrREFBQSxDQUFBO0FBQUEsSUFBQSxJQUFDLENBQUEsK0JBQUQsR0FBbUMsQ0FBbkMsQ0FBQTtBQUFBLElBQ0EsSUFBQyxDQUFBLFdBQUQsR0FBZSxDQUFBLEdBQUksSUFBQyxDQUFBLCtCQURwQixDQUFBO0FBQUEsSUFFQSxJQUFDLENBQUEsa0JBQUQsR0FBc0IsSUFBQSxHQUFPLElBQUMsQ0FBQSwrQkFGOUIsQ0FBQTtBQUFBLElBR0EsSUFBQyxDQUFBLGlCQUFELEdBQXNCLEVBQUEsR0FBSyxJQUFDLENBQUEsK0JBQU4sR0FBd0MsQ0FIOUQsQ0FBQTtBQUFBLElBS0EsSUFBQyxDQUFBLElBQUQsR0FBUSxDQUxSLENBQUE7QUFBQSxJQU1BLElBQUMsQ0FBQSxHQUFELEdBQU8sQ0FOUCxDQUFBO0FBQUEsSUFPQSxJQUFDLENBQUEsUUFBRCxHQUFZLENBUFosQ0FBQTtBQUFBLElBU0EsSUFBQyxDQUFBLFlBQUQsQ0FBQSxDQVRBLENBRFc7RUFBQSxDQUFiOztBQUFBLGlCQVlBLFlBQUEsR0FBYyxTQUFBLEdBQUE7QUFFWixRQUFBLHFCQUFBO0FBQUEsSUFBQSxJQUFDLENBQUEsS0FBRCxHQUFTLEVBQVQsQ0FBQTtBQUFBLElBQ0EsSUFBQyxDQUFBLFNBQUQsR0FBYSx1QkFBQSxDQUF3QixJQUFDLENBQUEsS0FBekIsQ0FEYixDQUFBO0FBQUEsSUFFQSxJQUFDLENBQUEsS0FBSyxDQUFDLElBQVAsQ0FBZ0IsSUFBQSxLQUFBLENBQU0sQ0FBTixFQUFTLElBQUMsQ0FBQSxTQUFWLENBQWhCLENBRkEsQ0FBQTtBQUFBLElBR0EsSUFBQyxDQUFBLEtBQU0sQ0FBQSxDQUFBLENBQUUsQ0FBQyxHQUFWLENBQWMsTUFBZCxFQUFxQixTQUFyQixDQUhBLENBQUE7QUFJQTtTQUFTLHlHQUFULEdBQUE7QUFDRSxvQkFBQSxJQUFDLENBQUEsS0FBSyxDQUFDLElBQVAsQ0FBZ0IsSUFBQSxLQUFBLENBQU0sQ0FBTixFQUFTLElBQUMsQ0FBQSxTQUFWLENBQWhCLEVBQUEsQ0FERjtBQUFBO29CQU5ZO0VBQUEsQ0FaZCxDQUFBOztBQUFBLGlCQXFCQSxXQUFBLEdBQWEsU0FBQSxHQUFBO0FBQ1gsUUFBQSxDQUFBO0FBQUEsSUFBQSxDQUFBLEdBQUksQ0FBQyxDQUFDLE1BQUYsQ0FBUyxDQUFULEVBQWEsSUFBQyxDQUFBLEtBQUssQ0FBQyxNQUFQLEdBQWMsQ0FBM0IsQ0FBSixDQUFBO1dBQ0EsSUFBQyxDQUFBLEtBQU0sQ0FBQSxDQUFBLEVBRkk7RUFBQSxDQXJCYixDQUFBOztBQUFBLGlCQXlCQSxhQUFBLEdBQWUsU0FBQSxHQUFBO0FBQ2IsUUFBQSw2QkFBQTtBQUFBLElBQUEsS0FBQSxHQUFRLDRCQUFSLENBQUE7QUFBQSxJQUNBLE1BQUEsR0FBUyxDQUFDLENBQUMsTUFBRixDQUFTLENBQVQsRUFBWSxFQUFaLENBRFQsQ0FBQTtBQUFBLElBRUEsUUFBQSxHQUFXLEtBQU0sQ0FBQyxDQUFDLENBQUMsTUFBRixDQUFTLENBQVQsRUFBYSxLQUFLLENBQUMsTUFBTixHQUFhLENBQTFCLENBQUQsQ0FGakIsQ0FBQTtBQUFBLElBR0EsSUFBQSxHQUFPLEVBSFAsQ0FBQTtBQUFBLElBSUEsQ0FBQSxDQUFFLE1BQUYsQ0FBUyxDQUFDLEtBQVYsQ0FBZ0IsU0FBQSxHQUFBO2FBQUssSUFBQSxJQUFRLFNBQWI7SUFBQSxDQUFoQixDQUpBLENBQUE7V0FLQSxLQU5hO0VBQUEsQ0F6QmYsQ0FBQTs7QUFBQSxpQkFpQ0EsZ0JBQUEsR0FBa0IsU0FBQyxRQUFELEdBQUE7QUFDaEIsUUFBQSxHQUFBO0FBQUEsSUFBQSxHQUFBLEdBQU0sQ0FBQyxDQUFDLE1BQUYsQ0FBUyxDQUFULEVBQWEsSUFBQyxDQUFBLEtBQU0sQ0FBQSxRQUFBLENBQVMsQ0FBQyxHQUFqQixDQUFxQixNQUFyQixDQUE0QixDQUFDLEdBQTdCLENBQUEsQ0FBa0MsQ0FBQyxNQUFuQyxHQUEwQyxDQUF2RCxDQUFOLENBQUE7QUFBQSxJQUNBLElBQUMsQ0FBQSxLQUFNLENBQUEsUUFBQSxDQUFTLENBQUMsR0FBakIsQ0FBcUIsTUFBckIsQ0FBNEIsQ0FBQyxVQUE3QixDQUF3QyxHQUF4QyxFQUE2QyxJQUFDLENBQUEsYUFBRCxDQUFBLENBQTdDLENBREEsQ0FBQTtXQUVBLEtBSGdCO0VBQUEsQ0FqQ2xCLENBQUE7O0FBQUEsaUJBc0NBLGlCQUFBLEdBQW1CLFNBQUMsUUFBRCxHQUFBO0FBQ2pCLElBQUEsSUFBQyxDQUFBLEtBQU0sQ0FBQSxRQUFBLENBQVMsQ0FBQyxHQUFqQixDQUFxQixNQUFyQixDQUE0QixDQUFDLFdBQTdCLENBQXlDLElBQUMsQ0FBQSxhQUFELENBQUEsQ0FBekMsQ0FBQSxDQUFBO1dBQ0EsS0FGaUI7RUFBQSxDQXRDbkIsQ0FBQTs7QUFBQSxpQkEwQ0EsZ0JBQUEsR0FBa0IsU0FBQyxRQUFELEdBQUE7QUFDaEIsUUFBQSxpQkFBQTtBQUFBLElBQUEsSUFBRyxJQUFDLENBQUEsS0FBTSxDQUFBLFFBQUEsQ0FBUyxDQUFDLEdBQWpCLENBQXFCLE1BQXJCLENBQTRCLENBQUMsR0FBN0IsQ0FBQSxDQUFrQyxDQUFDLE1BQW5DLEdBQTRDLENBQS9DO0FBQ0UsTUFBQSxHQUFBLEdBQU0sQ0FBQyxDQUFDLE1BQUYsQ0FBUyxDQUFULEVBQWEsSUFBQyxDQUFBLEtBQU0sQ0FBQSxRQUFBLENBQVMsQ0FBQyxHQUFqQixDQUFxQixNQUFyQixDQUE0QixDQUFDLEdBQTdCLENBQUEsQ0FBa0MsQ0FBQyxNQUFuQyxHQUEwQyxDQUF2RCxDQUFOLENBQUE7QUFBQSxNQUNBLE1BQUEsR0FBUyxDQURULENBQUE7QUFBQSxNQUVBLElBQUEsR0FBTyxJQUFDLENBQUEsS0FBTSxDQUFBLFFBQUEsQ0FBUyxDQUFDLEdBQWpCLENBQXFCLE1BQXJCLENBQTRCLENBQUMsVUFBN0IsQ0FBd0MsR0FBeEMsRUFBNkMsTUFBN0MsQ0FGUCxDQURGO0tBQUE7V0FJQSxPQUxnQjtFQUFBLENBMUNsQixDQUFBOztBQUFBLGlCQWlEQSxnQkFBQSxHQUFrQixTQUFDLFFBQUQsR0FBQTtBQUNoQixRQUFBLGFBQUE7QUFBQSxJQUFBLE1BQUEsR0FBUyxDQUFDLElBQUMsQ0FBQSxnQkFBRixFQUFvQixJQUFDLENBQUEsZ0JBQXJCLEVBQXVDLElBQUMsQ0FBQSxpQkFBeEMsQ0FBVCxDQUFBO0FBQUEsSUFDQSxDQUFBLEdBQUksQ0FBQyxDQUFDLE1BQUYsQ0FBVSxNQUFNLENBQUMsTUFBUCxHQUFnQixDQUExQixDQURKLENBQUE7V0FFQSxFQUFBLEdBQUssTUFBTyxDQUFBLENBQUEsQ0FBUCxDQUFVLFFBQVYsRUFIVztFQUFBLENBakRsQixDQUFBOztBQUFBLGlCQXNEQSxhQUFBLEdBQWUsU0FBQyxRQUFELEdBQUE7QUFDYixRQUFBLElBQUE7QUFBQSxJQUFBLElBQUEsR0FBTyxJQUFDLENBQUEsS0FBTSxDQUFBLFFBQUEsQ0FBZCxDQUFBO1dBQ0EsSUFBSSxDQUFDLFlBQUwsQ0FBQSxDQUFtQixDQUFDLGNBQXBCLENBQUEsRUFGYTtFQUFBLENBdERmLENBQUE7O0FBQUEsaUJBMERBLFdBQUEsR0FBYSxTQUFBLEdBQUE7QUFDWCxRQUFBLHlCQUFBO0FBQUEsSUFBQSxRQUFBLEdBQVcsQ0FBQyxDQUFDLE1BQUYsQ0FBVSxJQUFDLENBQUEsaUJBQUQsR0FBbUIsQ0FBN0IsQ0FBWCxDQUFBO0FBQUEsSUFDQSxPQUFBLEdBQVUsQ0FBQyxJQUFDLENBQUEsYUFBRixFQUFpQixJQUFDLENBQUEsZ0JBQWxCLENBRFYsQ0FBQTtBQUFBLElBRUEsTUFBQSxHQUFTLENBQUMsQ0FBQyxNQUFGLENBQVUsT0FBTyxDQUFDLE1BQVIsR0FBZSxDQUF6QixDQUZULENBQUE7V0FHQSxPQUFRLENBQUEsTUFBQSxDQUFSLENBQWdCLFFBQWhCLEVBSlc7RUFBQSxDQTFEYixDQUFBOztBQUFBLGlCQWdFQSxRQUFBLEdBQVUsU0FBQSxHQUFBO0FBQ1IsUUFBQSwyQ0FBQTtBQUFBO0FBQUE7U0FBQSx1RUFBQTsrQkFBQTtBQUNFLG9CQUFBLElBQUksQ0FBQyxZQUFMLENBQUEsQ0FBbUIsQ0FBQyxRQUFwQixDQUFBLEVBQUEsQ0FERjtBQUFBO29CQURRO0VBQUEsQ0FoRVYsQ0FBQTs7QUFBQSxpQkFvRUEsVUFBQSxHQUFZLFNBQUMsV0FBRCxHQUFBO0FBQ1YsUUFBQSwySEFBQTtBQUFBLElBQUEsSUFBQyxDQUFBLFFBQUQsQ0FBQSxDQUFBLENBQUE7QUFBQSxJQUVBLElBQUMsQ0FBQSxJQUFELElBQVMsQ0FBSyxJQUFBLElBQUEsQ0FBQSxDQUFMLENBQVksQ0FBQyxPQUFiLENBQUEsQ0FBQSxHQUF5QixJQUFDLENBQUEsUUFGbkMsQ0FBQTtBQUFBLElBSUEsNEJBQUEsR0FBK0IsQ0FKL0IsQ0FBQTtBQUtBLFNBQVMsb0dBQVQsR0FBQTtBQUNFLE1BQUEsNEJBQUEsSUFBZ0MsSUFBQyxDQUFBLEtBQU0sQ0FBQSxDQUFBLENBQUUsQ0FBQyxZQUFWLENBQUEsQ0FBd0IsQ0FBQyxzQkFBekIsQ0FBQSxDQUFpRCxDQUFDLE1BQWxGLENBREY7QUFBQSxLQUxBO0FBQUEsSUFPQSxJQUFDLENBQUEsR0FBRCxJQUFRLDRCQUFBLEdBQTZCLElBQUMsQ0FBQSxLQUFLLENBQUMsTUFQNUMsQ0FBQTtBQUFBLElBU0EsWUFBQSxHQUFlLElBQUksQ0FBQyxLQUFMLENBQVcsSUFBQyxDQUFBLEdBQUQsR0FBSyxJQUFDLENBQUEsSUFBakIsQ0FUZixDQUFBO0FBVUEsSUFBQSxJQUFHLG1CQUFIO0FBQ0UsTUFBQSxPQUFPLENBQUMsR0FBUixDQUFZLENBQUEsRUFBQSxHQUFFLFdBQUYsR0FBZSxHQUFmLEdBQWlCLElBQUMsQ0FBQSxXQUFsQixHQUErQix3QkFBL0IsR0FBc0QsSUFBQyxDQUFBLEtBQUssQ0FBQyxNQUE3RCxHQUFxRSxZQUFyRSxHQUFnRiw0QkFBaEYsR0FBOEcsNEJBQTlHLENBQUEsR0FBNEksQ0FBQyx3QkFBQSxHQUF1QixJQUFDLENBQUEsR0FBeEIsR0FBNkIsaUJBQTdCLEdBQTZDLENBQUEsSUFBQyxDQUFBLElBQUQsR0FBTSxJQUFOLENBQTdDLEdBQXlELFlBQXpELEdBQW9FLFlBQXBFLEdBQWtGLGFBQW5GLENBQXhKLENBQUEsQ0FERjtLQVZBO0FBY0E7U0FBUyw2R0FBVCxHQUFBO0FBQ0UsTUFBQSxJQUFLLElBQUMsQ0FBQSxLQUFNLENBQUEsQ0FBQSxDQUFFLENBQUMsR0FBVixDQUFjLE1BQWQsQ0FBcUIsQ0FBQyxHQUF0QixDQUFBLENBQUEsS0FBaUMsSUFBQyxDQUFBLEtBQU0sQ0FBQSxDQUFBLEdBQUUsQ0FBRixDQUFJLENBQUMsR0FBWixDQUFnQixNQUFoQixDQUF1QixDQUFDLEdBQXhCLENBQUEsQ0FBdEM7QUFFRSxRQUFBLHdCQUFBLEdBQTJCLFNBQUMsUUFBRCxFQUFXLGFBQVgsR0FBQTtBQUN6QixjQUFBLGlDQUFBO0FBQUEsVUFBQSxHQUFBLEdBQU0sSUFBQyxDQUFBLEtBQU0sQ0FBQSxRQUFBLENBQVMsQ0FBQyxZQUFqQixDQUFBLENBQStCLENBQUMsc0JBQWhDLENBQUEsQ0FBTixDQUFBO0FBQ0EsZUFBQSwwQ0FBQTt3QkFBQTtBQUNFLFlBQUEsT0FBTyxDQUFDLEdBQVIsQ0FBWSxJQUFJLENBQUMsU0FBTCxDQUFlLENBQWYsQ0FBWixDQUFBLENBREY7QUFBQSxXQURBO0FBQUEsVUFHQSxPQUFPLENBQUMsR0FBUixDQUFZLEVBQVosQ0FIQSxDQUFBO0FBQUEsVUFJQSxDQUFBLEdBQUksU0FKSixDQUFBO0FBS0EsZUFBQSxvREFBQTt1QkFBQTtBQUNFLFlBQUEsSUFBRyxDQUFBLEtBQU8sQ0FBVjtBQUNFLGNBQUEsQ0FBQSxJQUFLLElBQUwsQ0FERjthQUFBO0FBQUEsWUFFQSxDQUFBLElBQU0sSUFBQSxHQUFHLENBRlQsQ0FERjtBQUFBLFdBTEE7QUFBQSxVQVNBLENBQUEsSUFBSyxHQVRMLENBQUE7QUFBQSxVQVVBLE9BQU8sQ0FBQyxHQUFSLENBQVksQ0FBWixDQVZBLENBQUE7QUFBQSxVQVdBLE9BQU8sQ0FBQyxHQUFSLENBQVksb0NBQVosQ0FYQSxDQUFBO0FBQUEsVUFZQSxPQUFPLENBQUMsR0FBUixDQUFhLHVEQUFBLEdBQXNELENBQUEsS0FBTSxDQUFBLGFBQUEsQ0FBYyxDQUFDLEdBQXJCLENBQXlCLE1BQXpCLENBQUEsQ0FBdEQsR0FBd0YsS0FBckcsQ0FaQSxDQUFBO2lCQWFBLElBZHlCO1FBQUEsQ0FBM0IsQ0FBQTtBQUFBLFFBZUEsT0FBTyxDQUFDLEdBQVIsQ0FBWSxFQUFaLENBZkEsQ0FBQTtBQUFBLFFBZ0JBLE9BQU8sQ0FBQyxHQUFSLENBQVkscUJBQVosQ0FoQkEsQ0FBQTtBQUFBLFFBaUJBLE9BQU8sQ0FBQyxHQUFSLENBQVksWUFBWixDQWpCQSxDQUFBO0FBa0JBLGFBQUEsb0RBQUE7dUJBQUE7QUFDRSxVQUFBLE9BQU8sQ0FBQyxHQUFSLENBQVksQ0FBQyxJQUFBLEdBQUcsQ0FBSCxHQUFNLElBQVAsQ0FBQSxHQUFXLENBQUMsQ0FBQyxHQUFGLENBQU0sTUFBTixDQUF2QixDQUFBLENBREY7QUFBQSxTQWxCQTtBQUFBLFFBb0JBLE9BQU8sQ0FBQyxHQUFSLENBQWEsd0JBQUEsR0FBdUIsQ0FBdkIsR0FBMEIsR0FBMUIsR0FBNEIsQ0FBQSxDQUFBLEdBQUUsQ0FBRixDQUE1QixHQUFpQyxJQUE5QyxDQXBCQSxDQUFBO0FBQUEsUUFxQkEsd0JBQUEsQ0FBeUIsQ0FBekIsRUFBNEIsQ0FBQSxHQUFFLENBQTlCLENBckJBLENBQUE7QUFBQSxRQXNCQSxPQUFPLENBQUMsR0FBUixDQUFZLEVBQVosQ0F0QkEsQ0FBQTtBQUFBLFFBdUJBLEdBQUEsR0FBTSx3QkFBQSxDQUF5QixDQUFBLEdBQUUsQ0FBM0IsRUFBOEIsQ0FBOUIsQ0F2Qk4sQ0FBQTtBQUFBLHNCQXlCQSxPQUFPLENBQUMsR0FBUixDQUFZLEVBQVosRUF6QkEsQ0FGRjtPQUFBLE1BQUE7OEJBQUE7T0FERjtBQUFBO29CQWZVO0VBQUEsQ0FwRVosQ0FBQTs7QUFBQSxpQkFpSEEsR0FBQSxHQUFLLFNBQUEsR0FBQTtBQUNILFFBQUEsdUNBQUE7QUFBQSxJQUFBLE9BQU8sQ0FBQyxHQUFSLENBQVksRUFBWixDQUFBLENBQUE7QUFDQTtTQUFhLDZHQUFiLEdBQUE7QUFDRSxNQUFBLElBQUMsQ0FBQSxRQUFELEdBQVksQ0FBQyxHQUFBLENBQUEsSUFBRCxDQUFVLENBQUMsT0FBWCxDQUFBLENBQVosQ0FBQTtBQUNBLFdBQVMsaUhBQVQsR0FBQTtBQUNFLFFBQUEsSUFBQyxDQUFBLFdBQUQsQ0FBQSxDQUFBLENBREY7QUFBQSxPQURBO0FBQUEsTUFJQSxJQUFDLENBQUEsVUFBRCxDQUFZLEtBQVosQ0FKQSxDQUFBO0FBQUEsb0JBS0EsSUFBQyxDQUFBLFlBQUQsQ0FBQSxFQUxBLENBREY7QUFBQTtvQkFGRztFQUFBLENBakhMLENBQUE7O2NBQUE7O0lBYkYsQ0FBQTs7QUFBQSxRQXdJQSxDQUFTLFdBQVQsRUFBc0IsU0FBQSxHQUFBO0FBQ3BCLEVBQUEsVUFBQSxDQUFXLFNBQUMsSUFBRCxHQUFBO0FBQ1QsSUFBQSxJQUFDLENBQUEsS0FBRCxHQUFhLElBQUEsSUFBQSxDQUFBLENBQWIsQ0FBQTtXQUNBLElBQUEsQ0FBQSxFQUZTO0VBQUEsQ0FBWCxDQUFBLENBQUE7QUFBQSxFQUlBLEVBQUEsQ0FBRyxtQkFBSCxFQUF3QixTQUFBLEdBQUE7QUFDdEIsUUFBQSxJQUFBO0FBQUEsSUFBQSxDQUFBLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFYLENBQUEsQ0FBd0IsQ0FBQyxZQUE3QixDQUFBO0FBQUEsSUFDQSxDQUFDLENBQUMsR0FBRixDQUFNLEdBQU4sRUFBVSxNQUFWLEVBQWtCLFdBQWxCLENBREEsQ0FBQTtBQUFBLElBRUEsQ0FBQyxDQUFDLEdBQUYsQ0FBTSxLQUFOLEVBQVk7QUFBQSxNQUFDLENBQUEsRUFBRSxHQUFIO0tBQVosRUFBcUIsV0FBckIsQ0FGQSxDQUFBO0FBQUEsSUFHQSxDQUFBLEdBQUksQ0FBQyxDQUFDLEtBSE4sQ0FBQTtBQUFBLElBSUEsQ0FBQyxDQUFDLENBSkYsQ0FBQTtBQUFBLElBS0EsQ0FBQyxDQUFDLEdBQUYsR0FBUTtBQUFBLE1BQUMsQ0FBQSxFQUFFLEVBQUg7S0FMUixDQUFBO0FBQUEsSUFNQSxDQUFDLENBQUMsQ0FORixDQUFBO0FBQUEsSUFPQSxDQUFDLENBQUMsR0FQRixDQUFBO0FBQUEsSUFRQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBUk4sQ0FBQTtBQUFBLElBU0EsTUFBQSxDQUFPLENBQUMsQ0FBQyxDQUFULENBQVcsQ0FBQyxFQUFFLENBQUMsS0FBZixDQUFxQixNQUFyQixDQVRBLENBQUE7V0FVQSxNQUFBLENBQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFiLENBQWUsQ0FBQyxFQUFFLENBQUMsS0FBbkIsQ0FBeUIsR0FBekIsRUFYc0I7RUFBQSxDQUF4QixDQUpBLENBQUE7QUFBQSxFQWlCQSxFQUFBLENBQUcsb0NBQUgsRUFBeUMsU0FBQSxHQUFBO0FBQ3ZDLElBQUEsSUFBQyxDQUFBLEtBQUssQ0FBQyxXQUFQLENBQUEsQ0FBb0IsQ0FBQyxHQUFyQixDQUF5QixHQUF6QixFQUE4QjtBQUFBLE1BQUMsR0FBQSxFQUFJLEdBQUw7S0FBOUIsQ0FBQSxDQUFBO0FBQUEsSUFDQSxJQUFDLENBQUEsS0FBSyxDQUFDLFdBQVAsQ0FBQSxDQUFvQixDQUFDLEdBQXJCLENBQXlCLEdBQXpCLEVBQThCO0FBQUEsTUFBQyxHQUFBLEVBQUk7QUFBQSxRQUFDLENBQUEsRUFBRSx1Q0FBSDtPQUFMO0tBQTlCLENBREEsQ0FBQTtBQUFBLElBRUEsSUFBQyxDQUFBLEtBQUssQ0FBQyxXQUFQLENBQUEsQ0FBb0IsQ0FBQyxHQUFyQixDQUF5QixHQUF6QixFQUE4QjtBQUFBLE1BQUMsR0FBQSxFQUFJLEVBQUw7S0FBOUIsQ0FGQSxDQUFBO0FBQUEsSUFHQSxJQUFDLENBQUEsS0FBSyxDQUFDLFdBQVAsQ0FBQSxDQUFvQixDQUFDLEdBQXJCLENBQXlCLEdBQXpCLEVBQThCO0FBQUEsTUFBQyxHQUFBLEVBQUksR0FBTDtLQUE5QixDQUhBLENBQUE7QUFBQSxJQUlBLElBQUMsQ0FBQSxLQUFLLENBQUMsV0FBUCxDQUFBLENBQW9CLENBQUMsR0FBckIsQ0FBeUIsR0FBekIsRUFBOEI7QUFBQSxNQUFDLEdBQUEsRUFBSSxHQUFMO0tBQTlCLENBSkEsQ0FBQTtBQUFBLElBS0EsSUFBQyxDQUFBLEtBQUssQ0FBQyxVQUFQLENBQUEsQ0FMQSxDQUFBO0FBQUEsSUFNQSxJQUFDLENBQUEsS0FBSyxDQUFDLFdBQVAsQ0FBQSxDQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFqQyxDQUE0QyxDQUE1QyxFQUE4QyxLQUE5QyxDQU5BLENBQUE7QUFBQSxJQU9BLElBQUMsQ0FBQSxLQUFLLENBQUMsVUFBUCxDQUFBLENBUEEsQ0FBQTtXQVFBLE1BQUEsQ0FBTyxJQUFDLENBQUEsS0FBSyxDQUFDLFdBQVAsQ0FBQSxDQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFqQyxDQUFBLENBQVAsQ0FBOEMsQ0FBQyxFQUFFLENBQUMsS0FBbEQsQ0FBd0QsMENBQXhELEVBVHVDO0VBQUEsQ0FBekMsQ0FqQkEsQ0FBQTtBQUFBLEVBNkJBLEVBQUEsQ0FBRyw4QkFBSCxFQUFtQyxTQUFBLEdBQUE7QUFDakMsSUFBQSxJQUFDLENBQUEsS0FBSyxDQUFDLFdBQVAsQ0FBQSxDQUFvQixDQUFDLEdBQXJCLENBQXlCLFFBQXpCLEVBQW1DLE1BQW5DLEVBQTJDLFdBQTNDLENBQUEsQ0FBQTtBQUFBLElBQ0EsSUFBQyxDQUFBLEtBQUssQ0FBQyxXQUFQLENBQUEsQ0FBb0IsQ0FBQyxHQUFyQixDQUF5QixRQUF6QixFQUFtQyxDQUFuQyxFQUFzQyxXQUF0QyxDQURBLENBQUE7QUFBQSxJQUVBLElBQUMsQ0FBQSxLQUFLLENBQUMsV0FBUCxDQUFBLENBQW9CLENBQUMsR0FBckIsQ0FBeUIsUUFBekIsRUFBbUM7QUFBQSxNQUFDLENBQUEsRUFBRSxJQUFIO0tBQW5DLEVBQTZDLFdBQTdDLENBRkEsQ0FBQTtBQUFBLElBR0EsSUFBQyxDQUFBLEtBQUssQ0FBQyxVQUFQLENBQUEsQ0FIQSxDQUFBO0FBQUEsSUFJQSxNQUFBLENBQU8sSUFBQyxDQUFBLEtBQUssQ0FBQyxXQUFQLENBQUEsQ0FBb0IsQ0FBQyxHQUFyQixDQUF5QixRQUF6QixDQUFQLENBQTBDLENBQUMsRUFBRSxDQUFDLEtBQTlDLENBQW9ELE1BQXBELENBSkEsQ0FBQTtBQUFBLElBS0EsTUFBQSxDQUFPLElBQUMsQ0FBQSxLQUFLLENBQUMsV0FBUCxDQUFBLENBQW9CLENBQUMsR0FBckIsQ0FBeUIsUUFBekIsQ0FBUCxDQUEwQyxDQUFDLEVBQUUsQ0FBQyxLQUE5QyxDQUFvRCxDQUFwRCxDQUxBLENBQUE7V0FNQSxNQUFBLENBQU8sSUFBQyxDQUFBLEtBQUssQ0FBQyxXQUFQLENBQUEsQ0FBb0IsQ0FBQyxHQUFyQixDQUF5QixRQUF6QixDQUFrQyxDQUFDLEdBQW5DLENBQXVDLEdBQXZDLENBQVAsQ0FBbUQsQ0FBQyxFQUFFLENBQUMsS0FBdkQsQ0FBNkQsSUFBN0QsRUFQaUM7RUFBQSxDQUFuQyxDQTdCQSxDQUFBO1NBc0NBLEVBQUEsQ0FBRyxpRUFBSCxFQUFzRSxTQUFBLEdBQUE7V0FDcEUsSUFBQyxDQUFBLEtBQUssQ0FBQyxHQUFQLENBQUEsRUFEb0U7RUFBQSxDQUF0RSxFQXZDb0I7QUFBQSxDQUF0QixDQXhJQSxDQUFBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3Rocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIil9dmFyIGY9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGYuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sZixmLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxuXyA9IHJlcXVpcmUgXCJ1bmRlcnNjb3JlXCJcblxubW9kdWxlLmV4cG9ydHMgPSAodXNlcl9saXN0KS0+XG5cbiAgI1xuICAjIEEgdHJpdmlhbCBDb25uZWN0b3IgdGhhdCBzaW11bGF0ZXMgbmV0d29yayBkZWxheS5cbiAgI1xuICBjbGFzcyBUZXN0Q29ubmVjdG9yXG4gICAgY29uc3RydWN0b3I6IChAZW5naW5lLCBASEIsIEBleGVjdXRpb25fbGlzdGVuZXIpLT5cbiAgICAgIHNlbmRfID0gKG8pPT5cbiAgICAgICAgQHNlbmQgb1xuICAgICAgQGV4ZWN1dGlvbl9saXN0ZW5lci5wdXNoIHNlbmRfXG5cbiAgICAgIEBhcHBsaWVkX29wZXJhdGlvbnMgPSBbXVxuICAgICAgYXBwbGllZE9wZXJhdGlvbnNMaXN0ZW5lciA9IChvKT0+XG4gICAgICAgIEBhcHBsaWVkX29wZXJhdGlvbnMucHVzaCBvXG4gICAgICBAZXhlY3V0aW9uX2xpc3RlbmVyLnB1c2ggYXBwbGllZE9wZXJhdGlvbnNMaXN0ZW5lclxuICAgICAgaWYgbm90ICh1c2VyX2xpc3Q/Lmxlbmd0aCBpcyAwKVxuICAgICAgICBAZW5naW5lLmFwcGx5T3BzIHVzZXJfbGlzdFswXS5nZXRIaXN0b3J5QnVmZmVyKCkuX2VuY29kZSgpXG5cbiAgICAgIEB1bmV4ZWN1dGVkID0ge31cblxuICAgIGdldE9wc0luRXhlY3V0aW9uT3JkZXI6ICgpLT5cbiAgICAgIEBhcHBsaWVkX29wZXJhdGlvbnNcblxuICAgIGdldFJvb3RFbGVtZW50OiAoKS0+XG4gICAgICBpZiB1c2VyX2xpc3QubGVuZ3RoID4gMFxuICAgICAgICB1c2VyX2xpc3RbMF0uZ2V0Um9vdEVsZW1lbnQoKS5nZXRVaWQoKVxuXG4gICAgc2VuZDogKG8pLT5cbiAgICAgIGlmIChvLnVpZC5jcmVhdG9yIGlzIEBIQi5nZXRVc2VySWQoKSkgYW5kICh0eXBlb2Ygby51aWQub3BfbnVtYmVyIGlzbnQgXCJzdHJpbmdcIilcbiAgICAgICAgZm9yIHVzZXIgaW4gdXNlcl9saXN0XG4gICAgICAgICAgaWYgdXNlci5nZXRVc2VySWQoKSBpc250IEBIQi5nZXRVc2VySWQoKVxuICAgICAgICAgICAgdXNlci5nZXRDb25uZWN0b3IoKS5yZWNlaXZlKG8pXG5cbiAgICByZWNlaXZlOiAobyktPlxuICAgICAgQHVuZXhlY3V0ZWRbby5jcmVhdG9yXSA/PSBbXVxuICAgICAgQHVuZXhlY3V0ZWRbby5jcmVhdG9yXS5wdXNoIG9cblxuICAgIGZsdXNoT25lOiAodXNlciktPlxuICAgICAgaWYgQHVuZXhlY3V0ZWRbdXNlcl0/Lmxlbmd0aCA+IDBcbiAgICAgICAgQGVuZ2luZS5hcHBseU9wIEB1bmV4ZWN1dGVkW3VzZXJdLnNoaWZ0KClcblxuICAgIGZsdXNoT25lUmFuZG9tOiAoKS0+XG4gICAgICBAZmx1c2hPbmUgKF8ucmFuZG9tIDAsICh1c2VyX2xpc3QubGVuZ3RoLTEpKVxuXG4gICAgZmx1c2hBbGw6ICgpLT5cbiAgICAgIGZvciBuLG9wcyBvZiBAdW5leGVjdXRlZFxuICAgICAgICBAZW5naW5lLmFwcGx5T3BzIG9wc1xuICAgICAgQHVuZXhlY3V0ZWQgPSB7fVxuICAgIHN5bmM6ICgpLT5cbiAgICAgIHRocm93IG5ldyBFcnJvciBcIkNhbid0IHVzZSB0aGlzIGEudC5tLlwiXG4iLCJcclxuI1xyXG4jIFRoZSBFbmdpbmUgaGFuZGxlcyBob3cgYW5kIGluIHdoaWNoIG9yZGVyIHRvIGV4ZWN1dGUgb3BlcmF0aW9ucyBhbmQgYWRkIG9wZXJhdGlvbnMgdG8gdGhlIEhpc3RvcnlCdWZmZXIuXHJcbiNcclxuY2xhc3MgRW5naW5lXHJcbiAgY29uc3RydWN0b3I6IChASEIsIEBwYXJzZXIpLT5cclxuICAgIEB1bnByb2Nlc3NlZF9vcHMgPSBbXVxyXG5cclxuICBwYXJzZU9wZXJhdGlvbjogKGpzb24pLT5cclxuICAgIHR5cGVQYXJzZXIgPSBAcGFyc2VyW2pzb24udHlwZV1cclxuICAgIGlmIHR5cGVQYXJzZXI/XHJcbiAgICAgIHR5cGVQYXJzZXIganNvblxyXG4gICAgZWxzZVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IgXCJZb3UgZm9yZ290IHRvIHNwZWNpZnkgYSBwYXJzZXIgZm9yIHR5cGUgI3tqc29uLnR5cGV9LiBUaGUgbWVzc2FnZSBpcyAje0pTT04uc3RyaW5naWZ5IGpzb259LlwiXHJcblxyXG4gIGFwcGx5T3BzOiAob3BzX2pzb24pLT5cclxuICAgIG9wcyA9IFtdXHJcbiAgICBmb3IgbyBpbiBvcHNfanNvblxyXG4gICAgICBvcHMucHVzaCBAcGFyc2VPcGVyYXRpb24gb1xyXG4gICAgZm9yIG8gaW4gb3BzXHJcbiAgICAgIEBIQi5hZGRPcGVyYXRpb24gb1xyXG4gICAgZm9yIG8gaW4gb3BzXHJcbiAgICAgIGlmIG5vdCBvLmV4ZWN1dGUoKVxyXG4gICAgICAgIEB1bnByb2Nlc3NlZF9vcHMucHVzaCBvXHJcbiAgICBAdHJ5VW5wcm9jZXNzZWQoKVxyXG5cclxuICBhcHBseU9wOiAob3BfanNvbiktPlxyXG4gICAgIyAkcGFyc2VfYW5kX2V4ZWN1dGUgd2lsbCByZXR1cm4gZmFsc2UgaWYgJG9fanNvbiB3YXMgcGFyc2VkIGFuZCBleGVjdXRlZCwgb3RoZXJ3aXNlIHRoZSBwYXJzZWQgb3BlcmFkaW9uXHJcbiAgICBvID0gQHBhcnNlT3BlcmF0aW9uIG9wX2pzb25cclxuICAgIEBIQi5hZGRPcGVyYXRpb24gb1xyXG4gICAgaWYgbm90IG8uZXhlY3V0ZSgpXHJcbiAgICAgIEB1bnByb2Nlc3NlZF9vcHMucHVzaCBvXHJcbiAgICBAdHJ5VW5wcm9jZXNzZWQoKVxyXG5cclxuICB0cnlVbnByb2Nlc3NlZDogKCktPlxyXG4gICAgd2hpbGUgdHJ1ZVxyXG4gICAgICBvbGRfbGVuZ3RoID0gQHVucHJvY2Vzc2VkX29wcy5sZW5ndGhcclxuICAgICAgdW5wcm9jZXNzZWQgPSBbXVxyXG4gICAgICBmb3Igb3AgaW4gQHVucHJvY2Vzc2VkX29wc1xyXG4gICAgICAgIGlmIG5vdCBvcC5leGVjdXRlKClcclxuICAgICAgICAgIHVucHJvY2Vzc2VkLnB1c2ggb3BcclxuICAgICAgQHVucHJvY2Vzc2VkX29wcyA9IHVucHJvY2Vzc2VkXHJcbiAgICAgIGlmIEB1bnByb2Nlc3NlZF9vcHMubGVuZ3RoIGlzIG9sZF9sZW5ndGhcclxuICAgICAgICBicmVha1xyXG5cclxuICBcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVuZ2luZVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCJcbmpzb25fdHlwZXNfdW5pbml0aWFsaXplZCA9IHJlcXVpcmUgXCIuLi9UeXBlcy9Kc29uVHlwZXMuY29mZmVlXCJcbkhpc3RvcnlCdWZmZXIgPSByZXF1aXJlIFwiLi4vSGlzdG9yeUJ1ZmZlci5jb2ZmZWVcIlxuRW5naW5lID0gcmVxdWlyZSBcIi4uL0VuZ2luZS5jb2ZmZWVcIlxuXG4jXG4jIEZyYW1ld29yayBmb3IgSnNvbiBkYXRhLXN0cnVjdHVyZXMuXG4jIEtub3duIHZhbHVlcyB0aGF0IGFyZSBzdXBwb3J0ZWQ6XG4jICogU3RyaW5nXG4jICogSW50ZWdlclxuIyAqIEFycmF5XG4jXG5jbGFzcyBKc29uWWF0dGFcbiAgY29uc3RydWN0b3I6ICh1c2VyX2lkLCBDb25uZWN0b3IpLT5cbiAgICBASEIgPSBuZXcgSGlzdG9yeUJ1ZmZlciB1c2VyX2lkXG4gICAganNvbl90eXBlcyA9IGpzb25fdHlwZXNfdW5pbml0aWFsaXplZCBASEJcbiAgICBAZW5naW5lID0gbmV3IEVuZ2luZSBASEIsIGpzb25fdHlwZXMucGFyc2VyXG4gICAgQGNvbm5lY3RvciA9IG5ldyBDb25uZWN0b3IgQGVuZ2luZSwgQEhCLCBqc29uX3R5cGVzLmV4ZWN1dGlvbl9saXN0ZW5lciwgQFxuICAgIHJvb3RfZWxlbSA9IEBjb25uZWN0b3IuZ2V0Um9vdEVsZW1lbnQoKVxuICAgIGlmIG5vdCByb290X2VsZW0/XG4gICAgICBmaXJzdF93b3JkID0gbmV3IGpzb25fdHlwZXMudHlwZXMuSnNvblR5cGUgQEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKClcbiAgICAgIEBIQi5hZGRPcGVyYXRpb24oZmlyc3Rfd29yZClcbiAgICAgIGZpcnN0X3dvcmQuZXhlY3V0ZSgpXG4gICAgICBAcm9vdF9lbGVtZW50ID0gZmlyc3Rfd29yZFxuICAgIGVsc2VcbiAgICAgIEByb290X2VsZW1lbnQgPSBASEIuZ2V0T3BlcmF0aW9uKHJvb3RfZWxlbSlcblxuICAjXG4gICMgQHJlc3VsdCBKc29uVHlwZVxuICAjXG4gIGdldFJvb3RFbGVtZW50OiAoKS0+XG4gICAgQHJvb3RfZWxlbWVudFxuXG4gICNcbiAgIyBAc2VlIEVuZ2luZVxuICAjXG4gIGdldEVuZ2luZTogKCktPlxuICAgIEBlbmdpbmVcblxuICAjXG4gICMgR2V0IHRoZSBpbml0aWFsaXplZCBjb25uZWN0b3IuXG4gICNcbiAgZ2V0Q29ubmVjdG9yOiAoKS0+XG4gICAgQGNvbm5lY3RvclxuXG4gICNcbiAgIyBAc2VlIEhpc3RvcnlCdWZmZXJcbiAgI1xuICBnZXRIaXN0b3J5QnVmZmVyOiAoKS0+XG4gICAgQEhCXG5cbiAgI1xuICAjIEBzZWUgSnNvblR5cGUuc2V0TXV0YWJsZURlZmF1bHRcbiAgI1xuICBzZXRNdXRhYmxlRGVmYXVsdDogKG11dGFibGUpLT5cbiAgICAgQHJvb3RfZWxlbWVudC5zZXRNdXRhYmxlRGVmYXVsdChtdXRhYmxlKVxuXG4gICNcbiAgIyBHZXQgdGhlIFVzZXJJZCBmcm9tIHRoZSBIaXN0b3J5QnVmZmVyIG9iamVjdC5cbiAgIyBJbiBtb3N0IGNhc2VzIHRoaXMgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgdXNlcl9pZCB2YWx1ZSB3aXRoIHdoaWNoXG4gICMgSnNvbllhdHRhIHdhcyBpbml0aWFsaXplZCAoRGVwZW5kaW5nIG9uIHRoZSBIaXN0b3J5QnVmZmVyIGltcGxlbWVudGF0aW9uKS5cbiAgI1xuICBnZXRVc2VySWQ6ICgpLT5cbiAgICBASEIuZ2V0VXNlcklkKClcblxuICAjXG4gICMgQHNlZSBKc29uVHlwZS52YWxcbiAgI1xuICB2YWwgOiAobmFtZSwgY29udGVudCwgbXV0YWJsZSktPlxuICAgIEByb290X2VsZW1lbnQudmFsKG5hbWUsIGNvbnRlbnQsIG11dGFibGUpXG5cbiAgI1xuICAjIEBzZWUgSnNvblR5cGUudmFsdWVcbiAgI1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkgSnNvbllhdHRhLnByb3RvdHlwZSwgJ3ZhbHVlJyxcbiAgICBnZXQgOiAtPiBAcm9vdF9lbGVtZW50LnZhbHVlXG4gICAgc2V0IDogKG8pLT5cbiAgICAgIGlmIG8uY29uc3RydWN0b3IgaXMge30uY29uc3RydWN0b3JcbiAgICAgICAgZm9yIG9fbmFtZSxvX29iaiBvZiBvXG4gICAgICAgICAgQHZhbChvX25hbWUsIG9fb2JqLCAnaW1tdXRhYmxlJylcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yIFwiWW91IG11c3Qgb25seSBzZXQgT2JqZWN0IHZhbHVlcyFcIlxud2luZG93Py5Kc29uWWF0dGEgPSBKc29uWWF0dGFcbm1vZHVsZS5leHBvcnRzID0gSnNvbllhdHRhXG4iLCJcbnRleHRfdHlwZXNfdW5pbml0aWFsaXplZCA9IHJlcXVpcmUgXCIuLi9UeXBlcy9UZXh0VHlwZXMuY29mZmVlXCJcbkhpc3RvcnlCdWZmZXIgPSByZXF1aXJlIFwiLi4vSGlzdG9yeUJ1ZmZlci5jb2ZmZWVcIlxuRW5naW5lID0gcmVxdWlyZSBcIi4uL0VuZ2luZS5jb2ZmZWVcIlxuXG4jXG4jIEZyYW1ld29yayBmb3IgVGV4dCBEYXRhc3RydWN0dXJlcy5cbiNcbmNsYXNzIFRleHRZYXR0YVxuICBjb25zdHJ1Y3RvcjogKHVzZXJfaWQsIENvbm5lY3RvciktPlxuICAgIEBIQiA9IG5ldyBIaXN0b3J5QnVmZmVyIHVzZXJfaWRcbiAgICB0ZXh0X3R5cGVzID0gdGV4dF90eXBlc191bmluaXRpYWxpemVkIEBIQlxuICAgIEBlbmdpbmUgPSBuZXcgRW5naW5lIEBIQiwgdGV4dF90eXBlcy5wYXJzZXJcbiAgICBAY29ubmVjdG9yID0gbmV3IENvbm5lY3RvciBAZW5naW5lLCBASEIsIHRleHRfdHlwZXMuZXhlY3V0aW9uX2xpc3RlbmVyXG4gICAgcm9vdF9lbGVtID0gQGNvbm5lY3Rvci5nZXRSb290RWxlbWVudCgpXG4gICAgaWYgbm90IHJvb3RfZWxlbT9cbiAgICAgIGZpcnN0X3dvcmQgPSBuZXcgdGV4dF90eXBlcy50eXBlcy5Xb3JkIEBIQi5nZXROZXh0T3BlcmF0aW9uSWRlbnRpZmllcigpXG4gICAgICBASEIuYWRkT3BlcmF0aW9uKGZpcnN0X3dvcmQpXG4gICAgICBmaXJzdF93b3JkLmV4ZWN1dGUoKVxuICAgICAgQHJvb3RfZWxlbWVudCA9IEBIQi5hZGRPcGVyYXRpb24obmV3IHRleHRfdHlwZXMudHlwZXMuUmVwbGFjZU1hbmFnZXIgZmlyc3Rfd29yZCwgQEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKCkpLmV4ZWN1dGUoKVxuICAgIGVsc2VcbiAgICAgIEByb290X2VsZW1lbnQgPSBASEIuZ2V0T3BlcmF0aW9uKHJvb3RfZWxlbSlcblxuICBnZXRSb290RWxlbWVudDogKCktPlxuICAgIEByb290X2VsZW1lbnRcblxuICBnZXRFbmdpbmU6ICgpLT5cbiAgICBAZW5naW5lXG5cbiAgZ2V0Q29ubmVjdG9yOiAoKS0+XG4gICAgQGNvbm5lY3RvclxuXG4gIGdldEhpc3RvcnlCdWZmZXI6ICgpLT5cbiAgICBASEJcblxuICBnZXRVc2VySWQ6ICgpLT5cbiAgICBASEIuZ2V0VXNlcklkKClcblxuICB2YWw6ICgpLT5cbiAgICBAcm9vdF9lbGVtZW50LnZhbCgpLnZhbCgpXG5cbiAgaW5zZXJ0VGV4dDogKHBvcywgY29udGVudCktPlxuICAgIEByb290X2VsZW1lbnQudmFsKCkuaW5zZXJ0VGV4dCBwb3MsIGNvbnRlbnRcblxuICBkZWxldGVUZXh0OiAocG9zLCBsZW5ndGgpLT5cbiAgICBAcm9vdF9lbGVtZW50LnZhbCgpLmRlbGV0ZVRleHQgcG9zLCBsZW5ndGhcblxuICByZXBsYWNlVGV4dDogKHRleHQpLT5cbiAgICBAcm9vdF9lbGVtZW50LnZhbCgpLnJlcGxhY2VUZXh0IHRleHRcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFRleHRZYXR0YVxuIiwiXG4jXG4jIEFuIG9iamVjdCB0aGF0IGhvbGRzIGFsbCBhcHBsaWVkIG9wZXJhdGlvbnMuXG4jXG4jIEBub3RlIFRoZSBIaXN0b3J5QnVmZmVyIGlzIGNvbW1vbmx5IGFiYnJldmlhdGVkIHRvIEhCLlxuI1xuY2xhc3MgSGlzdG9yeUJ1ZmZlclxuXG4gICNcbiAgIyBDcmVhdGVzIGFuIGVtcHR5IEhCLlxuICAjIEBwYXJhbSB7T2JqZWN0fSB1c2VyX2lkIENyZWF0b3Igb2YgdGhlIEhCLlxuICAjXG4gIGNvbnN0cnVjdG9yOiAoQHVzZXJfaWQpLT5cbiAgICBAb3BlcmF0aW9uX2NvdW50ZXIgPSB7fVxuICAgIEBidWZmZXIgPSB7fVxuICAgIEBjaGFuZ2VfbGlzdGVuZXJzID0gW11cblxuICAjXG4gICMgR2V0IHRoZSB1c2VyIGlkIHdpdGggd2ljaCB0aGUgSGlzdG9yeSBCdWZmZXIgd2FzIGluaXRpYWxpemVkLlxuICAjXG4gIGdldFVzZXJJZDogKCktPlxuICAgIEB1c2VyX2lkXG5cbiAgI1xuICAjIEdldCB0aGUgb3BlcmF0aW9uIGNvdW50ZXIgdGhhdCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRvY3VtZW50LlxuICAjXG4gIGdldE9wZXJhdGlvbkNvdW50ZXI6ICgpLT5cbiAgICByZXMgPSB7fVxuICAgIGZvciB1c2VyLGN0biBvZiBAb3BlcmF0aW9uX2NvdW50ZXJcbiAgICAgIHJlc1t1c2VyXSA9IGN0blxuICAgIHJlc1xuXG4gIF9lbmNvZGU6ICgpLT5cbiAgICBqc29uID0gW11cbiAgICBmb3IgdV9uYW1lLHVzZXIgb2YgQGJ1ZmZlclxuICAgICAgZm9yIG9fbnVtYmVyLG8gb2YgdXNlclxuICAgICAgICBpZiBub3QgaXNOYU4ocGFyc2VJbnQob19udW1iZXIpKVxuICAgICAgICAgIGpzb24ucHVzaCBvLl9lbmNvZGUoKVxuICAgIGpzb25cblxuICAjXG4gICMgR2V0IHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyB0aGF0IHdlcmUgY3JlYXRlZCBieSBhIHVzZXIuXG4gICMgQWNjb3JkaW5nbHkgeW91IHdpbGwgZ2V0IHRoZSBuZXh0IG9wZXJhdGlvbiBudW1iZXIgdGhhdCBpcyBleHBlY3RlZCBmcm9tIHRoYXQgdXNlci5cbiAgIyBUaGlzIHdpbGwgaW5jcmVtZW50IHRoZSBvcGVyYXRpb24gY291bnRlci5cbiAgI1xuICBnZXROZXh0T3BlcmF0aW9uSWRlbnRpZmllcjogKHVzZXJfaWQpLT5cbiAgICBpZiBub3QgdXNlcl9pZD9cbiAgICAgIHVzZXJfaWQgPSBAdXNlcl9pZFxuICAgIGlmIG5vdCBAb3BlcmF0aW9uX2NvdW50ZXJbdXNlcl9pZF0/XG4gICAgICBAb3BlcmF0aW9uX2NvdW50ZXJbdXNlcl9pZF0gPSAwXG4gICAgdWlkID0ge1xuICAgICAgICAnY3JlYXRvcicgOiB1c2VyX2lkXG4gICAgICAgICdvcF9udW1iZXInIDogQG9wZXJhdGlvbl9jb3VudGVyW3VzZXJfaWRdXG4gICAgICB9XG4gICAgQG9wZXJhdGlvbl9jb3VudGVyW3VzZXJfaWRdKytcbiAgICB1aWRcblxuICAjIFJldHJpZXZlIGFuIG9wZXJhdGlvbiBmcm9tIGEgdW5pcXVlIGlkLlxuICBnZXRPcGVyYXRpb246ICh1aWQpLT5cbiAgICBpZiB1aWQgaW5zdGFuY2VvZiBPYmplY3RcbiAgICAgIEBidWZmZXJbdWlkLmNyZWF0b3JdP1t1aWQub3BfbnVtYmVyXVxuICAgIGVsc2UgaWYgbm90IHVpZD9cbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IgXCJUaGlzIHR5cGUgb2YgdWlkIGlzIG5vdCBkZWZpbmVkIVwiXG5cbiAgIyBBZGQgYW4gb3BlcmF0aW9uIHRvIHRoZSBIQi4gTm90ZSB0aGF0IHRoaXMgd2lsbCBub3QgbGluayBpdCBhZ2FpbnN0XG4gICMgb3RoZXIgb3BlcmF0aW9ucyAoaXQgd29udCBleGVjdXRlZClcbiAgYWRkT3BlcmF0aW9uOiAobyktPlxuICAgIGlmIG5vdCBAYnVmZmVyW28uY3JlYXRvcl0/XG4gICAgICBAYnVmZmVyW28uY3JlYXRvcl0gPSB7fVxuICAgIGlmIG5vdCBAb3BlcmF0aW9uX2NvdW50ZXJbby5jcmVhdG9yXT9cbiAgICAgIEBvcGVyYXRpb25fY291bnRlcltvLmNyZWF0b3JdID0gMFxuICAgICNpZiBAb3BlcmF0aW9uX2NvdW50ZXJbby5jcmVhdG9yXSBpc250IG8ub3BfbnVtYmVyIGFuZCB0eXBlb2Ygby5vcF9udW1iZXIgaXMgJ251bWJlcidcbiAgICAjICB0aHJvdyBuZXcgRXJyb3IgXCJZb3UgZG9uJ3QgcmVjZWl2ZSBvcGVyYXRpb25zIGluIHRoZSBwcm9wZXIgb3JkZXIuIFRyeSBjb3VudGluZyBsaWtlIHRoaXMgMCwxLDIsMyw0LC4uIDspXCJcbiAgICBpZiBAYnVmZmVyW28uY3JlYXRvcl1bby5vcF9udW1iZXJdP1xuICAgICAgdGhyb3cgbmV3IEVycm9yIFwiWW91IG11c3Qgbm90IG92ZXJ3cml0ZSBvcGVyYXRpb25zIVwiXG4gICAgQGJ1ZmZlcltvLmNyZWF0b3JdW28ub3BfbnVtYmVyXSA9IG9cbiAgICBpZiB0eXBlb2Ygby5vcF9udW1iZXIgaXMgJ251bWJlcicgYW5kIG8uY3JlYXRvciBpc250IEBnZXRVc2VySWQoKVxuICAgICAgQG9wZXJhdGlvbl9jb3VudGVyW28uY3JlYXRvcl0rK1xuICAgIG9cblxubW9kdWxlLmV4cG9ydHMgPSBIaXN0b3J5QnVmZmVyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IChIQiktPlxuICAjIEBzZWUgRW5naW5lLnBhcnNlXG4gIHBhcnNlciA9IHt9XG4gIGV4ZWN1dGlvbl9saXN0ZW5lciA9IFtdXG5cbiAgI1xuICAjIEEgZ2VuZXJpYyBpbnRlcmZhY2UgdG8gb3BlcmF0aW9ucy5cbiAgI1xuICAjIEFuIG9wZXJhdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOlxuICAjIF9lbmNvZGU6IGVuY29kZXMgYW4gb3BlcmF0aW9uIChuZWVkZWQgb25seSBpZiBpbnN0YW5jZSBvZiB0aGlzIG9wZXJhdGlvbiBpcyBzZW50KS5cbiAgIyBleGVjdXRlOiBleGVjdXRlIHRoZSBlZmZlY3RzIG9mIHRoaXMgb3BlcmF0aW9ucy4gR29vZCBleGFtcGxlcyBhcmUgSW5zZXJ0LXR5cGUgYW5kIEFkZE5hbWUtdHlwZVxuICAjIHZhbDogaW4gdGhlIGNhc2UgdGhhdCB0aGUgb3BlcmF0aW9uIGhvbGRzIGEgdmFsdWVcbiAgI1xuICAjIEZ1cnRoZXJtb3JlIGFuIGVuY29kYWJsZSBvcGVyYXRpb24gaGFzIGEgcGFyc2VyLlxuICAjXG4gIGNsYXNzIE9wZXJhdGlvblxuXG4gICAgI1xuICAgICMgQHBhcmFtIHtPYmplY3R9IHVpZCBBIHVuaXF1ZSBpZGVudGlmaWVyLiBJZiB1aWQgaXMgdW5kZWZpbmVkLCBhIG5ldyB1aWQgd2lsbCBiZSBjcmVhdGVkLlxuICAgICMgQHNlZSBIaXN0b3J5QnVmZmVyLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyXG4gICAgI1xuICAgIGNvbnN0cnVjdG9yOiAodWlkKS0+XG4gICAgICBpZiBub3QgdWlkP1xuICAgICAgICB1aWQgPSBIQi5nZXROZXh0T3BlcmF0aW9uSWRlbnRpZmllcigpXG4gICAgICB7XG4gICAgICAgICdjcmVhdG9yJzogQGNyZWF0b3JcbiAgICAgICAgJ29wX251bWJlcicgOiBAb3BfbnVtYmVyXG4gICAgICB9ID0gdWlkXG5cbiAgICAjXG4gICAgIyBDb21wdXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyICh1aWQpIHRoYXQgaWRlbnRpZmllcyB0aGlzIG9wZXJhdGlvbi5cbiAgICAjXG4gICAgZ2V0VWlkOiAoKS0+XG4gICAgICB7ICdjcmVhdG9yJzogQGNyZWF0b3IsICdvcF9udW1iZXInOiBAb3BfbnVtYmVyIH1cblxuICAgICNcbiAgICAjIEBwcml2YXRlXG4gICAgIyBOb3RpZnkgdGhlIGFsbCB0aGUgbGlzdGVuZXJzLlxuICAgICNcbiAgICBleGVjdXRlOiAoKS0+XG4gICAgICBAaXNfZXhlY3V0ZWQgPSB0cnVlXG4gICAgICBmb3IgbCBpbiBleGVjdXRpb25fbGlzdGVuZXJcbiAgICAgICAgbCBAX2VuY29kZSgpXG4gICAgICBAXG5cbiAgICAjXG4gICAgIyBAcHJpdmF0ZVxuICAgICMgT3BlcmF0aW9ucyBtYXkgZGVwZW5kIG9uIG90aGVyIG9wZXJhdGlvbnMgKGxpbmtlZCBsaXN0cywgZXRjLikuXG4gICAgIyBUaGUgc2F2ZU9wZXJhdGlvbiBhbmQgdmFsaWRhdGVTYXZlZE9wZXJhdGlvbnMgbWV0aG9kcyBwcm92aWRlXG4gICAgIyBhbiBlYXN5IHdheSB0byByZWZlciB0byB0aGVzZSBvcGVyYXRpb25zIHZpYSBhbiB1aWQgb3Igb2JqZWN0IHJlZmVyZW5jZS5cbiAgICAjXG4gICAgIyBGb3IgZXhhbXBsZTogV2UgY2FuIGNyZWF0ZSBhIG5ldyBEZWxldGUgb3BlcmF0aW9uIHRoYXQgZGVsZXRlcyB0aGUgb3BlcmF0aW9uICRvIGxpa2UgdGhpc1xuICAgICMgICAgIC0gdmFyIGQgPSBuZXcgRGVsZXRlKHVpZCwgJG8pOyAgIG9yXG4gICAgIyAgICAgLSB2YXIgZCA9IG5ldyBEZWxldGUodWlkLCAkby5nZXRVaWQoKSk7XG4gICAgIyBFaXRoZXIgd2F5IHdlIHdhbnQgdG8gYWNjZXNzICRvIHZpYSBkLmRlbGV0ZXMuIEluIHRoZSBzZWNvbmQgY2FzZSB2YWxpZGF0ZVNhdmVkT3BlcmF0aW9ucyBtdXN0IGJlIGNhbGxlZCBmaXJzdC5cbiAgICAjXG4gICAgIyBAb3ZlcmxvYWQgc2F2ZU9wZXJhdGlvbihuYW1lLCBvcF91aWQpXG4gICAgIyAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uIEFmdGVyIHZhbGlkYXRpbmcgKHdpdGggdmFsaWRhdGVTYXZlZE9wZXJhdGlvbnMpIHRoZSBpbnN0YW50aWF0ZWQgb3BlcmF0aW9uIHdpbGwgYmUgYWNjZXNzaWJsZSB2aWEgdGhpc1tuYW1lXS5cbiAgICAjICAgQHBhcmFtIHtPYmplY3R9IG9wX3VpZCBBIHVpZCB0aGF0IHJlZmVycyB0byBhbiBvcGVyYXRpb25cbiAgICAjIEBvdmVybG9hZCBzYXZlT3BlcmF0aW9uKG5hbWUsIG9wKVxuICAgICMgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gb3AgaXMgYWNjZXNzaWJsZSB2aWEgdGhpc1tuYW1lXS5cbiAgICAjICAgQHBhcmFtIHtPcGVyYXRpb259IG9wIEFuIE9wZXJhdGlvbiBvYmplY3RcbiAgICAjXG4gICAgc2F2ZU9wZXJhdGlvbjogKG5hbWUsIG9wKS0+XG5cbiAgICAgICNcbiAgICAgICMgRXZlcnkgaW5zdGFuY2Ugb2YgJE9wZXJhdGlvbiBtdXN0IGhhdmUgYW4gJGV4ZWN1dGUgZnVuY3Rpb24uXG4gICAgICAjIFdlIHVzZSBkdWNrLXR5cGluZyB0byBjaGVjayBpZiBvcCBpcyBpbnN0YW50aWF0ZWQgc2luY2UgdGhlcmVcbiAgICAgICMgY291bGQgZXhpc3QgbXVsdGlwbGUgY2xhc3NlcyBvZiAkT3BlcmF0aW9uXG4gICAgICAjXG4gICAgICBpZiBvcD8uZXhlY3V0ZT9cbiAgICAgICAgIyBpcyBpbnN0YW50aWF0ZWRcbiAgICAgICAgQFtuYW1lXSA9IG9wXG4gICAgICBlbHNlIGlmIG9wP1xuICAgICAgICAjIG5vdCBpbml0aWFsaXplZC4gRG8gaXQgd2hlbiBjYWxsaW5nICR2YWxpZGF0ZVNhdmVkT3BlcmF0aW9ucygpXG4gICAgICAgIEB1bmNoZWNrZWQgPz0ge31cbiAgICAgICAgQHVuY2hlY2tlZFtuYW1lXSA9IG9wXG5cbiAgICAjXG4gICAgIyBAcHJpdmF0ZVxuICAgICMgQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFsbCBub3QgaW5zdGFudGlhdGVkIG9wZXJhdGlvbnMgd2lsbCBiZSBhY2Nlc3NpYmxlLlxuICAgICMgQHNlZSBPcGVyYXRpb24uc2F2ZU9wZXJhdGlvblxuICAgICNcbiAgICAjIEByZXR1cm4gW0Jvb2xlYW5dIFdoZXRoZXIgaXQgd2FzIHBvc3NpYmxlIHRvIGluc3RhbnRpYXRlIGFsbCBvcGVyYXRpb25zLlxuICAgICNcbiAgICB2YWxpZGF0ZVNhdmVkT3BlcmF0aW9uczogKCktPlxuICAgICAgdW5pbnN0YW50aWF0ZWQgPSB7fVxuICAgICAgc3VjY2VzcyA9IEBcbiAgICAgIGZvciBuYW1lLCBvcF91aWQgb2YgQHVuY2hlY2tlZFxuICAgICAgICBvcCA9IEhCLmdldE9wZXJhdGlvbiBvcF91aWRcbiAgICAgICAgaWYgb3BcbiAgICAgICAgICBAW25hbWVdID0gb3BcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHVuaW5zdGFudGlhdGVkW25hbWVdID0gb3BfdWlkXG4gICAgICAgICAgc3VjY2VzcyA9IGZhbHNlXG4gICAgICBkZWxldGUgQHVuY2hlY2tlZFxuICAgICAgaWYgbm90IHN1Y2Nlc3NcbiAgICAgICAgQHVuY2hlY2tlZCA9IHVuaW5zdGFudGlhdGVkXG4gICAgICBzdWNjZXNzXG5cblxuXG4gICNcbiAgIyBBIHNpbXBsZSBEZWxldGUtdHlwZSBvcGVyYXRpb24gdGhhdCBkZWxldGVzIGFuIEluc2VydC10eXBlIG9wZXJhdGlvbi5cbiAgI1xuICBjbGFzcyBEZWxldGUgZXh0ZW5kcyBPcGVyYXRpb25cblxuICAgICNcbiAgICAjIEBwYXJhbSB7T2JqZWN0fSB1aWQgQSB1bmlxdWUgaWRlbnRpZmllci4gSWYgdWlkIGlzIHVuZGVmaW5lZCwgYSBuZXcgdWlkIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAjIEBwYXJhbSB7T2JqZWN0fSBkZWxldGVzIFVJRCBvciByZWZlcmVuY2Ugb2YgdGhlIG9wZXJhdGlvbiB0aGF0IHRoaXMgdG8gYmUgZGVsZXRlZC5cbiAgICAjXG4gICAgY29uc3RydWN0b3I6ICh1aWQsIGRlbGV0ZXMpLT5cbiAgICAgIEBzYXZlT3BlcmF0aW9uICdkZWxldGVzJywgZGVsZXRlc1xuICAgICAgc3VwZXIgdWlkXG5cbiAgICAjXG4gICAgIyBAcHJpdmF0ZVxuICAgICMgQ29udmVydCBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24gb2YgdGhpcyBvcGVyYXRpb24gdG8gdGhlIGpzb24tZm9ybWF0LlxuICAgICMgVGhpcyByZXN1bHQgY2FuIGJlIHNlbnQgdG8gb3RoZXIgY2xpZW50cy5cbiAgICAjXG4gICAgX2VuY29kZTogKCktPlxuICAgICAge1xuICAgICAgICAndHlwZSc6IFwiRGVsZXRlXCJcbiAgICAgICAgJ3VpZCc6IEBnZXRVaWQoKVxuICAgICAgICAnZGVsZXRlcyc6IEBkZWxldGVzLmdldFVpZCgpXG4gICAgICB9XG5cbiAgICAjXG4gICAgIyBAcHJpdmF0ZVxuICAgICMgQXBwbHkgdGhlIGRlbGV0aW9uLlxuICAgICNcbiAgICBleGVjdXRlOiAoKS0+XG4gICAgICBpZiBAdmFsaWRhdGVTYXZlZE9wZXJhdGlvbnMoKVxuICAgICAgICBAZGVsZXRlcy5hcHBseURlbGV0ZSBAXG4gICAgICAgIHN1cGVyXG4gICAgICAgIEBcbiAgICAgIGVsc2VcbiAgICAgICAgZmFsc2VcblxuICAjXG4gICMgRGVmaW5lIGhvdyB0byBwYXJzZSBEZWxldGUgb3BlcmF0aW9ucy5cbiAgI1xuICBwYXJzZXJbJ0RlbGV0ZSddID0gKG8pLT5cbiAgICB7XG4gICAgICAndWlkJyA6IHVpZFxuICAgICAgJ2RlbGV0ZXMnOiBkZWxldGVzX3VpZFxuICAgIH0gPSBvXG4gICAgbmV3IERlbGV0ZSB1aWQsIGRlbGV0ZXNfdWlkXG5cbiAgI1xuICAjIEEgc2ltcGxlIGluc2VydC10eXBlIG9wZXJhdGlvbi5cbiAgI1xuICAjIEFuIGluc2VydCBvcGVyYXRpb24gaXMgYWx3YXlzIHBvc2l0aW9uZWQgYmV0d2VlbiB0d28gb3RoZXIgaW5zZXJ0IG9wZXJhdGlvbnMuXG4gICMgSW50ZXJuYWxseSB0aGlzIGlzIHJlYWxpemVkIGFzIGFzc29jaWF0aXZlIGxpc3RzLCB3aGVyZWJ5IGVhY2ggaW5zZXJ0IG9wZXJhdGlvbiBoYXMgYSBwcmVkZWNlc3NvciBhbmQgYSBzdWNjZXNzb3IuXG4gICMgRm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3kgd2UgbWFpbnRhaW4gdHdvIGxpc3RzOlxuICAjICAgLSBUaGUgc2hvcnQtbGlzdCAoYWJicmV2LiBzbCkgbWFpbnRhaW5zIG9ubHkgdGhlIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IGRlbGV0ZWRcbiAgIyAgIC0gVGhlIGNvbXBsZXRlLWxpc3QgKGFiYnJldi4gY2wpIG1haW50YWlucyBhbGwgb3BlcmF0aW9uc1xuICAjXG4gIGNsYXNzIEluc2VydCBleHRlbmRzIE9wZXJhdGlvblxuXG4gICAgI1xuICAgICMgQHBhcmFtIHtPYmplY3R9IHVpZCBBIHVuaXF1ZSBpZGVudGlmaWVyLiBJZiB1aWQgaXMgdW5kZWZpbmVkLCBhIG5ldyB1aWQgd2lsbCBiZSBjcmVhdGVkLlxuICAgICMgQHBhcmFtIHtPcGVyYXRpb259IHByZXZfY2wgVGhlIHByZWRlY2Vzc29yIG9mIHRoaXMgb3BlcmF0aW9uIGluIHRoZSBjb21wbGV0ZS1saXN0IChjbClcbiAgICAjIEBwYXJhbSB7T3BlcmF0aW9ufSBuZXh0X2NsIFRoZSBzdWNjZXNzb3Igb2YgdGhpcyBvcGVyYXRpb24gaW4gdGhlIGNvbXBsZXRlLWxpc3QgKGNsKVxuICAgICNcbiAgICAjIEBzZWUgSGlzdG9yeUJ1ZmZlci5nZXROZXh0T3BlcmF0aW9uSWRlbnRpZmllclxuICAgICNcbiAgICBjb25zdHJ1Y3RvcjogKHVpZCwgcHJldl9jbCwgbmV4dF9jbCwgb3JpZ2luKS0+XG4gICAgICBAc2F2ZU9wZXJhdGlvbiAncHJldl9jbCcsIHByZXZfY2xcbiAgICAgIEBzYXZlT3BlcmF0aW9uICduZXh0X2NsJywgbmV4dF9jbFxuICAgICAgaWYgb3JpZ2luP1xuICAgICAgICBAc2F2ZU9wZXJhdGlvbiAnb3JpZ2luJywgb3JpZ2luXG4gICAgICBlbHNlXG4gICAgICAgIEBzYXZlT3BlcmF0aW9uICdvcmlnaW4nLCBwcmV2X2NsXG4gICAgICBzdXBlciB1aWRcblxuICAgICNcbiAgICAjIEBwcml2YXRlXG4gICAgI1xuICAgIGFwcGx5RGVsZXRlOiAobyktPlxuICAgICAgQGRlbGV0ZWRfYnkgPz0gW11cbiAgICAgIEBkZWxldGVkX2J5LnB1c2ggb1xuXG4gICAgI1xuICAgICMgSWYgaXNEZWxldGVkKCkgaXMgdHJ1ZSB0aGlzIG9wZXJhdGlvbiB3b24ndCBiZSBtYWludGFpbmVkIGluIHRoZSBzbFxuICAgICNcbiAgICBpc0RlbGV0ZWQ6ICgpLT5cbiAgICAgIEBkZWxldGVkX2J5Py5sZW5ndGggPiAwXG5cbiAgICAjXG4gICAgIyBAcHJpdmF0ZVxuICAgICMgVGhlIGFtb3VudCBvZiBwb3NpdGlvbnMgdGhhdCAkdGhpcyBvcGVyYXRpb24gd2FzIG1vdmVkIHRvIHRoZSByaWdodC5cbiAgICAjXG4gICAgZ2V0RGlzdGFuY2VUb09yaWdpbjogKCktPlxuICAgICAgZCA9IDBcbiAgICAgIG8gPSBAcHJldl9jbFxuICAgICAgd2hpbGUgdHJ1ZVxuICAgICAgICBpZiBAb3JpZ2luIGlzIG9cbiAgICAgICAgICBicmVha1xuICAgICAgICBkKytcbiAgICAgICAgI1RPRE86IGRlbGV0ZSB0aGlzXG4gICAgICAgIGlmIEAgaXMgQHByZXZfY2xcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IgXCJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIDspIFwiXG4gICAgICAgIG8gPSBvLnByZXZfY2xcbiAgICAgIGRcblxuICAgICNcbiAgICAjIEBwcml2YXRlXG4gICAgIyBVcGRhdGUgdGhlIHNob3J0IGxpc3RcbiAgICAjIFRPRE8gKFVudXNlZClcbiAgICB1cGRhdGVfc2w6ICgpLT5cbiAgICAgIG8gPSBAcHJldl9jbFxuICAgICAgdXBkYXRlOiAoZGVzdF9jbCxkZXN0X3NsKS0+XG4gICAgICAgIHdoaWxlIHRydWVcbiAgICAgICAgICBpZiBvLmlzRGVsZXRlZCgpXG4gICAgICAgICAgICBvID0gb1tkZXN0X2NsXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIEBbZGVzdF9zbF0gPSBvXG5cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICB1cGRhdGUgXCJwcmV2X2NsXCIsIFwicHJldl9zbFwiXG4gICAgICB1cGRhdGUgXCJuZXh0X2NsXCIsIFwicHJldl9zbFwiXG5cblxuXG4gICAgI1xuICAgICMgQHByaXZhdGVcbiAgICAjIEluY2x1ZGUgdGhpcyBvcGVyYXRpb24gaW4gdGhlIGFzc29jaWF0aXZlIGxpc3RzLlxuICAgICNcbiAgICBleGVjdXRlOiAoKS0+XG4gICAgICBpZiBAaXNfZXhlY3V0ZWQ/XG4gICAgICAgIHJldHVybiBAXG4gICAgICBpZiBub3QgQHZhbGlkYXRlU2F2ZWRPcGVyYXRpb25zKClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIGlmIEBwcmV2X2NsPy52YWxpZGF0ZVNhdmVkT3BlcmF0aW9ucygpIGFuZCBAbmV4dF9jbD8udmFsaWRhdGVTYXZlZE9wZXJhdGlvbnMoKSBhbmQgQHByZXZfY2wubmV4dF9jbCBpc250IEBcbiAgICAgICAgICBkaXN0YW5jZV90b19vcmlnaW4gPSAwXG4gICAgICAgICAgbyA9IEBwcmV2X2NsLm5leHRfY2xcbiAgICAgICAgICBpID0gMFxuICAgICAgICAgICMgJHRoaXMgaGFzIHRvIGZpbmQgYSB1bmlxdWUgcG9zaXRpb24gYmV0d2VlbiBvcmlnaW4gYW5kIHRoZSBuZXh0IGtub3duIGNoYXJhY3RlclxuICAgICAgICAgICMgY2FzZSAxOiAkb3JpZ2luIGVxdWFscyAkby5vcmlnaW46IHRoZSAkY3JlYXRvciBwYXJhbWV0ZXIgZGVjaWRlcyBpZiBsZWZ0IG9yIHJpZ2h0XG4gICAgICAgICAgIyAgICAgICAgIGxldCAkT0w9IFtvMSxvMixvMyxvNF0sIHdoZXJlYnkgJHRoaXMgaXMgdG8gYmUgaW5zZXJ0ZWQgYmV0d2VlbiBvMSBhbmQgbzRcbiAgICAgICAgICAjICAgICAgICAgbzIsbzMgYW5kIG80IG9yaWdpbiBpcyAxICh0aGUgcG9zaXRpb24gb2YgbzIpXG4gICAgICAgICAgIyAgICAgICAgIHRoZXJlIGlzIHRoZSBjYXNlIHRoYXQgJHRoaXMuY3JlYXRvciA8IG8yLmNyZWF0b3IsIGJ1dCBvMy5jcmVhdG9yIDwgJHRoaXMuY3JlYXRvclxuICAgICAgICAgICMgICAgICAgICB0aGVuIG8yIGtub3dzIG8zLiBTaW5jZSBvbiBhbm90aGVyIGNsaWVudCAkT0wgY291bGQgYmUgW28xLG8zLG80XSB0aGUgcHJvYmxlbSBpcyBjb21wbGV4XG4gICAgICAgICAgIyAgICAgICAgIHRoZXJlZm9yZSAkdGhpcyB3b3VsZCBiZSBhbHdheXMgdG8gdGhlIHJpZ2h0IG9mIG8zXG4gICAgICAgICAgIyBjYXNlIDI6ICRvcmlnaW4gPCAkby5vcmlnaW5cbiAgICAgICAgICAjICAgICAgICAgaWYgY3VycmVudCAkdGhpcyBpbnNlcnRfcG9zaXRpb24gPiAkbyBvcmlnaW46ICR0aGlzIGluc1xuICAgICAgICAgICMgICAgICAgICBlbHNlICRpbnNlcnRfcG9zaXRpb24gd2lsbCBub3QgY2hhbmdlIChtYXliZSB3ZSBlbmNvdW50ZXIgY2FzZSAxIGxhdGVyLCB0aGVuIHRoaXMgd2lsbCBiZSB0byB0aGUgcmlnaHQgb2YgJG8pXG4gICAgICAgICAgIyBjYXNlIDM6ICRvcmlnaW4gPiAkby5vcmlnaW5cbiAgICAgICAgICAjICAgICAgICAgJHRoaXMgaW5zZXJ0X3Bvc2l0aW9uIGlzIHRvIHRoZSBsZWZ0IG9mICRvIChmb3JldmVyISlcbiAgICAgICAgICB3aGlsZSB0cnVlXG4gICAgICAgICAgICBpZiBub3Qgbz9cbiAgICAgICAgICAgICAgIyBUT0RPOiBEZWJ1Z2dpbmdcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cgSlNPTi5zdHJpbmdpZnkgQHByZXZfY2wuZ2V0VWlkKClcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cgSlNPTi5zdHJpbmdpZnkgQG5leHRfY2wuZ2V0VWlkKClcbiAgICAgICAgICAgIGlmIG8gaXNudCBAbmV4dF9jbFxuICAgICAgICAgICAgICAjICRvIGhhcHBlbmVkIGNvbmN1cnJlbnRseVxuICAgICAgICAgICAgICBpZiBvLmdldERpc3RhbmNlVG9PcmlnaW4oKSBpcyBpXG4gICAgICAgICAgICAgICAgIyBjYXNlIDFcbiAgICAgICAgICAgICAgICBpZiBvLmNyZWF0b3IgPCBAY3JlYXRvclxuICAgICAgICAgICAgICAgICAgQHByZXZfY2wgPSBvXG4gICAgICAgICAgICAgICAgICBkaXN0YW5jZV90b19vcmlnaW4gPSBpICsgMVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICMgbm9wXG4gICAgICAgICAgICAgIGVsc2UgaWYgby5nZXREaXN0YW5jZVRvT3JpZ2luKCkgPCBpXG4gICAgICAgICAgICAgICAgIyBjYXNlIDJcbiAgICAgICAgICAgICAgICBpZiBpIC0gZGlzdGFuY2VfdG9fb3JpZ2luIDw9IG8uZ2V0RGlzdGFuY2VUb09yaWdpbigpXG4gICAgICAgICAgICAgICAgICBAcHJldl9jbCA9IG9cbiAgICAgICAgICAgICAgICAgIGRpc3RhbmNlX3RvX29yaWdpbiA9IGkgKyAxXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgI25vcFxuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgIyBjYXNlIDNcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICAgbyA9IG8ubmV4dF9jbFxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAjICR0aGlzIGtub3dzIHRoYXQgJG8gZXhpc3RzLFxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICMgbm93IHJlY29ubmVjdCBldmVyeXRoaW5nXG4gICAgICAgICAgQG5leHRfY2wgPSBAcHJldl9jbC5uZXh0X2NsXG4gICAgICAgICAgQHByZXZfY2wubmV4dF9jbCA9IEBcbiAgICAgICAgICBAbmV4dF9jbC5wcmV2X2NsID0gQFxuICAgICAgICBzdXBlciAjIG5vdGlmeSB0aGUgZXhlY3V0aW9uX2xpc3RlbmVyc1xuICAgICAgICBAXG5cbiAgI1xuICAjIERlZmluZXMgYW4gb2JqZWN0IHRoYXQgaXMgY2Fubm90IGJlIGNoYW5nZWQuIFlvdSBjYW4gdXNlIHRoaXMgdG8gc2V0IGFuIGltbXV0YWJsZSBzdHJpbmcsIG9yIGEgbnVtYmVyLlxuICAjXG4gIGNsYXNzIEltbXV0YWJsZU9iamVjdCBleHRlbmRzIEluc2VydFxuXG4gICAgI1xuICAgICMgQHBhcmFtIHtPYmplY3R9IHVpZCBBIHVuaXF1ZSBpZGVudGlmaWVyLiBJZiB1aWQgaXMgdW5kZWZpbmVkLCBhIG5ldyB1aWQgd2lsbCBiZSBjcmVhdGVkLlxuICAgICMgQHBhcmFtIHtPYmplY3R9IGNvbnRlbnRcbiAgICAjXG4gICAgY29uc3RydWN0b3I6ICh1aWQsIEBjb250ZW50PVwiXCIsIHByZXYsIG5leHQsIG9yaWdpbiktPlxuICAgICAgc3VwZXIgdWlkLCBwcmV2LCBuZXh0LCBvcmlnaW5cblxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gVGhlIGNvbnRlbnQgb2YgdGhpcyBvcGVyYXRpb24uXG4gICAgI1xuICAgIHZhbCA6ICgpLT5cbiAgICAgIEBjb250ZW50XG5cbiAgICBfZW5jb2RlOiAoKS0+XG4gICAgICBqc29uID0ge1xuICAgICAgICAndHlwZSc6IFwiSW1tdXRhYmxlT2JqZWN0XCJcbiAgICAgICAgJ3VpZCcgOiBAZ2V0VWlkKClcbiAgICAgICAgJ2NvbnRlbnQnIDogQGNvbnRlbnRcbiAgICAgIH1cbiAgICAgIGlmIEBwcmV2X2NsP1xuICAgICAgICBqc29uWydwcmV2J10gPSBAcHJldl9jbC5nZXRVaWQoKVxuICAgICAgaWYgQG5leHRfY2w/XG4gICAgICAgIGpzb25bJ25leHQnXSA9IEBuZXh0X2NsLmdldFVpZCgpXG4gICAgICBpZiBAb3JpZ2luPyBhbmQgQG9yaWdpbiBpc250IEBwcmV2X2NsXG4gICAgICAgIGpzb25bXCJvcmlnaW5cIl0gPSBAb3JpZ2luLmdldFVpZCgpXG4gICAgICBqc29uXG5cbiAgcGFyc2VyWydJbW11dGFibGVPYmplY3QnXSA9IChqc29uKS0+XG4gICAge1xuICAgICAgJ3VpZCcgOiB1aWRcbiAgICAgICdjb250ZW50JyA6IGNvbnRlbnRcbiAgICAgICdwcmV2JzogcHJldlxuICAgICAgJ25leHQnOiBuZXh0XG4gICAgICAnb3JpZ2luJyA6IG9yaWdpblxuICAgIH0gPSBqc29uXG4gICAgbmV3IEltbXV0YWJsZU9iamVjdCB1aWQsIGNvbnRlbnQsIHByZXYsIG5leHQsIG9yaWdpblxuXG4gICNcbiAgIyBBIGRlbGltaXRlciBpcyBwbGFjZWQgYXQgdGhlIGVuZCBhbmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXNzb2NpYXRpdmUgbGlzdHMuXG4gICMgVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gaGF2ZSBhIGJlZ2lubmluZyBhbmQgYW4gZW5kIGV2ZW4gaWYgdGhlIGNvbnRlbnRcbiAgIyBvZiB0aGUgRW5naW5lIGlzIGVtcHR5LlxuICAjXG4gIGNsYXNzIERlbGltaXRlciBleHRlbmRzIEluc2VydFxuXG4gICAgI1xuICAgICMgQHByaXZhdGVcbiAgICAjXG4gICAgZXhlY3V0ZTogKCktPlxuICAgICAgaWYgQHZhbGlkYXRlU2F2ZWRPcGVyYXRpb25zKClcbiAgICAgICAgZm9yIGwgaW4gZXhlY3V0aW9uX2xpc3RlbmVyXG4gICAgICAgICAgbCBAX2VuY29kZSgpXG4gICAgICAgIEBcbiAgICAgIGVsc2VcbiAgICAgICAgZmFsc2VcblxuICAgICNcbiAgICAjIEBwcml2YXRlXG4gICAgI1xuICAgIF9lbmNvZGU6ICgpLT5cbiAgICAgIHtcbiAgICAgICAgJ3R5cGUnIDogXCJEZWxpbWl0ZXJcIlxuICAgICAgICAndWlkJyA6IEBnZXRVaWQoKVxuICAgICAgICAncHJldicgOiBAcHJldl9jbD8uZ2V0VWlkKClcbiAgICAgICAgJ25leHQnIDogQG5leHRfY2w/LmdldFVpZCgpXG4gICAgICB9XG5cbiAgcGFyc2VyWydEZWxpbWl0ZXInXSA9IChqc29uKS0+XG4gICAgICB7XG4gICAgICAgICd1aWQnIDogdWlkXG4gICAgICAgICdwcmV2JyA6IHByZXZcbiAgICAgICAgJ25leHQnIDogbmV4dFxuICAgICAgfSA9IGpzb25cbiAgICAgIG5ldyBEZWxpbWl0ZXIgdWlkLCBwcmV2LCBuZXh0XG5cbiAgIyBUaGlzIGlzIHdoYXQgdGhpcyBtb2R1bGUgZXhwb3J0cyBhZnRlciBpbml0aWFsaXppbmcgaXQgd2l0aCB0aGUgSGlzdG9yeUJ1ZmZlclxuICB7XG4gICAgJ3R5cGVzJyA6XG4gICAgICAnRGVsZXRlJyA6IERlbGV0ZVxuICAgICAgJ0luc2VydCcgOiBJbnNlcnRcbiAgICAgICdEZWxpbWl0ZXInOiBEZWxpbWl0ZXJcbiAgICAgICdPcGVyYXRpb24nOiBPcGVyYXRpb25cbiAgICAgICdJbW11dGFibGVPYmplY3QnIDogSW1tdXRhYmxlT2JqZWN0XG4gICAgJ3BhcnNlcicgOiBwYXJzZXJcbiAgICAnZXhlY3V0aW9uX2xpc3RlbmVyJyA6IGV4ZWN1dGlvbl9saXN0ZW5lclxuICB9XG5cblxuXG5cbiIsInRleHRfdHlwZXNfdW5pbml0aWFsaXplZCA9IHJlcXVpcmUgXCIuL1RleHRUeXBlcy5jb2ZmZWVcIlxuXG5tb2R1bGUuZXhwb3J0cyA9IChIQiktPlxuICB0ZXh0X3R5cGVzID0gdGV4dF90eXBlc191bmluaXRpYWxpemVkIEhCXG4gIHR5cGVzID0gdGV4dF90eXBlcy50eXBlc1xuICBwYXJzZXIgPSB0ZXh0X3R5cGVzLnBhcnNlclxuXG4gIGNyZWF0ZUpzb25XcmFwcGVyID0gKF9qc29uVHlwZSktPlxuXG4gICAgI1xuICAgICMgQSBKc29uV3JhcHBlciB3YXMgaW50ZW5kZWQgdG8gYmUgYSBjb252ZW5pZW50IHdyYXBwZXIgZm9yIHRoZSBKc29uVHlwZS5cbiAgICAjIEJ1dCBpdCBjYW4gbWFrZSB0aGluZ3MgbW9yZSBkaWZmaWN1bHQgdGhhbiB0aGV5IGFyZS5cbiAgICAjIEBzZWUgSnNvblR5cGVcbiAgICAjXG4gICAgIyBAZXhhbXBsZSBjcmVhdGUgYSBKc29uV3JhcHBlclxuICAgICMgICAjIFlvdSBnZXQgYSBKc29uV3JhcHBlciBmcm9tIGEgSnNvblR5cGUgYnkgY2FsbGluZ1xuICAgICMgICB3ID0geWF0dGEudmFsdWVcbiAgICAjXG4gICAgIyBJdCBjcmVhdGVzIEphdmFzY3JpcHRzIC1nZXR0ZXIgYW5kIC1zZXR0ZXIgbWV0aG9kcyBmb3IgZWFjaCBwcm9wZXJ0eSB0aGF0IEpzb25UeXBlIG1haW50YWlucy5cbiAgICAjIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2RlZmluZVByb3BlcnR5XG4gICAgI1xuICAgICMgQGV4YW1wbGUgR2V0dGVyIEV4YW1wbGVcbiAgICAjICAgIyB5b3UgY2FuIGFjY2VzcyB0aGUgeCBwcm9wZXJ0eSBvZiB5YXR0YSBieSBjYWxsaW5nXG4gICAgIyAgIHcueFxuICAgICMgICAjIGluc3RlYWQgb2ZcbiAgICAjICAgeWF0dGEudmFsKCd4JylcbiAgICAjXG4gICAgIyBAbm90ZSBZb3UgY2FuIG9ubHkgb3ZlcndyaXRlIGV4aXN0aW5nIHZhbHVlcyEgU2V0dGluZyBhIG5ldyBwcm9wZXJ0eSB3b24ndCBoYXZlIGFueSBlZmZlY3QhXG4gICAgI1xuICAgICMgQGV4YW1wbGUgU2V0dGVyIEV4YW1wbGVcbiAgICAjICAgIyB5b3UgY2FuIHNldCBhbiBleGlzdGluZyB4IHByb3BlcnR5IG9mIHlhdHRhIGJ5IGNhbGxpbmdcbiAgICAjICAgdy54ID0gXCJ0ZXh0XCJcbiAgICAjICAgIyBpbnN0ZWFkIG9mXG4gICAgIyAgIHlhdHRhLnZhbCgneCcsIFwidGV4dFwiKVxuICAgICNcbiAgICAjIEluIG9yZGVyIHRvIHNldCBhIG5ldyBwcm9wZXJ0eSB5b3UgaGF2ZSB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgcHJvcGVydHkuXG4gICAgIyBUaGVyZWZvcmUgdGhlIEpzb25XcmFwcGVyIHN1cHBvcnRzIGEgc3BlY2lhbCBmZWF0dXJlIHRoYXQgc2hvdWxkIG1ha2UgdGhpbmdzIG1vcmUgY29udmVuaWVudFxuICAgICMgKHdlIGNhbiBhcmd1ZSBhYm91dCB0aGF0LCB1c2UgdGhlIEpzb25UeXBlIGlmIHlvdSBkb24ndCBsaWtlIGl0IDspLlxuICAgICMgSWYgeW91IG92ZXJ3cml0ZSBhbiBvYmplY3QgcHJvcGVydHkgb2YgdGhlIEpzb25XcmFwcGVyIHdpdGggYSBuZXcgb2JqZWN0LCBpdCB3aWxsIHJlc3VsdCBpbiBhIG1lcmdlZCB2ZXJzaW9uIG9mIHRoZSBvYmplY3RzLlxuICAgICMgTGV0IHcucCB0aGUgcHJvcGVydHkgdGhhdCBpcyB0byBiZSBvdmVyd3JpdHRlbiBhbmQgbyB0aGUgbmV3IHZhbHVlLiBFLmcuIHcucCA9IG9cbiAgICAjICogVGhlIHJlc3VsdCBoYXMgYWxsIHByb3BlcnRpZXMgb2Ygb1xuICAgICMgKiBUaGUgcmVzdWx0IGhhcyBhbGwgcHJvcGVydGllcyBvZiB3LnAgaWYgdGhleSBkb24ndCBvY2N1ciB1bmRlciB0aGUgc2FtZSBwcm9wZXJ0eS1uYW1lIGluIG8uXG4gICAgI1xuICAgICMgQGV4YW1wbGUgQ29uZmxpY3QgRXhhbXBsZVxuICAgICMgICB5YXR0YS52YWx1ZSA9IHthIDogXCJzdHJpbmdcIn1cbiAgICAjICAgdyA9IHlhdHRhLnZhbHVlXG4gICAgIyAgIGNvbnNvbGUubG9nKHcpICMge2EgOiBcInN0cmluZ1wifVxuICAgICMgICB3LmEgPSB7YSA6IHtiIDogXCJzdHJpbmdcIn19XG4gICAgIyAgIGNvbnNvbGUubG9nKHcpICMge2EgOiB7YiA6IFwiU3RyaW5nXCJ9fVxuICAgICMgICB3LmEgPSB7YSA6IHtjIDogNH19XG4gICAgIyAgIGNvbnNvbGUubG9nKHcpICMge2EgOiB7YiA6IFwiU3RyaW5nXCIsIGMgOiA0fX1cbiAgICAjXG4gICAgIyBAZXhhbXBsZSBDb21tb24gUGl0ZmFsbHNcbiAgICAjICAgdyA9IHlhdHRhLnZhbHVlXG4gICAgIyAgICMgU2V0dGluZyBhIG5ldyBwcm9wZXJ0eVxuICAgICMgICB3Lm5ld1Byb3BlcnR5ID0gXCJBd2Vzb21lXCJcbiAgICAjICAgY29uc29sZS5sb2cody5uZXdQcm9wZXJ0eSA9PSBcIkF3ZXNvbWVcIikgIyBmYWxzZSwgdy5uZXdQcm9wZXJ0eSBpcyB1bmRlZmluZWRcbiAgICAjICAgIyBvdmVyd3JpdGUgdGhlIHcgb2JqZWN0XG4gICAgIyAgIHcgPSB7bmV3UHJvcGVydHkgOiBcIkF3ZXNvbWVcIn1cbiAgICAjICAgY29uc29sZS5sb2cody5uZXdQcm9wZXJ0eSA9PSBcIkF3ZXNvbWVcIikgIyB0cnVlISwgYnV0IC4uXG4gICAgIyAgIGNvbnNvbGUubG9nKHlhdHRhLnZhbHVlLm5ld1Byb3BlcnR5ID09IFwiQXdlc29tZVwiKSAjIGZhbHNlLCB5b3UgYXJlIG9ubHkgYWxsb3dlZCB0byBzZXQgcHJvcGVydGllcyFcbiAgICAjICAgIyBUaGUgc29sdXRpb25cbiAgICAjICAgeWF0dGEudmFsdWUgPSB7bmV3UHJvcGVydHkgOiBcIkF3ZXNvbWVcIn1cbiAgICAjICAgY29uc29sZS5sb2cody5uZXdQcm9wZXJ0eSA9PSBcIkF3ZXNvbWVcIikgIyB0cnVlIVxuICAgICNcbiAgICBjbGFzcyBKc29uV3JhcHBlclxuICAgICAgY29uc3RydWN0b3I6IChqc29uVHlwZSktPlxuICAgICAgICBmb3IgbmFtZSwgb2JqIG9mIGpzb25UeXBlLm1hcFxuICAgICAgICAgIGRvIChuYW1lLCBvYmopLT5cbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBKc29uV3JhcHBlci5wcm90b3R5cGUsIG5hbWUsXG4gICAgICAgICAgICAgIGdldCA6IC0+XG4gICAgICAgICAgICAgICAgeCA9IG9iai52YWwoKVxuICAgICAgICAgICAgICAgIGlmIHggaW5zdGFuY2VvZiBKc29uVHlwZVxuICAgICAgICAgICAgICAgICAgY3JlYXRlSnNvbldyYXBwZXIgeFxuICAgICAgICAgICAgICAgIGVsc2UgaWYgeCBpbnN0YW5jZW9mIHR5cGVzLkltbXV0YWJsZU9iamVjdFxuICAgICAgICAgICAgICAgICAgeC52YWwoKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIHhcbiAgICAgICAgICAgICAgc2V0IDogKG8pLT5cbiAgICAgICAgICAgICAgICBpZiBvLmNvbnN0cnVjdG9yIGlzIHt9LmNvbnN0cnVjdG9yXG4gICAgICAgICAgICAgICAgICBvdmVyd3JpdGUgPSBqc29uVHlwZS52YWwobmFtZSlcbiAgICAgICAgICAgICAgICAgIGZvciBvX25hbWUsb19vYmogb2Ygb1xuICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGUudmFsKG9fbmFtZSwgb19vYmosICdpbW11dGFibGUnKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGpzb25UeXBlLnZhbChuYW1lLCBvLCAnaW1tdXRhYmxlJylcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgbmV3IEpzb25XcmFwcGVyIF9qc29uVHlwZVxuXG4gICNcbiAgIyBNYW5hZ2VzIE9iamVjdC1saWtlIHZhbHVlcy5cbiAgI1xuICBjbGFzcyBKc29uVHlwZSBleHRlbmRzIHR5cGVzLk1hcE1hbmFnZXJcblxuICAgICNcbiAgICAjIEBwYXJhbSB7T2JqZWN0fSB1aWQgQSB1bmlxdWUgaWRlbnRpZmllci4gSWYgdWlkIGlzIHVuZGVmaW5lZCwgYSBuZXcgdWlkIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAjIEBwYXJhbSB7T2JqZWN0fSBpbml0aWFsX3ZhbHVlIENyZWF0ZSB0aGlzIG9wZXJhdGlvbiB3aXRoIGFuIGluaXRpYWwgdmFsdWUuXG4gICAgIyBAcGFyYW0ge1N0cmluZ3xCb29sZWFufSBXaGV0aGVyIHRoZSBpbml0aWFsX3ZhbHVlIHNob3VsZCBiZSBjcmVhdGVkIGFzIG11dGFibGUuIChPcHRpb25hbCAtIHNlZSBzZXRNdXRhYmxlRGVmYXVsdClcbiAgICAjXG4gICAgY29uc3RydWN0b3I6ICh1aWQsIGluaXRpYWxfdmFsdWUsIG11dGFibGUpLT5cbiAgICAgIHN1cGVyIHVpZFxuICAgICAgaWYgaW5pdGlhbF92YWx1ZT9cbiAgICAgICAgaWYgdHlwZW9mIGluaXRpYWxfdmFsdWUgaXNudCBcIm9iamVjdFwiXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yIFwiVGhlIGluaXRpYWwgdmFsdWUgb2YgSnNvblR5cGVzIG11c3QgYmUgb2YgdHlwZSBPYmplY3QhIChjdXJyZW50IHR5cGU6ICN7dHlwZW9mIGluaXRpYWxfdmFsdWV9KVwiXG4gICAgICAgIGZvciBuYW1lLG8gb2YgaW5pdGlhbF92YWx1ZVxuICAgICAgICAgIEB2YWwgbmFtZSwgbywgbXV0YWJsZVxuXG4gICAgbXV0YWJsZV9kZWZhdWx0OlxuICAgICAgdHJ1ZVxuXG4gICAgc2V0TXV0YWJsZURlZmF1bHQ6IChtdXRhYmxlKS0+XG4gICAgICBpZiBtdXRhYmxlIGlzIHRydWUgb3IgbXV0YWJsZSBpcyAnbXV0YWJsZSdcbiAgICAgICAgSnNvblR5cGUucHJvdG90eXBlLm11dGFibGVfZGVmYXVsdCA9IHRydWVcbiAgICAgIGVsc2UgaWYgbXV0YWJsZSBpcyBmYWxzZSBvciBtdXRhYmxlIGlzICdpbW11dGFibGUnXG4gICAgICAgIEpzb25UeXBlLnByb3RvdHlwZS5tdXRhYmxlX2RlZmF1bHQgPSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IgJ1NldCBtdXRhYmxlIGVpdGhlciBcIm11dGFibGVcIiBvciBcImltbXV0YWJsZVwiISdcbiAgICAgICdPSydcblxuICAgICNcbiAgICAjIEBvdmVybG9hZCB2YWwoKVxuICAgICMgICBHZXQgdGhpcyBhcyBhIEpzb24gb2JqZWN0LlxuICAgICMgICBAcmV0dXJuIFtKc29uXVxuICAgICNcbiAgICAjIEBvdmVybG9hZCB2YWwobmFtZSlcbiAgICAjICAgR2V0IHZhbHVlIG9mIGEgcHJvcGVydHkuXG4gICAgIyAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAjICAgQHJldHVybiBbSnNvblR5cGV8V29yZHxTdHJpbmd8T2JqZWN0XSBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4gSWYgbXV0YWJsZSBpdCB3aWxsIHJldHVybiBhIE9wZXJhdGlvbi10eXBlIG9iamVjdCwgaWYgaW1tdXRhYmxlIGl0IHdpbGwgcmV0dXJuIFN0cmluZy9PYmplY3QuXG4gICAgI1xuICAgICMgQG92ZXJsb2FkIHZhbChuYW1lLCBjb250ZW50KVxuICAgICMgICBTZXQgYSBuZXcgcHJvcGVydHkuXG4gICAgIyAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAjICAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBjb250ZW50IENvbnRlbnQgb2YgdGhlIG9iamVjdCBwcm9wZXJ0eS5cbiAgICAjICAgQHJldHVybiBbSnNvblR5cGVdIFRoaXMgb2JqZWN0LiAoc3VwcG9ydHMgY2hhaW5pbmcpXG4gICAgI1xuICAgIHZhbDogKG5hbWUsIGNvbnRlbnQsIG11dGFibGUpLT5cbiAgICAgIGlmIHR5cGVvZiBuYW1lIGlzICdvYmplY3QnXG4gICAgICAgICMgU3BlY2lhbCBjYXNlLiBGaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3QuIFRoZW4gdGhlIHNlY29uZCBhcmcgaXMgbXV0YWJsZS5cbiAgICAgICAgIyBLZWVwIHRoYXQgaW4gbWluZCB3aGVuIHJlYWRpbmcgdGhlIGZvbGxvd2luZy4uXG4gICAgICAgIGZvciBvX25hbWUsbyBvZiBuYW1lXG4gICAgICAgICAgQHZhbChvX25hbWUsbyxjb250ZW50KVxuICAgICAgICBAXG4gICAgICBlbHNlIGlmIG5hbWU/IGFuZCBjb250ZW50P1xuICAgICAgICBpZiBtdXRhYmxlP1xuICAgICAgICAgIGlmIG11dGFibGUgaXMgdHJ1ZSBvciBtdXRhYmxlIGlzICdtdXRhYmxlJ1xuICAgICAgICAgICAgbXV0YWJsZSA9IHRydWVcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBtdXRhYmxlID0gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG11dGFibGUgPSBAbXV0YWJsZV9kZWZhdWx0XG4gICAgICAgIGlmIHR5cGVvZiBjb250ZW50IGlzICdmdW5jdGlvbidcbiAgICAgICAgICBAICMgSnVzdCBkbyBub3RoaW5nXG4gICAgICAgIGVsc2UgaWYgKChub3QgbXV0YWJsZSkgb3IgdHlwZW9mIGNvbnRlbnQgaXMgJ251bWJlcicpIGFuZCBjb250ZW50LmNvbnN0cnVjdG9yIGlzbnQgT2JqZWN0XG4gICAgICAgICAgb2JqID0gSEIuYWRkT3BlcmF0aW9uKG5ldyB0eXBlcy5JbW11dGFibGVPYmplY3QgdW5kZWZpbmVkLCBjb250ZW50KS5leGVjdXRlKClcbiAgICAgICAgICBzdXBlciBuYW1lLCBvYmpcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGlmIHR5cGVvZiBjb250ZW50IGlzICdzdHJpbmcnXG4gICAgICAgICAgICB3b3JkID0gSEIuYWRkT3BlcmF0aW9uKG5ldyB0eXBlcy5Xb3JkIEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKCksIGNvbnRlbnQpLmV4ZWN1dGUoKVxuICAgICAgICAgICAgc3VwZXIgbmFtZSwgd29yZFxuICAgICAgICAgIGVsc2UgaWYgY29udGVudC5jb25zdHJ1Y3RvciBpcyBPYmplY3RcbiAgICAgICAgICAgIGpzb24gPSBIQi5hZGRPcGVyYXRpb24obmV3IEpzb25UeXBlIEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKCksIGNvbnRlbnQsIG11dGFibGUpLmV4ZWN1dGUoKVxuICAgICAgICAgICAgc3VwZXIgbmFtZSwganNvblxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciBcIllvdSBtdXN0IG5vdCBzZXQgI3t0eXBlb2YgY29udGVudH0tdHlwZXMgaW4gY29sbGFib3JhdGl2ZSBKc29uLW9iamVjdHMhXCJcbiAgICAgIGVsc2VcbiAgICAgICAgc3VwZXIgbmFtZSwgY29udGVudFxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5IEpzb25UeXBlLnByb3RvdHlwZSwgJ3ZhbHVlJyxcbiAgICAgIGdldCA6IC0+IGNyZWF0ZUpzb25XcmFwcGVyIEBcbiAgICAgIHNldCA6IChvKS0+XG4gICAgICAgIGlmIG8uY29uc3RydWN0b3IgaXMge30uY29uc3RydWN0b3JcbiAgICAgICAgICBmb3Igb19uYW1lLG9fb2JqIG9mIG9cbiAgICAgICAgICAgIEB2YWwob19uYW1lLCBvX29iaiwgJ2ltbXV0YWJsZScpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IgXCJZb3UgbXVzdCBvbmx5IHNldCBPYmplY3QgdmFsdWVzIVwiXG5cbiAgICAjXG4gICAgIyBAcHJpdmF0ZVxuICAgICNcbiAgICBfZW5jb2RlOiAoKS0+XG4gICAgICB7XG4gICAgICAgICd0eXBlJyA6IFwiSnNvblR5cGVcIlxuICAgICAgICAndWlkJyA6IEBnZXRVaWQoKVxuICAgICAgfVxuXG4gIHBhcnNlclsnSnNvblR5cGUnXSA9IChqc29uKS0+XG4gICAge1xuICAgICAgJ3VpZCcgOiB1aWRcbiAgICB9ID0ganNvblxuICAgIG5ldyBKc29uVHlwZSB1aWRcblxuXG5cblxuICB0eXBlc1snSnNvblR5cGUnXSA9IEpzb25UeXBlXG5cbiAgdGV4dF90eXBlc1xuXG5cbiIsImJhc2ljX3R5cGVzX3VuaW5pdGlhbGl6ZWQgPSByZXF1aXJlIFwiLi9CYXNpY1R5cGVzLmNvZmZlZVwiXG5cbm1vZHVsZS5leHBvcnRzID0gKEhCKS0+XG4gIGJhc2ljX3R5cGVzID0gYmFzaWNfdHlwZXNfdW5pbml0aWFsaXplZCBIQlxuICB0eXBlcyA9IGJhc2ljX3R5cGVzLnR5cGVzXG4gIHBhcnNlciA9IGJhc2ljX3R5cGVzLnBhcnNlclxuXG4gICNcbiAgIyBNYW5hZ2VzIG1hcCBsaWtlIG9iamVjdHMuIEUuZy4gSnNvbi1UeXBlIGFuZCBYTUwgYXR0cmlidXRlcy5cbiAgI1xuICBjbGFzcyBNYXBNYW5hZ2VyIGV4dGVuZHMgdHlwZXMuT3BlcmF0aW9uXG5cbiAgICAjXG4gICAgIyBAcGFyYW0ge09iamVjdH0gdWlkIEEgdW5pcXVlIGlkZW50aWZpZXIuIElmIHVpZCBpcyB1bmRlZmluZWQsIGEgbmV3IHVpZCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgI1xuICAgIGNvbnN0cnVjdG9yOiAodWlkKS0+XG4gICAgICBAbWFwID0ge31cbiAgICAgIHN1cGVyIHVpZFxuXG4gICAgdmFsOiAobmFtZSwgY29udGVudCktPlxuICAgICAgaWYgY29udGVudD9cbiAgICAgICAgaWYgbm90IEBtYXBbbmFtZV0/XG4gICAgICAgICAgSEIuYWRkT3BlcmF0aW9uKG5ldyBBZGROYW1lIEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKCksIEAsIG5hbWUpLmV4ZWN1dGUoKVxuICAgICAgICBAbWFwW25hbWVdLnJlcGxhY2UgY29udGVudFxuICAgICAgICBAXG4gICAgICBlbHNlIGlmIG5hbWU/XG4gICAgICAgIG9iaiA9IEBtYXBbbmFtZV0/LnZhbCgpXG4gICAgICAgIGlmIG9iaiBpbnN0YW5jZW9mIHR5cGVzLkltbXV0YWJsZU9iamVjdFxuICAgICAgICAgIG9iai52YWwoKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgb2JqXG4gICAgICBlbHNlXG4gICAgICAgIHJlc3VsdCA9IHt9XG4gICAgICAgIGZvciBuYW1lLG8gb2YgQG1hcFxuICAgICAgICAgIG9iaiA9IG8udmFsKClcbiAgICAgICAgICBpZiBvYmogaW5zdGFuY2VvZiB0eXBlcy5JbW11dGFibGVPYmplY3Qgb3Igb2JqIGluc3RhbmNlb2YgTWFwTWFuYWdlclxuICAgICAgICAgICAgb2JqID0gb2JqLnZhbCgpXG4gICAgICAgICAgcmVzdWx0W25hbWVdID0gb2JqXG4gICAgICAgIHJlc3VsdFxuXG4gICNcbiAgIyBXaGVuIGEgbmV3IHByb3BlcnR5IGluIGEgbWFwIG1hbmFnZXIgaXMgY3JlYXRlZCwgdGhlbiB0aGUgdWlkcyBvZiB0aGUgaW5zZXJ0ZWQgT3BlcmF0aW9uc1xuICAjIG11c3QgYmUgdW5pcXVlICh0aGluayBhYm91dCBjb25jdXJyZW50IG9wZXJhdGlvbnMpLiBUaGVyZWZvcmUgb25seSBhbiBBZGROYW1lIG9wZXJhdGlvbiBpcyBhbGxvd2VkIHRvXG4gICMgYWRkIGEgcHJvcGVydHkgaW4gYSBNYXBNYW5hZ2VyLiBJZiB0d28gQWRkTmFtZSBvcGVyYXRpb25zIG9uIHRoZSBzYW1lIE1hcE1hbmFnZXIgbmFtZSBoYXBwZW4gY29uY3VycmVudGx5XG4gICMgb25seSBvbmUgd2lsbCBBZGROYW1lIG9wZXJhdGlvbiB3aWxsIGJlIGV4ZWN1dGVkLlxuICAjXG4gIGNsYXNzIEFkZE5hbWUgZXh0ZW5kcyB0eXBlcy5PcGVyYXRpb25cblxuICAgICNcbiAgICAjIEBwYXJhbSB7T2JqZWN0fSB1aWQgQSB1bmlxdWUgaWRlbnRpZmllci4gSWYgdWlkIGlzIHVuZGVmaW5lZCwgYSBuZXcgdWlkIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAjIEBwYXJhbSB7T2JqZWN0fSBtYXBfbWFuYWdlciBVaWQgb3IgcmVmZXJlbmNlIHRvIHRoZSBNYXBNYW5hZ2VyLlxuICAgICMgQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCB3aWxsIGJlIGFkZGVkLlxuICAgICNcbiAgICBjb25zdHJ1Y3RvcjogKHVpZCwgbWFwX21hbmFnZXIsIEBuYW1lKS0+XG4gICAgICBAc2F2ZU9wZXJhdGlvbiAnbWFwX21hbmFnZXInLCBtYXBfbWFuYWdlclxuICAgICAgc3VwZXIgdWlkXG5cbiAgICBleGVjdXRlOiAoKS0+XG4gICAgICBpZiBub3QgQHZhbGlkYXRlU2F2ZWRPcGVyYXRpb25zKClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIHVpZF9yID0gQG1hcF9tYW5hZ2VyLmdldFVpZCgpXG4gICAgICAgIHVpZF9yLm9wX251bWJlciA9IFwiXyN7dWlkX3Iub3BfbnVtYmVyfV9STV8je0BuYW1lfVwiXG4gICAgICAgIGlmIG5vdCBIQi5nZXRPcGVyYXRpb24odWlkX3IpP1xuICAgICAgICAgIHVpZF9iZWcgPSBAbWFwX21hbmFnZXIuZ2V0VWlkKClcbiAgICAgICAgICB1aWRfYmVnLm9wX251bWJlciA9IFwiXyN7dWlkX2JlZy5vcF9udW1iZXJ9X1JNXyN7QG5hbWV9X2JlZ2lubmluZ1wiXG4gICAgICAgICAgdWlkX2VuZCA9IEBtYXBfbWFuYWdlci5nZXRVaWQoKVxuICAgICAgICAgIHVpZF9lbmQub3BfbnVtYmVyID0gXCJfI3t1aWRfZW5kLm9wX251bWJlcn1fUk1fI3tAbmFtZX1fZW5kXCJcbiAgICAgICAgICBiZWcgPSBIQi5hZGRPcGVyYXRpb24obmV3IHR5cGVzLkRlbGltaXRlciB1aWRfYmVnLCB1bmRlZmluZWQsIHVpZF9lbmQpXG4gICAgICAgICAgZW5kID0gSEIuYWRkT3BlcmF0aW9uKG5ldyB0eXBlcy5EZWxpbWl0ZXIgdWlkX2VuZCwgYmVnLCB1bmRlZmluZWQpLmV4ZWN1dGUoKVxuICAgICAgICAgIGJlZy5leGVjdXRlKClcbiAgICAgICAgICBAbWFwX21hbmFnZXIubWFwW0BuYW1lXSA9IEhCLmFkZE9wZXJhdGlvbihuZXcgUmVwbGFjZU1hbmFnZXIgdW5kZWZpbmVkLCB1aWRfciwgYmVnLCBlbmQpLmV4ZWN1dGUoKVxuICAgICAgICBzdXBlclxuXG4gICAgX2VuY29kZTogKCktPlxuICAgICAge1xuICAgICAgICAndHlwZScgOiBcIkFkZE5hbWVcIlxuICAgICAgICAndWlkJyA6IEBnZXRVaWQoKVxuICAgICAgICAnbWFwX21hbmFnZXInIDogQG1hcF9tYW5hZ2VyLmdldFVpZCgpXG4gICAgICAgICduYW1lJyA6IEBuYW1lXG4gICAgICB9XG5cbiAgcGFyc2VyWydBZGROYW1lJ10gPSAoanNvbiktPlxuICAgIHtcbiAgICAgICdtYXBfbWFuYWdlcicgOiBtYXBfbWFuYWdlclxuICAgICAgJ3VpZCcgOiB1aWRcbiAgICAgICduYW1lJyA6IG5hbWVcbiAgICB9ID0ganNvblxuICAgIG5ldyBBZGROYW1lIHVpZCwgbWFwX21hbmFnZXIsIG5hbWVcblxuICAjXG4gICMgTWFuYWdlcyBhIGxpc3Qgb2YgSW5zZXJ0LXR5cGUgb3BlcmF0aW9ucy5cbiAgI1xuICBjbGFzcyBMaXN0TWFuYWdlciBleHRlbmRzIHR5cGVzLkluc2VydFxuXG4gICAgI1xuICAgICMgQSBMaXN0TWFuYWdlciBtYWludGFpbnMgYSBub24tZW1wdHkgbGlzdCB0aGF0IGhhcyBhIGJlZ2lubmluZyBhbmQgYW4gZW5kIChib3RoIERlbGltaXRlcnMhKVxuICAgICMgQHBhcmFtIHtPYmplY3R9IHVpZCBBIHVuaXF1ZSBpZGVudGlmaWVyLiBJZiB1aWQgaXMgdW5kZWZpbmVkLCBhIG5ldyB1aWQgd2lsbCBiZSBjcmVhdGVkLlxuICAgICMgQHBhcmFtIHtEZWxpbWl0ZXJ9IGJlZ2lubmluZyBSZWZlcmVuY2Ugb3IgT2JqZWN0LlxuICAgICMgQHBhcmFtIHtEZWxpbWl0ZXJ9IGVuZCBSZWZlcmVuY2Ugb3IgT2JqZWN0LlxuICAgIGNvbnN0cnVjdG9yOiAodWlkLCBiZWdpbm5pbmcsIGVuZCwgcHJldiwgbmV4dCwgb3JpZ2luKS0+XG4gICAgICBpZiBiZWdpbm5pbmc/IGFuZCBlbmQ/XG4gICAgICAgIEBzYXZlT3BlcmF0aW9uICdiZWdpbm5pbmcnLCBiZWdpbm5pbmdcbiAgICAgICAgQHNhdmVPcGVyYXRpb24gJ2VuZCcsIGVuZFxuICAgICAgZWxzZVxuICAgICAgICBAYmVnaW5uaW5nID0gSEIuYWRkT3BlcmF0aW9uIG5ldyB0eXBlcy5EZWxpbWl0ZXIgSEIuZ2V0TmV4dE9wZXJhdGlvbklkZW50aWZpZXIoKSwgdW5kZWZpbmVkLCB1bmRlZmluZWRcbiAgICAgICAgQGVuZCA9ICAgICAgIEhCLmFkZE9wZXJhdGlvbiBuZXcgdHlwZXMuRGVsaW1pdGVyIEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKCksIEBiZWdpbm5pbmcsIHVuZGVmaW5lZFxuICAgICAgICBAYmVnaW5uaW5nLm5leHRfY2wgPSBAZW5kXG4gICAgICAgIEBiZWdpbm5pbmcuZXhlY3V0ZSgpXG4gICAgICAgIEBlbmQuZXhlY3V0ZSgpXG5cbiAgICAgIHN1cGVyIHVpZCwgcHJldiwgbmV4dCwgb3JpZ2luXG5cbiAgICAjIEdldCB0aGUgZWxlbWVudCBwcmV2aW91cyB0byB0aGUgZGVsZW1pdGVyIGF0IHRoZSBlbmRcbiAgICBnZXRMYXN0T3BlcmF0aW9uOiAoKS0+XG4gICAgICBAZW5kLnByZXZfY2xcblxuICAgICMgc2ltaWxhciB0byB0aGUgYWJvdmVcbiAgICBnZXRGaXJzdE9wZXJhdGlvbjogKCktPlxuICAgICAgQGJlZ2lubmluZy5uZXh0X2NsXG5cbiAgICAjIFRyYW5zZm9ybXMgdGhlIHRoZSBsaXN0IHRvIGFuIGFycmF5XG4gICAgIyBEb2Vzbid0IHJldHVybiBsZWZ0LXJpZ2h0IGRlbGltaXRlci5cbiAgICB0b0FycmF5OiAoKS0+XG4gICAgICBvID0gQGJlZ2lubmluZy5uZXh0X2NsXG4gICAgICByZXN1bHQgPSBbXVxuICAgICAgd2hpbGUgbyBpc250IEBlbmRcbiAgICAgICAgcmVzdWx0LnB1c2ggb1xuICAgICAgICBvID0gby5uZXh0X2NsXG4gICAgICByZXN1bHRcblxuICAgICNcbiAgICAjIFJldHJpZXZlcyB0aGUgeC10aCBub3QgZGVsZXRlZCBlbGVtZW50LlxuICAgICNcbiAgICBnZXRPcGVyYXRpb25CeVBvc2l0aW9uOiAocG9zaXRpb24pLT5cbiAgICAgIG8gPSBAYmVnaW5uaW5nLm5leHRfY2xcbiAgICAgIGlmIHBvc2l0aW9uID4gMFxuICAgICAgICB3aGlsZSB0cnVlXG4gICAgICAgICAgbyA9IG8ubmV4dF9jbFxuICAgICAgICAgIGlmIG5vdCBvLmlzRGVsZXRlZCgpXG4gICAgICAgICAgICBwb3NpdGlvbiAtPSAxXG4gICAgICAgICAgaWYgcG9zaXRpb24gaXMgMFxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBpZiBvIGluc3RhbmNlb2YgdHlwZXMuRGVsaW1pdGVyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IgXCJwb3NpdGlvbiBwYXJhbWV0ZXIgZXhjZWVkZWQgdGhlIGxlbmd0aCBvZiB0aGUgZG9jdW1lbnQhXCJcbiAgICAgIG9cblxuICAjXG4gICMgQWRkcyBzdXBwb3J0IGZvciByZXBsYWNlLiBUaGUgUmVwbGFjZU1hbmFnZXIgbWFuYWdlcyBSZXBsYWNlYWJsZSBvcGVyYXRpb25zLlxuICAjIEVhY2ggUmVwbGFjZWFibGUgaG9sZHMgYSB2YWx1ZSB0aGF0IGlzIG5vdyByZXBsYWNlYWJsZS5cbiAgI1xuICAjIFRoZSBXb3JkLXR5cGUgaGFzIGltcGxlbWVudGVkIHN1cHBvcnQgZm9yIHJlcGxhY2VcbiAgIyBAc2VlIFdvcmRcbiAgI1xuICBjbGFzcyBSZXBsYWNlTWFuYWdlciBleHRlbmRzIExpc3RNYW5hZ2VyXG4gICAgI1xuICAgICMgQHBhcmFtIHtPcGVyYXRpb259IGluaXRpYWxfY29udGVudCBJbml0aWFsaXplIHRoaXMgd2l0aCBhIFJlcGxhY2VhYmxlIHRoYXQgaG9sZHMgdGhlIGluaXRpYWxfY29udGVudC5cbiAgICAjIEBwYXJhbSB7T2JqZWN0fSB1aWQgQSB1bmlxdWUgaWRlbnRpZmllci4gSWYgdWlkIGlzIHVuZGVmaW5lZCwgYSBuZXcgdWlkIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAjIEBwYXJhbSB7RGVsaW1pdGVyfSBiZWdpbm5pbmcgUmVmZXJlbmNlIG9yIE9iamVjdC5cbiAgICAjIEBwYXJhbSB7RGVsaW1pdGVyfSBlbmQgUmVmZXJlbmNlIG9yIE9iamVjdC5cbiAgICBjb25zdHJ1Y3RvcjogKGluaXRpYWxfY29udGVudCwgdWlkLCBiZWdpbm5pbmcsIGVuZCwgcHJldiwgbmV4dCwgb3JpZ2luKS0+XG4gICAgICBzdXBlciB1aWQsIGJlZ2lubmluZywgZW5kLCBwcmV2LCBuZXh0LCBvcmlnaW5cbiAgICAgIGlmIGluaXRpYWxfY29udGVudD9cbiAgICAgICAgQHJlcGxhY2UgaW5pdGlhbF9jb250ZW50XG5cbiAgICByZXBsYWNlOiAoY29udGVudCktPlxuICAgICAgbyA9IEBnZXRMYXN0T3BlcmF0aW9uKClcbiAgICAgIG9wID0gbmV3IFJlcGxhY2VhYmxlIGNvbnRlbnQsIEAsIEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKCksIG8sIG8ubmV4dF9jbFxuICAgICAgSEIuYWRkT3BlcmF0aW9uKG9wKS5leGVjdXRlKClcblxuICAgIHZhbDogKCktPlxuICAgICAgbyA9IEBnZXRMYXN0T3BlcmF0aW9uKClcbiAgICAgIGlmIG8gaW5zdGFuY2VvZiB0eXBlcy5EZWxpbWl0ZXJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yIFwiZHRyblwiXG4gICAgICBvLnZhbCgpXG5cbiAgICBfZW5jb2RlOiAoKS0+XG4gICAgICBqc29uID1cbiAgICAgICAge1xuICAgICAgICAgICd0eXBlJzogXCJSZXBsYWNlTWFuYWdlclwiXG4gICAgICAgICAgJ3VpZCcgOiBAZ2V0VWlkKClcbiAgICAgICAgICAnYmVnaW5uaW5nJyA6IEBiZWdpbm5pbmcuZ2V0VWlkKClcbiAgICAgICAgICAnZW5kJyA6IEBlbmQuZ2V0VWlkKClcbiAgICAgICAgfVxuICAgICAgaWYgQHByZXZfY2w/IGFuZCBAbmV4dF9jbD9cbiAgICAgICAganNvblsncHJldiddID0gQHByZXZfY2wuZ2V0VWlkKClcbiAgICAgICAganNvblsnbmV4dCddID0gQG5leHRfY2wuZ2V0VWlkKClcbiAgICAgIGlmIEBvcmlnaW4/IGFuZCBAb3JpZ2luIGlzbnQgQHByZXZfY2xcbiAgICAgICAganNvbltcIm9yaWdpblwiXSA9IEBvcmlnaW4uZ2V0VWlkKClcbiAgICAgIGpzb25cblxuICBwYXJzZXJbXCJSZXBsYWNlTWFuYWdlclwiXSA9IChqc29uKS0+XG4gICAge1xuICAgICAgJ2NvbnRlbnQnIDogY29udGVudFxuICAgICAgJ3VpZCcgOiB1aWRcbiAgICAgICdwcmV2JzogcHJldlxuICAgICAgJ25leHQnOiBuZXh0XG4gICAgICAnb3JpZ2luJyA6IG9yaWdpblxuICAgICAgJ2JlZ2lubmluZycgOiBiZWdpbm5pbmdcbiAgICAgICdlbmQnIDogZW5kXG4gICAgfSA9IGpzb25cbiAgICBuZXcgUmVwbGFjZU1hbmFnZXIgY29udGVudCwgdWlkLCBiZWdpbm5pbmcsIGVuZCwgcHJldiwgbmV4dCwgb3JpZ2luXG5cblxuICAjXG4gICMgVGhlIFJlcGxhY2VNYW5hZ2VyIG1hbmFnZXMgUmVwbGFjZWFibGVzLlxuICAjIEBzZWUgUmVwbGFjZU1hbmFnZXJcbiAgI1xuICBjbGFzcyBSZXBsYWNlYWJsZSBleHRlbmRzIHR5cGVzLkluc2VydFxuXG4gICAgI1xuICAgICMgQHBhcmFtIHtPcGVyYXRpb259IGNvbnRlbnQgVGhlIHZhbHVlIHRoYXQgdGhpcyBSZXBsYWNlYWJsZSBob2xkcy5cbiAgICAjIEBwYXJhbSB7UmVwbGFjZU1hbmFnZXJ9IHBhcmVudCBVc2VkIHRvIHJlcGxhY2UgdGhpcyBSZXBsYWNlYWJsZSB3aXRoIGFub3RoZXIgb25lLlxuICAgICMgQHBhcmFtIHtPYmplY3R9IHVpZCBBIHVuaXF1ZSBpZGVudGlmaWVyLiBJZiB1aWQgaXMgdW5kZWZpbmVkLCBhIG5ldyB1aWQgd2lsbCBiZSBjcmVhdGVkLlxuICAgICNcbiAgICBjb25zdHJ1Y3RvcjogKGNvbnRlbnQsIHBhcmVudCwgdWlkLCBwcmV2LCBuZXh0LCBvcmlnaW4pLT5cbiAgICAgIEBzYXZlT3BlcmF0aW9uICdjb250ZW50JywgY29udGVudFxuICAgICAgQHNhdmVPcGVyYXRpb24gJ3BhcmVudCcsIHBhcmVudFxuICAgICAgaWYgbm90IChwcmV2PyBhbmQgbmV4dD8gYW5kIGNvbnRlbnQ/KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IgXCJZb3UgbXVzdCBkZWZpbmUgY29udGVudCwgcHJldiwgYW5kIG5leHQgZm9yIFJlcGxhY2VhYmxlLXR5cGVzIVwiXG4gICAgICBzdXBlciB1aWQsIHByZXYsIG5leHQsIG9yaWdpblxuXG4gICAgdmFsOiAoKS0+XG4gICAgICBAY29udGVudFxuXG4gICAgcmVwbGFjZTogKGNvbnRlbnQpLT5cbiAgICAgIEBwYXJlbnQucmVwbGFjZSBjb250ZW50XG5cbiAgICBleGVjdXRlOiAoKS0+XG4gICAgICBpZiBub3QgQHZhbGlkYXRlU2F2ZWRPcGVyYXRpb25zKClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIEBjb250ZW50LnNldFJlcGxhY2VNYW5hZ2VyPyhAcGFyZW50KVxuICAgICAgICBzdXBlclxuICAgICAgICBAXG5cbiAgICAjXG4gICAgIyBDb252ZXJ0IGFsbCByZWxldmFudCBpbmZvcm1hdGlvbiBvZiB0aGlzIG9wZXJhdGlvbiB0byB0aGUganNvbi1mb3JtYXQuXG4gICAgIyBUaGlzIHJlc3VsdCBjYW4gYmUgc2VuZCB0byBvdGhlciBjbGllbnRzLlxuICAgICNcbiAgICBfZW5jb2RlOiAoKS0+XG4gICAgICBqc29uID1cbiAgICAgICAge1xuICAgICAgICAgICd0eXBlJzogXCJSZXBsYWNlYWJsZVwiXG4gICAgICAgICAgJ2NvbnRlbnQnOiBAY29udGVudC5nZXRVaWQoKVxuICAgICAgICAgICdSZXBsYWNlTWFuYWdlcicgOiBAcGFyZW50LmdldFVpZCgpXG4gICAgICAgICAgJ3ByZXYnOiBAcHJldl9jbC5nZXRVaWQoKVxuICAgICAgICAgICduZXh0JzogQG5leHRfY2wuZ2V0VWlkKClcbiAgICAgICAgICAndWlkJyA6IEBnZXRVaWQoKVxuICAgICAgICB9XG4gICAgICBpZiBAb3JpZ2luPyBhbmQgQG9yaWdpbiBpc250IEBwcmV2X2NsXG4gICAgICAgIGpzb25bXCJvcmlnaW5cIl0gPSBAb3JpZ2luLmdldFVpZCgpXG4gICAgICBqc29uXG5cbiAgcGFyc2VyW1wiUmVwbGFjZWFibGVcIl0gPSAoanNvbiktPlxuICAgIHtcbiAgICAgICdjb250ZW50JyA6IGNvbnRlbnRcbiAgICAgICdSZXBsYWNlTWFuYWdlcicgOiBwYXJlbnRcbiAgICAgICd1aWQnIDogdWlkXG4gICAgICAncHJldic6IHByZXZcbiAgICAgICduZXh0JzogbmV4dFxuICAgICAgJ29yaWdpbicgOiBvcmlnaW5cbiAgICB9ID0ganNvblxuICAgIG5ldyBSZXBsYWNlYWJsZSBjb250ZW50LCBwYXJlbnQsIHVpZCwgcHJldiwgbmV4dCwgb3JpZ2luXG5cblxuXG4gIHR5cGVzWydMaXN0TWFuYWdlciddID0gTGlzdE1hbmFnZXJcbiAgdHlwZXNbJ01hcE1hbmFnZXInXSA9IE1hcE1hbmFnZXJcbiAgdHlwZXNbJ1JlcGxhY2VNYW5hZ2VyJ10gPSBSZXBsYWNlTWFuYWdlclxuICB0eXBlc1snUmVwbGFjZWFibGUnXSA9IFJlcGxhY2VhYmxlXG5cbiAgYmFzaWNfdHlwZXNcblxuXG5cblxuXG5cbiIsInN0cnVjdHVyZWRfdHlwZXNfdW5pbml0aWFsaXplZCA9IHJlcXVpcmUgXCIuL1N0cnVjdHVyZWRUeXBlcy5jb2ZmZWVcIlxuXG5tb2R1bGUuZXhwb3J0cyA9IChIQiktPlxuICBzdHJ1Y3R1cmVkX3R5cGVzID0gc3RydWN0dXJlZF90eXBlc191bmluaXRpYWxpemVkIEhCXG4gIHR5cGVzID0gc3RydWN0dXJlZF90eXBlcy50eXBlc1xuICBwYXJzZXIgPSBzdHJ1Y3R1cmVkX3R5cGVzLnBhcnNlclxuXG4gICNcbiAgIyBBdCB0aGUgbW9tZW50IFRleHREZWxldGUgdHlwZSBlcXVhbHMgdGhlIERlbGV0ZSB0eXBlIGluIEJhc2ljVHlwZXMuXG4gICMgQHNlZSBCYXNpY1R5cGVzLkRlbGV0ZVxuICAjXG4gIGNsYXNzIFRleHREZWxldGUgZXh0ZW5kcyB0eXBlcy5EZWxldGVcbiAgcGFyc2VyW1wiVGV4dERlbGV0ZVwiXSA9IHBhcnNlcltcIkRlbGV0ZVwiXVxuXG4gICNcbiAgIyAgRXh0ZW5kcyB0aGUgYmFzaWMgSW5zZXJ0IHR5cGUgdG8gYW4gb3BlcmF0aW9uIHRoYXQgaG9sZHMgYSB0ZXh0IHZhbHVlXG4gICNcbiAgY2xhc3MgVGV4dEluc2VydCBleHRlbmRzIHR5cGVzLkluc2VydFxuICAgICNcbiAgICAjIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50IFRoZSBjb250ZW50IG9mIHRoaXMgSW5zZXJ0LXR5cGUgT3BlcmF0aW9uLiBVc3VhbGx5IHlvdSByZXN0cmljdCB0aGUgbGVuZ3RoIG9mIGNvbnRlbnQgdG8gc2l6ZSAxXG4gICAgIyBAcGFyYW0ge09iamVjdH0gdWlkIEEgdW5pcXVlIGlkZW50aWZpZXIuIElmIHVpZCBpcyB1bmRlZmluZWQsIGEgbmV3IHVpZCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgI1xuICAgIGNvbnN0cnVjdG9yOiAoQGNvbnRlbnQsIHVpZCwgcHJldiwgbmV4dCwgb3JpZ2luKS0+XG4gICAgICBpZiBub3QgKHByZXY/IGFuZCBuZXh0PylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yIFwiWW91IG11c3QgZGVmaW5lIHByZXYsIGFuZCBuZXh0IGZvciBUZXh0SW5zZXJ0LXR5cGVzIVwiXG4gICAgICBzdXBlciB1aWQsIHByZXYsIG5leHQsIG9yaWdpblxuICAgICNcbiAgICAjIFJldHJpZXZlIHRoZSBlZmZlY3RpdmUgbGVuZ3RoIG9mIHRoZSAkY29udGVudCBvZiB0aGlzIG9wZXJhdGlvbi5cbiAgICAjXG4gICAgZ2V0TGVuZ3RoOiAoKS0+XG4gICAgICBpZiBAaXNEZWxldGVkKClcbiAgICAgICAgMFxuICAgICAgZWxzZVxuICAgICAgICBAY29udGVudC5sZW5ndGhcblxuICAgICNcbiAgICAjIFRoZSByZXN1bHQgd2lsbCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgcmVzdWx0cyBmcm9tIHRoZSBvdGhlciBpbnNlcnQgb3BlcmF0aW9uc1xuICAgICMgaW4gb3JkZXIgdG8gcmV0cmlldmUgdGhlIGNvbnRlbnQgb2YgdGhlIGVuZ2luZS5cbiAgICAjIEBzZWUgSGlzdG9yeUJ1ZmZlci50b0V4ZWN1dGVkQXJyYXlcbiAgICAjXG4gICAgdmFsOiAoY3VycmVudF9wb3NpdGlvbiktPlxuICAgICAgaWYgQGlzRGVsZXRlZCgpXG4gICAgICAgIFwiXCJcbiAgICAgIGVsc2VcbiAgICAgICAgQGNvbnRlbnRcblxuICAgICNcbiAgICAjIENvbnZlcnQgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uIG9mIHRoaXMgb3BlcmF0aW9uIHRvIHRoZSBqc29uLWZvcm1hdC5cbiAgICAjIFRoaXMgcmVzdWx0IGNhbiBiZSBzZW5kIHRvIG90aGVyIGNsaWVudHMuXG4gICAgI1xuICAgIF9lbmNvZGU6ICgpLT5cbiAgICAgIGpzb24gPVxuICAgICAgICB7XG4gICAgICAgICAgJ3R5cGUnOiBcIlRleHRJbnNlcnRcIlxuICAgICAgICAgICdjb250ZW50JzogQGNvbnRlbnRcbiAgICAgICAgICAndWlkJyA6IEBnZXRVaWQoKVxuICAgICAgICAgICdwcmV2JzogQHByZXZfY2wuZ2V0VWlkKClcbiAgICAgICAgICAnbmV4dCc6IEBuZXh0X2NsLmdldFVpZCgpXG4gICAgICAgIH1cbiAgICAgIGlmIEBvcmlnaW4/IGFuZCBAb3JpZ2luIGlzbnQgQHByZXZfY2xcbiAgICAgICAganNvbltcIm9yaWdpblwiXSA9IEBvcmlnaW4uZ2V0VWlkKClcbiAgICAgIGpzb25cblxuICBwYXJzZXJbXCJUZXh0SW5zZXJ0XCJdID0gKGpzb24pLT5cbiAgICB7XG4gICAgICAnY29udGVudCcgOiBjb250ZW50XG4gICAgICAndWlkJyA6IHVpZFxuICAgICAgJ3ByZXYnOiBwcmV2XG4gICAgICAnbmV4dCc6IG5leHRcbiAgICAgICdvcmlnaW4nIDogb3JpZ2luXG4gICAgfSA9IGpzb25cbiAgICBuZXcgVGV4dEluc2VydCBjb250ZW50LCB1aWQsIHByZXYsIG5leHQsIG9yaWdpblxuXG4gICNcbiAgIyBIYW5kbGVzIGEgVGV4dC1saWtlIGRhdGEgc3RydWN0dXJlcyB3aXRoIHN1cHBvcnQgZm9yIGluc2VydFRleHQvZGVsZXRlVGV4dCBhdCBhIHdvcmQtcG9zaXRpb24uXG4gICNcbiAgY2xhc3MgV29yZCBleHRlbmRzIHR5cGVzLkxpc3RNYW5hZ2VyXG5cbiAgICAjXG4gICAgIyBAcGFyYW0ge09iamVjdH0gdWlkIEEgdW5pcXVlIGlkZW50aWZpZXIuIElmIHVpZCBpcyB1bmRlZmluZWQsIGEgbmV3IHVpZCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgIyBAcGFyYW0ge1N0cmluZ30gaW5pdGlhbF9jb250ZW50XG4gICAgI1xuICAgIGNvbnN0cnVjdG9yOiAodWlkLCBpbml0aWFsX2NvbnRlbnQsIGJlZ2lubmluZywgZW5kLCBwcmV2LCBuZXh0LCBvcmlnaW4pLT5cbiAgICAgIHN1cGVyIHVpZCwgYmVnaW5uaW5nLCBlbmQsIHByZXYsIG5leHQsIG9yaWdpblxuICAgICAgaWYgaW5pdGlhbF9jb250ZW50P1xuICAgICAgICBAaW5zZXJ0VGV4dCAwLCBpbml0aWFsX2NvbnRlbnRcbiAgICAjXG4gICAgIyBJbnNlcnRzIGEgc3RyaW5nIGludG8gdGhlIHdvcmRcbiAgICAjXG4gICAgaW5zZXJ0VGV4dDogKHBvc2l0aW9uLCBjb250ZW50KS0+XG4gICAgICBvID0gQGdldE9wZXJhdGlvbkJ5UG9zaXRpb24gcG9zaXRpb25cbiAgICAgIGZvciBjIGluIGNvbnRlbnRcbiAgICAgICAgb3AgPSBuZXcgVGV4dEluc2VydCBjLCBIQi5nZXROZXh0T3BlcmF0aW9uSWRlbnRpZmllcigpLCBvLnByZXZfY2wsIG9cbiAgICAgICAgSEIuYWRkT3BlcmF0aW9uKG9wKS5leGVjdXRlKClcblxuICAgICNcbiAgICAjIERlbGV0ZXMgYSBwYXJ0IG9mIHRoZSB3b3JkLlxuICAgICNcbiAgICBkZWxldGVUZXh0OiAocG9zaXRpb24sIGxlbmd0aCktPlxuICAgICAgbyA9IEBnZXRPcGVyYXRpb25CeVBvc2l0aW9uIHBvc2l0aW9uXG5cbiAgICAgIGZvciBpIGluIFswLi4ubGVuZ3RoXVxuICAgICAgICBkID0gSEIuYWRkT3BlcmF0aW9uKG5ldyBUZXh0RGVsZXRlIEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKCksIG8pLmV4ZWN1dGUoKVxuICAgICAgICBvID0gby5uZXh0X2NsXG4gICAgICAgIHdoaWxlIG8uaXNEZWxldGVkKClcbiAgICAgICAgICBpZiBvIGluc3RhbmNlb2YgdHlwZXMuRGVsaW1pdGVyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IgXCJZb3UgY2FuJ3QgZGVsZXRlIG1vcmUgdGhhbiB0aGVyZSBpcy4uXCJcbiAgICAgICAgICBvID0gby5uZXh0X2NsXG4gICAgICAgIGQuX2VuY29kZSgpXG5cbiAgICAjXG4gICAgIyBSZXBsYWNlIHRoZSBjb250ZW50IG9mIHRoaXMgd29yZCB3aXRoIGFub3RoZXIgb25lLiBDb25jdXJyZW50IHJlcGxhY2VtZW50cyBhcmUgbm90IG1lcmdlZCFcbiAgICAjIE9ubHkgb25lIG9mIHRoZSByZXBsYWNlbWVudHMgd2lsbCBiZSB1c2VkLlxuICAgICNcbiAgICAjIENhbiBvbmx5IGJlIHVzZWQgaWYgdGhlIFJlcGxhY2VNYW5hZ2VyIHdhcyBzZXQhXG4gICAgIyBAc2VlIFdvcmQuc2V0UmVwbGFjZU1hbmFnZXJcbiAgICAjXG4gICAgcmVwbGFjZVRleHQ6ICh0ZXh0KS0+XG4gICAgICBpZiBAcmVwbGFjZV9tYW5hZ2VyP1xuICAgICAgICB3b3JkID0gSEIuYWRkT3BlcmF0aW9uKG5ldyBXb3JkIEhCLmdldE5leHRPcGVyYXRpb25JZGVudGlmaWVyKCkpLmV4ZWN1dGUoKVxuICAgICAgICB3b3JkLmluc2VydFRleHQgMCwgdGV4dFxuICAgICAgICBAcmVwbGFjZV9tYW5hZ2VyLnJlcGxhY2Uod29yZClcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yIFwiVGhpcyB0eXBlIGlzIGN1cnJlbnRseSBub3QgbWFpbnRhaW5lZCBieSBhIFJlcGxhY2VNYW5hZ2VyIVwiXG5cbiAgICAjXG4gICAgIyBAcmV0dXJucyBbSnNvbl0gQSBKc29uIG9iamVjdC5cbiAgICAjXG4gICAgdmFsOiAoKS0+XG4gICAgICBjID0gZm9yIG8gaW4gQHRvQXJyYXkoKVxuICAgICAgICBpZiBvLnZhbD9cbiAgICAgICAgICBvLnZhbCgpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBcIlwiXG4gICAgICBjLmpvaW4oJycpXG5cbiAgICAjXG4gICAgIyBJbiBtb3N0IGNhc2VzIHlvdSB3b3VsZCBlbWJlZCBhIFdvcmQgaW4gYSBSZXBsYWNlYWJsZSwgd2ljaCBpcyBoYW5kbGVkIGJ5IHRoZSBSZXBsYWNlTWFuYWdlciBpbiBvcmRlclxuICAgICMgdG8gcHJvdmlkZSByZXBsYWNlIGZ1bmN0aW9uYWxpdHkuXG4gICAgI1xuICAgIHNldFJlcGxhY2VNYW5hZ2VyOiAob3ApLT5cbiAgICAgIEBzYXZlT3BlcmF0aW9uICdyZXBsYWNlX21hbmFnZXInLCBvcFxuICAgICAgQHZhbGlkYXRlU2F2ZWRPcGVyYXRpb25zXG5cbiAgICBfZW5jb2RlOiAoKS0+XG4gICAgICBqc29uID0ge1xuICAgICAgICAndHlwZSc6IFwiV29yZFwiXG4gICAgICAgICd1aWQnIDogQGdldFVpZCgpXG4gICAgICAgICdiZWdpbm5pbmcnIDogQGJlZ2lubmluZy5nZXRVaWQoKVxuICAgICAgICAnZW5kJyA6IEBlbmQuZ2V0VWlkKClcbiAgICAgIH1cbiAgICAgIGlmIEBwcmV2X2NsP1xuICAgICAgICBqc29uWydwcmV2J10gPSBAcHJldl9jbC5nZXRVaWQoKVxuICAgICAgaWYgQG5leHRfY2w/XG4gICAgICAgIGpzb25bJ25leHQnXSA9IEBuZXh0X2NsLmdldFVpZCgpXG4gICAgICBpZiBAb3JpZ2luPyBhbmQgQG9yaWdpbiBpc250IEBwcmV2X2NsXG4gICAgICAgIGpzb25bXCJvcmlnaW5cIl0gPSBAb3JpZ2luLmdldFVpZCgpXG4gICAgICBqc29uXG5cbiAgcGFyc2VyWydXb3JkJ10gPSAoanNvbiktPlxuICAgIHtcbiAgICAgICd1aWQnIDogdWlkXG4gICAgICAnYmVnaW5uaW5nJyA6IGJlZ2lubmluZ1xuICAgICAgJ2VuZCcgOiBlbmRcbiAgICAgICdwcmV2JzogcHJldlxuICAgICAgJ25leHQnOiBuZXh0XG4gICAgICAnb3JpZ2luJyA6IG9yaWdpblxuICAgIH0gPSBqc29uXG4gICAgbmV3IFdvcmQgdWlkLCB1bmRlZmluZWQsIGJlZ2lubmluZywgZW5kLCBwcmV2LCBuZXh0LCBvcmlnaW5cblxuICB0eXBlc1snVGV4dEluc2VydCddID0gVGV4dEluc2VydFxuICB0eXBlc1snVGV4dERlbGV0ZSddID0gVGV4dERlbGV0ZVxuICB0eXBlc1snV29yZCddID0gV29yZFxuICBzdHJ1Y3R1cmVkX3R5cGVzXG5cblxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9jaGFpJyk7XG4iLCIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG52YXIgdXNlZCA9IFtdXG4gICwgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qIVxuICogQ2hhaSB2ZXJzaW9uXG4gKi9cblxuZXhwb3J0cy52ZXJzaW9uID0gJzEuOS4xJztcblxuLyohXG4gKiBBc3NlcnRpb24gRXJyb3JcbiAqL1xuXG5leHBvcnRzLkFzc2VydGlvbkVycm9yID0gcmVxdWlyZSgnYXNzZXJ0aW9uLWVycm9yJyk7XG5cbi8qIVxuICogVXRpbHMgZm9yIHBsdWdpbnMgKG5vdCBleHBvcnRlZClcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vY2hhaS91dGlscycpO1xuXG4vKipcbiAqICMgLnVzZShmdW5jdGlvbilcbiAqXG4gKiBQcm92aWRlcyBhIHdheSB0byBleHRlbmQgdGhlIGludGVybmFscyBvZiBDaGFpXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn1cbiAqIEByZXR1cm5zIHt0aGlzfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgaWYgKCF+dXNlZC5pbmRleE9mKGZuKSkge1xuICAgIGZuKHRoaXMsIHV0aWwpO1xuICAgIHVzZWQucHVzaChmbik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qIVxuICogQ29uZmlndXJhdGlvblxuICovXG5cbnZhciBjb25maWcgPSByZXF1aXJlKCcuL2NoYWkvY29uZmlnJyk7XG5leHBvcnRzLmNvbmZpZyA9IGNvbmZpZztcblxuLyohXG4gKiBQcmltYXJ5IGBBc3NlcnRpb25gIHByb3RvdHlwZVxuICovXG5cbnZhciBhc3NlcnRpb24gPSByZXF1aXJlKCcuL2NoYWkvYXNzZXJ0aW9uJyk7XG5leHBvcnRzLnVzZShhc3NlcnRpb24pO1xuXG4vKiFcbiAqIENvcmUgQXNzZXJ0aW9uc1xuICovXG5cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jaGFpL2NvcmUvYXNzZXJ0aW9ucycpO1xuZXhwb3J0cy51c2UoY29yZSk7XG5cbi8qIVxuICogRXhwZWN0IGludGVyZmFjZVxuICovXG5cbnZhciBleHBlY3QgPSByZXF1aXJlKCcuL2NoYWkvaW50ZXJmYWNlL2V4cGVjdCcpO1xuZXhwb3J0cy51c2UoZXhwZWN0KTtcblxuLyohXG4gKiBTaG91bGQgaW50ZXJmYWNlXG4gKi9cblxudmFyIHNob3VsZCA9IHJlcXVpcmUoJy4vY2hhaS9pbnRlcmZhY2Uvc2hvdWxkJyk7XG5leHBvcnRzLnVzZShzaG91bGQpO1xuXG4vKiFcbiAqIEFzc2VydCBpbnRlcmZhY2VcbiAqL1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnLi9jaGFpL2ludGVyZmFjZS9hc3NlcnQnKTtcbmV4cG9ydHMudXNlKGFzc2VydCk7XG4iLCIvKiFcbiAqIGNoYWlcbiAqIGh0dHA6Ly9jaGFpanMuY29tXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4vY29uZmlnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKF9jaGFpLCB1dGlsKSB7XG4gIC8qIVxuICAgKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICAgKi9cblxuICB2YXIgQXNzZXJ0aW9uRXJyb3IgPSBfY2hhaS5Bc3NlcnRpb25FcnJvclxuICAgICwgZmxhZyA9IHV0aWwuZmxhZztcblxuICAvKiFcbiAgICogTW9kdWxlIGV4cG9ydC5cbiAgICovXG5cbiAgX2NoYWkuQXNzZXJ0aW9uID0gQXNzZXJ0aW9uO1xuXG4gIC8qIVxuICAgKiBBc3NlcnRpb24gQ29uc3RydWN0b3JcbiAgICpcbiAgICogQ3JlYXRlcyBvYmplY3QgZm9yIGNoYWluaW5nLlxuICAgKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gQXNzZXJ0aW9uIChvYmosIG1zZywgc3RhY2spIHtcbiAgICBmbGFnKHRoaXMsICdzc2ZpJywgc3RhY2sgfHwgYXJndW1lbnRzLmNhbGxlZSk7XG4gICAgZmxhZyh0aGlzLCAnb2JqZWN0Jywgb2JqKTtcbiAgICBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sICdpbmNsdWRlU3RhY2snLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gY29uZmlnLmluY2x1ZGVTdGFjaztcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuJyk7XG4gICAgICBjb25maWcuaW5jbHVkZVN0YWNrID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXNzZXJ0aW9uLCAnc2hvd0RpZmYnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLicpO1xuICAgICAgcmV0dXJuIGNvbmZpZy5zaG93RGlmZjtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLicpO1xuICAgICAgY29uZmlnLnNob3dEaWZmID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB1dGlsLmFkZFByb3BlcnR5KHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgIHV0aWwuYWRkTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uIChuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICAgIHV0aWwuYWRkQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5ID0gZnVuY3Rpb24gKG5hbWUsIGZuKSB7XG4gICAgdXRpbC5vdmVyd3JpdGVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xuICB9O1xuXG4gIEFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB1dGlsLm92ZXJ3cml0ZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xuICB9O1xuXG4gIEFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgPSBmdW5jdGlvbiAobmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgICB1dGlsLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xuICB9O1xuXG4gIC8qIVxuICAgKiAjIyMgLmFzc2VydChleHByZXNzaW9uLCBtZXNzYWdlLCBuZWdhdGVNZXNzYWdlLCBleHBlY3RlZCwgYWN0dWFsKVxuICAgKlxuICAgKiBFeGVjdXRlcyBhbiBleHByZXNzaW9uIGFuZCBjaGVjayBleHBlY3RhdGlvbnMuIFRocm93cyBBc3NlcnRpb25FcnJvciBmb3IgcmVwb3J0aW5nIGlmIHRlc3QgZG9lc24ndCBwYXNzLlxuICAgKlxuICAgKiBAbmFtZSBhc3NlcnRcbiAgICogQHBhcmFtIHtQaGlsb3NvcGhpY2FsfSBleHByZXNzaW9uIHRvIGJlIHRlc3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSB0byBkaXNwbGF5IGlmIGZhaWxzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuZWdhdGVkTWVzc2FnZSB0byBkaXNwbGF5IGlmIG5lZ2F0ZWQgZXhwcmVzc2lvbiBmYWlsc1xuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZCB2YWx1ZSAocmVtZW1iZXIgdG8gY2hlY2sgZm9yIG5lZ2F0aW9uKVxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWwgKG9wdGlvbmFsKSB3aWxsIGRlZmF1bHQgdG8gYHRoaXMub2JqYFxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgPSBmdW5jdGlvbiAoZXhwciwgbXNnLCBuZWdhdGVNc2csIGV4cGVjdGVkLCBfYWN0dWFsLCBzaG93RGlmZikge1xuICAgIHZhciBvayA9IHV0aWwudGVzdCh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0cnVlICE9PSBzaG93RGlmZikgc2hvd0RpZmYgPSBmYWxzZTtcbiAgICBpZiAodHJ1ZSAhPT0gY29uZmlnLnNob3dEaWZmKSBzaG93RGlmZiA9IGZhbHNlO1xuXG4gICAgaWYgKCFvaykge1xuICAgICAgdmFyIG1zZyA9IHV0aWwuZ2V0TWVzc2FnZSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICwgYWN0dWFsID0gdXRpbC5nZXRBY3R1YWwodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2csIHtcbiAgICAgICAgICBhY3R1YWw6IGFjdHVhbFxuICAgICAgICAsIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgICAsIHNob3dEaWZmOiBzaG93RGlmZlxuICAgICAgfSwgKGNvbmZpZy5pbmNsdWRlU3RhY2spID8gdGhpcy5hc3NlcnQgOiBmbGFnKHRoaXMsICdzc2ZpJykpO1xuICAgIH1cbiAgfTtcblxuICAvKiFcbiAgICogIyMjIC5fb2JqXG4gICAqXG4gICAqIFF1aWNrIHJlZmVyZW5jZSB0byBzdG9yZWQgYGFjdHVhbGAgdmFsdWUgZm9yIHBsdWdpbiBkZXZlbG9wZXJzLlxuICAgKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbi5wcm90b3R5cGUsICdfb2JqJyxcbiAgICB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgLCBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgdmFsKTtcbiAgICAgIH1cbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgLyoqXG4gICAqICMjIyBjb25maWcuaW5jbHVkZVN0YWNrXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBpbmZsdWVuY2VzIHdoZXRoZXIgc3RhY2sgdHJhY2VcbiAgICogaXMgaW5jbHVkZWQgaW4gQXNzZXJ0aW9uIGVycm9yIG1lc3NhZ2UuIERlZmF1bHQgb2YgZmFsc2VcbiAgICogc3VwcHJlc3NlcyBzdGFjayB0cmFjZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLmluY2x1ZGVTdGFjayA9IHRydWU7ICAvLyBlbmFibGUgc3RhY2sgb24gZXJyb3JcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICAgaW5jbHVkZVN0YWNrOiBmYWxzZSxcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy5zaG93RGlmZlxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIG9yIG5vdFxuICAgKiB0aGUgYHNob3dEaWZmYCBmbGFnIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgdGhyb3duXG4gICAqIEFzc2VydGlvbkVycm9ycy4gYGZhbHNlYCB3aWxsIGFsd2F5cyBiZSBgZmFsc2VgOyBgdHJ1ZWBcbiAgICogd2lsbCBiZSB0cnVlIHdoZW4gdGhlIGFzc2VydGlvbiBoYXMgcmVxdWVzdGVkIGEgZGlmZlxuICAgKiBiZSBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBzaG93RGlmZjogdHJ1ZSxcblxuICAvKipcbiAgICogIyMjIGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgc2V0cyBsZW5ndGggdGhyZXNob2xkIGZvciBhY3R1YWwgYW5kXG4gICAqIGV4cGVjdGVkIHZhbHVlcyBpbiBhc3NlcnRpb24gZXJyb3JzLiBJZiB0aGlzIHRocmVzaG9sZCBpcyBleGNlZWRlZCxcbiAgICogdGhlIHZhbHVlIGlzIHRydW5jYXRlZC5cbiAgICpcbiAgICogU2V0IGl0IHRvIHplcm8gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0cnVuY2F0aW5nIGFsdG9nZXRoZXIuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA9IDA7ICAvLyBkaXNhYmxlIHRydW5jYXRpbmdcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIHRydW5jYXRlVGhyZXNob2xkOiA0MFxuXG59O1xuIiwiLyohXG4gKiBjaGFpXG4gKiBodHRwOi8vY2hhaWpzLmNvbVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNoYWksIF8pIHtcbiAgdmFyIEFzc2VydGlvbiA9IGNoYWkuQXNzZXJ0aW9uXG4gICAgLCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbiAgICAsIGZsYWcgPSBfLmZsYWc7XG5cbiAgLyoqXG4gICAqICMjIyBMYW5ndWFnZSBDaGFpbnNcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBhcmUgcHJvdmlkZWQgYXMgY2hhaW5hYmxlIGdldHRlcnMgdG9cbiAgICogaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgb2YgeW91ciBhc3NlcnRpb25zLiBUaGV5XG4gICAqIGRvIG5vdCBwcm92aWRlIHRlc3RpbmcgY2FwYWJpbGl0aWVzIHVubGVzcyB0aGV5XG4gICAqIGhhdmUgYmVlbiBvdmVyd3JpdHRlbiBieSBhIHBsdWdpbi5cbiAgICpcbiAgICogKipDaGFpbnMqKlxuICAgKlxuICAgKiAtIHRvXG4gICAqIC0gYmVcbiAgICogLSBiZWVuXG4gICAqIC0gaXNcbiAgICogLSB0aGF0XG4gICAqIC0gYW5kXG4gICAqIC0gaGFzXG4gICAqIC0gaGF2ZVxuICAgKiAtIHdpdGhcbiAgICogLSBhdFxuICAgKiAtIG9mXG4gICAqIC0gc2FtZVxuICAgKlxuICAgKiBAbmFtZSBsYW5ndWFnZSBjaGFpbnNcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgWyAndG8nLCAnYmUnLCAnYmVlbidcbiAgLCAnaXMnLCAnYW5kJywgJ2hhcycsICdoYXZlJ1xuICAsICd3aXRoJywgJ3RoYXQnLCAnYXQnXG4gICwgJ29mJywgJ3NhbWUnIF0uZm9yRWFjaChmdW5jdGlvbiAoY2hhaW4pIHtcbiAgICBBc3NlcnRpb24uYWRkUHJvcGVydHkoY2hhaW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5ub3RcbiAgICpcbiAgICogTmVnYXRlcyBhbnkgb2YgYXNzZXJ0aW9ucyBmb2xsb3dpbmcgaW4gdGhlIGNoYWluLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KGZvbykudG8ubm90LmVxdWFsKCdiYXInKTtcbiAgICogICAgIGV4cGVjdChnb29kRm4pLnRvLm5vdC50aHJvdyhFcnJvcik7XG4gICAqICAgICBleHBlY3QoeyBmb286ICdiYXonIH0pLnRvLmhhdmUucHJvcGVydHkoJ2ZvbycpXG4gICAqICAgICAgIC5hbmQubm90LmVxdWFsKCdiYXInKTtcbiAgICpcbiAgICogQG5hbWUgbm90XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnbm90JywgZnVuY3Rpb24gKCkge1xuICAgIGZsYWcodGhpcywgJ25lZ2F0ZScsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwXG4gICAqXG4gICAqIFNldHMgdGhlIGBkZWVwYCBmbGFnLCBsYXRlciB1c2VkIGJ5IHRoZSBgZXF1YWxgIGFuZFxuICAgKiBgcHJvcGVydHlgIGFzc2VydGlvbnMuXG4gICAqXG4gICAqICAgICBleHBlY3QoZm9vKS50by5kZWVwLmVxdWFsKHsgYmFyOiAnYmF6JyB9KTtcbiAgICogICAgIGV4cGVjdCh7IGZvbzogeyBiYXI6IHsgYmF6OiAncXV1eCcgfSB9IH0pXG4gICAqICAgICAgIC50by5oYXZlLmRlZXAucHJvcGVydHkoJ2Zvby5iYXIuYmF6JywgJ3F1dXgnKTtcbiAgICpcbiAgICogQG5hbWUgZGVlcFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2RlZXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnZGVlcCcsIHRydWUpO1xuICB9KTtcblxuICAvKipcbiAgICogIyMjIC5hKHR5cGUpXG4gICAqXG4gICAqIFRoZSBgYWAgYW5kIGBhbmAgYXNzZXJ0aW9ucyBhcmUgYWxpYXNlcyB0aGF0IGNhbiBiZVxuICAgKiB1c2VkIGVpdGhlciBhcyBsYW5ndWFnZSBjaGFpbnMgb3IgdG8gYXNzZXJ0IGEgdmFsdWUnc1xuICAgKiB0eXBlLlxuICAgKlxuICAgKiAgICAgLy8gdHlwZW9mXG4gICAqICAgICBleHBlY3QoJ3Rlc3QnKS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICogICAgIGV4cGVjdCh7IGZvbzogJ2JhcicgfSkudG8uYmUuYW4oJ29iamVjdCcpO1xuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLmEoJ251bGwnKTtcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLmFuKCd1bmRlZmluZWQnKTtcbiAgICpcbiAgICogICAgIC8vIGxhbmd1YWdlIGNoYWluXG4gICAqICAgICBleHBlY3QoZm9vKS50by5iZS5hbi5pbnN0YW5jZW9mKEZvbyk7XG4gICAqXG4gICAqIEBuYW1lIGFcbiAgICogQGFsaWFzIGFuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYW4gKHR5cGUsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGFydGljbGUgPSB+WyAnYScsICdlJywgJ2knLCAnbycsICd1JyBdLmluZGV4T2YodHlwZS5jaGFyQXQoMCkpID8gJ2FuICcgOiAnYSAnO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHR5cGUgPT09IF8udHlwZShvYmopXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlICcgKyBhcnRpY2xlICsgdHlwZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgJyArIGFydGljbGUgKyB0eXBlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2FuJywgYW4pO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdhJywgYW4pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmluY2x1ZGUodmFsdWUpXG4gICAqXG4gICAqIFRoZSBgaW5jbHVkZWAgYW5kIGBjb250YWluYCBhc3NlcnRpb25zIGNhbiBiZSB1c2VkIGFzIGVpdGhlciBwcm9wZXJ0eVxuICAgKiBiYXNlZCBsYW5ndWFnZSBjaGFpbnMgb3IgYXMgbWV0aG9kcyB0byBhc3NlcnQgdGhlIGluY2x1c2lvbiBvZiBhbiBvYmplY3RcbiAgICogaW4gYW4gYXJyYXkgb3IgYSBzdWJzdHJpbmcgaW4gYSBzdHJpbmcuIFdoZW4gdXNlZCBhcyBsYW5ndWFnZSBjaGFpbnMsXG4gICAqIHRoZXkgdG9nZ2xlIHRoZSBgY29udGFpbmAgZmxhZyBmb3IgdGhlIGBrZXlzYCBhc3NlcnRpb24uXG4gICAqXG4gICAqICAgICBleHBlY3QoWzEsMiwzXSkudG8uaW5jbHVkZSgyKTtcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8uY29udGFpbignZm9vJyk7XG4gICAqICAgICBleHBlY3QoeyBmb286ICdiYXInLCBoZWxsbzogJ3VuaXZlcnNlJyB9KS50by5pbmNsdWRlLmtleXMoJ2ZvbycpO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlXG4gICAqIEBhbGlhcyBjb250YWluXG4gICAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ3xOdW1iZXJ9IG9ialxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yICgpIHtcbiAgICBmbGFnKHRoaXMsICdjb250YWlucycsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5jbHVkZSAodmFsLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgdmFyIGV4cGVjdGVkID0gZmFsc2U7XG4gICAgaWYgKF8udHlwZShvYmopID09PSAnYXJyYXknICYmIF8udHlwZSh2YWwpID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yICh2YXIgaSBpbiBvYmopIHtcbiAgICAgICAgaWYgKF8uZXFsKG9ialtpXSwgdmFsKSkge1xuICAgICAgICAgIGV4cGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy50eXBlKHZhbCkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoIWZsYWcodGhpcywgJ25lZ2F0ZScpKSB7XG4gICAgICAgIGZvciAodmFyIGsgaW4gdmFsKSBuZXcgQXNzZXJ0aW9uKG9iaikucHJvcGVydHkoaywgdmFsW2tdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHN1YnNldCA9IHt9XG4gICAgICBmb3IgKHZhciBrIGluIHZhbCkgc3Vic2V0W2tdID0gb2JqW2tdXG4gICAgICBleHBlY3RlZCA9IF8uZXFsKHN1YnNldCwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwZWN0ZWQgPSBvYmogJiYgfm9iai5pbmRleE9mKHZhbClcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGV4cGVjdGVkXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGluY2x1ZGUgJyArIF8uaW5zcGVjdCh2YWwpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBpbmNsdWRlICcgKyBfLmluc3BlY3QodmFsKSk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdpbmNsdWRlJywgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuICBBc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdjb250YWluJywgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuXG4gIC8qKlxuICAgKiAjIyMgLm9rXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIHRydXRoeS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZXZlcnRoaW5nJykudG8uYmUub2s7XG4gICAqICAgICBleHBlY3QoMSkudG8uYmUub2s7XG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLm5vdC5iZS5vaztcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLm5vdC5iZS5vaztcbiAgICogICAgIGV4cGVjdChudWxsKS50by5ub3QuYmUub2s7XG4gICAqXG4gICAqIEBuYW1lIG9rXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnb2snLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydXRoeSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc3knKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAudHJ1ZVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTtcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuYmUudHJ1ZTtcbiAgICpcbiAgICogQG5hbWUgdHJ1ZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ3RydWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHRydWUgPT09IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWUnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHNlJ1xuICAgICAgLCB0aGlzLm5lZ2F0ZSA/IGZhbHNlIDogdHJ1ZVxuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmZhbHNlXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGBmYWxzZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZmFsc2UpLnRvLmJlLmZhbHNlO1xuICAgKiAgICAgZXhwZWN0KDApLnRvLm5vdC5iZS5mYWxzZTtcbiAgICpcbiAgICogQG5hbWUgZmFsc2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdmYWxzZScsIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgZmFsc2UgPT09IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHNlJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnVlJ1xuICAgICAgLCB0aGlzLm5lZ2F0ZSA/IHRydWUgOiBmYWxzZVxuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm51bGxcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYG51bGxgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG51bGwpLnRvLmJlLm51bGw7XG4gICAqICAgICBleHBlY3QodW5kZWZpbmVkKS5ub3QudG8uYmUubnVsbDtcbiAgICpcbiAgICogQG5hbWUgbnVsbFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ251bGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIG51bGwgPT09IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bGwnXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBudWxsJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLnVuZGVmaW5lZFxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCh1bmRlZmluZWQpLnRvLmJlLnVuZGVmaW5lZDtcbiAgICogICAgIGV4cGVjdChudWxsKS50by5ub3QuYmUudW5kZWZpbmVkO1xuICAgKlxuICAgKiBAbmFtZSB1bmRlZmluZWRcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCd1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHVuZGVmaW5lZCA9PT0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgdW5kZWZpbmVkJ1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgdW5kZWZpbmVkJ1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmV4aXN0XG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIG5laXRoZXIgYG51bGxgIG5vciBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogICAgIHZhciBmb28gPSAnaGknXG4gICAqICAgICAgICwgYmFyID0gbnVsbFxuICAgKiAgICAgICAsIGJhejtcbiAgICpcbiAgICogICAgIGV4cGVjdChmb28pLnRvLmV4aXN0O1xuICAgKiAgICAgZXhwZWN0KGJhcikudG8ubm90LmV4aXN0O1xuICAgKiAgICAgZXhwZWN0KGJheikudG8ubm90LmV4aXN0O1xuICAgKlxuICAgKiBAbmFtZSBleGlzdFxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2V4aXN0JywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBudWxsICE9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGV4aXN0J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXhpc3QnXG4gICAgKTtcbiAgfSk7XG5cblxuICAvKipcbiAgICogIyMjIC5lbXB0eVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCdzIGxlbmd0aCBpcyBgMGAuIEZvciBhcnJheXMsIGl0IGNoZWNrc1xuICAgKiB0aGUgYGxlbmd0aGAgcHJvcGVydHkuIEZvciBvYmplY3RzLCBpdCBnZXRzIHRoZSBjb3VudCBvZlxuICAgKiBlbnVtZXJhYmxlIGtleXMuXG4gICAqXG4gICAqICAgICBleHBlY3QoW10pLnRvLmJlLmVtcHR5O1xuICAgKiAgICAgZXhwZWN0KCcnKS50by5iZS5lbXB0eTtcbiAgICogICAgIGV4cGVjdCh7fSkudG8uYmUuZW1wdHk7XG4gICAqXG4gICAqIEBuYW1lIGVtcHR5XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIGV4cGVjdGVkID0gb2JqO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSB8fCAnc3RyaW5nJyA9PT0gdHlwZW9mIG9iamVjdCkge1xuICAgICAgZXhwZWN0ZWQgPSBvYmoubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGV4cGVjdGVkID0gT2JqZWN0LmtleXMob2JqKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICFleHBlY3RlZFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBlbXB0eSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGVtcHR5J1xuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLmFyZ3VtZW50c1xuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBhbiBhcmd1bWVudHMgb2JqZWN0LlxuICAgKlxuICAgKiAgICAgZnVuY3Rpb24gdGVzdCAoKSB7XG4gICAqICAgICAgIGV4cGVjdChhcmd1bWVudHMpLnRvLmJlLmFyZ3VtZW50cztcbiAgICogICAgIH1cbiAgICpcbiAgICogQG5hbWUgYXJndW1lbnRzXG4gICAqIEBhbGlhcyBBcmd1bWVudHNcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gY2hlY2tBcmd1bWVudHMgKCkge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICdbb2JqZWN0IEFyZ3VtZW50c10nID09PSB0eXBlXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFyZ3VtZW50cyBidXQgZ290ICcgKyB0eXBlXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhcmd1bWVudHMnXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnYXJndW1lbnRzJywgY2hlY2tBcmd1bWVudHMpO1xuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ0FyZ3VtZW50cycsIGNoZWNrQXJndW1lbnRzKTtcblxuICAvKipcbiAgICogIyMjIC5lcXVhbCh2YWx1ZSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgc3RyaWN0bHkgZXF1YWwgKGA9PT1gKSB0byBgdmFsdWVgLlxuICAgKiBBbHRlcm5hdGVseSwgaWYgdGhlIGBkZWVwYCBmbGFnIGlzIHNldCwgYXNzZXJ0cyB0aGF0XG4gICAqIHRoZSB0YXJnZXQgaXMgZGVlcGx5IGVxdWFsIHRvIGB2YWx1ZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2hlbGxvJykudG8uZXF1YWwoJ2hlbGxvJyk7XG4gICAqICAgICBleHBlY3QoNDIpLnRvLmVxdWFsKDQyKTtcbiAgICogICAgIGV4cGVjdCgxKS50by5ub3QuZXF1YWwodHJ1ZSk7XG4gICAqICAgICBleHBlY3QoeyBmb286ICdiYXInIH0pLnRvLm5vdC5lcXVhbCh7IGZvbzogJ2JhcicgfSk7XG4gICAqICAgICBleHBlY3QoeyBmb286ICdiYXInIH0pLnRvLmRlZXAuZXF1YWwoeyBmb286ICdiYXInIH0pO1xuICAgKlxuICAgKiBAbmFtZSBlcXVhbFxuICAgKiBAYWxpYXMgZXF1YWxzXG4gICAqIEBhbGlhcyBlcVxuICAgKiBAYWxpYXMgZGVlcC5lcXVhbFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEVxdWFsICh2YWwsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICBpZiAoZmxhZyh0aGlzLCAnZGVlcCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcWwodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgdmFsID09PSBvYmpcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7ZXhwfSdcbiAgICAgICAgLCB2YWxcbiAgICAgICAgLCB0aGlzLl9vYmpcbiAgICAgICAgLCB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxdWFsJywgYXNzZXJ0RXF1YWwpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdlcXVhbHMnLCBhc3NlcnRFcXVhbCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxJywgYXNzZXJ0RXF1YWwpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmVxbCh2YWx1ZSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgZGVlcGx5IGVxdWFsIHRvIGB2YWx1ZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QoeyBmb286ICdiYXInIH0pLnRvLmVxbCh7IGZvbzogJ2JhcicgfSk7XG4gICAqICAgICBleHBlY3QoWyAxLCAyLCAzIF0pLnRvLmVxbChbIDEsIDIsIDMgXSk7XG4gICAqXG4gICAqIEBuYW1lIGVxbFxuICAgKiBAYWxpYXMgZXFsc1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEVxbChvYmosIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBfLmVxbChvYmosIGZsYWcodGhpcywgJ29iamVjdCcpKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgI3tleHB9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZGVlcGx5IGVxdWFsICN7ZXhwfSdcbiAgICAgICwgb2JqXG4gICAgICAsIHRoaXMuX29ialxuICAgICAgLCB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxbCcsIGFzc2VydEVxbCk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2VxbHMnLCBhc3NlcnRFcWwpO1xuXG4gIC8qKlxuICAgKiAjIyMgLmFib3ZlKHZhbHVlKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBncmVhdGVyIHRoYW4gYHZhbHVlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgxMCkudG8uYmUuYWJvdmUoNSk7XG4gICAqXG4gICAqIENhbiBhbHNvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgbGVuZ3RoYCB0b1xuICAgKiBhc3NlcnQgYSBtaW5pbXVtIGxlbmd0aC4gVGhlIGJlbmVmaXQgYmVpbmcgYVxuICAgKiBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UgdGhhbiBpZiB0aGUgbGVuZ3RoXG4gICAqIHdhcyBzdXBwbGllZCBkaXJlY3RseS5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGguYWJvdmUoMik7XG4gICAqICAgICBleHBlY3QoWyAxLCAyLCAzIF0pLnRvLmhhdmUubGVuZ3RoLmFib3ZlKDIpO1xuICAgKlxuICAgKiBAbmFtZSBhYm92ZVxuICAgKiBAYWxpYXMgZ3RcbiAgICogQGFsaWFzIGdyZWF0ZXJUaGFuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFzc2VydEFib3ZlIChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgaWYgKGZsYWcodGhpcywgJ2RvTGVuZ3RoJykpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2cpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgICAgdmFyIGxlbiA9IG9iai5sZW5ndGg7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBsZW4gPiBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIGxlbmd0aCBhYm92ZSAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBsZW5ndGggYWJvdmUgI3tleHB9J1xuICAgICAgICAsIG5cbiAgICAgICAgLCBsZW5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA+IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAnICsgblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IG1vc3QgJyArIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYWJvdmUnLCBhc3NlcnRBYm92ZSk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2d0JywgYXNzZXJ0QWJvdmUpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdncmVhdGVyVGhhbicsIGFzc2VydEFib3ZlKTtcblxuICAvKipcbiAgICogIyMjIC5sZWFzdCh2YWx1ZSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGB2YWx1ZWAuXG4gICAqXG4gICAqICAgICBleHBlY3QoMTApLnRvLmJlLmF0LmxlYXN0KDEwKTtcbiAgICpcbiAgICogQ2FuIGFsc28gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBsZW5ndGhgIHRvXG4gICAqIGFzc2VydCBhIG1pbmltdW0gbGVuZ3RoLiBUaGUgYmVuZWZpdCBiZWluZyBhXG4gICAqIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSB0aGFuIGlmIHRoZSBsZW5ndGhcbiAgICogd2FzIHN1cHBsaWVkIGRpcmVjdGx5LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aC5vZi5hdC5sZWFzdCgyKTtcbiAgICogICAgIGV4cGVjdChbIDEsIDIsIDMgXSkudG8uaGF2ZS5sZW5ndGgub2YuYXQubGVhc3QoMyk7XG4gICAqXG4gICAqIEBuYW1lIGxlYXN0XG4gICAqIEBhbGlhcyBndGVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0TGVhc3QgKG4sIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICBpZiAoZmxhZyh0aGlzLCAnZG9MZW5ndGgnKSkge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIG1zZykudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgICB2YXIgbGVuID0gb2JqLmxlbmd0aDtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGxlbiA+PSBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIGxlbmd0aCBhdCBsZWFzdCAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIGxlbmd0aCBiZWxvdyAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGxlblxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqID49IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAnICsgblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGJlbG93ICcgKyBuXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2xlYXN0JywgYXNzZXJ0TGVhc3QpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdndGUnLCBhc3NlcnRMZWFzdCk7XG5cbiAgLyoqXG4gICAqICMjIyAuYmVsb3codmFsdWUpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGxlc3MgdGhhbiBgdmFsdWVgLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDUpLnRvLmJlLmJlbG93KDEwKTtcbiAgICpcbiAgICogQ2FuIGFsc28gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBsZW5ndGhgIHRvXG4gICAqIGFzc2VydCBhIG1heGltdW0gbGVuZ3RoLiBUaGUgYmVuZWZpdCBiZWluZyBhXG4gICAqIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSB0aGFuIGlmIHRoZSBsZW5ndGhcbiAgICogd2FzIHN1cHBsaWVkIGRpcmVjdGx5LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aC5iZWxvdyg0KTtcbiAgICogICAgIGV4cGVjdChbIDEsIDIsIDMgXSkudG8uaGF2ZS5sZW5ndGguYmVsb3coNCk7XG4gICAqXG4gICAqIEBuYW1lIGJlbG93XG4gICAqIEBhbGlhcyBsdFxuICAgKiBAYWxpYXMgbGVzc1RoYW5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0QmVsb3cgKG4sIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICBpZiAoZmxhZyh0aGlzLCAnZG9MZW5ndGgnKSkge1xuICAgICAgbmV3IEFzc2VydGlvbihvYmosIG1zZykudG8uaGF2ZS5wcm9wZXJ0eSgnbGVuZ3RoJyk7XG4gICAgICB2YXIgbGVuID0gb2JqLmxlbmd0aDtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIGxlbiA8IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgbGVuZ3RoIGJlbG93ICN7ZXhwfSBidXQgZ290ICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIGxlbmd0aCBiZWxvdyAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGxlblxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqIDwgblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGJlIGJlbG93ICcgKyBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbGVhc3QgJyArIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYmVsb3cnLCBhc3NlcnRCZWxvdyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2x0JywgYXNzZXJ0QmVsb3cpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsZXNzVGhhbicsIGFzc2VydEJlbG93KTtcblxuICAvKipcbiAgICogIyMjIC5tb3N0KHZhbHVlKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHZhbHVlYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCg1KS50by5iZS5hdC5tb3N0KDUpO1xuICAgKlxuICAgKiBDYW4gYWxzbyBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGxlbmd0aGAgdG9cbiAgICogYXNzZXJ0IGEgbWF4aW11bSBsZW5ndGguIFRoZSBiZW5lZml0IGJlaW5nIGFcbiAgICogbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIHRoYW4gaWYgdGhlIGxlbmd0aFxuICAgKiB3YXMgc3VwcGxpZWQgZGlyZWN0bHkuXG4gICAqXG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoLm9mLmF0Lm1vc3QoNCk7XG4gICAqICAgICBleHBlY3QoWyAxLCAyLCAzIF0pLnRvLmhhdmUubGVuZ3RoLm9mLmF0Lm1vc3QoMyk7XG4gICAqXG4gICAqIEBuYW1lIG1vc3RcbiAgICogQGFsaWFzIGx0ZVxuICAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRNb3N0IChuLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgaWYgKGZsYWcodGhpcywgJ2RvTGVuZ3RoJykpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2cpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgICAgdmFyIGxlbiA9IG9iai5sZW5ndGg7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBsZW4gPD0gblxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBsZW5ndGggYXQgbW9zdCAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIGxlbmd0aCBhYm92ZSAje2V4cH0nXG4gICAgICAgICwgblxuICAgICAgICAsIGxlblxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgb2JqIDw9IG5cbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICcgKyBuXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgJyArIG5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbW9zdCcsIGFzc2VydE1vc3QpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsdGUnLCBhc3NlcnRNb3N0KTtcblxuICAvKipcbiAgICogIyMjIC53aXRoaW4oc3RhcnQsIGZpbmlzaClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgd2l0aGluIGEgcmFuZ2UuXG4gICAqXG4gICAqICAgICBleHBlY3QoNykudG8uYmUud2l0aGluKDUsMTApO1xuICAgKlxuICAgKiBDYW4gYWxzbyBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGxlbmd0aGAgdG9cbiAgICogYXNzZXJ0IGEgbGVuZ3RoIHJhbmdlLiBUaGUgYmVuZWZpdCBiZWluZyBhXG4gICAqIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSB0aGFuIGlmIHRoZSBsZW5ndGhcbiAgICogd2FzIHN1cHBsaWVkIGRpcmVjdGx5LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aC53aXRoaW4oMiw0KTtcbiAgICogICAgIGV4cGVjdChbIDEsIDIsIDMgXSkudG8uaGF2ZS5sZW5ndGgud2l0aGluKDIsNCk7XG4gICAqXG4gICAqIEBuYW1lIHdpdGhpblxuICAgKiBAcGFyYW0ge051bWJlcn0gc3RhcnQgbG93ZXJib3VuZCBpbmNsdXNpdmVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGZpbmlzaCB1cHBlcmJvdW5kIGluY2x1c2l2ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ3dpdGhpbicsIGZ1bmN0aW9uIChzdGFydCwgZmluaXNoLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgcmFuZ2UgPSBzdGFydCArICcuLicgKyBmaW5pc2g7XG4gICAgaWYgKGZsYWcodGhpcywgJ2RvTGVuZ3RoJykpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2cpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgICAgdmFyIGxlbiA9IG9iai5sZW5ndGg7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBsZW4gPj0gc3RhcnQgJiYgbGVuIDw9IGZpbmlzaFxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBsZW5ndGggd2l0aGluICcgKyByYW5nZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgbGVuZ3RoIHdpdGhpbiAnICsgcmFuZ2VcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG9iaiA+PSBzdGFydCAmJiBvYmogPD0gZmluaXNoXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgd2l0aGluICcgKyByYW5nZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSB3aXRoaW4gJyArIHJhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuaW5zdGFuY2VvZihjb25zdHJ1Y3RvcilcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgaXMgYW4gaW5zdGFuY2Ugb2YgYGNvbnN0cnVjdG9yYC5cbiAgICpcbiAgICogICAgIHZhciBUZWEgPSBmdW5jdGlvbiAobmFtZSkgeyB0aGlzLm5hbWUgPSBuYW1lOyB9XG4gICAqICAgICAgICwgQ2hhaSA9IG5ldyBUZWEoJ2NoYWknKTtcbiAgICpcbiAgICogICAgIGV4cGVjdChDaGFpKS50by5iZS5hbi5pbnN0YW5jZW9mKFRlYSk7XG4gICAqICAgICBleHBlY3QoWyAxLCAyLCAzIF0pLnRvLmJlLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgKlxuICAgKiBAbmFtZSBpbnN0YW5jZW9mXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQGFsaWFzIGluc3RhbmNlT2ZcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VPZiAoY29uc3RydWN0b3IsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBuYW1lID0gXy5nZXROYW1lKGNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JykgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvclxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhbiBpbnN0YW5jZSBvZiAnICsgbmFtZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYW4gaW5zdGFuY2Ugb2YgJyArIG5hbWVcbiAgICApO1xuICB9O1xuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2luc3RhbmNlb2YnLCBhc3NlcnRJbnN0YW5jZU9mKTtcbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaW5zdGFuY2VPZicsIGFzc2VydEluc3RhbmNlT2YpO1xuXG4gIC8qKlxuICAgKiAjIyMgLnByb3BlcnR5KG5hbWUsIFt2YWx1ZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGhhcyBhIHByb3BlcnR5IGBuYW1lYCwgb3B0aW9uYWxseSBhc3NlcnRpbmcgdGhhdFxuICAgKiB0aGUgdmFsdWUgb2YgdGhhdCBwcm9wZXJ0eSBpcyBzdHJpY3RseSBlcXVhbCB0byAgYHZhbHVlYC5cbiAgICogSWYgdGhlIGBkZWVwYCBmbGFnIGlzIHNldCwgeW91IGNhbiB1c2UgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgZGVlcFxuICAgKiByZWZlcmVuY2VzIGludG8gb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgKlxuICAgKiAgICAgLy8gc2ltcGxlIHJlZmVyZW5jaW5nXG4gICAqICAgICB2YXIgb2JqID0geyBmb286ICdiYXInIH07XG4gICAqICAgICBleHBlY3Qob2JqKS50by5oYXZlLnByb3BlcnR5KCdmb28nKTtcbiAgICogICAgIGV4cGVjdChvYmopLnRvLmhhdmUucHJvcGVydHkoJ2ZvbycsICdiYXInKTtcbiAgICpcbiAgICogICAgIC8vIGRlZXAgcmVmZXJlbmNpbmdcbiAgICogICAgIHZhciBkZWVwT2JqID0ge1xuICAgKiAgICAgICAgIGdyZWVuOiB7IHRlYTogJ21hdGNoYScgfVxuICAgKiAgICAgICAsIHRlYXM6IFsgJ2NoYWknLCAnbWF0Y2hhJywgeyB0ZWE6ICdrb25hY2hhJyB9IF1cbiAgICogICAgIH07XG5cbiAgICogICAgIGV4cGVjdChkZWVwT2JqKS50by5oYXZlLmRlZXAucHJvcGVydHkoJ2dyZWVuLnRlYScsICdtYXRjaGEnKTtcbiAgICogICAgIGV4cGVjdChkZWVwT2JqKS50by5oYXZlLmRlZXAucHJvcGVydHkoJ3RlYXNbMV0nLCAnbWF0Y2hhJyk7XG4gICAqICAgICBleHBlY3QoZGVlcE9iaikudG8uaGF2ZS5kZWVwLnByb3BlcnR5KCd0ZWFzWzJdLnRlYScsICdrb25hY2hhJyk7XG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyB1c2UgYW4gYXJyYXkgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIGEgYGRlZXAucHJvcGVydHlgXG4gICAqIGFzc2VydGlvbiwgb3IgdHJhdmVyc2UgbmVzdGVkIGFycmF5cy5cbiAgICpcbiAgICogICAgIHZhciBhcnIgPSBbXG4gICAqICAgICAgICAgWyAnY2hhaScsICdtYXRjaGEnLCAna29uYWNoYScgXVxuICAgKiAgICAgICAsIFsgeyB0ZWE6ICdjaGFpJyB9XG4gICAqICAgICAgICAgLCB7IHRlYTogJ21hdGNoYScgfVxuICAgKiAgICAgICAgICwgeyB0ZWE6ICdrb25hY2hhJyB9IF1cbiAgICogICAgIF07XG4gICAqXG4gICAqICAgICBleHBlY3QoYXJyKS50by5oYXZlLmRlZXAucHJvcGVydHkoJ1swXVsxXScsICdtYXRjaGEnKTtcbiAgICogICAgIGV4cGVjdChhcnIpLnRvLmhhdmUuZGVlcC5wcm9wZXJ0eSgnWzFdWzJdLnRlYScsICdrb25hY2hhJyk7XG4gICAqXG4gICAqIEZ1cnRoZXJtb3JlLCBgcHJvcGVydHlgIGNoYW5nZXMgdGhlIHN1YmplY3Qgb2YgdGhlIGFzc2VydGlvblxuICAgKiB0byBiZSB0aGUgdmFsdWUgb2YgdGhhdCBwcm9wZXJ0eSBmcm9tIHRoZSBvcmlnaW5hbCBvYmplY3QuIFRoaXNcbiAgICogcGVybWl0cyBmb3IgZnVydGhlciBjaGFpbmFibGUgYXNzZXJ0aW9ucyBvbiB0aGF0IHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KG9iaikudG8uaGF2ZS5wcm9wZXJ0eSgnZm9vJylcbiAgICogICAgICAgLnRoYXQuaXMuYSgnc3RyaW5nJyk7XG4gICAqICAgICBleHBlY3QoZGVlcE9iaikudG8uaGF2ZS5wcm9wZXJ0eSgnZ3JlZW4nKVxuICAgKiAgICAgICAudGhhdC5pcy5hbignb2JqZWN0JylcbiAgICogICAgICAgLnRoYXQuZGVlcC5lcXVhbHMoeyB0ZWE6ICdtYXRjaGEnIH0pO1xuICAgKiAgICAgZXhwZWN0KGRlZXBPYmopLnRvLmhhdmUucHJvcGVydHkoJ3RlYXMnKVxuICAgKiAgICAgICAudGhhdC5pcy5hbignYXJyYXknKVxuICAgKiAgICAgICAud2l0aC5kZWVwLnByb3BlcnR5KCdbMl0nKVxuICAgKiAgICAgICAgIC50aGF0LmRlZXAuZXF1YWxzKHsgdGVhOiAna29uYWNoYScgfSk7XG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5XG4gICAqIEBhbGlhcyBkZWVwLnByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlIChvcHRpb25hbClcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAcmV0dXJucyB2YWx1ZSBvZiBwcm9wZXJ0eSBmb3IgY2hhaW5pbmdcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgncHJvcGVydHknLCBmdW5jdGlvbiAobmFtZSwgdmFsLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcblxuICAgIHZhciBkZXNjcmlwdG9yID0gZmxhZyh0aGlzLCAnZGVlcCcpID8gJ2RlZXAgcHJvcGVydHkgJyA6ICdwcm9wZXJ0eSAnXG4gICAgICAsIG5lZ2F0ZSA9IGZsYWcodGhpcywgJ25lZ2F0ZScpXG4gICAgICAsIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAsIHZhbHVlID0gZmxhZyh0aGlzLCAnZGVlcCcpXG4gICAgICAgID8gXy5nZXRQYXRoVmFsdWUobmFtZSwgb2JqKVxuICAgICAgICA6IG9ialtuYW1lXTtcblxuICAgIGlmIChuZWdhdGUgJiYgdW5kZWZpbmVkICE9PSB2YWwpIHtcbiAgICAgIGlmICh1bmRlZmluZWQgPT09IHZhbHVlKSB7XG4gICAgICAgIG1zZyA9IChtc2cgIT0gbnVsbCkgPyBtc2cgKyAnOiAnIDogJyc7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cgKyBfLmluc3BlY3Qob2JqKSArICcgaGFzIG5vICcgKyBkZXNjcmlwdG9yICsgXy5pbnNwZWN0KG5hbWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgdW5kZWZpbmVkICE9PSB2YWx1ZVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSAnICsgZGVzY3JpcHRvciArIF8uaW5zcGVjdChuYW1lKVxuICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlICcgKyBkZXNjcmlwdG9yICsgXy5pbnNwZWN0KG5hbWUpKTtcbiAgICB9XG5cbiAgICBpZiAodW5kZWZpbmVkICE9PSB2YWwpIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIHZhbCA9PT0gdmFsdWVcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgJyArIGRlc2NyaXB0b3IgKyBfLmluc3BlY3QobmFtZSkgKyAnIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSAnICsgZGVzY3JpcHRvciArIF8uaW5zcGVjdChuYW1lKSArICcgb2YgI3thY3R9J1xuICAgICAgICAsIHZhbFxuICAgICAgICAsIHZhbHVlXG4gICAgICApO1xuICAgIH1cblxuICAgIGZsYWcodGhpcywgJ29iamVjdCcsIHZhbHVlKTtcbiAgfSk7XG5cblxuICAvKipcbiAgICogIyMjIC5vd25Qcm9wZXJ0eShuYW1lKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBoYXMgYW4gb3duIHByb3BlcnR5IGBuYW1lYC5cbiAgICpcbiAgICogICAgIGV4cGVjdCgndGVzdCcpLnRvLmhhdmUub3duUHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgKlxuICAgKiBAbmFtZSBvd25Qcm9wZXJ0eVxuICAgKiBAYWxpYXMgaGF2ZU93blByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHkgKG5hbWUsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KG5hbWUpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgb3duIHByb3BlcnR5ICcgKyBfLmluc3BlY3QobmFtZSlcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgb3duIHByb3BlcnR5ICcgKyBfLmluc3BlY3QobmFtZSlcbiAgICApO1xuICB9XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnb3duUHJvcGVydHknLCBhc3NlcnRPd25Qcm9wZXJ0eSk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2hhdmVPd25Qcm9wZXJ0eScsIGFzc2VydE93blByb3BlcnR5KTtcblxuICAvKipcbiAgICogIyMjIC5sZW5ndGgodmFsdWUpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0J3MgYGxlbmd0aGAgcHJvcGVydHkgaGFzXG4gICAqIHRoZSBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogICAgIGV4cGVjdChbIDEsIDIsIDNdKS50by5oYXZlLmxlbmd0aCgzKTtcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8uaGF2ZS5sZW5ndGgoNik7XG4gICAqXG4gICAqIENhbiBhbHNvIGJlIHVzZWQgYXMgYSBjaGFpbiBwcmVjdXJzb3IgdG8gYSB2YWx1ZVxuICAgKiBjb21wYXJpc29uIGZvciB0aGUgbGVuZ3RoIHByb3BlcnR5LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb28nKS50by5oYXZlLmxlbmd0aC5hYm92ZSgyKTtcbiAgICogICAgIGV4cGVjdChbIDEsIDIsIDMgXSkudG8uaGF2ZS5sZW5ndGguYWJvdmUoMik7XG4gICAqICAgICBleHBlY3QoJ2ZvbycpLnRvLmhhdmUubGVuZ3RoLmJlbG93KDQpO1xuICAgKiAgICAgZXhwZWN0KFsgMSwgMiwgMyBdKS50by5oYXZlLmxlbmd0aC5iZWxvdyg0KTtcbiAgICogICAgIGV4cGVjdCgnZm9vJykudG8uaGF2ZS5sZW5ndGgud2l0aGluKDIsNCk7XG4gICAqICAgICBleHBlY3QoWyAxLCAyLCAzIF0pLnRvLmhhdmUubGVuZ3RoLndpdGhpbigyLDQpO1xuICAgKlxuICAgKiBAbmFtZSBsZW5ndGhcbiAgICogQGFsaWFzIGxlbmd0aE9mXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBmdW5jdGlvbiBhc3NlcnRMZW5ndGhDaGFpbiAoKSB7XG4gICAgZmxhZyh0aGlzLCAnZG9MZW5ndGgnLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2VydExlbmd0aCAobiwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2cpLnRvLmhhdmUucHJvcGVydHkoJ2xlbmd0aCcpO1xuICAgIHZhciBsZW4gPSBvYmoubGVuZ3RoO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxlbiA9PSBuXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBsZW5ndGggb2YgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIGxlbmd0aCBvZiAje2FjdH0nXG4gICAgICAsIG5cbiAgICAgICwgbGVuXG4gICAgKTtcbiAgfVxuXG4gIEFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ2xlbmd0aCcsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdsZW5ndGhPZicsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuXG4gIC8qKlxuICAgKiAjIyMgLm1hdGNoKHJlZ2V4cClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSB0YXJnZXQgbWF0Y2hlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICpcbiAgICogICAgIGV4cGVjdCgnZm9vYmFyJykudG8ubWF0Y2goL15mb28vKTtcbiAgICpcbiAgICogQG5hbWUgbWF0Y2hcbiAgICogQHBhcmFtIHtSZWdFeHB9IFJlZ3VsYXJFeHByZXNzaW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnbWF0Y2gnLCBmdW5jdGlvbiAocmUsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgcmUuZXhlYyhvYmopXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG1hdGNoICcgKyByZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gbWF0Y2ggJyArIHJlXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuc3RyaW5nKHN0cmluZylcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSBzdHJpbmcgdGFyZ2V0IGNvbnRhaW5zIGFub3RoZXIgc3RyaW5nLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KCdmb29iYXInKS50by5oYXZlLnN0cmluZygnYmFyJyk7XG4gICAqXG4gICAqIEBuYW1lIHN0cmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIF9vcHRpb25hbF9cbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgnc3RyaW5nJywgZnVuY3Rpb24gKHN0ciwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2cpLmlzLmEoJ3N0cmluZycpO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIH5vYmouaW5kZXhPZihzdHIpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gJyArIF8uaW5zcGVjdChzdHIpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluICcgKyBfLmluc3BlY3Qoc3RyKVxuICAgICk7XG4gIH0pO1xuXG5cbiAgLyoqXG4gICAqICMjIyAua2V5cyhrZXkxLCBba2V5Ml0sIFsuLi5dKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIHRhcmdldCBoYXMgZXhhY3RseSB0aGUgZ2l2ZW4ga2V5cywgb3JcbiAgICogYXNzZXJ0cyB0aGUgaW5jbHVzaW9uIG9mIHNvbWUga2V5cyB3aGVuIHVzaW5nIHRoZVxuICAgKiBgaW5jbHVkZWAgb3IgYGNvbnRhaW5gIG1vZGlmaWVycy5cbiAgICpcbiAgICogICAgIGV4cGVjdCh7IGZvbzogMSwgYmFyOiAyIH0pLnRvLmhhdmUua2V5cyhbJ2ZvbycsICdiYXInXSk7XG4gICAqICAgICBleHBlY3QoeyBmb286IDEsIGJhcjogMiwgYmF6OiAzIH0pLnRvLmNvbnRhaW4ua2V5cygnZm9vJywgJ2JhcicpO1xuICAgKlxuICAgKiBAbmFtZSBrZXlzXG4gICAqIEBhbGlhcyBrZXlcbiAgICogQHBhcmFtIHtTdHJpbmcuLi58QXJyYXl9IGtleXNcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0S2V5cyAoa2V5cykge1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgLCBzdHJcbiAgICAgICwgb2sgPSB0cnVlO1xuXG4gICAga2V5cyA9IGtleXMgaW5zdGFuY2VvZiBBcnJheVxuICAgICAgPyBrZXlzXG4gICAgICA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICBpZiAoIWtleXMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ2tleXMgcmVxdWlyZWQnKTtcblxuICAgIHZhciBhY3R1YWwgPSBPYmplY3Qua2V5cyhvYmopXG4gICAgICAsIGxlbiA9IGtleXMubGVuZ3RoO1xuXG4gICAgLy8gSW5jbHVzaW9uXG4gICAgb2sgPSBrZXlzLmV2ZXJ5KGZ1bmN0aW9uKGtleSl7XG4gICAgICByZXR1cm4gfmFjdHVhbC5pbmRleE9mKGtleSk7XG4gICAgfSk7XG5cbiAgICAvLyBTdHJpY3RcbiAgICBpZiAoIWZsYWcodGhpcywgJ25lZ2F0ZScpICYmICFmbGFnKHRoaXMsICdjb250YWlucycpKSB7XG4gICAgICBvayA9IG9rICYmIGtleXMubGVuZ3RoID09IGFjdHVhbC5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gS2V5IHN0cmluZ1xuICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KXtcbiAgICAgICAgcmV0dXJuIF8uaW5zcGVjdChrZXkpO1xuICAgICAgfSk7XG4gICAgICB2YXIgbGFzdCA9IGtleXMucG9wKCk7XG4gICAgICBzdHIgPSBrZXlzLmpvaW4oJywgJykgKyAnLCBhbmQgJyArIGxhc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IF8uaW5zcGVjdChrZXlzWzBdKTtcbiAgICB9XG5cbiAgICAvLyBGb3JtXG4gICAgc3RyID0gKGxlbiA+IDEgPyAna2V5cyAnIDogJ2tleSAnKSArIHN0cjtcblxuICAgIC8vIEhhdmUgLyBpbmNsdWRlXG4gICAgc3RyID0gKGZsYWcodGhpcywgJ2NvbnRhaW5zJykgPyAnY29udGFpbiAnIDogJ2hhdmUgJykgKyBzdHI7XG5cbiAgICAvLyBBc3NlcnRpb25cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgb2tcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gJyArIHN0clxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgJyArIHN0clxuICAgICk7XG4gIH1cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdrZXlzJywgYXNzZXJ0S2V5cyk7XG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ2tleScsIGFzc2VydEtleXMpO1xuXG4gIC8qKlxuICAgKiAjIyMgLnRocm93KGNvbnN0cnVjdG9yKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgdGhlIGZ1bmN0aW9uIHRhcmdldCB3aWxsIHRocm93IGEgc3BlY2lmaWMgZXJyb3IsIG9yIHNwZWNpZmljIHR5cGUgb2YgZXJyb3JcbiAgICogKGFzIGRldGVybWluZWQgdXNpbmcgYGluc3RhbmNlb2ZgKSwgb3B0aW9uYWxseSB3aXRoIGEgUmVnRXhwIG9yIHN0cmluZyBpbmNsdXNpb24gdGVzdFxuICAgKiBmb3IgdGhlIGVycm9yJ3MgbWVzc2FnZS5cbiAgICpcbiAgICogICAgIHZhciBlcnIgPSBuZXcgUmVmZXJlbmNlRXJyb3IoJ1RoaXMgaXMgYSBiYWQgZnVuY3Rpb24uJyk7XG4gICAqICAgICB2YXIgZm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IGVycjsgfVxuICAgKiAgICAgZXhwZWN0KGZuKS50by50aHJvdyhSZWZlcmVuY2VFcnJvcik7XG4gICAqICAgICBleHBlY3QoZm4pLnRvLnRocm93KEVycm9yKTtcbiAgICogICAgIGV4cGVjdChmbikudG8udGhyb3coL2JhZCBmdW5jdGlvbi8pO1xuICAgKiAgICAgZXhwZWN0KGZuKS50by5ub3QudGhyb3coJ2dvb2QgZnVuY3Rpb24nKTtcbiAgICogICAgIGV4cGVjdChmbikudG8udGhyb3coUmVmZXJlbmNlRXJyb3IsIC9iYWQgZnVuY3Rpb24vKTtcbiAgICogICAgIGV4cGVjdChmbikudG8udGhyb3coZXJyKTtcbiAgICogICAgIGV4cGVjdChmbikudG8ubm90LnRocm93KG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UuJykpO1xuICAgKlxuICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHdoZW4gYSB0aHJvdyBleHBlY3RhdGlvbiBpcyBuZWdhdGVkLCBpdCB3aWxsIGNoZWNrIGVhY2hcbiAgICogcGFyYW1ldGVyIGluZGVwZW5kZW50bHksIHN0YXJ0aW5nIHdpdGggZXJyb3IgY29uc3RydWN0b3IgdHlwZS4gVGhlIGFwcHJvcHJpYXRlIHdheVxuICAgKiB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhIHR5cGUgb2YgZXJyb3IgYnV0IGZvciBhIG1lc3NhZ2UgdGhhdCBkb2VzIG5vdCBtYXRjaFxuICAgKiBpcyB0byB1c2UgYGFuZGAuXG4gICAqXG4gICAqICAgICBleHBlY3QoZm4pLnRvLnRocm93KFJlZmVyZW5jZUVycm9yKVxuICAgKiAgICAgICAgLmFuZC5ub3QudGhyb3coL2dvb2QgZnVuY3Rpb24vKTtcbiAgICpcbiAgICogQG5hbWUgdGhyb3dcbiAgICogQGFsaWFzIHRocm93c1xuICAgKiBAYWxpYXMgVGhyb3dcbiAgICogQHBhcmFtIHtFcnJvckNvbnN0cnVjdG9yfSBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IGV4cGVjdGVkIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAqIEByZXR1cm5zIGVycm9yIGZvciBjaGFpbmluZyAobnVsbCBpZiBubyBlcnJvcilcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgZnVuY3Rpb24gYXNzZXJ0VGhyb3dzIChjb25zdHJ1Y3RvciwgZXJyTXNnLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZykuaXMuYSgnZnVuY3Rpb24nKTtcblxuICAgIHZhciB0aHJvd24gPSBmYWxzZVxuICAgICAgLCBkZXNpcmVkRXJyb3IgPSBudWxsXG4gICAgICAsIG5hbWUgPSBudWxsXG4gICAgICAsIHRocm93bkVycm9yID0gbnVsbDtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBlcnJNc2cgPSBudWxsO1xuICAgICAgY29uc3RydWN0b3IgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoY29uc3RydWN0b3IgJiYgKGNvbnN0cnVjdG9yIGluc3RhbmNlb2YgUmVnRXhwIHx8ICdzdHJpbmcnID09PSB0eXBlb2YgY29uc3RydWN0b3IpKSB7XG4gICAgICBlcnJNc2cgPSBjb25zdHJ1Y3RvcjtcbiAgICAgIGNvbnN0cnVjdG9yID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGRlc2lyZWRFcnJvciA9IGNvbnN0cnVjdG9yO1xuICAgICAgY29uc3RydWN0b3IgPSBudWxsO1xuICAgICAgZXJyTXNnID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmFtZSA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZS5uYW1lIHx8IGNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICBpZiAobmFtZSA9PT0gJ0Vycm9yJyAmJiBjb25zdHJ1Y3RvciAhPT0gRXJyb3IpIHtcbiAgICAgICAgbmFtZSA9IChuZXcgY29uc3RydWN0b3IoKSkubmFtZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3RydWN0b3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBvYmooKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGZpcnN0LCBjaGVjayBkZXNpcmVkIGVycm9yXG4gICAgICBpZiAoZGVzaXJlZEVycm9yKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZXJyID09PSBkZXNpcmVkRXJyb3JcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd24nXG4gICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9J1xuICAgICAgICAgICwgKGRlc2lyZWRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZGVzaXJlZEVycm9yLnRvU3RyaW5nKCkgOiBkZXNpcmVkRXJyb3IpXG4gICAgICAgICAgLCAoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIudG9TdHJpbmcoKSA6IGVycilcbiAgICAgICAgKTtcblxuICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBlcnIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gbmV4dCwgY2hlY2sgY29uc3RydWN0b3JcbiAgICAgIGlmIChjb25zdHJ1Y3Rvcikge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yXG4gICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duJ1xuICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd24nXG4gICAgICAgICAgLCBuYW1lXG4gICAgICAgICAgLCAoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIudG9TdHJpbmcoKSA6IGVycilcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWVyck1zZykge1xuICAgICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGVycik7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gbmV4dCwgY2hlY2sgbWVzc2FnZVxuICAgICAgdmFyIG1lc3NhZ2UgPSAnb2JqZWN0JyA9PT0gXy50eXBlKGVycikgJiYgXCJtZXNzYWdlXCIgaW4gZXJyXG4gICAgICAgID8gZXJyLm1lc3NhZ2VcbiAgICAgICAgOiAnJyArIGVycjtcblxuICAgICAgaWYgKChtZXNzYWdlICE9IG51bGwpICYmIGVyck1zZyAmJiBlcnJNc2cgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBlcnJNc2cuZXhlYyhtZXNzYWdlKVxuICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3IgbWF0Y2hpbmcgI3tleHB9IGJ1dCBnb3QgI3thY3R9J1xuICAgICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3Igbm90IG1hdGNoaW5nICN7ZXhwfSdcbiAgICAgICAgICAsIGVyck1zZ1xuICAgICAgICAgICwgbWVzc2FnZVxuICAgICAgICApO1xuXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGVycik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBlbHNlIGlmICgobWVzc2FnZSAhPSBudWxsKSAmJiBlcnJNc2cgJiYgJ3N0cmluZycgPT09IHR5cGVvZiBlcnJNc2cpIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICB+bWVzc2FnZS5pbmRleE9mKGVyck1zZylcbiAgICAgICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yIGluY2x1ZGluZyAje2V4cH0gYnV0IGdvdCAje2FjdH0nXG4gICAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciBub3QgaW5jbHVkaW5nICN7YWN0fSdcbiAgICAgICAgICAsIGVyck1zZ1xuICAgICAgICAgICwgbWVzc2FnZVxuICAgICAgICApO1xuXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGVycik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3duID0gdHJ1ZTtcbiAgICAgICAgdGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFjdHVhbGx5R290ID0gJydcbiAgICAgICwgZXhwZWN0ZWRUaHJvd24gPSBuYW1lICE9PSBudWxsXG4gICAgICAgID8gbmFtZVxuICAgICAgICA6IGRlc2lyZWRFcnJvclxuICAgICAgICAgID8gJyN7ZXhwfScgLy9fLmluc3BlY3QoZGVzaXJlZEVycm9yKVxuICAgICAgICAgIDogJ2FuIGVycm9yJztcblxuICAgIGlmICh0aHJvd24pIHtcbiAgICAgIGFjdHVhbGx5R290ID0gJyBidXQgI3thY3R9IHdhcyB0aHJvd24nXG4gICAgfVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIHRocm93biA9PT0gdHJ1ZVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAnICsgZXhwZWN0ZWRUaHJvd24gKyBhY3R1YWxseUdvdFxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgJyArIGV4cGVjdGVkVGhyb3duICsgYWN0dWFsbHlHb3RcbiAgICAgICwgKGRlc2lyZWRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZGVzaXJlZEVycm9yLnRvU3RyaW5nKCkgOiBkZXNpcmVkRXJyb3IpXG4gICAgICAsICh0aHJvd25FcnJvciBpbnN0YW5jZW9mIEVycm9yID8gdGhyb3duRXJyb3IudG9TdHJpbmcoKSA6IHRocm93bkVycm9yKVxuICAgICk7XG5cbiAgICBmbGFnKHRoaXMsICdvYmplY3QnLCB0aHJvd25FcnJvcik7XG4gIH07XG5cbiAgQXNzZXJ0aW9uLmFkZE1ldGhvZCgndGhyb3cnLCBhc3NlcnRUaHJvd3MpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCd0aHJvd3MnLCBhc3NlcnRUaHJvd3MpO1xuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdUaHJvdycsIGFzc2VydFRocm93cyk7XG5cbiAgLyoqXG4gICAqICMjIyAucmVzcG9uZFRvKG1ldGhvZClcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IHRoZSBvYmplY3Qgb3IgY2xhc3MgdGFyZ2V0IHdpbGwgcmVzcG9uZCB0byBhIG1ldGhvZC5cbiAgICpcbiAgICogICAgIEtsYXNzLnByb3RvdHlwZS5iYXIgPSBmdW5jdGlvbigpe307XG4gICAqICAgICBleHBlY3QoS2xhc3MpLnRvLnJlc3BvbmRUbygnYmFyJyk7XG4gICAqICAgICBleHBlY3Qob2JqKS50by5yZXNwb25kVG8oJ2JhcicpO1xuICAgKlxuICAgKiBUbyBjaGVjayBpZiBhIGNvbnN0cnVjdG9yIHdpbGwgcmVzcG9uZCB0byBhIHN0YXRpYyBmdW5jdGlvbixcbiAgICogc2V0IHRoZSBgaXRzZWxmYCBmbGFnLlxuICAgKlxuICAgKiAgICAgS2xhc3MuYmF6ID0gZnVuY3Rpb24oKXt9O1xuICAgKiAgICAgZXhwZWN0KEtsYXNzKS5pdHNlbGYudG8ucmVzcG9uZFRvKCdiYXonKTtcbiAgICpcbiAgICogQG5hbWUgcmVzcG9uZFRvXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdyZXNwb25kVG8nLCBmdW5jdGlvbiAobWV0aG9kLCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICwgaXRzZWxmID0gZmxhZyh0aGlzLCAnaXRzZWxmJylcbiAgICAgICwgY29udGV4dCA9ICgnZnVuY3Rpb24nID09PSBfLnR5cGUob2JqKSAmJiAhaXRzZWxmKVxuICAgICAgICA/IG9iai5wcm90b3R5cGVbbWV0aG9kXVxuICAgICAgICA6IG9ialttZXRob2RdO1xuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICdmdW5jdGlvbicgPT09IHR5cGVvZiBjb250ZXh0XG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHJlc3BvbmQgdG8gJyArIF8uaW5zcGVjdChtZXRob2QpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCByZXNwb25kIHRvICcgKyBfLmluc3BlY3QobWV0aG9kKVxuICAgICk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiAjIyMgLml0c2VsZlxuICAgKlxuICAgKiBTZXRzIHRoZSBgaXRzZWxmYCBmbGFnLCBsYXRlciB1c2VkIGJ5IHRoZSBgcmVzcG9uZFRvYCBhc3NlcnRpb24uXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBGb28oKSB7fVxuICAgKiAgICAgRm9vLmJhciA9IGZ1bmN0aW9uKCkge31cbiAgICogICAgIEZvby5wcm90b3R5cGUuYmF6ID0gZnVuY3Rpb24oKSB7fVxuICAgKlxuICAgKiAgICAgZXhwZWN0KEZvbykuaXRzZWxmLnRvLnJlc3BvbmRUbygnYmFyJyk7XG4gICAqICAgICBleHBlY3QoRm9vKS5pdHNlbGYubm90LnRvLnJlc3BvbmRUbygnYmF6Jyk7XG4gICAqXG4gICAqIEBuYW1lIGl0c2VsZlxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoJ2l0c2VsZicsIGZ1bmN0aW9uICgpIHtcbiAgICBmbGFnKHRoaXMsICdpdHNlbGYnLCB0cnVlKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuc2F0aXNmeShtZXRob2QpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IHBhc3NlcyBhIGdpdmVuIHRydXRoIHRlc3QuXG4gICAqXG4gICAqICAgICBleHBlY3QoMSkudG8uc2F0aXNmeShmdW5jdGlvbihudW0pIHsgcmV0dXJuIG51bSA+IDA7IH0pO1xuICAgKlxuICAgKiBAbmFtZSBzYXRpc2Z5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG1hdGNoZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdzYXRpc2Z5JywgZnVuY3Rpb24gKG1hdGNoZXIsIG1zZykge1xuICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpO1xuICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKTtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgbWF0Y2hlcihvYmopXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIHNhdGlzZnkgJyArIF8ub2JqRGlzcGxheShtYXRjaGVyKVxuICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3Qgc2F0aXNmeScgKyBfLm9iakRpc3BsYXkobWF0Y2hlcilcbiAgICAgICwgdGhpcy5uZWdhdGUgPyBmYWxzZSA6IHRydWVcbiAgICAgICwgbWF0Y2hlcihvYmopXG4gICAgKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqICMjIyAuY2xvc2VUbyhleHBlY3RlZCwgZGVsdGEpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIGBleHBlY3RlZGAsIHRvIHdpdGhpbiBhICsvLSBgZGVsdGFgIHJhbmdlLlxuICAgKlxuICAgKiAgICAgZXhwZWN0KDEuNSkudG8uYmUuY2xvc2VUbygxLCAwLjUpO1xuICAgKlxuICAgKiBAbmFtZSBjbG9zZVRvXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgX29wdGlvbmFsX1xuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBBc3NlcnRpb24uYWRkTWV0aG9kKCdjbG9zZVRvJywgZnVuY3Rpb24gKGV4cGVjdGVkLCBkZWx0YSwgbXNnKSB7XG4gICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7XG4gICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpO1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBNYXRoLmFicyhvYmogLSBleHBlY3RlZCkgPD0gZGVsdGFcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgY2xvc2UgdG8gJyArIGV4cGVjdGVkICsgJyArLy0gJyArIGRlbHRhXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBjbG9zZSB0byAnICsgZXhwZWN0ZWQgKyAnICsvLSAnICsgZGVsdGFcbiAgICApO1xuICB9KTtcblxuICBmdW5jdGlvbiBpc1N1YnNldE9mKHN1YnNldCwgc3VwZXJzZXQsIGNtcCkge1xuICAgIHJldHVybiBzdWJzZXQuZXZlcnkoZnVuY3Rpb24oZWxlbSkge1xuICAgICAgaWYgKCFjbXApIHJldHVybiBzdXBlcnNldC5pbmRleE9mKGVsZW0pICE9PSAtMTtcblxuICAgICAgcmV0dXJuIHN1cGVyc2V0LnNvbWUoZnVuY3Rpb24oZWxlbTIpIHtcbiAgICAgICAgcmV0dXJuIGNtcChlbGVtLCBlbGVtMik7XG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqICMjIyAubWVtYmVycyhzZXQpXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgc3VwZXJzZXQgb2YgYHNldGAsXG4gICAqIG9yIHRoYXQgdGhlIHRhcmdldCBhbmQgYHNldGAgaGF2ZSB0aGUgc2FtZSBzdHJpY3RseS1lcXVhbCAoPT09KSBtZW1iZXJzLlxuICAgKiBBbHRlcm5hdGVseSwgaWYgdGhlIGBkZWVwYCBmbGFnIGlzIHNldCwgc2V0IG1lbWJlcnMgYXJlIGNvbXBhcmVkIGZvciBkZWVwXG4gICAqIGVxdWFsaXR5LlxuICAgKlxuICAgKiAgICAgZXhwZWN0KFsxLCAyLCAzXSkudG8uaW5jbHVkZS5tZW1iZXJzKFszLCAyXSk7XG4gICAqICAgICBleHBlY3QoWzEsIDIsIDNdKS50by5ub3QuaW5jbHVkZS5tZW1iZXJzKFszLCAyLCA4XSk7XG4gICAqXG4gICAqICAgICBleHBlY3QoWzQsIDJdKS50by5oYXZlLm1lbWJlcnMoWzIsIDRdKTtcbiAgICogICAgIGV4cGVjdChbNSwgMl0pLnRvLm5vdC5oYXZlLm1lbWJlcnMoWzUsIDIsIDFdKTtcbiAgICpcbiAgICogICAgIGV4cGVjdChbeyBpZDogMSB9XSkudG8uZGVlcC5pbmNsdWRlLm1lbWJlcnMoW3sgaWQ6IDEgfV0pO1xuICAgKlxuICAgKiBAbmFtZSBtZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBfb3B0aW9uYWxfXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIEFzc2VydGlvbi5hZGRNZXRob2QoJ21lbWJlcnMnLCBmdW5jdGlvbiAoc3Vic2V0LCBtc2cpIHtcbiAgICBpZiAobXNnKSBmbGFnKHRoaXMsICdtZXNzYWdlJywgbXNnKTtcbiAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG5cbiAgICBuZXcgQXNzZXJ0aW9uKG9iaikudG8uYmUuYW4oJ2FycmF5Jyk7XG4gICAgbmV3IEFzc2VydGlvbihzdWJzZXQpLnRvLmJlLmFuKCdhcnJheScpO1xuXG4gICAgdmFyIGNtcCA9IGZsYWcodGhpcywgJ2RlZXAnKSA/IF8uZXFsIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZsYWcodGhpcywgJ2NvbnRhaW5zJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzc2VydChcbiAgICAgICAgICBpc1N1YnNldE9mKHN1YnNldCwgb2JqLCBjbXApXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgYSBzdXBlcnNldCBvZiAje2FjdH0nXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGEgc3VwZXJzZXQgb2YgI3thY3R9J1xuICAgICAgICAsIG9ialxuICAgICAgICAsIHN1YnNldFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2VydChcbiAgICAgICAgaXNTdWJzZXRPZihvYmosIHN1YnNldCwgY21wKSAmJiBpc1N1YnNldE9mKHN1YnNldCwgb2JqLCBjbXApXG4gICAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGFzICN7YWN0fSdcbiAgICAgICAgLCAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzIGFzICN7YWN0fSdcbiAgICAgICAgLCBvYmpcbiAgICAgICAgLCBzdWJzZXRcbiAgICApO1xuICB9KTtcbn07XG4iLCIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNoYWksIHV0aWwpIHtcblxuICAvKiFcbiAgICogQ2hhaSBkZXBlbmRlbmNpZXMuXG4gICAqL1xuXG4gIHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvblxuICAgICwgZmxhZyA9IHV0aWwuZmxhZztcblxuICAvKiFcbiAgICogTW9kdWxlIGV4cG9ydC5cbiAgICovXG5cbiAgLyoqXG4gICAqICMjIyBhc3NlcnQoZXhwcmVzc2lvbiwgbWVzc2FnZSlcbiAgICpcbiAgICogV3JpdGUgeW91ciBvd24gdGVzdCBleHByZXNzaW9ucy5cbiAgICpcbiAgICogICAgIGFzc2VydCgnZm9vJyAhPT0gJ2JhcicsICdmb28gaXMgbm90IGJhcicpO1xuICAgKiAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoW10pLCAnZW1wdHkgYXJyYXlzIGFyZSBhcnJheXMnKTtcbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwcmVzc2lvbiB0byB0ZXN0IGZvciB0cnV0aGluZXNzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIHRvIGRpc3BsYXkgb24gZXJyb3JcbiAgICogQG5hbWUgYXNzZXJ0XG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIHZhciBhc3NlcnQgPSBjaGFpLmFzc2VydCA9IGZ1bmN0aW9uIChleHByZXNzLCBlcnJtc2cpIHtcbiAgICB2YXIgdGVzdCA9IG5ldyBBc3NlcnRpb24obnVsbCwgbnVsbCwgY2hhaS5hc3NlcnQpO1xuICAgIHRlc3QuYXNzZXJ0KFxuICAgICAgICBleHByZXNzXG4gICAgICAsIGVycm1zZ1xuICAgICAgLCAnWyBuZWdhdGlvbiBtZXNzYWdlIHVuYXZhaWxhYmxlIF0nXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5mYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSwgW29wZXJhdG9yXSlcbiAgICpcbiAgICogVGhyb3cgYSBmYWlsdXJlLiBOb2RlLmpzIGBhc3NlcnRgIG1vZHVsZS1jb21wYXRpYmxlLlxuICAgKlxuICAgKiBAbmFtZSBmYWlsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3JcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmZhaWwgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgICBtZXNzYWdlID0gbWVzc2FnZSB8fCAnYXNzZXJ0LmZhaWwoKSc7XG4gICAgdGhyb3cgbmV3IGNoYWkuQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgICAgICBhY3R1YWw6IGFjdHVhbFxuICAgICAgLCBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICwgb3BlcmF0b3I6IG9wZXJhdG9yXG4gICAgfSwgYXNzZXJ0LmZhaWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm9rKG9iamVjdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgdHJ1dGh5LlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm9rKCdldmVyeXRoaW5nJywgJ2V2ZXJ5dGhpbmcgaXMgb2snKTtcbiAgICogICAgIGFzc2VydC5vayhmYWxzZSwgJ3RoaXMgd2lsbCBmYWlsJyk7XG4gICAqXG4gICAqIEBuYW1lIG9rXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdCB0byB0ZXN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5vayA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLmlzLm9rO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdE9rKG9iamVjdCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaXMgZmFsc3kuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90T2soJ2V2ZXJ5dGhpbmcnLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICogICAgIGFzc2VydC5ub3RPayhmYWxzZSwgJ3RoaXMgd2lsbCBwYXNzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdE9rXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdCB0byB0ZXN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RPayA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLmlzLm5vdC5vaztcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgbm9uLXN0cmljdCBlcXVhbGl0eSAoYD09YCkgb2YgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZXF1YWwoMywgJzMnLCAnPT0gY29lcmNlcyB2YWx1ZXMgdG8gc3RyaW5ncycpO1xuICAgKlxuICAgKiBAbmFtZSBlcXVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBtc2cpIHtcbiAgICB2YXIgdGVzdCA9IG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5lcXVhbCk7XG5cbiAgICB0ZXN0LmFzc2VydChcbiAgICAgICAgZXhwID09IGZsYWcodGVzdCwgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7ZXhwfSdcbiAgICAgICwgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7YWN0fSdcbiAgICAgICwgZXhwXG4gICAgICAsIGFjdFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIG5vbi1zdHJpY3QgaW5lcXVhbGl0eSAoYCE9YCkgb2YgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90RXF1YWwoMywgNCwgJ3RoZXNlIG51bWJlcnMgYXJlIG5vdCBlcXVhbCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RFcXVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdEVxdWFsID0gZnVuY3Rpb24gKGFjdCwgZXhwLCBtc2cpIHtcbiAgICB2YXIgdGVzdCA9IG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RFcXVhbCk7XG5cbiAgICB0ZXN0LmFzc2VydChcbiAgICAgICAgZXhwICE9IGZsYWcodGVzdCwgJ29iamVjdCcpXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH0nXG4gICAgICAsICdleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7YWN0fSdcbiAgICAgICwgZXhwXG4gICAgICAsIGFjdFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHN0cmljdCBlcXVhbGl0eSAoYD09PWApIG9mIGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRydWUsIHRydWUsICd0aGVzZSBib29sZWFucyBhcmUgc3RyaWN0bHkgZXF1YWwnKTtcbiAgICpcbiAgICogQG5hbWUgc3RyaWN0RXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZykudG8uZXF1YWwoZXhwKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgc3RyaWN0IGluZXF1YWxpdHkgKGAhPT1gKSBvZiBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbCgzLCAnMycsICdubyBjb2VyY2lvbiBmb3Igc3RyaWN0IGVxdWFsaXR5Jyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFN0cmljdEVxdWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGFjdHVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBleHBlY3RlZFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2cpLnRvLm5vdC5lcXVhbChleHApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgYWN0dWFsYCBpcyBkZWVwbHkgZXF1YWwgdG8gYGV4cGVjdGVkYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwRXF1YWwoeyB0ZWE6ICdncmVlbicgfSwgeyB0ZWE6ICdncmVlbicgfSk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBFcXVhbFxuICAgKiBAcGFyYW0ge01peGVkfSBhY3R1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gZXhwZWN0ZWRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3QsIG1zZykudG8uZXFsKGV4cCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0IHRoYXQgYGFjdHVhbGAgaXMgbm90IGRlZXBseSBlcXVhbCB0byBgZXhwZWN0ZWRgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdERlZXBFcXVhbCh7IHRlYTogJ2dyZWVuJyB9LCB7IHRlYTogJ2phc21pbmUnIH0pO1xuICAgKlxuICAgKiBAbmFtZSBub3REZWVwRXF1YWxcbiAgICogQHBhcmFtIHtNaXhlZH0gYWN0dWFsXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbiAoYWN0LCBleHAsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2cpLnRvLm5vdC5lcWwoZXhwKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1RydWUodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgdHJ1ZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWFTZXJ2ZWQgPSB0cnVlO1xuICAgKiAgICAgYXNzZXJ0LmlzVHJ1ZSh0ZWFTZXJ2ZWQsICd0aGUgdGVhIGhhcyBiZWVuIHNlcnZlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc1RydWVcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzVHJ1ZSA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLmlzWyd0cnVlJ107XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNGYWxzZSh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBmYWxzZS5cbiAgICpcbiAgICogICAgIHZhciB0ZWFTZXJ2ZWQgPSBmYWxzZTtcbiAgICogICAgIGFzc2VydC5pc0ZhbHNlKHRlYVNlcnZlZCwgJ25vIHRlYSB5ZXQ/IGhtbS4uLicpO1xuICAgKlxuICAgKiBAbmFtZSBpc0ZhbHNlXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0ZhbHNlID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykuaXNbJ2ZhbHNlJ107XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOdWxsKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIG51bGwuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOdWxsKGVyciwgJ3RoZXJlIHdhcyBubyBlcnJvcicpO1xuICAgKlxuICAgKiBAbmFtZSBpc051bGxcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmVxdWFsKG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90TnVsbCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgbnVsbC5cbiAgICpcbiAgICogICAgIHZhciB0ZWEgPSAndGFzdHkgY2hhaSc7XG4gICAqICAgICBhc3NlcnQuaXNOb3ROdWxsKHRlYSwgJ2dyZWF0LCB0aW1lIGZvciB0ZWEhJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TnVsbFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3ROdWxsID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmVxdWFsKG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzVW5kZWZpbmVkKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYTtcbiAgICogICAgIGFzc2VydC5pc1VuZGVmaW5lZCh0ZWEsICdubyB0ZWEgZGVmaW5lZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc1VuZGVmaW5lZFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNVbmRlZmluZWQgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5lcXVhbCh1bmRlZmluZWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzRGVmaW5lZCh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBub3QgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqICAgICB2YXIgdGVhID0gJ2N1cCBvZiBjaGFpJztcbiAgICogICAgIGFzc2VydC5pc0RlZmluZWQodGVhLCAndGVhIGhhcyBiZWVuIGRlZmluZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNEZWZpbmVkXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc0RlZmluZWQgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5ub3QuZXF1YWwodW5kZWZpbmVkKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0Z1bmN0aW9uKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGEgZnVuY3Rpb24uXG4gICAqXG4gICAqICAgICBmdW5jdGlvbiBzZXJ2ZVRlYSgpIHsgcmV0dXJuICdjdXAgb2YgdGVhJzsgfTtcbiAgICogICAgIGFzc2VydC5pc0Z1bmN0aW9uKHNlcnZlVGVhLCAnZ3JlYXQsIHdlIGNhbiBoYXZlIHRlYSBub3cnKTtcbiAgICpcbiAgICogQG5hbWUgaXNGdW5jdGlvblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmJlLmEoJ2Z1bmN0aW9uJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNOb3RGdW5jdGlvbih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiAgICAgdmFyIHNlcnZlVGVhID0gWyAnaGVhdCcsICdwb3VyJywgJ3NpcCcgXTtcbiAgICogICAgIGFzc2VydC5pc05vdEZ1bmN0aW9uKHNlcnZlVGVhLCAnZ3JlYXQsIHdlIGhhdmUgbGlzdGVkIHRoZSBzdGVwcycpO1xuICAgKlxuICAgKiBAbmFtZSBpc05vdEZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdEZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmJlLmEoJ2Z1bmN0aW9uJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuaXNPYmplY3QodmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgYW4gb2JqZWN0IChhcyByZXZlYWxlZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2ApLlxuICAgKlxuICAgKiAgICAgdmFyIHNlbGVjdGlvbiA9IHsgbmFtZTogJ0NoYWknLCBzZXJ2ZTogJ3dpdGggc3BpY2VzJyB9O1xuICAgKiAgICAgYXNzZXJ0LmlzT2JqZWN0KHNlbGVjdGlvbiwgJ3RlYSBzZWxlY3Rpb24gaXMgYW4gb2JqZWN0Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzT2JqZWN0XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc09iamVjdCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmJlLmEoJ29iamVjdCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTm90T2JqZWN0KHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGFuIG9iamVjdC5cbiAgICpcbiAgICogICAgIHZhciBzZWxlY3Rpb24gPSAnY2hhaSdcbiAgICogICAgIGFzc2VydC5pc05vdE9iamVjdChzZWxlY3Rpb24sICd0ZWEgc2VsZWN0aW9uIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICogICAgIGFzc2VydC5pc05vdE9iamVjdChudWxsLCAnbnVsbCBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90T2JqZWN0XG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdE9iamVjdCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLm5vdC5iZS5hKCdvYmplY3QnKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0FycmF5KHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGFuIGFycmF5LlxuICAgKlxuICAgKiAgICAgdmFyIG1lbnUgPSBbICdncmVlbicsICdjaGFpJywgJ29vbG9uZycgXTtcbiAgICogICAgIGFzc2VydC5pc0FycmF5KG1lbnUsICd3aGF0IGtpbmQgb2YgdGVhIGRvIHdlIHdhbnQ/Jyk7XG4gICAqXG4gICAqIEBuYW1lIGlzQXJyYXlcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQXJyYXkgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5iZS5hbignYXJyYXknKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEFycmF5KHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIF9ub3RfIGFuIGFycmF5LlxuICAgKlxuICAgKiAgICAgdmFyIG1lbnUgPSAnZ3JlZW58Y2hhaXxvb2xvbmcnO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90QXJyYXkobWVudSwgJ3doYXQga2luZCBvZiB0ZWEgZG8gd2Ugd2FudD8nKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RBcnJheVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RBcnJheSA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLm5vdC5iZS5hbignYXJyYXknKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc1N0cmluZyh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhIHN0cmluZy5cbiAgICpcbiAgICogICAgIHZhciB0ZWFPcmRlciA9ICdjaGFpJztcbiAgICogICAgIGFzc2VydC5pc1N0cmluZyh0ZWFPcmRlciwgJ29yZGVyIHBsYWNlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc1N0cmluZ1xuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNTdHJpbmcgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5iZS5hKCdzdHJpbmcnKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdFN0cmluZyh2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhIHN0cmluZy5cbiAgICpcbiAgICogICAgIHZhciB0ZWFPcmRlciA9IDQ7XG4gICAqICAgICBhc3NlcnQuaXNOb3RTdHJpbmcodGVhT3JkZXIsICdvcmRlciBwbGFjZWQnKTtcbiAgICpcbiAgICogQG5hbWUgaXNOb3RTdHJpbmdcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzTm90U3RyaW5nID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmJlLmEoJ3N0cmluZycpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmlzTnVtYmVyKHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGlzIGEgbnVtYmVyLlxuICAgKlxuICAgKiAgICAgdmFyIGN1cHMgPSAyO1xuICAgKiAgICAgYXNzZXJ0LmlzTnVtYmVyKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTnVtYmVyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOdW1iZXIgPSBmdW5jdGlvbiAodmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5iZS5hKCdudW1iZXInKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdE51bWJlcih2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBfbm90XyBhIG51bWJlci5cbiAgICpcbiAgICogICAgIHZhciBjdXBzID0gJzIgY3VwcyBwbGVhc2UnO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90TnVtYmVyKGN1cHMsICdob3cgbWFueSBjdXBzJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90TnVtYmVyXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLm5vdC5iZS5hKCdudW1iZXInKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc0Jvb2xlYW4odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgYSBib29sZWFuLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYVJlYWR5ID0gdHJ1ZVxuICAgKiAgICAgICAsIHRlYVNlcnZlZCA9IGZhbHNlO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0LmlzQm9vbGVhbih0ZWFSZWFkeSwgJ2lzIHRoZSB0ZWEgcmVhZHknKTtcbiAgICogICAgIGFzc2VydC5pc0Jvb2xlYW4odGVhU2VydmVkLCAnaGFzIHRlYSBiZWVuIHNlcnZlZCcpO1xuICAgKlxuICAgKiBAbmFtZSBpc0Jvb2xlYW5cbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmlzQm9vbGVhbiA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmJlLmEoJ2Jvb2xlYW4nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5pc05vdEJvb2xlYW4odmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAgaXMgX25vdF8gYSBib29sZWFuLlxuICAgKlxuICAgKiAgICAgdmFyIHRlYVJlYWR5ID0gJ3llcCdcbiAgICogICAgICAgLCB0ZWFTZXJ2ZWQgPSAnbm9wZSc7XG4gICAqXG4gICAqICAgICBhc3NlcnQuaXNOb3RCb29sZWFuKHRlYVJlYWR5LCAnaXMgdGhlIHRlYSByZWFkeScpO1xuICAgKiAgICAgYXNzZXJ0LmlzTm90Qm9vbGVhbih0ZWFTZXJ2ZWQsICdoYXMgdGVhIGJlZW4gc2VydmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIGlzTm90Qm9vbGVhblxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmJlLmEoJ2Jvb2xlYW4nKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC50eXBlT2YodmFsdWUsIG5hbWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAncyB0eXBlIGlzIGBuYW1lYCwgYXMgZGV0ZXJtaW5lZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAqXG4gICAqICAgICBhc3NlcnQudHlwZU9mKHsgdGVhOiAnY2hhaScgfSwgJ29iamVjdCcsICd3ZSBoYXZlIGFuIG9iamVjdCcpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZihbJ2NoYWknLCAnamFzbWluZSddLCAnYXJyYXknLCAnd2UgaGF2ZSBhbiBhcnJheScpO1xuICAgKiAgICAgYXNzZXJ0LnR5cGVPZigndGVhJywgJ3N0cmluZycsICd3ZSBoYXZlIGEgc3RyaW5nJyk7XG4gICAqICAgICBhc3NlcnQudHlwZU9mKC90ZWEvLCAncmVnZXhwJywgJ3dlIGhhdmUgYSByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YobnVsbCwgJ251bGwnLCAnd2UgaGF2ZSBhIG51bGwnKTtcbiAgICogICAgIGFzc2VydC50eXBlT2YodW5kZWZpbmVkLCAndW5kZWZpbmVkJywgJ3dlIGhhdmUgYW4gdW5kZWZpbmVkJyk7XG4gICAqXG4gICAqIEBuYW1lIHR5cGVPZlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQudHlwZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uYmUuYSh0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RUeXBlT2YodmFsdWUsIG5hbWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGB2YWx1ZWAncyB0eXBlIGlzIF9ub3RfIGBuYW1lYCwgYXMgZGV0ZXJtaW5lZCBieVxuICAgKiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90VHlwZU9mKCd0ZWEnLCAnbnVtYmVyJywgJ3N0cmluZ3MgYXJlIG5vdCBudW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdFR5cGVPZlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZW9mIG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uICh2YWwsIHR5cGUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLm5vdC5iZS5hKHR5cGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmluc3RhbmNlT2Yob2JqZWN0LCBjb25zdHJ1Y3RvciwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBpcyBhbiBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgLlxuICAgKlxuICAgKiAgICAgdmFyIFRlYSA9IGZ1bmN0aW9uIChuYW1lKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cbiAgICogICAgICAgLCBjaGFpID0gbmV3IFRlYSgnY2hhaScpO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmluc3RhbmNlT2YoY2hhaSwgVGVhLCAnY2hhaSBpcyBhbiBpbnN0YW5jZSBvZiB0ZWEnKTtcbiAgICpcbiAgICogQG5hbWUgaW5zdGFuY2VPZlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5pbnN0YW5jZU9mID0gZnVuY3Rpb24gKHZhbCwgdHlwZSwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uYmUuaW5zdGFuY2VPZih0eXBlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RJbnN0YW5jZU9mKG9iamVjdCwgY29uc3RydWN0b3IsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyBgdmFsdWVgIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgLlxuICAgKlxuICAgKiAgICAgdmFyIFRlYSA9IGZ1bmN0aW9uIChuYW1lKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cbiAgICogICAgICAgLCBjaGFpID0gbmV3IFN0cmluZygnY2hhaScpO1xuICAgKlxuICAgKiAgICAgYXNzZXJ0Lm5vdEluc3RhbmNlT2YoY2hhaSwgVGVhLCAnY2hhaSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgdGVhJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdEluc3RhbmNlT2ZcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yfSBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90SW5zdGFuY2VPZiA9IGZ1bmN0aW9uICh2YWwsIHR5cGUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLm5vdC5iZS5pbnN0YW5jZU9mKHR5cGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmluY2x1ZGUoaGF5c3RhY2ssIG5lZWRsZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYGhheXN0YWNrYCBpbmNsdWRlcyBgbmVlZGxlYC4gV29ya3NcbiAgICogZm9yIHN0cmluZ3MgYW5kIGFycmF5cy5cbiAgICpcbiAgICogICAgIGFzc2VydC5pbmNsdWRlKCdmb29iYXInLCAnYmFyJywgJ2Zvb2JhciBjb250YWlucyBzdHJpbmcgXCJiYXJcIicpO1xuICAgKiAgICAgYXNzZXJ0LmluY2x1ZGUoWyAxLCAyLCAzIF0sIDMsICdhcnJheSBjb250YWlucyB2YWx1ZScpO1xuICAgKlxuICAgKiBAbmFtZSBpbmNsdWRlXG4gICAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBoYXlzdGFja1xuICAgKiBAcGFyYW0ge01peGVkfSBuZWVkbGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmluY2x1ZGUgPSBmdW5jdGlvbiAoZXhwLCBpbmMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5pbmNsdWRlKS5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90SW5jbHVkZShoYXlzdGFjaywgbmVlZGxlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgaGF5c3RhY2tgIGRvZXMgbm90IGluY2x1ZGUgYG5lZWRsZWAuIFdvcmtzXG4gICAqIGZvciBzdHJpbmdzIGFuZCBhcnJheXMuXG4gICAqaVxuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoJ2Zvb2JhcicsICdiYXonLCAnc3RyaW5nIG5vdCBpbmNsdWRlIHN1YnN0cmluZycpO1xuICAgKiAgICAgYXNzZXJ0Lm5vdEluY2x1ZGUoWyAxLCAyLCAzIF0sIDQsICdhcnJheSBub3QgaW5jbHVkZSBjb250YWluIHZhbHVlJyk7XG4gICAqXG4gICAqIEBuYW1lIG5vdEluY2x1ZGVcbiAgICogQHBhcmFtIHtBcnJheXxTdHJpbmd9IGhheXN0YWNrXG4gICAqIEBwYXJhbSB7TWl4ZWR9IG5lZWRsZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQubm90SW5jbHVkZSA9IGZ1bmN0aW9uIChleHAsIGluYywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGUpLm5vdC5pbmNsdWRlKGluYyk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubWF0Y2godmFsdWUsIHJlZ2V4cCwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHZhbHVlYCBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYHJlZ2V4cGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubWF0Y2goJ2Zvb2JhcicsIC9eZm9vLywgJ3JlZ2V4cCBtYXRjaGVzJyk7XG4gICAqXG4gICAqIEBuYW1lIG1hdGNoXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm1hdGNoID0gZnVuY3Rpb24gKGV4cCwgcmUsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZXhwLCBtc2cpLnRvLm1hdGNoKHJlKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5ub3RNYXRjaCh2YWx1ZSwgcmVnZXhwLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgdmFsdWVgIGRvZXMgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYHJlZ2V4cGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90TWF0Y2goJ2Zvb2JhcicsIC9eZm9vLywgJ3JlZ2V4cCBkb2VzIG5vdCBtYXRjaCcpO1xuICAgKlxuICAgKiBAbmFtZSBub3RNYXRjaFxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3RNYXRjaCA9IGZ1bmN0aW9uIChleHAsIHJlLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnKS50by5ub3QubWF0Y2gocmUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLnByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAuXG4gICAqXG4gICAqICAgICBhc3NlcnQucHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhJyk7XG4gICAqXG4gICAqIEBuYW1lIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5wcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIHByb3AsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2cpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubm90UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgZG9lcyBfbm90XyBoYXZlIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YC5cbiAgICpcbiAgICogICAgIGFzc2VydC5ub3RQcm9wZXJ0eSh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICdjb2ZmZWUnKTtcbiAgICpcbiAgICogQG5hbWUgbm90UHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lm5vdFByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZykudG8ubm90LmhhdmUucHJvcGVydHkocHJvcCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZGVlcFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAsIHdoaWNoIGNhbiBiZSBhXG4gICAqIHN0cmluZyB1c2luZyBkb3QtIGFuZCBicmFja2V0LW5vdGF0aW9uIGZvciBkZWVwIHJlZmVyZW5jZS5cbiAgICpcbiAgICogICAgIGFzc2VydC5kZWVwUHJvcGVydHkoeyB0ZWE6IHsgZ3JlZW46ICdtYXRjaGEnIH19LCAndGVhLmdyZWVuJyk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBQcm9wZXJ0eVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcFByb3BlcnR5ID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIG1zZykudG8uaGF2ZS5kZWVwLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm5vdERlZXBQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBkb2VzIF9ub3RfIGhhdmUgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgLCB3aGljaFxuICAgKiBjYW4gYmUgYSBzdHJpbmcgdXNpbmcgZG90LSBhbmQgYnJhY2tldC1ub3RhdGlvbiBmb3IgZGVlcCByZWZlcmVuY2UuXG4gICAqXG4gICAqICAgICBhc3NlcnQubm90RGVlcFByb3BlcnR5KHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5vb2xvbmcnKTtcbiAgICpcbiAgICogQG5hbWUgbm90RGVlcFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5ub3REZWVwUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnKS50by5ub3QuaGF2ZS5kZWVwLnByb3BlcnR5KHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLnByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIHdpdGggdmFsdWUgZ2l2ZW5cbiAgICogYnkgYHZhbHVlYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5wcm9wZXJ0eVZhbCh7IHRlYTogJ2lzIGdvb2QnIH0sICd0ZWEnLCAnaXMgZ29vZCcpO1xuICAgKlxuICAgKiBAbmFtZSBwcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQucHJvcGVydHlWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2cpLnRvLmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5wcm9wZXJ0eU5vdFZhbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYG9iamVjdGAgaGFzIGEgcHJvcGVydHkgbmFtZWQgYnkgYHByb3BlcnR5YCwgYnV0IHdpdGggYSB2YWx1ZVxuICAgKiBkaWZmZXJlbnQgZnJvbSB0aGF0IGdpdmVuIGJ5IGB2YWx1ZWAuXG4gICAqXG4gICAqICAgICBhc3NlcnQucHJvcGVydHlOb3RWYWwoeyB0ZWE6ICdpcyBnb29kJyB9LCAndGVhJywgJ2lzIGJhZCcpO1xuICAgKlxuICAgKiBAbmFtZSBwcm9wZXJ0eU5vdFZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQucHJvcGVydHlOb3RWYWwgPSBmdW5jdGlvbiAob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBtc2cpLnRvLm5vdC5oYXZlLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuZGVlcFByb3BlcnR5VmFsKG9iamVjdCwgcHJvcGVydHksIHZhbHVlLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCBgb2JqZWN0YCBoYXMgYSBwcm9wZXJ0eSBuYW1lZCBieSBgcHJvcGVydHlgIHdpdGggdmFsdWUgZ2l2ZW5cbiAgICogYnkgYHZhbHVlYC4gYHByb3BlcnR5YCBjYW4gdXNlIGRvdC0gYW5kIGJyYWNrZXQtbm90YXRpb24gZm9yIGRlZXBcbiAgICogcmVmZXJlbmNlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCh7IHRlYTogeyBncmVlbjogJ21hdGNoYScgfX0sICd0ZWEuZ3JlZW4nLCAnbWF0Y2hhJyk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBQcm9wZXJ0eVZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcFByb3BlcnR5VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnKS50by5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5kZWVwUHJvcGVydHlOb3RWYWwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIHByb3BlcnR5IG5hbWVkIGJ5IGBwcm9wZXJ0eWAsIGJ1dCB3aXRoIGEgdmFsdWVcbiAgICogZGlmZmVyZW50IGZyb20gdGhhdCBnaXZlbiBieSBgdmFsdWVgLiBgcHJvcGVydHlgIGNhbiB1c2UgZG90LSBhbmRcbiAgICogYnJhY2tldC1ub3RhdGlvbiBmb3IgZGVlcCByZWZlcmVuY2UuXG4gICAqXG4gICAqICAgICBhc3NlcnQuZGVlcFByb3BlcnR5Tm90VmFsKHsgdGVhOiB7IGdyZWVuOiAnbWF0Y2hhJyB9fSwgJ3RlYS5ncmVlbicsICdrb25hY2hhJyk7XG4gICAqXG4gICAqIEBuYW1lIGRlZXBQcm9wZXJ0eU5vdFZhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuZGVlcFByb3BlcnR5Tm90VmFsID0gZnVuY3Rpb24gKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnKS50by5ub3QuaGF2ZS5kZWVwLnByb3BlcnR5KHByb3AsIHZhbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAubGVuZ3RoT2Yob2JqZWN0LCBsZW5ndGgsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBvYmplY3RgIGhhcyBhIGBsZW5ndGhgIHByb3BlcnR5IHdpdGggdGhlIGV4cGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0Lmxlbmd0aE9mKFsxLDIsM10sIDMsICdhcnJheSBoYXMgbGVuZ3RoIG9mIDMnKTtcbiAgICogICAgIGFzc2VydC5sZW5ndGhPZignZm9vYmFyJywgNSwgJ3N0cmluZyBoYXMgbGVuZ3RoIG9mIDYnKTtcbiAgICpcbiAgICogQG5hbWUgbGVuZ3RoT2ZcbiAgICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0Lmxlbmd0aE9mID0gZnVuY3Rpb24gKGV4cCwgbGVuLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnKS50by5oYXZlLmxlbmd0aChsZW4pO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLnRocm93cyhmdW5jdGlvbiwgW2NvbnN0cnVjdG9yL3N0cmluZy9yZWdleHBdLCBbc3RyaW5nL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBmdW5jdGlvbmAgd2lsbCB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuIGluc3RhbmNlIG9mXG4gICAqIGBjb25zdHJ1Y3RvcmAsIG9yIGFsdGVybmF0ZWx5IHRoYXQgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciB3aXRoIG1lc3NhZ2VcbiAgICogbWF0Y2hpbmcgYHJlZ2V4cGAuXG4gICAqXG4gICAqICAgICBhc3NlcnQudGhyb3coZm4sICdmdW5jdGlvbiB0aHJvd3MgYSByZWZlcmVuY2UgZXJyb3InKTtcbiAgICogICAgIGFzc2VydC50aHJvdyhmbiwgL2Z1bmN0aW9uIHRocm93cyBhIHJlZmVyZW5jZSBlcnJvci8pO1xuICAgKiAgICAgYXNzZXJ0LnRocm93KGZuLCBSZWZlcmVuY2VFcnJvcik7XG4gICAqICAgICBhc3NlcnQudGhyb3coZm4sIFJlZmVyZW5jZUVycm9yLCAnZnVuY3Rpb24gdGhyb3dzIGEgcmVmZXJlbmNlIGVycm9yJyk7XG4gICAqICAgICBhc3NlcnQudGhyb3coZm4sIFJlZmVyZW5jZUVycm9yLCAvZnVuY3Rpb24gdGhyb3dzIGEgcmVmZXJlbmNlIGVycm9yLyk7XG4gICAqXG4gICAqIEBuYW1lIHRocm93c1xuICAgKiBAYWxpYXMgdGhyb3dcbiAgICogQGFsaWFzIFRocm93XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7RXJyb3JDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtSZWdFeHB9IHJlZ2V4cFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0Vycm9yX3R5cGVzXG4gICAqIEBhcGkgcHVibGljXG4gICAqL1xuXG4gIGFzc2VydC5UaHJvdyA9IGZ1bmN0aW9uIChmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgZXJydCB8fCBlcnJ0IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBlcnJzID0gZXJydDtcbiAgICAgIGVycnQgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBhc3NlcnRFcnIgPSBuZXcgQXNzZXJ0aW9uKGZuLCBtc2cpLnRvLlRocm93KGVycnQsIGVycnMpO1xuICAgIHJldHVybiBmbGFnKGFzc2VydEVyciwgJ29iamVjdCcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLmRvZXNOb3RUaHJvdyhmdW5jdGlvbiwgW2NvbnN0cnVjdG9yL3JlZ2V4cF0sIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBmdW5jdGlvbmAgd2lsbCBfbm90XyB0aHJvdyBhbiBlcnJvciB0aGF0IGlzIGFuIGluc3RhbmNlIG9mXG4gICAqIGBjb25zdHJ1Y3RvcmAsIG9yIGFsdGVybmF0ZWx5IHRoYXQgaXQgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3Igd2l0aCBtZXNzYWdlXG4gICAqIG1hdGNoaW5nIGByZWdleHBgLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmbiwgRXJyb3IsICdmdW5jdGlvbiBkb2VzIG5vdCB0aHJvdycpO1xuICAgKlxuICAgKiBAbmFtZSBkb2VzTm90VGhyb3dcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY3Rpb25cbiAgICogQHBhcmFtIHtFcnJvckNvbnN0cnVjdG9yfSBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjRXJyb3JfdHlwZXNcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uIChmbiwgdHlwZSwgbXNnKSB7XG4gICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdHlwZSkge1xuICAgICAgbXNnID0gdHlwZTtcbiAgICAgIHR5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8ubm90LlRocm93KHR5cGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiAjIyMgLm9wZXJhdG9yKHZhbDEsIG9wZXJhdG9yLCB2YWwyLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIENvbXBhcmVzIHR3byB2YWx1ZXMgdXNpbmcgYG9wZXJhdG9yYC5cbiAgICpcbiAgICogICAgIGFzc2VydC5vcGVyYXRvcigxLCAnPCcsIDIsICdldmVyeXRoaW5nIGlzIG9rJyk7XG4gICAqICAgICBhc3NlcnQub3BlcmF0b3IoMSwgJz4nLCAyLCAndGhpcyB3aWxsIGZhaWwnKTtcbiAgICpcbiAgICogQG5hbWUgb3BlcmF0b3JcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsMVxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3JcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsMlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQub3BlcmF0b3IgPSBmdW5jdGlvbiAodmFsLCBvcGVyYXRvciwgdmFsMiwgbXNnKSB7XG4gICAgaWYgKCF+Wyc9PScsICc9PT0nLCAnPicsICc+PScsICc8JywgJzw9JywgJyE9JywgJyE9PSddLmluZGV4T2Yob3BlcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3BlcmF0b3IgXCInICsgb3BlcmF0b3IgKyAnXCInKTtcbiAgICB9XG4gICAgdmFyIHRlc3QgPSBuZXcgQXNzZXJ0aW9uKGV2YWwodmFsICsgb3BlcmF0b3IgKyB2YWwyKSwgbXNnKTtcbiAgICB0ZXN0LmFzc2VydChcbiAgICAgICAgdHJ1ZSA9PT0gZmxhZyh0ZXN0LCAnb2JqZWN0JylcbiAgICAgICwgJ2V4cGVjdGVkICcgKyB1dGlsLmluc3BlY3QodmFsKSArICcgdG8gYmUgJyArIG9wZXJhdG9yICsgJyAnICsgdXRpbC5pbnNwZWN0KHZhbDIpXG4gICAgICAsICdleHBlY3RlZCAnICsgdXRpbC5pbnNwZWN0KHZhbCkgKyAnIHRvIG5vdCBiZSAnICsgb3BlcmF0b3IgKyAnICcgKyB1dGlsLmluc3BlY3QodmFsMikgKTtcbiAgfTtcblxuICAvKipcbiAgICogIyMjIC5jbG9zZVRvKGFjdHVhbCwgZXhwZWN0ZWQsIGRlbHRhLCBbbWVzc2FnZV0pXG4gICAqXG4gICAqIEFzc2VydHMgdGhhdCB0aGUgdGFyZ2V0IGlzIGVxdWFsIGBleHBlY3RlZGAsIHRvIHdpdGhpbiBhICsvLSBgZGVsdGFgIHJhbmdlLlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LmNsb3NlVG8oMS41LCAxLCAwLjUsICdudW1iZXJzIGFyZSBjbG9zZScpO1xuICAgKlxuICAgKiBAbmFtZSBjbG9zZVRvXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBhY3R1YWxcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGV4cGVjdGVkXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuY2xvc2VUbyA9IGZ1bmN0aW9uIChhY3QsIGV4cCwgZGVsdGEsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0LCBtc2cpLnRvLmJlLmNsb3NlVG8oZXhwLCBkZWx0YSk7XG4gIH07XG5cbiAgLyoqXG4gICAqICMjIyAuc2FtZU1lbWJlcnMoc2V0MSwgc2V0MiwgW21lc3NhZ2VdKVxuICAgKlxuICAgKiBBc3NlcnRzIHRoYXQgYHNldDFgIGFuZCBgc2V0MmAgaGF2ZSB0aGUgc2FtZSBtZW1iZXJzLlxuICAgKiBPcmRlciBpcyBub3QgdGFrZW4gaW50byBhY2NvdW50LlxuICAgKlxuICAgKiAgICAgYXNzZXJ0LnNhbWVNZW1iZXJzKFsgMSwgMiwgMyBdLCBbIDIsIDEsIDMgXSwgJ3NhbWUgbWVtYmVycycpO1xuICAgKlxuICAgKiBAbmFtZSBzYW1lTWVtYmVyc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzdXBlcnNldFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJzZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQGFwaSBwdWJsaWNcbiAgICovXG5cbiAgYXNzZXJ0LnNhbWVNZW1iZXJzID0gZnVuY3Rpb24gKHNldDEsIHNldDIsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnKS50by5oYXZlLnNhbWUubWVtYmVycyhzZXQyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMgLmluY2x1ZGVNZW1iZXJzKHN1cGVyc2V0LCBzdWJzZXQsIFttZXNzYWdlXSlcbiAgICpcbiAgICogQXNzZXJ0cyB0aGF0IGBzdWJzZXRgIGlzIGluY2x1ZGVkIGluIGBzdXBlcnNldGAuXG4gICAqIE9yZGVyIGlzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuXG4gICAqXG4gICAqICAgICBhc3NlcnQuaW5jbHVkZU1lbWJlcnMoWyAxLCAyLCAzIF0sIFsgMiwgMSBdLCAnaW5jbHVkZSBtZW1iZXJzJyk7XG4gICAqXG4gICAqIEBuYW1lIGluY2x1ZGVNZW1iZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1cGVyc2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN1YnNldFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAYXBpIHB1YmxpY1xuICAgKi9cblxuICBhc3NlcnQuaW5jbHVkZU1lbWJlcnMgPSBmdW5jdGlvbiAoc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnKS50by5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbiAgfVxuXG4gIC8qIVxuICAgKiBVbmRvY3VtZW50ZWQgLyB1bnRlc3RlZFxuICAgKi9cblxuICBhc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLm5vdC5iZS5vaztcbiAgfTtcblxuICAvKiFcbiAgICogQWxpYXNlcy5cbiAgICovXG5cbiAgKGZ1bmN0aW9uIGFsaWFzKG5hbWUsIGFzKXtcbiAgICBhc3NlcnRbYXNdID0gYXNzZXJ0W25hbWVdO1xuICAgIHJldHVybiBhbGlhcztcbiAgfSlcbiAgKCdUaHJvdycsICd0aHJvdycpXG4gICgnVGhyb3cnLCAndGhyb3dzJyk7XG59O1xuIiwiLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY2hhaSwgdXRpbCkge1xuICBjaGFpLmV4cGVjdCA9IGZ1bmN0aW9uICh2YWwsIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbmV3IGNoYWkuQXNzZXJ0aW9uKHZhbCwgbWVzc2FnZSk7XG4gIH07XG59O1xuXG4iLCIvKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGFpLCB1dGlsKSB7XG4gIHZhciBBc3NlcnRpb24gPSBjaGFpLkFzc2VydGlvbjtcblxuICBmdW5jdGlvbiBsb2FkU2hvdWxkICgpIHtcbiAgICAvLyBleHBsaWNpdGx5IGRlZmluZSB0aGlzIG1ldGhvZCBhcyBmdW5jdGlvbiBhcyB0byBoYXZlIGl0J3MgbmFtZSB0byBpbmNsdWRlIGFzIGBzc2ZpYFxuICAgIGZ1bmN0aW9uIHNob3VsZEdldHRlcigpIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3RyaW5nIHx8IHRoaXMgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcyBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcyA9PSB0cnVlLCBudWxsLCBzaG91bGRHZXR0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcywgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2V0dGVyKHZhbHVlKSB7XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYWlqcy9jaGFpL2lzc3Vlcy84NjogdGhpcyBtYWtlc1xuICAgICAgLy8gYHdoYXRldmVyLnNob3VsZCA9IHNvbWVWYWx1ZWAgYWN0dWFsbHkgc2V0IGBzb21lVmFsdWVgLCB3aGljaCBpc1xuICAgICAgLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGBnbG9iYWwuc2hvdWxkID0gcmVxdWlyZSgnY2hhaScpLnNob3VsZCgpYC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byB1c2UgW1tEZWZpbmVQcm9wZXJ0eV1dIGluc3RlYWQgb2YgW1tQdXRdXVxuICAgICAgLy8gc2luY2Ugb3RoZXJ3aXNlIHdlIHdvdWxkIHRyaWdnZXIgdGhpcyB2ZXJ5IHNldHRlciFcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2hvdWxkJywge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBtb2RpZnkgT2JqZWN0LnByb3RvdHlwZSB0byBoYXZlIGBzaG91bGRgXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsICdzaG91bGQnLCB7XG4gICAgICBzZXQ6IHNob3VsZFNldHRlclxuICAgICAgLCBnZXQ6IHNob3VsZEdldHRlclxuICAgICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcblxuICAgIHZhciBzaG91bGQgPSB7fTtcblxuICAgIHNob3VsZC5lcXVhbCA9IGZ1bmN0aW9uICh2YWwxLCB2YWwyLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24odmFsMSwgbXNnKS50by5lcXVhbCh2YWwyKTtcbiAgICB9O1xuXG4gICAgc2hvdWxkLlRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJ0LCBlcnJzLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8uVGhyb3coZXJydCwgZXJycyk7XG4gICAgfTtcblxuICAgIHNob3VsZC5leGlzdCA9IGZ1bmN0aW9uICh2YWwsIG1zZykge1xuICAgICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uZXhpc3Q7XG4gICAgfVxuXG4gICAgLy8gbmVnYXRpb25cbiAgICBzaG91bGQubm90ID0ge31cblxuICAgIHNob3VsZC5ub3QuZXF1YWwgPSBmdW5jdGlvbiAodmFsMSwgdmFsMiwgbXNnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHZhbDEsIG1zZykudG8ubm90LmVxdWFsKHZhbDIpO1xuICAgIH07XG5cbiAgICBzaG91bGQubm90LlRocm93ID0gZnVuY3Rpb24gKGZuLCBlcnJ0LCBlcnJzLCBtc2cpIHtcbiAgICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8ubm90LlRocm93KGVycnQsIGVycnMpO1xuICAgIH07XG5cbiAgICBzaG91bGQubm90LmV4aXN0ID0gZnVuY3Rpb24gKHZhbCwgbXNnKSB7XG4gICAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5ub3QuZXhpc3Q7XG4gICAgfVxuXG4gICAgc2hvdWxkWyd0aHJvdyddID0gc2hvdWxkWydUaHJvdyddO1xuICAgIHNob3VsZC5ub3RbJ3Rocm93J10gPSBzaG91bGQubm90WydUaHJvdyddO1xuXG4gICAgcmV0dXJuIHNob3VsZDtcbiAgfTtcblxuICBjaGFpLnNob3VsZCA9IGxvYWRTaG91bGQ7XG4gIGNoYWkuU2hvdWxkID0gbG9hZFNob3VsZDtcbn07XG4iLCIvKiFcbiAqIENoYWkgLSBhZGRDaGFpbmluZ01ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzXG4gKi9cblxudmFyIHRyYW5zZmVyRmxhZ3MgPSByZXF1aXJlKCcuL3RyYW5zZmVyRmxhZ3MnKTtcbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG52YXIgY29uZmlnID0gcmVxdWlyZSgnLi4vY29uZmlnJyk7XG5cbi8qIVxuICogTW9kdWxlIHZhcmlhYmxlc1xuICovXG5cbi8vIENoZWNrIHdoZXRoZXIgYF9fcHJvdG9fX2AgaXMgc3VwcG9ydGVkXG52YXIgaGFzUHJvdG9TdXBwb3J0ID0gJ19fcHJvdG9fXycgaW4gT2JqZWN0O1xuXG4vLyBXaXRob3V0IGBfX3Byb3RvX19gIHN1cHBvcnQsIHRoaXMgbW9kdWxlIHdpbGwgbmVlZCB0byBhZGQgcHJvcGVydGllcyB0byBhIGZ1bmN0aW9uLlxuLy8gSG93ZXZlciwgc29tZSBGdW5jdGlvbi5wcm90b3R5cGUgbWV0aG9kcyBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4sXG4vLyBhbmQgdGhlcmUgc2VlbXMgbm8gZWFzeSBjcm9zcy1wbGF0Zm9ybSB3YXkgdG8gZGV0ZWN0IHRoZW0gKEBzZWUgY2hhaWpzL2NoYWkvaXNzdWVzLzY5KS5cbnZhciBleGNsdWRlTmFtZXMgPSAvXig/Omxlbmd0aHxuYW1lfGFyZ3VtZW50c3xjYWxsZXIpJC87XG5cbi8vIENhY2hlIGBGdW5jdGlvbmAgcHJvcGVydGllc1xudmFyIGNhbGwgID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsXG4gICAgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8qKlxuICogIyMjIGFkZENoYWluYWJsZU1ldGhvZCAoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpXG4gKlxuICogQWRkcyBhIG1ldGhvZCB0byBhbiBvYmplY3QsIHN1Y2ggdGhhdCB0aGUgbWV0aG9kIGNhbiBhbHNvIGJlIGNoYWluZWQuXG4gKlxuICogICAgIHV0aWxzLmFkZENoYWluYWJsZU1ldGhvZChjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdmb28nLCBmdW5jdGlvbiAoc3RyKSB7XG4gKiAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqKS50by5iZS5lcXVhbChzdHIpO1xuICogICAgIH0pO1xuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCdmb28nLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG4gKlxuICogVGhlIHJlc3VsdCBjYW4gdGhlbiBiZSB1c2VkIGFzIGJvdGggYSBtZXRob2QgYXNzZXJ0aW9uLCBleGVjdXRpbmcgYm90aCBgbWV0aG9kYCBhbmRcbiAqIGBjaGFpbmluZ0JlaGF2aW9yYCwgb3IgYXMgYSBsYW5ndWFnZSBjaGFpbiwgd2hpY2ggb25seSBleGVjdXRlcyBgY2hhaW5pbmdCZWhhdmlvcmAuXG4gKlxuICogICAgIGV4cGVjdChmb29TdHIpLnRvLmJlLmZvbygnYmFyJyk7XG4gKiAgICAgZXhwZWN0KGZvb1N0cikudG8uYmUuZm9vLmVxdWFsKCdmb28nKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB0byB3aGljaCB0aGUgbWV0aG9kIGlzIGFkZGVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBtZXRob2QgdG8gYWRkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgYG5hbWVgLCB3aGVuIGNhbGxlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hhaW5pbmdCZWhhdmlvciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWRcbiAqIEBuYW1lIGFkZENoYWluYWJsZU1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcikge1xuICBpZiAodHlwZW9mIGNoYWluaW5nQmVoYXZpb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBjaGFpbmluZ0JlaGF2aW9yID0gZnVuY3Rpb24gKCkgeyB9O1xuICB9XG5cbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0ge1xuICAgICAgbWV0aG9kOiBtZXRob2RcbiAgICAsIGNoYWluaW5nQmVoYXZpb3I6IGNoYWluaW5nQmVoYXZpb3JcbiAgfTtcblxuICAvLyBzYXZlIHRoZSBtZXRob2RzIHNvIHdlIGNhbiBvdmVyd3JpdGUgdGhlbSBsYXRlciwgaWYgd2UgbmVlZCB0by5cbiAgaWYgKCFjdHguX19tZXRob2RzKSB7XG4gICAgY3R4Ll9fbWV0aG9kcyA9IHt9O1xuICB9XG4gIGN0eC5fX21ldGhvZHNbbmFtZV0gPSBjaGFpbmFibGVCZWhhdmlvcjtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBuYW1lLFxuICAgIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3IuY2FsbCh0aGlzKTtcblxuICAgICAgICB2YXIgYXNzZXJ0ID0gZnVuY3Rpb24gYXNzZXJ0KCkge1xuICAgICAgICAgIHZhciBvbGRfc3NmaSA9IGZsYWcodGhpcywgJ3NzZmknKTtcbiAgICAgICAgICBpZiAob2xkX3NzZmkgJiYgY29uZmlnLmluY2x1ZGVTdGFjayA9PT0gZmFsc2UpXG4gICAgICAgICAgICBmbGFnKHRoaXMsICdzc2ZpJywgYXNzZXJ0KTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBVc2UgYF9fcHJvdG9fX2AgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmIChoYXNQcm90b1N1cHBvcnQpIHtcbiAgICAgICAgICAvLyBJbmhlcml0IGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIG9iamVjdCBieSByZXBsYWNpbmcgdGhlIGBGdW5jdGlvbmAgcHJvdG90eXBlXG4gICAgICAgICAgdmFyIHByb3RvdHlwZSA9IGFzc2VydC5fX3Byb3RvX18gPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGBjYWxsYCBhbmQgYGFwcGx5YCBtZXRob2RzIGZyb20gYEZ1bmN0aW9uYFxuICAgICAgICAgIHByb3RvdHlwZS5jYWxsID0gY2FsbDtcbiAgICAgICAgICBwcm90b3R5cGUuYXBwbHkgPSBhcHBseTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UsIHJlZGVmaW5lIGFsbCBwcm9wZXJ0aWVzIChzbG93ISlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGFzc2VydGVyTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdHgpO1xuICAgICAgICAgIGFzc2VydGVyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoYXNzZXJ0ZXJOYW1lKSB7XG4gICAgICAgICAgICBpZiAoIWV4Y2x1ZGVOYW1lcy50ZXN0KGFzc2VydGVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgdmFyIHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIGFzc2VydGVyTmFtZSk7XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3NlcnQsIGFzc2VydGVyTmFtZSwgcGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBhc3NlcnQpO1xuICAgICAgICByZXR1cm4gYXNzZXJ0O1xuICAgICAgfVxuICAgICwgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufTtcbiIsIi8qIVxuICogQ2hhaSAtIGFkZE1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpO1xuXG4vKipcbiAqICMjIyAuYWRkTWV0aG9kIChjdHgsIG5hbWUsIG1ldGhvZClcbiAqXG4gKiBBZGRzIGEgbWV0aG9kIHRvIHRoZSBwcm90b3R5cGUgb2YgYW4gb2JqZWN0LlxuICpcbiAqICAgICB1dGlscy5hZGRNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnZm9vJywgZnVuY3Rpb24gKHN0cikge1xuICogICAgICAgdmFyIG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpO1xuICogICAgICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iaikudG8uYmUuZXF1YWwoc3RyKTtcbiAqICAgICB9KTtcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZm9vJywgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KGZvb1N0cikudG8uYmUuZm9vKCdiYXInKTtcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY3R4IG9iamVjdCB0byB3aGljaCB0aGUgbWV0aG9kIGlzIGFkZGVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBtZXRob2QgdG8gYWRkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgbmFtZVxuICogQG5hbWUgYWRkTWV0aG9kXG4gKiBAYXBpIHB1YmxpY1xuICovXG52YXIgZmxhZyA9IHJlcXVpcmUoJy4vZmxhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICBjdHhbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9sZF9zc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpO1xuICAgIGlmIChvbGRfc3NmaSAmJiBjb25maWcuaW5jbHVkZVN0YWNrID09PSBmYWxzZSlcbiAgICAgIGZsYWcodGhpcywgJ3NzZmknLCBjdHhbbmFtZV0pO1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyB0aGlzIDogcmVzdWx0O1xuICB9O1xufTtcbiIsIi8qIVxuICogQ2hhaSAtIGFkZFByb3BlcnR5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyBhZGRQcm9wZXJ0eSAoY3R4LCBuYW1lLCBnZXR0ZXIpXG4gKlxuICogQWRkcyBhIHByb3BlcnR5IHRvIHRoZSBwcm90b3R5cGUgb2YgYW4gb2JqZWN0LlxuICpcbiAqICAgICB1dGlscy5hZGRQcm9wZXJ0eShjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdmb28nLCBmdW5jdGlvbiAoKSB7XG4gKiAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqKS50by5iZS5pbnN0YW5jZW9mKEZvbyk7XG4gKiAgICAgfSk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZm9vJywgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5iZS5mb287XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGN0eCBvYmplY3QgdG8gd2hpY2ggdGhlIHByb3BlcnR5IGlzIGFkZGVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBwcm9wZXJ0eSB0byBhZGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlciBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAbmFtZSBhZGRQcm9wZXJ0eVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjdHgsIG5hbWUsIGdldHRlcikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBuYW1lLFxuICAgIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBnZXR0ZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIH1cbiAgICAsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn07XG4iLCIvKiFcbiAqIENoYWkgLSBmbGFnIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyBmbGFnKG9iamVjdCAsa2V5LCBbdmFsdWVdKVxuICpcbiAqIEdldCBvciBzZXQgYSBmbGFnIHZhbHVlIG9uIGFuIG9iamVjdC4gSWYgYVxuICogdmFsdWUgaXMgcHJvdmlkZWQgaXQgd2lsbCBiZSBzZXQsIGVsc2UgaXQgd2lsbFxuICogcmV0dXJuIHRoZSBjdXJyZW50bHkgc2V0IHZhbHVlIG9yIGB1bmRlZmluZWRgIGlmXG4gKiB0aGUgdmFsdWUgaXMgbm90IHNldC5cbiAqXG4gKiAgICAgdXRpbHMuZmxhZyh0aGlzLCAnZm9vJywgJ2JhcicpOyAvLyBzZXR0ZXJcbiAqICAgICB1dGlscy5mbGFnKHRoaXMsICdmb28nKTsgLy8gZ2V0dGVyLCByZXR1cm5zIGBiYXJgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAoY29uc3RydWN0ZWQgQXNzZXJ0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAob3B0aW9uYWwpXG4gKiBAbmFtZSBmbGFnXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHtcbiAgdmFyIGZsYWdzID0gb2JqLl9fZmxhZ3MgfHwgKG9iai5fX2ZsYWdzID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZmxhZ3Nba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmbGFnc1trZXldO1xuICB9XG59O1xuIiwiLyohXG4gKiBDaGFpIC0gZ2V0QWN0dWFsIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMgZ2V0QWN0dWFsKG9iamVjdCwgW2FjdHVhbF0pXG4gKlxuICogUmV0dXJucyB0aGUgYGFjdHVhbGAgdmFsdWUgZm9yIGFuIEFzc2VydGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgKGNvbnN0cnVjdGVkIEFzc2VydGlvbilcbiAqIEBwYXJhbSB7QXJndW1lbnRzfSBjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0IGFyZ3VtZW50c1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaiwgYXJncykge1xuICByZXR1cm4gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IG9iai5fb2JqO1xufTtcbiIsIi8qIVxuICogQ2hhaSAtIGdldEVudW1lcmFibGVQcm9wZXJ0aWVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0RW51bWVyYWJsZVByb3BlcnRpZXMob2JqZWN0KVxuICpcbiAqIFRoaXMgYWxsb3dzIHRoZSByZXRyaWV2YWwgb2YgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QsXG4gKiBpbmhlcml0ZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBuYW1lIGdldEVudW1lcmFibGVQcm9wZXJ0aWVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0RW51bWVyYWJsZVByb3BlcnRpZXMob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcbiAgICByZXN1bHQucHVzaChuYW1lKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8qIVxuICogQ2hhaSAtIG1lc3NhZ2UgY29tcG9zaXRpb24gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogTW9kdWxlIGRlcGVuZGFuY2llc1xuICovXG5cbnZhciBmbGFnID0gcmVxdWlyZSgnLi9mbGFnJylcbiAgLCBnZXRBY3R1YWwgPSByZXF1aXJlKCcuL2dldEFjdHVhbCcpXG4gICwgaW5zcGVjdCA9IHJlcXVpcmUoJy4vaW5zcGVjdCcpXG4gICwgb2JqRGlzcGxheSA9IHJlcXVpcmUoJy4vb2JqRGlzcGxheScpO1xuXG4vKipcbiAqICMjIyAuZ2V0TWVzc2FnZShvYmplY3QsIG1lc3NhZ2UsIG5lZ2F0ZU1lc3NhZ2UpXG4gKlxuICogQ29uc3RydWN0IHRoZSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIGZsYWdzXG4gKiBhbmQgdGVtcGxhdGUgdGFncy4gVGVtcGxhdGUgdGFncyB3aWxsIHJldHVyblxuICogYSBzdHJpbmdpZmllZCBpbnNwZWN0aW9uIG9mIHRoZSBvYmplY3QgcmVmZXJlbmNlZC5cbiAqXG4gKiBNZXNzYWdlIHRlbXBsYXRlIHRhZ3M6XG4gKiAtIGAje3RoaXN9YCBjdXJyZW50IGFzc2VydGVkIG9iamVjdFxuICogLSBgI3thY3R9YCBhY3R1YWwgdmFsdWVcbiAqIC0gYCN7ZXhwfWAgZXhwZWN0ZWQgdmFsdWVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IChjb25zdHJ1Y3RlZCBBc3NlcnRpb24pXG4gKiBAcGFyYW0ge0FyZ3VtZW50c30gY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCBhcmd1bWVudHNcbiAqIEBuYW1lIGdldE1lc3NhZ2VcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLCBhcmdzKSB7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgJ25lZ2F0ZScpXG4gICAgLCB2YWwgPSBmbGFnKG9iaiwgJ29iamVjdCcpXG4gICAgLCBleHBlY3RlZCA9IGFyZ3NbM11cbiAgICAsIGFjdHVhbCA9IGdldEFjdHVhbChvYmosIGFyZ3MpXG4gICAgLCBtc2cgPSBuZWdhdGUgPyBhcmdzWzJdIDogYXJnc1sxXVxuICAgICwgZmxhZ01zZyA9IGZsYWcob2JqLCAnbWVzc2FnZScpO1xuXG4gIG1zZyA9IG1zZyB8fCAnJztcbiAgbXNnID0gbXNnXG4gICAgLnJlcGxhY2UoLyN7dGhpc30vZywgb2JqRGlzcGxheSh2YWwpKVxuICAgIC5yZXBsYWNlKC8je2FjdH0vZywgb2JqRGlzcGxheShhY3R1YWwpKVxuICAgIC5yZXBsYWNlKC8je2V4cH0vZywgb2JqRGlzcGxheShleHBlY3RlZCkpO1xuXG4gIHJldHVybiBmbGFnTXNnID8gZmxhZ01zZyArICc6ICcgKyBtc2cgOiBtc2c7XG59O1xuIiwiLyohXG4gKiBDaGFpIC0gZ2V0TmFtZSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIGdldE5hbWUoZnVuYylcbiAqXG4gKiBHZXRzIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24sIGluIGEgY3Jvc3MtYnJvd3NlciB3YXkuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gYSBmdW5jdGlvbiAodXN1YWxseSBhIGNvbnN0cnVjdG9yKVxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgaWYgKGZ1bmMubmFtZSkgcmV0dXJuIGZ1bmMubmFtZTtcblxuICB2YXIgbWF0Y2ggPSAvXlxccz9mdW5jdGlvbiAoW14oXSopXFwoLy5leGVjKGZ1bmMpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gPyBtYXRjaFsxXSA6IFwiXCI7XG59O1xuIiwiLyohXG4gKiBDaGFpIC0gZ2V0UGF0aFZhbHVlIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2dpY2FscGFyYWRveC9maWx0clxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiAjIyMgLmdldFBhdGhWYWx1ZShwYXRoLCBvYmplY3QpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiB2YWx1ZXMgaW4gYW5cbiAqIG9iamVjdCBnaXZlbiBhIHN0cmluZyBwYXRoLlxuICpcbiAqICAgICB2YXIgb2JqID0ge1xuICogICAgICAgICBwcm9wMToge1xuICogICAgICAgICAgICAgYXJyOiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgICAgICAsIHN0cjogJ0hlbGxvJ1xuICogICAgICAgICB9XG4gKiAgICAgICAsIHByb3AyOiB7XG4gKiAgICAgICAgICAgICBhcnI6IFsgeyBuZXN0ZWQ6ICdVbml2ZXJzZScgfSBdXG4gKiAgICAgICAgICAgLCBzdHI6ICdIZWxsbyBhZ2FpbiEnXG4gKiAgICAgICAgIH1cbiAqICAgICB9XG4gKlxuICogVGhlIGZvbGxvd2luZyB3b3VsZCBiZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAgICAgZ2V0UGF0aFZhbHVlKCdwcm9wMS5zdHInLCBvYmopOyAvLyBIZWxsb1xuICogICAgIGdldFBhdGhWYWx1ZSgncHJvcDEuYXR0WzJdJywgb2JqKTsgLy8gYlxuICogICAgIGdldFBhdGhWYWx1ZSgncHJvcDIuYXJyWzBdLm5lc3RlZCcsIG9iaik7IC8vIFVuaXZlcnNlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm5zIHtPYmplY3R9IHZhbHVlIG9yIGB1bmRlZmluZWRgXG4gKiBAbmFtZSBnZXRQYXRoVmFsdWVcbiAqIEBhcGkgcHVibGljXG4gKi9cblxudmFyIGdldFBhdGhWYWx1ZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhdGgsIG9iaikge1xuICB2YXIgcGFyc2VkID0gcGFyc2VQYXRoKHBhdGgpO1xuICByZXR1cm4gX2dldFBhdGhWYWx1ZShwYXJzZWQsIG9iaik7XG59O1xuXG4vKiFcbiAqICMjIHBhcnNlUGF0aChwYXRoKVxuICpcbiAqIEhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIHBhcnNlIHN0cmluZyBvYmplY3RcbiAqIHBhdGhzLiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgX2dldFBhdGhWYWx1ZWAuXG4gKlxuICogICAgICB2YXIgcGFyc2VkID0gcGFyc2VQYXRoKCdteW9iamVjdC5wcm9wZXJ0eS5zdWJwcm9wJyk7XG4gKlxuICogIyMjIFBhdGhzOlxuICpcbiAqICogQ2FuIGJlIGFzIG5lYXIgaW5maW5pdGVseSBkZWVwIGFuZCBuZXN0ZWRcbiAqICogQXJyYXlzIGFyZSBhbHNvIHZhbGlkIHVzaW5nIHRoZSBmb3JtYWwgYG15b2JqZWN0LmRvY3VtZW50WzNdLnByb3BlcnR5YC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHJldHVybnMge09iamVjdH0gcGFyc2VkXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgdmFyIHN0ciA9IHBhdGgucmVwbGFjZSgvXFxbL2csICcuWycpXG4gICAgLCBwYXJ0cyA9IHN0ci5tYXRjaCgvKFxcXFxcXC58W14uXSs/KSsvZyk7XG4gIHJldHVybiBwYXJ0cy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIHJlID0gL1xcWyhcXGQrKVxcXSQvXG4gICAgICAsIG1BcnIgPSByZS5leGVjKHZhbHVlKVxuICAgIGlmIChtQXJyKSByZXR1cm4geyBpOiBwYXJzZUZsb2F0KG1BcnJbMV0pIH07XG4gICAgZWxzZSByZXR1cm4geyBwOiB2YWx1ZSB9O1xuICB9KTtcbn07XG5cbi8qIVxuICogIyMgX2dldFBhdGhWYWx1ZShwYXJzZWQsIG9iailcbiAqXG4gKiBIZWxwZXIgY29tcGFuaW9uIGZ1bmN0aW9uIGZvciBgLnBhcnNlUGF0aGAgdGhhdCByZXR1cm5zXG4gKiB0aGUgdmFsdWUgbG9jYXRlZCBhdCB0aGUgcGFyc2VkIGFkZHJlc3MuXG4gKlxuICogICAgICB2YXIgdmFsdWUgPSBnZXRQYXRoVmFsdWUocGFyc2VkLCBvYmopO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWQgZGVmaW5pdGlvbiBmcm9tIGBwYXJzZVBhdGhgLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0byBzZWFyY2ggYWdhaW5zdFxuICogQHJldHVybnMge09iamVjdHxVbmRlZmluZWR9IHZhbHVlXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBfZ2V0UGF0aFZhbHVlIChwYXJzZWQsIG9iaikge1xuICB2YXIgdG1wID0gb2JqXG4gICAgLCByZXM7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gcGFyc2VkLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFyc2VkW2ldO1xuICAgIGlmICh0bXApIHtcbiAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHBhcnQucClcbiAgICAgICAgdG1wID0gdG1wW3BhcnQucF07XG4gICAgICBlbHNlIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHBhcnQuaSlcbiAgICAgICAgdG1wID0gdG1wW3BhcnQuaV07XG4gICAgICBpZiAoaSA9PSAobCAtIDEpKSByZXMgPSB0bXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIvKiFcbiAqIENoYWkgLSBnZXRQcm9wZXJ0aWVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyAuZ2V0UHJvcGVydGllcyhvYmplY3QpXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIHJldHJpZXZhbCBvZiBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QsIGVudW1lcmFibGUgb3Igbm90LFxuICogaW5oZXJpdGVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKiBAbmFtZSBnZXRQcm9wZXJ0aWVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN1YmplY3QpO1xuXG4gIGZ1bmN0aW9uIGFkZFByb3BlcnR5KHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCk7XG4gIHdoaWxlIChwcm90byAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGFkZFByb3BlcnR5KTtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1haW4gZXhwb3J0c1xuICovXG5cbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLyohXG4gKiB0ZXN0IHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLnRlc3QgPSByZXF1aXJlKCcuL3Rlc3QnKTtcblxuLyohXG4gKiB0eXBlIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLnR5cGUgPSByZXF1aXJlKCcuL3R5cGUnKTtcblxuLyohXG4gKiBtZXNzYWdlIHV0aWxpdHlcbiAqL1xuXG5leHBvcnRzLmdldE1lc3NhZ2UgPSByZXF1aXJlKCcuL2dldE1lc3NhZ2UnKTtcblxuLyohXG4gKiBhY3R1YWwgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMuZ2V0QWN0dWFsID0gcmVxdWlyZSgnLi9nZXRBY3R1YWwnKTtcblxuLyohXG4gKiBJbnNwZWN0IHV0aWxcbiAqL1xuXG5leHBvcnRzLmluc3BlY3QgPSByZXF1aXJlKCcuL2luc3BlY3QnKTtcblxuLyohXG4gKiBPYmplY3QgRGlzcGxheSB1dGlsXG4gKi9cblxuZXhwb3J0cy5vYmpEaXNwbGF5ID0gcmVxdWlyZSgnLi9vYmpEaXNwbGF5Jyk7XG5cbi8qIVxuICogRmxhZyB1dGlsaXR5XG4gKi9cblxuZXhwb3J0cy5mbGFnID0gcmVxdWlyZSgnLi9mbGFnJyk7XG5cbi8qIVxuICogRmxhZyB0cmFuc2ZlcnJpbmcgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMudHJhbnNmZXJGbGFncyA9IHJlcXVpcmUoJy4vdHJhbnNmZXJGbGFncycpO1xuXG4vKiFcbiAqIERlZXAgZXF1YWwgdXRpbGl0eVxuICovXG5cbmV4cG9ydHMuZXFsID0gcmVxdWlyZSgnZGVlcC1lcWwnKTtcblxuLyohXG4gKiBEZWVwIHBhdGggdmFsdWVcbiAqL1xuXG5leHBvcnRzLmdldFBhdGhWYWx1ZSA9IHJlcXVpcmUoJy4vZ2V0UGF0aFZhbHVlJyk7XG5cbi8qIVxuICogRnVuY3Rpb24gbmFtZVxuICovXG5cbmV4cG9ydHMuZ2V0TmFtZSA9IHJlcXVpcmUoJy4vZ2V0TmFtZScpO1xuXG4vKiFcbiAqIGFkZCBQcm9wZXJ0eVxuICovXG5cbmV4cG9ydHMuYWRkUHJvcGVydHkgPSByZXF1aXJlKCcuL2FkZFByb3BlcnR5Jyk7XG5cbi8qIVxuICogYWRkIE1ldGhvZFxuICovXG5cbmV4cG9ydHMuYWRkTWV0aG9kID0gcmVxdWlyZSgnLi9hZGRNZXRob2QnKTtcblxuLyohXG4gKiBvdmVyd3JpdGUgUHJvcGVydHlcbiAqL1xuXG5leHBvcnRzLm92ZXJ3cml0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9vdmVyd3JpdGVQcm9wZXJ0eScpO1xuXG4vKiFcbiAqIG92ZXJ3cml0ZSBNZXRob2RcbiAqL1xuXG5leHBvcnRzLm92ZXJ3cml0ZU1ldGhvZCA9IHJlcXVpcmUoJy4vb3ZlcndyaXRlTWV0aG9kJyk7XG5cbi8qIVxuICogQWRkIGEgY2hhaW5hYmxlIG1ldGhvZFxuICovXG5cbmV4cG9ydHMuYWRkQ2hhaW5hYmxlTWV0aG9kID0gcmVxdWlyZSgnLi9hZGRDaGFpbmFibGVNZXRob2QnKTtcblxuLyohXG4gKiBPdmVyd3JpdGUgY2hhaW5hYmxlIG1ldGhvZFxuICovXG5cbmV4cG9ydHMub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kID0gcmVxdWlyZSgnLi9vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QnKTtcblxuIiwiLy8gVGhpcyBpcyAoYWxtb3N0KSBkaXJlY3RseSBmcm9tIE5vZGUuanMgdXRpbHNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9ibG9iL2Y4YzMzNWQwY2FmNDdmMTZkMzE0MTNmODlhYTI4ZWRhMzg3OGUzYWEvbGliL3V0aWwuanNcblxudmFyIGdldE5hbWUgPSByZXF1aXJlKCcuL2dldE5hbWUnKTtcbnZhciBnZXRQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9nZXRQcm9wZXJ0aWVzJyk7XG52YXIgZ2V0RW51bWVyYWJsZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2dldEVudW1lcmFibGVQcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zcGVjdDtcblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtCb29sZWFufSBzaG93SGlkZGVuIEZsYWcgdGhhdCBzaG93cyBoaWRkZW4gKG5vdCBlbnVtZXJhYmxlKVxuICogICAgcHJvcGVydGllcyBvZiBvYmplY3RzLlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlcHRoIERlcHRoIGluIHdoaWNoIHRvIGRlc2NlbmQgaW4gb2JqZWN0LiBEZWZhdWx0IGlzIDIuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNvbG9ycyBGbGFnIHRvIHR1cm4gb24gQU5TSSBlc2NhcGUgY29kZXMgdG8gY29sb3IgdGhlXG4gKiAgICBvdXRwdXQuIERlZmF1bHQgaXMgZmFsc2UgKG5vIGNvbG9yaW5nKS5cbiAqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMpIHtcbiAgdmFyIGN0eCA9IHtcbiAgICBzaG93SGlkZGVuOiBzaG93SGlkZGVuLFxuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0cjsgfVxuICB9O1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosICh0eXBlb2YgZGVwdGggPT09ICd1bmRlZmluZWQnID8gMiA6IGRlcHRoKSk7XG59XG5cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEwNDQxMjgvXG52YXIgZ2V0T3V0ZXJIVE1MID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICBpZiAoJ291dGVySFRNTCcgaW4gZWxlbWVudCkgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB2YXIgbnMgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcbiAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgJ18nKTtcbiAgdmFyIGVsZW1Qcm90byA9ICh3aW5kb3cuSFRNTEVsZW1lbnQgfHwgd2luZG93LkVsZW1lbnQpLnByb3RvdHlwZTtcbiAgdmFyIHhtbFNlcmlhbGl6ZXIgPSBuZXcgWE1MU2VyaWFsaXplcigpO1xuICB2YXIgaHRtbDtcbiAgaWYgKGRvY3VtZW50LnhtbFZlcnNpb24pIHtcbiAgICByZXR1cm4geG1sU2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpKTtcbiAgICBodG1sID0gY29udGFpbmVyLmlubmVySFRNTC5yZXBsYWNlKCc+PCcsICc+JyArIGVsZW1lbnQuaW5uZXJIVE1MICsgJzwnKTtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cbn07XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiBvYmplY3QgaXMgYSBET00gZWxlbWVudC5cbnZhciBpc0RPTUVsZW1lbnQgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBvYmplY3QgJiZcbiAgICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICBvYmplY3Qubm9kZVR5cGUgPT09IDEgJiZcbiAgICAgIHR5cGVvZiBvYmplY3Qubm9kZU5hbWUgPT09ICdzdHJpbmcnO1xuICB9XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5pbnNwZWN0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzKTtcbiAgICBpZiAodHlwZW9mIHJldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBJZiBpdCdzIERPTSBlbGVtLCBnZXQgb3V0ZXIgSFRNTC5cbiAgaWYgKGlzRE9NRWxlbWVudCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZ2V0T3V0ZXJIVE1MKHZhbHVlKTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIHZpc2libGVLZXlzID0gZ2V0RW51bWVyYWJsZVByb3BlcnRpZXModmFsdWUpO1xuICB2YXIga2V5cyA9IGN0eC5zaG93SGlkZGVuID8gZ2V0UHJvcGVydGllcyh2YWx1ZSkgOiB2aXNpYmxlS2V5cztcblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIC8vIEluIElFLCBlcnJvcnMgaGF2ZSBhIHNpbmdsZSBgc3RhY2tgIHByb3BlcnR5LCBvciBpZiB0aGV5IGFyZSB2YW5pbGxhIGBFcnJvcmAsXG4gIC8vIGEgYHN0YWNrYCBwbHVzIGBkZXNjcmlwdGlvbmAgcHJvcGVydHk7IGlnbm9yZSB0aG9zZSBmb3IgY29uc2lzdGVuY3kuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCB8fCAoaXNFcnJvcih2YWx1ZSkgJiYgKFxuICAgICAgKGtleXMubGVuZ3RoID09PSAxICYmIGtleXNbMF0gPT09ICdzdGFjaycpIHx8XG4gICAgICAoa2V5cy5sZW5ndGggPT09IDIgJiYga2V5c1swXSA9PT0gJ2Rlc2NyaXB0aW9uJyAmJiBrZXlzWzFdID09PSAnc3RhY2snKVxuICAgICApKSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0TmFtZSh2YWx1ZSk7XG4gICAgICB2YXIgbmFtZVN1ZmZpeCA9IG5hbWUgPyAnOiAnICsgbmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZVN1ZmZpeCArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG5hbWUgPSBnZXROYW1lKHZhbHVlKTtcbiAgICB2YXIgbmFtZVN1ZmZpeCA9IG5hbWUgPyAnOiAnICsgbmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuYW1lU3VmZml4ICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIH1cbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHI7XG4gIGlmICh2YWx1ZS5fX2xvb2t1cEdldHRlcl9fKSB7XG4gICAgaWYgKHZhbHVlLl9fbG9va3VwR2V0dGVyX18oa2V5KSkge1xuICAgICAgaWYgKHZhbHVlLl9fbG9va3VwU2V0dGVyX18oa2V5KSkge1xuICAgICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZS5fX2xvb2t1cFNldHRlcl9fKGtleSkpIHtcbiAgICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHZpc2libGVLZXlzLmluZGV4T2Yoa2V5KSA8IDApIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YodmFsdWVba2V5XSkgPCAwKSB7XG4gICAgICBpZiAocmVjdXJzZVRpbWVzID09PSBudWxsKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgdmFsdWVba2V5XSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlW2tleV0sIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpIHx8XG4gICAgICAgICAodHlwZW9mIGFyID09PSAnb2JqZWN0JyAmJiBvYmplY3RUb1N0cmluZyhhcikgPT09ICdbb2JqZWN0IEFycmF5XScpO1xufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gdHlwZW9mIHJlID09PSAnb2JqZWN0JyAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gdHlwZW9mIGQgPT09ICdvYmplY3QnICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT09ICdvYmplY3QnICYmIG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nO1xufVxuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG4iLCIvKiFcbiAqIENoYWkgLSBmbGFnIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRhbmNpZXNcbiAqL1xuXG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJy4vaW5zcGVjdCcpO1xudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4uL2NvbmZpZycpO1xuXG4vKipcbiAqICMjIyAub2JqRGlzcGxheSAob2JqZWN0KVxuICpcbiAqIERldGVybWluZXMgaWYgYW4gb2JqZWN0IG9yIGFuIGFycmF5IG1hdGNoZXNcbiAqIGNyaXRlcmlhIHRvIGJlIGluc3BlY3RlZCBpbi1saW5lIGZvciBlcnJvclxuICogbWVzc2FnZXMgb3Igc2hvdWxkIGJlIHRydW5jYXRlZC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBqYXZhc2NyaXB0IG9iamVjdCB0byBpbnNwZWN0XG4gKiBAbmFtZSBvYmpEaXNwbGF5XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgc3RyID0gaW5zcGVjdChvYmopXG4gICAgLCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG5cbiAgaWYgKGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCAmJiBzdHIubGVuZ3RoID49IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCkge1xuICAgIGlmICh0eXBlID09PSAnW29iamVjdCBGdW5jdGlvbl0nKSB7XG4gICAgICByZXR1cm4gIW9iai5uYW1lIHx8IG9iai5uYW1lID09PSAnJ1xuICAgICAgICA/ICdbRnVuY3Rpb25dJ1xuICAgICAgICA6ICdbRnVuY3Rpb246ICcgKyBvYmoubmFtZSArICddJztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybiAnWyBBcnJheSgnICsgb2JqLmxlbmd0aCArICcpIF0nO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAsIGtzdHIgPSBrZXlzLmxlbmd0aCA+IDJcbiAgICAgICAgICA/IGtleXMuc3BsaWNlKDAsIDIpLmpvaW4oJywgJykgKyAnLCAuLi4nXG4gICAgICAgICAgOiBrZXlzLmpvaW4oJywgJyk7XG4gICAgICByZXR1cm4gJ3sgT2JqZWN0ICgnICsga3N0ciArICcpIH0nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59O1xuIiwiLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqICMjIyBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgKGN0eCwgbmFtZSwgZm4pXG4gKlxuICogT3ZlcndpdGVzIGFuIGFscmVhZHkgZXhpc3RpbmcgY2hhaW5hYmxlIG1ldGhvZFxuICogYW5kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcHJldmlvdXMgZnVuY3Rpb24gb3JcbiAqIHByb3BlcnR5LiAgTXVzdCByZXR1cm4gZnVuY3Rpb25zIHRvIGJlIHVzZWQgZm9yXG4gKiBuYW1lLlxuICpcbiAqICAgICB1dGlscy5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnbGVuZ3RoJyxcbiAqICAgICAgIGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAqICAgICAgIH1cbiAqICAgICAsIGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAqICAgICAgIH1cbiAqICAgICApO1xuICpcbiAqIENhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gYGNoYWkuQXNzZXJ0aW9uYC5cbiAqXG4gKiAgICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdmb28nLCBmbiwgZm4pO1xuICpcbiAqIFRoZW4gY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIGFzc2VydGlvbi5cbiAqXG4gKiAgICAgZXhwZWN0KG15Rm9vKS50by5oYXZlLmxlbmd0aCgzKTtcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmhhdmUubGVuZ3RoLmFib3ZlKDMpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHdob3NlIG1ldGhvZCAvIHByb3BlcnR5IGlzIHRvIGJlIG92ZXJ3cml0dGVuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBtZXRob2QgLyBwcm9wZXJ0eSB0byBvdmVyd3JpdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGFpbmluZ0JlaGF2aW9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIHByb3BlcnR5XG4gKiBAbmFtZSBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0gY3R4Ll9fbWV0aG9kc1tuYW1lXTtcblxuICB2YXIgX2NoYWluaW5nQmVoYXZpb3IgPSBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yO1xuICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBjaGFpbmluZ0JlaGF2aW9yKF9jaGFpbmluZ0JlaGF2aW9yKS5jYWxsKHRoaXMpO1xuICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IHRoaXMgOiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIF9tZXRob2QgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2Q7XG4gIGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kKF9tZXRob2QpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gdGhpcyA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIG92ZXJ3cml0ZU1ldGhvZCAoY3R4LCBuYW1lLCBmbilcbiAqXG4gKiBPdmVyd2l0ZXMgYW4gYWxyZWFkeSBleGlzdGluZyBtZXRob2QgYW5kIHByb3ZpZGVzXG4gKiBhY2Nlc3MgdG8gcHJldmlvdXMgZnVuY3Rpb24uIE11c3QgcmV0dXJuIGZ1bmN0aW9uXG4gKiB0byBiZSB1c2VkIGZvciBuYW1lLlxuICpcbiAqICAgICB1dGlscy5vdmVyd3JpdGVNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnZXF1YWwnLCBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24gKHN0cikge1xuICogICAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBGb28pIHtcbiAqICAgICAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqLnZhbHVlKS50by5lcXVhbChzdHIpO1xuICogICAgICAgICB9IGVsc2Uge1xuICogICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKlxuICogQ2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBgY2hhaS5Bc3NlcnRpb25gLlxuICpcbiAqICAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QoJ2ZvbycsIGZuKTtcbiAqXG4gKiBUaGVuIGNhbiBiZSB1c2VkIGFzIGFueSBvdGhlciBhc3NlcnRpb24uXG4gKlxuICogICAgIGV4cGVjdChteUZvbykudG8uZXF1YWwoJ2JhcicpO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHdob3NlIG1ldGhvZCBpcyB0byBiZSBvdmVyd3JpdHRlblxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgbWV0aG9kIHRvIG92ZXJ3cml0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZm9yIG5hbWVcbiAqIEBuYW1lIG92ZXJ3cml0ZU1ldGhvZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICB2YXIgX21ldGhvZCA9IGN0eFtuYW1lXVxuICAgICwgX3N1cGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxuICBpZiAoX21ldGhvZCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgX21ldGhvZClcbiAgICBfc3VwZXIgPSBfbWV0aG9kO1xuXG4gIGN0eFtuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kKF9zdXBlcikuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyB0aGlzIDogcmVzdWx0O1xuICB9XG59O1xuIiwiLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIG92ZXJ3cml0ZVByb3BlcnR5IChjdHgsIG5hbWUsIGZuKVxuICpcbiAqIE92ZXJ3aXRlcyBhbiBhbHJlYWR5IGV4aXN0aW5nIHByb3BlcnR5IGdldHRlciBhbmQgcHJvdmlkZXNcbiAqIGFjY2VzcyB0byBwcmV2aW91cyB2YWx1ZS4gTXVzdCByZXR1cm4gZnVuY3Rpb24gdG8gdXNlIGFzIGdldHRlci5cbiAqXG4gKiAgICAgdXRpbHMub3ZlcndyaXRlUHJvcGVydHkoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCAnb2snLCBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICogICAgICAgICB2YXIgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0Jyk7XG4gKiAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBGb28pIHtcbiAqICAgICAgICAgICBuZXcgY2hhaS5Bc3NlcnRpb24ob2JqLm5hbWUpLnRvLmVxdWFsKCdiYXInKTtcbiAqICAgICAgICAgfSBlbHNlIHtcbiAqICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKTtcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIH0pO1xuICpcbiAqXG4gKiBDYW4gYWxzbyBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIGBjaGFpLkFzc2VydGlvbmAuXG4gKlxuICogICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdmb28nLCBmbik7XG4gKlxuICogVGhlbiBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgYXNzZXJ0aW9uLlxuICpcbiAqICAgICBleHBlY3QobXlGb28pLnRvLmJlLm9rO1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdHggb2JqZWN0IHdob3NlIHByb3BlcnR5IGlzIHRvIGJlIG92ZXJ3cml0dGVuXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiBwcm9wZXJ0eSB0byBvdmVyd3JpdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBnZXR0ZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgbmFtZVxuICogQG5hbWUgb3ZlcndyaXRlUHJvcGVydHlcbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgdmFyIF9nZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgbmFtZSlcbiAgICAsIF9zdXBlciA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gIGlmIChfZ2V0ICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBfZ2V0LmdldClcbiAgICBfc3VwZXIgPSBfZ2V0LmdldFxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIG5hbWUsXG4gICAgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlcihfc3VwZXIpLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICB9XG4gICAgLCBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59O1xuIiwiLyohXG4gKiBDaGFpIC0gdGVzdCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBNb2R1bGUgZGVwZW5kYW5jaWVzXG4gKi9cblxudmFyIGZsYWcgPSByZXF1aXJlKCcuL2ZsYWcnKTtcblxuLyoqXG4gKiAjIHRlc3Qob2JqZWN0LCBleHByZXNzaW9uKVxuICpcbiAqIFRlc3QgYW5kIG9iamVjdCBmb3IgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IChjb25zdHJ1Y3RlZCBBc3NlcnRpb24pXG4gKiBAcGFyYW0ge0FyZ3VtZW50c30gY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCBhcmd1bWVudHNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmosIGFyZ3MpIHtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCAnbmVnYXRlJylcbiAgICAsIGV4cHIgPSBhcmdzWzBdO1xuICByZXR1cm4gbmVnYXRlID8gIWV4cHIgOiBleHByO1xufTtcbiIsIi8qIVxuICogQ2hhaSAtIHRyYW5zZmVyRmxhZ3MgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogIyMjIHRyYW5zZmVyRmxhZ3MoYXNzZXJ0aW9uLCBvYmplY3QsIGluY2x1ZGVBbGwgPSB0cnVlKVxuICpcbiAqIFRyYW5zZmVyIGFsbCB0aGUgZmxhZ3MgZm9yIGBhc3NlcnRpb25gIHRvIGBvYmplY3RgLiBJZlxuICogYGluY2x1ZGVBbGxgIGlzIHNldCB0byBgZmFsc2VgLCB0aGVuIHRoZSBiYXNlIENoYWlcbiAqIGFzc2VydGlvbiBmbGFncyAobmFtZWx5IGBvYmplY3RgLCBgc3NmaWAsIGFuZCBgbWVzc2FnZWApXG4gKiB3aWxsIG5vdCBiZSB0cmFuc2ZlcnJlZC5cbiAqXG4gKlxuICogICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gKiAgICAgdXRpbHMudHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG5ld0Fzc2VydGlvbik7XG4gKlxuICogICAgIHZhciBhbm90aGVyQXNzZXJpdG9uID0gbmV3IEFzc2VydGlvbihteU9iaik7XG4gKiAgICAgdXRpbHMudHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIGFub3RoZXJBc3NlcnRpb24sIGZhbHNlKTtcbiAqXG4gKiBAcGFyYW0ge0Fzc2VydGlvbn0gYXNzZXJ0aW9uIHRoZSBhc3NlcnRpb24gdG8gdHJhbnNmZXIgdGhlIGZsYWdzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgdGhlIG9iamVjdCB0byB0cmFuc2ZlciB0aGUgZmxhZ3MgdG9vOyB1c3VhbGx5IGEgbmV3IGFzc2VydGlvblxuICogQHBhcmFtIHtCb29sZWFufSBpbmNsdWRlQWxsXG4gKiBAbmFtZSBnZXRBbGxGbGFnc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXNzZXJ0aW9uLCBvYmplY3QsIGluY2x1ZGVBbGwpIHtcbiAgdmFyIGZsYWdzID0gYXNzZXJ0aW9uLl9fZmxhZ3MgfHwgKGFzc2VydGlvbi5fX2ZsYWdzID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbiAgaWYgKCFvYmplY3QuX19mbGFncykge1xuICAgIG9iamVjdC5fX2ZsYWdzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGluY2x1ZGVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gaW5jbHVkZUFsbCA6IHRydWU7XG5cbiAgZm9yICh2YXIgZmxhZyBpbiBmbGFncykge1xuICAgIGlmIChpbmNsdWRlQWxsIHx8XG4gICAgICAgIChmbGFnICE9PSAnb2JqZWN0JyAmJiBmbGFnICE9PSAnc3NmaScgJiYgZmxhZyAhPSAnbWVzc2FnZScpKSB7XG4gICAgICBvYmplY3QuX19mbGFnc1tmbGFnXSA9IGZsYWdzW2ZsYWddO1xuICAgIH1cbiAgfVxufTtcbiIsIi8qIVxuICogQ2hhaSAtIHR5cGUgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qIVxuICogRGV0ZWN0YWJsZSBqYXZhc2NyaXB0IG5hdGl2ZXNcbiAqL1xuXG52YXIgbmF0aXZlcyA9IHtcbiAgICAnW29iamVjdCBBcmd1bWVudHNdJzogJ2FyZ3VtZW50cydcbiAgLCAnW29iamVjdCBBcnJheV0nOiAnYXJyYXknXG4gICwgJ1tvYmplY3QgRGF0ZV0nOiAnZGF0ZSdcbiAgLCAnW29iamVjdCBGdW5jdGlvbl0nOiAnZnVuY3Rpb24nXG4gICwgJ1tvYmplY3QgTnVtYmVyXSc6ICdudW1iZXInXG4gICwgJ1tvYmplY3QgUmVnRXhwXSc6ICdyZWdleHAnXG4gICwgJ1tvYmplY3QgU3RyaW5nXSc6ICdzdHJpbmcnXG59O1xuXG4vKipcbiAqICMjIyB0eXBlKG9iamVjdClcbiAqXG4gKiBCZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgYHR5cGVvZmAgZGV0ZWN0aW9uIHRoYXQgY2FuXG4gKiBiZSB1c2VkIGNyb3NzLWJyb3dzZXIuIEhhbmRsZXMgdGhlIGluY29uc2lzdGVuY2llcyBvZlxuICogQXJyYXksIGBudWxsYCwgYW5kIGB1bmRlZmluZWRgIGRldGVjdGlvbi5cbiAqXG4gKiAgICAgdXRpbHMudHlwZSh7fSkgLy8gJ29iamVjdCdcbiAqICAgICB1dGlscy50eXBlKG51bGwpIC8vIGBudWxsJ1xuICogICAgIHV0aWxzLnR5cGUodW5kZWZpbmVkKSAvLyBgdW5kZWZpbmVkYFxuICogICAgIHV0aWxzLnR5cGUoW10pIC8vIGBhcnJheWBcbiAqXG4gKiBAcGFyYW0ge01peGVkfSBvYmplY3QgdG8gZGV0ZWN0IHR5cGUgb2ZcbiAqIEBuYW1lIHR5cGVcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgc3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG4gIGlmIChuYXRpdmVzW3N0cl0pIHJldHVybiBuYXRpdmVzW3N0cl07XG4gIGlmIChvYmogPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAob2JqID09PSBPYmplY3Qob2JqKSkgcmV0dXJuICdvYmplY3QnO1xuICByZXR1cm4gdHlwZW9mIG9iajtcbn07XG4iLCIvKiFcbiAqIGFzc2VydGlvbi1lcnJvclxuICogQ29weXJpZ2h0KGMpIDIwMTMgSmFrZSBMdWVyIDxqYWtlQHF1YWxpYW5jeS5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogb25lIG9iamVjdCB0byBhbm90aGVyIGV4Y2x1ZGluZyBhbnkgb3JpZ2luYWxseVxuICogbGlzdGVkLiBSZXR1cm5lZCBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBge31gLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBleGNsdWRlZCBwcm9wZXJ0aWVzIC4uLlxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cblxuZnVuY3Rpb24gZXhjbHVkZSAoKSB7XG4gIHZhciBleGNsdWRlcyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBmdW5jdGlvbiBleGNsdWRlUHJvcHMgKHJlcywgb2JqKSB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICghfmV4Y2x1ZGVzLmluZGV4T2Yoa2V5KSkgcmVzW2tleV0gPSBvYmpba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBleHRlbmRFeGNsdWRlICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgICAgLCBpID0gMFxuICAgICAgLCByZXMgPSB7fTtcblxuICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhjbHVkZVByb3BzKHJlcywgYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcbn07XG5cbi8qIVxuICogUHJpbWFyeSBFeHBvcnRzXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBBc3NlcnRpb25FcnJvcjtcblxuLyoqXG4gKiAjIyMgQXNzZXJ0aW9uRXJyb3JcbiAqXG4gKiBBbiBleHRlbnNpb24gb2YgdGhlIEphdmFTY3JpcHQgYEVycm9yYCBjb25zdHJ1Y3RvciBmb3JcbiAqIGFzc2VydGlvbiBhbmQgdmFsaWRhdGlvbiBzY2VuYXJpb3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIHRvIGluY2x1ZGUgKG9wdGlvbmFsKVxuICogQHBhcmFtIHtjYWxsZWV9IHN0YXJ0IHN0YWNrIGZ1bmN0aW9uIChvcHRpb25hbClcbiAqL1xuXG5mdW5jdGlvbiBBc3NlcnRpb25FcnJvciAobWVzc2FnZSwgX3Byb3BzLCBzc2YpIHtcbiAgdmFyIGV4dGVuZCA9IGV4Y2x1ZGUoJ25hbWUnLCAnbWVzc2FnZScsICdzdGFjaycsICdjb25zdHJ1Y3RvcicsICd0b0pTT04nKVxuICAgICwgcHJvcHMgPSBleHRlbmQoX3Byb3BzIHx8IHt9KTtcblxuICAvLyBkZWZhdWx0IHZhbHVlc1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdVbnNwZWNpZmllZCBBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuc2hvd0RpZmYgPSBmYWxzZTtcblxuICAvLyBjb3B5IGZyb20gcHJvcGVydGllc1xuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICB9XG5cbiAgLy8gY2FwdHVyZSBzdGFjayB0cmFjZVxuICBzc2YgPSBzc2YgfHwgYXJndW1lbnRzLmNhbGxlZTtcbiAgaWYgKHNzZiAmJiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHNzZik7XG4gIH1cbn1cblxuLyohXG4gKiBJbmhlcml0IGZyb20gRXJyb3IucHJvdG90eXBlXG4gKi9cblxuQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuXG4vKiFcbiAqIFN0YXRpY2FsbHkgc2V0IG5hbWVcbiAqL1xuXG5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG5cbi8qIVxuICogRW5zdXJlIGNvcnJlY3QgY29uc3RydWN0b3JcbiAqL1xuXG5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc3NlcnRpb25FcnJvcjtcblxuLyoqXG4gKiBBbGxvdyBlcnJvcnMgdG8gYmUgY29udmVydGVkIHRvIEpTT04gZm9yIHN0YXRpYyB0cmFuc2Zlci5cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGluY2x1ZGUgc3RhY2sgKGRlZmF1bHQ6IGB0cnVlYClcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHRoYXQgY2FuIGJlIGBKU09OLnN0cmluZ2lmeWBcbiAqL1xuXG5Bc3NlcnRpb25FcnJvci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gIHZhciBleHRlbmQgPSBleGNsdWRlKCdjb25zdHJ1Y3RvcicsICd0b0pTT04nLCAnc3RhY2snKVxuICAgICwgcHJvcHMgPSBleHRlbmQoeyBuYW1lOiB0aGlzLm5hbWUgfSwgdGhpcyk7XG5cbiAgLy8gaW5jbHVkZSBzdGFjayBpZiBleGlzdHMgYW5kIG5vdCB0dXJuZWQgb2ZmXG4gIGlmIChmYWxzZSAhPT0gc3RhY2sgJiYgdGhpcy5zdGFjaykge1xuICAgIHByb3BzLnN0YWNrID0gdGhpcy5zdGFjaztcbiAgfVxuXG4gIHJldHVybiBwcm9wcztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2VxbCcpO1xuIiwiLyohXG4gKiBkZWVwLWVxbFxuICogQ29weXJpZ2h0KGMpIDIwMTMgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKiFcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuXG52YXIgdHlwZSA9IHJlcXVpcmUoJ3R5cGUtZGV0ZWN0Jyk7XG5cbi8qIVxuICogQnVmZmVyLmlzQnVmZmVyIGJyb3dzZXIgc2hpbVxuICovXG5cbnZhciBCdWZmZXI7XG50cnkgeyBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7IH1cbmNhdGNoKGV4KSB7XG4gIEJ1ZmZlciA9IHt9O1xuICBCdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9XG59XG5cbi8qIVxuICogUHJpbWFyeSBFeHBvcnRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZXBFcXVhbDtcblxuLyoqXG4gKiBBc3NlcnQgc3VwZXItc3RyaWN0IChlZ2FsKSBlcXVhbGl0eSBiZXR3ZWVuXG4gKiB0d28gb2JqZWN0cyBvZiBhbnkgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBhXG4gKiBAcGFyYW0ge01peGVkfSBiXG4gKiBAcGFyYW0ge0FycmF5fSBtZW1vaXNlZCAob3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtCb29sZWFufSBlcXVhbCBtYXRjaFxuICovXG5cbmZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiLCBtKSB7XG4gIGlmIChzYW1lVmFsdWUoYSwgYikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmICgnZGF0ZScgPT09IHR5cGUoYSkpIHtcbiAgICByZXR1cm4gZGF0ZUVxdWFsKGEsIGIpO1xuICB9IGVsc2UgaWYgKCdyZWdleHAnID09PSB0eXBlKGEpKSB7XG4gICAgcmV0dXJuIHJlZ2V4cEVxdWFsKGEsIGIpO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihhKSkge1xuICAgIHJldHVybiBidWZmZXJFcXVhbChhLCBiKTtcbiAgfSBlbHNlIGlmICgnYXJndW1lbnRzJyA9PT0gdHlwZShhKSkge1xuICAgIHJldHVybiBhcmd1bWVudHNFcXVhbChhLCBiLCBtKTtcbiAgfSBlbHNlIGlmICghdHlwZUVxdWFsKGEsIGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKCgnb2JqZWN0JyAhPT0gdHlwZShhKSAmJiAnb2JqZWN0JyAhPT0gdHlwZShiKSlcbiAgJiYgKCdhcnJheScgIT09IHR5cGUoYSkgJiYgJ2FycmF5JyAhPT0gdHlwZShiKSkpIHtcbiAgICByZXR1cm4gc2FtZVZhbHVlKGEsIGIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBvYmplY3RFcXVhbChhLCBiLCBtKTtcbiAgfVxufVxuXG4vKiFcbiAqIFN0cmljdCAoZWdhbCkgZXF1YWxpdHkgdGVzdC4gRW5zdXJlcyB0aGF0IE5hTiBhbHdheXNcbiAqIGVxdWFscyBOYU4gYW5kIGAtMGAgZG9lcyBub3QgZXF1YWwgYCswYC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBhXG4gKiBAcGFyYW0ge01peGVkfSBiXG4gKiBAcmV0dXJuIHtCb29sZWFufSBlcXVhbCBtYXRjaFxuICovXG5cbmZ1bmN0aW9uIHNhbWVWYWx1ZShhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gIHJldHVybiBhICE9PSBhICYmIGIgIT09IGI7XG59XG5cbi8qIVxuICogQ29tcGFyZSB0aGUgdHlwZXMgb2YgdHdvIGdpdmVuIG9iamVjdHMgYW5kXG4gKiByZXR1cm4gaWYgdGhleSBhcmUgZXF1YWwuIE5vdGUgdGhhdCBhbiBBcnJheVxuICogaGFzIGEgdHlwZSBvZiBgYXJyYXlgIChub3QgYG9iamVjdGApIGFuZCBhcmd1bWVudHNcbiAqIGhhdmUgYSB0eXBlIG9mIGBhcmd1bWVudHNgIChub3QgYGFycmF5YC9gb2JqZWN0YCkuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gYVxuICogQHBhcmFtIHtNaXhlZH0gYlxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gdHlwZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIHR5cGUoYSkgPT09IHR5cGUoYik7XG59XG5cbi8qIVxuICogQ29tcGFyZSB0d28gRGF0ZSBvYmplY3RzIGJ5IGFzc2VydGluZyB0aGF0XG4gKiB0aGUgdGltZSB2YWx1ZXMgYXJlIGVxdWFsIHVzaW5nIGBzYXZlVmFsdWVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZX0gYVxuICogQHBhcmFtIHtEYXRlfSBiXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiBkYXRlRXF1YWwoYSwgYikge1xuICBpZiAoJ2RhdGUnICE9PSB0eXBlKGIpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBzYW1lVmFsdWUoYS5nZXRUaW1lKCksIGIuZ2V0VGltZSgpKTtcbn1cblxuLyohXG4gKiBDb21wYXJlIHR3byByZWd1bGFyIGV4cHJlc3Npb25zIGJ5IGNvbnZlcnRpbmcgdGhlbVxuICogdG8gc3RyaW5nIGFuZCBjaGVja2luZyBmb3IgYHNhbWVWYWx1ZWAuXG4gKlxuICogQHBhcmFtIHtSZWdFeHB9IGFcbiAqIEBwYXJhbSB7UmVnRXhwfSBiXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiByZWdleHBFcXVhbChhLCBiKSB7XG4gIGlmICgncmVnZXhwJyAhPT0gdHlwZShiKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gc2FtZVZhbHVlKGEudG9TdHJpbmcoKSwgYi50b1N0cmluZygpKTtcbn1cblxuLyohXG4gKiBBc3NlcnQgZGVlcCBlcXVhbGl0eSBvZiB0d28gYGFyZ3VtZW50c2Agb2JqZWN0cy5cbiAqIFVuZm9ydHVuYXRlbHksIHRoZXNlIG11c3QgYmUgc2xpY2VkIHRvIGFycmF5c1xuICogcHJpb3IgdG8gdGVzdCB0byBlbnN1cmUgbm8gYmFkIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSB7QXJndW1lbnRzfSBhXG4gKiBAcGFyYW0ge0FyZ3VtZW50c30gYlxuICogQHBhcmFtIHtBcnJheX0gbWVtb2l6ZSAob3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiBhcmd1bWVudHNFcXVhbChhLCBiLCBtKSB7XG4gIGlmICgnYXJndW1lbnRzJyAhPT0gdHlwZShiKSkgcmV0dXJuIGZhbHNlO1xuICBhID0gW10uc2xpY2UuY2FsbChhKTtcbiAgYiA9IFtdLnNsaWNlLmNhbGwoYik7XG4gIHJldHVybiBkZWVwRXF1YWwoYSwgYiwgbSk7XG59XG5cbi8qIVxuICogR2V0IGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBhIGdpdmVuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYVxuICogQHJldHVybiB7QXJyYXl9IHByb3BlcnR5IG5hbWVzXG4gKi9cblxuZnVuY3Rpb24gZW51bWVyYWJsZShhKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIGEpIHJlcy5wdXNoKGtleSk7XG4gIHJldHVybiByZXM7XG59XG5cbi8qIVxuICogU2ltcGxlIGVxdWFsaXR5IGZvciBmbGF0IGl0ZXJhYmxlIG9iamVjdHNcbiAqIHN1Y2ggYXMgQXJyYXlzIG9yIE5vZGUuanMgYnVmZmVycy5cbiAqXG4gKiBAcGFyYW0ge0l0ZXJhYmxlfSBhXG4gKiBAcGFyYW0ge0l0ZXJhYmxlfSBiXG4gKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAqL1xuXG5mdW5jdGlvbiBpdGVyYWJsZUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEubGVuZ3RoICE9PSAgYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICB2YXIgaSA9IDA7XG4gIHZhciBtYXRjaCA9IHRydWU7XG5cbiAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2g7XG59XG5cbi8qIVxuICogRXh0ZW5zaW9uIHRvIGBpdGVyYWJsZUVxdWFsYCBzcGVjaWZpY2FsbHlcbiAqIGZvciBOb2RlLmpzIEJ1ZmZlcnMuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGFcbiAqIEBwYXJhbSB7TWl4ZWR9IGJcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIGJ1ZmZlckVxdWFsKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwoYSwgYik7XG59XG5cbi8qIVxuICogQmxvY2sgZm9yIGBvYmplY3RFcXVhbGAgZW5zdXJpbmcgbm9uLWV4aXN0aW5nXG4gKiB2YWx1ZXMgZG9uJ3QgZ2V0IGluLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKi9cblxuZnVuY3Rpb24gaXNWYWx1ZShhKSB7XG4gIHJldHVybiBhICE9PSBudWxsICYmIGEgIT09IHVuZGVmaW5lZDtcbn1cblxuLyohXG4gKiBSZWN1cnNpdmVseSBjaGVjayB0aGUgZXF1YWxpdHkgb2YgdHdvIG9iamVjdHMuXG4gKiBPbmNlIGJhc2ljIHNhbWVuZXNzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGl0IHdpbGxcbiAqIGRlZmVyIHRvIGBkZWVwRXF1YWxgIGZvciBlYWNoIGVudW1lcmFibGUga2V5XG4gKiBpbiB0aGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IGFcbiAqIEBwYXJhbSB7TWl4ZWR9IGJcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICovXG5cbmZ1bmN0aW9uIG9iamVjdEVxdWFsKGEsIGIsIG0pIHtcbiAgaWYgKCFpc1ZhbHVlKGEpIHx8ICFpc1ZhbHVlKGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEucHJvdG90eXBlICE9PSBiLnByb3RvdHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBpO1xuICBpZiAobSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKG1baV1bMF0gPT09IGEgJiYgbVtpXVsxXSA9PT0gYilcbiAgICAgIHx8ICAobVtpXVswXSA9PT0gYiAmJiBtW2ldWzFdID09PSBhKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbSA9IFtdO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB2YXIga2EgPSBlbnVtZXJhYmxlKGEpO1xuICAgIHZhciBrYiA9IGVudW1lcmFibGUoYik7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG5cbiAgaWYgKCFpdGVyYWJsZUVxdWFsKGthLCBrYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBtLnB1c2goWyBhLCBiIF0pO1xuXG4gIHZhciBrZXk7XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIG0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3R5cGUnKTtcbiIsIi8qIVxuICogdHlwZS1kZXRlY3RcbiAqIENvcHlyaWdodChjKSAyMDEzIGpha2UgbHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyohXG4gKiBQcmltYXJ5IEV4cG9ydHNcbiAqL1xuXG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZ2V0VHlwZTtcblxuLyohXG4gKiBEZXRlY3RhYmxlIGphdmFzY3JpcHQgbmF0aXZlc1xuICovXG5cbnZhciBuYXRpdmVzID0ge1xuICAgICdbb2JqZWN0IEFycmF5XSc6ICdhcnJheSdcbiAgLCAnW29iamVjdCBSZWdFeHBdJzogJ3JlZ2V4cCdcbiAgLCAnW29iamVjdCBGdW5jdGlvbl0nOiAnZnVuY3Rpb24nXG4gICwgJ1tvYmplY3QgQXJndW1lbnRzXSc6ICdhcmd1bWVudHMnXG4gICwgJ1tvYmplY3QgRGF0ZV0nOiAnZGF0ZSdcbn07XG5cbi8qKlxuICogIyMjIHR5cGVPZiAob2JqKVxuICpcbiAqIFVzZSBzZXZlcmFsIGRpZmZlcmVudCB0ZWNobmlxdWVzIHRvIGRldGVybWluZVxuICogdGhlIHR5cGUgb2Ygb2JqZWN0IGJlaW5nIHRlc3RlZC5cbiAqXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IG9iamVjdCB0eXBlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGdldFR5cGUgKG9iaikge1xuICB2YXIgc3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG4gIGlmIChuYXRpdmVzW3N0cl0pIHJldHVybiBuYXRpdmVzW3N0cl07XG4gIGlmIChvYmogPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAob2JqID09PSBPYmplY3Qob2JqKSkgcmV0dXJuICdvYmplY3QnO1xuICByZXR1cm4gdHlwZW9mIG9iajtcbn1cblxuZXhwb3J0cy5MaWJyYXJ5ID0gTGlicmFyeTtcblxuLyoqXG4gKiAjIyMgTGlicmFyeVxuICpcbiAqIENyZWF0ZSBhIHJlcG9zaXRvcnkgZm9yIGN1c3RvbSB0eXBlIGRldGVjdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogdmFyIGxpYiA9IG5ldyB0eXBlLkxpYnJhcnk7XG4gKiBgYGBcbiAqXG4gKi9cblxuZnVuY3Rpb24gTGlicmFyeSAoKSB7XG4gIHRoaXMudGVzdHMgPSB7fTtcbn1cblxuLyoqXG4gKiAjIyMjIC5vZiAob2JqKVxuICpcbiAqIEV4cG9zZSByZXBsYWNlbWVudCBgdHlwZW9mYCBkZXRlY3Rpb24gdG8gdGhlIGxpYnJhcnkuXG4gKlxuICogYGBganNcbiAqIGlmICgnc3RyaW5nJyA9PT0gbGliLm9mKCdoZWxsbyB3b3JsZCcpKSB7XG4gKiAgIC8vIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0IHRvIHRlc3RcbiAqIEByZXR1cm4ge1N0cmluZ30gdHlwZVxuICovXG5cbkxpYnJhcnkucHJvdG90eXBlLm9mID0gZ2V0VHlwZTtcblxuLyoqXG4gKiAjIyMjIC5kZWZpbmUgKHR5cGUsIHRlc3QpXG4gKlxuICogQWRkIGEgdGVzdCB0byBmb3IgdGhlIGAudGVzdCgpYCBhc3NlcnRpb24uXG4gKlxuICogQ2FuIGJlIGRlZmluZWQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb246XG4gKlxuICogYGBganNcbiAqIGxpYi5kZWZpbmUoJ2ludCcsIC9eWzAtOV0rJC8pO1xuICogYGBgXG4gKlxuICogLi4uIG9yIGFzIGEgZnVuY3Rpb246XG4gKlxuICogYGBganNcbiAqIGxpYi5kZWZpbmUoJ2JsbicsIGZ1bmN0aW9uIChvYmopIHtcbiAqICAgaWYgKCdib29sZWFuJyA9PT0gbGliLm9mKG9iaikpIHJldHVybiB0cnVlO1xuICogICB2YXIgYmxucyA9IFsgJ3llcycsICdubycsICd0cnVlJywgJ2ZhbHNlJywgMSwgMCBdO1xuICogICBpZiAoJ3N0cmluZycgPT09IGxpYi5vZihvYmopKSBvYmogPSBvYmoudG9Mb3dlckNhc2UoKTtcbiAqICAgcmV0dXJuICEhIH5ibG5zLmluZGV4T2Yob2JqKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7UmVnRXhwfEZ1bmN0aW9ufSB0ZXN0XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkxpYnJhcnkucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uICh0eXBlLCB0ZXN0KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSByZXR1cm4gdGhpcy50ZXN0c1t0eXBlXTtcbiAgdGhpcy50ZXN0c1t0eXBlXSA9IHRlc3Q7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiAjIyMjIC50ZXN0IChvYmosIHRlc3QpXG4gKlxuICogQXNzZXJ0IHRoYXQgYW4gb2JqZWN0IGlzIG9mIHR5cGUuIFdpbGwgZmlyc3RcbiAqIGNoZWNrIG5hdGl2ZXMsIGFuZCBpZiB0aGF0IGRvZXMgbm90IHBhc3MgaXQgd2lsbFxuICogdXNlIHRoZSB1c2VyIGRlZmluZWQgY3VzdG9tIHRlc3RzLlxuICpcbiAqIGBgYGpzXG4gKiBhc3NlcnQobGliLnRlc3QoJzEnLCAnaW50JykpO1xuICogYXNzZXJ0KGxpYi50ZXN0KCd5ZXMnLCAnYmxuJykpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkxpYnJhcnkucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiAob2JqLCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSBnZXRUeXBlKG9iaikpIHJldHVybiB0cnVlO1xuICB2YXIgdGVzdCA9IHRoaXMudGVzdHNbdHlwZV07XG5cbiAgaWYgKHRlc3QgJiYgJ3JlZ2V4cCcgPT09IGdldFR5cGUodGVzdCkpIHtcbiAgICByZXR1cm4gdGVzdC50ZXN0KG9iaik7XG4gIH0gZWxzZSBpZiAodGVzdCAmJiAnZnVuY3Rpb24nID09PSBnZXRUeXBlKHRlc3QpKSB7XG4gICAgcmV0dXJuIHRlc3Qob2JqKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ1R5cGUgdGVzdCBcIicgKyB0eXBlICsgJ1wiIG5vdCBkZWZpbmVkIG9yIGludmFsaWQuJyk7XG4gIH1cbn07XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyXG5cbi8qKlxuICogSWYgYFRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAtIEltcGxlbWVudGF0aW9uIG11c3Qgc3VwcG9ydCBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcy5cbiAqICAgRmlyZWZveCA0LTI5IGxhY2tlZCBzdXBwb3J0LCBmaXhlZCBpbiBGaXJlZm94IDMwKy5cbiAqICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cbiAqXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5IHdpbGxcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IHdpbGwgd29yayBjb3JyZWN0bHkuXG4gKi9cbnZhciBUWVBFRF9BUlJBWV9TVVBQT1JUID0gKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKDApXG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgICBhcnIuZm9vID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfVxuICAgIHJldHVybiA0MiA9PT0gYXJyLmZvbygpICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIG5ldyBVaW50OEFycmF5KDEpLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59KSgpXG5cbi8qKlxuICogQ2xhc3M6IEJ1ZmZlclxuICogPT09PT09PT09PT09PVxuICpcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgYXJlIGF1Z21lbnRlZFxuICogd2l0aCBmdW5jdGlvbiBwcm9wZXJ0aWVzIGZvciBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgQVBJIGZ1bmN0aW9ucy4gV2UgdXNlXG4gKiBgVWludDhBcnJheWAgc28gdGhhdCBzcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdCByZXR1cm5zXG4gKiBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBCeSBhdWdtZW50aW5nIHRoZSBpbnN0YW5jZXMsIHdlIGNhbiBhdm9pZCBtb2RpZnlpbmcgdGhlIGBVaW50OEFycmF5YFxuICogcHJvdG90eXBlLlxuICovXG5mdW5jdGlvbiBCdWZmZXIgKHN1YmplY3QsIGVuY29kaW5nLCBub1plcm8pIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpXG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoc3ViamVjdCwgZW5jb2RpbmcsIG5vWmVybylcblxuICB2YXIgdHlwZSA9IHR5cGVvZiBzdWJqZWN0XG5cbiAgLy8gRmluZCB0aGUgbGVuZ3RoXG4gIHZhciBsZW5ndGhcbiAgaWYgKHR5cGUgPT09ICdudW1iZXInKVxuICAgIGxlbmd0aCA9IHN1YmplY3QgPiAwID8gc3ViamVjdCA+Pj4gMCA6IDBcbiAgZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnKVxuICAgICAgc3ViamVjdCA9IGJhc2U2NGNsZWFuKHN1YmplY3QpXG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc3ViamVjdCwgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcgJiYgc3ViamVjdCAhPT0gbnVsbCkgeyAvLyBhc3N1bWUgb2JqZWN0IGlzIGFycmF5LWxpa2VcbiAgICBpZiAoc3ViamVjdC50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KHN1YmplY3QuZGF0YSkpXG4gICAgICBzdWJqZWN0ID0gc3ViamVjdC5kYXRhXG4gICAgbGVuZ3RoID0gK3N1YmplY3QubGVuZ3RoID4gMCA/IE1hdGguZmxvb3IoK3N1YmplY3QubGVuZ3RoKSA6IDBcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCBuZWVkcyB0byBiZSBhIG51bWJlciwgYXJyYXkgb3Igc3RyaW5nLicpXG5cbiAgdmFyIGJ1ZlxuICBpZiAoVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFByZWZlcnJlZDogUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICBidWYgPSBCdWZmZXIuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIFRISVMgaW5zdGFuY2Ugb2YgQnVmZmVyIChjcmVhdGVkIGJ5IGBuZXdgKVxuICAgIGJ1ZiA9IHRoaXNcbiAgICBidWYubGVuZ3RoID0gbGVuZ3RoXG4gICAgYnVmLl9pc0J1ZmZlciA9IHRydWVcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChUWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBzdWJqZWN0LmJ5dGVMZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgLy8gU3BlZWQgb3B0aW1pemF0aW9uIC0tIHVzZSBzZXQgaWYgd2UncmUgY29weWluZyBmcm9tIGEgdHlwZWQgYXJyYXlcbiAgICBidWYuX3NldChzdWJqZWN0KVxuICB9IGVsc2UgaWYgKGlzQXJyYXlpc2goc3ViamVjdCkpIHtcbiAgICAvLyBUcmVhdCBhcnJheS1pc2ggb2JqZWN0cyBhcyBhIGJ5dGUgYXJyYXlcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN1YmplY3QpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAgICAgIGJ1ZltpXSA9IHN1YmplY3QucmVhZFVJbnQ4KGkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICAgICAgYnVmW2ldID0gKChzdWJqZWN0W2ldICUgMjU2KSArIDI1NikgJSAyNTZcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBidWYud3JpdGUoc3ViamVjdCwgMCwgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgIVRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgIW5vWmVybykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgYnVmW2ldID0gMFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuLy8gU1RBVElDIE1FVEhPRFNcbi8vID09PT09PT09PT09PT09XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICdyYXcnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGZ1bmN0aW9uIChzdHIsIGVuY29kaW5nKSB7XG4gIHZhciByZXRcbiAgc3RyID0gc3RyLnRvU3RyaW5nKClcbiAgc3dpdGNoIChlbmNvZGluZyB8fCAndXRmOCcpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgICAgcmV0ID0gc3RyLmxlbmd0aCAvIDJcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgICAgcmV0ID0gdXRmOFRvQnl0ZXMoc3RyKS5sZW5ndGhcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAncmF3JzpcbiAgICAgIHJldCA9IHN0ci5sZW5ndGhcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHJldCA9IGJhc2U2NFRvQnl0ZXMoc3RyKS5sZW5ndGhcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldCA9IHN0ci5sZW5ndGggKiAyXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2RpbmcnKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIChsaXN0LCB0b3RhbExlbmd0aCkge1xuICBhc3NlcnQoaXNBcnJheShsaXN0KSwgJ1VzYWdlOiBCdWZmZXIuY29uY2F0KGxpc3RbLCBsZW5ndGhdKScpXG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoMClcbiAgfSBlbHNlIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBsaXN0WzBdXG4gIH1cblxuICB2YXIgaVxuICBpZiAodG90YWxMZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRvdGFsTGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0b3RhbExlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKHRvdGFsTGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXVxuICAgIGl0ZW0uY29weShidWYsIHBvcylcbiAgICBwb3MgKz0gaXRlbS5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihhKSAmJiBCdWZmZXIuaXNCdWZmZXIoYiksICdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbiAmJiBhW2ldID09PSBiW2ldOyBpKyspIHt9XG4gIGlmIChpICE9PSBsZW4pIHtcbiAgICB4ID0gYVtpXVxuICAgIHkgPSBiW2ldXG4gIH1cbiAgaWYgKHggPCB5KSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHkgPCB4KSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vLyBCVUZGRVIgSU5TVEFOQ0UgTUVUSE9EU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBhc3NlcnQoc3RyTGVuICUgMiA9PT0gMCwgJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhciBieXRlID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGFzc2VydCghaXNOYU4oYnl0ZSksICdJbnZhbGlkIGhleCBzdHJpbmcnKVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICB2YXIgY2hhcnNXcml0dGVuID0gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxuICByZXR1cm4gY2hhcnNXcml0dGVuXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICB2YXIgY2hhcnNXcml0dGVuID0gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbiAgcmV0dXJuIGNoYXJzV3JpdHRlblxufVxuXG5mdW5jdGlvbiBiaW5hcnlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICB2YXIgY2hhcnNXcml0dGVuID0gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG4gIHJldHVybiBjaGFyc1dyaXR0ZW5cbn1cblxuZnVuY3Rpb24gdXRmMTZsZVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgdmFyIGNoYXJzV3JpdHRlbiA9IGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbiAgcmV0dXJuIGNoYXJzV3JpdHRlblxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIFN1cHBvcnQgYm90aCAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpXG4gIC8vIGFuZCB0aGUgbGVnYWN5IChzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBpZiAoIWlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7ICAvLyBsZWdhY3lcbiAgICB2YXIgc3dhcCA9IGVuY29kaW5nXG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBvZmZzZXQgPSBsZW5ndGhcbiAgICBsZW5ndGggPSBzd2FwXG4gIH1cblxuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG4gIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKVxuXG4gIHZhciByZXRcbiAgc3dpdGNoIChlbmNvZGluZykge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgICByZXQgPSBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgICByZXQgPSB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYXNjaWknOlxuICAgICAgcmV0ID0gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdiaW5hcnknOlxuICAgICAgcmV0ID0gYmluYXJ5V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHJldCA9IGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXQgPSB1dGYxNmxlV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZycpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKVxuICBzdGFydCA9IE51bWJlcihzdGFydCkgfHwgMFxuICBlbmQgPSAoZW5kID09PSB1bmRlZmluZWQpID8gc2VsZi5sZW5ndGggOiBOdW1iZXIoZW5kKVxuXG4gIC8vIEZhc3RwYXRoIGVtcHR5IHN0cmluZ3NcbiAgaWYgKGVuZCA9PT0gc3RhcnQpXG4gICAgcmV0dXJuICcnXG5cbiAgdmFyIHJldFxuICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICAgIHJldCA9IGhleFNsaWNlKHNlbGYsIHN0YXJ0LCBlbmQpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIHJldCA9IHV0ZjhTbGljZShzZWxmLCBzdGFydCwgZW5kKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgICByZXQgPSBhc2NpaVNsaWNlKHNlbGYsIHN0YXJ0LCBlbmQpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICByZXQgPSBiaW5hcnlTbGljZShzZWxmLCBzdGFydCwgZW5kKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgcmV0ID0gYmFzZTY0U2xpY2Uoc2VsZiwgc3RhcnQsIGVuZClcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldCA9IHV0ZjE2bGVTbGljZShzZWxmLCBzdGFydCwgZW5kKVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nJylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKGIpIHtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihiKSwgJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKGIpIHtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihiKSwgJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYilcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0X3N0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIHZhciBzb3VyY2UgPSB0aGlzXG5cbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKCF0YXJnZXRfc3RhcnQpIHRhcmdldF9zdGFydCA9IDBcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVyblxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCBzb3VyY2UubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGFzc2VydChlbmQgPj0gc3RhcnQsICdzb3VyY2VFbmQgPCBzb3VyY2VTdGFydCcpXG4gIGFzc2VydCh0YXJnZXRfc3RhcnQgPj0gMCAmJiB0YXJnZXRfc3RhcnQgPCB0YXJnZXQubGVuZ3RoLFxuICAgICAgJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBhc3NlcnQoc3RhcnQgPj0gMCAmJiBzdGFydCA8IHNvdXJjZS5sZW5ndGgsICdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgYXNzZXJ0KGVuZCA+PSAwICYmIGVuZCA8PSBzb3VyY2UubGVuZ3RoLCAnc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aClcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldF9zdGFydCA8IGVuZCAtIHN0YXJ0KVxuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRfc3RhcnQgKyBzdGFydFxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmIChsZW4gPCAxMDAgfHwgIVRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldF9zdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0Ll9zZXQodGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLCB0YXJnZXRfc3RhcnQpXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXMgPSAnJ1xuICB2YXIgdG1wID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgaWYgKGJ1ZltpXSA8PSAweDdGKSB7XG4gICAgICByZXMgKz0gZGVjb2RlVXRmOENoYXIodG1wKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICAgICAgdG1wID0gJydcbiAgICB9IGVsc2Uge1xuICAgICAgdG1wICs9ICclJyArIGJ1ZltpXS50b1N0cmluZygxNilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzICsgZGVjb2RlVXRmOENoYXIodG1wKVxufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGFzY2lpU2xpY2UoYnVmLCBzdGFydCwgZW5kKVxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW47XG4gICAgaWYgKHN0YXJ0IDwgMClcbiAgICAgIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKVxuICAgICAgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KVxuICAgIGVuZCA9IHN0YXJ0XG5cbiAgaWYgKFRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICByZXR1cm4gQnVmZmVyLl9hdWdtZW50KHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCkpXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICB2YXIgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkLCB0cnVlKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47IGkrKykge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICAgIHJldHVybiBuZXdCdWZcbiAgfVxufVxuXG4vLyBgZ2V0YCB3aWxsIGJlIHJlbW92ZWQgaW4gTm9kZSAwLjEzK1xuQnVmZmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2Zmc2V0KSB7XG4gIGNvbnNvbGUubG9nKCcuZ2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC4nKVxuICByZXR1cm4gdGhpcy5yZWFkVUludDgob2Zmc2V0KVxufVxuXG4vLyBgc2V0YCB3aWxsIGJlIHJlbW92ZWQgaW4gTm9kZSAwLjEzK1xuQnVmZmVyLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAodiwgb2Zmc2V0KSB7XG4gIGNvbnNvbGUubG9nKCcuc2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC4nKVxuICByZXR1cm4gdGhpcy53cml0ZVVJbnQ4KHYsIG9mZnNldClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgYXNzZXJ0KG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCwgJ21pc3Npbmcgb2Zmc2V0JylcbiAgICBhc3NlcnQob2Zmc2V0IDwgdGhpcy5sZW5ndGgsICdUcnlpbmcgdG8gcmVhZCBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gIH1cblxuICBpZiAob2Zmc2V0ID49IHRoaXMubGVuZ3RoKVxuICAgIHJldHVyblxuXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuZnVuY3Rpb24gcmVhZFVJbnQxNiAoYnVmLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGFzc2VydCh0eXBlb2YgbGl0dGxlRW5kaWFuID09PSAnYm9vbGVhbicsICdtaXNzaW5nIG9yIGludmFsaWQgZW5kaWFuJylcbiAgICBhc3NlcnQob2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgb2Zmc2V0ICE9PSBudWxsLCAnbWlzc2luZyBvZmZzZXQnKVxuICAgIGFzc2VydChvZmZzZXQgKyAxIDwgYnVmLmxlbmd0aCwgJ1RyeWluZyB0byByZWFkIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbiAgfVxuXG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG4gIGlmIChvZmZzZXQgPj0gbGVuKVxuICAgIHJldHVyblxuXG4gIHZhciB2YWxcbiAgaWYgKGxpdHRsZUVuZGlhbikge1xuICAgIHZhbCA9IGJ1ZltvZmZzZXRdXG4gICAgaWYgKG9mZnNldCArIDEgPCBsZW4pXG4gICAgICB2YWwgfD0gYnVmW29mZnNldCArIDFdIDw8IDhcbiAgfSBlbHNlIHtcbiAgICB2YWwgPSBidWZbb2Zmc2V0XSA8PCA4XG4gICAgaWYgKG9mZnNldCArIDEgPCBsZW4pXG4gICAgICB2YWwgfD0gYnVmW29mZnNldCArIDFdXG4gIH1cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiByZWFkVUludDE2KHRoaXMsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHJlYWRVSW50MTYodGhpcywgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHJlYWRVSW50MzIgKGJ1Ziwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGxpdHRsZUVuZGlhbiA9PT0gJ2Jvb2xlYW4nLCAnbWlzc2luZyBvciBpbnZhbGlkIGVuZGlhbicpXG4gICAgYXNzZXJ0KG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCwgJ21pc3Npbmcgb2Zmc2V0JylcbiAgICBhc3NlcnQob2Zmc2V0ICsgMyA8IGJ1Zi5sZW5ndGgsICdUcnlpbmcgdG8gcmVhZCBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gIH1cblxuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuICBpZiAob2Zmc2V0ID49IGxlbilcbiAgICByZXR1cm5cblxuICB2YXIgdmFsXG4gIGlmIChsaXR0bGVFbmRpYW4pIHtcbiAgICBpZiAob2Zmc2V0ICsgMiA8IGxlbilcbiAgICAgIHZhbCA9IGJ1ZltvZmZzZXQgKyAyXSA8PCAxNlxuICAgIGlmIChvZmZzZXQgKyAxIDwgbGVuKVxuICAgICAgdmFsIHw9IGJ1ZltvZmZzZXQgKyAxXSA8PCA4XG4gICAgdmFsIHw9IGJ1ZltvZmZzZXRdXG4gICAgaWYgKG9mZnNldCArIDMgPCBsZW4pXG4gICAgICB2YWwgPSB2YWwgKyAoYnVmW29mZnNldCArIDNdIDw8IDI0ID4+PiAwKVxuICB9IGVsc2Uge1xuICAgIGlmIChvZmZzZXQgKyAxIDwgbGVuKVxuICAgICAgdmFsID0gYnVmW29mZnNldCArIDFdIDw8IDE2XG4gICAgaWYgKG9mZnNldCArIDIgPCBsZW4pXG4gICAgICB2YWwgfD0gYnVmW29mZnNldCArIDJdIDw8IDhcbiAgICBpZiAob2Zmc2V0ICsgMyA8IGxlbilcbiAgICAgIHZhbCB8PSBidWZbb2Zmc2V0ICsgM11cbiAgICB2YWwgPSB2YWwgKyAoYnVmW29mZnNldF0gPDwgMjQgPj4+IDApXG4gIH1cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiByZWFkVUludDMyKHRoaXMsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHJlYWRVSW50MzIodGhpcywgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgYXNzZXJ0KG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCxcbiAgICAgICAgJ21pc3Npbmcgb2Zmc2V0JylcbiAgICBhc3NlcnQob2Zmc2V0IDwgdGhpcy5sZW5ndGgsICdUcnlpbmcgdG8gcmVhZCBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gIH1cblxuICBpZiAob2Zmc2V0ID49IHRoaXMubGVuZ3RoKVxuICAgIHJldHVyblxuXG4gIHZhciBuZWcgPSB0aGlzW29mZnNldF0gJiAweDgwXG4gIGlmIChuZWcpXG4gICAgcmV0dXJuICgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMVxuICBlbHNlXG4gICAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5mdW5jdGlvbiByZWFkSW50MTYgKGJ1Ziwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGxpdHRsZUVuZGlhbiA9PT0gJ2Jvb2xlYW4nLCAnbWlzc2luZyBvciBpbnZhbGlkIGVuZGlhbicpXG4gICAgYXNzZXJ0KG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCwgJ21pc3Npbmcgb2Zmc2V0JylcbiAgICBhc3NlcnQob2Zmc2V0ICsgMSA8IGJ1Zi5sZW5ndGgsICdUcnlpbmcgdG8gcmVhZCBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gIH1cblxuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuICBpZiAob2Zmc2V0ID49IGxlbilcbiAgICByZXR1cm5cblxuICB2YXIgdmFsID0gcmVhZFVJbnQxNihidWYsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCB0cnVlKVxuICB2YXIgbmVnID0gdmFsICYgMHg4MDAwXG4gIGlmIChuZWcpXG4gICAgcmV0dXJuICgweGZmZmYgLSB2YWwgKyAxKSAqIC0xXG4gIGVsc2VcbiAgICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gcmVhZEludDE2KHRoaXMsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiAob2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gcmVhZEludDE2KHRoaXMsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiByZWFkSW50MzIgKGJ1Ziwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGxpdHRsZUVuZGlhbiA9PT0gJ2Jvb2xlYW4nLCAnbWlzc2luZyBvciBpbnZhbGlkIGVuZGlhbicpXG4gICAgYXNzZXJ0KG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCwgJ21pc3Npbmcgb2Zmc2V0JylcbiAgICBhc3NlcnQob2Zmc2V0ICsgMyA8IGJ1Zi5sZW5ndGgsICdUcnlpbmcgdG8gcmVhZCBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gIH1cblxuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuICBpZiAob2Zmc2V0ID49IGxlbilcbiAgICByZXR1cm5cblxuICB2YXIgdmFsID0gcmVhZFVJbnQzMihidWYsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCB0cnVlKVxuICB2YXIgbmVnID0gdmFsICYgMHg4MDAwMDAwMFxuICBpZiAobmVnKVxuICAgIHJldHVybiAoMHhmZmZmZmZmZiAtIHZhbCArIDEpICogLTFcbiAgZWxzZVxuICAgIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiByZWFkSW50MzIodGhpcywgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiByZWFkSW50MzIodGhpcywgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHJlYWRGbG9hdCAoYnVmLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGFzc2VydCh0eXBlb2YgbGl0dGxlRW5kaWFuID09PSAnYm9vbGVhbicsICdtaXNzaW5nIG9yIGludmFsaWQgZW5kaWFuJylcbiAgICBhc3NlcnQob2Zmc2V0ICsgMyA8IGJ1Zi5sZW5ndGgsICdUcnlpbmcgdG8gcmVhZCBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gIH1cblxuICByZXR1cm4gaWVlZTc1NC5yZWFkKGJ1Ziwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHJlYWRGbG9hdCh0aGlzLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHJlYWRGbG9hdCh0aGlzLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gcmVhZERvdWJsZSAoYnVmLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGFzc2VydCh0eXBlb2YgbGl0dGxlRW5kaWFuID09PSAnYm9vbGVhbicsICdtaXNzaW5nIG9yIGludmFsaWQgZW5kaWFuJylcbiAgICBhc3NlcnQob2Zmc2V0ICsgNyA8IGJ1Zi5sZW5ndGgsICdUcnlpbmcgdG8gcmVhZCBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gIH1cblxuICByZXR1cm4gaWVlZTc1NC5yZWFkKGJ1Ziwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiByZWFkRG91YmxlKHRoaXMsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHJlYWREb3VibGUodGhpcywgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgYXNzZXJ0KHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwsICdtaXNzaW5nIHZhbHVlJylcbiAgICBhc3NlcnQob2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgb2Zmc2V0ICE9PSBudWxsLCAnbWlzc2luZyBvZmZzZXQnKVxuICAgIGFzc2VydChvZmZzZXQgPCB0aGlzLmxlbmd0aCwgJ3RyeWluZyB0byB3cml0ZSBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gICAgdmVyaWZ1aW50KHZhbHVlLCAweGZmKVxuICB9XG5cbiAgaWYgKG9mZnNldCA+PSB0aGlzLmxlbmd0aCkgcmV0dXJuXG5cbiAgdGhpc1tvZmZzZXRdID0gdmFsdWVcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gd3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgYXNzZXJ0KHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwsICdtaXNzaW5nIHZhbHVlJylcbiAgICBhc3NlcnQodHlwZW9mIGxpdHRsZUVuZGlhbiA9PT0gJ2Jvb2xlYW4nLCAnbWlzc2luZyBvciBpbnZhbGlkIGVuZGlhbicpXG4gICAgYXNzZXJ0KG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCwgJ21pc3Npbmcgb2Zmc2V0JylcbiAgICBhc3NlcnQob2Zmc2V0ICsgMSA8IGJ1Zi5sZW5ndGgsICd0cnlpbmcgdG8gd3JpdGUgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxuICAgIHZlcmlmdWludCh2YWx1ZSwgMHhmZmZmKVxuICB9XG5cbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcbiAgaWYgKG9mZnNldCA+PSBsZW4pXG4gICAgcmV0dXJuXG5cbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihsZW4gLSBvZmZzZXQsIDIpOyBpIDwgajsgaSsrKSB7XG4gICAgYnVmW29mZnNldCArIGldID1cbiAgICAgICAgKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgICAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBhc3NlcnQodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCwgJ21pc3NpbmcgdmFsdWUnKVxuICAgIGFzc2VydCh0eXBlb2YgbGl0dGxlRW5kaWFuID09PSAnYm9vbGVhbicsICdtaXNzaW5nIG9yIGludmFsaWQgZW5kaWFuJylcbiAgICBhc3NlcnQob2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgb2Zmc2V0ICE9PSBudWxsLCAnbWlzc2luZyBvZmZzZXQnKVxuICAgIGFzc2VydChvZmZzZXQgKyAzIDwgYnVmLmxlbmd0aCwgJ3RyeWluZyB0byB3cml0ZSBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gICAgdmVyaWZ1aW50KHZhbHVlLCAweGZmZmZmZmZmKVxuICB9XG5cbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcbiAgaWYgKG9mZnNldCA+PSBsZW4pXG4gICAgcmV0dXJuXG5cbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihsZW4gLSBvZmZzZXQsIDQpOyBpIDwgajsgaSsrKSB7XG4gICAgYnVmW29mZnNldCArIGldID1cbiAgICAgICAgKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgYXNzZXJ0KHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwsICdtaXNzaW5nIHZhbHVlJylcbiAgICBhc3NlcnQob2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgb2Zmc2V0ICE9PSBudWxsLCAnbWlzc2luZyBvZmZzZXQnKVxuICAgIGFzc2VydChvZmZzZXQgPCB0aGlzLmxlbmd0aCwgJ1RyeWluZyB0byB3cml0ZSBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gICAgdmVyaWZzaW50KHZhbHVlLCAweDdmLCAtMHg4MClcbiAgfVxuXG4gIGlmIChvZmZzZXQgPj0gdGhpcy5sZW5ndGgpXG4gICAgcmV0dXJuXG5cbiAgaWYgKHZhbHVlID49IDApXG4gICAgdGhpcy53cml0ZVVJbnQ4KHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KVxuICBlbHNlXG4gICAgdGhpcy53cml0ZVVJbnQ4KDB4ZmYgKyB2YWx1ZSArIDEsIG9mZnNldCwgbm9Bc3NlcnQpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgYXNzZXJ0KHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwsICdtaXNzaW5nIHZhbHVlJylcbiAgICBhc3NlcnQodHlwZW9mIGxpdHRsZUVuZGlhbiA9PT0gJ2Jvb2xlYW4nLCAnbWlzc2luZyBvciBpbnZhbGlkIGVuZGlhbicpXG4gICAgYXNzZXJ0KG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCwgJ21pc3Npbmcgb2Zmc2V0JylcbiAgICBhc3NlcnQob2Zmc2V0ICsgMSA8IGJ1Zi5sZW5ndGgsICdUcnlpbmcgdG8gd3JpdGUgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxuICAgIHZlcmlmc2ludCh2YWx1ZSwgMHg3ZmZmLCAtMHg4MDAwKVxuICB9XG5cbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcbiAgaWYgKG9mZnNldCA+PSBsZW4pXG4gICAgcmV0dXJuXG5cbiAgaWYgKHZhbHVlID49IDApXG4gICAgd3JpdGVVSW50MTYoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KVxuICBlbHNlXG4gICAgd3JpdGVVSW50MTYoYnVmLCAweGZmZmYgKyB2YWx1ZSArIDEsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBhc3NlcnQodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCwgJ21pc3NpbmcgdmFsdWUnKVxuICAgIGFzc2VydCh0eXBlb2YgbGl0dGxlRW5kaWFuID09PSAnYm9vbGVhbicsICdtaXNzaW5nIG9yIGludmFsaWQgZW5kaWFuJylcbiAgICBhc3NlcnQob2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgb2Zmc2V0ICE9PSBudWxsLCAnbWlzc2luZyBvZmZzZXQnKVxuICAgIGFzc2VydChvZmZzZXQgKyAzIDwgYnVmLmxlbmd0aCwgJ1RyeWluZyB0byB3cml0ZSBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG4gICAgdmVyaWZzaW50KHZhbHVlLCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgfVxuXG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG4gIGlmIChvZmZzZXQgPj0gbGVuKVxuICAgIHJldHVyblxuXG4gIGlmICh2YWx1ZSA+PSAwKVxuICAgIHdyaXRlVUludDMyKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydClcbiAgZWxzZVxuICAgIHdyaXRlVUludDMyKGJ1ZiwgMHhmZmZmZmZmZiArIHZhbHVlICsgMSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGFzc2VydCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsLCAnbWlzc2luZyB2YWx1ZScpXG4gICAgYXNzZXJ0KHR5cGVvZiBsaXR0bGVFbmRpYW4gPT09ICdib29sZWFuJywgJ21pc3Npbmcgb3IgaW52YWxpZCBlbmRpYW4nKVxuICAgIGFzc2VydChvZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBvZmZzZXQgIT09IG51bGwsICdtaXNzaW5nIG9mZnNldCcpXG4gICAgYXNzZXJ0KG9mZnNldCArIDMgPCBidWYubGVuZ3RoLCAnVHJ5aW5nIHRvIHdyaXRlIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbiAgICB2ZXJpZklFRUU3NTQodmFsdWUsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG5cbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcbiAgaWYgKG9mZnNldCA+PSBsZW4pXG4gICAgcmV0dXJuXG5cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGFzc2VydCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsLCAnbWlzc2luZyB2YWx1ZScpXG4gICAgYXNzZXJ0KHR5cGVvZiBsaXR0bGVFbmRpYW4gPT09ICdib29sZWFuJywgJ21pc3Npbmcgb3IgaW52YWxpZCBlbmRpYW4nKVxuICAgIGFzc2VydChvZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBvZmZzZXQgIT09IG51bGwsICdtaXNzaW5nIG9mZnNldCcpXG4gICAgYXNzZXJ0KG9mZnNldCArIDcgPCBidWYubGVuZ3RoLFxuICAgICAgICAnVHJ5aW5nIHRvIHdyaXRlIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbiAgICB2ZXJpZklFRUU3NTQodmFsdWUsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cblxuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuICBpZiAob2Zmc2V0ID49IGxlbilcbiAgICByZXR1cm5cblxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGZpbGwodmFsdWUsIHN0YXJ0PTAsIGVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gIGlmICghdmFsdWUpIHZhbHVlID0gMFxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQpIGVuZCA9IHRoaXMubGVuZ3RoXG5cbiAgYXNzZXJ0KGVuZCA+PSBzdGFydCwgJ2VuZCA8IHN0YXJ0JylcblxuICAvLyBGaWxsIDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVyblxuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gIGFzc2VydChzdGFydCA+PSAwICYmIHN0YXJ0IDwgdGhpcy5sZW5ndGgsICdzdGFydCBvdXQgb2YgYm91bmRzJylcbiAgYXNzZXJ0KGVuZCA+PSAwICYmIGVuZCA8PSB0aGlzLmxlbmd0aCwgJ2VuZCBvdXQgb2YgYm91bmRzJylcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHRoaXNbaV0gPSB2YWx1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSB1dGY4VG9CeXRlcyh2YWx1ZS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB0aGlzW2ldID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvdXQgPSBbXVxuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG91dFtpXSA9IHRvSGV4KHRoaXNbaV0pXG4gICAgaWYgKGkgPT09IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMpIHtcbiAgICAgIG91dFtpICsgMV0gPSAnLi4uJ1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBvdXQuam9pbignICcpICsgJz4nXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBgQXJyYXlCdWZmZXJgIHdpdGggdGhlICpjb3BpZWQqIG1lbW9yeSBvZiB0aGUgYnVmZmVyIGluc3RhbmNlLlxuICogQWRkZWQgaW4gTm9kZSAwLjEyLiBPbmx5IGF2YWlsYWJsZSBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgQXJyYXlCdWZmZXIuXG4gKi9cbkJ1ZmZlci5wcm90b3R5cGUudG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChUWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgICByZXR1cm4gKG5ldyBCdWZmZXIodGhpcykpLmJ1ZmZlclxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgpXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnVmLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGJ1ZltpXSA9IHRoaXNbaV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBidWYuYnVmZmVyXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignQnVmZmVyLnRvQXJyYXlCdWZmZXIgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInKVxuICB9XG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIEJQID0gQnVmZmVyLnByb3RvdHlwZVxuXG4vKipcbiAqIEF1Z21lbnQgYSBVaW50OEFycmF5ICppbnN0YW5jZSogKG5vdCB0aGUgVWludDhBcnJheSBjbGFzcyEpIHdpdGggQnVmZmVyIG1ldGhvZHNcbiAqL1xuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX2lzQnVmZmVyID0gdHJ1ZVxuXG4gIC8vIHNhdmUgcmVmZXJlbmNlIHRvIG9yaWdpbmFsIFVpbnQ4QXJyYXkgZ2V0L3NldCBtZXRob2RzIGJlZm9yZSBvdmVyd3JpdGluZ1xuICBhcnIuX2dldCA9IGFyci5nZXRcbiAgYXJyLl9zZXQgPSBhcnIuc2V0XG5cbiAgLy8gZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIG5vZGUgMC4xMytcbiAgYXJyLmdldCA9IEJQLmdldFxuICBhcnIuc2V0ID0gQlAuc2V0XG5cbiAgYXJyLndyaXRlID0gQlAud3JpdGVcbiAgYXJyLnRvU3RyaW5nID0gQlAudG9TdHJpbmdcbiAgYXJyLnRvTG9jYWxlU3RyaW5nID0gQlAudG9TdHJpbmdcbiAgYXJyLnRvSlNPTiA9IEJQLnRvSlNPTlxuICBhcnIuZXF1YWxzID0gQlAuZXF1YWxzXG4gIGFyci5jb21wYXJlID0gQlAuY29tcGFyZVxuICBhcnIuY29weSA9IEJQLmNvcHlcbiAgYXJyLnNsaWNlID0gQlAuc2xpY2VcbiAgYXJyLnJlYWRVSW50OCA9IEJQLnJlYWRVSW50OFxuICBhcnIucmVhZFVJbnQxNkxFID0gQlAucmVhZFVJbnQxNkxFXG4gIGFyci5yZWFkVUludDE2QkUgPSBCUC5yZWFkVUludDE2QkVcbiAgYXJyLnJlYWRVSW50MzJMRSA9IEJQLnJlYWRVSW50MzJMRVxuICBhcnIucmVhZFVJbnQzMkJFID0gQlAucmVhZFVJbnQzMkJFXG4gIGFyci5yZWFkSW50OCA9IEJQLnJlYWRJbnQ4XG4gIGFyci5yZWFkSW50MTZMRSA9IEJQLnJlYWRJbnQxNkxFXG4gIGFyci5yZWFkSW50MTZCRSA9IEJQLnJlYWRJbnQxNkJFXG4gIGFyci5yZWFkSW50MzJMRSA9IEJQLnJlYWRJbnQzMkxFXG4gIGFyci5yZWFkSW50MzJCRSA9IEJQLnJlYWRJbnQzMkJFXG4gIGFyci5yZWFkRmxvYXRMRSA9IEJQLnJlYWRGbG9hdExFXG4gIGFyci5yZWFkRmxvYXRCRSA9IEJQLnJlYWRGbG9hdEJFXG4gIGFyci5yZWFkRG91YmxlTEUgPSBCUC5yZWFkRG91YmxlTEVcbiAgYXJyLnJlYWREb3VibGVCRSA9IEJQLnJlYWREb3VibGVCRVxuICBhcnIud3JpdGVVSW50OCA9IEJQLndyaXRlVUludDhcbiAgYXJyLndyaXRlVUludDE2TEUgPSBCUC53cml0ZVVJbnQxNkxFXG4gIGFyci53cml0ZVVJbnQxNkJFID0gQlAud3JpdGVVSW50MTZCRVxuICBhcnIud3JpdGVVSW50MzJMRSA9IEJQLndyaXRlVUludDMyTEVcbiAgYXJyLndyaXRlVUludDMyQkUgPSBCUC53cml0ZVVJbnQzMkJFXG4gIGFyci53cml0ZUludDggPSBCUC53cml0ZUludDhcbiAgYXJyLndyaXRlSW50MTZMRSA9IEJQLndyaXRlSW50MTZMRVxuICBhcnIud3JpdGVJbnQxNkJFID0gQlAud3JpdGVJbnQxNkJFXG4gIGFyci53cml0ZUludDMyTEUgPSBCUC53cml0ZUludDMyTEVcbiAgYXJyLndyaXRlSW50MzJCRSA9IEJQLndyaXRlSW50MzJCRVxuICBhcnIud3JpdGVGbG9hdExFID0gQlAud3JpdGVGbG9hdExFXG4gIGFyci53cml0ZUZsb2F0QkUgPSBCUC53cml0ZUZsb2F0QkVcbiAgYXJyLndyaXRlRG91YmxlTEUgPSBCUC53cml0ZURvdWJsZUxFXG4gIGFyci53cml0ZURvdWJsZUJFID0gQlAud3JpdGVEb3VibGVCRVxuICBhcnIuZmlsbCA9IEJQLmZpbGxcbiAgYXJyLmluc3BlY3QgPSBCUC5pbnNwZWN0XG4gIGFyci50b0FycmF5QnVmZmVyID0gQlAudG9BcnJheUJ1ZmZlclxuXG4gIHJldHVybiBhcnJcbn1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtel0vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkgKHN1YmplY3QpIHtcbiAgcmV0dXJuIChBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChzdWJqZWN0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdWJqZWN0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICB9KShzdWJqZWN0KVxufVxuXG5mdW5jdGlvbiBpc0FycmF5aXNoIChzdWJqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5KHN1YmplY3QpIHx8IEJ1ZmZlci5pc0J1ZmZlcihzdWJqZWN0KSB8fFxuICAgICAgc3ViamVjdCAmJiB0eXBlb2Ygc3ViamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBzdWJqZWN0Lmxlbmd0aCA9PT0gJ251bWJlcidcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBiID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBpZiAoYiA8PSAweDdGKSB7XG4gICAgICBieXRlQXJyYXkucHVzaChiKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhcnQgPSBpXG4gICAgICBpZiAoYiA+PSAweEQ4MDAgJiYgYiA8PSAweERGRkYpIGkrK1xuICAgICAgdmFyIGggPSBlbmNvZGVVUklDb21wb25lbnQoc3RyLnNsaWNlKHN0YXJ0LCBpKzEpKS5zdWJzdHIoMSkuc3BsaXQoJyUnKVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGJ5dGVBcnJheS5wdXNoKHBhcnNlSW50KGhbal0sIDE2KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoc3RyKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSlcbiAgICAgIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gZGVjb2RlVXRmOENoYXIgKHN0cikge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgweEZGRkQpIC8vIFVURiA4IGludmFsaWQgY2hhclxuICB9XG59XG5cbi8qXG4gKiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZSBpcyBhIHZhbGlkIGludGVnZXIuIFRoaXMgbWVhbnMgdGhhdCBpdFxuICogaXMgbm9uLW5lZ2F0aXZlLiBJdCBoYXMgbm8gZnJhY3Rpb25hbCBjb21wb25lbnQgYW5kIHRoYXQgaXQgZG9lcyBub3RcbiAqIGV4Y2VlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLlxuICovXG5mdW5jdGlvbiB2ZXJpZnVpbnQgKHZhbHVlLCBtYXgpIHtcbiAgYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsICdjYW5ub3Qgd3JpdGUgYSBub24tbnVtYmVyIGFzIGEgbnVtYmVyJylcbiAgYXNzZXJ0KHZhbHVlID49IDAsICdzcGVjaWZpZWQgYSBuZWdhdGl2ZSB2YWx1ZSBmb3Igd3JpdGluZyBhbiB1bnNpZ25lZCB2YWx1ZScpXG4gIGFzc2VydCh2YWx1ZSA8PSBtYXgsICd2YWx1ZSBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIHZhbHVlIGZvciB0eXBlJylcbiAgYXNzZXJ0KE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZSwgJ3ZhbHVlIGhhcyBhIGZyYWN0aW9uYWwgY29tcG9uZW50Jylcbn1cblxuZnVuY3Rpb24gdmVyaWZzaW50ICh2YWx1ZSwgbWF4LCBtaW4pIHtcbiAgYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsICdjYW5ub3Qgd3JpdGUgYSBub24tbnVtYmVyIGFzIGEgbnVtYmVyJylcbiAgYXNzZXJ0KHZhbHVlIDw9IG1heCwgJ3ZhbHVlIGxhcmdlciB0aGFuIG1heGltdW0gYWxsb3dlZCB2YWx1ZScpXG4gIGFzc2VydCh2YWx1ZSA+PSBtaW4sICd2YWx1ZSBzbWFsbGVyIHRoYW4gbWluaW11bSBhbGxvd2VkIHZhbHVlJylcbiAgYXNzZXJ0KE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZSwgJ3ZhbHVlIGhhcyBhIGZyYWN0aW9uYWwgY29tcG9uZW50Jylcbn1cblxuZnVuY3Rpb24gdmVyaWZJRUVFNzU0ICh2YWx1ZSwgbWF4LCBtaW4pIHtcbiAgYXNzZXJ0KHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicsICdjYW5ub3Qgd3JpdGUgYSBub24tbnVtYmVyIGFzIGEgbnVtYmVyJylcbiAgYXNzZXJ0KHZhbHVlIDw9IG1heCwgJ3ZhbHVlIGxhcmdlciB0aGFuIG1heGltdW0gYWxsb3dlZCB2YWx1ZScpXG4gIGFzc2VydCh2YWx1ZSA+PSBtaW4sICd2YWx1ZSBzbWFsbGVyIHRoYW4gbWluaW11bSBhbGxvd2VkIHZhbHVlJylcbn1cblxuZnVuY3Rpb24gYXNzZXJ0ICh0ZXN0LCBtZXNzYWdlKSB7XG4gIGlmICghdGVzdCkgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgfHwgJ0ZhaWxlZCBhc3NlcnRpb24nKVxufVxuIiwidmFyIGxvb2t1cCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxuOyhmdW5jdGlvbiAoZXhwb3J0cykge1xuXHQndXNlIHN0cmljdCc7XG5cbiAgdmFyIEFyciA9ICh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgPyBVaW50OEFycmF5XG4gICAgOiBBcnJheVxuXG5cdHZhciBQTFVTICAgPSAnKycuY2hhckNvZGVBdCgwKVxuXHR2YXIgU0xBU0ggID0gJy8nLmNoYXJDb2RlQXQoMClcblx0dmFyIE5VTUJFUiA9ICcwJy5jaGFyQ29kZUF0KDApXG5cdHZhciBMT1dFUiAgPSAnYScuY2hhckNvZGVBdCgwKVxuXHR2YXIgVVBQRVIgID0gJ0EnLmNoYXJDb2RlQXQoMClcblxuXHRmdW5jdGlvbiBkZWNvZGUgKGVsdCkge1xuXHRcdHZhciBjb2RlID0gZWx0LmNoYXJDb2RlQXQoMClcblx0XHRpZiAoY29kZSA9PT0gUExVUylcblx0XHRcdHJldHVybiA2MiAvLyAnKydcblx0XHRpZiAoY29kZSA9PT0gU0xBU0gpXG5cdFx0XHRyZXR1cm4gNjMgLy8gJy8nXG5cdFx0aWYgKGNvZGUgPCBOVU1CRVIpXG5cdFx0XHRyZXR1cm4gLTEgLy9ubyBtYXRjaFxuXHRcdGlmIChjb2RlIDwgTlVNQkVSICsgMTApXG5cdFx0XHRyZXR1cm4gY29kZSAtIE5VTUJFUiArIDI2ICsgMjZcblx0XHRpZiAoY29kZSA8IFVQUEVSICsgMjYpXG5cdFx0XHRyZXR1cm4gY29kZSAtIFVQUEVSXG5cdFx0aWYgKGNvZGUgPCBMT1dFUiArIDI2KVxuXHRcdFx0cmV0dXJuIGNvZGUgLSBMT1dFUiArIDI2XG5cdH1cblxuXHRmdW5jdGlvbiBiNjRUb0J5dGVBcnJheSAoYjY0KSB7XG5cdFx0dmFyIGksIGosIGwsIHRtcCwgcGxhY2VIb2xkZXJzLCBhcnJcblxuXHRcdGlmIChiNjQubGVuZ3RoICUgNCA+IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG5cdFx0fVxuXG5cdFx0Ly8gdGhlIG51bWJlciBvZiBlcXVhbCBzaWducyAocGxhY2UgaG9sZGVycylcblx0XHQvLyBpZiB0aGVyZSBhcmUgdHdvIHBsYWNlaG9sZGVycywgdGhhbiB0aGUgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIGl0XG5cdFx0Ly8gcmVwcmVzZW50IG9uZSBieXRlXG5cdFx0Ly8gaWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHRocmVlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IHJlcHJlc2VudCAyIGJ5dGVzXG5cdFx0Ly8gdGhpcyBpcyBqdXN0IGEgY2hlYXAgaGFjayB0byBub3QgZG8gaW5kZXhPZiB0d2ljZVxuXHRcdHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cdFx0cGxhY2VIb2xkZXJzID0gJz0nID09PSBiNjQuY2hhckF0KGxlbiAtIDIpID8gMiA6ICc9JyA9PT0gYjY0LmNoYXJBdChsZW4gLSAxKSA/IDEgOiAwXG5cblx0XHQvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcblx0XHRhcnIgPSBuZXcgQXJyKGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuXHRcdC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcblx0XHRsID0gcGxhY2VIb2xkZXJzID4gMCA/IGI2NC5sZW5ndGggLSA0IDogYjY0Lmxlbmd0aFxuXG5cdFx0dmFyIEwgPSAwXG5cblx0XHRmdW5jdGlvbiBwdXNoICh2KSB7XG5cdFx0XHRhcnJbTCsrXSA9IHZcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGw7IGkgKz0gNCwgaiArPSAzKSB7XG5cdFx0XHR0bXAgPSAoZGVjb2RlKGI2NC5jaGFyQXQoaSkpIDw8IDE4KSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpIDw8IDEyKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMikpIDw8IDYpIHwgZGVjb2RlKGI2NC5jaGFyQXQoaSArIDMpKVxuXHRcdFx0cHVzaCgodG1wICYgMHhGRjAwMDApID4+IDE2KVxuXHRcdFx0cHVzaCgodG1wICYgMHhGRjAwKSA+PiA4KVxuXHRcdFx0cHVzaCh0bXAgJiAweEZGKVxuXHRcdH1cblxuXHRcdGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMikgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDEpKSA+PiA0KVxuXHRcdFx0cHVzaCh0bXAgJiAweEZGKVxuXHRcdH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG5cdFx0XHR0bXAgPSAoZGVjb2RlKGI2NC5jaGFyQXQoaSkpIDw8IDEwKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpIDw8IDQpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAyKSkgPj4gMilcblx0XHRcdHB1c2goKHRtcCA+PiA4KSAmIDB4RkYpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFyclxuXHR9XG5cblx0ZnVuY3Rpb24gdWludDhUb0Jhc2U2NCAodWludDgpIHtcblx0XHR2YXIgaSxcblx0XHRcdGV4dHJhQnl0ZXMgPSB1aW50OC5sZW5ndGggJSAzLCAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuXHRcdFx0b3V0cHV0ID0gXCJcIixcblx0XHRcdHRlbXAsIGxlbmd0aFxuXG5cdFx0ZnVuY3Rpb24gZW5jb2RlIChudW0pIHtcblx0XHRcdHJldHVybiBsb29rdXAuY2hhckF0KG51bSlcblx0XHR9XG5cblx0XHRmdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuXHRcdFx0cmV0dXJuIGVuY29kZShudW0gPj4gMTggJiAweDNGKSArIGVuY29kZShudW0gPj4gMTIgJiAweDNGKSArIGVuY29kZShudW0gPj4gNiAmIDB4M0YpICsgZW5jb2RlKG51bSAmIDB4M0YpXG5cdFx0fVxuXG5cdFx0Ly8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuXHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IHVpbnQ4Lmxlbmd0aCAtIGV4dHJhQnl0ZXM7IGkgPCBsZW5ndGg7IGkgKz0gMykge1xuXHRcdFx0dGVtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcblx0XHRcdG91dHB1dCArPSB0cmlwbGV0VG9CYXNlNjQodGVtcClcblx0XHR9XG5cblx0XHQvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG5cdFx0c3dpdGNoIChleHRyYUJ5dGVzKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHRlbXAgPSB1aW50OFt1aW50OC5sZW5ndGggLSAxXVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKHRlbXAgPj4gMilcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA8PCA0KSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSAnPT0nXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdHRlbXAgPSAodWludDhbdWludDgubGVuZ3RoIC0gMl0gPDwgOCkgKyAodWludDhbdWludDgubGVuZ3RoIC0gMV0pXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUodGVtcCA+PiAxMClcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA+PiA0KSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUoKHRlbXAgPDwgMikgJiAweDNGKVxuXHRcdFx0XHRvdXRwdXQgKz0gJz0nXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG5cblx0ZXhwb3J0cy50b0J5dGVBcnJheSA9IGI2NFRvQnl0ZUFycmF5XG5cdGV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IHVpbnQ4VG9CYXNlNjRcbn0odHlwZW9mIGV4cG9ydHMgPT09ICd1bmRlZmluZWQnID8gKHRoaXMuYmFzZTY0anMgPSB7fSkgOiBleHBvcnRzKSlcbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sXG4gICAgICBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxLFxuICAgICAgZU1heCA9ICgxIDw8IGVMZW4pIC0gMSxcbiAgICAgIGVCaWFzID0gZU1heCA+PiAxLFxuICAgICAgbkJpdHMgPSAtNyxcbiAgICAgIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMCxcbiAgICAgIGQgPSBpc0xFID8gLTEgOiAxLFxuICAgICAgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXTtcblxuICBpICs9IGQ7XG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSk7XG4gIHMgPj49ICgtbkJpdHMpO1xuICBuQml0cyArPSBlTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KTtcblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKTtcbiAgZSA+Pj0gKC1uQml0cyk7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpO1xuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpO1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKTtcbn07XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbihidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgYyxcbiAgICAgIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDEsXG4gICAgICBlTWF4ID0gKDEgPDwgZUxlbikgLSAxLFxuICAgICAgZUJpYXMgPSBlTWF4ID4+IDEsXG4gICAgICBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMCksXG4gICAgICBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSksXG4gICAgICBkID0gaXNMRSA/IDEgOiAtMSxcbiAgICAgIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDA7XG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7XG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjg7XG59O1xuIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG5wcm9jZXNzLm5leHRUaWNrID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2FuU2V0SW1tZWRpYXRlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAmJiB3aW5kb3cuc2V0SW1tZWRpYXRlO1xuICAgIHZhciBjYW5Qb3N0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAmJiB3aW5kb3cucG9zdE1lc3NhZ2UgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXJcbiAgICA7XG5cbiAgICBpZiAoY2FuU2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZikgeyByZXR1cm4gd2luZG93LnNldEltbWVkaWF0ZShmKSB9O1xuICAgIH1cblxuICAgIGlmIChjYW5Qb3N0KSB7XG4gICAgICAgIHZhciBxdWV1ZSA9IFtdO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGV2LnNvdXJjZTtcbiAgICAgICAgICAgIGlmICgoc291cmNlID09PSB3aW5kb3cgfHwgc291cmNlID09PSBudWxsKSAmJiBldi5kYXRhID09PSAncHJvY2Vzcy10aWNrJykge1xuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dFRpY2soZm4pIHtcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goZm4pO1xuICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKCdwcm9jZXNzLXRpY2snLCAnKicpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0VGljayhmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xufSkoKTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59XG5cbi8vIFRPRE8oc2h0eWxtYW4pXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNCdWZmZXIoYXJnKSB7XG4gIHJldHVybiBhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCdcbiAgICAmJiB0eXBlb2YgYXJnLmNvcHkgPT09ICdmdW5jdGlvbidcbiAgICAmJiB0eXBlb2YgYXJnLmZpbGwgPT09ICdmdW5jdGlvbidcbiAgICAmJiB0eXBlb2YgYXJnLnJlYWRVSW50OCA9PT0gJ2Z1bmN0aW9uJztcbn0iLCIoZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cblxudmFyIGRlYnVncyA9IHt9O1xudmFyIGRlYnVnRW52aXJvbjtcbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpXG4gICAgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnXFxcXGInICsgc2V0ICsgJ1xcXFxiJywgJ2knKS50ZXN0KGRlYnVnRW52aXJvbikpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gaXNPYmplY3QoZSkgJiZcbiAgICAgIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IHJlcXVpcmUoJy4vc3VwcG9ydC9pc0J1ZmZlcicpO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLFxuICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLy8gMjYgRmViIDE2OjE5OjM0XG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldE1pbnV0ZXMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn1cblxuXG4vLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5leHBvcnRzLmxvZyA9IGZ1bmN0aW9uKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuXG4gKlxuICogVGhlIEZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0cyBmcm9tIGxhbmcuanMgcmV3cml0dGVuIGFzIGEgc3RhbmRhbG9uZVxuICogZnVuY3Rpb24gKG5vdCBvbiBGdW5jdGlvbi5wcm90b3R5cGUpLiBOT1RFOiBJZiB0aGlzIGZpbGUgaXMgdG8gYmUgbG9hZGVkXG4gKiBkdXJpbmcgYm9vdHN0cmFwcGluZyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB1c2luZyBzb21lIG5hdGl2ZVxuICogZnVuY3Rpb25zIGFzIHByb3RvdHlwZSBzZXR1cCB1c2luZyBub3JtYWwgSmF2YVNjcmlwdCBkb2VzIG5vdCB3b3JrIGFzXG4gKiBleHBlY3RlZCBkdXJpbmcgYm9vdHN0cmFwcGluZyAoc2VlIG1pcnJvci5qcyBpbiByMTE0OTAzKS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIHRvIGluaGVyaXQgdGhlXG4gKiAgICAgcHJvdG90eXBlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGluaGVyaXQgcHJvdG90eXBlIGZyb20uXG4gKi9cbmV4cG9ydHMuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLl9leHRlbmQgPSBmdW5jdGlvbihvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoXCJKa3BSMkZcIiksdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KSIsIihmdW5jdGlvbiAoc2lub25DaGFpKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAvLyBNb2R1bGUgc3lzdGVtcyBtYWdpYyBkYW5jZS5cblxuICAgIGlmICh0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgLy8gTm9kZUpTXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gc2lub25DaGFpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgLy8gQU1EXG4gICAgICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2lub25DaGFpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlciBlbnZpcm9ubWVudCAodXN1YWxseSA8c2NyaXB0PiB0YWcpOiBwbHVnIGluIHRvIGdsb2JhbCBjaGFpIGluc3RhbmNlIGRpcmVjdGx5LlxuICAgICAgICBjaGFpLnVzZShzaW5vbkNoYWkpO1xuICAgIH1cbn0oZnVuY3Rpb24gc2lub25DaGFpKGNoYWksIHV0aWxzKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbiAgICBmdW5jdGlvbiBpc1NweShwdXRhdGl2ZVNweSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHB1dGF0aXZlU3B5ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgIHR5cGVvZiBwdXRhdGl2ZVNweS5nZXRDYWxsID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgIHR5cGVvZiBwdXRhdGl2ZVNweS5jYWxsZWRXaXRoRXhhY3RseSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRpbWVzSW5Xb3Jkcyhjb3VudCkge1xuICAgICAgICByZXR1cm4gY291bnQgPT09IDEgPyBcIm9uY2VcIiA6XG4gICAgICAgICAgICAgICBjb3VudCA9PT0gMiA/IFwidHdpY2VcIiA6XG4gICAgICAgICAgICAgICBjb3VudCA9PT0gMyA/IFwidGhyaWNlXCIgOlxuICAgICAgICAgICAgICAgKGNvdW50IHx8IDApICsgXCIgdGltZXNcIjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NhbGwocHV0YXRpdmVDYWxsKSB7XG4gICAgICAgIHJldHVybiBwdXRhdGl2ZUNhbGwgJiYgaXNTcHkocHV0YXRpdmVDYWxsLnByb3h5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhc3NlcnRDYW5Xb3JrV2l0aChhc3NlcnRpb24pIHtcbiAgICAgICAgaWYgKCFpc1NweShhc3NlcnRpb24uX29iaikgJiYgIWlzQ2FsbChhc3NlcnRpb24uX29iaikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IodXRpbHMuaW5zcGVjdChhc3NlcnRpb24uX29iaikgKyBcIiBpcyBub3QgYSBzcHkgb3IgYSBjYWxsIHRvIGEgc3B5IVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE1lc3NhZ2VzKHNweSwgYWN0aW9uLCBub25OZWdhdGVkU3VmZml4LCBhbHdheXMsIGFyZ3MpIHtcbiAgICAgICAgdmFyIHZlcmJQaHJhc2UgPSBhbHdheXMgPyBcImFsd2F5cyBoYXZlIFwiIDogXCJoYXZlIFwiO1xuICAgICAgICBub25OZWdhdGVkU3VmZml4ID0gbm9uTmVnYXRlZFN1ZmZpeCB8fCBcIlwiO1xuICAgICAgICBpZiAoaXNTcHkoc3B5LnByb3h5KSkge1xuICAgICAgICAgICAgc3B5ID0gc3B5LnByb3h5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcHJpbnRmQXJyYXkoYXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBzcHkucHJpbnRmLmFwcGx5KHNweSwgYXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFmZmlybWF0aXZlOiBwcmludGZBcnJheShbXCJleHBlY3RlZCAlbiB0byBcIiArIHZlcmJQaHJhc2UgKyBhY3Rpb24gKyBub25OZWdhdGVkU3VmZml4XS5jb25jYXQoYXJncykpLFxuICAgICAgICAgICAgbmVnYXRpdmU6IHByaW50ZkFycmF5KFtcImV4cGVjdGVkICVuIHRvIG5vdCBcIiArIHZlcmJQaHJhc2UgKyBhY3Rpb25dLmNvbmNhdChhcmdzKSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaW5vblByb3BlcnR5KG5hbWUsIGFjdGlvbiwgbm9uTmVnYXRlZFN1ZmZpeCkge1xuICAgICAgICB1dGlscy5hZGRQcm9wZXJ0eShjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFzc2VydENhbldvcmtXaXRoKHRoaXMpO1xuXG4gICAgICAgICAgICB2YXIgbWVzc2FnZXMgPSBnZXRNZXNzYWdlcyh0aGlzLl9vYmosIGFjdGlvbiwgbm9uTmVnYXRlZFN1ZmZpeCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQodGhpcy5fb2JqW25hbWVdLCBtZXNzYWdlcy5hZmZpcm1hdGl2ZSwgbWVzc2FnZXMubmVnYXRpdmUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaW5vblByb3BlcnR5QXNCb29sZWFuTWV0aG9kKG5hbWUsIGFjdGlvbiwgbm9uTmVnYXRlZFN1ZmZpeCkge1xuICAgICAgICB1dGlscy5hZGRNZXRob2QoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCBuYW1lLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICBhc3NlcnRDYW5Xb3JrV2l0aCh0aGlzKTtcblxuICAgICAgICAgICAgdmFyIG1lc3NhZ2VzID0gZ2V0TWVzc2FnZXModGhpcy5fb2JqLCBhY3Rpb24sIG5vbk5lZ2F0ZWRTdWZmaXgsIGZhbHNlLCBbdGltZXNJbldvcmRzKGFyZyldKTtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KHRoaXMuX29ialtuYW1lXSA9PT0gYXJnLCBtZXNzYWdlcy5hZmZpcm1hdGl2ZSwgbWVzc2FnZXMubmVnYXRpdmUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVTaW5vbk1ldGhvZEhhbmRsZXIoc2lub25OYW1lLCBhY3Rpb24sIG5vbk5lZ2F0ZWRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFzc2VydENhbldvcmtXaXRoKHRoaXMpO1xuXG4gICAgICAgICAgICB2YXIgYWx3YXlzU2lub25NZXRob2QgPSBcImFsd2F5c1wiICsgc2lub25OYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBzaW5vbk5hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgdmFyIHNob3VsZEJlQWx3YXlzID0gdXRpbHMuZmxhZyh0aGlzLCBcImFsd2F5c1wiKSAmJiB0eXBlb2YgdGhpcy5fb2JqW2Fsd2F5c1Npbm9uTWV0aG9kXSA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICAgICAgdmFyIHNpbm9uTWV0aG9kID0gc2hvdWxkQmVBbHdheXMgPyBhbHdheXNTaW5vbk1ldGhvZCA6IHNpbm9uTmFtZTtcblxuICAgICAgICAgICAgdmFyIG1lc3NhZ2VzID0gZ2V0TWVzc2FnZXModGhpcy5fb2JqLCBhY3Rpb24sIG5vbk5lZ2F0ZWRTdWZmaXgsIHNob3VsZEJlQWx3YXlzLCBzbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQodGhpcy5fb2JqW3Npbm9uTWV0aG9kXS5hcHBseSh0aGlzLl9vYmosIGFyZ3VtZW50cyksIG1lc3NhZ2VzLmFmZmlybWF0aXZlLCBtZXNzYWdlcy5uZWdhdGl2ZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2lub25NZXRob2RBc1Byb3BlcnR5KG5hbWUsIGFjdGlvbiwgbm9uTmVnYXRlZFN1ZmZpeCkge1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNyZWF0ZVNpbm9uTWV0aG9kSGFuZGxlcihuYW1lLCBhY3Rpb24sIG5vbk5lZ2F0ZWRTdWZmaXgpO1xuICAgICAgICB1dGlscy5hZGRQcm9wZXJ0eShjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsIG5hbWUsIGhhbmRsZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4Y2VwdGlvbmFsU2lub25NZXRob2QoY2hhaU5hbWUsIHNpbm9uTmFtZSwgYWN0aW9uLCBub25OZWdhdGVkU3VmZml4KSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gY3JlYXRlU2lub25NZXRob2RIYW5kbGVyKHNpbm9uTmFtZSwgYWN0aW9uLCBub25OZWdhdGVkU3VmZml4KTtcbiAgICAgICAgdXRpbHMuYWRkTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgY2hhaU5hbWUsIGhhbmRsZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNpbm9uTWV0aG9kKG5hbWUsIGFjdGlvbiwgbm9uTmVnYXRlZFN1ZmZpeCkge1xuICAgICAgICBleGNlcHRpb25hbFNpbm9uTWV0aG9kKG5hbWUsIG5hbWUsIGFjdGlvbiwgbm9uTmVnYXRlZFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgdXRpbHMuYWRkUHJvcGVydHkoY2hhaS5Bc3NlcnRpb24ucHJvdG90eXBlLCBcImFsd2F5c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHV0aWxzLmZsYWcodGhpcywgXCJhbHdheXNcIiwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBzaW5vblByb3BlcnR5KFwiY2FsbGVkXCIsIFwiYmVlbiBjYWxsZWRcIiwgXCIgYXQgbGVhc3Qgb25jZSwgYnV0IGl0IHdhcyBuZXZlciBjYWxsZWRcIik7XG4gICAgc2lub25Qcm9wZXJ0eUFzQm9vbGVhbk1ldGhvZChcImNhbGxDb3VudFwiLCBcImJlZW4gY2FsbGVkIGV4YWN0bHkgJTFcIiwgXCIsIGJ1dCBpdCB3YXMgY2FsbGVkICVjJUNcIik7XG4gICAgc2lub25Qcm9wZXJ0eShcImNhbGxlZE9uY2VcIiwgXCJiZWVuIGNhbGxlZCBleGFjdGx5IG9uY2VcIiwgXCIsIGJ1dCBpdCB3YXMgY2FsbGVkICVjJUNcIik7XG4gICAgc2lub25Qcm9wZXJ0eShcImNhbGxlZFR3aWNlXCIsIFwiYmVlbiBjYWxsZWQgZXhhY3RseSB0d2ljZVwiLCBcIiwgYnV0IGl0IHdhcyBjYWxsZWQgJWMlQ1wiKTtcbiAgICBzaW5vblByb3BlcnR5KFwiY2FsbGVkVGhyaWNlXCIsIFwiYmVlbiBjYWxsZWQgZXhhY3RseSB0aHJpY2VcIiwgXCIsIGJ1dCBpdCB3YXMgY2FsbGVkICVjJUNcIik7XG4gICAgc2lub25NZXRob2RBc1Byb3BlcnR5KFwiY2FsbGVkV2l0aE5ld1wiLCBcImJlZW4gY2FsbGVkIHdpdGggbmV3XCIpO1xuICAgIHNpbm9uTWV0aG9kKFwiY2FsbGVkQmVmb3JlXCIsIFwiYmVlbiBjYWxsZWQgYmVmb3JlICUxXCIpO1xuICAgIHNpbm9uTWV0aG9kKFwiY2FsbGVkQWZ0ZXJcIiwgXCJiZWVuIGNhbGxlZCBhZnRlciAlMVwiKTtcbiAgICBzaW5vbk1ldGhvZChcImNhbGxlZE9uXCIsIFwiYmVlbiBjYWxsZWQgd2l0aCAlMSBhcyB0aGlzXCIsIFwiLCBidXQgaXQgd2FzIGNhbGxlZCB3aXRoICV0IGluc3RlYWRcIik7XG4gICAgc2lub25NZXRob2QoXCJjYWxsZWRXaXRoXCIsIFwiYmVlbiBjYWxsZWQgd2l0aCBhcmd1bWVudHMgJSpcIiwgXCIlQ1wiKTtcbiAgICBzaW5vbk1ldGhvZChcImNhbGxlZFdpdGhFeGFjdGx5XCIsIFwiYmVlbiBjYWxsZWQgd2l0aCBleGFjdCBhcmd1bWVudHMgJSpcIiwgXCIlQ1wiKTtcbiAgICBzaW5vbk1ldGhvZChcImNhbGxlZFdpdGhNYXRjaFwiLCBcImJlZW4gY2FsbGVkIHdpdGggYXJndW1lbnRzIG1hdGNoaW5nICUqXCIsIFwiJUNcIik7XG4gICAgc2lub25NZXRob2QoXCJyZXR1cm5lZFwiLCBcInJldHVybmVkICUxXCIpO1xuICAgIGV4Y2VwdGlvbmFsU2lub25NZXRob2QoXCJ0aHJvd25cIiwgXCJ0aHJld1wiLCBcInRocm93biAlMVwiKTtcbn0pKTtcbiIsIi8qanNsaW50IGVxZXFlcTogZmFsc2UsIG9uZXZhcjogZmFsc2UsIGZvcmluOiB0cnVlLCBub21lbjogZmFsc2UsIHJlZ2V4cDogZmFsc2UsIHBsdXNwbHVzOiBmYWxzZSovXG4vKmdsb2JhbCBtb2R1bGUsIHJlcXVpcmUsIF9fZGlybmFtZSwgZG9jdW1lbnQqL1xuLyoqXG4gKiBTaW5vbiBjb3JlIHV0aWxpdGllcy4gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuICpcbiAqIEBhdXRob3IgQ2hyaXN0aWFuIEpvaGFuc2VuIChjaHJpc3RpYW5AY2pvaGFuc2VuLm5vKVxuICogQGxpY2Vuc2UgQlNEXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTMgQ2hyaXN0aWFuIEpvaGFuc2VuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuXG52YXIgc2lub24gPSAoZnVuY3Rpb24gKGZvcm1hdGlvKSB7XG4gICAgdmFyIGRpdiA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbiAgICBmdW5jdGlvbiBpc0RPTU5vZGUob2JqKSB7XG4gICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9iai5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICAgICAgc3VjY2VzcyA9IGRpdi5wYXJlbnROb2RlID09IG9iajtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvYmoucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZmFpbGVkLCBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhhdFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNFbGVtZW50KG9iaikge1xuICAgICAgICByZXR1cm4gZGl2ICYmIG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEgJiYgaXNET01Ob2RlKG9iaik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiB8fCAhIShvYmogJiYgb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jYWxsICYmIG9iai5hcHBseSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZWFsbHlOYU4odmFsKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1pcnJvclByb3BlcnRpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duLmNhbGwodGFyZ2V0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzdG9yYWJsZSAob2JqKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5yZXN0b3JlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLnJlc3RvcmUuc2lub247XG4gICAgfVxuXG4gICAgdmFyIHNpbm9uID0ge1xuICAgICAgICB3cmFwTWV0aG9kOiBmdW5jdGlvbiB3cmFwTWV0aG9kKG9iamVjdCwgcHJvcGVydHksIG1ldGhvZCkge1xuICAgICAgICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2hvdWxkIHdyYXAgcHJvcGVydHkgb2Ygb2JqZWN0XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1ldGhvZCAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWV0aG9kIHdyYXBwZXIgc2hvdWxkIGJlIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgd3JhcHBlZE1ldGhvZCA9IG9iamVjdFtwcm9wZXJ0eV0sXG4gICAgICAgICAgICAgICAgZXJyb3I7XG5cbiAgICAgICAgICAgIGlmICghaXNGdW5jdGlvbih3cmFwcGVkTWV0aG9kKSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IFR5cGVFcnJvcihcIkF0dGVtcHRlZCB0byB3cmFwIFwiICsgKHR5cGVvZiB3cmFwcGVkTWV0aG9kKSArIFwiIHByb3BlcnR5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ICsgXCIgYXMgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdyYXBwZWRNZXRob2QucmVzdG9yZSAmJiB3cmFwcGVkTWV0aG9kLnJlc3RvcmUuc2lub24pIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXCJBdHRlbXB0ZWQgdG8gd3JhcCBcIiArIHByb3BlcnR5ICsgXCIgd2hpY2ggaXMgYWxyZWFkeSB3cmFwcGVkXCIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3cmFwcGVkTWV0aG9kLmNhbGxlZEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHZhciB2ZXJiID0gISF3cmFwcGVkTWV0aG9kLnJldHVybnMgPyBcInN0dWJiZWRcIiA6IFwic3BpZWQgb25cIjtcbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXCJBdHRlbXB0ZWQgdG8gd3JhcCBcIiArIHByb3BlcnR5ICsgXCIgd2hpY2ggaXMgYWxyZWFkeSBcIiArIHZlcmIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAod3JhcHBlZE1ldGhvZCAmJiB3cmFwcGVkTWV0aG9kLl9zdGFjaykge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5zdGFjayArPSAnXFxuLS0tLS0tLS0tLS0tLS1cXG4nICsgd3JhcHBlZE1ldGhvZC5fc3RhY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJRSA4IGRvZXMgbm90IHN1cHBvcnQgaGFzT3duUHJvcGVydHkgb24gdGhlIHdpbmRvdyBvYmplY3QgYW5kIEZpcmVmb3ggaGFzIGEgcHJvYmxlbVxuICAgICAgICAgICAgLy8gd2hlbiB1c2luZyBoYXNPd24uY2FsbCBvbiBvYmplY3RzIGZyb20gb3RoZXIgZnJhbWVzLlxuICAgICAgICAgICAgdmFyIG93bmVkID0gb2JqZWN0Lmhhc093blByb3BlcnR5ID8gb2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5KSA6IGhhc093bi5jYWxsKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IG1ldGhvZDtcbiAgICAgICAgICAgIG1ldGhvZC5kaXNwbGF5TmFtZSA9IHByb3BlcnR5O1xuICAgICAgICAgICAgLy8gU2V0IHVwIGEgc3RhY2sgdHJhY2Ugd2hpY2ggY2FuIGJlIHVzZWQgbGF0ZXIgdG8gZmluZCB3aGF0IGxpbmUgb2ZcbiAgICAgICAgICAgIC8vIGNvZGUgdGhlIG9yaWdpbmFsIG1ldGhvZCB3YXMgY3JlYXRlZCBvbi5cbiAgICAgICAgICAgIG1ldGhvZC5fc3RhY2sgPSAobmV3IEVycm9yKCdTdGFjayBUcmFjZSBmb3Igb3JpZ2luYWwnKSkuc3RhY2s7XG5cbiAgICAgICAgICAgIG1ldGhvZC5yZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBwcm90b3R5cGUgcHJvcGVydGllcyB0cnkgdG8gcmVzZXQgYnkgZGVsZXRlIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZmFpbHMgKGV4OiBsb2NhbFN0b3JhZ2Ugb24gbW9iaWxlIHNhZmFyaSkgdGhlbiBmb3JjZSBhIHJlc2V0XG4gICAgICAgICAgICAgICAgLy8gdmlhIGRpcmVjdCBhc3NpZ25tZW50LlxuICAgICAgICAgICAgICAgIGlmICghb3duZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSBtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHdyYXBwZWRNZXRob2Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbWV0aG9kLnJlc3RvcmUuc2lub24gPSB0cnVlO1xuICAgICAgICAgICAgbWlycm9yUHJvcGVydGllcyhtZXRob2QsIHdyYXBwZWRNZXRob2QpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kO1xuICAgICAgICB9LFxuXG4gICAgICAgIGV4dGVuZDogZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gYXJndW1lbnRzW2ldW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRE9OVCBFTlVNIGJ1Zywgb25seSBjYXJlIGFib3V0IHRvU3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0uaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldLnRvU3RyaW5nICE9IHRhcmdldC50b1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnRvU3RyaW5nID0gYXJndW1lbnRzW2ldLnRvU3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKHByb3RvKSB7XG4gICAgICAgICAgICB2YXIgRiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgRi5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgICAgICAgIHJldHVybiBuZXcgRigpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRlZXBFcXVhbDogZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcbiAgICAgICAgICAgIGlmIChzaW5vbi5tYXRjaCAmJiBzaW5vbi5tYXRjaC5pc01hdGNoZXIoYSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS50ZXN0KGIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWFsbHlOYU4oYSkgJiYgaXNSZWFsbHlOYU4oYikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNFbGVtZW50KGEpIHx8IGlzRWxlbWVudChiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhID09PSBiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKGEgPT09IG51bGwgJiYgYiAhPT0gbnVsbCkgfHwgKGEgIT09IG51bGwgJiYgYiA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhIGluc3RhbmNlb2YgUmVnRXhwICYmIGIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChhLnNvdXJjZSA9PT0gYi5zb3VyY2UpICYmIChhLmdsb2JhbCA9PT0gYi5nbG9iYWwpICYmXG4gICAgICAgICAgICAgICAgKGEuaWdub3JlQ2FzZSA9PT0gYi5pZ25vcmVDYXNlKSAmJiAoYS5tdWx0aWxpbmUgPT09IGIubXVsdGlsaW5lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGFTdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk7XG4gICAgICAgICAgICBpZiAoYVN0cmluZyAhPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhU3RyaW5nID09IFwiW29iamVjdCBEYXRlXVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEudmFsdWVPZigpID09PSBiLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHByb3AsIGFMZW5ndGggPSAwLCBiTGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgaWYgKGFTdHJpbmcgPT0gXCJbb2JqZWN0IEFycmF5XVwiICYmIGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChwcm9wIGluIGEpIHtcbiAgICAgICAgICAgICAgICBhTGVuZ3RoICs9IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAoIShwcm9wIGluIGIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChhW3Byb3BdLCBiW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHByb3AgaW4gYikge1xuICAgICAgICAgICAgICAgIGJMZW5ndGggKz0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGFMZW5ndGggPT0gYkxlbmd0aDtcbiAgICAgICAgfSxcblxuICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uIGZ1bmN0aW9uTmFtZShmdW5jKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGZ1bmMuZGlzcGxheU5hbWUgfHwgZnVuYy5uYW1lO1xuXG4gICAgICAgICAgICAvLyBVc2UgZnVuY3Rpb24gZGVjb21wb3NpdGlvbiBhcyBhIGxhc3QgcmVzb3J0IHRvIGdldCBmdW5jdGlvblxuICAgICAgICAgICAgLy8gbmFtZS4gRG9lcyBub3QgcmVseSBvbiBmdW5jdGlvbiBkZWNvbXBvc2l0aW9uIHRvIHdvcmsgLSBpZiBpdFxuICAgICAgICAgICAgLy8gZG9lc24ndCBkZWJ1Z2dpbmcgd2lsbCBiZSBzbGlnaHRseSBsZXNzIGluZm9ybWF0aXZlXG4gICAgICAgICAgICAvLyAoaS5lLiB0b1N0cmluZyB3aWxsIHNheSAnc3B5JyByYXRoZXIgdGhhbiAnbXlGdW5jJykuXG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGZ1bmMudG9TdHJpbmcoKS5tYXRjaCgvZnVuY3Rpb24gKFteXFxzXFwoXSspLyk7XG4gICAgICAgICAgICAgICAgbmFtZSA9IG1hdGNoZXMgJiYgbWF0Y2hlc1sxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZnVuY3Rpb25Ub1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRDYWxsICYmIHRoaXMuY2FsbENvdW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXNWYWx1ZSwgcHJvcCwgaSA9IHRoaXMuY2FsbENvdW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzVmFsdWUgPSB0aGlzLmdldENhbGwoaSkudGhpc1ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiB0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzVmFsdWVbcHJvcF0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheU5hbWUgfHwgXCJzaW5vbiBmYWtlXCI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0Q29uZmlnOiBmdW5jdGlvbiAoY3VzdG9tKSB7XG4gICAgICAgICAgICB2YXIgY29uZmlnID0ge307XG4gICAgICAgICAgICBjdXN0b20gPSBjdXN0b20gfHwge307XG4gICAgICAgICAgICB2YXIgZGVmYXVsdHMgPSBzaW5vbi5kZWZhdWx0Q29uZmlnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IGN1c3RvbS5oYXNPd25Qcm9wZXJ0eShwcm9wKSA/IGN1c3RvbVtwcm9wXSA6IGRlZmF1bHRzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgfSxcblxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiICsgdmFsO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRlZmF1bHRDb25maWc6IHtcbiAgICAgICAgICAgIGluamVjdEludG9UaGlzOiB0cnVlLFxuICAgICAgICAgICAgaW5qZWN0SW50bzogbnVsbCxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcInNweVwiLCBcInN0dWJcIiwgXCJtb2NrXCIsIFwiY2xvY2tcIiwgXCJzZXJ2ZXJcIiwgXCJyZXF1ZXN0c1wiXSxcbiAgICAgICAgICAgIHVzZUZha2VUaW1lcnM6IHRydWUsXG4gICAgICAgICAgICB1c2VGYWtlU2VydmVyOiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgdGltZXNJbldvcmRzOiBmdW5jdGlvbiB0aW1lc0luV29yZHMoY291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3VudCA9PSAxICYmIFwib25jZVwiIHx8XG4gICAgICAgICAgICAgICAgY291bnQgPT0gMiAmJiBcInR3aWNlXCIgfHxcbiAgICAgICAgICAgICAgICBjb3VudCA9PSAzICYmIFwidGhyaWNlXCIgfHxcbiAgICAgICAgICAgICAgICAoY291bnQgfHwgMCkgKyBcIiB0aW1lc1wiO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNhbGxlZEluT3JkZXI6IGZ1bmN0aW9uIChzcGllcykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSBzcGllcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNwaWVzW2kgLSAxXS5jYWxsZWRCZWZvcmUoc3BpZXNbaV0pIHx8ICFzcGllc1tpXS5jYWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgb3JkZXJCeUZpcnN0Q2FsbDogZnVuY3Rpb24gKHNwaWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gc3BpZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIC8vIHV1aWQsIHdvbid0IGV2ZXIgYmUgZXF1YWxcbiAgICAgICAgICAgICAgICB2YXIgYUNhbGwgPSBhLmdldENhbGwoMCk7XG4gICAgICAgICAgICAgICAgdmFyIGJDYWxsID0gYi5nZXRDYWxsKDApO1xuICAgICAgICAgICAgICAgIHZhciBhSWQgPSBhQ2FsbCAmJiBhQ2FsbC5jYWxsSWQgfHwgLTE7XG4gICAgICAgICAgICAgICAgdmFyIGJJZCA9IGJDYWxsICYmIGJDYWxsLmNhbGxJZCB8fCAtMTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBhSWQgPCBiSWQgPyAtMSA6IDE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBsb2c6IGZ1bmN0aW9uICgpIHt9LFxuXG4gICAgICAgIGxvZ0Vycm9yOiBmdW5jdGlvbiAobGFiZWwsIGVycikge1xuICAgICAgICAgICAgdmFyIG1zZyA9IGxhYmVsICsgXCIgdGhyZXcgZXhjZXB0aW9uOiBcIjtcbiAgICAgICAgICAgIHNpbm9uLmxvZyhtc2cgKyBcIltcIiArIGVyci5uYW1lICsgXCJdIFwiICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKGVyci5zdGFjaykgeyBzaW5vbi5sb2coZXJyLnN0YWNrKTsgfVxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9IG1zZyArIGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9LFxuXG4gICAgICAgIHR5cGVPZjogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDgsIHN0cmluZy5sZW5ndGggLSAxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZVN0dWJJbnN0YW5jZTogZnVuY3Rpb24gKGNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGNvbnN0cnVjdG9yIHNob3VsZCBiZSBhIGZ1bmN0aW9uLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzaW5vbi5zdHViKHNpbm9uLmNyZWF0ZShjb25zdHJ1Y3Rvci5wcm90b3R5cGUpKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAob2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXN0b3JhYmxlKG9iamVjdFtwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wXS5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1Jlc3RvcmFibGUob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIG9iamVjdC5yZXN0b3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGlzTm9kZSA9IHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMgJiYgdHlwZW9mIHJlcXVpcmUgPT0gXCJmdW5jdGlvblwiO1xuICAgIHZhciBpc0FNRCA9IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQ7XG5cbiAgICBmdW5jdGlvbiBtYWtlUHVibGljQVBJKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHNpbm9uO1xuICAgICAgICBzaW5vbi5zcHkgPSByZXF1aXJlKFwiLi9zaW5vbi9zcHlcIik7XG4gICAgICAgIHNpbm9uLnNweUNhbGwgPSByZXF1aXJlKFwiLi9zaW5vbi9jYWxsXCIpO1xuICAgICAgICBzaW5vbi5iZWhhdmlvciA9IHJlcXVpcmUoXCIuL3Npbm9uL2JlaGF2aW9yXCIpO1xuICAgICAgICBzaW5vbi5zdHViID0gcmVxdWlyZShcIi4vc2lub24vc3R1YlwiKTtcbiAgICAgICAgc2lub24ubW9jayA9IHJlcXVpcmUoXCIuL3Npbm9uL21vY2tcIik7XG4gICAgICAgIHNpbm9uLmNvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi9zaW5vbi9jb2xsZWN0aW9uXCIpO1xuICAgICAgICBzaW5vbi5hc3NlcnQgPSByZXF1aXJlKFwiLi9zaW5vbi9hc3NlcnRcIik7XG4gICAgICAgIHNpbm9uLnNhbmRib3ggPSByZXF1aXJlKFwiLi9zaW5vbi9zYW5kYm94XCIpO1xuICAgICAgICBzaW5vbi50ZXN0ID0gcmVxdWlyZShcIi4vc2lub24vdGVzdFwiKTtcbiAgICAgICAgc2lub24udGVzdENhc2UgPSByZXF1aXJlKFwiLi9zaW5vbi90ZXN0X2Nhc2VcIik7XG4gICAgICAgIHNpbm9uLm1hdGNoID0gcmVxdWlyZShcIi4vc2lub24vbWF0Y2hcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzQU1EKSB7XG4gICAgICAgIGRlZmluZShtYWtlUHVibGljQVBJKTtcbiAgICB9IGVsc2UgaWYgKGlzTm9kZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9ybWF0aW8gPSByZXF1aXJlKFwiZm9ybWF0aW9cIik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIG1ha2VQdWJsaWNBUEkocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0aW8pIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdGlvLmNvbmZpZ3VyZSh7IHF1b3RlU3RyaW5nczogZmFsc2UgfSk7XG4gICAgICAgIHNpbm9uLmZvcm1hdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuYXNjaWkuYXBwbHkoZm9ybWF0dGVyLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNOb2RlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgdXRpbCA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuICAgICAgICAgICAgc2lub24uZm9ybWF0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlLnRvU3RyaW5nID09PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nID8gdXRpbC5pbnNwZWN0KHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogTm9kZSwgYnV0IG5vIHV0aWwgbW9kdWxlIC0gd291bGQgYmUgdmVyeSBvbGQsIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuXG4gICAgICAgICAgICAgc29ycnkgKi9cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaW5vbjtcbn0odHlwZW9mIGZvcm1hdGlvID09IFwib2JqZWN0XCIgJiYgZm9ybWF0aW8pKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qKlxuICogQGRlcGVuZCAuLi9zaW5vbi5qc1xuICogQGRlcGVuZCBzdHViLmpzXG4gKi9cbi8qanNsaW50IGVxZXFlcTogZmFsc2UsIG9uZXZhcjogZmFsc2UsIG5vbWVuOiBmYWxzZSwgcGx1c3BsdXM6IGZhbHNlKi9cbi8qZ2xvYmFsIG1vZHVsZSwgcmVxdWlyZSwgc2lub24qL1xuLyoqXG4gKiBBc3NlcnRpb25zIG1hdGNoaW5nIHRoZSB0ZXN0IHNweSByZXRyaWV2YWwgaW50ZXJmYWNlLlxuICpcbiAqIEBhdXRob3IgQ2hyaXN0aWFuIEpvaGFuc2VuIChjaHJpc3RpYW5AY2pvaGFuc2VuLm5vKVxuICogQGxpY2Vuc2UgQlNEXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTMgQ2hyaXN0aWFuIEpvaGFuc2VuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuXG4oZnVuY3Rpb24gKHNpbm9uLCBnbG9iYWwpIHtcbiAgICB2YXIgY29tbW9uSlNNb2R1bGUgPSB0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzICYmIHR5cGVvZiByZXF1aXJlID09IFwiZnVuY3Rpb25cIjtcbiAgICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4gICAgdmFyIGFzc2VydDtcblxuICAgIGlmICghc2lub24gJiYgY29tbW9uSlNNb2R1bGUpIHtcbiAgICAgICAgc2lub24gPSByZXF1aXJlKFwiLi4vc2lub25cIik7XG4gICAgfVxuXG4gICAgaWYgKCFzaW5vbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmVyaWZ5SXNTdHViKCkge1xuICAgICAgICB2YXIgbWV0aG9kO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbWV0aG9kID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5mYWlsKFwiZmFrZSBpcyBub3QgYSBzcHlcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWV0aG9kICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGFzc2VydC5mYWlsKG1ldGhvZCArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1ldGhvZC5nZXRDYWxsICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGFzc2VydC5mYWlsKG1ldGhvZCArIFwiIGlzIG5vdCBzdHViYmVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmFpbEFzc2VydGlvbihvYmplY3QsIG1zZykge1xuICAgICAgICBvYmplY3QgPSBvYmplY3QgfHwgZ2xvYmFsO1xuICAgICAgICB2YXIgZmFpbE1ldGhvZCA9IG9iamVjdC5mYWlsIHx8IGFzc2VydC5mYWlsO1xuICAgICAgICBmYWlsTWV0aG9kLmNhbGwob2JqZWN0LCBtc2cpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1pcnJvclByb3BBc0Fzc2VydGlvbihuYW1lLCBtZXRob2QsIG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgbWVzc2FnZSA9IG1ldGhvZDtcbiAgICAgICAgICAgIG1ldGhvZCA9IG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnRbbmFtZV0gPSBmdW5jdGlvbiAoZmFrZSkge1xuICAgICAgICAgICAgdmVyaWZ5SXNTdHViKGZha2UpO1xuXG4gICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIHZhciBmYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkID0gIW1ldGhvZChmYWtlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkID0gdHlwZW9mIGZha2VbbWV0aG9kXSA9PSBcImZ1bmN0aW9uXCIgP1xuICAgICAgICAgICAgICAgICAgICAhZmFrZVttZXRob2RdLmFwcGx5KGZha2UsIGFyZ3MpIDogIWZha2VbbWV0aG9kXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZhaWxlZCkge1xuICAgICAgICAgICAgICAgIGZhaWxBc3NlcnRpb24odGhpcywgZmFrZS5wcmludGYuYXBwbHkoZmFrZSwgW21lc3NhZ2VdLmNvbmNhdChhcmdzKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQucGFzcyhuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBvc2VkTmFtZShwcmVmaXgsIHByb3ApIHtcbiAgICAgICAgcmV0dXJuICFwcmVmaXggfHwgL15mYWlsLy50ZXN0KHByb3ApID8gcHJvcCA6XG4gICAgICAgICAgICBwcmVmaXggKyBwcm9wLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBwcm9wLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIGFzc2VydCA9IHtcbiAgICAgICAgZmFpbEV4Y2VwdGlvbjogXCJBc3NlcnRFcnJvclwiLFxuXG4gICAgICAgIGZhaWw6IGZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgZXJyb3IubmFtZSA9IHRoaXMuZmFpbEV4Y2VwdGlvbiB8fCBhc3NlcnQuZmFpbEV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFzczogZnVuY3Rpb24gcGFzcyhhc3NlcnRpb24pIHt9LFxuXG4gICAgICAgIGNhbGxPcmRlcjogZnVuY3Rpb24gYXNzZXJ0Q2FsbE9yZGVyKCkge1xuICAgICAgICAgICAgdmVyaWZ5SXNTdHViLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBcIlwiLCBhY3R1YWwgPSBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoIXNpbm9uLmNhbGxlZEluT3JkZXIoYXJndW1lbnRzKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gW10uam9pbi5jYWxsKGFyZ3VtZW50cywgXCIsIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGNhbGxzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbHNbLS1pXS5jYWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxscy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gc2lub24ub3JkZXJCeUZpcnN0Q2FsbChjYWxscykuam9pbihcIiwgXCIpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWlscywgd2UnbGwganVzdCBmYWxsIGJhY2sgdG8gdGhlIGJsYW5rIHN0cmluZ1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZhaWxBc3NlcnRpb24odGhpcywgXCJleHBlY3RlZCBcIiArIGV4cGVjdGVkICsgXCIgdG8gYmUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjYWxsZWQgaW4gb3JkZXIgYnV0IHdlcmUgY2FsbGVkIGFzIFwiICsgYWN0dWFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnBhc3MoXCJjYWxsT3JkZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbENvdW50OiBmdW5jdGlvbiBhc3NlcnRDYWxsQ291bnQobWV0aG9kLCBjb3VudCkge1xuICAgICAgICAgICAgdmVyaWZ5SXNTdHViKG1ldGhvZCk7XG5cbiAgICAgICAgICAgIGlmIChtZXRob2QuY2FsbENvdW50ICE9IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIG1zZyA9IFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIFwiICsgc2lub24udGltZXNJbldvcmRzKGNvdW50KSArXG4gICAgICAgICAgICAgICAgICAgIFwiIGJ1dCB3YXMgY2FsbGVkICVjJUNcIjtcbiAgICAgICAgICAgICAgICBmYWlsQXNzZXJ0aW9uKHRoaXMsIG1ldGhvZC5wcmludGYobXNnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzc2VydC5wYXNzKFwiY2FsbENvdW50XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGV4cG9zZTogZnVuY3Rpb24gZXhwb3NlKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwidGFyZ2V0IGlzIG51bGwgb3IgdW5kZWZpbmVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICB2YXIgcHJlZml4ID0gdHlwZW9mIG8ucHJlZml4ID09IFwidW5kZWZpbmVkXCIgJiYgXCJhc3NlcnRcIiB8fCBvLnByZWZpeDtcbiAgICAgICAgICAgIHZhciBpbmNsdWRlRmFpbCA9IHR5cGVvZiBvLmluY2x1ZGVGYWlsID09IFwidW5kZWZpbmVkXCIgfHwgISFvLmluY2x1ZGVGYWlsO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBtZXRob2QgaW4gdGhpcykge1xuICAgICAgICAgICAgICAgIGlmIChtZXRob2QgIT0gXCJleHBvcnRcIiAmJiAoaW5jbHVkZUZhaWwgfHwgIS9eKGZhaWwpLy50ZXN0KG1ldGhvZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtleHBvc2VkTmFtZShwcmVmaXgsIG1ldGhvZCldID0gdGhpc1ttZXRob2RdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSxcblxuICAgICAgICBtYXRjaDogZnVuY3Rpb24gbWF0Y2goYWN0dWFsLCBleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBzaW5vbi5tYXRjaChleHBlY3RhdGlvbik7XG4gICAgICAgICAgICBpZiAobWF0Y2hlci50ZXN0KGFjdHVhbCkpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQucGFzcyhcIm1hdGNoXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVkID0gW1xuICAgICAgICAgICAgICAgICAgICBcImV4cGVjdGVkIHZhbHVlIHRvIG1hdGNoXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiICAgIGV4cGVjdGVkID0gXCIgKyBzaW5vbi5mb3JtYXQoZXhwZWN0YXRpb24pLFxuICAgICAgICAgICAgICAgICAgICBcIiAgICBhY3R1YWwgPSBcIiArIHNpbm9uLmZvcm1hdChhY3R1YWwpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIGZhaWxBc3NlcnRpb24odGhpcywgZm9ybWF0dGVkLmpvaW4oXCJcXG5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcImNhbGxlZFwiLCBcImV4cGVjdGVkICVuIHRvIGhhdmUgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZSBidXQgd2FzIG5ldmVyIGNhbGxlZFwiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJub3RDYWxsZWRcIiwgZnVuY3Rpb24gKHNweSkgeyByZXR1cm4gIXNweS5jYWxsZWQ7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gbm90IGhhdmUgYmVlbiBjYWxsZWQgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJjYWxsZWRPbmNlXCIsIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIG9uY2UgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJjYWxsZWRUd2ljZVwiLCBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCB0d2ljZSBidXQgd2FzIGNhbGxlZCAlYyVDXCIpO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcImNhbGxlZFRocmljZVwiLCBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCB0aHJpY2UgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJjYWxsZWRPblwiLCBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCB3aXRoICUxIGFzIHRoaXMgYnV0IHdhcyBjYWxsZWQgd2l0aCAldFwiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJhbHdheXNDYWxsZWRPblwiLCBcImV4cGVjdGVkICVuIHRvIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCAlMSBhcyB0aGlzIGJ1dCB3YXMgY2FsbGVkIHdpdGggJXRcIik7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFwiY2FsbGVkV2l0aE5ld1wiLCBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCB3aXRoIG5ld1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJhbHdheXNDYWxsZWRXaXRoTmV3XCIsIFwiZXhwZWN0ZWQgJW4gdG8gYWx3YXlzIGJlIGNhbGxlZCB3aXRoIG5ld1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJjYWxsZWRXaXRoXCIsIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzICUqJUNcIik7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFwiY2FsbGVkV2l0aE1hdGNoXCIsIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggbWF0Y2ggJSolQ1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJhbHdheXNDYWxsZWRXaXRoXCIsIFwiZXhwZWN0ZWQgJW4gdG8gYWx3YXlzIGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyAlKiVDXCIpO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcImFsd2F5c0NhbGxlZFdpdGhNYXRjaFwiLCBcImV4cGVjdGVkICVuIHRvIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBtYXRjaCAlKiVDXCIpO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcImNhbGxlZFdpdGhFeGFjdGx5XCIsIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggZXhhY3QgYXJndW1lbnRzICUqJUNcIik7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFwiYWx3YXlzQ2FsbGVkV2l0aEV4YWN0bHlcIiwgXCJleHBlY3RlZCAlbiB0byBhbHdheXMgYmUgY2FsbGVkIHdpdGggZXhhY3QgYXJndW1lbnRzICUqJUNcIik7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFwibmV2ZXJDYWxsZWRXaXRoXCIsIFwiZXhwZWN0ZWQgJW4gdG8gbmV2ZXIgYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzICUqJUNcIik7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFwibmV2ZXJDYWxsZWRXaXRoTWF0Y2hcIiwgXCJleHBlY3RlZCAlbiB0byBuZXZlciBiZSBjYWxsZWQgd2l0aCBtYXRjaCAlKiVDXCIpO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcInRocmV3XCIsIFwiJW4gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24lQ1wiKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXCJhbHdheXNUaHJld1wiLCBcIiVuIGRpZCBub3QgYWx3YXlzIHRocm93IGV4Y2VwdGlvbiVDXCIpO1xuXG4gICAgc2lub24uYXNzZXJ0ID0gYXNzZXJ0O1xuXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKG1vZHVsZSkgeyBtb2R1bGUuZXhwb3J0cyA9IGFzc2VydDsgfSk7XG4gICAgfSBlbHNlIGlmIChjb21tb25KU01vZHVsZSkge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzc2VydDtcbiAgICB9XG59KHR5cGVvZiBzaW5vbiA9PSBcIm9iamVjdFwiICYmIHNpbm9uIHx8IG51bGwsIHR5cGVvZiB3aW5kb3cgIT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6ICh0eXBlb2Ygc2VsZiAhPSBcInVuZGVmaW5lZFwiKSA/IHNlbGYgOiBnbG9iYWwpKTtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBAZGVwZW5kIC4uL3Npbm9uLmpzXG4gKi9cbi8qanNsaW50IGVxZXFlcTogZmFsc2UsIG9uZXZhcjogZmFsc2UqL1xuLypnbG9iYWwgbW9kdWxlLCByZXF1aXJlLCBzaW5vbiwgcHJvY2Vzcywgc2V0SW1tZWRpYXRlLCBzZXRUaW1lb3V0Ki9cbi8qKlxuICogU3R1YiBiZWhhdmlvclxuICpcbiAqIEBhdXRob3IgQ2hyaXN0aWFuIEpvaGFuc2VuIChjaHJpc3RpYW5AY2pvaGFuc2VuLm5vKVxuICogQGF1dGhvciBUaW0gRmlzY2hiYWNoIChtYWlsQHRpbWZpc2NoYmFjaC5kZSlcbiAqIEBsaWNlbnNlIEJTRFxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIENocmlzdGlhbiBKb2hhbnNlblxuICovXG5cInVzZSBzdHJpY3RcIjtcblxuKGZ1bmN0aW9uIChzaW5vbikge1xuICAgIHZhciBjb21tb25KU01vZHVsZSA9IHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMgJiYgdHlwZW9mIHJlcXVpcmUgPT0gXCJmdW5jdGlvblwiO1xuXG4gICAgaWYgKCFzaW5vbiAmJiBjb21tb25KU01vZHVsZSkge1xuICAgICAgICBzaW5vbiA9IHJlcXVpcmUoXCIuLi9zaW5vblwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXNpbm9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4gICAgdmFyIGpvaW4gPSBBcnJheS5wcm90b3R5cGUuam9pbjtcbiAgICB2YXIgcHJvdG87XG5cbiAgICB2YXIgbmV4dFRpY2sgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2s7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBmdW5jdGlvbiB0aHJvd3NFeGNlcHRpb24oZXJyb3IsIG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmV4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlIHx8IFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5leGNlcHRpb24ubmFtZSA9IGVycm9yO1xuICAgICAgICB9IGVsc2UgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5leGNlcHRpb24gPSBuZXcgRXJyb3IoXCJFcnJvclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhjZXB0aW9uID0gZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxsYmFjayhiZWhhdmlvciwgYXJncykge1xuICAgICAgICB2YXIgY2FsbEFyZ0F0ID0gYmVoYXZpb3IuY2FsbEFyZ0F0O1xuXG4gICAgICAgIGlmIChjYWxsQXJnQXQgPCAwKSB7XG4gICAgICAgICAgICB2YXIgY2FsbEFyZ1Byb3AgPSBiZWhhdmlvci5jYWxsQXJnUHJvcDtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmdzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICghY2FsbEFyZ1Byb3AgJiYgdHlwZW9mIGFyZ3NbaV0gPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2ldO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjYWxsQXJnUHJvcCAmJiBhcmdzW2ldICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhcmdzW2ldW2NhbGxBcmdQcm9wXSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaV1bY2FsbEFyZ1Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnc1tjYWxsQXJnQXRdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENhbGxiYWNrRXJyb3IoYmVoYXZpb3IsIGZ1bmMsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGJlaGF2aW9yLmNhbGxBcmdBdCA8IDApIHtcbiAgICAgICAgICAgIHZhciBtc2c7XG5cbiAgICAgICAgICAgIGlmIChiZWhhdmlvci5jYWxsQXJnUHJvcCkge1xuICAgICAgICAgICAgICAgIG1zZyA9IHNpbm9uLmZ1bmN0aW9uTmFtZShiZWhhdmlvci5zdHViKSArXG4gICAgICAgICAgICAgICAgICAgIFwiIGV4cGVjdGVkIHRvIHlpZWxkIHRvICdcIiArIGJlaGF2aW9yLmNhbGxBcmdQcm9wICtcbiAgICAgICAgICAgICAgICAgICAgXCInLCBidXQgbm8gb2JqZWN0IHdpdGggc3VjaCBhIHByb3BlcnR5IHdhcyBwYXNzZWQuXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1zZyA9IHNpbm9uLmZ1bmN0aW9uTmFtZShiZWhhdmlvci5zdHViKSArXG4gICAgICAgICAgICAgICAgICAgIFwiIGV4cGVjdGVkIHRvIHlpZWxkLCBidXQgbm8gY2FsbGJhY2sgd2FzIHBhc3NlZC5cIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG1zZyArPSBcIiBSZWNlaXZlZCBbXCIgKyBqb2luLmNhbGwoYXJncywgXCIsIFwiKSArIFwiXVwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiYXJndW1lbnQgYXQgaW5kZXggXCIgKyBiZWhhdmlvci5jYWxsQXJnQXQgKyBcIiBpcyBub3QgYSBmdW5jdGlvbjogXCIgKyBmdW5jO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGxDYWxsYmFjayhiZWhhdmlvciwgYXJncykge1xuICAgICAgICBpZiAodHlwZW9mIGJlaGF2aW9yLmNhbGxBcmdBdCA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YXIgZnVuYyA9IGdldENhbGxiYWNrKGJlaGF2aW9yLCBhcmdzKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZ2V0Q2FsbGJhY2tFcnJvcihiZWhhdmlvciwgZnVuYywgYXJncykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYmVoYXZpb3IuY2FsbGJhY2tBc3luYykge1xuICAgICAgICAgICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KGJlaGF2aW9yLmNhbGxiYWNrQ29udGV4dCwgYmVoYXZpb3IuY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KGJlaGF2aW9yLmNhbGxiYWNrQ29udGV4dCwgYmVoYXZpb3IuY2FsbGJhY2tBcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdG8gPSB7XG4gICAgICAgIGNyZWF0ZTogZnVuY3Rpb24oc3R1Yikge1xuICAgICAgICAgICAgdmFyIGJlaGF2aW9yID0gc2lub24uZXh0ZW5kKHt9LCBzaW5vbi5iZWhhdmlvcik7XG4gICAgICAgICAgICBkZWxldGUgYmVoYXZpb3IuY3JlYXRlO1xuICAgICAgICAgICAgYmVoYXZpb3Iuc3R1YiA9IHN0dWI7XG5cbiAgICAgICAgICAgIHJldHVybiBiZWhhdmlvcjtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1ByZXNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgdGhpcy5jYWxsQXJnQXQgPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNlcHRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMucmV0dXJuQXJnQXQgPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5UaGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWVEZWZpbmVkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpbnZva2U6IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAgICAgICAgIGNhbGxDYWxsYmFjayh0aGlzLCBhcmdzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5leGNlcHRpb247XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJldHVybkFyZ0F0ID09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbdGhpcy5yZXR1cm5BcmdBdF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmV0dXJuVGhpcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5WYWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBvbkNhbGw6IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHViLm9uQ2FsbChpbmRleCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgb25GaXJzdENhbGw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R1Yi5vbkZpcnN0Q2FsbCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIG9uU2Vjb25kQ2FsbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHViLm9uU2Vjb25kQ2FsbCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIG9uVGhpcmRDYWxsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0dWIub25UaGlyZENhbGwoKTtcbiAgICAgICAgfSxcblxuICAgICAgICB3aXRoQXJnczogZnVuY3Rpb24oLyogYXJndW1lbnRzICovKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlZmluaW5nIGEgc3R1YiBieSBpbnZva2luZyBcInN0dWIub25DYWxsKC4uLikud2l0aEFyZ3MoLi4uKVwiIGlzIG5vdCBzdXBwb3J0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVc2UgXCJzdHViLndpdGhBcmdzKC4uLikub25DYWxsKC4uLilcIiB0byBkZWZpbmUgc2VxdWVudGlhbCBiZWhhdmlvciBmb3IgY2FsbHMgd2l0aCBjZXJ0YWluIGFyZ3VtZW50cy4nKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsc0FyZzogZnVuY3Rpb24gY2FsbHNBcmcocG9zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBvcyAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2FsbEFyZ0F0ID0gcG9zO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FyZ3VtZW50cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNhbGxzQXJnT246IGZ1bmN0aW9uIGNhbGxzQXJnT24ocG9zLCBjb250ZXh0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBvcyAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQgIT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBjb250ZXh0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2FsbEFyZ0F0ID0gcG9zO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FyZ3VtZW50cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgdGhpcy5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsc0FyZ1dpdGg6IGZ1bmN0aW9uIGNhbGxzQXJnV2l0aChwb3MpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcG9zICE9IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jYWxsQXJnQXQgPSBwb3M7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNhbGxzQXJnT25XaXRoOiBmdW5jdGlvbiBjYWxsc0FyZ1dpdGgocG9zLCBjb250ZXh0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBvcyAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQgIT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBjb250ZXh0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2FsbEFyZ0F0ID0gcG9zO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tDb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIHRoaXMuY2FsbEFyZ1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgeWllbGRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxBcmdBdCA9IC0xO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICB5aWVsZHNPbjogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dCAhPSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGNvbnRleHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jYWxsQXJnQXQgPSAtMTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgICAgICB0aGlzLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIHlpZWxkc1RvOiBmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgdGhpcy5jYWxsQXJnQXQgPSAtMTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY2FsbEFyZ1Byb3AgPSBwcm9wO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIHlpZWxkc1RvT246IGZ1bmN0aW9uIChwcm9wLCBjb250ZXh0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQgIT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBjb250ZXh0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2FsbEFyZ0F0ID0gLTE7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgdGhpcy5jYWxsQXJnUHJvcCA9IHByb3A7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cblxuICAgICAgICBcInRocm93c1wiOiB0aHJvd3NFeGNlcHRpb24sXG4gICAgICAgIHRocm93c0V4Y2VwdGlvbjogdGhyb3dzRXhjZXB0aW9uLFxuXG4gICAgICAgIHJldHVybnM6IGZ1bmN0aW9uIHJldHVybnModmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWVEZWZpbmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmV0dXJuc0FyZzogZnVuY3Rpb24gcmV0dXJuc0FyZyhwb3MpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcG9zICE9IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZXR1cm5BcmdBdCA9IHBvcztcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmV0dXJuc1RoaXM6IGZ1bmN0aW9uIHJldHVybnNUaGlzKCkge1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5UaGlzID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY3JlYXRlIGFzeW5jaHJvbm91cyB2ZXJzaW9ucyBvZiBjYWxsc0FyZyogYW5kIHlpZWxkcyogbWV0aG9kc1xuICAgIGZvciAodmFyIG1ldGhvZCBpbiBwcm90bykge1xuICAgICAgICAvLyBuZWVkIHRvIGF2b2lkIGNyZWF0aW5nIGFub3RoZXJhc3luYyB2ZXJzaW9ucyBvZiB0aGUgbmV3bHkgYWRkZWQgYXN5bmMgbWV0aG9kc1xuICAgICAgICBpZiAocHJvdG8uaGFzT3duUHJvcGVydHkobWV0aG9kKSAmJlxuICAgICAgICAgICAgbWV0aG9kLm1hdGNoKC9eKGNhbGxzQXJnfHlpZWxkcykvKSAmJlxuICAgICAgICAgICAgIW1ldGhvZC5tYXRjaCgvQXN5bmMvKSkge1xuICAgICAgICAgICAgcHJvdG9bbWV0aG9kICsgJ0FzeW5jJ10gPSAoZnVuY3Rpb24gKHN5bmNGbk5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpc1tzeW5jRm5OYW1lXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KShtZXRob2QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2lub24uYmVoYXZpb3IgPSBwcm90bztcblxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW1wibW9kdWxlXCJdLCBmdW5jdGlvbihtb2R1bGUpIHsgbW9kdWxlLmV4cG9ydHMgPSBwcm90bzsgfSk7XG4gICAgfSBlbHNlIGlmIChjb21tb25KU01vZHVsZSkge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHByb3RvO1xuICAgIH1cbn0odHlwZW9mIHNpbm9uID09IFwib2JqZWN0XCIgJiYgc2lub24gfHwgbnVsbCkpO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZShcIkprcFIyRlwiKSkiLCIvKipcbiAgKiBAZGVwZW5kIC4uL3Npbm9uLmpzXG4gICogQGRlcGVuZCBtYXRjaC5qc1xuICAqL1xuLypqc2xpbnQgZXFlcWVxOiBmYWxzZSwgb25ldmFyOiBmYWxzZSwgcGx1c3BsdXM6IGZhbHNlKi9cbi8qZ2xvYmFsIG1vZHVsZSwgcmVxdWlyZSwgc2lub24qL1xuLyoqXG4gICogU3B5IGNhbGxzXG4gICpcbiAgKiBAYXV0aG9yIENocmlzdGlhbiBKb2hhbnNlbiAoY2hyaXN0aWFuQGNqb2hhbnNlbi5ubylcbiAgKiBAYXV0aG9yIE1heGltaWxpYW4gQW50b25pIChtYWlsQG1heGFudG9uaS5kZSlcbiAgKiBAbGljZW5zZSBCU0RcbiAgKlxuICAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIENocmlzdGlhbiBKb2hhbnNlblxuICAqIENvcHlyaWdodCAoYykgMjAxMyBNYXhpbWlsaWFuIEFudG9uaVxuICAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbihmdW5jdGlvbiAoc2lub24pIHtcbiAgICB2YXIgY29tbW9uSlNNb2R1bGUgPSB0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzICYmIHR5cGVvZiByZXF1aXJlID09IFwiZnVuY3Rpb25cIjtcbiAgICBpZiAoIXNpbm9uICYmIGNvbW1vbkpTTW9kdWxlKSB7XG4gICAgICAgIHNpbm9uID0gcmVxdWlyZShcIi4uL3Npbm9uXCIpO1xuICAgIH1cblxuICAgIGlmICghc2lub24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRocm93WWllbGRFcnJvcihwcm94eSwgdGV4dCwgYXJncykge1xuICAgICAgICB2YXIgbXNnID0gc2lub24uZnVuY3Rpb25OYW1lKHByb3h5KSArIHRleHQ7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgbXNnICs9IFwiIFJlY2VpdmVkIFtcIiArIHNsaWNlLmNhbGwoYXJncykuam9pbihcIiwgXCIpICsgXCJdXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgfVxuXG4gICAgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4gICAgdmFyIGNhbGxQcm90byA9IHtcbiAgICAgICAgY2FsbGVkT246IGZ1bmN0aW9uIGNhbGxlZE9uKHRoaXNWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHNpbm9uLm1hdGNoICYmIHNpbm9uLm1hdGNoLmlzTWF0Y2hlcih0aGlzVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZS50ZXN0KHRoaXMudGhpc1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRoaXNWYWx1ZSA9PT0gdGhpc1ZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNhbGxlZFdpdGg6IGZ1bmN0aW9uIGNhbGxlZFdpdGgoKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNpbm9uLmRlZXBFcXVhbChhcmd1bWVudHNbaV0sIHRoaXMuYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbGVkV2l0aE1hdGNoOiBmdW5jdGlvbiBjYWxsZWRXaXRoTWF0Y2goKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0dWFsID0gdGhpcy5hcmdzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBleHBlY3RhdGlvbiA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNpbm9uLm1hdGNoIHx8ICFzaW5vbi5tYXRjaChleHBlY3RhdGlvbikudGVzdChhY3R1YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsZWRXaXRoRXhhY3RseTogZnVuY3Rpb24gY2FsbGVkV2l0aEV4YWN0bHkoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PSB0aGlzLmFyZ3MubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsZWRXaXRoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbm90Q2FsbGVkV2l0aDogZnVuY3Rpb24gbm90Q2FsbGVkV2l0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5jYWxsZWRXaXRoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbm90Q2FsbGVkV2l0aE1hdGNoOiBmdW5jdGlvbiBub3RDYWxsZWRXaXRoTWF0Y2goKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuY2FsbGVkV2l0aE1hdGNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmV0dXJuZWQ6IGZ1bmN0aW9uIHJldHVybmVkKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2lub24uZGVlcEVxdWFsKHZhbHVlLCB0aGlzLnJldHVyblZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0aHJldzogZnVuY3Rpb24gdGhyZXcoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09IFwidW5kZWZpbmVkXCIgfHwgIXRoaXMuZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5leGNlcHRpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4Y2VwdGlvbiA9PT0gZXJyb3IgfHwgdGhpcy5leGNlcHRpb24ubmFtZSA9PT0gZXJyb3I7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbGVkV2l0aE5ldzogZnVuY3Rpb24gY2FsbGVkV2l0aE5ldygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3h5LnByb3RvdHlwZSAmJiB0aGlzLnRoaXNWYWx1ZSBpbnN0YW5jZW9mIHRoaXMucHJveHk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbGVkQmVmb3JlOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGxJZCA8IG90aGVyLmNhbGxJZDtcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsZWRBZnRlcjogZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsSWQgPiBvdGhlci5jYWxsSWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbEFyZzogZnVuY3Rpb24gKHBvcykge1xuICAgICAgICAgICAgdGhpcy5hcmdzW3Bvc10oKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsQXJnT246IGZ1bmN0aW9uIChwb3MsIHRoaXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcmdzW3Bvc10uYXBwbHkodGhpc1ZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsQXJnV2l0aDogZnVuY3Rpb24gKHBvcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsQXJnT25XaXRoLmFwcGx5KHRoaXMsIFtwb3MsIG51bGxdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsQXJnT25XaXRoOiBmdW5jdGlvbiAocG9zLCB0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICAgICAgdGhpcy5hcmdzW3Bvc10uYXBwbHkodGhpc1ZhbHVlLCBhcmdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBcInlpZWxkXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMueWllbGRPbi5hcHBseSh0aGlzLCBbbnVsbF0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSkpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHlpZWxkT246IGZ1bmN0aW9uICh0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmdzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1tpXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0uYXBwbHkodGhpc1ZhbHVlLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3dZaWVsZEVycm9yKHRoaXMucHJveHksIFwiIGNhbm5vdCB5aWVsZCBzaW5jZSBubyBjYWxsYmFjayB3YXMgcGFzc2VkLlwiLCBhcmdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICB5aWVsZFRvOiBmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgdGhpcy55aWVsZFRvT24uYXBwbHkodGhpcywgW3Byb3AsIG51bGxdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpKTtcbiAgICAgICAgfSxcblxuICAgICAgICB5aWVsZFRvT246IGZ1bmN0aW9uIChwcm9wLCB0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmdzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzW2ldICYmIHR5cGVvZiBhcmdzW2ldW3Byb3BdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tpXVtwcm9wXS5hcHBseSh0aGlzVmFsdWUsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvd1lpZWxkRXJyb3IodGhpcy5wcm94eSwgXCIgY2Fubm90IHlpZWxkIHRvICdcIiArIHByb3AgK1xuICAgICAgICAgICAgICAgIFwiJyBzaW5jZSBubyBjYWxsYmFjayB3YXMgcGFzc2VkLlwiLCBhcmdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNhbGxTdHIgPSB0aGlzLnByb3h5LnRvU3RyaW5nKCkgKyBcIihcIjtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5hcmdzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaChzaW5vbi5mb3JtYXQodGhpcy5hcmdzW2ldKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxTdHIgPSBjYWxsU3RyICsgYXJncy5qb2luKFwiLCBcIikgKyBcIilcIjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldHVyblZhbHVlICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBjYWxsU3RyICs9IFwiID0+IFwiICsgc2lub24uZm9ybWF0KHRoaXMucmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5leGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICBjYWxsU3RyICs9IFwiICFcIiArIHRoaXMuZXhjZXB0aW9uLm5hbWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5leGNlcHRpb24ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsU3RyICs9IFwiKFwiICsgdGhpcy5leGNlcHRpb24ubWVzc2FnZSArIFwiKVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxTdHI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY2FsbFByb3RvLmludm9rZUNhbGxiYWNrID0gY2FsbFByb3RvLnlpZWxkO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlU3B5Q2FsbChzcHksIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuVmFsdWUsIGV4Y2VwdGlvbiwgaWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbGwgaWQgaXMgbm90IGEgbnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm94eUNhbGwgPSBzaW5vbi5jcmVhdGUoY2FsbFByb3RvKTtcbiAgICAgICAgcHJveHlDYWxsLnByb3h5ID0gc3B5O1xuICAgICAgICBwcm94eUNhbGwudGhpc1ZhbHVlID0gdGhpc1ZhbHVlO1xuICAgICAgICBwcm94eUNhbGwuYXJncyA9IGFyZ3M7XG4gICAgICAgIHByb3h5Q2FsbC5yZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlO1xuICAgICAgICBwcm94eUNhbGwuZXhjZXB0aW9uID0gZXhjZXB0aW9uO1xuICAgICAgICBwcm94eUNhbGwuY2FsbElkID0gaWQ7XG5cbiAgICAgICAgcmV0dXJuIHByb3h5Q2FsbDtcbiAgICB9XG4gICAgY3JlYXRlU3B5Q2FsbC50b1N0cmluZyA9IGNhbGxQcm90by50b1N0cmluZzsgLy8gdXNlZCBieSBtb2Nrc1xuXG4gICAgc2lub24uc3B5Q2FsbCA9IGNyZWF0ZVNweUNhbGw7XG5cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKFtcIm1vZHVsZVwiXSwgZnVuY3Rpb24obW9kdWxlKSB7IG1vZHVsZS5leHBvcnRzID0gY3JlYXRlU3B5Q2FsbDsgfSk7XG4gICAgfSBlbHNlIGlmIChjb21tb25KU01vZHVsZSkge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNweUNhbGw7XG4gICAgfVxufSh0eXBlb2Ygc2lub24gPT0gXCJvYmplY3RcIiAmJiBzaW5vbiB8fCBudWxsKSk7XG5cbiIsIi8qKlxuICogQGRlcGVuZCAuLi9zaW5vbi5qc1xuICogQGRlcGVuZCBzdHViLmpzXG4gKiBAZGVwZW5kIG1vY2suanNcbiAqL1xuLypqc2xpbnQgZXFlcWVxOiBmYWxzZSwgb25ldmFyOiBmYWxzZSwgZm9yaW46IHRydWUqL1xuLypnbG9iYWwgbW9kdWxlLCByZXF1aXJlLCBzaW5vbiovXG4vKipcbiAqIENvbGxlY3Rpb25zIG9mIHN0dWJzLCBzcGllcyBhbmQgbW9ja3MuXG4gKlxuICogQGF1dGhvciBDaHJpc3RpYW4gSm9oYW5zZW4gKGNocmlzdGlhbkBjam9oYW5zZW4ubm8pXG4gKiBAbGljZW5zZSBCU0RcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMyBDaHJpc3RpYW4gSm9oYW5zZW5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbihmdW5jdGlvbiAoc2lub24pIHtcbiAgICB2YXIgY29tbW9uSlNNb2R1bGUgPSB0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzICYmIHR5cGVvZiByZXF1aXJlID09IFwiZnVuY3Rpb25cIjtcbiAgICB2YXIgcHVzaCA9IFtdLnB1c2g7XG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgIGlmICghc2lub24gJiYgY29tbW9uSlNNb2R1bGUpIHtcbiAgICAgICAgc2lub24gPSByZXF1aXJlKFwiLi4vc2lub25cIik7XG4gICAgfVxuXG4gICAgaWYgKCFzaW5vbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RmFrZXMoZmFrZUNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKCFmYWtlQ29sbGVjdGlvbi5mYWtlcykge1xuICAgICAgICAgICAgZmFrZUNvbGxlY3Rpb24uZmFrZXMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWtlQ29sbGVjdGlvbi5mYWtlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlYWNoKGZha2VDb2xsZWN0aW9uLCBtZXRob2QpIHtcbiAgICAgICAgdmFyIGZha2VzID0gZ2V0RmFrZXMoZmFrZUNvbGxlY3Rpb24pO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZmFrZXMubGVuZ3RoOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZha2VzW2ldW21ldGhvZF0gPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgZmFrZXNbaV1bbWV0aG9kXSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcGFjdChmYWtlQ29sbGVjdGlvbikge1xuICAgICAgICB2YXIgZmFrZXMgPSBnZXRGYWtlcyhmYWtlQ29sbGVjdGlvbik7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCBmYWtlcy5sZW5ndGgpIHtcbiAgICAgICAgICBmYWtlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY29sbGVjdGlvbiA9IHtcbiAgICAgICAgdmVyaWZ5OiBmdW5jdGlvbiByZXNvbHZlKCkge1xuICAgICAgICAgICAgZWFjaCh0aGlzLCBcInZlcmlmeVwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiByZXN0b3JlKCkge1xuICAgICAgICAgICAgZWFjaCh0aGlzLCBcInJlc3RvcmVcIik7XG4gICAgICAgICAgICBjb21wYWN0KHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHZlcmlmeUFuZFJlc3RvcmU6IGZ1bmN0aW9uIHZlcmlmeUFuZFJlc3RvcmUoKSB7XG4gICAgICAgICAgICB2YXIgZXhjZXB0aW9uO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMudmVyaWZ5KCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG5cbiAgICAgICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRkOiBmdW5jdGlvbiBhZGQoZmFrZSkge1xuICAgICAgICAgICAgcHVzaC5jYWxsKGdldEZha2VzKHRoaXMpLCBmYWtlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWtlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNweTogZnVuY3Rpb24gc3B5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHNpbm9uLnNweS5hcHBseShzaW5vbiwgYXJndW1lbnRzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3R1YjogZnVuY3Rpb24gc3R1YihvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gb2JqZWN0W3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBzdHViIG5vbi1leGlzdGVudCBvd24gcHJvcGVydHkgXCIgKyBwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gb3JpZ2luYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcHJvcGVydHkgJiYgISFvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0dWJiZWRPYmogPSBzaW5vbi5zdHViLmFwcGx5KHNpbm9uLCBhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzdHViYmVkT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R1YmJlZE9ialtwcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZChzdHViYmVkT2JqW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBzdHViYmVkT2JqO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoc2lub24uc3R1Yi5hcHBseShzaW5vbiwgYXJndW1lbnRzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbW9jazogZnVuY3Rpb24gbW9jaygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChzaW5vbi5tb2NrLmFwcGx5KHNpbm9uLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpbmplY3Q6IGZ1bmN0aW9uIGluamVjdChvYmopIHtcbiAgICAgICAgICAgIHZhciBjb2wgPSB0aGlzO1xuXG4gICAgICAgICAgICBvYmouc3B5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wuc3B5LmFwcGx5KGNvbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIG9iai5zdHViID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wuc3R1Yi5hcHBseShjb2wsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBvYmoubW9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLm1vY2suYXBwbHkoY29sLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzaW5vbi5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcblxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW1wibW9kdWxlXCJdLCBmdW5jdGlvbihtb2R1bGUpIHsgbW9kdWxlLmV4cG9ydHMgPSBjb2xsZWN0aW9uOyB9KTtcbiAgICB9IGVsc2UgaWYgKGNvbW1vbkpTTW9kdWxlKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gY29sbGVjdGlvbjtcbiAgICB9XG59KHR5cGVvZiBzaW5vbiA9PSBcIm9iamVjdFwiICYmIHNpbm9uIHx8IG51bGwpKTtcbiIsIi8qIEBkZXBlbmQgLi4vc2lub24uanMgKi9cbi8qanNsaW50IGVxZXFlcTogZmFsc2UsIG9uZXZhcjogZmFsc2UsIHBsdXNwbHVzOiBmYWxzZSovXG4vKmdsb2JhbCBtb2R1bGUsIHJlcXVpcmUsIHNpbm9uKi9cbi8qKlxuICogTWF0Y2ggZnVuY3Rpb25zXG4gKlxuICogQGF1dGhvciBNYXhpbWlsaWFuIEFudG9uaSAobWFpbEBtYXhhbnRvbmkuZGUpXG4gKiBAbGljZW5zZSBCU0RcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgTWF4aW1pbGlhbiBBbnRvbmlcbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbihmdW5jdGlvbiAoc2lub24pIHtcbiAgICB2YXIgY29tbW9uSlNNb2R1bGUgPSB0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzICYmIHR5cGVvZiByZXF1aXJlID09IFwiZnVuY3Rpb25cIjtcblxuICAgIGlmICghc2lub24gJiYgY29tbW9uSlNNb2R1bGUpIHtcbiAgICAgICAgc2lub24gPSByZXF1aXJlKFwiLi4vc2lub25cIik7XG4gICAgfVxuXG4gICAgaWYgKCFzaW5vbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZSwgbmFtZSkge1xuICAgICAgICB2YXIgYWN0dWFsID0gc2lub24udHlwZU9mKHZhbHVlKTtcbiAgICAgICAgaWYgKGFjdHVhbCAhPT0gdHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHR5cGUgb2YgXCIgKyBuYW1lICsgXCIgdG8gYmUgXCIgK1xuICAgICAgICAgICAgICAgIHR5cGUgKyBcIiwgYnV0IHdhcyBcIiArIGFjdHVhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hlciA9IHtcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaXNNYXRjaGVyKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlci5pc1Byb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hPYmplY3QoZXhwZWN0YXRpb24sIGFjdHVhbCkge1xuICAgICAgICBpZiAoYWN0dWFsID09PSBudWxsIHx8IGFjdHVhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIga2V5IGluIGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZXhwZWN0YXRpb24uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZhciBleHAgPSBleHBlY3RhdGlvbltrZXldO1xuICAgICAgICAgICAgICAgIHZhciBhY3QgPSBhY3R1YWxba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2guaXNNYXRjaGVyKGV4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHAudGVzdChhY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpbm9uLnR5cGVPZihleHApID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hPYmplY3QoZXhwLCBhY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzaW5vbi5kZWVwRXF1YWwoZXhwLCBhY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbWF0Y2hlci5vciA9IGZ1bmN0aW9uIChtMikge1xuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNYXRjaGVyIGV4cGVjdGVkXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc01hdGNoZXIobTIpKSB7XG4gICAgICAgICAgICBtMiA9IG1hdGNoKG0yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbTEgPSB0aGlzO1xuICAgICAgICB2YXIgb3IgPSBzaW5vbi5jcmVhdGUobWF0Y2hlcik7XG4gICAgICAgIG9yLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gbTEudGVzdChhY3R1YWwpIHx8IG0yLnRlc3QoYWN0dWFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgb3IubWVzc2FnZSA9IG0xLm1lc3NhZ2UgKyBcIi5vcihcIiArIG0yLm1lc3NhZ2UgKyBcIilcIjtcbiAgICAgICAgcmV0dXJuIG9yO1xuICAgIH07XG5cbiAgICBtYXRjaGVyLmFuZCA9IGZ1bmN0aW9uIChtMikge1xuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNYXRjaGVyIGV4cGVjdGVkXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc01hdGNoZXIobTIpKSB7XG4gICAgICAgICAgICBtMiA9IG1hdGNoKG0yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbTEgPSB0aGlzO1xuICAgICAgICB2YXIgYW5kID0gc2lub24uY3JlYXRlKG1hdGNoZXIpO1xuICAgICAgICBhbmQudGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBtMS50ZXN0KGFjdHVhbCkgJiYgbTIudGVzdChhY3R1YWwpO1xuICAgICAgICB9O1xuICAgICAgICBhbmQubWVzc2FnZSA9IG0xLm1lc3NhZ2UgKyBcIi5hbmQoXCIgKyBtMi5tZXNzYWdlICsgXCIpXCI7XG4gICAgICAgIHJldHVybiBhbmQ7XG4gICAgfTtcblxuICAgIHZhciBtYXRjaCA9IGZ1bmN0aW9uIChleHBlY3RhdGlvbiwgbWVzc2FnZSkge1xuICAgICAgICB2YXIgbSA9IHNpbm9uLmNyZWF0ZShtYXRjaGVyKTtcbiAgICAgICAgdmFyIHR5cGUgPSBzaW5vbi50eXBlT2YoZXhwZWN0YXRpb24pO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBlY3RhdGlvbi50ZXN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBtLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi50ZXN0KGFjdHVhbCkgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtLm1lc3NhZ2UgPSBcIm1hdGNoKFwiICsgc2lub24uZnVuY3Rpb25OYW1lKGV4cGVjdGF0aW9uLnRlc3QpICsgXCIpXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3RyID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwZWN0YXRpb24uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBzdHIucHVzaChrZXkgKyBcIjogXCIgKyBleHBlY3RhdGlvbltrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoT2JqZWN0KGV4cGVjdGF0aW9uLCBhY3R1YWwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG0ubWVzc2FnZSA9IFwibWF0Y2goXCIgKyBzdHIuam9pbihcIiwgXCIpICsgXCIpXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbiA9PSBhY3R1YWw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIG0udGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdHVhbCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY3R1YWwuaW5kZXhPZihleHBlY3RhdGlvbikgIT09IC0xO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG0ubWVzc2FnZSA9IFwibWF0Y2goXFxcIlwiICsgZXhwZWN0YXRpb24gKyBcIlxcXCIpXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlZ2V4cFwiOlxuICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0dWFsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uLnRlc3QoYWN0dWFsKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICBtLnRlc3QgPSBleHBlY3RhdGlvbjtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgbS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbS5tZXNzYWdlID0gXCJtYXRjaChcIiArIHNpbm9uLmZ1bmN0aW9uTmFtZShleHBlY3RhdGlvbikgKyBcIilcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICByZXR1cm4gc2lub24uZGVlcEVxdWFsKGV4cGVjdGF0aW9uLCBhY3R1YWwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW0ubWVzc2FnZSkge1xuICAgICAgICAgICAgbS5tZXNzYWdlID0gXCJtYXRjaChcIiArIGV4cGVjdGF0aW9uICsgXCIpXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfTtcblxuICAgIG1hdGNoLmlzTWF0Y2hlciA9IGlzTWF0Y2hlcjtcblxuICAgIG1hdGNoLmFueSA9IG1hdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgXCJhbnlcIik7XG5cbiAgICBtYXRjaC5kZWZpbmVkID0gbWF0Y2goZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gYWN0dWFsICE9PSBudWxsICYmIGFjdHVhbCAhPT0gdW5kZWZpbmVkO1xuICAgIH0sIFwiZGVmaW5lZFwiKTtcblxuICAgIG1hdGNoLnRydXRoeSA9IG1hdGNoKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuICEhYWN0dWFsO1xuICAgIH0sIFwidHJ1dGh5XCIpO1xuXG4gICAgbWF0Y2guZmFsc3kgPSBtYXRjaChmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIHJldHVybiAhYWN0dWFsO1xuICAgIH0sIFwiZmFsc3lcIik7XG5cbiAgICBtYXRjaC5zYW1lID0gZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtYXRjaChmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24gPT09IGFjdHVhbDtcbiAgICAgICAgfSwgXCJzYW1lKFwiICsgZXhwZWN0YXRpb24gKyBcIilcIik7XG4gICAgfTtcblxuICAgIG1hdGNoLnR5cGVPZiA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGFzc2VydFR5cGUodHlwZSwgXCJzdHJpbmdcIiwgXCJ0eXBlXCIpO1xuICAgICAgICByZXR1cm4gbWF0Y2goZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHNpbm9uLnR5cGVPZihhY3R1YWwpID09PSB0eXBlO1xuICAgICAgICB9LCBcInR5cGVPZihcXFwiXCIgKyB0eXBlICsgXCJcXFwiKVwiKTtcbiAgICB9O1xuXG4gICAgbWF0Y2guaW5zdGFuY2VPZiA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGFzc2VydFR5cGUodHlwZSwgXCJmdW5jdGlvblwiLCBcInR5cGVcIik7XG4gICAgICAgIHJldHVybiBtYXRjaChmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0dWFsIGluc3RhbmNlb2YgdHlwZTtcbiAgICAgICAgfSwgXCJpbnN0YW5jZU9mKFwiICsgc2lub24uZnVuY3Rpb25OYW1lKHR5cGUpICsgXCIpXCIpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eU1hdGNoZXIocHJvcGVydHlUZXN0LCBtZXNzYWdlUHJlZml4KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAgICAgICBhc3NlcnRUeXBlKHByb3BlcnR5LCBcInN0cmluZ1wiLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgICAgdmFyIG9ubHlQcm9wZXJ0eSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VQcmVmaXggKyBcIihcXFwiXCIgKyBwcm9wZXJ0eSArIFwiXFxcIlwiO1xuICAgICAgICAgICAgaWYgKCFvbmx5UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFwiLCBcIiArIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWVzc2FnZSArPSBcIilcIjtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaChmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdHVhbCA9PT0gdW5kZWZpbmVkIHx8IGFjdHVhbCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BlcnR5VGVzdChhY3R1YWwsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvbmx5UHJvcGVydHkgfHwgc2lub24uZGVlcEVxdWFsKHZhbHVlLCBhY3R1YWxbcHJvcGVydHldKTtcbiAgICAgICAgICAgIH0sIG1lc3NhZ2UpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1hdGNoLmhhcyA9IGNyZWF0ZVByb3BlcnR5TWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsLCBwcm9wZXJ0eSkge1xuICAgICAgICBpZiAodHlwZW9mIGFjdHVhbCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5IGluIGFjdHVhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0dWFsW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkO1xuICAgIH0sIFwiaGFzXCIpO1xuXG4gICAgbWF0Y2guaGFzT3duID0gY3JlYXRlUHJvcGVydHlNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwsIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiBhY3R1YWwuaGFzT3duUHJvcGVydHkocHJvcGVydHkpO1xuICAgIH0sIFwiaGFzT3duXCIpO1xuXG4gICAgbWF0Y2guYm9vbCA9IG1hdGNoLnR5cGVPZihcImJvb2xlYW5cIik7XG4gICAgbWF0Y2gubnVtYmVyID0gbWF0Y2gudHlwZU9mKFwibnVtYmVyXCIpO1xuICAgIG1hdGNoLnN0cmluZyA9IG1hdGNoLnR5cGVPZihcInN0cmluZ1wiKTtcbiAgICBtYXRjaC5vYmplY3QgPSBtYXRjaC50eXBlT2YoXCJvYmplY3RcIik7XG4gICAgbWF0Y2guZnVuYyA9IG1hdGNoLnR5cGVPZihcImZ1bmN0aW9uXCIpO1xuICAgIG1hdGNoLmFycmF5ID0gbWF0Y2gudHlwZU9mKFwiYXJyYXlcIik7XG4gICAgbWF0Y2gucmVnZXhwID0gbWF0Y2gudHlwZU9mKFwicmVnZXhwXCIpO1xuICAgIG1hdGNoLmRhdGUgPSBtYXRjaC50eXBlT2YoXCJkYXRlXCIpO1xuXG4gICAgc2lub24ubWF0Y2ggPSBtYXRjaDtcblxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW1wibW9kdWxlXCJdLCBmdW5jdGlvbihtb2R1bGUpIHsgbW9kdWxlLmV4cG9ydHMgPSBtYXRjaDsgfSk7XG4gICAgfSBlbHNlIGlmIChjb21tb25KU01vZHVsZSkge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1hdGNoO1xuICAgIH1cbn0odHlwZW9mIHNpbm9uID09IFwib2JqZWN0XCIgJiYgc2lub24gfHwgbnVsbCkpO1xuIiwiLyoqXG4gKiBAZGVwZW5kIC4uL3Npbm9uLmpzXG4gKiBAZGVwZW5kIHN0dWIuanNcbiAqL1xuLypqc2xpbnQgZXFlcWVxOiBmYWxzZSwgb25ldmFyOiBmYWxzZSwgbm9tZW46IGZhbHNlKi9cbi8qZ2xvYmFsIG1vZHVsZSwgcmVxdWlyZSwgc2lub24qL1xuLyoqXG4gKiBNb2NrIGZ1bmN0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIENocmlzdGlhbiBKb2hhbnNlbiAoY2hyaXN0aWFuQGNqb2hhbnNlbi5ubylcbiAqIEBsaWNlbnNlIEJTRFxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIENocmlzdGlhbiBKb2hhbnNlblxuICovXG5cInVzZSBzdHJpY3RcIjtcblxuKGZ1bmN0aW9uIChzaW5vbikge1xuICAgIHZhciBjb21tb25KU01vZHVsZSA9IHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMgJiYgdHlwZW9mIHJlcXVpcmUgPT0gXCJmdW5jdGlvblwiO1xuICAgIHZhciBwdXNoID0gW10ucHVzaDtcbiAgICB2YXIgbWF0Y2g7XG5cbiAgICBpZiAoIXNpbm9uICYmIGNvbW1vbkpTTW9kdWxlKSB7XG4gICAgICAgIHNpbm9uID0gcmVxdWlyZShcIi4uL3Npbm9uXCIpO1xuICAgIH1cblxuICAgIGlmICghc2lub24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hdGNoID0gc2lub24ubWF0Y2g7XG5cbiAgICBpZiAoIW1hdGNoICYmIGNvbW1vbkpTTW9kdWxlKSB7XG4gICAgICAgIG1hdGNoID0gcmVxdWlyZShcIi4vbWF0Y2hcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9jayhvYmplY3QpIHtcbiAgICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBzaW5vbi5leHBlY3RhdGlvbi5jcmVhdGUoXCJBbm9ueW1vdXMgbW9ja1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb2NrLmNyZWF0ZShvYmplY3QpO1xuICAgIH1cblxuICAgIHNpbm9uLm1vY2sgPSBtb2NrO1xuXG4gICAgc2lub24uZXh0ZW5kKG1vY2ssIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGVhY2goY29sbGVjdGlvbiwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNvbGxlY3Rpb25baV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvYmplY3QgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgbW9ja09iamVjdCA9IHNpbm9uLmV4dGVuZCh7fSwgbW9jayk7XG4gICAgICAgICAgICAgICAgbW9ja09iamVjdC5vYmplY3QgPSBvYmplY3Q7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG1vY2tPYmplY3QuY3JlYXRlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vY2tPYmplY3Q7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBleHBlY3RzOiBmdW5jdGlvbiBleHBlY3RzKG1ldGhvZCkge1xuICAgICAgICAgICAgICAgIGlmICghbWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtZXRob2QgaXMgZmFsc3lcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmV4cGVjdGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdGF0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3hpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RhdGlvbnNbbWV0aG9kXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9ja09iamVjdCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgc2lub24ud3JhcE1ldGhvZCh0aGlzLm9iamVjdCwgbWV0aG9kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9ja09iamVjdC5pbnZva2VNZXRob2QobWV0aG9kLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBwdXNoLmNhbGwodGhpcy5wcm94aWVzLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBleHBlY3RhdGlvbiA9IHNpbm9uLmV4cGVjdGF0aW9uLmNyZWF0ZShtZXRob2QpO1xuICAgICAgICAgICAgICAgIHB1c2guY2FsbCh0aGlzLmV4cGVjdGF0aW9uc1ttZXRob2RdLCBleHBlY3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb247XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiByZXN0b3JlKCkge1xuICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB0aGlzLm9iamVjdDtcblxuICAgICAgICAgICAgICAgIGVhY2godGhpcy5wcm94aWVzLCBmdW5jdGlvbiAocHJveHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3RbcHJveHldLnJlc3RvcmUgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbcHJveHldLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdmVyaWZ5OiBmdW5jdGlvbiB2ZXJpZnkoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4cGVjdGF0aW9ucyA9IHRoaXMuZXhwZWN0YXRpb25zIHx8IHt9O1xuICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlcyA9IFtdLCBtZXQgPSBbXTtcblxuICAgICAgICAgICAgICAgIGVhY2godGhpcy5wcm94aWVzLCBmdW5jdGlvbiAocHJveHkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWFjaChleHBlY3RhdGlvbnNbcHJveHldLCBmdW5jdGlvbiAoZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXhwZWN0YXRpb24ubWV0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmNhbGwobWVzc2FnZXMsIGV4cGVjdGF0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmNhbGwobWV0LCBleHBlY3RhdGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcblxuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbm9uLmV4cGVjdGF0aW9uLmZhaWwobWVzc2FnZXMuY29uY2F0KG1ldCkuam9pbihcIlxcblwiKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2lub24uZXhwZWN0YXRpb24ucGFzcyhtZXNzYWdlcy5jb25jYXQobWV0KS5qb2luKFwiXFxuXCIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGludm9rZU1ldGhvZDogZnVuY3Rpb24gaW52b2tlTWV0aG9kKG1ldGhvZCwgdGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4cGVjdGF0aW9ucyA9IHRoaXMuZXhwZWN0YXRpb25zICYmIHRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF07XG4gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGV4cGVjdGF0aW9ucyAmJiBleHBlY3RhdGlvbnMubGVuZ3RoIHx8IDAsIGk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHBlY3RhdGlvbnNbaV0ubWV0KCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc1tpXS5hbGxvd3NDYWxsKHRoaXNWYWx1ZSwgYXJncykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbnNbaV0uYXBwbHkodGhpc1ZhbHVlLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlcyA9IFtdLCBhdmFpbGFibGUsIGV4aGF1c3RlZCA9IDA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uc1tpXS5hbGxvd3NDYWxsKHRoaXNWYWx1ZSwgYXJncykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGF2YWlsYWJsZSB8fCBleHBlY3RhdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGhhdXN0ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwdXNoLmNhbGwobWVzc2FnZXMsIFwiICAgIFwiICsgZXhwZWN0YXRpb25zW2ldLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChleGhhdXN0ZWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZS5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLnVuc2hpZnQoXCJVbmV4cGVjdGVkIGNhbGw6IFwiICsgc2lub24uc3B5Q2FsbC50b1N0cmluZy5jYWxsKHtcbiAgICAgICAgICAgICAgICAgICAgcHJveHk6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnc1xuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNpbm9uLmV4cGVjdGF0aW9uLmZhaWwobWVzc2FnZXMuam9pbihcIlxcblwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSgpKSk7XG5cbiAgICB2YXIgdGltZXMgPSBzaW5vbi50aW1lc0luV29yZHM7XG5cbiAgICBzaW5vbi5leHBlY3RhdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiAgICAgICAgdmFyIF9pbnZva2UgPSBzaW5vbi5zcHkuaW52b2tlO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNhbGxDb3VudEluV29yZHMoY2FsbENvdW50KSB7XG4gICAgICAgICAgICBpZiAoY2FsbENvdW50ID09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJuZXZlciBjYWxsZWRcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY2FsbGVkIFwiICsgdGltZXMoY2FsbENvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGV4cGVjdGVkQ2FsbENvdW50SW5Xb3JkcyhleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgdmFyIG1pbiA9IGV4cGVjdGF0aW9uLm1pbkNhbGxzO1xuICAgICAgICAgICAgdmFyIG1heCA9IGV4cGVjdGF0aW9uLm1heENhbGxzO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1pbiA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBtYXggPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHZhciBzdHIgPSB0aW1lcyhtaW4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1pbiAhPSBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gXCJhdCBsZWFzdCBcIiArIHN0ciArIFwiIGFuZCBhdCBtb3N0IFwiICsgdGltZXMobWF4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1pbiA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYXQgbGVhc3QgXCIgKyB0aW1lcyhtaW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gXCJhdCBtb3N0IFwiICsgdGltZXMobWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVkTWluQ2FsbHMoZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIHZhciBoYXNNaW5MaW1pdCA9IHR5cGVvZiBleHBlY3RhdGlvbi5taW5DYWxscyA9PSBcIm51bWJlclwiO1xuICAgICAgICAgICAgcmV0dXJuICFoYXNNaW5MaW1pdCB8fCBleHBlY3RhdGlvbi5jYWxsQ291bnQgPj0gZXhwZWN0YXRpb24ubWluQ2FsbHM7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWNlaXZlZE1heENhbGxzKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4cGVjdGF0aW9uLm1heENhbGxzICE9IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5jYWxsQ291bnQgPT0gZXhwZWN0YXRpb24ubWF4Q2FsbHM7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB2ZXJpZnlNYXRjaGVyKHBvc3NpYmxlTWF0Y2hlciwgYXJnKXtcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5pc01hdGNoZXIocG9zc2libGVNYXRjaGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb3NzaWJsZU1hdGNoZXIudGVzdChhcmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW5DYWxsczogMSxcbiAgICAgICAgICAgIG1heENhbGxzOiAxLFxuXG4gICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZShtZXRob2ROYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4cGVjdGF0aW9uID0gc2lub24uZXh0ZW5kKHNpbm9uLnN0dWIuY3JlYXRlKCksIHNpbm9uLmV4cGVjdGF0aW9uKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZXhwZWN0YXRpb24uY3JlYXRlO1xuICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uLm1ldGhvZCA9IG1ldGhvZE5hbWU7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb247XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBpbnZva2U6IGZ1bmN0aW9uIGludm9rZShmdW5jLCB0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcmlmeUNhbGxBbGxvd2VkKHRoaXNWYWx1ZSwgYXJncyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ludm9rZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXRMZWFzdDogZnVuY3Rpb24gYXRMZWFzdChudW0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG51bSAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCInXCIgKyBudW0gKyBcIicgaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubGltaXRzU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4Q2FsbHMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbWl0c1NldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5taW5DYWxscyA9IG51bTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXRNb3N0OiBmdW5jdGlvbiBhdE1vc3QobnVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBudW0gIT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiJ1wiICsgbnVtICsgXCInIGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxpbWl0c1NldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbkNhbGxzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW1pdHNTZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubWF4Q2FsbHMgPSBudW07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG5ldmVyOiBmdW5jdGlvbiBuZXZlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leGFjdGx5KDApO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgb25jZTogZnVuY3Rpb24gb25jZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leGFjdGx5KDEpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdHdpY2U6IGZ1bmN0aW9uIHR3aWNlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4YWN0bHkoMik7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0aHJpY2U6IGZ1bmN0aW9uIHRocmljZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leGFjdGx5KDMpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZXhhY3RseTogZnVuY3Rpb24gZXhhY3RseShudW0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG51bSAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCInXCIgKyBudW0gKyBcIicgaXMgbm90IGEgbnVtYmVyXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuYXRMZWFzdChudW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF0TW9zdChudW0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgbWV0OiBmdW5jdGlvbiBtZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmZhaWxlZCAmJiByZWNlaXZlZE1pbkNhbGxzKHRoaXMpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdmVyaWZ5Q2FsbEFsbG93ZWQ6IGZ1bmN0aW9uIHZlcmlmeUNhbGxBbGxvd2VkKHRoaXNWYWx1ZSwgYXJncykge1xuICAgICAgICAgICAgICAgIGlmIChyZWNlaXZlZE1heENhbGxzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2lub24uZXhwZWN0YXRpb24uZmFpbCh0aGlzLm1ldGhvZCArIFwiIGFscmVhZHkgY2FsbGVkIFwiICsgdGltZXModGhpcy5tYXhDYWxscykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcImV4cGVjdGVkVGhpc1wiIGluIHRoaXMgJiYgdGhpcy5leHBlY3RlZFRoaXMgIT09IHRoaXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzaW5vbi5leHBlY3RhdGlvbi5mYWlsKHRoaXMubWV0aG9kICsgXCIgY2FsbGVkIHdpdGggXCIgKyB0aGlzVmFsdWUgKyBcIiBhcyB0aGlzVmFsdWUsIGV4cGVjdGVkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0ZWRUaGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIShcImV4cGVjdGVkQXJndW1lbnRzXCIgaW4gdGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgICAgICAgICBzaW5vbi5leHBlY3RhdGlvbi5mYWlsKHRoaXMubWV0aG9kICsgXCIgcmVjZWl2ZWQgbm8gYXJndW1lbnRzLCBleHBlY3RlZCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5vbi5mb3JtYXQodGhpcy5leHBlY3RlZEFyZ3VtZW50cykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IHRoaXMuZXhwZWN0ZWRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbm9uLmV4cGVjdGF0aW9uLmZhaWwodGhpcy5tZXRob2QgKyBcIiByZWNlaXZlZCB0b28gZmV3IGFyZ3VtZW50cyAoXCIgKyBzaW5vbi5mb3JtYXQoYXJncykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIpLCBleHBlY3RlZCBcIiArIHNpbm9uLmZvcm1hdCh0aGlzLmV4cGVjdGVkQXJndW1lbnRzKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhwZWN0c0V4YWN0QXJnQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgYXJncy5sZW5ndGggIT0gdGhpcy5leHBlY3RlZEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lub24uZXhwZWN0YXRpb24uZmFpbCh0aGlzLm1ldGhvZCArIFwiIHJlY2VpdmVkIHRvbyBtYW55IGFyZ3VtZW50cyAoXCIgKyBzaW5vbi5mb3JtYXQoYXJncykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIpLCBleHBlY3RlZCBcIiArIHNpbm9uLmZvcm1hdCh0aGlzLmV4cGVjdGVkQXJndW1lbnRzKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmV4cGVjdGVkQXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmVyaWZ5TWF0Y2hlcih0aGlzLmV4cGVjdGVkQXJndW1lbnRzW2ldLGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5vbi5leHBlY3RhdGlvbi5mYWlsKHRoaXMubWV0aG9kICsgXCIgcmVjZWl2ZWQgd3JvbmcgYXJndW1lbnRzIFwiICsgc2lub24uZm9ybWF0KGFyZ3MpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgZGlkbid0IG1hdGNoIFwiICsgdGhpcy5leHBlY3RlZEFyZ3VtZW50cy50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2lub24uZGVlcEVxdWFsKHRoaXMuZXhwZWN0ZWRBcmd1bWVudHNbaV0sIGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5vbi5leHBlY3RhdGlvbi5mYWlsKHRoaXMubWV0aG9kICsgXCIgcmVjZWl2ZWQgd3JvbmcgYXJndW1lbnRzIFwiICsgc2lub24uZm9ybWF0KGFyZ3MpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgZXhwZWN0ZWQgXCIgKyBzaW5vbi5mb3JtYXQodGhpcy5leHBlY3RlZEFyZ3VtZW50cykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYWxsb3dzQ2FsbDogZnVuY3Rpb24gYWxsb3dzQ2FsbCh0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXQoKSAmJiByZWNlaXZlZE1heENhbGxzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoXCJleHBlY3RlZFRoaXNcIiBpbiB0aGlzICYmIHRoaXMuZXhwZWN0ZWRUaGlzICE9PSB0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghKFwiZXhwZWN0ZWRBcmd1bWVudHNcIiBpbiB0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhcmdzID0gYXJncyB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IHRoaXMuZXhwZWN0ZWRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBlY3RzRXhhY3RBcmdDb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aCAhPSB0aGlzLmV4cGVjdGVkQXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmV4cGVjdGVkQXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZlcmlmeU1hdGNoZXIodGhpcy5leHBlY3RlZEFyZ3VtZW50c1tpXSxhcmdzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzaW5vbi5kZWVwRXF1YWwodGhpcy5leHBlY3RlZEFyZ3VtZW50c1tpXSwgYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgd2l0aEFyZ3M6IGZ1bmN0aW9uIHdpdGhBcmdzKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0ZWRBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB3aXRoRXhhY3RBcmdzOiBmdW5jdGlvbiB3aXRoRXhhY3RBcmdzKCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2l0aEFyZ3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdHNFeGFjdEFyZ0NvdW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG9uOiBmdW5jdGlvbiBvbih0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdGVkVGhpcyA9IHRoaXNWYWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAodGhpcy5leHBlY3RlZEFyZ3VtZW50cyB8fCBbXSkuc2xpY2UoKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5leHBlY3RzRXhhY3RBcmdDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBwdXNoLmNhbGwoYXJncywgXCJbLi4uXVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsbFN0ciA9IHNpbm9uLnNweUNhbGwudG9TdHJpbmcuY2FsbCh7XG4gICAgICAgICAgICAgICAgICAgIHByb3h5OiB0aGlzLm1ldGhvZCB8fCBcImFub255bW91cyBtb2NrIGV4cGVjdGF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3NcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gY2FsbFN0ci5yZXBsYWNlKFwiLCBbLi4uXCIsIFwiWywgLi4uXCIpICsgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZENhbGxDb3VudEluV29yZHModGhpcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJFeHBlY3RhdGlvbiBtZXQ6IFwiICsgbWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gXCJFeHBlY3RlZCBcIiArIG1lc3NhZ2UgKyBcIiAoXCIgK1xuICAgICAgICAgICAgICAgICAgICBjYWxsQ291bnRJbldvcmRzKHRoaXMuY2FsbENvdW50KSArIFwiKVwiO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdmVyaWZ5OiBmdW5jdGlvbiB2ZXJpZnkoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1ldCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpbm9uLmV4cGVjdGF0aW9uLmZhaWwodGhpcy50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzaW5vbi5leHBlY3RhdGlvbi5wYXNzKHRoaXMudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBwYXNzOiBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgICAgICAgICAgIHNpbm9uLmFzc2VydC5wYXNzKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBleGNlcHRpb24ubmFtZSA9IFwiRXhwZWN0YXRpb25FcnJvclwiO1xuXG4gICAgICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0oKSk7XG5cbiAgICBzaW5vbi5tb2NrID0gbW9jaztcblxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW1wibW9kdWxlXCJdLCBmdW5jdGlvbihtb2R1bGUpIHsgbW9kdWxlLmV4cG9ydHMgPSBtb2NrOyB9KTtcbiAgICB9IGVsc2UgaWYgKGNvbW1vbkpTTW9kdWxlKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gbW9jaztcbiAgICB9XG59KHR5cGVvZiBzaW5vbiA9PSBcIm9iamVjdFwiICYmIHNpbm9uIHx8IG51bGwpKTtcbiIsIi8qKlxuICogQGRlcGVuZCAuLi9zaW5vbi5qc1xuICogQGRlcGVuZCBjb2xsZWN0aW9uLmpzXG4gKiBAZGVwZW5kIHV0aWwvZmFrZV90aW1lcnMuanNcbiAqIEBkZXBlbmQgdXRpbC9mYWtlX3NlcnZlcl93aXRoX2Nsb2NrLmpzXG4gKi9cbi8qanNsaW50IGVxZXFlcTogZmFsc2UsIG9uZXZhcjogZmFsc2UsIHBsdXNwbHVzOiBmYWxzZSovXG4vKmdsb2JhbCByZXF1aXJlLCBtb2R1bGUqL1xuLyoqXG4gKiBNYW5hZ2VzIGZha2UgY29sbGVjdGlvbnMgYXMgd2VsbCBhcyBmYWtlIHV0aWxpdGllcyBzdWNoIGFzIFNpbm9uJ3NcbiAqIHRpbWVycyBhbmQgZmFrZSBYSFIgaW1wbGVtZW50YXRpb24gaW4gb25lIGNvbnZlbmllbnQgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQ2hyaXN0aWFuIEpvaGFuc2VuIChjaHJpc3RpYW5AY2pvaGFuc2VuLm5vKVxuICogQGxpY2Vuc2UgQlNEXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTMgQ2hyaXN0aWFuIEpvaGFuc2VuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cyAmJiB0eXBlb2YgcmVxdWlyZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgc2lub24gPSByZXF1aXJlKFwiLi4vc2lub25cIik7XG4gICAgc2lub24uZXh0ZW5kKHNpbm9uLCByZXF1aXJlKFwiLi91dGlsL2Zha2VfdGltZXJzXCIpKTtcbn1cblxuKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHVzaCA9IFtdLnB1c2g7XG5cbiAgICBmdW5jdGlvbiBleHBvc2VWYWx1ZShzYW5kYm94LCBjb25maWcsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5pbmplY3RJbnRvICYmICEoa2V5IGluIGNvbmZpZy5pbmplY3RJbnRvKSkge1xuICAgICAgICAgICAgY29uZmlnLmluamVjdEludG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgc2FuZGJveC5pbmplY3RlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHVzaC5jYWxsKHNhbmRib3guYXJncywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZVNhbmRib3hGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZShzaW5vbi5zYW5kYm94KTtcblxuICAgICAgICBpZiAoY29uZmlnLnVzZUZha2VTZXJ2ZXIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnVzZUZha2VTZXJ2ZXIgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHNhbmRib3guc2VydmVyUHJvdG90eXBlID0gY29uZmlnLnVzZUZha2VTZXJ2ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNhbmRib3gudXNlRmFrZVNlcnZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy51c2VGYWtlVGltZXJzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy51c2VGYWtlVGltZXJzID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBzYW5kYm94LnVzZUZha2VUaW1lcnMuYXBwbHkoc2FuZGJveCwgY29uZmlnLnVzZUZha2VUaW1lcnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzYW5kYm94LnVzZUZha2VUaW1lcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzYW5kYm94O1xuICAgIH1cblxuICAgIHNpbm9uLnNhbmRib3ggPSBzaW5vbi5leHRlbmQoc2lub24uY3JlYXRlKHNpbm9uLmNvbGxlY3Rpb24pLCB7XG4gICAgICAgIHVzZUZha2VUaW1lcnM6IGZ1bmN0aW9uIHVzZUZha2VUaW1lcnMoKSB7XG4gICAgICAgICAgICB0aGlzLmNsb2NrID0gc2lub24udXNlRmFrZVRpbWVycy5hcHBseShzaW5vbiwgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHRoaXMuY2xvY2spO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNlcnZlclByb3RvdHlwZTogc2lub24uZmFrZVNlcnZlcixcblxuICAgICAgICB1c2VGYWtlU2VydmVyOiBmdW5jdGlvbiB1c2VGYWtlU2VydmVyKCkge1xuICAgICAgICAgICAgdmFyIHByb3RvID0gdGhpcy5zZXJ2ZXJQcm90b3R5cGUgfHwgc2lub24uZmFrZVNlcnZlcjtcblxuICAgICAgICAgICAgaWYgKCFwcm90byB8fCAhcHJvdG8uY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VydmVyID0gcHJvdG8uY3JlYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQodGhpcy5zZXJ2ZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGluamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgc2lub24uY29sbGVjdGlvbi5pbmplY3QuY2FsbCh0aGlzLCBvYmopO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jbG9jaykge1xuICAgICAgICAgICAgICAgIG9iai5jbG9jayA9IHRoaXMuY2xvY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZlcikge1xuICAgICAgICAgICAgICAgIG9iai5zZXJ2ZXIgPSB0aGlzLnNlcnZlcjtcbiAgICAgICAgICAgICAgICBvYmoucmVxdWVzdHMgPSB0aGlzLnNlcnZlci5yZXF1ZXN0cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSxcblxuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaW5vbi5jb2xsZWN0aW9uLnJlc3RvcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZUNvbnRleHQoKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXN0b3JlQ29udGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5qZWN0ZWRLZXlzKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB0aGlzLmluamVjdGVkS2V5cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuaW5qZWN0SW50b1t0aGlzLmluamVjdGVkS2V5c1tpXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0ZWRLZXlzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaW5vbi5jcmVhdGUoc2lub24uc2FuZGJveCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzYW5kYm94ID0gcHJlcGFyZVNhbmRib3hGcm9tQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgICAgICBzYW5kYm94LmFyZ3MgPSBzYW5kYm94LmFyZ3MgfHwgW107XG4gICAgICAgICAgICBzYW5kYm94LmluamVjdGVkS2V5cyA9IFtdO1xuICAgICAgICAgICAgc2FuZGJveC5pbmplY3RJbnRvID0gY29uZmlnLmluamVjdEludG87XG4gICAgICAgICAgICB2YXIgcHJvcCwgdmFsdWUsIGV4cG9zZWQgPSBzYW5kYm94LmluamVjdCh7fSk7XG5cbiAgICAgICAgICAgIGlmIChjb25maWcucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY29uZmlnLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWcucHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBleHBvc2VkW3Byb3BdIHx8IHByb3AgPT0gXCJzYW5kYm94XCIgJiYgc2FuZGJveDtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3NlVmFsdWUoc2FuZGJveCwgY29uZmlnLCBwcm9wLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHBvc2VWYWx1ZShzYW5kYm94LCBjb25maWcsIFwic2FuZGJveFwiLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBzaW5vbi5zYW5kYm94LnVzZUZha2VYTUxIdHRwUmVxdWVzdCA9IHNpbm9uLnNhbmRib3gudXNlRmFrZVNlcnZlcjtcblxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW1wibW9kdWxlXCJdLCBmdW5jdGlvbihtb2R1bGUpIHsgbW9kdWxlLmV4cG9ydHMgPSBzaW5vbi5zYW5kYm94OyB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gc2lub24uc2FuZGJveDtcbiAgICB9XG59KCkpO1xuIiwiLyoqXG4gICogQGRlcGVuZCAuLi9zaW5vbi5qc1xuICAqIEBkZXBlbmQgY2FsbC5qc1xuICAqL1xuLypqc2xpbnQgZXFlcWVxOiBmYWxzZSwgb25ldmFyOiBmYWxzZSwgcGx1c3BsdXM6IGZhbHNlKi9cbi8qZ2xvYmFsIG1vZHVsZSwgcmVxdWlyZSwgc2lub24qL1xuLyoqXG4gICogU3B5IGZ1bmN0aW9uc1xuICAqXG4gICogQGF1dGhvciBDaHJpc3RpYW4gSm9oYW5zZW4gKGNocmlzdGlhbkBjam9oYW5zZW4ubm8pXG4gICogQGxpY2Vuc2UgQlNEXG4gICpcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMyBDaHJpc3RpYW4gSm9oYW5zZW5cbiAgKi9cblwidXNlIHN0cmljdFwiO1xuXG4oZnVuY3Rpb24gKHNpbm9uKSB7XG4gICAgdmFyIGNvbW1vbkpTTW9kdWxlID0gdHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cyAmJiB0eXBlb2YgcmVxdWlyZSA9PSBcImZ1bmN0aW9uXCI7XG4gICAgdmFyIHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbiAgICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4gICAgdmFyIGNhbGxJZCA9IDA7XG5cbiAgICBpZiAoIXNpbm9uICYmIGNvbW1vbkpTTW9kdWxlKSB7XG4gICAgICAgIHNpbm9uID0gcmVxdWlyZShcIi4uL3Npbm9uXCIpO1xuICAgIH1cblxuICAgIGlmICghc2lub24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNweShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgIGlmICghcHJvcGVydHkgJiYgdHlwZW9mIG9iamVjdCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzcHkuY3JlYXRlKG9iamVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9iamVjdCAmJiAhcHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybiBzcHkuY3JlYXRlKGZ1bmN0aW9uICgpIHsgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWV0aG9kID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgcmV0dXJuIHNpbm9uLndyYXBNZXRob2Qob2JqZWN0LCBwcm9wZXJ0eSwgc3B5LmNyZWF0ZShtZXRob2QpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaGluZ0Zha2UoZmFrZXMsIGFyZ3MsIHN0cmljdCkge1xuICAgICAgICBpZiAoIWZha2VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGZha2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZha2VzW2ldLm1hdGNoZXMoYXJncywgc3RyaWN0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWtlc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluY3JlbWVudENhbGxDb3VudCgpIHtcbiAgICAgICAgdGhpcy5jYWxsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNhbGxDb3VudCArPSAxO1xuICAgICAgICB0aGlzLm5vdENhbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbGxlZE9uY2UgPSB0aGlzLmNhbGxDb3VudCA9PSAxO1xuICAgICAgICB0aGlzLmNhbGxlZFR3aWNlID0gdGhpcy5jYWxsQ291bnQgPT0gMjtcbiAgICAgICAgdGhpcy5jYWxsZWRUaHJpY2UgPSB0aGlzLmNhbGxDb3VudCA9PSAzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNhbGxQcm9wZXJ0aWVzKCkge1xuICAgICAgICB0aGlzLmZpcnN0Q2FsbCA9IHRoaXMuZ2V0Q2FsbCgwKTtcbiAgICAgICAgdGhpcy5zZWNvbmRDYWxsID0gdGhpcy5nZXRDYWxsKDEpO1xuICAgICAgICB0aGlzLnRoaXJkQ2FsbCA9IHRoaXMuZ2V0Q2FsbCgyKTtcbiAgICAgICAgdGhpcy5sYXN0Q2FsbCA9IHRoaXMuZ2V0Q2FsbCh0aGlzLmNhbGxDb3VudCAtIDEpO1xuICAgIH1cblxuICAgIHZhciB2YXJzID0gXCJhLGIsYyxkLGUsZixnLGgsaSxqLGssbFwiO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGZ1bmMpIHtcbiAgICAgICAgLy8gUmV0YWluIHRoZSBmdW5jdGlvbiBsZW5ndGg6XG4gICAgICAgIHZhciBwO1xuICAgICAgICBpZiAoZnVuYy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGV2YWwoXCJwID0gKGZ1bmN0aW9uIHByb3h5KFwiICsgdmFycy5zdWJzdHJpbmcoMCwgZnVuYy5sZW5ndGggKiAyIC0gMSkgK1xuICAgICAgICAgICAgICAgIFwiKSB7IHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZS5jYWxsKGFyZ3VtZW50cykpOyB9KTtcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIHZhciB1dWlkID0gMDtcblxuICAgIC8vIFB1YmxpYyBBUElcbiAgICB2YXIgc3B5QXBpID0ge1xuICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubm90Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYWxsZWRUd2ljZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYWxsZWRUaHJpY2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2FsbENvdW50ID0gMDtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RDYWxsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kQ2FsbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnRoaXJkQ2FsbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxhc3RDYWxsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYXJncyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMudGhpc1ZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5leGNlcHRpb25zID0gW107XG4gICAgICAgICAgICB0aGlzLmNhbGxJZHMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZha2VzKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZha2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFrZXNbaV0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoZnVuYykge1xuICAgICAgICAgICAgdmFyIG5hbWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gc2lub24uZnVuY3Rpb25OYW1lKGZ1bmMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcHJveHkgPSBjcmVhdGVQcm94eShmdW5jKTtcblxuICAgICAgICAgICAgc2lub24uZXh0ZW5kKHByb3h5LCBzcHkpO1xuICAgICAgICAgICAgZGVsZXRlIHByb3h5LmNyZWF0ZTtcbiAgICAgICAgICAgIHNpbm9uLmV4dGVuZChwcm94eSwgZnVuYyk7XG5cbiAgICAgICAgICAgIHByb3h5LnJlc2V0KCk7XG4gICAgICAgICAgICBwcm94eS5wcm90b3R5cGUgPSBmdW5jLnByb3RvdHlwZTtcbiAgICAgICAgICAgIHByb3h5LmRpc3BsYXlOYW1lID0gbmFtZSB8fCBcInNweVwiO1xuICAgICAgICAgICAgcHJveHkudG9TdHJpbmcgPSBzaW5vbi5mdW5jdGlvblRvU3RyaW5nO1xuICAgICAgICAgICAgcHJveHkuX2NyZWF0ZSA9IHNpbm9uLnNweS5jcmVhdGU7XG4gICAgICAgICAgICBwcm94eS5pZCA9IFwic3B5I1wiICsgdXVpZCsrO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaW52b2tlOiBmdW5jdGlvbiBpbnZva2UoZnVuYywgdGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBtYXRjaGluZ0Zha2UodGhpcy5mYWtlcywgYXJncyk7XG4gICAgICAgICAgICB2YXIgZXhjZXB0aW9uLCByZXR1cm5WYWx1ZTtcblxuICAgICAgICAgICAgaW5jcmVtZW50Q2FsbENvdW50LmNhbGwodGhpcyk7XG4gICAgICAgICAgICBwdXNoLmNhbGwodGhpcy50aGlzVmFsdWVzLCB0aGlzVmFsdWUpO1xuICAgICAgICAgICAgcHVzaC5jYWxsKHRoaXMuYXJncywgYXJncyk7XG4gICAgICAgICAgICBwdXNoLmNhbGwodGhpcy5jYWxsSWRzLCBjYWxsSWQrKyk7XG5cbiAgICAgICAgICAgIC8vIE1ha2UgY2FsbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiB0aGUgc3BpZWQgZnVuY3Rpb246XG4gICAgICAgICAgICBjcmVhdGVDYWxsUHJvcGVydGllcy5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IG1hdGNoaW5nLmludm9rZShmdW5jLCB0aGlzVmFsdWUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gKHRoaXMuZnVuYyB8fCBmdW5jKS5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciB0aGlzQ2FsbCA9IHRoaXMuZ2V0Q2FsbCh0aGlzLmNhbGxDb3VudCAtIDEpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzQ2FsbC5jYWxsZWRXaXRoTmV3KCkgJiYgdHlwZW9mIHJldHVyblZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRoaXNWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXhjZXB0aW9uID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaC5jYWxsKHRoaXMuZXhjZXB0aW9ucywgZXhjZXB0aW9uKTtcbiAgICAgICAgICAgIHB1c2guY2FsbCh0aGlzLnJldHVyblZhbHVlcywgcmV0dXJuVmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBNYWtlIHJldHVybiB2YWx1ZSBhbmQgZXhjZXB0aW9uIGF2YWlsYWJsZSBpbiB0aGUgY2FsbHM6XG4gICAgICAgICAgICBjcmVhdGVDYWxsUHJvcGVydGllcy5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAoZXhjZXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBuYW1lZDogZnVuY3Rpb24gbmFtZWQobmFtZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRDYWxsOiBmdW5jdGlvbiBnZXRDYWxsKGkpIHtcbiAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID49IHRoaXMuY2FsbENvdW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzaW5vbi5zcHlDYWxsKHRoaXMsIHRoaXMudGhpc1ZhbHVlc1tpXSwgdGhpcy5hcmdzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNbaV0sIHRoaXMuZXhjZXB0aW9uc1tpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbElkc1tpXSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0Q2FsbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjYWxscyA9IFtdO1xuICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmNhbGxDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2FsbHMucHVzaCh0aGlzLmdldENhbGwoaSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FsbHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbGVkQmVmb3JlOiBmdW5jdGlvbiBjYWxsZWRCZWZvcmUoc3B5Rm4pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jYWxsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc3B5Rm4uY2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGxJZHNbMF0gPCBzcHlGbi5jYWxsSWRzW3NweUZuLmNhbGxJZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbGVkQWZ0ZXI6IGZ1bmN0aW9uIGNhbGxlZEFmdGVyKHNweUZuKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FsbGVkIHx8ICFzcHlGbi5jYWxsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGxJZHNbdGhpcy5jYWxsQ291bnQgLSAxXSA+IHNweUZuLmNhbGxJZHNbc3B5Rm4uY2FsbENvdW50IC0gMV07XG4gICAgICAgIH0sXG5cbiAgICAgICAgd2l0aEFyZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5mYWtlcykge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IG1hdGNoaW5nRmFrZSh0aGlzLmZha2VzLCBhcmdzLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZha2VzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvcmlnaW5hbCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgZmFrZSA9IHRoaXMuX2NyZWF0ZSgpO1xuICAgICAgICAgICAgZmFrZS5tYXRjaGluZ0FndW1lbnRzID0gYXJncztcbiAgICAgICAgICAgIGZha2UucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIHB1c2guY2FsbCh0aGlzLmZha2VzLCBmYWtlKTtcblxuICAgICAgICAgICAgZmFrZS53aXRoQXJncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwud2l0aEFyZ3MuYXBwbHkob3JpZ2luYWwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmYWtlLm1hdGNoZXModGhpcy5hcmdzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRDYWxsQ291bnQuY2FsbChmYWtlKTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaC5jYWxsKGZha2UudGhpc1ZhbHVlcywgdGhpcy50aGlzVmFsdWVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaC5jYWxsKGZha2UuYXJncywgdGhpcy5hcmdzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaC5jYWxsKGZha2UucmV0dXJuVmFsdWVzLCB0aGlzLnJldHVyblZhbHVlc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIHB1c2guY2FsbChmYWtlLmV4Y2VwdGlvbnMsIHRoaXMuZXhjZXB0aW9uc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIHB1c2guY2FsbChmYWtlLmNhbGxJZHMsIHRoaXMuY2FsbElkc1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3JlYXRlQ2FsbFByb3BlcnRpZXMuY2FsbChmYWtlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZha2U7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWF0Y2hlczogZnVuY3Rpb24gKGFyZ3MsIHN0cmljdCkge1xuICAgICAgICAgICAgdmFyIG1hcmdzID0gdGhpcy5tYXRjaGluZ0FndW1lbnRzO1xuXG4gICAgICAgICAgICBpZiAobWFyZ3MubGVuZ3RoIDw9IGFyZ3MubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgc2lub24uZGVlcEVxdWFsKG1hcmdzLCBhcmdzLnNsaWNlKDAsIG1hcmdzLmxlbmd0aCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzdHJpY3QgfHwgbWFyZ3MubGVuZ3RoID09IGFyZ3MubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHByaW50ZjogZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICAgICAgdmFyIHNweSA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIHZhciBmb3JtYXR0ZXI7XG5cbiAgICAgICAgICAgIHJldHVybiAoZm9ybWF0IHx8IFwiXCIpLnJlcGxhY2UoLyUoLikvZywgZnVuY3Rpb24gKG1hdGNoLCBzcGVjaWZ5ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSBzcHlBcGkuZm9ybWF0dGVyc1tzcGVjaWZ5ZXJdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuY2FsbChudWxsLCBzcHksIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlSW50KHNwZWNpZnllciwgMTApKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2lub24uZm9ybWF0KGFyZ3Nbc3BlY2lmeWVyIC0gMV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBcIiVcIiArIHNwZWNpZnllcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGRlbGVnYXRlVG9DYWxscyhtZXRob2QsIG1hdGNoQW55LCBhY3R1YWwsIG5vdENhbGxlZCkge1xuICAgICAgICBzcHlBcGlbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jYWxsZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAobm90Q2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RDYWxsZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VycmVudENhbGw7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IDA7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jYWxsQ291bnQ7IGkgPCBsOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbCA9IHRoaXMuZ2V0Q2FsbChpKTtcblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q2FsbFthY3R1YWwgfHwgbWV0aG9kXS5hcHBseShjdXJyZW50Q2FsbCwgYXJndW1lbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzICs9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoQW55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMgPT09IHRoaXMuY2FsbENvdW50O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGRlbGVnYXRlVG9DYWxscyhcImNhbGxlZE9uXCIsIHRydWUpO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcImFsd2F5c0NhbGxlZE9uXCIsIGZhbHNlLCBcImNhbGxlZE9uXCIpO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcImNhbGxlZFdpdGhcIiwgdHJ1ZSk7XG4gICAgZGVsZWdhdGVUb0NhbGxzKFwiY2FsbGVkV2l0aE1hdGNoXCIsIHRydWUpO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcImFsd2F5c0NhbGxlZFdpdGhcIiwgZmFsc2UsIFwiY2FsbGVkV2l0aFwiKTtcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJhbHdheXNDYWxsZWRXaXRoTWF0Y2hcIiwgZmFsc2UsIFwiY2FsbGVkV2l0aE1hdGNoXCIpO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcImNhbGxlZFdpdGhFeGFjdGx5XCIsIHRydWUpO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcImFsd2F5c0NhbGxlZFdpdGhFeGFjdGx5XCIsIGZhbHNlLCBcImNhbGxlZFdpdGhFeGFjdGx5XCIpO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcIm5ldmVyQ2FsbGVkV2l0aFwiLCBmYWxzZSwgXCJub3RDYWxsZWRXaXRoXCIsXG4gICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0pO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcIm5ldmVyQ2FsbGVkV2l0aE1hdGNoXCIsIGZhbHNlLCBcIm5vdENhbGxlZFdpdGhNYXRjaFwiLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9KTtcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJ0aHJld1wiLCB0cnVlKTtcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJhbHdheXNUaHJld1wiLCBmYWxzZSwgXCJ0aHJld1wiKTtcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJyZXR1cm5lZFwiLCB0cnVlKTtcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJhbHdheXNSZXR1cm5lZFwiLCBmYWxzZSwgXCJyZXR1cm5lZFwiKTtcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJjYWxsZWRXaXRoTmV3XCIsIHRydWUpO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcImFsd2F5c0NhbGxlZFdpdGhOZXdcIiwgZmFsc2UsIFwiY2FsbGVkV2l0aE5ld1wiKTtcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJjYWxsQXJnXCIsIGZhbHNlLCBcImNhbGxBcmdXaXRoXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMudG9TdHJpbmcoKSArIFwiIGNhbm5vdCBjYWxsIGFyZyBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLlwiKTtcbiAgICB9KTtcbiAgICBzcHlBcGkuY2FsbEFyZ1dpdGggPSBzcHlBcGkuY2FsbEFyZztcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJjYWxsQXJnT25cIiwgZmFsc2UsIFwiY2FsbEFyZ09uV2l0aFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnRvU3RyaW5nKCkgKyBcIiBjYW5ub3QgY2FsbCBhcmcgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5cIik7XG4gICAgfSk7XG4gICAgc3B5QXBpLmNhbGxBcmdPbldpdGggPSBzcHlBcGkuY2FsbEFyZ09uO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcInlpZWxkXCIsIGZhbHNlLCBcInlpZWxkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMudG9TdHJpbmcoKSArIFwiIGNhbm5vdCB5aWVsZCBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLlwiKTtcbiAgICB9KTtcbiAgICAvLyBcImludm9rZUNhbGxiYWNrXCIgaXMgYW4gYWxpYXMgZm9yIFwieWllbGRcIiBzaW5jZSBcInlpZWxkXCIgaXMgaW52YWxpZCBpbiBzdHJpY3QgbW9kZS5cbiAgICBzcHlBcGkuaW52b2tlQ2FsbGJhY2sgPSBzcHlBcGkueWllbGQ7XG4gICAgZGVsZWdhdGVUb0NhbGxzKFwieWllbGRPblwiLCBmYWxzZSwgXCJ5aWVsZE9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMudG9TdHJpbmcoKSArIFwiIGNhbm5vdCB5aWVsZCBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLlwiKTtcbiAgICB9KTtcbiAgICBkZWxlZ2F0ZVRvQ2FsbHMoXCJ5aWVsZFRvXCIsIGZhbHNlLCBcInlpZWxkVG9cIiwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnRvU3RyaW5nKCkgKyBcIiBjYW5ub3QgeWllbGQgdG8gJ1wiICsgcHJvcGVydHkgK1xuICAgICAgICAgICAgXCInIHNpbmNlIGl0IHdhcyBub3QgeWV0IGludm9rZWQuXCIpO1xuICAgIH0pO1xuICAgIGRlbGVnYXRlVG9DYWxscyhcInlpZWxkVG9PblwiLCBmYWxzZSwgXCJ5aWVsZFRvT25cIiwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnRvU3RyaW5nKCkgKyBcIiBjYW5ub3QgeWllbGQgdG8gJ1wiICsgcHJvcGVydHkgK1xuICAgICAgICAgICAgXCInIHNpbmNlIGl0IHdhcyBub3QgeWV0IGludm9rZWQuXCIpO1xuICAgIH0pO1xuXG4gICAgc3B5QXBpLmZvcm1hdHRlcnMgPSB7XG4gICAgICAgIFwiY1wiOiBmdW5jdGlvbiAoc3B5KSB7XG4gICAgICAgICAgICByZXR1cm4gc2lub24udGltZXNJbldvcmRzKHNweS5jYWxsQ291bnQpO1xuICAgICAgICB9LFxuXG4gICAgICAgIFwiblwiOiBmdW5jdGlvbiAoc3B5KSB7XG4gICAgICAgICAgICByZXR1cm4gc3B5LnRvU3RyaW5nKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJDXCI6IGZ1bmN0aW9uIChzcHkpIHtcbiAgICAgICAgICAgIHZhciBjYWxscyA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNweS5jYWxsQ291bnQ7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RyaW5naWZpZWRDYWxsID0gXCIgICAgXCIgKyBzcHkuZ2V0Q2FsbChpKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmICgvXFxuLy50ZXN0KGNhbGxzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZpZWRDYWxsID0gXCJcXG5cIiArIHN0cmluZ2lmaWVkQ2FsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHVzaC5jYWxsKGNhbGxzLCBzdHJpbmdpZmllZENhbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FsbHMubGVuZ3RoID4gMCA/IFwiXFxuXCIgKyBjYWxscy5qb2luKFwiXFxuXCIpIDogXCJcIjtcbiAgICAgICAgfSxcblxuICAgICAgICBcInRcIjogZnVuY3Rpb24gKHNweSkge1xuICAgICAgICAgICAgdmFyIG9iamVjdHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzcHkuY2FsbENvdW50OyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAgICAgcHVzaC5jYWxsKG9iamVjdHMsIHNpbm9uLmZvcm1hdChzcHkudGhpc1ZhbHVlc1tpXSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0cy5qb2luKFwiLCBcIik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgXCIqXCI6IGZ1bmN0aW9uIChzcHksIGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmdzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgICAgIHB1c2guY2FsbChmb3JtYXR0ZWQsIHNpbm9uLmZvcm1hdChhcmdzW2ldKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWQuam9pbihcIiwgXCIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNpbm9uLmV4dGVuZChzcHksIHNweUFwaSk7XG5cbiAgICBzcHkuc3B5Q2FsbCA9IHNpbm9uLnNweUNhbGw7XG4gICAgc2lub24uc3B5ID0gc3B5O1xuXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKG1vZHVsZSkgeyBtb2R1bGUuZXhwb3J0cyA9IHNweTsgfSk7XG4gICAgfSBlbHNlIGlmIChjb21tb25KU01vZHVsZSkge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHNweTtcbiAgICB9XG59KHR5cGVvZiBzaW5vbiA9PSBcIm9iamVjdFwiICYmIHNpbm9uIHx8IG51bGwpKTtcbiIsIi8qKlxuICogQGRlcGVuZCAuLi9zaW5vbi5qc1xuICogQGRlcGVuZCBzcHkuanNcbiAqIEBkZXBlbmQgYmVoYXZpb3IuanNcbiAqL1xuLypqc2xpbnQgZXFlcWVxOiBmYWxzZSwgb25ldmFyOiBmYWxzZSovXG4vKmdsb2JhbCBtb2R1bGUsIHJlcXVpcmUsIHNpbm9uKi9cbi8qKlxuICogU3R1YiBmdW5jdGlvbnNcbiAqXG4gKiBAYXV0aG9yIENocmlzdGlhbiBKb2hhbnNlbiAoY2hyaXN0aWFuQGNqb2hhbnNlbi5ubylcbiAqIEBsaWNlbnNlIEJTRFxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIENocmlzdGlhbiBKb2hhbnNlblxuICovXG5cInVzZSBzdHJpY3RcIjtcblxuKGZ1bmN0aW9uIChzaW5vbikge1xuICAgIHZhciBjb21tb25KU01vZHVsZSA9IHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMgJiYgdHlwZW9mIHJlcXVpcmUgPT0gXCJmdW5jdGlvblwiO1xuXG4gICAgaWYgKCFzaW5vbiAmJiBjb21tb25KU01vZHVsZSkge1xuICAgICAgICBzaW5vbiA9IHJlcXVpcmUoXCIuLi9zaW5vblwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXNpbm9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHViKG9iamVjdCwgcHJvcGVydHksIGZ1bmMpIHtcbiAgICAgICAgaWYgKCEhZnVuYyAmJiB0eXBlb2YgZnVuYyAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDdXN0b20gc3R1YiBzaG91bGQgYmUgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd3JhcHBlcjtcblxuICAgICAgICBpZiAoZnVuYykge1xuICAgICAgICAgICAgd3JhcHBlciA9IHNpbm9uLnNweSAmJiBzaW5vbi5zcHkuY3JlYXRlID8gc2lub24uc3B5LmNyZWF0ZShmdW5jKSA6IGZ1bmM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gc3R1Yi5jcmVhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb2JqZWN0ICYmIHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHNpbm9uLnN0dWIuY3JlYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBvYmplY3QgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdFtwcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0dWIob2JqZWN0LCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2lub24ud3JhcE1ldGhvZChvYmplY3QsIHByb3BlcnR5LCB3cmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0QmVoYXZpb3Ioc3R1Yikge1xuICAgICAgICByZXR1cm4gc3R1Yi5kZWZhdWx0QmVoYXZpb3IgfHwgZ2V0UGFyZW50QmVoYXZpb3VyKHN0dWIpIHx8IHNpbm9uLmJlaGF2aW9yLmNyZWF0ZShzdHViKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnRCZWhhdmlvdXIoc3R1Yikge1xuICAgICAgICByZXR1cm4gKHN0dWIucGFyZW50ICYmIGdldEN1cnJlbnRCZWhhdmlvcihzdHViLnBhcmVudCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRCZWhhdmlvcihzdHViKSB7XG4gICAgICAgIHZhciBiZWhhdmlvciA9IHN0dWIuYmVoYXZpb3JzW3N0dWIuY2FsbENvdW50IC0gMV07XG4gICAgICAgIHJldHVybiBiZWhhdmlvciAmJiBiZWhhdmlvci5pc1ByZXNlbnQoKSA/IGJlaGF2aW9yIDogZ2V0RGVmYXVsdEJlaGF2aW9yKHN0dWIpO1xuICAgIH1cblxuICAgIHZhciB1dWlkID0gMDtcblxuICAgIHNpbm9uLmV4dGVuZChzdHViLCAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvdG8gPSB7XG4gICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25TdHViID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q3VycmVudEJlaGF2aW9yKGZ1bmN0aW9uU3R1YikuaW52b2tlKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uU3R1Yi5pZCA9IFwic3R1YiNcIiArIHV1aWQrKztcbiAgICAgICAgICAgICAgICB2YXIgb3JpZyA9IGZ1bmN0aW9uU3R1YjtcbiAgICAgICAgICAgICAgICBmdW5jdGlvblN0dWIgPSBzaW5vbi5zcHkuY3JlYXRlKGZ1bmN0aW9uU3R1Yik7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb25TdHViLmZ1bmMgPSBvcmlnO1xuXG4gICAgICAgICAgICAgICAgc2lub24uZXh0ZW5kKGZ1bmN0aW9uU3R1Yiwgc3R1Yik7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb25TdHViLl9jcmVhdGUgPSBzaW5vbi5zdHViLmNyZWF0ZTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvblN0dWIuZGlzcGxheU5hbWUgPSBcInN0dWJcIjtcbiAgICAgICAgICAgICAgICBmdW5jdGlvblN0dWIudG9TdHJpbmcgPSBzaW5vbi5mdW5jdGlvblRvU3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25TdHViLmRlZmF1bHRCZWhhdmlvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb25TdHViLmJlaGF2aW9ycyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uU3R1YjtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHJlc2V0QmVoYXZpb3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEJlaGF2aW9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmJlaGF2aW9ycyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmV0dXJuQXJnQXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5UaGlzID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mYWtlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5mYWtlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWtlc1tpXS5yZXNldEJlaGF2aW9yKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbkNhbGw6IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJlaGF2aW9yc1tpbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWhhdmlvcnNbaW5kZXhdID0gc2lub24uYmVoYXZpb3IuY3JlYXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJlaGF2aW9yc1tpbmRleF07XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbkZpcnN0Q2FsbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub25DYWxsKDApO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgb25TZWNvbmRDYWxsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vbkNhbGwoMSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvblRoaXJkQ2FsbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub25DYWxsKDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAodmFyIG1ldGhvZCBpbiBzaW5vbi5iZWhhdmlvcikge1xuICAgICAgICAgICAgaWYgKHNpbm9uLmJlaGF2aW9yLmhhc093blByb3BlcnR5KG1ldGhvZCkgJiZcbiAgICAgICAgICAgICAgICAhcHJvdG8uaGFzT3duUHJvcGVydHkobWV0aG9kKSAmJlxuICAgICAgICAgICAgICAgIG1ldGhvZCAhPSAnY3JlYXRlJyAmJlxuICAgICAgICAgICAgICAgIG1ldGhvZCAhPSAnd2l0aEFyZ3MnICYmXG4gICAgICAgICAgICAgICAgbWV0aG9kICE9ICdpbnZva2UnKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9bbWV0aG9kXSA9IChmdW5jdGlvbihiZWhhdmlvck1ldGhvZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRCZWhhdmlvciA9IHRoaXMuZGVmYXVsdEJlaGF2aW9yIHx8IHNpbm9uLmJlaGF2aW9yLmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEJlaGF2aW9yW2JlaGF2aW9yTWV0aG9kXS5hcHBseSh0aGlzLmRlZmF1bHRCZWhhdmlvciwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0obWV0aG9kKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvdG87XG4gICAgfSgpKSk7XG5cbiAgICBzaW5vbi5zdHViID0gc3R1YjtcblxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW1wibW9kdWxlXCJdLCBmdW5jdGlvbihtb2R1bGUpIHsgbW9kdWxlLmV4cG9ydHMgPSBzdHViOyB9KTtcbiAgICB9IGVsc2UgaWYgKGNvbW1vbkpTTW9kdWxlKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gc3R1YjtcbiAgICB9XG59KHR5cGVvZiBzaW5vbiA9PSBcIm9iamVjdFwiICYmIHNpbm9uIHx8IG51bGwpKTtcbiIsIi8qKlxuICogQGRlcGVuZCAuLi9zaW5vbi5qc1xuICogQGRlcGVuZCBzdHViLmpzXG4gKiBAZGVwZW5kIG1vY2suanNcbiAqIEBkZXBlbmQgc2FuZGJveC5qc1xuICovXG4vKmpzbGludCBlcWVxZXE6IGZhbHNlLCBvbmV2YXI6IGZhbHNlLCBmb3JpbjogdHJ1ZSwgcGx1c3BsdXM6IGZhbHNlKi9cbi8qZ2xvYmFsIG1vZHVsZSwgcmVxdWlyZSwgc2lub24qL1xuLyoqXG4gKiBUZXN0IGZ1bmN0aW9uLCBzYW5kYm94ZXMgZmFrZXNcbiAqXG4gKiBAYXV0aG9yIENocmlzdGlhbiBKb2hhbnNlbiAoY2hyaXN0aWFuQGNqb2hhbnNlbi5ubylcbiAqIEBsaWNlbnNlIEJTRFxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIENocmlzdGlhbiBKb2hhbnNlblxuICovXG5cInVzZSBzdHJpY3RcIjtcblxuKGZ1bmN0aW9uIChzaW5vbikge1xuICAgIHZhciBjb21tb25KU01vZHVsZSA9IHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMgJiYgdHlwZW9mIHJlcXVpcmUgPT0gXCJmdW5jdGlvblwiO1xuXG4gICAgaWYgKCFzaW5vbiAmJiBjb21tb25KU01vZHVsZSkge1xuICAgICAgICBzaW5vbiA9IHJlcXVpcmUoXCIuLi9zaW5vblwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXNpbm9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0ZXN0KGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIGNhbGxiYWNrO1xuXG4gICAgICAgIGlmICh0eXBlICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpbm9uLnRlc3QgbmVlZHMgdG8gd3JhcCBhIHRlc3QgZnVuY3Rpb24sIGdvdCBcIiArIHR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2lub25TYW5kYm94ZWRUZXN0KCkge1xuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHNpbm9uLmdldENvbmZpZyhzaW5vbi5jb25maWcpO1xuICAgICAgICAgICAgY29uZmlnLmluamVjdEludG8gPSBjb25maWcuaW5qZWN0SW50b1RoaXMgJiYgdGhpcyB8fCBjb25maWcuaW5qZWN0SW50bztcbiAgICAgICAgICAgIHZhciBzYW5kYm94ID0gc2lub24uc2FuZGJveC5jcmVhdGUoY29uZmlnKTtcbiAgICAgICAgICAgIHZhciBleGNlcHRpb24sIHJlc3VsdDtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5jb25jYXQoc2FuZGJveC5hcmdzKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBleGNlcHRpb24gPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4Y2VwdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbmRib3gudmVyaWZ5QW5kUmVzdG9yZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzaW5vbkFzeW5jU2FuZGJveGVkVGVzdChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaW5vblNhbmRib3hlZFRlc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2lub25TYW5kYm94ZWRUZXN0O1xuICAgIH1cblxuICAgIHRlc3QuY29uZmlnID0ge1xuICAgICAgICBpbmplY3RJbnRvVGhpczogdHJ1ZSxcbiAgICAgICAgaW5qZWN0SW50bzogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczogW1wic3B5XCIsIFwic3R1YlwiLCBcIm1vY2tcIiwgXCJjbG9ja1wiLCBcInNlcnZlclwiLCBcInJlcXVlc3RzXCJdLFxuICAgICAgICB1c2VGYWtlVGltZXJzOiB0cnVlLFxuICAgICAgICB1c2VGYWtlU2VydmVyOiB0cnVlXG4gICAgfTtcblxuICAgIHNpbm9uLnRlc3QgPSB0ZXN0O1xuXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbXCJtb2R1bGVcIl0sIGZ1bmN0aW9uKG1vZHVsZSkgeyBtb2R1bGUuZXhwb3J0cyA9IHRlc3Q7IH0pO1xuICAgIH0gZWxzZSBpZiAoY29tbW9uSlNNb2R1bGUpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB0ZXN0O1xuICAgIH1cbn0odHlwZW9mIHNpbm9uID09IFwib2JqZWN0XCIgJiYgc2lub24gfHwgbnVsbCkpO1xuIiwiLyoqXG4gKiBAZGVwZW5kIC4uL3Npbm9uLmpzXG4gKiBAZGVwZW5kIHRlc3QuanNcbiAqL1xuLypqc2xpbnQgZXFlcWVxOiBmYWxzZSwgb25ldmFyOiBmYWxzZSwgZXFlcWVxOiBmYWxzZSovXG4vKmdsb2JhbCBtb2R1bGUsIHJlcXVpcmUsIHNpbm9uKi9cbi8qKlxuICogVGVzdCBjYXNlLCBzYW5kYm94ZXMgYWxsIHRlc3QgZnVuY3Rpb25zXG4gKlxuICogQGF1dGhvciBDaHJpc3RpYW4gSm9oYW5zZW4gKGNocmlzdGlhbkBjam9oYW5zZW4ubm8pXG4gKiBAbGljZW5zZSBCU0RcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMyBDaHJpc3RpYW4gSm9oYW5zZW5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbihmdW5jdGlvbiAoc2lub24pIHtcbiAgICB2YXIgY29tbW9uSlNNb2R1bGUgPSB0eXBlb2YgbW9kdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIG1vZHVsZS5leHBvcnRzICYmIHR5cGVvZiByZXF1aXJlID09IFwiZnVuY3Rpb25cIjtcblxuICAgIGlmICghc2lub24gJiYgY29tbW9uSlNNb2R1bGUpIHtcbiAgICAgICAgc2lub24gPSByZXF1aXJlKFwiLi4vc2lub25cIik7XG4gICAgfVxuXG4gICAgaWYgKCFzaW5vbiB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVGVzdChwcm9wZXJ0eSwgc2V0VXAsIHRlYXJEb3duKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoc2V0VXApIHtcbiAgICAgICAgICAgICAgICBzZXRVcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZXhjZXB0aW9uLCByZXN1bHQ7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJvcGVydHkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBleGNlcHRpb24gPSBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGVhckRvd24pIHtcbiAgICAgICAgICAgICAgICB0ZWFyRG93bi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRlc3RDYXNlKHRlc3RzLCBwcmVmaXgpIHtcbiAgICAgICAgLypqc2w6aWdub3JlKi9cbiAgICAgICAgaWYgKCF0ZXN0cyB8fCB0eXBlb2YgdGVzdHMgIT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpbm9uLnRlc3RDYXNlIG5lZWRzIGFuIG9iamVjdCB3aXRoIHRlc3QgZnVuY3Rpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8qanNsOmVuZCovXG5cbiAgICAgICAgcHJlZml4ID0gcHJlZml4IHx8IFwidGVzdFwiO1xuICAgICAgICB2YXIgclByZWZpeCA9IG5ldyBSZWdFeHAoXCJeXCIgKyBwcmVmaXgpO1xuICAgICAgICB2YXIgbWV0aG9kcyA9IHt9LCB0ZXN0TmFtZSwgcHJvcGVydHksIG1ldGhvZDtcbiAgICAgICAgdmFyIHNldFVwID0gdGVzdHMuc2V0VXA7XG4gICAgICAgIHZhciB0ZWFyRG93biA9IHRlc3RzLnRlYXJEb3duO1xuXG4gICAgICAgIGZvciAodGVzdE5hbWUgaW4gdGVzdHMpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0cy5oYXNPd25Qcm9wZXJ0eSh0ZXN0TmFtZSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHRlc3RzW3Rlc3ROYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICgvXihzZXRVcHx0ZWFyRG93bikkLy50ZXN0KHRlc3ROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09IFwiZnVuY3Rpb25cIiAmJiByUHJlZml4LnRlc3QodGVzdE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IHByb3BlcnR5O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXRVcCB8fCB0ZWFyRG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gY3JlYXRlVGVzdChwcm9wZXJ0eSwgc2V0VXAsIHRlYXJEb3duKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZHNbdGVzdE5hbWVdID0gc2lub24udGVzdChtZXRob2QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZHNbdGVzdE5hbWVdID0gdGVzdHNbdGVzdE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZXRob2RzO1xuICAgIH1cblxuICAgIHNpbm9uLnRlc3RDYXNlID0gdGVzdENhc2U7XG5cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKFtcIm1vZHVsZVwiXSwgZnVuY3Rpb24obW9kdWxlKSB7IG1vZHVsZS5leHBvcnRzID0gdGVzdENhc2U7IH0pO1xuICAgIH0gZWxzZSBpZiAoY29tbW9uSlNNb2R1bGUpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB0ZXN0Q2FzZTtcbiAgICB9XG59KHR5cGVvZiBzaW5vbiA9PSBcIm9iamVjdFwiICYmIHNpbm9uIHx8IG51bGwpKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qanNsaW50IGVxZXFlcTogZmFsc2UsIHBsdXNwbHVzOiBmYWxzZSwgZXZpbDogdHJ1ZSwgb25ldmFyOiBmYWxzZSwgYnJvd3NlcjogdHJ1ZSwgZm9yaW46IGZhbHNlKi9cbi8qZ2xvYmFsIG1vZHVsZSwgcmVxdWlyZSwgd2luZG93Ki9cbi8qKlxuICogRmFrZSB0aW1lciBBUElcbiAqIHNldFRpbWVvdXRcbiAqIHNldEludGVydmFsXG4gKiBjbGVhclRpbWVvdXRcbiAqIGNsZWFySW50ZXJ2YWxcbiAqIHRpY2tcbiAqIHJlc2V0XG4gKiBEYXRlXG4gKlxuICogSW5zcGlyZWQgYnkganNVbml0TW9ja1RpbWVPdXQgZnJvbSBKc1VuaXRcbiAqXG4gKiBAYXV0aG9yIENocmlzdGlhbiBKb2hhbnNlbiAoY2hyaXN0aWFuQGNqb2hhbnNlbi5ubylcbiAqIEBsaWNlbnNlIEJTRFxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEzIENocmlzdGlhbiBKb2hhbnNlblxuICovXG5cInVzZSBzdHJpY3RcIjtcblxuaWYgKHR5cGVvZiBzaW5vbiA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHNpbm9uID0ge307XG59XG5cbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG4gICAgLy8gbm9kZSBleHBlY3RzIHNldFRpbWVvdXQvc2V0SW50ZXJ2YWwgdG8gcmV0dXJuIGEgZm4gb2JqZWN0IHcvIC5yZWYoKS8udW5yZWYoKVxuICAgIC8vIGJyb3dzZXJzLCBhIG51bWJlci5cbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nqb2hhbnNlbi9TaW5vbi5KUy9wdWxsLzQzNlxuICAgIHZhciB0aW1lb3V0UmVzdWx0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHt9LCAwKTtcbiAgICB2YXIgYWRkVGltZXJSZXR1cm5zT2JqZWN0ID0gdHlwZW9mIHRpbWVvdXRSZXN1bHQgPT09ICdvYmplY3QnO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0UmVzdWx0KTtcblxuICAgIHZhciBpZCA9IDE7XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lcihhcmdzLCByZWN1cnJpbmcpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGdW5jdGlvbiByZXF1aXJlcyBhdCBsZWFzdCAxIHBhcmFtZXRlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCB0byB0aW1lciBjYWxsc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0b0lkID0gaWQrKztcbiAgICAgICAgdmFyIGRlbGF5ID0gYXJnc1sxXSB8fCAwO1xuXG4gICAgICAgIGlmICghdGhpcy50aW1lb3V0cykge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0cyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aW1lb3V0c1t0b0lkXSA9IHtcbiAgICAgICAgICAgIGlkOiB0b0lkLFxuICAgICAgICAgICAgZnVuYzogYXJnc1swXSxcbiAgICAgICAgICAgIGNhbGxBdDogdGhpcy5ub3cgKyBkZWxheSxcbiAgICAgICAgICAgIGludm9rZUFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDIpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJlY3VycmluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0c1t0b0lkXS5pbnRlcnZhbCA9IGRlbGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZFRpbWVyUmV0dXJuc09iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogdG9JZCxcbiAgICAgICAgICAgICAgICByZWY6IGZ1bmN0aW9uKCkge30sXG4gICAgICAgICAgICAgICAgdW5yZWY6IGZ1bmN0aW9uKCkge31cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdG9JZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVGltZShzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0cmluZ3MgPSBzdHIuc3BsaXQoXCI6XCIpO1xuICAgICAgICB2YXIgbCA9IHN0cmluZ3MubGVuZ3RoLCBpID0gbDtcbiAgICAgICAgdmFyIG1zID0gMCwgcGFyc2VkO1xuXG4gICAgICAgIGlmIChsID4gMyB8fCAhL14oXFxkXFxkOil7MCwyfVxcZFxcZD8kLy50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRpY2sgb25seSB1bmRlcnN0YW5kcyBudW1iZXJzIGFuZCAnaDptOnMnXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nc1tpXSwgMTApO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VkID49IDYwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0aW1lIFwiICsgc3RyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbXMgKz0gcGFyc2VkICogTWF0aC5wb3coNjAsIChsIC0gaSAtIDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtcyAqIDEwMDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0KG9iamVjdCkge1xuICAgICAgICB2YXIgbmV3T2JqZWN0O1xuXG4gICAgICAgIGlmIChPYmplY3QuY3JlYXRlKSB7XG4gICAgICAgICAgICBuZXdPYmplY3QgPSBPYmplY3QuY3JlYXRlKG9iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgRiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgRi5wcm90b3R5cGUgPSBvYmplY3Q7XG4gICAgICAgICAgICBuZXdPYmplY3QgPSBuZXcgRigpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3T2JqZWN0LkRhdGUuY2xvY2sgPSBuZXdPYmplY3Q7XG4gICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgfVxuXG4gICAgc2lub24uY2xvY2sgPSB7XG4gICAgICAgIG5vdzogMCxcblxuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZShub3cpIHtcbiAgICAgICAgICAgIHZhciBjbG9jayA9IGNyZWF0ZU9iamVjdCh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBub3cgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGNsb2NrLm5vdyA9IG5vdztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEhbm93ICYmIHR5cGVvZiBub3cgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJub3cgc2hvdWxkIGJlIG1pbGxpc2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2xvY2s7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0VGltZW91dDogZnVuY3Rpb24gc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCkge1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyLmNhbGwodGhpcywgYXJndW1lbnRzLCBmYWxzZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiBjbGVhclRpbWVvdXQodGltZXJJZCkge1xuICAgICAgICAgICAgaWYgKCF0aW1lcklkKSB7XG4gICAgICAgICAgICAgICAgLy8gbnVsbCBhcHBlYXJzIHRvIGJlIGFsbG93ZWQgaW4gbW9zdCBicm93c2VycywgYW5kIGFwcGVhcnMgdG8gYmUgcmVsaWVkIHVwb24gYnkgc29tZSBsaWJyYXJpZXMsIGxpa2UgQm9vdHN0cmFwIGNhcm91c2VsXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVvdXRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lb3V0cyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaW4gTm9kZSwgdGltZXJJZCBpcyBhbiBvYmplY3Qgd2l0aCAucmVmKCkvLnVucmVmKCksIGFuZFxuICAgICAgICAgICAgLy8gaXRzIC5pZCBmaWVsZCBpcyB0aGUgYWN0dWFsIHRpbWVyIGlkLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aW1lcklkID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICB0aW1lcklkID0gdGltZXJJZC5pZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRpbWVySWQgaW4gdGhpcy50aW1lb3V0cykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVvdXRzW3RpbWVySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldEludGVydmFsOiBmdW5jdGlvbiBzZXRJbnRlcnZhbChjYWxsYmFjaywgdGltZW91dCkge1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyLmNhbGwodGhpcywgYXJndW1lbnRzLCB0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiBjbGVhckludGVydmFsKHRpbWVySWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcGFzc1RocnVBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyLmNhbGwodGhpcywgW2NhbGxiYWNrLCAwXS5jb25jYXQocGFzc1RocnVBcmdzKSwgZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNsZWFySW1tZWRpYXRlOiBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZSh0aW1lcklkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0aWNrOiBmdW5jdGlvbiB0aWNrKG1zKSB7XG4gICAgICAgICAgICBtcyA9IHR5cGVvZiBtcyA9PSBcIm51bWJlclwiID8gbXMgOiBwYXJzZVRpbWUobXMpO1xuICAgICAgICAgICAgdmFyIHRpY2tGcm9tID0gdGhpcy5ub3csIHRpY2tUbyA9IHRoaXMubm93ICsgbXMsIHByZXZpb3VzID0gdGhpcy5ub3c7XG4gICAgICAgICAgICB2YXIgdGltZXIgPSB0aGlzLmZpcnN0VGltZXJJblJhbmdlKHRpY2tGcm9tLCB0aWNrVG8pO1xuXG4gICAgICAgICAgICB2YXIgZmlyc3RFeGNlcHRpb247XG4gICAgICAgICAgICB3aGlsZSAodGltZXIgJiYgdGlja0Zyb20gPD0gdGlja1RvKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dHNbdGltZXIuaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tGcm9tID0gdGhpcy5ub3cgPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsVGltZXIodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24gPSBmaXJzdEV4Y2VwdGlvbiB8fCBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGltZXIgPSB0aGlzLmZpcnN0VGltZXJJblJhbmdlKHByZXZpb3VzLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzID0gdGlja0Zyb207XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubm93ID0gdGlja1RvO1xuXG4gICAgICAgICAgICBpZiAoZmlyc3RFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhyb3cgZmlyc3RFeGNlcHRpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vdztcbiAgICAgICAgfSxcblxuICAgICAgICBmaXJzdFRpbWVySW5SYW5nZTogZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gICAgICAgICAgICB2YXIgdGltZXIsIHNtYWxsZXN0ID0gbnVsbCwgb3JpZ2luYWxUaW1lcjtcblxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy50aW1lb3V0cykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXRzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0c1tpZF0uY2FsbEF0IDwgZnJvbSB8fCB0aGlzLnRpbWVvdXRzW2lkXS5jYWxsQXQgPiB0bykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxlc3QgPT09IG51bGwgfHwgdGhpcy50aW1lb3V0c1tpZF0uY2FsbEF0IDwgc21hbGxlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVGltZXIgPSB0aGlzLnRpbWVvdXRzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0ID0gdGhpcy50aW1lb3V0c1tpZF0uY2FsbEF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jOiB0aGlzLnRpbWVvdXRzW2lkXS5mdW5jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxBdDogdGhpcy50aW1lb3V0c1tpZF0uY2FsbEF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVydmFsOiB0aGlzLnRpbWVvdXRzW2lkXS5pbnRlcnZhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy50aW1lb3V0c1tpZF0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlQXJnczogdGhpcy50aW1lb3V0c1tpZF0uaW52b2tlQXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRpbWVyIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbFRpbWVyOiBmdW5jdGlvbiAodGltZXIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGltZXIuaW50ZXJ2YWwgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZW91dHNbdGltZXIuaWRdLmNhbGxBdCArPSB0aW1lci5pbnRlcnZhbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZW91dHNbdGltZXIuaWRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGltZXIuZnVuYyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIuZnVuYy5hcHBseShudWxsLCB0aW1lci5pbnZva2VBcmdzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBldmFsKHRpbWVyLmZ1bmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdmFyIGV4Y2VwdGlvbiA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50aW1lb3V0c1t0aW1lci5pZF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0cyA9IHt9O1xuICAgICAgICB9LFxuXG4gICAgICAgIERhdGU6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgTmF0aXZlRGF0ZSA9IERhdGU7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIENsb2NrRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1zKSB7XG4gICAgICAgICAgICAgICAgLy8gRGVmZW5zaXZlIGFuZCB2ZXJib3NlIHRvIGF2b2lkIHBvdGVudGlhbCBoYXJtIGluIHBhc3NpbmdcbiAgICAgICAgICAgICAgICAvLyBleHBsaWNpdCB1bmRlZmluZWQgd2hlbiB1c2VyIGRvZXMgbm90IHBhc3MgYXJndW1lbnRcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZShDbG9ja0RhdGUuY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyKTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCk7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpO1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VyKTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWludXRlKTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWludXRlLCBzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBtaXJyb3JEYXRlUHJvcGVydGllcyhDbG9ja0RhdGUsIE5hdGl2ZURhdGUpO1xuICAgICAgICB9KCkpXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG1pcnJvckRhdGVQcm9wZXJ0aWVzKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgIGlmIChzb3VyY2Uubm93KSB7XG4gICAgICAgICAgICB0YXJnZXQubm93ID0gZnVuY3Rpb24gbm93KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY2xvY2subm93O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQubm93O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNvdXJjZS50b1NvdXJjZSkge1xuICAgICAgICAgICAgdGFyZ2V0LnRvU291cmNlID0gZnVuY3Rpb24gdG9Tb3VyY2UoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS50b1NvdXJjZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQudG9Tb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UudG9TdHJpbmcoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0YXJnZXQucHJvdG90eXBlID0gc291cmNlLnByb3RvdHlwZTtcbiAgICAgICAgdGFyZ2V0LnBhcnNlID0gc291cmNlLnBhcnNlO1xuICAgICAgICB0YXJnZXQuVVRDID0gc291cmNlLlVUQztcbiAgICAgICAgdGFyZ2V0LnByb3RvdHlwZS50b1VUQ1N0cmluZyA9IHNvdXJjZS5wcm90b3R5cGUudG9VVENTdHJpbmc7XG5cbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHZhciBtZXRob2RzID0gW1wiRGF0ZVwiLCBcInNldFRpbWVvdXRcIiwgXCJzZXRJbnRlcnZhbFwiLFxuICAgICAgICAgICAgICAgICAgIFwiY2xlYXJUaW1lb3V0XCIsIFwiY2xlYXJJbnRlcnZhbFwiXTtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLnNldEltbWVkaWF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBtZXRob2RzLnB1c2goXCJzZXRJbW1lZGlhdGVcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgbWV0aG9kcy5wdXNoKFwiY2xlYXJJbW1lZGlhdGVcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgICAgdmFyIG1ldGhvZDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIG1ldGhvZCA9IHRoaXMubWV0aG9kc1tpXTtcblxuICAgICAgICAgICAgaWYgKGdsb2JhbFttZXRob2RdLmhhZE93blByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsW21ldGhvZF0gPSB0aGlzW1wiX1wiICsgbWV0aG9kXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGdsb2JhbFttZXRob2RdO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IG11bHRpcGxlIGV4ZWN1dGlvbnMgd2hpY2ggd2lsbCBjb21wbGV0ZWx5IHJlbW92ZSB0aGVzZSBwcm9wc1xuICAgICAgICB0aGlzLm1ldGhvZHMgPSBbXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHViR2xvYmFsKG1ldGhvZCwgY2xvY2spIHtcbiAgICAgICAgY2xvY2tbbWV0aG9kXS5oYWRPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnbG9iYWwsIG1ldGhvZCk7XG4gICAgICAgIGNsb2NrW1wiX1wiICsgbWV0aG9kXSA9IGdsb2JhbFttZXRob2RdO1xuXG4gICAgICAgIGlmIChtZXRob2QgPT0gXCJEYXRlXCIpIHtcbiAgICAgICAgICAgIHZhciBkYXRlID0gbWlycm9yRGF0ZVByb3BlcnRpZXMoY2xvY2tbbWV0aG9kXSwgZ2xvYmFsW21ldGhvZF0pO1xuICAgICAgICAgICAgZ2xvYmFsW21ldGhvZF0gPSBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb2NrW21ldGhvZF0uYXBwbHkoY2xvY2ssIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGNsb2NrW21ldGhvZF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY2xvY2tbbWV0aG9kXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbbWV0aG9kXVtwcm9wXSA9IGNsb2NrW21ldGhvZF1bcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZ2xvYmFsW21ldGhvZF0uY2xvY2sgPSBjbG9jaztcbiAgICB9XG5cbiAgICBzaW5vbi51c2VGYWtlVGltZXJzID0gZnVuY3Rpb24gdXNlRmFrZVRpbWVycyhub3cpIHtcbiAgICAgICAgdmFyIGNsb2NrID0gc2lub24uY2xvY2suY3JlYXRlKG5vdyk7XG4gICAgICAgIGNsb2NrLnJlc3RvcmUgPSByZXN0b3JlO1xuICAgICAgICBjbG9jay5tZXRob2RzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG5vdyA9PSBcIm51bWJlclwiID8gMSA6IDApO1xuXG4gICAgICAgIGlmIChjbG9jay5tZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY2xvY2subWV0aG9kcyA9IG1ldGhvZHM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNsb2NrLm1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBzdHViR2xvYmFsKGNsb2NrLm1ldGhvZHNbaV0sIGNsb2NrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9jaztcbiAgICB9O1xufSh0eXBlb2YgZ2xvYmFsICE9IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGdsb2JhbCAhPT0gXCJmdW5jdGlvblwiID8gZ2xvYmFsIDogdGhpcykpO1xuXG5zaW5vbi50aW1lcnMgPSB7XG4gICAgc2V0VGltZW91dDogc2V0VGltZW91dCxcbiAgICBjbGVhclRpbWVvdXQ6IGNsZWFyVGltZW91dCxcbiAgICBzZXRJbW1lZGlhdGU6ICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSBcInVuZGVmaW5lZFwiID8gc2V0SW1tZWRpYXRlIDogdW5kZWZpbmVkKSxcbiAgICBjbGVhckltbWVkaWF0ZTogKHR5cGVvZiBjbGVhckltbWVkaWF0ZSAhPT0gXCJ1bmRlZmluZWRcIiA/IGNsZWFySW1tZWRpYXRlOiB1bmRlZmluZWQpLFxuICAgIHNldEludGVydmFsOiBzZXRJbnRlcnZhbCxcbiAgICBjbGVhckludGVydmFsOiBjbGVhckludGVydmFsLFxuICAgIERhdGU6IERhdGVcbn07XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gc2lub247XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pIiwiKGZ1bmN0aW9uIChnbG9iYWwpe1xuKCh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCAmJiBmdW5jdGlvbiAobSkge1xuICAgIGRlZmluZShcImZvcm1hdGlvXCIsIFtcInNhbXNhbVwiXSwgbSk7XG59KSB8fCAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiBmdW5jdGlvbiAobSkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gbShyZXF1aXJlKFwic2Ftc2FtXCIpKTtcbn0pIHx8IGZ1bmN0aW9uIChtKSB7IHRoaXMuZm9ybWF0aW8gPSBtKHRoaXMuc2Ftc2FtKTsgfVxuKShmdW5jdGlvbiAoc2Ftc2FtKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICB2YXIgZm9ybWF0aW8gPSB7XG4gICAgICAgIGV4Y2x1ZGVDb25zdHJ1Y3RvcnM6IFtcIk9iamVjdFwiLCAvXi4kL10sXG4gICAgICAgIHF1b3RlU3RyaW5nczogdHJ1ZVxuICAgIH07XG5cbiAgICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgIHZhciBzcGVjaWFsT2JqZWN0cyA9IFtdO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHNwZWNpYWxPYmplY3RzLnB1c2goeyBvYmplY3Q6IGdsb2JhbCwgdmFsdWU6IFwiW29iamVjdCBnbG9iYWxdXCIgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgc3BlY2lhbE9iamVjdHMucHVzaCh7XG4gICAgICAgICAgICBvYmplY3Q6IGRvY3VtZW50LFxuICAgICAgICAgICAgdmFsdWU6IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHNwZWNpYWxPYmplY3RzLnB1c2goeyBvYmplY3Q6IHdpbmRvdywgdmFsdWU6IFwiW29iamVjdCBXaW5kb3ddXCIgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25OYW1lKGZ1bmMpIHtcbiAgICAgICAgaWYgKCFmdW5jKSB7IHJldHVybiBcIlwiOyB9XG4gICAgICAgIGlmIChmdW5jLmRpc3BsYXlOYW1lKSB7IHJldHVybiBmdW5jLmRpc3BsYXlOYW1lOyB9XG4gICAgICAgIGlmIChmdW5jLm5hbWUpIHsgcmV0dXJuIGZ1bmMubmFtZTsgfVxuICAgICAgICB2YXIgbWF0Y2hlcyA9IGZ1bmMudG9TdHJpbmcoKS5tYXRjaCgvZnVuY3Rpb25cXHMrKFteXFwoXSspL20pO1xuICAgICAgICByZXR1cm4gKG1hdGNoZXMgJiYgbWF0Y2hlc1sxXSkgfHwgXCJcIjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdHJ1Y3Rvck5hbWUoZiwgb2JqZWN0KSB7XG4gICAgICAgIHZhciBuYW1lID0gZnVuY3Rpb25OYW1lKG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3IpO1xuICAgICAgICB2YXIgZXhjbHVkZXMgPSBmLmV4Y2x1ZGVDb25zdHJ1Y3RvcnMgfHxcbiAgICAgICAgICAgICAgICBmb3JtYXRpby5leGNsdWRlQ29uc3RydWN0b3JzIHx8IFtdO1xuXG4gICAgICAgIHZhciBpLCBsO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXhjbHVkZXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4Y2x1ZGVzW2ldID09PSBcInN0cmluZ1wiICYmIGV4Y2x1ZGVzW2ldID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV4Y2x1ZGVzW2ldLnRlc3QgJiYgZXhjbHVkZXNbaV0udGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNDaXJjdWxhcihvYmplY3QsIG9iamVjdHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgIT09IFwib2JqZWN0XCIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHZhciBpLCBsO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gb2JqZWN0cy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChvYmplY3RzW2ldID09PSBvYmplY3QpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXNjaWkoZiwgb2JqZWN0LCBwcm9jZXNzZWQsIGluZGVudCkge1xuICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdmFyIHFzID0gZi5xdW90ZVN0cmluZ3M7XG4gICAgICAgICAgICB2YXIgcXVvdGUgPSB0eXBlb2YgcXMgIT09IFwiYm9vbGVhblwiIHx8IHFzO1xuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZCB8fCBxdW90ZSA/ICdcIicgKyBvYmplY3QgKyAnXCInIDogb2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09IFwiZnVuY3Rpb25cIiAmJiAhKG9iamVjdCBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgICAgIHJldHVybiBhc2NpaS5mdW5jKG9iamVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzZWQgPSBwcm9jZXNzZWQgfHwgW107XG5cbiAgICAgICAgaWYgKGlzQ2lyY3VsYXIob2JqZWN0LCBwcm9jZXNzZWQpKSB7IHJldHVybiBcIltDaXJjdWxhcl1cIjsgfVxuXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXNjaWkuYXJyYXkuY2FsbChmLCBvYmplY3QsIHByb2Nlc3NlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9iamVjdCkgeyByZXR1cm4gU3RyaW5nKCgxL29iamVjdCkgPT09IC1JbmZpbml0eSA/IFwiLTBcIiA6IG9iamVjdCk7IH1cbiAgICAgICAgaWYgKHNhbXNhbS5pc0VsZW1lbnQob2JqZWN0KSkgeyByZXR1cm4gYXNjaWkuZWxlbWVudChvYmplY3QpOyB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QudG9TdHJpbmcgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgIG9iamVjdC50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdC50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksIGw7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBzcGVjaWFsT2JqZWN0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChvYmplY3QgPT09IHNwZWNpYWxPYmplY3RzW2ldLm9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzcGVjaWFsT2JqZWN0c1tpXS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc2NpaS5vYmplY3QuY2FsbChmLCBvYmplY3QsIHByb2Nlc3NlZCwgaW5kZW50KTtcbiAgICB9XG5cbiAgICBhc2NpaS5mdW5jID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb24gXCIgKyBmdW5jdGlvbk5hbWUoZnVuYykgKyBcIigpIHt9XCI7XG4gICAgfTtcblxuICAgIGFzY2lpLmFycmF5ID0gZnVuY3Rpb24gKGFycmF5LCBwcm9jZXNzZWQpIHtcbiAgICAgICAgcHJvY2Vzc2VkID0gcHJvY2Vzc2VkIHx8IFtdO1xuICAgICAgICBwcm9jZXNzZWQucHVzaChhcnJheSk7XG4gICAgICAgIHZhciBpLCBsLCBwaWVjZXMgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgcGllY2VzLnB1c2goYXNjaWkodGhpcywgYXJyYXlbaV0sIHByb2Nlc3NlZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIltcIiArIHBpZWNlcy5qb2luKFwiLCBcIikgKyBcIl1cIjtcbiAgICB9O1xuXG4gICAgYXNjaWkub2JqZWN0ID0gZnVuY3Rpb24gKG9iamVjdCwgcHJvY2Vzc2VkLCBpbmRlbnQpIHtcbiAgICAgICAgcHJvY2Vzc2VkID0gcHJvY2Vzc2VkIHx8IFtdO1xuICAgICAgICBwcm9jZXNzZWQucHVzaChvYmplY3QpO1xuICAgICAgICBpbmRlbnQgPSBpbmRlbnQgfHwgMDtcbiAgICAgICAgdmFyIHBpZWNlcyA9IFtdLCBwcm9wZXJ0aWVzID0gc2Ftc2FtLmtleXMob2JqZWN0KS5zb3J0KCk7XG4gICAgICAgIHZhciBsZW5ndGggPSAzO1xuICAgICAgICB2YXIgcHJvcCwgc3RyLCBvYmosIGksIGw7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIG9iaiA9IG9iamVjdFtwcm9wXTtcblxuICAgICAgICAgICAgaWYgKGlzQ2lyY3VsYXIob2JqLCBwcm9jZXNzZWQpKSB7XG4gICAgICAgICAgICAgICAgc3RyID0gXCJbQ2lyY3VsYXJdXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciA9IGFzY2lpKHRoaXMsIG9iaiwgcHJvY2Vzc2VkLCBpbmRlbnQgKyAyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RyID0gKC9cXHMvLnRlc3QocHJvcCkgPyAnXCInICsgcHJvcCArICdcIicgOiBwcm9wKSArIFwiOiBcIiArIHN0cjtcbiAgICAgICAgICAgIGxlbmd0aCArPSBzdHIubGVuZ3RoO1xuICAgICAgICAgICAgcGllY2VzLnB1c2goc3RyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb25zID0gY29uc3RydWN0b3JOYW1lKHRoaXMsIG9iamVjdCk7XG4gICAgICAgIHZhciBwcmVmaXggPSBjb25zID8gXCJbXCIgKyBjb25zICsgXCJdIFwiIDogXCJcIjtcbiAgICAgICAgdmFyIGlzID0gXCJcIjtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGluZGVudDsgaSA8IGw7ICsraSkgeyBpcyArPSBcIiBcIjsgfVxuXG4gICAgICAgIGlmIChsZW5ndGggKyBpbmRlbnQgPiA4MCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIFwie1xcbiAgXCIgKyBpcyArIHBpZWNlcy5qb2luKFwiLFxcbiAgXCIgKyBpcykgKyBcIlxcblwiICtcbiAgICAgICAgICAgICAgICBpcyArIFwifVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBcInsgXCIgKyBwaWVjZXMuam9pbihcIiwgXCIpICsgXCIgfVwiO1xuICAgIH07XG5cbiAgICBhc2NpaS5lbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIGF0dHJzID0gZWxlbWVudC5hdHRyaWJ1dGVzLCBhdHRyLCBwYWlycyA9IFtdLCBhdHRyTmFtZSwgaSwgbCwgdmFsO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBhdHRycy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGF0dHIgPSBhdHRycy5pdGVtKGkpO1xuICAgICAgICAgICAgYXR0ck5hbWUgPSBhdHRyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZShcImh0bWw6XCIsIFwiXCIpO1xuICAgICAgICAgICAgdmFsID0gYXR0ci5ub2RlVmFsdWU7XG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgIT09IFwiY29udGVudGVkaXRhYmxlXCIgfHwgdmFsICE9PSBcImluaGVyaXRcIikge1xuICAgICAgICAgICAgICAgIGlmICghIXZhbCkgeyBwYWlycy5wdXNoKGF0dHJOYW1lICsgXCI9XFxcIlwiICsgdmFsICsgXCJcXFwiXCIpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZm9ybWF0dGVkID0gXCI8XCIgKyB0YWdOYW1lICsgKHBhaXJzLmxlbmd0aCA+IDAgPyBcIiBcIiA6IFwiXCIpO1xuICAgICAgICB2YXIgY29udGVudCA9IGVsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IDIwKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHIoMCwgMjApICsgXCJbLi4uXVwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlcyA9IGZvcm1hdHRlZCArIHBhaXJzLmpvaW4oXCIgXCIpICsgXCI+XCIgKyBjb250ZW50ICtcbiAgICAgICAgICAgICAgICBcIjwvXCIgKyB0YWdOYW1lICsgXCI+XCI7XG5cbiAgICAgICAgcmV0dXJuIHJlcy5yZXBsYWNlKC8gY29udGVudEVkaXRhYmxlPVwiaW5oZXJpdFwiLywgXCJcIik7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIEZvcm1hdGlvKG9wdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXNbb3B0XSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEZvcm1hdGlvLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG5cbiAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtYXRpbyhvcHRpb25zKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjb25zdHJ1Y3Rvck5hbWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWUodGhpcywgb2JqZWN0KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc2NpaTogZnVuY3Rpb24gKG9iamVjdCwgcHJvY2Vzc2VkLCBpbmRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBhc2NpaSh0aGlzLCBvYmplY3QsIHByb2Nlc3NlZCwgaW5kZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gRm9ybWF0aW8ucHJvdG90eXBlO1xufSk7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pIiwiKCh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCAmJiBmdW5jdGlvbiAobSkgeyBkZWZpbmUoXCJzYW1zYW1cIiwgbSk7IH0pIHx8XG4gKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIGZ1bmN0aW9uIChtKSB7IG1vZHVsZS5leHBvcnRzID0gbSgpOyB9KSB8fCAvLyBOb2RlXG4gZnVuY3Rpb24gKG0pIHsgdGhpcy5zYW1zYW0gPSBtKCk7IH0gLy8gQnJvd3NlciBnbG9iYWxzXG4pKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbyA9IE9iamVjdC5wcm90b3R5cGU7XG4gICAgdmFyIGRpdiA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgICAgICAgLy8gVW5saWtlIGdsb2JhbCBpc05hTiwgdGhpcyBhdm9pZHMgdHlwZSBjb2VyY2lvblxuICAgICAgICAvLyB0eXBlb2YgY2hlY2sgYXZvaWRzIElFIGhvc3Qgb2JqZWN0IGlzc3VlcywgaGF0IHRpcCB0b1xuICAgICAgICAvLyBsb2Rhc2hcbiAgICAgICAgdmFyIHZhbCA9IHZhbHVlOyAvLyBKc0xpbnQgdGhpbmtzIHZhbHVlICE9PSB2YWx1ZSBpcyBcIndlaXJkXCJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiB2YWx1ZSAhPT0gdmFsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENsYXNzKHZhbHVlKSB7XG4gICAgICAgIC8vIFJldHVybnMgdGhlIGludGVybmFsIFtbQ2xhc3NdXSBieSBjYWxsaW5nIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUgYXMgdGhpcy4gUmV0dXJuIHZhbHVlIGlzIGEgc3RyaW5nLCBuYW1pbmcgdGhlXG4gICAgICAgIC8vIGludGVybmFsIGNsYXNzLCBlLmcuIFwiQXJyYXlcIlxuICAgICAgICByZXR1cm4gby50b1N0cmluZy5jYWxsKHZhbHVlKS5zcGxpdCgvWyBcXF1dLylbMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgc2Ftc2FtLmlzQXJndW1lbnRzXG4gICAgICogQHBhcmFtIE9iamVjdCBvYmplY3RcbiAgICAgKlxuICAgICAqIFJldHVybnMgYGB0cnVlYGAgaWYgYGBvYmplY3RgYCBpcyBhbiBgYGFyZ3VtZW50c2BgIG9iamVjdCxcbiAgICAgKiBgYGZhbHNlYGAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXJndW1lbnRzKG9iamVjdCkge1xuICAgICAgICBpZiAoZ2V0Q2xhc3Mob2JqZWN0KSA9PT0gJ0FyZ3VtZW50cycpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iamVjdC5sZW5ndGggIT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgICAgICBnZXRDbGFzcyhvYmplY3QpID09PSBcIkFycmF5XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9iamVjdC5jYWxsZWUgPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvYmplY3Rbb2JqZWN0Lmxlbmd0aF0gPSA2O1xuICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtvYmplY3QubGVuZ3RoXTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHNhbXNhbS5pc0VsZW1lbnRcbiAgICAgKiBAcGFyYW0gT2JqZWN0IG9iamVjdFxuICAgICAqXG4gICAgICogUmV0dXJucyBgYHRydWVgYCBpZiBgYG9iamVjdGBgIGlzIGEgRE9NIGVsZW1lbnQgbm9kZS4gVW5saWtlXG4gICAgICogVW5kZXJzY29yZS5qcy9sb2Rhc2gsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYGBmYWxzZWBgIGlmIGBgb2JqZWN0YGBcbiAgICAgKiBpcyBhbiAqZWxlbWVudC1saWtlKiBvYmplY3QsIGkuZS4gYSByZWd1bGFyIG9iamVjdCB3aXRoIGEgYGBub2RlVHlwZWBgXG4gICAgICogcHJvcGVydHkgdGhhdCBob2xkcyB0aGUgdmFsdWUgYGAxYGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICAgICAgICBpZiAoIW9iamVjdCB8fCBvYmplY3Qubm9kZVR5cGUgIT09IDEgfHwgIWRpdikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9iamVjdC5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICAgICAgb2JqZWN0LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBzYW1zYW0ua2V5c1xuICAgICAqIEBwYXJhbSBPYmplY3Qgb2JqZWN0XG4gICAgICpcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygb3duIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gICAgICAgIHZhciBrcyA9IFtdLCBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcCkpIHsga3MucHVzaChwcm9wKTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBzYW1zYW0uaXNEYXRlXG4gICAgICogQHBhcmFtIE9iamVjdCB2YWx1ZVxuICAgICAqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBgYERhdGVgYCwgb3IgKmRhdGUtbGlrZSouIER1Y2sgdHlwaW5nXG4gICAgICogb2YgZGF0ZSBvYmplY3RzIHdvcmsgYnkgY2hlY2tpbmcgdGhhdCB0aGUgb2JqZWN0IGhhcyBhIGBgZ2V0VGltZWBgXG4gICAgICogZnVuY3Rpb24gd2hvc2UgcmV0dXJuIHZhbHVlIGVxdWFscyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIG9iamVjdCdzXG4gICAgICogYGB2YWx1ZU9mYGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUuZ2V0VGltZSA9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIHZhbHVlLmdldFRpbWUoKSA9PSB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgc2Ftc2FtLmlzTmVnWmVyb1xuICAgICAqIEBwYXJhbSBPYmplY3QgdmFsdWVcbiAgICAgKlxuICAgICAqIFJldHVybnMgYGB0cnVlYGAgaWYgYGB2YWx1ZWBgIGlzIGBgLTBgYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc05lZ1plcm8odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA9PT0gLUluZmluaXR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHNhbXNhbS5lcXVhbFxuICAgICAqIEBwYXJhbSBPYmplY3Qgb2JqMVxuICAgICAqIEBwYXJhbSBPYmplY3Qgb2JqMlxuICAgICAqXG4gICAgICogUmV0dXJucyBgYHRydWVgYCBpZiB0d28gb2JqZWN0cyBhcmUgc3RyaWN0bHkgZXF1YWwuIENvbXBhcmVkIHRvXG4gICAgICogYGA9PT1gYCB0aGVyZSBhcmUgdHdvIGV4Y2VwdGlvbnM6XG4gICAgICpcbiAgICAgKiAgIC0gTmFOIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG8gTmFOXG4gICAgICogICAtIC0wIGFuZCArMCBhcmUgbm90IGNvbnNpZGVyZWQgZXF1YWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpZGVudGljYWwob2JqMSwgb2JqMikge1xuICAgICAgICBpZiAob2JqMSA9PT0gb2JqMiB8fCAoaXNOYU4ob2JqMSkgJiYgaXNOYU4ob2JqMikpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqMSAhPT0gMCB8fCBpc05lZ1plcm8ob2JqMSkgPT09IGlzTmVnWmVybyhvYmoyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgc2Ftc2FtLmRlZXBFcXVhbFxuICAgICAqIEBwYXJhbSBPYmplY3Qgb2JqMVxuICAgICAqIEBwYXJhbSBPYmplY3Qgb2JqMlxuICAgICAqXG4gICAgICogRGVlcCBlcXVhbCBjb21wYXJpc29uLiBUd28gdmFsdWVzIGFyZSBcImRlZXAgZXF1YWxcIiBpZjpcbiAgICAgKlxuICAgICAqICAgLSBUaGV5IGFyZSBlcXVhbCwgYWNjb3JkaW5nIHRvIHNhbXNhbS5pZGVudGljYWxcbiAgICAgKiAgIC0gVGhleSBhcmUgYm90aCBkYXRlIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBzYW1lIHRpbWVcbiAgICAgKiAgIC0gVGhleSBhcmUgYm90aCBhcnJheXMgY29udGFpbmluZyBlbGVtZW50cyB0aGF0IGFyZSBhbGwgZGVlcEVxdWFsXG4gICAgICogICAtIFRoZXkgYXJlIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcywgYW5kIGVhY2ggcHJvcGVydHlcbiAgICAgKiAgICAgaW4gYGBvYmoxYGAgaXMgZGVlcEVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGluIGBgb2JqMmBgXG4gICAgICpcbiAgICAgKiBTdXBwb3J0cyBjeWNsaWMgb2JqZWN0cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWVwRXF1YWxDeWNsaWMob2JqMSwgb2JqMikge1xuXG4gICAgICAgIC8vIHVzZWQgZm9yIGN5Y2xpYyBjb21wYXJpc29uXG4gICAgICAgIC8vIGNvbnRhaW4gYWxyZWFkeSB2aXNpdGVkIG9iamVjdHNcbiAgICAgICAgdmFyIG9iamVjdHMxID0gW10sXG4gICAgICAgICAgICBvYmplY3RzMiA9IFtdLFxuICAgICAgICAvLyBjb250YWluIHBhdGhlcyAocG9zaXRpb24gaW4gdGhlIG9iamVjdCBzdHJ1Y3R1cmUpXG4gICAgICAgIC8vIG9mIHRoZSBhbHJlYWR5IHZpc2l0ZWQgb2JqZWN0c1xuICAgICAgICAvLyBpbmRleGVzIHNhbWUgYXMgaW4gb2JqZWN0cyBhcnJheXNcbiAgICAgICAgICAgIHBhdGhzMSA9IFtdLFxuICAgICAgICAgICAgcGF0aHMyID0gW10sXG4gICAgICAgIC8vIGNvbnRhaW5zIGNvbWJpbmF0aW9ucyBvZiBhbHJlYWR5IGNvbXBhcmVkIG9iamVjdHNcbiAgICAgICAgLy8gaW4gdGhlIG1hbm5lcjogeyBcIiQxWydyZWYnXSQyWydyZWYnXVwiOiB0cnVlIH1cbiAgICAgICAgICAgIGNvbXBhcmVkID0ge307XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHVzZWQgdG8gY2hlY2ssIGlmIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGlzIGFuIG9iamVjdFxuICAgICAgICAgKiAoY3ljbGljIGxvZ2ljIGlzIG9ubHkgbmVlZGVkIGZvciBvYmplY3RzKVxuICAgICAgICAgKiBvbmx5IG5lZWRlZCBmb3IgY3ljbGljIGxvZ2ljXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikgJiZcbiAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpICAgICYmXG4gICAgICAgICAgICAgICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpICAmJlxuICAgICAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSAgJiZcbiAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIG9iamVjdCBpbiB0aGVcbiAgICAgICAgICogZ2l2ZW4gb2JqZWN0cyBhcnJheSwgLTEgaWYgbm90IGNvbnRhaW5lZFxuICAgICAgICAgKiBvbmx5IG5lZWRlZCBmb3IgY3ljbGljIGxvZ2ljXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRJbmRleChvYmplY3RzLCBvYmopIHtcblxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChvYmplY3RzW2ldID09PSBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkb2VzIHRoZSByZWN1cnNpb24gZm9yIHRoZSBkZWVwIGVxdWFsIGNoZWNrXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24gZGVlcEVxdWFsKG9iajEsIG9iajIsIHBhdGgxLCBwYXRoMikge1xuICAgICAgICAgICAgdmFyIHR5cGUxID0gdHlwZW9mIG9iajE7XG4gICAgICAgICAgICB2YXIgdHlwZTIgPSB0eXBlb2Ygb2JqMjtcblxuICAgICAgICAgICAgLy8gPT0gbnVsbCBhbHNvIG1hdGNoZXMgdW5kZWZpbmVkXG4gICAgICAgICAgICBpZiAob2JqMSA9PT0gb2JqMiB8fFxuICAgICAgICAgICAgICAgICAgICBpc05hTihvYmoxKSB8fCBpc05hTihvYmoyKSB8fFxuICAgICAgICAgICAgICAgICAgICBvYmoxID09IG51bGwgfHwgb2JqMiA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUxICE9PSBcIm9iamVjdFwiIHx8IHR5cGUyICE9PSBcIm9iamVjdFwiKSB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaWRlbnRpY2FsKG9iajEsIG9iajIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFbGVtZW50cyBhcmUgb25seSBlcXVhbCBpZiBpZGVudGljYWwoZXhwZWN0ZWQsIGFjdHVhbClcbiAgICAgICAgICAgIGlmIChpc0VsZW1lbnQob2JqMSkgfHwgaXNFbGVtZW50KG9iajIpKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICAgICAgICB2YXIgaXNEYXRlMSA9IGlzRGF0ZShvYmoxKSwgaXNEYXRlMiA9IGlzRGF0ZShvYmoyKTtcbiAgICAgICAgICAgIGlmIChpc0RhdGUxIHx8IGlzRGF0ZTIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRGF0ZTEgfHwgIWlzRGF0ZTIgfHwgb2JqMS5nZXRUaW1lKCkgIT09IG9iajIuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvYmoxIGluc3RhbmNlb2YgUmVnRXhwICYmIG9iajIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqMS50b1N0cmluZygpICE9PSBvYmoyLnRvU3RyaW5nKCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjbGFzczEgPSBnZXRDbGFzcyhvYmoxKTtcbiAgICAgICAgICAgIHZhciBjbGFzczIgPSBnZXRDbGFzcyhvYmoyKTtcbiAgICAgICAgICAgIHZhciBrZXlzMSA9IGtleXMob2JqMSk7XG4gICAgICAgICAgICB2YXIga2V5czIgPSBrZXlzKG9iajIpO1xuXG4gICAgICAgICAgICBpZiAoaXNBcmd1bWVudHMob2JqMSkgfHwgaXNBcmd1bWVudHMob2JqMikpIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqMS5sZW5ndGggIT09IG9iajIubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZTEgIT09IHR5cGUyIHx8IGNsYXNzMSAhPT0gY2xhc3MyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIga2V5LCBpLCBsLFxuICAgICAgICAgICAgICAgIC8vIGZvbGxvd2luZyB2YXJzIGFyZSB1c2VkIGZvciB0aGUgY3ljbGljIGxvZ2ljXG4gICAgICAgICAgICAgICAgdmFsdWUxLCB2YWx1ZTIsXG4gICAgICAgICAgICAgICAgaXNPYmplY3QxLCBpc09iamVjdDIsXG4gICAgICAgICAgICAgICAgaW5kZXgxLCBpbmRleDIsXG4gICAgICAgICAgICAgICAgbmV3UGF0aDEsIG5ld1BhdGgyO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0ga2V5czEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5czFbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFvLmhhc093blByb3BlcnR5LmNhbGwob2JqMiwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU3RhcnQgb2YgdGhlIGN5Y2xpYyBsb2dpY1xuXG4gICAgICAgICAgICAgICAgdmFsdWUxID0gb2JqMVtrZXldO1xuICAgICAgICAgICAgICAgIHZhbHVlMiA9IG9iajJba2V5XTtcblxuICAgICAgICAgICAgICAgIGlzT2JqZWN0MSA9IGlzT2JqZWN0KHZhbHVlMSk7XG4gICAgICAgICAgICAgICAgaXNPYmplY3QyID0gaXNPYmplY3QodmFsdWUyKTtcblxuICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSwgaWYgdGhlIG9iamVjdHMgd2VyZSBhbHJlYWR5IHZpc2l0ZWRcbiAgICAgICAgICAgICAgICAvLyAoaXQncyBmYXN0ZXIgdG8gY2hlY2sgZm9yIGlzT2JqZWN0IGZpcnN0LCB0aGFuIHRvXG4gICAgICAgICAgICAgICAgLy8gZ2V0IC0xIGZyb20gZ2V0SW5kZXggZm9yIG5vbiBvYmplY3RzKVxuICAgICAgICAgICAgICAgIGluZGV4MSA9IGlzT2JqZWN0MSA/IGdldEluZGV4KG9iamVjdHMxLCB2YWx1ZTEpIDogLTE7XG4gICAgICAgICAgICAgICAgaW5kZXgyID0gaXNPYmplY3QyID8gZ2V0SW5kZXgob2JqZWN0czIsIHZhbHVlMikgOiAtMTtcblxuICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSB0aGUgbmV3IHBhdGhlcyBvZiB0aGUgb2JqZWN0c1xuICAgICAgICAgICAgICAgIC8vIC0gZm9yIG5vbiBjeWNsaWMgb2JqZWN0cyB0aGUgY3VycmVudCBwYXRoIHdpbGwgYmUgZXh0ZW5kZWRcbiAgICAgICAgICAgICAgICAvLyAgIGJ5IGN1cnJlbnQgcHJvcGVydHkgbmFtZVxuICAgICAgICAgICAgICAgIC8vIC0gZm9yIGN5Y2xpYyBvYmplY3RzIHRoZSBzdG9yZWQgcGF0aCBpcyB0YWtlblxuICAgICAgICAgICAgICAgIG5ld1BhdGgxID0gaW5kZXgxICE9PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IHBhdGhzMVtpbmRleDFdXG4gICAgICAgICAgICAgICAgICAgIDogcGF0aDEgKyAnWycgKyBKU09OLnN0cmluZ2lmeShrZXkpICsgJ10nO1xuICAgICAgICAgICAgICAgIG5ld1BhdGgyID0gaW5kZXgyICE9PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IHBhdGhzMltpbmRleDJdXG4gICAgICAgICAgICAgICAgICAgIDogcGF0aDIgKyAnWycgKyBKU09OLnN0cmluZ2lmeShrZXkpICsgJ10nO1xuXG4gICAgICAgICAgICAgICAgLy8gc3RvcCByZWN1cnNpb24gaWYgY3VycmVudCBvYmplY3RzIGFyZSBhbHJlYWR5IGNvbXBhcmVkXG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVkW25ld1BhdGgxICsgbmV3UGF0aDJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoZSBjdXJyZW50IG9iamVjdHMgYW5kIHRoZWlyIHBhdGhlc1xuICAgICAgICAgICAgICAgIGlmIChpbmRleDEgPT09IC0xICYmIGlzT2JqZWN0MSkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3RzMS5wdXNoKHZhbHVlMSk7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhzMS5wdXNoKG5ld1BhdGgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4MiA9PT0gLTEgJiYgaXNPYmplY3QyKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdHMyLnB1c2godmFsdWUyKTtcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMyLnB1c2gobmV3UGF0aDIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgdGhlIGN1cnJlbnQgb2JqZWN0cyBhcmUgYWxyZWFkeSBjb21wYXJlZFxuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdDEgJiYgaXNPYmplY3QyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkW25ld1BhdGgxICsgbmV3UGF0aDJdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBFbmQgb2YgY3ljbGljIGxvZ2ljXG5cbiAgICAgICAgICAgICAgICAvLyBuZWl0aGVyIHZhbHVlMSBub3IgdmFsdWUyIGlzIGEgY3ljbGVcbiAgICAgICAgICAgICAgICAvLyBjb250aW51ZSB3aXRoIG5leHQgbGV2ZWxcbiAgICAgICAgICAgICAgICBpZiAoIWRlZXBFcXVhbCh2YWx1ZTEsIHZhbHVlMiwgbmV3UGF0aDEsIG5ld1BhdGgyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICB9KG9iajEsIG9iajIsICckMScsICckMicpKTtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2g7XG5cbiAgICBmdW5jdGlvbiBhcnJheUNvbnRhaW5zKGFycmF5LCBzdWJzZXQpIHtcbiAgICAgICAgaWYgKHN1YnNldC5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgICAgdmFyIGksIGwsIGosIGs7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaChhcnJheVtpXSwgc3Vic2V0WzBdKSkge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGsgPSBzdWJzZXQubGVuZ3RoOyBqIDwgazsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2goYXJyYXlbaSArIGpdLCBzdWJzZXRbal0pKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgc2Ftc2FtLm1hdGNoXG4gICAgICogQHBhcmFtIE9iamVjdCBvYmplY3RcbiAgICAgKiBAcGFyYW0gT2JqZWN0IG1hdGNoZXJcbiAgICAgKlxuICAgICAqIENvbXBhcmUgYXJiaXRyYXJ5IHZhbHVlIGBgb2JqZWN0YGAgd2l0aCBtYXRjaGVyLlxuICAgICAqL1xuICAgIG1hdGNoID0gZnVuY3Rpb24gbWF0Y2gob2JqZWN0LCBtYXRjaGVyKSB7XG4gICAgICAgIGlmIChtYXRjaGVyICYmIHR5cGVvZiBtYXRjaGVyLnRlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIudGVzdChvYmplY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBtYXRjaGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKG9iamVjdCkgPT09IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG1hdGNoZXIgPSBtYXRjaGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2YXIgbm90TnVsbCA9IHR5cGVvZiBvYmplY3QgPT09IFwic3RyaW5nXCIgfHwgISFvYmplY3Q7XG4gICAgICAgICAgICByZXR1cm4gbm90TnVsbCAmJlxuICAgICAgICAgICAgICAgIChTdHJpbmcob2JqZWN0KSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKG1hdGNoZXIpID49IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyID09PSBvYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlciA9PT0gb2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdldENsYXNzKG9iamVjdCkgPT09IFwiQXJyYXlcIiAmJiBnZXRDbGFzcyhtYXRjaGVyKSA9PT0gXCJBcnJheVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlDb250YWlucyhvYmplY3QsIG1hdGNoZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoZXIgJiYgdHlwZW9mIG1hdGNoZXIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHZhciBwcm9wO1xuICAgICAgICAgICAgZm9yIChwcm9wIGluIG1hdGNoZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG9iamVjdC5nZXRBdHRyaWJ1dGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9iamVjdC5nZXRBdHRyaWJ1dGUocHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIgfHwgIW1hdGNoKHZhbHVlLCBtYXRjaGVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYXRjaGVyIHdhcyBub3QgYSBzdHJpbmcsIGEgbnVtYmVyLCBhIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb24sIGEgYm9vbGVhbiBvciBhbiBvYmplY3RcIik7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGlzQXJndW1lbnRzOiBpc0FyZ3VtZW50cyxcbiAgICAgICAgaXNFbGVtZW50OiBpc0VsZW1lbnQsXG4gICAgICAgIGlzRGF0ZTogaXNEYXRlLFxuICAgICAgICBpc05lZ1plcm86IGlzTmVnWmVybyxcbiAgICAgICAgaWRlbnRpY2FsOiBpZGVudGljYWwsXG4gICAgICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsQ3ljbGljLFxuICAgICAgICBtYXRjaDogbWF0Y2gsXG4gICAgICAgIGtleXM6IGtleXNcbiAgICB9O1xufSk7XG4iLCIvLyAgICAgVW5kZXJzY29yZS5qcyAxLjYuMFxuLy8gICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3JnXG4vLyAgICAgKGMpIDIwMDktMjAxNCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbihmdW5jdGlvbigpIHtcblxuICAvLyBCYXNlbGluZSBzZXR1cFxuICAvLyAtLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIGluIHRoZSBicm93c2VyLCBvciBgZXhwb3J0c2Agb24gdGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gRXN0YWJsaXNoIHRoZSBvYmplY3QgdGhhdCBnZXRzIHJldHVybmVkIHRvIGJyZWFrIG91dCBvZiBhIGxvb3AgaXRlcmF0aW9uLlxuICB2YXIgYnJlYWtlciA9IHt9O1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSxcbiAgICBjb25jYXQgICAgICAgICAgID0gQXJyYXlQcm90by5jb25jYXQsXG4gICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUZvckVhY2ggICAgICA9IEFycmF5UHJvdG8uZm9yRWFjaCxcbiAgICBuYXRpdmVNYXAgICAgICAgICAgPSBBcnJheVByb3RvLm1hcCxcbiAgICBuYXRpdmVSZWR1Y2UgICAgICAgPSBBcnJheVByb3RvLnJlZHVjZSxcbiAgICBuYXRpdmVSZWR1Y2VSaWdodCAgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0LFxuICAgIG5hdGl2ZUZpbHRlciAgICAgICA9IEFycmF5UHJvdG8uZmlsdGVyLFxuICAgIG5hdGl2ZUV2ZXJ5ICAgICAgICA9IEFycmF5UHJvdG8uZXZlcnksXG4gICAgbmF0aXZlU29tZSAgICAgICAgID0gQXJyYXlQcm90by5zb21lLFxuICAgIG5hdGl2ZUluZGV4T2YgICAgICA9IEFycmF5UHJvdG8uaW5kZXhPZixcbiAgICBuYXRpdmVMYXN0SW5kZXhPZiAgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mLFxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQ7XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClgIEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0IHZpYSBhIHN0cmluZyBpZGVudGlmaWVyLFxuICAvLyBmb3IgQ2xvc3VyZSBDb21waWxlciBcImFkdmFuY2VkXCIgbW9kZS5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS42LjAnO1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFjaGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgb2JqZWN0cyB3aXRoIHRoZSBidWlsdC1pbiBgZm9yRWFjaGAsIGFycmF5cywgYW5kIHJhdyBvYmplY3RzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgZm9yRWFjaGAgaWYgYXZhaWxhYmxlLlxuICB2YXIgZWFjaCA9IF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgaWYgKG5hdGl2ZUZvckVhY2ggJiYgb2JqLmZvckVhY2ggPT09IG5hdGl2ZUZvckVhY2gpIHtcbiAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKG9iai5sZW5ndGggPT09ICtvYmoubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKSA9PT0gYnJlYWtlcikgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopID09PSBicmVha2VyKSByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRvciB0byBlYWNoIGVsZW1lbnQuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBtYXBgIGlmIGF2YWlsYWJsZS5cbiAgXy5tYXAgPSBfLmNvbGxlY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHRzO1xuICAgIGlmIChuYXRpdmVNYXAgJiYgb2JqLm1hcCA9PT0gbmF0aXZlTWFwKSByZXR1cm4gb2JqLm1hcChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmVzdWx0cy5wdXNoKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgdmFyIHJlZHVjZUVycm9yID0gJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnO1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYHJlZHVjZWAgaWYgYXZhaWxhYmxlLlxuICBfLnJlZHVjZSA9IF8uZm9sZGwgPSBfLmluamVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQpIHtcbiAgICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIGlmIChvYmogPT0gbnVsbCkgb2JqID0gW107XG4gICAgaWYgKG5hdGl2ZVJlZHVjZSAmJiBvYmoucmVkdWNlID09PSBuYXRpdmVSZWR1Y2UpIHtcbiAgICAgIGlmIChjb250ZXh0KSBpdGVyYXRvciA9IF8uYmluZChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gaW5pdGlhbCA/IG9iai5yZWR1Y2UoaXRlcmF0b3IsIG1lbW8pIDogb2JqLnJlZHVjZShpdGVyYXRvcik7XG4gICAgfVxuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmICghaW5pdGlhbCkge1xuICAgICAgICBtZW1vID0gdmFsdWU7XG4gICAgICAgIGluaXRpYWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgbWVtbywgdmFsdWUsIGluZGV4LCBsaXN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWluaXRpYWwpIHRocm93IG5ldyBUeXBlRXJyb3IocmVkdWNlRXJyb3IpO1xuICAgIHJldHVybiBtZW1vO1xuICB9O1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgcmVkdWNlUmlnaHRgIGlmIGF2YWlsYWJsZS5cbiAgXy5yZWR1Y2VSaWdodCA9IF8uZm9sZHIgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICBpZiAob2JqID09IG51bGwpIG9iaiA9IFtdO1xuICAgIGlmIChuYXRpdmVSZWR1Y2VSaWdodCAmJiBvYmoucmVkdWNlUmlnaHQgPT09IG5hdGl2ZVJlZHVjZVJpZ2h0KSB7XG4gICAgICBpZiAoY29udGV4dCkgaXRlcmF0b3IgPSBfLmJpbmQoaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGluaXRpYWwgPyBvYmoucmVkdWNlUmlnaHQoaXRlcmF0b3IsIG1lbW8pIDogb2JqLnJlZHVjZVJpZ2h0KGl0ZXJhdG9yKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gK2xlbmd0aCkge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIH1cbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpbmRleCA9IGtleXMgPyBrZXlzWy0tbGVuZ3RoXSA6IC0tbGVuZ3RoO1xuICAgICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICAgIG1lbW8gPSBvYmpbaW5kZXhdO1xuICAgICAgICBpbml0aWFsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lbW8gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG1lbW8sIG9ialtpbmRleF0sIGluZGV4LCBsaXN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWluaXRpYWwpIHRocm93IG5ldyBUeXBlRXJyb3IocmVkdWNlRXJyb3IpO1xuICAgIHJldHVybiBtZW1vO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgZmlyc3QgdmFsdWUgd2hpY2ggcGFzc2VzIGEgdHJ1dGggdGVzdC4gQWxpYXNlZCBhcyBgZGV0ZWN0YC5cbiAgXy5maW5kID0gXy5kZXRlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgYW55KG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgZmlsdGVyYCBpZiBhdmFpbGFibGUuXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXG4gIF8uZmlsdGVyID0gXy5zZWxlY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0cztcbiAgICBpZiAobmF0aXZlRmlsdGVyICYmIG9iai5maWx0ZXIgPT09IG5hdGl2ZUZpbHRlcikgcmV0dXJuIG9iai5maWx0ZXIocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBfLnJlamVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgfSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBldmVyeWAgaWYgYXZhaWxhYmxlLlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gXy5pZGVudGl0eSk7XG4gICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChuYXRpdmVFdmVyeSAmJiBvYmouZXZlcnkgPT09IG5hdGl2ZUV2ZXJ5KSByZXR1cm4gb2JqLmV2ZXJ5KHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKCEocmVzdWx0ID0gcmVzdWx0ICYmIHByZWRpY2F0ZS5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpKSByZXR1cm4gYnJlYWtlcjtcbiAgICB9KTtcbiAgICByZXR1cm4gISFyZXN1bHQ7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBzb21lYCBpZiBhdmFpbGFibGUuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIHZhciBhbnkgPSBfLnNvbWUgPSBfLmFueSA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBfLmlkZW50aXR5KTtcbiAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChuYXRpdmVTb21lICYmIG9iai5zb21lID09PSBuYXRpdmVTb21lKSByZXR1cm4gb2JqLnNvbWUocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocmVzdWx0IHx8IChyZXN1bHQgPSBwcmVkaWNhdGUuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSkgcmV0dXJuIGJyZWFrZXI7XG4gICAgfSk7XG4gICAgcmV0dXJuICEhcmVzdWx0O1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gdmFsdWUgKHVzaW5nIGA9PT1gKS5cbiAgLy8gQWxpYXNlZCBhcyBgaW5jbHVkZWAuXG4gIF8uY29udGFpbnMgPSBfLmluY2x1ZGUgPSBmdW5jdGlvbihvYmosIHRhcmdldCkge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChuYXRpdmVJbmRleE9mICYmIG9iai5pbmRleE9mID09PSBuYXRpdmVJbmRleE9mKSByZXR1cm4gb2JqLmluZGV4T2YodGFyZ2V0KSAhPSAtMTtcbiAgICByZXR1cm4gYW55KG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGFyZ2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLlxuICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgdmFyIGlzRnVuYyA9IF8uaXNGdW5jdGlvbihtZXRob2QpO1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKGlzRnVuYyA/IG1ldGhvZCA6IHZhbHVlW21ldGhvZF0pLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBtYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gXy5tYXAob2JqLCBfLnByb3BlcnR5KGtleSkpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm1hdGNoZXMoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBmaW5kYDogZ2V0dGluZyB0aGUgZmlyc3Qgb2JqZWN0XG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbmQob2JqLCBfLm1hdGNoZXMoYXR0cnMpKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCBvciAoZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIC8vIENhbid0IG9wdGltaXplIGFycmF5cyBvZiBpbnRlZ2VycyBsb25nZXIgdGhhbiA2NSw1MzUgZWxlbWVudHMuXG4gIC8vIFNlZSBbV2ViS2l0IEJ1ZyA4MDc5N10oaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzk3KVxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpZiAoIWl0ZXJhdG9yICYmIF8uaXNBcnJheShvYmopICYmIG9ialswXSA9PT0gK29ialswXSAmJiBvYmoubGVuZ3RoIDwgNjU1MzUpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCBvYmopO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgdmFyIGNvbXB1dGVkID0gaXRlcmF0b3IgPyBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkgOiB2YWx1ZTtcbiAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGlmICghaXRlcmF0b3IgJiYgXy5pc0FycmF5KG9iaikgJiYgb2JqWzBdID09PSArb2JqWzBdICYmIG9iai5sZW5ndGggPCA2NTUzNSkge1xuICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIG9iaik7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHk7XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgdmFyIGNvbXB1dGVkID0gaXRlcmF0b3IgPyBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkgOiB2YWx1ZTtcbiAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGFuIGFycmF5LCB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlXG4gIC8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS5cbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHJhbmQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc2h1ZmZsZWQgPSBbXTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJhbmQgPSBfLnJhbmRvbShpbmRleCsrKTtcbiAgICAgIHNodWZmbGVkW2luZGV4IC0gMV0gPSBzaHVmZmxlZFtyYW5kXTtcbiAgICAgIHNodWZmbGVkW3JhbmRdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNodWZmbGVkO1xuICB9O1xuXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBtYXBgLlxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7XG4gICAgICBpZiAob2JqLmxlbmd0aCAhPT0gK29iai5sZW5ndGgpIG9iaiA9IF8udmFsdWVzKG9iaik7XG4gICAgICByZXR1cm4gb2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHJldHVybiBfLnNodWZmbGUob2JqKS5zbGljZSgwLCBNYXRoLm1heCgwLCBuKSk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgbG9va3VwIGl0ZXJhdG9ycy5cbiAgdmFyIGxvb2t1cEl0ZXJhdG9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIF8uaWRlbnRpdHk7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gXy5wcm9wZXJ0eSh2YWx1ZSk7XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdG9yLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRvciA9IGxvb2t1cEl0ZXJhdG9yKGl0ZXJhdG9yKTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfTtcblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG4gIHZhciBncm91cCA9IGZ1bmN0aW9uKGJlaGF2aW9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdG9yID0gbG9va3VwSXRlcmF0b3IoaXRlcmF0b3IpO1xuICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwga2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIGtleSwgdmFsdWUpIHtcbiAgICBfLmhhcyhyZXN1bHQsIGtleSkgPyByZXN1bHRba2V5XS5wdXNoKHZhbHVlKSA6IHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIF8uaW5kZXhCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwga2V5LCB2YWx1ZSkge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzc1xuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgLy8gY3JpdGVyaW9uLlxuICBfLmNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuICAgIF8uaGFzKHJlc3VsdCwga2V5KSA/IHJlc3VsdFtrZXldKysgOiByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRvciA9IGxvb2t1cEl0ZXJhdG9yKGl0ZXJhdG9yKTtcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDE7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIGFycmF5W21pZF0pIDwgdmFsdWUgPyBsb3cgPSBtaWQgKyAxIDogaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gKG9iai5sZW5ndGggPT09ICtvYmoubGVuZ3RoKSA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XG4gIH07XG5cbiAgLy8gQXJyYXkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTlxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXG4gIC8vIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5maXJzdCA9IF8uaGVhZCA9IF8udGFrZSA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmICgobiA9PSBudWxsKSB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICAgIGlmIChuIDwgMCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBuKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi4gVGhlICoqZ3VhcmQqKiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoXG4gIC8vIGBfLm1hcGAuXG4gIF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBhcnJheS5sZW5ndGggLSAoKG4gPT0gbnVsbCkgfHwgZ3VhcmQgPyAxIDogbikpO1xuICB9O1xuXG4gIC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8ubGFzdCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIGlmICgobiA9PSBudWxsKSB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBNYXRoLm1heChhcnJheS5sZW5ndGggLSBuLCAwKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxuICAvLyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiAqKm4qKiB3aWxsIHJldHVyblxuICAvLyB0aGUgcmVzdCBOIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKipcbiAgLy8gY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLnJlc3QgPSBfLnRhaWwgPSBfLmRyb3AgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgKG4gPT0gbnVsbCkgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBvdXRwdXQpIHtcbiAgICBpZiAoc2hhbGxvdyAmJiBfLmV2ZXJ5KGlucHV0LCBfLmlzQXJyYXkpKSB7XG4gICAgICByZXR1cm4gY29uY2F0LmFwcGx5KG91dHB1dCwgaW5wdXQpO1xuICAgIH1cbiAgICBlYWNoKGlucHV0LCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc0FyZ3VtZW50cyh2YWx1ZSkpIHtcbiAgICAgICAgc2hhbGxvdyA/IHB1c2guYXBwbHkob3V0cHV0LCB2YWx1ZSkgOiBmbGF0dGVuKHZhbHVlLCBzaGFsbG93LCBvdXRwdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgLy8gRmxhdHRlbiBvdXQgYW4gYXJyYXksIGVpdGhlciByZWN1cnNpdmVseSAoYnkgZGVmYXVsdCksIG9yIGp1c3Qgb25lIGxldmVsLlxuICBfLmZsYXR0ZW4gPSBmdW5jdGlvbihhcnJheSwgc2hhbGxvdykge1xuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBbXSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBTcGxpdCBhbiBhcnJheSBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XG4gICAgZWFjaChhcnJheSwgZnVuY3Rpb24oZWxlbSkge1xuICAgICAgKHByZWRpY2F0ZShlbGVtKSA/IHBhc3MgOiBmYWlsKS5wdXNoKGVsZW0pO1xuICAgIH0pO1xuICAgIHJldHVybiBbcGFzcywgZmFpbF07XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHlcbiAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxuICAvLyBBbGlhc2VkIGFzIGB1bmlxdWVgLlxuICBfLnVuaXEgPSBfLnVuaXF1ZSA9IGZ1bmN0aW9uKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGlzU29ydGVkKSkge1xuICAgICAgY29udGV4dCA9IGl0ZXJhdG9yO1xuICAgICAgaXRlcmF0b3IgPSBpc1NvcnRlZDtcbiAgICAgIGlzU29ydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHZhciBpbml0aWFsID0gaXRlcmF0b3IgPyBfLm1hcChhcnJheSwgaXRlcmF0b3IsIGNvbnRleHQpIDogYXJyYXk7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIGVhY2goaW5pdGlhbCwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICBpZiAoaXNTb3J0ZWQgPyAoIWluZGV4IHx8IHNlZW5bc2Vlbi5sZW5ndGggLSAxXSAhPT0gdmFsdWUpIDogIV8uY29udGFpbnMoc2VlbiwgdmFsdWUpKSB7XG4gICAgICAgIHNlZW4ucHVzaCh2YWx1ZSk7XG4gICAgICAgIHJlc3VsdHMucHVzaChhcnJheVtpbmRleF0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoXy5mbGF0dGVuKGFyZ3VtZW50cywgdHJ1ZSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWluIGFycmF5cy5cbiAgXy5pbnRlcnNlY3Rpb24gPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHZhciByZXN0ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHJldHVybiBfLmZpbHRlcihfLnVuaXEoYXJyYXkpLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4gXy5ldmVyeShyZXN0LCBmdW5jdGlvbihvdGhlcikge1xuICAgICAgICByZXR1cm4gXy5jb250YWlucyhvdGhlciwgaXRlbSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBUYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb25lIGFycmF5IGFuZCBhIG51bWJlciBvZiBvdGhlciBhcnJheXMuXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXG4gIF8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3QgPSBjb25jYXQuYXBwbHkoQXJyYXlQcm90bywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXsgcmV0dXJuICFfLmNvbnRhaW5zKHJlc3QsIHZhbHVlKTsgfSk7XG4gIH07XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgXy56aXAgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gXy5tYXgoXy5wbHVjayhhcmd1bWVudHMsICdsZW5ndGgnKS5jb25jYXQoMCkpO1xuICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0c1tpXSA9IF8ucGx1Y2soYXJndW1lbnRzLCAnJyArIGkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gIF8ub2JqZWN0ID0gZnVuY3Rpb24obGlzdCwgdmFsdWVzKSB7XG4gICAgaWYgKGxpc3QgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gbGlzdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIElmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcGx5IHVzIHdpdGggaW5kZXhPZiAoSSdtIGxvb2tpbmcgYXQgeW91LCAqKk1TSUUqKiksXG4gIC8vIHdlIG5lZWQgdGhpcyBmdW5jdGlvbi4gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhblxuICAvLyBpdGVtIGluIGFuIGFycmF5LCBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgaW5kZXhPZmAgaWYgYXZhaWxhYmxlLlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlzU29ydGVkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiAtMTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgaXNTb3J0ZWQgPT0gJ251bWJlcicpIHtcbiAgICAgICAgaSA9IChpc1NvcnRlZCA8IDAgPyBNYXRoLm1heCgwLCBsZW5ndGggKyBpc1NvcnRlZCkgOiBpc1NvcnRlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpID0gXy5zb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpXSA9PT0gaXRlbSA/IGkgOiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5hdGl2ZUluZGV4T2YgJiYgYXJyYXkuaW5kZXhPZiA9PT0gbmF0aXZlSW5kZXhPZikgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSwgaXNTb3J0ZWQpO1xuICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIGlmIChhcnJheVtpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9O1xuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBsYXN0SW5kZXhPZmAgaWYgYXZhaWxhYmxlLlxuICBfLmxhc3RJbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGZyb20pIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIC0xO1xuICAgIHZhciBoYXNJbmRleCA9IGZyb20gIT0gbnVsbDtcbiAgICBpZiAobmF0aXZlTGFzdEluZGV4T2YgJiYgYXJyYXkubGFzdEluZGV4T2YgPT09IG5hdGl2ZUxhc3RJbmRleE9mKSB7XG4gICAgICByZXR1cm4gaGFzSW5kZXggPyBhcnJheS5sYXN0SW5kZXhPZihpdGVtLCBmcm9tKSA6IGFycmF5Lmxhc3RJbmRleE9mKGl0ZW0pO1xuICAgIH1cbiAgICB2YXIgaSA9IChoYXNJbmRleCA/IGZyb20gOiBhcnJheS5sZW5ndGgpO1xuICAgIHdoaWxlIChpLS0pIGlmIChhcnJheVtpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPD0gMSkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBhcmd1bWVudHNbMl0gfHwgMTtcblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIGlkeCA9IDA7XG4gICAgdmFyIHJhbmdlID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZShpZHggPCBsZW5ndGgpIHtcbiAgICAgIHJhbmdlW2lkeCsrXSA9IHN0YXJ0O1xuICAgICAgc3RhcnQgKz0gc3RlcDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSZXVzYWJsZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgcHJvdG90eXBlIHNldHRpbmcuXG4gIHZhciBjdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIHZhciBhcmdzLCBib3VuZDtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3I7XG4gICAgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkpIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgY3Rvci5wcm90b3R5cGUgPSBmdW5jLnByb3RvdHlwZTtcbiAgICAgIHZhciBzZWxmID0gbmV3IGN0b3I7XG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseShzZWxmLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LiBfIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZSBwcmUtZmlsbGVkLlxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwO1xuICAgICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3Muc2xpY2UoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmdzW2ldID09PSBfKSBhcmdzW2ldID0gYXJndW1lbnRzW3Bvc2l0aW9uKytdO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICBfLmJpbmRBbGwgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZnVuY3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XG4gICAgZWFjaChmdW5jcywgZnVuY3Rpb24oZikgeyBvYmpbZl0gPSBfLmJpbmQob2JqW2ZdLCBvYmopOyB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vID0ge307XG4gICAgaGFzaGVyIHx8IChoYXNoZXIgPSBfLmlkZW50aXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIga2V5ID0gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gXy5oYXMobWVtbywga2V5KSA/IG1lbW9ba2V5XSA6IChtZW1vW2tleV0gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxsc1xuICAvLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXG4gIF8uZGVsYXkgPSBmdW5jdGlvbihmdW5jLCB3YWl0KSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7IH0sIHdhaXQpO1xuICB9O1xuXG4gIC8vIERlZmVycyBhIGZ1bmN0aW9uLCBzY2hlZHVsaW5nIGl0IHRvIHJ1biBhZnRlciB0aGUgY3VycmVudCBjYWxsIHN0YWNrIGhhc1xuICAvLyBjbGVhcmVkLlxuICBfLmRlZmVyID0gZnVuY3Rpb24oZnVuYykge1xuICAgIHJldHVybiBfLmRlbGF5LmFwcGx5KF8sIFtmdW5jLCAxXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKSk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBfLnRocm90dGxlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IF8ubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuICAgICAgaWYgKGxhc3QgPCB3YWl0KSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB0aW1lc3RhbXAgPSBfLm5vdygpO1xuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgfVxuICAgICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgcmFuID0gZmFsc2UsIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHJhbikgcmV0dXJuIG1lbW87XG4gICAgICByYW4gPSB0cnVlO1xuICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZnVuY3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBmb3IgKHZhciBpID0gZnVuY3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgYXJncyA9IFtmdW5jc1tpXS5hcHBseSh0aGlzLCBhcmdzKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnc1swXTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBhZnRlciBiZWluZyBjYWxsZWQgTiB0aW1lcy5cbiAgXy5hZnRlciA9IGZ1bmN0aW9uKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZXNbaV0gPSBvYmpba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07XG5cbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXG4gIF8ucGFpcnMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgcGFpcnMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtrZXlzW2ldLCBvYmpba2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxuICBfLmludmVydCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW2tleXNbaV1dXSA9IGtleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgdGhlIGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICAvLyBBbGlhc2VkIGFzIGBtZXRob2RzYFxuICBfLmZ1bmN0aW9ucyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH07XG5cbiAgLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuXG4gIF8uZXh0ZW5kID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgZWFjaChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICAgIG9ialtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgd2hpdGVsaXN0ZWQgcHJvcGVydGllcy5cbiAgXy5waWNrID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGNvcHkgPSB7fTtcbiAgICB2YXIga2V5cyA9IGNvbmNhdC5hcHBseShBcnJheVByb3RvLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIGVhY2goa2V5cywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICBpZiAoa2V5IGluIG9iaikgY29weVtrZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvcHk7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgY29weSA9IHt9O1xuICAgIHZhciBrZXlzID0gY29uY2F0LmFwcGx5KEFycmF5UHJvdG8sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKCFfLmNvbnRhaW5zKGtleXMsIGtleSkpIGNvcHlba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gY29weTtcbiAgfTtcblxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICBfLmRlZmF1bHRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgZWFjaChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICAgIGlmIChvYmpbcHJvcF0gPT09IHZvaWQgMCkgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVuY3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09IDEgLyBiO1xuICAgIC8vIEEgc3RyaWN0IGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYG51bGwgPT0gdW5kZWZpbmVkYC5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGEgPT09IGI7XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBfKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8pIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGBcIjVcImAgaXNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICByZXR1cm4gYSA9PSBTdHJpbmcoYik7XG4gICAgICBjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLiBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yXG4gICAgICAgIC8vIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gYSAhPSArYSA/IGIgIT0gK2IgOiAoYSA9PSAwID8gMSAvIGEgPT0gMSAvIGIgOiBhID09ICtiKTtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PSArYjtcbiAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIHNvdXJjZSBwYXR0ZXJucyBhbmQgZmxhZ3MuXG4gICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgICByZXR1cm4gYS5zb3VyY2UgPT0gYi5zb3VyY2UgJiZcbiAgICAgICAgICAgICAgIGEuZ2xvYmFsID09IGIuZ2xvYmFsICYmXG4gICAgICAgICAgICAgICBhLm11bHRpbGluZSA9PSBiLm11bHRpbGluZSAmJlxuICAgICAgICAgICAgICAgYS5pZ25vcmVDYXNlID09IGIuaWdub3JlQ2FzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09IGI7XG4gICAgfVxuICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3Rgc1xuICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShfLmlzRnVuY3Rpb24oYUN0b3IpICYmIChhQ3RvciBpbnN0YW5jZW9mIGFDdG9yKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmlzRnVuY3Rpb24oYkN0b3IpICYmIChiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG4gICAgdmFyIHNpemUgPSAwLCByZXN1bHQgPSB0cnVlO1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChjbGFzc05hbWUgPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBzaXplID0gYS5sZW5ndGg7XG4gICAgICByZXN1bHQgPSBzaXplID09IGIubGVuZ3RoO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgICAgICAgaWYgKCEocmVzdWx0ID0gZXEoYVtzaXplXSwgYltzaXplXSwgYVN0YWNrLCBiU3RhY2spKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gYSkge1xuICAgICAgICBpZiAoXy5oYXMoYSwga2V5KSkge1xuICAgICAgICAgIC8vIENvdW50IHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcHJvcGVydGllcy5cbiAgICAgICAgICBzaXplKys7XG4gICAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyLlxuICAgICAgICAgIGlmICghKHJlc3VsdCA9IF8uaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcy5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gYikge1xuICAgICAgICAgIGlmIChfLmhhcyhiLCBrZXkpICYmICEoc2l6ZS0tKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gIXNpemU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiLCBbXSwgW10pO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09PSAwO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gT2JqZWN0KG9iaik7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAuXG4gIGVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuICEhKG9iaiAmJiBfLmhhcyhvYmosICdjYWxsZWUnKSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS5cbiAgaWYgKHR5cGVvZiAoLy4vKSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5cbiAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0b3JzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ucHJvcGVydHkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgaWYgKG9iaiA9PT0gYXR0cnMpIHJldHVybiB0cnVlOyAvL2F2b2lkIGNvbXBhcmluZyBhbiBvYmplY3QgdG8gaXRzZWxmLlxuICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJzKSB7XG4gICAgICAgIGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSlcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIF8ubm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfTtcblxuICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZW50aXR5TWFwID0ge1xuICAgIGVzY2FwZToge1xuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJzwnOiAnJmx0OycsXG4gICAgICAnPic6ICcmZ3Q7JyxcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgXCInXCI6ICcmI3gyNzsnXG4gICAgfVxuICB9O1xuICBlbnRpdHlNYXAudW5lc2NhcGUgPSBfLmludmVydChlbnRpdHlNYXAuZXNjYXBlKTtcblxuICAvLyBSZWdleGVzIGNvbnRhaW5pbmcgdGhlIGtleXMgYW5kIHZhbHVlcyBsaXN0ZWQgaW1tZWRpYXRlbHkgYWJvdmUuXG4gIHZhciBlbnRpdHlSZWdleGVzID0ge1xuICAgIGVzY2FwZTogICBuZXcgUmVnRXhwKCdbJyArIF8ua2V5cyhlbnRpdHlNYXAuZXNjYXBlKS5qb2luKCcnKSArICddJywgJ2cnKSxcbiAgICB1bmVzY2FwZTogbmV3IFJlZ0V4cCgnKCcgKyBfLmtleXMoZW50aXR5TWFwLnVuZXNjYXBlKS5qb2luKCd8JykgKyAnKScsICdnJylcbiAgfTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIF8uZWFjaChbJ2VzY2FwZScsICd1bmVzY2FwZSddLCBmdW5jdGlvbihtZXRob2QpIHtcbiAgICBfW21ldGhvZF0gPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIGlmIChzdHJpbmcgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuICgnJyArIHN0cmluZykucmVwbGFjZShlbnRpdHlSZWdleGVzW21ldGhvZF0sIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICAgIHJldHVybiBlbnRpdHlNYXBbbWV0aG9kXVttYXRjaF07XG4gICAgICB9KTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBgb2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBlYWNoKF8uZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHQnOiAgICAgJ3QnLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxcXHR8XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7XG4gICAgdmFyIHJlbmRlcjtcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KVxuICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07IH0pO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9XG4gICAgICBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9XG4gICAgICBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgIH1cbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgXCJyZXR1cm4gX19wO1xcblwiO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSkgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTtcbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbiwgd2hpY2ggd2lsbCBkZWxlZ2F0ZSB0byB0aGUgd3JhcHBlci5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfKG9iaikuY2hhaW4oKTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIGVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT0gJ3NoaWZ0JyB8fCBuYW1lID09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIGVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgXy5leHRlbmQoXy5wcm90b3R5cGUsIHtcblxuICAgIC8vIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgICBjaGFpbjogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl9jaGFpbiA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gICAgfVxuXG4gIH0pO1xuXG4gIC8vIEFNRCByZWdpc3RyYXRpb24gaGFwcGVucyBhdCB0aGUgZW5kIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQU1EIGxvYWRlcnNcbiAgLy8gdGhhdCBtYXkgbm90IGVuZm9yY2UgbmV4dC10dXJuIHNlbWFudGljcyBvbiBtb2R1bGVzLiBFdmVuIHRob3VnaCBnZW5lcmFsXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcbiAgLy8gYXMgYSBuYW1lZCBtb2R1bGUgYmVjYXVzZSwgbGlrZSBqUXVlcnksIGl0IGlzIGEgYmFzZSBsaWJyYXJ5IHRoYXQgaXNcbiAgLy8gcG9wdWxhciBlbm91Z2ggdG8gYmUgYnVuZGxlZCBpbiBhIHRoaXJkIHBhcnR5IGxpYiwgYnV0IG5vdCBiZSBwYXJ0IG9mXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cbiAgLy8gYW5vbnltb3VzIGRlZmluZSgpIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgbG9hZGVyIHJlcXVlc3QuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxufSkuY2FsbCh0aGlzKTtcbiIsImNoYWkgICAgICA9IHJlcXVpcmUoJ2NoYWknKVxuZXhwZWN0ICAgID0gY2hhaS5leHBlY3RcbnNob3VsZCAgICA9IGNoYWkuc2hvdWxkKClcbnNpbm9uICAgICA9IHJlcXVpcmUoJ3Npbm9uJylcbnNpbm9uQ2hhaSA9IHJlcXVpcmUoJ3Npbm9uLWNoYWknKVxuXyA9IHJlcXVpcmUgXCJ1bmRlcnNjb3JlXCJcblxuY2hhaS51c2Uoc2lub25DaGFpKVxuXG5ZYXR0YSA9IHJlcXVpcmUgXCIuLi9saWIvRnJhbWV3b3Jrcy9Kc29uWWF0dGEuY29mZmVlXCJcbkNvbm5lY3Rvcl91bmluaXRpYWxpemVkID0gcmVxdWlyZSBcIi4uL2xpYi9Db25uZWN0b3JzL1Rlc3RDb25uZWN0b3IuY29mZmVlXCJcbiMjI1xuZGVzY3JpYmUgXCJKc29uWWF0dGFcIiwgLT5cbiAgYmVmb3JlRWFjaCAoZG9uZSktPlxuICAgIEBsYXN0X3VzZXIgPSAxMFxuICAgIEB1c2VycyA9IFtdXG4gICAgQENvbm5lY3RvciA9IENvbm5lY3Rvcl91bmluaXRpYWxpemVkIEB1c2Vyc1xuICAgIGZvciBpIGluIFswLi4oQGxhc3RfdXNlcisxKV1cbiAgICAgIEB1c2Vycy5wdXNoKG5ldyBZYXR0YSBpLCBAQ29ubmVjdG9yKVxuXG5cbiAgICBkb25lKClcblxuICBpdCBcImNhbiBoYW5kbGUgbWFueSBlbmdpbmVzLCBtYW55IG9wZXJhdGlvbnMsIGNvbmN1cnJlbnRseSAocmFuZG9tKVwiLCAtPlxuICAgIG51bWJlcl9vZl90ZXN0X2Nhc2VzX211bHRpcGxpZXIgPSAxXG4gICAgcmVwZWF0X3RoaXMgPSAxMDAgKiBudW1iZXJfb2ZfdGVzdF9jYXNlc19tdWx0aXBsaWVyXG4gICAgZG9Tb21ldGhpbmdfYW1vdW50ID0gMjAwICogbnVtYmVyX29mX3Rlc3RfY2FzZXNfbXVsdGlwbGllclxuICAgIG51bWJlcl9vZl9lbmdpbmVzID0gIDEyICsgbnVtYmVyX29mX3Rlc3RfY2FzZXNfbXVsdGlwbGllciAtIDFcblxuICAgIEB0aW1lID0gMFxuICAgIEBvcHMgPSAwXG5cbiAgICB1c2VycyA9IFtdXG5cbiAgICBnZW5lcmF0ZUluc2VydE9wID0gKHVzZXJfbnVtKS0+XG4gICAgICAgICAgY2hhcnMgPSBcIjEyMzQ1Njc4OTBcIlxuXG4gICAgICAgICAgcG9zID0gXy5yYW5kb20gMCwgKHVzZXJzW3VzZXJfbnVtXS52YWwoJ25hbWUnKS5sZW5ndGgtMSlcbiAgICAgICAgICBsZW5ndGggPSAxICNfLnJhbmRvbSAwLCAxMFxuXG4gICAgICAgICAgbmV4dGNoYXIgPSBjaGFyc1soXy5yYW5kb20gMCwgKGNoYXJzLmxlbmd0aC0xKSldXG5cbiAgICAgICAgICB0ZXh0ID0gXCJcIlxuICAgICAgICAgIF8obGVuZ3RoKS50aW1lcyAoKS0+IHRleHQgKz0gbmV4dGNoYXJcblxuICAgICAgICAgIHVzZXJzW3VzZXJfbnVtXS52YWwoJ25hbWUnKS5pbnNlcnRUZXh0IHBvcywgdGV4dFxuICAgICAgICAgIG51bGxcblxuICAgIGdlbmVyYXRlUmVwbGFjZU9wID0gKHVzZXJfbnVtKS0+XG4gICAgICAgICAgY2hhcnMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCJcbiAgICAgICAgICBsZW5ndGggPSBfLnJhbmRvbSAwLCAxMFxuXG4gICAgICAgICAgbmV4dGNoYXIgPSBjaGFyc1soXy5yYW5kb20gMCwgKGNoYXJzLmxlbmd0aC0xKSldXG5cbiAgICAgICAgICB0ZXh0ID0gXCJcIlxuICAgICAgICAgIF8obGVuZ3RoKS50aW1lcyAoKS0+IHRleHQgKz0gbmV4dGNoYXJcbiAgICAgICAgICB1c2Vyc1t1c2VyX251bV0udmFsKCduYW1lJykucmVwbGFjZVRleHQgdGV4dFxuXG4gICAgZ2VuZXJhdGVEZWxldGVPcCA9ICh1c2VyX251bSktPlxuICAgICAgICBpZiB1c2Vyc1t1c2VyX251bV0udmFsKCduYW1lJykudmFsKCkubGVuZ3RoID4gMFxuICAgICAgICAgIHBvcyA9IF8ucmFuZG9tIDAsICh1c2Vyc1t1c2VyX251bV0udmFsKCduYW1lJykudmFsKCkubGVuZ3RoLTEpXG4gICAgICAgICAgbGVuZ3RoID0gMSAjIF8ucmFuZG9tIDAsIG90LnZhbCgnbmFtZScpLmxlbmd0aCAtIHBvc1xuICAgICAgICAgIG9wczEgPSB1c2Vyc1t1c2VyX251bV0udmFsKCduYW1lJykuZGVsZXRlVGV4dCBwb3MsIGxlbmd0aFxuICAgICAgICB1bmRlZmluZWRcblxuICAgIGdlbmVyYXRlUmFuZG9tT3AgPSAodXNlcl9udW0pLT5cbiAgICAgIG9wX2dlbiA9IFtnZW5lcmF0ZURlbGV0ZU9wLCBnZW5lcmF0ZUluc2VydE9wLCBnZW5lcmF0ZVJlcGxhY2VPcF1cbiAgICAgIGkgPSBfLnJhbmRvbSAob3BfZ2VuLmxlbmd0aCAtIDEpXG4gICAgICBvcCA9IG9wX2dlbltpXSh1c2VyX251bSlcblxuICAgIGFwcGx5UmFuZG9tT3AgPSAodXNlcl9udW0pLT5cbiAgICAgIHVzZXIgPSB1c2Vyc1t1c2VyX251bV1cbiAgICAgIHVzZXIuZ2V0Q29ubmVjdG9yKCkuZmx1c2hPbmVSYW5kb20oKVxuXG4gICAgZG9Tb21ldGhpbmcgPSBkbyAoKS0+XG4gICAgICAoKS0+XG4gICAgICAgIHVzZXJfbnVtID0gXy5yYW5kb20gKG51bWJlcl9vZl9lbmdpbmVzLTEpXG4gICAgICAgIGNob2ljZXMgPSBbYXBwbHlSYW5kb21PcCwgZ2VuZXJhdGVSYW5kb21PcF1cbiAgICAgICAgI2lmICh1c2Vyc1t1c2VyX251bV0uYnVmZmVyW3VzZXJfbnVtXS5sZW5ndGggPCBtYXhpbXVtX29wc19wZXJfZW5naW5lKVxuICAgICAgICAjICBjaG9pY2VzID0gY2hvaWNlcy5jb25jYXQgZ2VuZXJhdGVSYW5kb21PcFxuXG4gICAgICAgIGNob2ljZSA9IF8ucmFuZG9tIChjaG9pY2VzLmxlbmd0aC0xKVxuXG4gICAgICAgIGNob2ljZXNbY2hvaWNlXSh1c2VyX251bSlcblxuICAgIGNvbnNvbGUubG9nIFwiXCJcbiAgICBmb3IgdGltZXMgaW4gWzEuLnJlcGVhdF90aGlzXVxuICAgICAgI2NvbnNvbGUubG9nIFwicmVwZWF0ZWRfdGhpcyB4ICN7dGltZXN9IHRpbWVzXCJcbiAgICAgIHVzZXJzID0gW11cbiAgICAgIENvbm5lY3RvciA9IENvbm5lY3Rvcl91bmluaXRpYWxpemVkIHVzZXJzXG4gICAgICB1c2Vycy5wdXNoKG5ldyBZYXR0YSAwLCBDb25uZWN0b3IpXG4gICAgICB1c2Vyc1swXS52YWwoJ25hbWUnLFwiaW5pdGlhbFwiKVxuICAgICAgZm9yIGkgaW4gWzEuLi5udW1iZXJfb2ZfZW5naW5lc11cbiAgICAgICAgdXNlcnMucHVzaChuZXcgWWF0dGEgaSwgQ29ubmVjdG9yKVxuXG4gICAgICBmb3VuZF9lcnJvciA9IGZhbHNlXG5cbiAgICAgICN0cnlcbiAgICAgIHRpbWVfbm93ID0gKG5ldyBEYXRlKS5nZXRUaW1lKClcbiAgICAgIGZvciBpIGluIFsxLi5kb1NvbWV0aGluZ19hbW91bnRdXG4gICAgICAgIGRvU29tZXRoaW5nKClcblxuICAgICAgZm9yIHVzZXIsdXNlcl9udW1iZXIgaW4gdXNlcnNcbiAgICAgICAgdXNlci5nZXRDb25uZWN0b3IoKS5mbHVzaEFsbCgpXG5cbiAgICAgIEB0aW1lICs9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSB0aW1lX25vd1xuXG4gICAgICBudW1iZXJfb2ZfY3JlYXRlZF9vcGVyYXRpb25zID0gMFxuICAgICAgZm9yIGkgaW4gWzAuLi4odXNlcnMubGVuZ3RoKV1cbiAgICAgICAgbnVtYmVyX29mX2NyZWF0ZWRfb3BlcmF0aW9ucyArPSB1c2Vyc1tpXS5nZXRDb25uZWN0b3IoKS5nZXRPcHNJbkV4ZWN1dGlvbk9yZGVyKCkubGVuZ3RoXG4gICAgICBAb3BzICs9IG51bWJlcl9vZl9jcmVhdGVkX29wZXJhdGlvbnMqdXNlcnMubGVuZ3RoXG5cbiAgICAgIG9wc19wZXJfbXNlayA9IE1hdGguZmxvb3IoQG9wcy9AdGltZSlcbiAgICAgIGNvbnNvbGUubG9nIFwiI3t0aW1lc30vI3tyZXBlYXRfdGhpc306IEV2ZXJ5IGNvbGxhYm9yYXRvciAoI3t1c2Vycy5sZW5ndGh9KSBhcHBsaWVkICN7bnVtYmVyX29mX2NyZWF0ZWRfb3BlcmF0aW9uc30gb3BzIGluIGEgZGlmZmVyZW50IG9yZGVyLlwiICsgXCIgT3ZlciBhbGwgd2UgY29uc3VtZWQgI3tAb3BzfSBvcGVyYXRpb25zIGluICN7QHRpbWUvMTAwMH0gc2Vjb25kcyAoI3tvcHNfcGVyX21zZWt9IG9wcy9tc2VrKS5cIlxuXG4gICAgICBjb25zb2xlLmxvZyB1c2Vyc1swXS52YWwoJ25hbWUnKS52YWwoKVxuICAgICAgZm9yIGkgaW4gWzAuLi4odXNlcnMubGVuZ3RoLTEpXVxuICAgICAgICBpZiAoKHVzZXJzW2ldLnZhbCgnbmFtZScpLnZhbCgpIGlzbnQgdXNlcnNbaSsxXS52YWwoJ25hbWUnKS52YWwoKSkgKSMgYW5kIChudW1iZXJfb2ZfY3JlYXRlZF9vcGVyYXRpb25zIDw9IDYgb3IgdHJ1ZSkpIG9yIGZvdW5kX2Vycm9yXG5cbiAgICAgICAgICBwcmludE9wc0luRXhlY3V0aW9uT3JkZXIgPSAob3RudW1iZXIsIG90aGVyb3RudW1iZXIpLT5cbiAgICAgICAgICAgIG9wcyA9IHVzZXJzW290bnVtYmVyXS5nZXRDb25uZWN0b3IoKS5nZXRPcHNJbkV4ZWN1dGlvbk9yZGVyKClcbiAgICAgICAgICAgIGZvciBzIGluIG9wc1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyBKU09OLnN0cmluZ2lmeSBzXG4gICAgICAgICAgICBjb25zb2xlLmxvZyBcIlwiXG4gICAgICAgICAgICBzID0gXCJvcHMgPSBbXCJcbiAgICAgICAgICAgIGZvciBvLGogaW4gb3BzXG4gICAgICAgICAgICAgIGlmIGogaXNudCAwXG4gICAgICAgICAgICAgICAgcyArPSBcIiwgXCJcbiAgICAgICAgICAgICAgcyArPSBcIm9wI3tqfVwiXG4gICAgICAgICAgICBzICs9IFwiXVwiXG4gICAgICAgICAgICBjb25zb2xlLmxvZyBzXG4gICAgICAgICAgICBjb25zb2xlLmxvZyBcIkB1c2Vyc1tAbGFzdF91c2VyXS5vdC5hcHBseU9wcyBvcHNcIlxuICAgICAgICAgICAgY29uc29sZS5sb2cgXCJleHBlY3QoQHVzZXJzW0BsYXN0X3VzZXJdLm90LnZhbCgnbmFtZScpKS50by5lcXVhbChcXFwiI3t1c2Vyc1tvdGhlcm90bnVtYmVyXS52YWwoJ25hbWUnKX1cXFwiKVwiXG4gICAgICAgICAgICBvcHNcbiAgICAgICAgICBjb25zb2xlLmxvZyBcIlwiXG4gICAgICAgICAgY29uc29sZS5sb2cgXCJGb3VuZCBhbiBPVCBQdXp6bGUhXCJcbiAgICAgICAgICBjb25zb2xlLmxvZyBcIk9UIHN0YXRlczpcIlxuICAgICAgICAgIGZvciB1LGogaW4gdXNlcnNcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIFwiT1Qje2p9OiBcIit1LnZhbCgnbmFtZScpXG4gICAgICAgICAgY29uc29sZS5sb2cgXCJcXG5PVCBleGVjdXRpb24gb3JkZXIgKCN7aX0sI3tpKzF9KTpcIlxuICAgICAgICAgIHByaW50T3BzSW5FeGVjdXRpb25PcmRlciBpLCBpKzFcbiAgICAgICAgICBjb25zb2xlLmxvZyBcIlwiXG4gICAgICAgICAgb3BzID0gcHJpbnRPcHNJbkV4ZWN1dGlvbk9yZGVyIGkrMSwgaVxuXG4gICAgICAgICAgY29uc29sZS5sb2cgXCJcIlxuIyMjXG4iLCJjaGFpICAgICAgPSByZXF1aXJlKCdjaGFpJylcbmV4cGVjdCAgICA9IGNoYWkuZXhwZWN0XG5zaG91bGQgICAgPSBjaGFpLnNob3VsZCgpXG5zaW5vbiAgICAgPSByZXF1aXJlKCdzaW5vbicpXG5zaW5vbkNoYWkgPSByZXF1aXJlKCdzaW5vbi1jaGFpJylcbl8gPSByZXF1aXJlIFwidW5kZXJzY29yZVwiXG5cbmNoYWkudXNlKHNpbm9uQ2hhaSlcblxuWWF0dGEgPSByZXF1aXJlIFwiLi4vbGliL0ZyYW1ld29ya3MvVGV4dFlhdHRhLmNvZmZlZVwiXG5Db25uZWN0b3JfdW5pbml0aWFsaXplZCA9IHJlcXVpcmUgXCIuLi9saWIvQ29ubmVjdG9ycy9UZXN0Q29ubmVjdG9yLmNvZmZlZVwiXG4jIyNcbmRlc2NyaWJlIFwiVGV4dFlhdHRhXCIsIC0+XG4gIGJlZm9yZUVhY2ggKGRvbmUpLT5cbiAgICBAbGFzdF91c2VyID0gMTBcbiAgICBAdXNlcnMgPSBbXVxuICAgIEBDb25uZWN0b3IgPSBDb25uZWN0b3JfdW5pbml0aWFsaXplZCBAdXNlcnNcbiAgICBmb3IgaSBpbiBbMC4uKEBsYXN0X3VzZXIrMSldXG4gICAgICBAdXNlcnMucHVzaChuZXcgWWF0dGEgaSwgQENvbm5lY3RvcilcbiAgICBkb25lKClcblxuICBpdCBcImhhbmRsZXMgaW5zZXJ0cyBjb3JyZWN0bHlcIiwgLT5cblxuXG4gIGl0IFwiY2FuIGhhbmRsZSBtYW55IGVuZ2luZXMsIG1hbnkgb3BlcmF0aW9ucywgY29uY3VycmVudGx5IChyYW5kb20pXCIsIC0+XG4gICAgbnVtYmVyX29mX3Rlc3RfY2FzZXNfbXVsdGlwbGllciA9IDFcbiAgICByZXBlYXRfdGhpcyA9IDEgKiBudW1iZXJfb2ZfdGVzdF9jYXNlc19tdWx0aXBsaWVyXG4gICAgZG9Tb21ldGhpbmdfYW1vdW50ID0gNTAwICogbnVtYmVyX29mX3Rlc3RfY2FzZXNfbXVsdGlwbGllclxuICAgIG51bWJlcl9vZl9lbmdpbmVzID0gIDEyICsgbnVtYmVyX29mX3Rlc3RfY2FzZXNfbXVsdGlwbGllciAtIDFcbiAgICAjbWF4aW11bV9vcHNfcGVyX2VuZ2luZSA9IDIwICogbnVtYmVyX29mX3Rlc3RfY2FzZXNfbXVsdGlwbGllclxuXG4gICAgQHRpbWUgPSAwXG4gICAgQG9wcyA9IDBcbiAgICB1c2VycyA9IFtdXG5cbiAgICBnZW5lcmF0ZUluc2VydE9wID0gKHVzZXJfbnVtKS0+XG4gICAgICAgICAgY2hhcnMgPSBcIjEyMzQ1Njc4OTBcIlxuXG4gICAgICAgICAgcG9zID0gXy5yYW5kb20gMCwgKHVzZXJzW3VzZXJfbnVtXS52YWwoKS5sZW5ndGgtMSlcbiAgICAgICAgICBsZW5ndGggPSAxICNfLnJhbmRvbSAwLCAxMFxuXG4gICAgICAgICAgbmV4dGNoYXIgPSBjaGFyc1soXy5yYW5kb20gMCwgKGNoYXJzLmxlbmd0aC0xKSldXG5cbiAgICAgICAgICB0ZXh0ID0gXCJcIlxuICAgICAgICAgIF8obGVuZ3RoKS50aW1lcyAoKS0+IHRleHQgKz0gbmV4dGNoYXJcblxuICAgICAgICAgIHVzZXJzW3VzZXJfbnVtXS5pbnNlcnRUZXh0IHBvcywgdGV4dFxuICAgICAgICAgIG51bGxcblxuICAgIGdlbmVyYXRlUmVwbGFjZU9wID0gKHVzZXJfbnVtKS0+XG4gICAgICAgICAgY2hhcnMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCJcbiAgICAgICAgICBsZW5ndGggPSBfLnJhbmRvbSAwLCAxMFxuXG4gICAgICAgICAgbmV4dGNoYXIgPSBjaGFyc1soXy5yYW5kb20gMCwgKGNoYXJzLmxlbmd0aC0xKSldXG5cbiAgICAgICAgICB0ZXh0ID0gXCJcIlxuICAgICAgICAgIF8obGVuZ3RoKS50aW1lcyAoKS0+IHRleHQgKz0gbmV4dGNoYXJcbiAgICAgICAgICB1c2Vyc1t1c2VyX251bV0ucmVwbGFjZVRleHQgdGV4dFxuXG4gICAgZ2VuZXJhdGVEZWxldGVPcCA9ICh1c2VyX251bSktPlxuICAgICAgICBpZiB1c2Vyc1t1c2VyX251bV0udmFsKCkubGVuZ3RoID4gMFxuICAgICAgICAgIHBvcyA9IF8ucmFuZG9tIDAsICh1c2Vyc1t1c2VyX251bV0udmFsKCkubGVuZ3RoLTEpXG4gICAgICAgICAgbGVuZ3RoID0gMSAjIF8ucmFuZG9tIDAsIG90LnZhbCgpLmxlbmd0aCAtIHBvc1xuICAgICAgICAgIG9wczEgPSB1c2Vyc1t1c2VyX251bV0uZGVsZXRlVGV4dCBwb3MsIGxlbmd0aFxuICAgICAgICB1bmRlZmluZWRcblxuICAgIGdlbmVyYXRlUmFuZG9tT3AgPSAodXNlcl9udW0pLT5cbiAgICAgIG9wX2dlbiA9IFtnZW5lcmF0ZURlbGV0ZU9wLCBnZW5lcmF0ZUluc2VydE9wLCBnZW5lcmF0ZVJlcGxhY2VPcF1cbiAgICAgIGkgPSBfLnJhbmRvbSAob3BfZ2VuLmxlbmd0aCAtIDEpXG4gICAgICBvcCA9IG9wX2dlbltpXSh1c2VyX251bSlcblxuICAgIGFwcGx5UmFuZG9tT3AgPSAodXNlcl9udW0pLT5cbiAgICAgIHVzZXIgPSB1c2Vyc1t1c2VyX251bV1cbiAgICAgIHVzZXIuZ2V0Q29ubmVjdG9yKCkuZmx1c2hPbmVSYW5kb20oKVxuXG4gICAgZG9Tb21ldGhpbmcgPSBkbyAoKS0+XG4gICAgICAoKS0+XG4gICAgICAgIHVzZXJfbnVtID0gXy5yYW5kb20gKG51bWJlcl9vZl9lbmdpbmVzLTEpXG4gICAgICAgIGNob2ljZXMgPSBbYXBwbHlSYW5kb21PcCwgZ2VuZXJhdGVSYW5kb21PcF1cbiAgICAgICAgI2lmICh1c2Vyc1t1c2VyX251bV0uYnVmZmVyW3VzZXJfbnVtXS5sZW5ndGggPCBtYXhpbXVtX29wc19wZXJfZW5naW5lKVxuICAgICAgICAjICBjaG9pY2VzID0gY2hvaWNlcy5jb25jYXQgZ2VuZXJhdGVSYW5kb21PcFxuXG4gICAgICAgIGNob2ljZSA9IF8ucmFuZG9tIChjaG9pY2VzLmxlbmd0aC0xKVxuXG4gICAgICAgIGNob2ljZXNbY2hvaWNlXSh1c2VyX251bSlcblxuICAgIGNvbnNvbGUubG9nIFwiXCJcbiAgICBmb3IgdGltZXMgaW4gWzEuLnJlcGVhdF90aGlzXVxuICAgICAgI2NvbnNvbGUubG9nIFwicmVwZWF0ZWRfdGhpcyB4ICN7dGltZXN9IHRpbWVzXCJcbiAgICAgIHVzZXJzID0gW11cbiAgICAgIENvbm5lY3RvciA9IENvbm5lY3Rvcl91bmluaXRpYWxpemVkIHVzZXJzXG4gICAgICBmb3IgaSBpbiBbMC4ubnVtYmVyX29mX2VuZ2luZXNdXG4gICAgICAgIHVzZXJzLnB1c2gobmV3IFlhdHRhIGksIENvbm5lY3RvcilcblxuICAgICAgZm91bmRfZXJyb3IgPSBmYWxzZVxuXG4gICAgICAjdHJ5XG4gICAgICB0aW1lX25vdyA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpXG4gICAgICBmb3IgaSBpbiBbMS4uZG9Tb21ldGhpbmdfYW1vdW50XVxuICAgICAgICBkb1NvbWV0aGluZygpXG5cbiAgICAgIGZvciB1c2VyLHVzZXJfbnVtYmVyIGluIHVzZXJzXG4gICAgICAgIHVzZXIuZ2V0Q29ubmVjdG9yKCkuZmx1c2hBbGwoKVxuXG4gICAgICBAdGltZSArPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gdGltZV9ub3dcblxuICAgICAgbnVtYmVyX29mX2NyZWF0ZWRfb3BlcmF0aW9ucyA9IDBcbiAgICAgIGZvciBpIGluIFswLi4uKHVzZXJzLmxlbmd0aCldXG4gICAgICAgIG51bWJlcl9vZl9jcmVhdGVkX29wZXJhdGlvbnMgKz0gdXNlcnNbaV0uZ2V0Q29ubmVjdG9yKCkuZ2V0T3BzSW5FeGVjdXRpb25PcmRlcigpLmxlbmd0aFxuICAgICAgQG9wcyArPSBudW1iZXJfb2ZfY3JlYXRlZF9vcGVyYXRpb25zKnVzZXJzLmxlbmd0aFxuXG4gICAgICBvcHNfcGVyX21zZWsgPSBNYXRoLmZsb29yKEBvcHMvQHRpbWUpXG4gICAgICBjb25zb2xlLmxvZyBcIiN7dGltZXN9LyN7cmVwZWF0X3RoaXN9OiBFdmVyeSBjb2xsYWJvcmF0b3IgKCN7dXNlcnMubGVuZ3RofSkgYXBwbGllZCAje251bWJlcl9vZl9jcmVhdGVkX29wZXJhdGlvbnN9IG9wcyBpbiBhIGRpZmZlcmVudCBvcmRlci5cIiArIFwiIE92ZXIgYWxsIHdlIGNvbnN1bWVkICN7QG9wc30gb3BlcmF0aW9ucyBpbiAje0B0aW1lLzEwMDB9IHNlY29uZHMgKCN7b3BzX3Blcl9tc2VrfSBvcHMvbXNlaykuXCJcblxuICAgICAgY29uc29sZS5sb2cgdXNlcnNbMF0udmFsKClcbiAgICAgIGZvdW5kX2luY29uc2lzdGVuY3kgPSBmYWxzZVxuICAgICAgZm9yIGkgaW4gWzAuLi4odXNlcnMubGVuZ3RoLTEpXVxuICAgICAgICBpZiAoKHVzZXJzW2ldLnZhbCgpIGlzbnQgdXNlcnNbaSsxXS52YWwoKSkgKSMgYW5kIChudW1iZXJfb2ZfY3JlYXRlZF9vcGVyYXRpb25zIDw9IDYgb3IgdHJ1ZSkpIG9yIGZvdW5kX2Vycm9yXG4gICAgICAgICAgZm91bmRfaW5jb25zaXN0ZW5jeSA9dHJ1ZVxuICAgICAgICAgIHByaW50T3BzSW5FeGVjdXRpb25PcmRlciA9IChvdG51bWJlciwgb3RoZXJvdG51bWJlciktPlxuICAgICAgICAgICAgb3BzID0gdXNlcnNbb3RudW1iZXJdLmdldENvbm5lY3RvcigpLmdldE9wc0luRXhlY3V0aW9uT3JkZXIoKVxuICAgICAgICAgICAgZm9yIHMsaiBpbiBvcHNcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cgXCJvcCN7an0gPSAje0pTT04uc3RyaW5naWZ5IHN9XCJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIFwiXCJcbiAgICAgICAgICAgIHMgPSBcIm9wcyA9IFtcIlxuICAgICAgICAgICAgZm9yIG8saiBpbiBvcHNcbiAgICAgICAgICAgICAgaWYgaiBpc250IDBcbiAgICAgICAgICAgICAgICBzICs9IFwiLCBcIlxuICAgICAgICAgICAgICBzICs9IFwib3Aje2p9XCJcbiAgICAgICAgICAgIHMgKz0gXCJdXCJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIHNcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIFwiQHVzZXJzW0BsYXN0X3VzZXJdLm90LmFwcGx5T3BzIG9wc1wiXG4gICAgICAgICAgICBjb25zb2xlLmxvZyBcImV4cGVjdChAdXNlcnNbQGxhc3RfdXNlcl0udmFsKCkpLnRvLmVxdWFsKFxcXCIje3VzZXJzW290aGVyb3RudW1iZXJdLnZhbCgpfVxcXCIpXCJcbiAgICAgICAgICAgIG9wc1xuICAgICAgICAgIGNvbnNvbGUubG9nIFwiXCJcbiAgICAgICAgICBjb25zb2xlLmxvZyBcIkZvdW5kIGFuIE9UIFB1enpsZSFcIlxuICAgICAgICAgIGNvbnNvbGUubG9nIFwiT1Qgc3RhdGVzOlwiXG4gICAgICAgICAgZm9yIHUsaiBpbiB1c2Vyc1xuICAgICAgICAgICAgY29uc29sZS5sb2cgXCJPVCN7an06IFwiK3UudmFsKClcbiAgICAgICAgICBjb25zb2xlLmxvZyBcIlxcbk9UIGV4ZWN1dGlvbiBvcmRlciAoI3tpfSwje2krMX0pOlwiXG4gICAgICAgICAgcHJpbnRPcHNJbkV4ZWN1dGlvbk9yZGVyIGksIGkrMVxuICAgICAgICAgIGNvbnNvbGUubG9nIFwiXCJcbiAgICAgICAgICBvcHMgPSBwcmludE9wc0luRXhlY3V0aW9uT3JkZXIgaSsxLCBpXG5cbiAgICAgICAgICBjb25zb2xlLmxvZyBcIlwiXG4gICAgICBpZiBmb3VuZF9pbmNvbnNpc3RlbmN5XG4gICAgICAgIHRocm93IG5ldyBFcnJvciBcImR0cm5cIlxuXG4gICAgICAgICAgIyBleHBlY3QodXNlcnNbaV0ub3QudmFsKCkpLnRvLmVxdWFsKHVzZXJzW2krMV0ub3QudmFsKCkpXG5cblxuIyMjXG4iLCJjaGFpICAgICAgPSByZXF1aXJlKCdjaGFpJylcbmV4cGVjdCAgICA9IGNoYWkuZXhwZWN0XG5zaG91bGQgICAgPSBjaGFpLnNob3VsZCgpXG5zaW5vbiAgICAgPSByZXF1aXJlKCdzaW5vbicpXG5zaW5vbkNoYWkgPSByZXF1aXJlKCdzaW5vbi1jaGFpJylcbl8gPSByZXF1aXJlIFwidW5kZXJzY29yZVwiXG5cbmNoYWkudXNlKHNpbm9uQ2hhaSlcblxuWWF0dGEgPSByZXF1aXJlIFwiLi4vbGliL0ZyYW1ld29ya3MvSnNvbllhdHRhLmNvZmZlZVwiXG5Db25uZWN0b3JfdW5pbml0aWFsaXplZCA9IHJlcXVpcmUgXCIuLi9saWIvQ29ubmVjdG9ycy9UZXN0Q29ubmVjdG9yLmNvZmZlZVwiXG5cbmNsYXNzIFRlc3RcbiAgY29uc3RydWN0b3I6ICgpLT5cbiAgICBAbnVtYmVyX29mX3Rlc3RfY2FzZXNfbXVsdGlwbGllciA9IDFcbiAgICBAcmVwZWF0X3RoaXMgPSAxICogQG51bWJlcl9vZl90ZXN0X2Nhc2VzX211bHRpcGxpZXJcbiAgICBAZG9Tb21ldGhpbmdfYW1vdW50ID0gNTAwMCAqIEBudW1iZXJfb2ZfdGVzdF9jYXNlc19tdWx0aXBsaWVyXG4gICAgQG51bWJlcl9vZl9lbmdpbmVzID0gIDEwICsgQG51bWJlcl9vZl90ZXN0X2Nhc2VzX211bHRpcGxpZXIgLSAxXG5cbiAgICBAdGltZSA9IDBcbiAgICBAb3BzID0gMFxuICAgIEB0aW1lX25vdyA9IDBcblxuICAgIEByZWluaXRpYWxpemUoKVxuXG4gIHJlaW5pdGlhbGl6ZTogKCktPlxuXG4gICAgQHVzZXJzID0gW11cbiAgICBAQ29ubmVjdG9yID0gQ29ubmVjdG9yX3VuaW5pdGlhbGl6ZWQgQHVzZXJzXG4gICAgQHVzZXJzLnB1c2gobmV3IFlhdHRhIDAsIEBDb25uZWN0b3IpXG4gICAgQHVzZXJzWzBdLnZhbCgnbmFtZScsXCJpbml0aWFsXCIpXG4gICAgZm9yIGkgaW4gWzEuLi5AbnVtYmVyX29mX2VuZ2luZXNdXG4gICAgICBAdXNlcnMucHVzaChuZXcgWWF0dGEgaSwgQENvbm5lY3RvcilcblxuICBnZXRTb21lVXNlcjogKCktPlxuICAgIGkgPSBfLnJhbmRvbSAwLCAoQHVzZXJzLmxlbmd0aC0xKVxuICAgIEB1c2Vyc1tpXVxuXG4gIGdldFJhbmRvbVRleHQ6ICgpLT5cbiAgICBjaGFycyA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIlxuICAgIGxlbmd0aCA9IF8ucmFuZG9tIDAsIDEwXG4gICAgbmV4dGNoYXIgPSBjaGFyc1soXy5yYW5kb20gMCwgKGNoYXJzLmxlbmd0aC0xKSldXG4gICAgdGV4dCA9IFwiXCJcbiAgICBfKGxlbmd0aCkudGltZXMgKCktPiB0ZXh0ICs9IG5leHRjaGFyXG4gICAgdGV4dFxuXG4gIGdlbmVyYXRlSW5zZXJ0T3A6ICh1c2VyX251bSk9PlxuICAgIHBvcyA9IF8ucmFuZG9tIDAsIChAdXNlcnNbdXNlcl9udW1dLnZhbCgnbmFtZScpLnZhbCgpLmxlbmd0aC0xKVxuICAgIEB1c2Vyc1t1c2VyX251bV0udmFsKCduYW1lJykuaW5zZXJ0VGV4dCBwb3MsIEBnZXRSYW5kb21UZXh0KClcbiAgICBudWxsXG5cbiAgZ2VuZXJhdGVSZXBsYWNlT3A6ICh1c2VyX251bSk9PlxuICAgIEB1c2Vyc1t1c2VyX251bV0udmFsKCduYW1lJykucmVwbGFjZVRleHQgQGdldFJhbmRvbVRleHQoKVxuICAgIG51bGxcblxuICBnZW5lcmF0ZURlbGV0ZU9wOiAodXNlcl9udW0pPT5cbiAgICBpZiBAdXNlcnNbdXNlcl9udW1dLnZhbCgnbmFtZScpLnZhbCgpLmxlbmd0aCA+IDBcbiAgICAgIHBvcyA9IF8ucmFuZG9tIDAsIChAdXNlcnNbdXNlcl9udW1dLnZhbCgnbmFtZScpLnZhbCgpLmxlbmd0aC0xKSAjIFRPRE8hISEhXG4gICAgICBsZW5ndGggPSAxICMgXy5yYW5kb20gMCwgb3QudmFsKCduYW1lJykubGVuZ3RoIC0gcG9zIFRPRE86ISEhXG4gICAgICBvcHMxID0gQHVzZXJzW3VzZXJfbnVtXS52YWwoJ25hbWUnKS5kZWxldGVUZXh0IHBvcywgbGVuZ3RoXG4gICAgdW5kZWZpbmVkXG5cbiAgZ2VuZXJhdGVSYW5kb21PcDogKHVzZXJfbnVtKT0+XG4gICAgb3BfZ2VuID0gW0BnZW5lcmF0ZURlbGV0ZU9wLCBAZ2VuZXJhdGVJbnNlcnRPcCwgQGdlbmVyYXRlUmVwbGFjZU9wXVxuICAgIGkgPSBfLnJhbmRvbSAob3BfZ2VuLmxlbmd0aCAtIDEpXG4gICAgb3AgPSBvcF9nZW5baV0odXNlcl9udW0pXG5cbiAgYXBwbHlSYW5kb21PcDogKHVzZXJfbnVtKT0+XG4gICAgdXNlciA9IEB1c2Vyc1t1c2VyX251bV1cbiAgICB1c2VyLmdldENvbm5lY3RvcigpLmZsdXNoT25lUmFuZG9tKClcblxuICBkb1NvbWV0aGluZzogKCktPlxuICAgIHVzZXJfbnVtID0gXy5yYW5kb20gKEBudW1iZXJfb2ZfZW5naW5lcy0xKVxuICAgIGNob2ljZXMgPSBbQGFwcGx5UmFuZG9tT3AsIEBnZW5lcmF0ZVJhbmRvbU9wXVxuICAgIGNob2ljZSA9IF8ucmFuZG9tIChjaG9pY2VzLmxlbmd0aC0xKVxuICAgIGNob2ljZXNbY2hvaWNlXSh1c2VyX251bSlcblxuICBmbHVzaEFsbDogKCktPlxuICAgIGZvciB1c2VyLHVzZXJfbnVtYmVyIGluIEB1c2Vyc1xuICAgICAgdXNlci5nZXRDb25uZWN0b3IoKS5mbHVzaEFsbCgpXG5cbiAgY29tcGFyZUFsbDogKHRlc3RfbnVtYmVyKS0+XG4gICAgQGZsdXNoQWxsKClcblxuICAgIEB0aW1lICs9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBAdGltZV9ub3dcblxuICAgIG51bWJlcl9vZl9jcmVhdGVkX29wZXJhdGlvbnMgPSAwXG4gICAgZm9yIGkgaW4gWzAuLi4oQHVzZXJzLmxlbmd0aCldXG4gICAgICBudW1iZXJfb2ZfY3JlYXRlZF9vcGVyYXRpb25zICs9IEB1c2Vyc1tpXS5nZXRDb25uZWN0b3IoKS5nZXRPcHNJbkV4ZWN1dGlvbk9yZGVyKCkubGVuZ3RoXG4gICAgQG9wcyArPSBudW1iZXJfb2ZfY3JlYXRlZF9vcGVyYXRpb25zKkB1c2Vycy5sZW5ndGhcblxuICAgIG9wc19wZXJfbXNlayA9IE1hdGguZmxvb3IoQG9wcy9AdGltZSlcbiAgICBpZiB0ZXN0X251bWJlcj9cbiAgICAgIGNvbnNvbGUubG9nIFwiI3t0ZXN0X251bWJlcn0vI3tAcmVwZWF0X3RoaXN9OiBFdmVyeSBjb2xsYWJvcmF0b3IgKCN7QHVzZXJzLmxlbmd0aH0pIGFwcGxpZWQgI3tudW1iZXJfb2ZfY3JlYXRlZF9vcGVyYXRpb25zfSBvcHMgaW4gYSBkaWZmZXJlbnQgb3JkZXIuXCIgKyBcIiBPdmVyIGFsbCB3ZSBjb25zdW1lZCAje0BvcHN9IG9wZXJhdGlvbnMgaW4gI3tAdGltZS8xMDAwfSBzZWNvbmRzICgje29wc19wZXJfbXNla30gb3BzL21zZWspLlwiXG5cbiAgICAjY29uc29sZS5sb2cgdXNlcnNbMF0udmFsKCduYW1lJykudmFsKClcbiAgICBmb3IgaSBpbiBbMC4uLihAdXNlcnMubGVuZ3RoLTEpXVxuICAgICAgaWYgKChAdXNlcnNbaV0udmFsKCduYW1lJykudmFsKCkgaXNudCBAdXNlcnNbaSsxXS52YWwoJ25hbWUnKS52YWwoKSkgKSMgYW5kIChudW1iZXJfb2ZfY3JlYXRlZF9vcGVyYXRpb25zIDw9IDYgb3IgdHJ1ZSkpIG9yIGZvdW5kX2Vycm9yXG5cbiAgICAgICAgcHJpbnRPcHNJbkV4ZWN1dGlvbk9yZGVyID0gKG90bnVtYmVyLCBvdGhlcm90bnVtYmVyKS0+XG4gICAgICAgICAgb3BzID0gQHVzZXJzW290bnVtYmVyXS5nZXRDb25uZWN0b3IoKS5nZXRPcHNJbkV4ZWN1dGlvbk9yZGVyKClcbiAgICAgICAgICBmb3IgcyBpbiBvcHNcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIEpTT04uc3RyaW5naWZ5IHNcbiAgICAgICAgICBjb25zb2xlLmxvZyBcIlwiXG4gICAgICAgICAgcyA9IFwib3BzID0gW1wiXG4gICAgICAgICAgZm9yIG8saiBpbiBvcHNcbiAgICAgICAgICAgIGlmIGogaXNudCAwXG4gICAgICAgICAgICAgIHMgKz0gXCIsIFwiXG4gICAgICAgICAgICBzICs9IFwib3Aje2p9XCJcbiAgICAgICAgICBzICs9IFwiXVwiXG4gICAgICAgICAgY29uc29sZS5sb2cgc1xuICAgICAgICAgIGNvbnNvbGUubG9nIFwiQHVzZXJzW0BsYXN0X3VzZXJdLm90LmFwcGx5T3BzIG9wc1wiXG4gICAgICAgICAgY29uc29sZS5sb2cgXCJleHBlY3QoQHVzZXJzW0BsYXN0X3VzZXJdLm90LnZhbCgnbmFtZScpKS50by5lcXVhbChcXFwiI3t1c2Vyc1tvdGhlcm90bnVtYmVyXS52YWwoJ25hbWUnKX1cXFwiKVwiXG4gICAgICAgICAgb3BzXG4gICAgICAgIGNvbnNvbGUubG9nIFwiXCJcbiAgICAgICAgY29uc29sZS5sb2cgXCJGb3VuZCBhbiBPVCBQdXp6bGUhXCJcbiAgICAgICAgY29uc29sZS5sb2cgXCJPVCBzdGF0ZXM6XCJcbiAgICAgICAgZm9yIHUsaiBpbiB1c2Vyc1xuICAgICAgICAgIGNvbnNvbGUubG9nIFwiT1Qje2p9OiBcIit1LnZhbCgnbmFtZScpXG4gICAgICAgIGNvbnNvbGUubG9nIFwiXFxuT1QgZXhlY3V0aW9uIG9yZGVyICgje2l9LCN7aSsxfSk6XCJcbiAgICAgICAgcHJpbnRPcHNJbkV4ZWN1dGlvbk9yZGVyIGksIGkrMVxuICAgICAgICBjb25zb2xlLmxvZyBcIlwiXG4gICAgICAgIG9wcyA9IHByaW50T3BzSW5FeGVjdXRpb25PcmRlciBpKzEsIGlcblxuICAgICAgICBjb25zb2xlLmxvZyBcIlwiXG5cbiAgcnVuOiAoKS0+XG4gICAgY29uc29sZS5sb2cgJydcbiAgICBmb3IgdGltZXMgaW4gWzEuLkByZXBlYXRfdGhpc11cbiAgICAgIEB0aW1lX25vdyA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpXG4gICAgICBmb3IgaSBpbiBbMS4uQGRvU29tZXRoaW5nX2Ftb3VudF1cbiAgICAgICAgQGRvU29tZXRoaW5nKClcblxuICAgICAgQGNvbXBhcmVBbGwodGltZXMpXG4gICAgICBAcmVpbml0aWFsaXplKClcblxuZGVzY3JpYmUgXCJKc29uWWF0dGFcIiwgLT5cbiAgYmVmb3JlRWFjaCAoZG9uZSktPlxuICAgIEB5VGVzdCA9IG5ldyBUZXN0KClcbiAgICBkb25lKClcblxuICBpdCBcImhhcyBhIEpzb25XcmFwcGVyXCIsIC0+XG4gICAgeSA9IHRoaXMueVRlc3QuZ2V0U29tZVVzZXIoKS5yb290X2VsZW1lbnRcbiAgICB5LnZhbCgneCcsXCJkdHJuXCIsICdpbW11dGFibGUnKVxuICAgIHkudmFsKCdzZXQnLHt4OlwieFwifSwgJ2ltbXV0YWJsZScpXG4gICAgdyA9IHkudmFsdWVcbiAgICB3LnhcbiAgICB3LnNldCA9IHt5OlwiXCJ9XG4gICAgdy54XG4gICAgdy5zZXRcbiAgICB3LnNldC54XG4gICAgZXhwZWN0KHcueCkudG8uZXF1YWwoXCJkdHJuXCIpXG4gICAgZXhwZWN0KHcuc2V0LngpLnRvLmVxdWFsKFwieFwiKVxuXG4gIGl0IFwiY2FuIGhhbmRsZSBjcmVhdG9uIG9mIGNvbXBsZXgganNvblwiLCAtPlxuICAgIEB5VGVzdC5nZXRTb21lVXNlcigpLnZhbCgneCcsIHsnYSc6J2InfSlcbiAgICBAeVRlc3QuZ2V0U29tZVVzZXIoKS52YWwoJ2EnLCB7J2EnOntxOlwiZHRybmR0cnRkcm50ZHJucnRkbnJ0ZG5ydGRucnRkbnJkbnJkdFwifX0pXG4gICAgQHlUZXN0LmdldFNvbWVVc2VyKCkudmFsKCdiJywgeydhJzp7fX0pXG4gICAgQHlUZXN0LmdldFNvbWVVc2VyKCkudmFsKCdjJywgeydhJzonYyd9KVxuICAgIEB5VGVzdC5nZXRTb21lVXNlcigpLnZhbCgnYycsIHsnYSc6J2InfSlcbiAgICBAeVRlc3QuY29tcGFyZUFsbCgpXG4gICAgQHlUZXN0LmdldFNvbWVVc2VyKCkudmFsdWUuYS5hLnEuaW5zZXJ0VGV4dCgwLCdBQUEnKVxuICAgIEB5VGVzdC5jb21wYXJlQWxsKClcbiAgICBleHBlY3QoQHlUZXN0LmdldFNvbWVVc2VyKCkudmFsdWUuYS5hLnEudmFsKCkpLnRvLmVxdWFsKFwiQUFBZHRybmR0cnRkcm50ZHJucnRkbnJ0ZG5ydGRucnRkbnJkbnJkdFwiKVxuXG5cbiAgaXQgXCJoYW5kbGVzIHNvbWUgaW1tdXRhYmxlIHRlc3RzXCIsIC0+XG4gICAgQHlUZXN0LmdldFNvbWVVc2VyKCkudmFsKCdzdHJpbmcnLCBcInRleHRcIiwgXCJpbW11dGFibGVcIilcbiAgICBAeVRlc3QuZ2V0U29tZVVzZXIoKS52YWwoJ251bWJlcicsIDQsIFwiaW1tdXRhYmxlXCIpXG4gICAgQHlUZXN0LmdldFNvbWVVc2VyKCkudmFsKCdvYmplY3QnLCB7cTpcInJyXCJ9LCBcImltbXV0YWJsZVwiKVxuICAgIEB5VGVzdC5jb21wYXJlQWxsKClcbiAgICBleHBlY3QoQHlUZXN0LmdldFNvbWVVc2VyKCkudmFsKCdzdHJpbmcnKSkudG8uZXF1YWwgXCJ0ZXh0XCJcbiAgICBleHBlY3QoQHlUZXN0LmdldFNvbWVVc2VyKCkudmFsKCdudW1iZXInKSkudG8uZXF1YWwgNFxuICAgIGV4cGVjdChAeVRlc3QuZ2V0U29tZVVzZXIoKS52YWwoJ29iamVjdCcpLnZhbCgncScpKS50by5lcXVhbCBcInJyXCJcblxuICBpdCBcImNhbiBoYW5kbGUgbWFueSBlbmdpbmVzLCBtYW55IG9wZXJhdGlvbnMsIGNvbmN1cnJlbnRseSAocmFuZG9tKVwiLCAtPlxuICAgIEB5VGVzdC5ydW4oKVxuXG5cblxuXG4iXX0= diff --git a/dest/browser/Yatta_test.min.js b/dest/browser/Yatta_test.min.js new file mode 100644 index 00000000..968137c4 --- /dev/null +++ b/dest/browser/Yatta_test.min.js @@ -0,0 +1,52 @@ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;;){if(this.origin===b)break;if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;;){if(null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d===this.next_cl)break;if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;;){if(b=b.next_cl,b.isDeleted()||(a-=1),0===a)break;if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!")}return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a]; +if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f))return b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f))return b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f))return S.write(a,b,c,d,23,4),c+4}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f))return S.write(a,b,c,d,52,8),c+8}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b) +},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a +}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=1*this.number_of_test_cases_multiplier,this.doSomething_amount=5e3*this.number_of_test_cases_multiplier,this.number_of_engines=10+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+d+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"c"}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll(),this.yTest.getSomeUser().value.a.a.q.insertText(0,"AAA"),this.yTest.compareAll(),f(this.yTest.getSomeUser().value.a.a.q.val()).to.equal("AAAdtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt")}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message"); +return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a +}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]"); +var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)]; +return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=1*this.number_of_test_cases_multiplier,this.doSomething_amount=5e3*this.number_of_test_cases_multiplier,this.number_of_engines=10+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+d+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"c"}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll(),this.yTest.getSomeUser().value.a.a.q.insertText(0,"AAA"),this.yTest.compareAll(),f(this.yTest.getSomeUser().value.a.a.q.val()).to.equal("AAAdtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt")}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function c(a,b,d){function e(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=b[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,c,a,b,d)}return b[g].exports}for(var f="function"==typeof require&&require,g=0;g0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g; +return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1; +return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1; +return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments) +};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=1*this.number_of_test_cases_multiplier,this.doSomething_amount=5e3*this.number_of_test_cases_multiplier,this.number_of_engines=10+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j; +for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"c"}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll(),this.yTest.getSomeUser().value.a.a.q.insertText(0,"AAA"),this.yTest.compareAll(),f(this.yTest.getSomeUser().value.a.a.q.val()).to.equal("AAAdtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt")}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function d(a,b,c){function e(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=b[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,d,a,b,c)}return b[g].exports}for(var f="function"==typeof require&&require,g=0;g0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a) +})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this; +if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b; +throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0; +var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=1*this.number_of_test_cases_multiplier,this.doSomething_amount=5e3*this.number_of_test_cases_multiplier,this.number_of_engines=10+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"c"}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll(),this.yTest.getSomeUser().value.a.a.q.insertText(0,"AAA"),this.yTest.compareAll(),f(this.yTest.getSomeUser().value.a.a.q.val()).to.equal("AAAdtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt")}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function e(a,b,c){function d(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=b[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return d(c?c:b)},j,j.exports,e,a,b,c)}return b[g].exports}for(var f="function"==typeof require&&require,g=0;g0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]); +return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c) +}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8 +}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number"); +return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1; +var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=10*this.number_of_test_cases_multiplier,this.doSomething_amount=200*this.number_of_test_cases_multiplier,this.number_of_engines=12+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"c"}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll(),this.yTest.getSomeUser().value.a.a.q.insertText(0,"AAA"),this.yTest.compareAll(),f(this.yTest.getSomeUser().value.a.a.q.val()).to.equal("AAAdtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt")}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function f(a,b,c){function d(g,h){if(!b[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(e)return e(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=b[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return d(c?c:b)},j,j.exports,f,a,b,c)}return b[g].exports}for(var e="function"==typeof require&&require,g=0;g0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a +},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e]) +}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped"); +else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=10*this.number_of_test_cases_multiplier,this.doSomething_amount=200*this.number_of_test_cases_multiplier,this.number_of_engines=12+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize() +}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"c"}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll(),console.log(this.yTest.getSomeUser().value.a.a.q.val())}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function g(a,b,c){function d(f,h){if(!b[f]){if(!a[f]){var i="function"==typeof require&&require;if(!h&&i)return i(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var j=b[f]={exports:{}};a[f][0].call(j.exports,function(b){var c=a[f][1][b];return d(c?c:b)},j,j.exports,g,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;f0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d) +}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value") +}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number"); +return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon) +}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=10*this.number_of_test_cases_multiplier,this.doSomething_amount=200*this.number_of_test_cases_multiplier,this.number_of_engines=12+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"c"}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll(),console.log(this.yTest.getSomeUser().value.a.a.q)}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function h(a,b,c){function d(f,g){if(!b[f]){if(!a[f]){var i="function"==typeof require&&require;if(!g&&i)return i(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var j=b[f]={exports:{}};a[f][0].call(j.exports,function(b){var c=a[f][1][b];return d(c?c:b)},j,j.exports,h,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;f0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId() +},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b) +},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1); +g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy"); +if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c +}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=10*this.number_of_test_cases_multiplier,this.doSomething_amount=200*this.number_of_test_cases_multiplier,this.number_of_engines=12+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll()}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function i(a,b,c){function d(f,g){if(!b[f]){if(!a[f]){var h="function"==typeof require&&require;if(!g&&h)return h(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var j=b[f]={exports:{}};a[f][0].call(j.exports,function(b){var c=a[f][1][b];return d(c?c:b)},j,j.exports,i,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;f0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1 +},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b) +},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1") +})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee") +},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=10*this.number_of_test_cases_multiplier,this.doSomething_amount=200*this.number_of_test_cases_multiplier,this.number_of_engines=12+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll()}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function j(a,b,c){function d(f,g){if(!b[f]){if(!a[f]){var h="function"==typeof require&&require;if(!g&&h)return h(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var i=b[f]={exports:{}};a[f][0].call(i.exports,function(b){var c=a[f][1][b];return d(c?c:b)},i,i.exports,j,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;f0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c)},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":11}],11:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":12,"./chai/config":13,"./chai/core/assertions":14,"./chai/interface/assert":15,"./chai/interface/expect":16,"./chai/interface/should":17,"./chai/utils":28,"assertion-error":37}],12:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":13}],13:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],14:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length"); +var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],15:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],16:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],17:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],18:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":13,"./flag":21,"./transferFlags":35}],19:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":13,"./flag":21}],20:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],21:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],22:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],23:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],24:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":21,"./getActual":22,"./inspect":29,"./objDisplay":30}],25:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],26:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],27:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],28:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":18,"./addMethod":19,"./addProperty":20,"./flag":21,"./getActual":22,"./getMessage":24,"./getName":25,"./getPathValue":26,"./inspect":29,"./objDisplay":30,"./overwriteChainableMethod":31,"./overwriteMethod":32,"./overwriteProperty":33,"./test":34,"./transferFlags":35,"./type":36,"deep-eql":38}],29:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":23,"./getName":25,"./getProperties":27}],30:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":13,"./inspect":29}],31:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],32:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],33:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],34:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":21}],35:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],36:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],37:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:42,"type-detect":40}],40:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":41}],41:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],42:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length +}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a};var V=/[^+\/0-9A-z]/g},{"base64-js":43,ieee754:44}],43:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],44:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],45:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],46:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],47:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],48:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("JkpR2F"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":47,JkpR2F:46,inherits:45}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:48}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b +},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("JkpR2F"))},{"../sinon":50,JkpR2F:46}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a)};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:10,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=10*this.number_of_test_cases_multiplier,this.doSomething_amount=200*this.number_of_test_cases_multiplier,this.number_of_engines=12+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll()}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:10,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]),!function k(a,b,c){function d(f,g){if(!b[f]){if(!a[f]){var h="function"==typeof require&&require;if(!g&&h)return h(f,!0);if(e)return e(f,!0);throw new Error("Cannot find module '"+f+"'")}var i=b[f]={exports:{}};a[f][0].call(i.exports,function(b){var c=a[f][1][b];return d(c?c:b)},i,i.exports,k,a,b,c)}return b[f].exports}for(var e="function"==typeof require&&require,f=0;f0?a[0].getRootElement().getUid():void 0},b.prototype.send=function(b){var c,d,e,f;if(b.uid.creator===this.HB.getUserId()&&"string"!=typeof b.uid.op_number){for(f=[],d=0,e=a.length;e>d;d++)c=a[d],f.push(c.getUserId()!==this.HB.getUserId()?c.getConnector().receive(b):void 0);return f}},b.prototype.receive=function(a){var b,c;return null==(b=this.unexecuted)[c=a.creator]&&(b[c]=[]),this.unexecuted[a.creator].push(a)},b.prototype.flushOne=function(a){var b;return(null!=(b=this.unexecuted[a])?b.length:void 0)>0?this.engine.applyOp(this.unexecuted[a].shift()):void 0},b.prototype.flushOneRandom=function(){return this.flushOne(c.random(0,a.length-1))},b.prototype.flushAll=function(){var a,b,c;c=this.unexecuted;for(a in c)b=c[a],this.engine.applyOps(b);return this.unexecuted={}},b.prototype.sync=function(){throw new Error("Can't use this a.t.m.")},b}()}},{underscore:65}],2:[function(a,b){var c;c=function(){function a(a,b){this.HB=a,this.parser=b,this.unprocessed_ops=[]}return a.prototype.parseOperation=function(a){var b;if(b=this.parser[a.type],null!=b)return b(a);throw new Error("You forgot to specify a parser for type "+a.type+". The message is "+JSON.stringify(a)+".")},a.prototype.applyOps=function(a){var b,c,d,e,f,g,h,i;for(c=[],d=0,g=a.length;g>d;d++)b=a[d],c.push(this.parseOperation(b));for(e=0,h=c.length;h>e;e++)b=c[e],this.HB.addOperation(b);for(f=0,i=c.length;i>f;f++)b=c[f],b.execute()||this.unprocessed_ops.push(b);return this.tryUnprocessed()},a.prototype.applyOp=function(a){var b;return b=this.parseOperation(a),this.HB.addOperation(b),b.execute()||this.unprocessed_ops.push(b),this.tryUnprocessed()},a.prototype.tryUnprocessed=function(){var a,b,c,d,e,f,g;for(g=[];;){for(a=this.unprocessed_ops.length,c=[],f=this.unprocessed_ops,d=0,e=f.length;e>d;d++)b=f[d],b.execute()||c.push(b);if(this.unprocessed_ops=c,this.unprocessed_ops.length===a)break;g.push(void 0)}return g},a}(),b.exports=c},{}],3:[function(a,b){var c,d,e,f;f=a("../Types/JsonTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),g=f(this.HB),this.engine=new c(this.HB,g.parser),this.connector=new b(this.engine,this.HB,g.execution_listener,this),h=this.connector.getRootElement(),null==h?(e=new g.types.JsonType(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=e):this.root_element=this.HB.getOperation(h)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.setMutableDefault=function(a){return this.root_element.setMutableDefault(a)},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(a,b,c){return this.root_element.val(a,b,c) +},Object.defineProperty(a.prototype,"value",{get:function(){return this.root_element.value},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),a}(),"undefined"!=typeof window&&null!==window&&(window.JsonYatta=e),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/JsonTypes.coffee":7}],4:[function(a,b){var c,d,e,f;f=a("../Types/TextTypes.coffee"),d=a("../HistoryBuffer.coffee"),c=a("../Engine.coffee"),e=function(){function a(a,b){var e,g,h;this.HB=new d(a),h=f(this.HB),this.engine=new c(this.HB,h.parser),this.connector=new b(this.engine,this.HB,h.execution_listener),g=this.connector.getRootElement(),null==g?(e=new h.types.Word(this.HB.getNextOperationIdentifier()),this.HB.addOperation(e),e.execute(),this.root_element=this.HB.addOperation(new h.types.ReplaceManager(e,this.HB.getNextOperationIdentifier())).execute()):this.root_element=this.HB.getOperation(g)}return a.prototype.getRootElement=function(){return this.root_element},a.prototype.getEngine=function(){return this.engine},a.prototype.getConnector=function(){return this.connector},a.prototype.getHistoryBuffer=function(){return this.HB},a.prototype.getUserId=function(){return this.HB.getUserId()},a.prototype.val=function(){return this.root_element.val().val()},a.prototype.insertText=function(a,b){return this.root_element.val().insertText(a,b)},a.prototype.deleteText=function(a,b){return this.root_element.val().deleteText(a,b)},a.prototype.replaceText=function(a){return this.root_element.val().replaceText(a)},a}(),b.exports=e},{"../Engine.coffee":2,"../HistoryBuffer.coffee":5,"../Types/TextTypes.coffee":9}],5:[function(a,b){var c;c=function(){function a(a){this.user_id=a,this.operation_counter={},this.buffer={},this.change_listeners=[]}return a.prototype.getUserId=function(){return this.user_id},a.prototype.getOperationCounter=function(){var a,b,c,d;b={},d=this.operation_counter;for(c in d)a=d[c],b[c]=a;return b},a.prototype._encode=function(){var a,b,c,d,e,f;a=[],f=this.buffer;for(d in f){e=f[d];for(c in e)b=e[c],isNaN(parseInt(c))||a.push(b._encode())}return a},a.prototype.getNextOperationIdentifier=function(a){var b;return null==a&&(a=this.user_id),null==this.operation_counter[a]&&(this.operation_counter[a]=0),b={creator:a,op_number:this.operation_counter[a]},this.operation_counter[a]++,b},a.prototype.getOperation=function(a){var b;if(a instanceof Object)return null!=(b=this.buffer[a.creator])?b[a.op_number]:void 0;if(null!=a)throw new Error("This type of uid is not defined!")},a.prototype.addOperation=function(a){if(null==this.buffer[a.creator]&&(this.buffer[a.creator]={}),null==this.operation_counter[a.creator]&&(this.operation_counter[a.creator]=0),null!=this.buffer[a.creator][a.op_number])throw new Error("You must not overwrite operations!");return this.buffer[a.creator][a.op_number]=a,"number"==typeof a.op_number&&a.creator!==this.getUserId()&&this.operation_counter[a.creator]++,a},a}(),b.exports=c},{}],6:[function(a,b){var c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};b.exports=function(a){var b,c,e,f,g,h,i;return i={},h=[],g=function(){function b(b){null==b&&(b=a.getNextOperationIdentifier()),this.creator=b.creator,this.op_number=b.op_number}return b.prototype.getUid=function(){return{creator:this.creator,op_number:this.op_number}},b.prototype.execute=function(){var a,b,c;for(this.is_executed=!0,b=0,c=h.length;c>b;b++)(a=h[b])(this._encode());return this},b.prototype.saveOperation=function(a,b){return null!=(null!=b?b.execute:void 0)?this[a]=b:null!=b?(null==this.unchecked&&(this.unchecked={}),this.unchecked[a]=b):void 0},b.prototype.validateSavedOperations=function(){var b,c,d,e,f,g;f={},e=this,g=this.unchecked;for(b in g)d=g[b],c=a.getOperation(d),c?this[b]=c:(f[b]=d,e=!1);return delete this.unchecked,e||(this.unchecked=f),e},b}(),b=function(a){function b(a,c){this.saveOperation("deletes",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype._encode=function(){return{type:"Delete",uid:this.getUid(),deletes:this.deletes.getUid()}},b.prototype.execute=function(){return this.validateSavedOperations()?(this.deletes.applyDelete(this),b.__super__.execute.apply(this,arguments),this):!1},b}(g),i.Delete=function(a){var c,d;return d=a.uid,c=a.deletes,new b(d,c)},f=function(a){function b(a,c,d,e){this.saveOperation("prev_cl",c),this.saveOperation("next_cl",d),null!=e?this.saveOperation("origin",e):this.saveOperation("origin",c),b.__super__.constructor.call(this,a)}return d(b,a),b.prototype.applyDelete=function(a){return null==this.deleted_by&&(this.deleted_by=[]),this.deleted_by.push(a)},b.prototype.isDeleted=function(){var a;return(null!=(a=this.deleted_by)?a.length:void 0)>0},b.prototype.getDistanceToOrigin=function(){var a,b;for(a=0,b=this.prev_cl;this.origin!==b;){if(a++,this===this.prev_cl)throw new Error("this should not happen ;) ");b=b.prev_cl}return a},b.prototype.update_sl=function(){var a;return a=this.prev_cl,update("prev_cl","prev_sl"),update("next_cl","prev_sl")},b.prototype.execute=function(){var a,c,d,e,f;if(null!=this.is_executed)return this;if(this.validateSavedOperations()){if((null!=(e=this.prev_cl)?e.validateSavedOperations():void 0)&&(null!=(f=this.next_cl)?f.validateSavedOperations():void 0)&&this.prev_cl.next_cl!==this){for(a=0,d=this.prev_cl.next_cl,c=0;null==d&&(console.log(JSON.stringify(this.prev_cl.getUid())),console.log(JSON.stringify(this.next_cl.getUid()))),d!==this.next_cl;){if(d.getDistanceToOrigin()===c)d.creatorb;b++)(a=h[b])(this._encode());return this}return!1},b.prototype._encode=function(){var a,b;return{type:"Delimiter",uid:this.getUid(),prev:null!=(a=this.prev_cl)?a.getUid():void 0,next:null!=(b=this.next_cl)?b.getUid():void 0}},b}(f),i.Delimiter=function(a){var b,d,e;return e=a.uid,d=a.prev,b=a.next,new c(e,d,b)},{types:{Delete:b,Insert:f,Delimiter:c,Operation:g,ImmutableObject:e},parser:i,execution_listener:h}}},{}],7:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./TextTypes.coffee"),b.exports=function(a){var b,d,f,g,h;return g=c(a),h=g.types,f=g.parser,d=function(a){var c;return new(c=function(){function a(c){var e,f,g,i;i=c.map,g=function(e,f){return Object.defineProperty(a.prototype,e,{get:function(){var a;return a=f.val(),a instanceof b?d(a):a instanceof h.ImmutableObject?a.val():a},set:function(a){var b,d,f,g;if(a.constructor==={}.constructor){f=c.val(e),g=[];for(b in a)d=a[b],g.push(f.val(b,d,"immutable"));return g}return c.val(e,a,"immutable")},enumerable:!0,configurable:!1})};for(e in i)f=i[e],g(e,f)}return a}())(a)},b=function(b){function c(a,b,d){var e,f;if(c.__super__.constructor.call(this,a),null!=b){if("object"!=typeof b)throw new Error("The initial value of JsonTypes must be of type Object! (current type: "+typeof b+")");for(e in b)f=b[e],this.val(e,f,d)}}return e(c,b),c.prototype.mutable_default=!0,c.prototype.setMutableDefault=function(a){if(a===!0||"mutable"===a)c.prototype.mutable_default=!0;else{if(a!==!1&&"immutable"!==a)throw new Error('Set mutable either "mutable" or "immutable"!');c.prototype.mutable_default=!1}return"OK"},c.prototype.val=function(b,d,e){var f,g,i,j,k;if("object"==typeof b){for(i in b)g=b[i],this.val(i,g,d);return this}if(null!=b&&null!=d){if(e=null!=e?e===!0||"mutable"===e?!0:!1:this.mutable_default,"function"==typeof d)return this;if(e&&"number"!=typeof d||d.constructor===Object){if("string"==typeof d)return k=a.addOperation(new h.Word(a.getNextOperationIdentifier(),d)).execute(),c.__super__.val.call(this,b,k);if(d.constructor===Object)return f=a.addOperation(new c(a.getNextOperationIdentifier(),d,e)).execute(),c.__super__.val.call(this,b,f);throw new Error("You must not set "+typeof d+"-types in collaborative Json-objects!")}return j=a.addOperation(new h.ImmutableObject(void 0,d)).execute(),c.__super__.val.call(this,b,j)}return c.__super__.val.call(this,b,d)},Object.defineProperty(c.prototype,"value",{get:function(){return d(this)},set:function(a){var b,c,d;if(a.constructor==={}.constructor){d=[];for(b in a)c=a[b],d.push(this.val(b,c,"immutable"));return d}throw new Error("You must only set Object values!")}}),c.prototype._encode=function(){return{type:"JsonType",uid:this.getUid()}},c}(h.MapManager),f.JsonType=function(a){var c;return c=a.uid,new b(c)},h.JsonType=b,g}},{"./TextTypes.coffee":9}],8:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./BasicTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i,j,k;return i=c(a),k=i.types,j=i.parser,f=function(c){function d(a){this.map={},d.__super__.constructor.call(this,a)}return e(d,c),d.prototype.val=function(c,e){var f,g,h,i,j;if(null!=e)return null==this.map[c]&&a.addOperation(new b(a.getNextOperationIdentifier(),this,c)).execute(),this.map[c].replace(e),this;if(null!=c)return g=null!=(i=this.map[c])?i.val():void 0,g instanceof k.ImmutableObject?g.val():g;h={},j=this.map;for(c in j)f=j[c],g=f.val(),(g instanceof k.ImmutableObject||g instanceof d)&&(g=g.val()),h[c]=g;return h},d}(k.Operation),b=function(b){function c(a,b,d){this.name=d,this.saveOperation("map_manager",b),c.__super__.constructor.call(this,a)}return e(c,b),c.prototype.execute=function(){var b,d,e,f,h;return this.validateSavedOperations()?(h=this.map_manager.getUid(),h.op_number="_"+h.op_number+"_RM_"+this.name,null==a.getOperation(h)&&(e=this.map_manager.getUid(),e.op_number="_"+e.op_number+"_RM_"+this.name+"_beginning",f=this.map_manager.getUid(),f.op_number="_"+f.op_number+"_RM_"+this.name+"_end",b=a.addOperation(new k.Delimiter(e,void 0,f)),d=a.addOperation(new k.Delimiter(f,b,void 0)).execute(),b.execute(),this.map_manager.map[this.name]=a.addOperation(new g(void 0,h,b,d)).execute()),c.__super__.execute.apply(this,arguments)):!1},c.prototype._encode=function(){return{type:"AddName",uid:this.getUid(),map_manager:this.map_manager.getUid(),name:this.name}},c}(k.Operation),j.AddName=function(a){var c,d,e;return c=a.map_manager,e=a.uid,d=a.name,new b(e,c,d)},d=function(b){function c(b,d,e,f,g,h){null!=d&&null!=e?(this.saveOperation("beginning",d),this.saveOperation("end",e)):(this.beginning=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),void 0,void 0)),this.end=a.addOperation(new k.Delimiter(a.getNextOperationIdentifier(),this.beginning,void 0)),this.beginning.next_cl=this.end,this.beginning.execute(),this.end.execute()),c.__super__.constructor.call(this,b,f,g,h)}return e(c,b),c.prototype.getLastOperation=function(){return this.end.prev_cl},c.prototype.getFirstOperation=function(){return this.beginning.next_cl},c.prototype.toArray=function(){var a,b;for(a=this.beginning.next_cl,b=[];a!==this.end;)b.push(a),a=a.next_cl;return b},c.prototype.getOperationByPosition=function(a){var b;if(b=this.beginning.next_cl,a>0)for(;b=b.next_cl,b.isDeleted()||(a-=1),0!==a;)if(b instanceof k.Delimiter)throw new Error("position parameter exceeded the length of the document!");return b},c}(k.Insert),g=function(b){function c(a,b,d,e,f,g,h){c.__super__.constructor.call(this,b,d,e,f,g,h),null!=a&&this.replace(a)}return e(c,b),c.prototype.replace=function(b){var c,d;return c=this.getLastOperation(),d=new h(b,this,a.getNextOperationIdentifier(),c,c.next_cl),a.addOperation(d).execute()},c.prototype.val=function(){var a;if(a=this.getLastOperation(),a instanceof k.Delimiter)throw new Error("dtrn");return a.val()},c.prototype._encode=function(){var a;return a={type:"ReplaceManager",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&null!=this.next_cl&&(a.prev=this.prev_cl.getUid(),a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},c}(d),j.ReplaceManager=function(a){var b,c,d,e,f,h,i;return c=a.content,i=a.uid,h=a.prev,e=a.next,f=a.origin,b=a.beginning,d=a.end,new g(c,i,b,d,h,e,f)},h=function(a){function b(a,c,d,e,f,g){if(this.saveOperation("content",a),this.saveOperation("parent",c),null==e||null==f||null==a)throw new Error("You must define content, prev, and next for Replaceable-types!");b.__super__.constructor.call(this,d,e,f,g)}return e(b,a),b.prototype.val=function(){return this.content},b.prototype.replace=function(a){return this.parent.replace(a)},b.prototype.execute=function(){var a;return this.validateSavedOperations()?("function"==typeof(a=this.content).setReplaceManager&&a.setReplaceManager(this.parent),b.__super__.execute.apply(this,arguments),this):!1},b.prototype._encode=function(){var a;return a={type:"Replaceable",content:this.content.getUid(),ReplaceManager:this.parent.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid(),uid:this.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(k.Insert),j.Replaceable=function(a){var b,c,d,e,f,g;return b=a.content,e=a.ReplaceManager,g=a.uid,f=a.prev,c=a.next,d=a.origin,new h(b,e,g,f,c,d)},k.ListManager=d,k.MapManager=f,k.ReplaceManager=g,k.Replaceable=h,i}},{"./BasicTypes.coffee":6}],9:[function(a,b){var c,d={}.hasOwnProperty,e=function(a,b){function c(){this.constructor=a}for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};c=a("./StructuredTypes.coffee"),b.exports=function(a){var b,d,f,g,h,i;return h=c(a),i=h.types,g=h.parser,b=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return e(b,a),b}(i.Delete),g.TextDelete=g.Delete,d=function(a){function b(a,c,d,e,f){if(this.content=a,null==d||null==e)throw new Error("You must define prev, and next for TextInsert-types!");b.__super__.constructor.call(this,c,d,e,f)}return e(b,a),b.prototype.getLength=function(){return this.isDeleted()?0:this.content.length},b.prototype.val=function(){return this.isDeleted()?"":this.content},b.prototype._encode=function(){var a;return a={type:"TextInsert",content:this.content,uid:this.getUid(),prev:this.prev_cl.getUid(),next:this.next_cl.getUid()},null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},b}(i.Insert),g.TextInsert=function(a){var b,c,e,f,g;return b=a.content,g=a.uid,f=a.prev,c=a.next,e=a.origin,new d(b,g,f,c,e)},f=function(c){function f(a,b,c,d,e,g,h){f.__super__.constructor.call(this,a,c,d,e,g,h),null!=b&&this.insertText(0,b)}return e(f,c),f.prototype.insertText=function(b,c){var e,f,g,h,i,j;for(f=this.getOperationByPosition(b),j=[],h=0,i=c.length;i>h;h++)e=c[h],g=new d(e,a.getNextOperationIdentifier(),f.prev_cl,f),j.push(a.addOperation(g).execute());return j},f.prototype.deleteText=function(c,d){var e,f,g,h,j;for(g=this.getOperationByPosition(c),j=[],f=h=0;d>=0?d>h:h>d;f=d>=0?++h:--h){for(e=a.addOperation(new b(a.getNextOperationIdentifier(),g)).execute(),g=g.next_cl;g.isDeleted();){if(g instanceof i.Delimiter)throw new Error("You can't delete more than there is..");g=g.next_cl}j.push(e._encode())}return j},f.prototype.replaceText=function(b){var c;if(null!=this.replace_manager)return c=a.addOperation(new f(a.getNextOperationIdentifier())).execute(),c.insertText(0,b),this.replace_manager.replace(c);throw new Error("This type is currently not maintained by a ReplaceManager!")},f.prototype.val=function(){var a,b;return a=function(){var a,c,d,e;for(d=this.toArray(),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(null!=b.val?b.val():"");return e}.call(this),a.join("")},f.prototype.setReplaceManager=function(a){return this.saveOperation("replace_manager",a),this.validateSavedOperations},f.prototype._encode=function(){var a;return a={type:"Word",uid:this.getUid(),beginning:this.beginning.getUid(),end:this.end.getUid()},null!=this.prev_cl&&(a.prev=this.prev_cl.getUid()),null!=this.next_cl&&(a.next=this.next_cl.getUid()),null!=this.origin&&this.origin!==this.prev_cl&&(a.origin=this.origin.getUid()),a},f}(i.ListManager),g.Word=function(a){var b,c,d,e,g,h;return h=a.uid,b=a.beginning,c=a.end,g=a.prev,d=a.next,e=a.origin,new f(h,void 0,b,c,g,d,e)},i.TextInsert=d,i.TextDelete=b,i.Word=f,h}},{"./StructuredTypes.coffee":8}],10:[function(a,b,c){function d(a,b,c){if(!(this instanceof d))return new d(a,b,c);var e,f=typeof a;if("number"===f)e=a>0?a>>>0:0;else if("string"===f)"base64"===b&&(a=C(a)),e=d.byteLength(a,b);else{if("object"!==f||null===a)throw new Error("First argument needs to be a number, array or string.");"Buffer"===a.type&&E(a.data)&&(a=a.data),e=+a.length>0?Math.floor(+a.length):0}var g;T?g=d._augment(new Uint8Array(e)):(g=this,g.length=e,g._isBuffer=!0);var h;if(T&&"number"==typeof a.byteLength)g._set(a);else if(F(a))if(d.isBuffer(a))for(h=0;e>h;h++)g[h]=a.readUInt8(h);else for(h=0;e>h;h++)g[h]=(a[h]%256+256)%256;else if("string"===f)g.write(a,0,b);else if("number"===f&&!T&&!c)for(h=0;e>h;h++)g[h]=0;return g}function e(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d),d>e&&(d=e)):d=e;var f=b.length;Q(f%2===0,"Invalid hex string"),d>f/2&&(d=f/2);for(var g=0;d>g;g++){var h=parseInt(b.substr(2*g,2),16);Q(!isNaN(h),"Invalid hex string"),a[c+g]=h}return g}function f(a,b,c,d){var e=L(H(b),a,c,d);return e}function g(a,b,c,d){var e=L(I(b),a,c,d);return e}function h(a,b,c,d){return g(a,b,c,d)}function i(a,b,c,d){var e=L(K(b),a,c,d);return e}function j(a,b,c,d){var e=L(J(b),a,c,d);return e}function k(a,b,c){return R.fromByteArray(0===b&&c===a.length?a:a.slice(b,c))}function l(a,b,c){var d="",e="";c=Math.min(a.length,c);for(var f=b;c>f;f++)a[f]<=127?(d+=M(e)+String.fromCharCode(a[f]),e=""):e+="%"+a[f].toString(16);return d+M(e)}function m(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;c>e;e++)d+=String.fromCharCode(a[e]);return d}function n(a,b,c){return m(a,b,c)}function o(a,b,c){var d=a.length;(!b||0>b)&&(b=0),(!c||0>c||c>d)&&(c=d);for(var e="",f=b;c>f;f++)e+=G(a[f]);return e}function p(a,b,c){for(var d=a.slice(b,c),e="",f=0;f=e)){var f;return c?(f=a[b],e>b+1&&(f|=a[b+1]<<8)):(f=a[b]<<8,e>b+1&&(f|=a[b+1])),f}}function r(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f;return c?(e>b+2&&(f=a[b+2]<<16),e>b+1&&(f|=a[b+1]<<8),f|=a[b],e>b+3&&(f+=a[b+3]<<24>>>0)):(e>b+1&&(f=a[b+1]<<16),e>b+2&&(f|=a[b+2]<<8),e>b+3&&(f|=a[b+3]),f+=a[b]<<24>>>0),f}}function s(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+1=e)){var f=q(a,b,c,!0),g=32768&f;return g?-1*(65535-f+1):f}}function t(a,b,c,d){d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(void 0!==b&&null!==b,"missing offset"),Q(b+3=e)){var f=r(a,b,c,!0),g=2147483648&f;return g?-1*(4294967295-f+1):f}}function u(a,b,c,d){return d||(Q("boolean"==typeof c,"missing or invalid endian"),Q(b+3=f)){for(var g=0,h=Math.min(f-c,2);h>g;g++)a[c+g]=(b&255<<8*(d?g:1-g))>>>8*(d?g:1-g);return c+2}}function x(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f)){for(var g=0,h=Math.min(f-c,4);h>g;g++)a[c+g]=b>>>8*(d?g:3-g)&255;return c+4}}function y(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+1=f?void 0:(b>=0?w(a,b,c,d,e):w(a,65535+b+1,c,d,e),c+2)}function z(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(b>=0?x(a,b,c,d,e):x(a,4294967295+b+1,c,d,e),c+4)}function A(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+3=f?void 0:(S.write(a,b,c,d,23,4),c+4)}function B(a,b,c,d,e){e||(Q(void 0!==b&&null!==b,"missing value"),Q("boolean"==typeof d,"missing or invalid endian"),Q(void 0!==c&&null!==c,"missing offset"),Q(c+7=f?void 0:(S.write(a,b,c,d,52,8),c+8)}function C(a){for(a=D(a).replace(V,"");a.length%4!==0;)a+="=";return a}function D(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function E(a){return(Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)})(a)}function F(a){return E(a)||d.isBuffer(a)||a&&"object"==typeof a&&"number"==typeof a.length}function G(a){return 16>a?"0"+a.toString(16):a.toString(16)}function H(a){for(var b=[],c=0;c=d)b.push(d);else{var e=c;d>=55296&&57343>=d&&c++;for(var f=encodeURIComponent(a.slice(e,c+1)).substr(1).split("%"),g=0;g>8,d=b%256,e.push(d),e.push(c);return e}function K(a){return R.toByteArray(a)}function L(a,b,c,d){for(var e=0;d>e&&!(e+c>=b.length||e>=a.length);e++)b[e+c]=a[e];return e}function M(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}function N(a,b){Q("number"==typeof a,"cannot write a non-number as a number"),Q(a>=0,"specified a negative value for writing an unsigned value"),Q(b>=a,"value is larger than maximum value for type"),Q(Math.floor(a)===a,"value has a fractional component")}function O(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value"),Q(Math.floor(a)===a,"value has a fractional component")}function P(a,b,c){Q("number"==typeof a,"cannot write a non-number as a number"),Q(b>=a,"value larger than maximum allowed value"),Q(a>=c,"value smaller than minimum allowed value")}function Q(a,b){if(!a)throw new Error(b||"Failed assertion")}var R=a("base64-js"),S=a("ieee754");c.Buffer=d,c.SlowBuffer=d,c.INSPECT_MAX_BYTES=50,d.poolSize=8192;var T=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);return b.foo=function(){return 42},42===b.foo()&&"function"==typeof b.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(c){return!1}}();d.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},d.isBuffer=function(a){return!(null==a||!a._isBuffer)},d.byteLength=function(a,b){var c;switch(a=a.toString(),b||"utf8"){case"hex":c=a.length/2;break;case"utf8":case"utf-8":c=H(a).length;break;case"ascii":case"binary":case"raw":c=a.length;break;case"base64":c=K(a).length;break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":c=2*a.length;break;default:throw new Error("Unknown encoding")}return c},d.concat=function(a,b){if(Q(E(a),"Usage: Buffer.concat(list[, length])"),0===a.length)return new d(0);if(1===a.length)return a[0];var c;if(void 0===b)for(b=0,c=0;cf&&a[f]===b[f];f++);return f!==g&&(c=a[f],e=b[f]),e>c?-1:c>e?1:0},d.prototype.write=function(a,b,c,d){if(isFinite(b))isFinite(c)||(d=c,c=void 0);else{var k=d;d=b,b=c,c=k}b=Number(b)||0;var l=this.length-b;c?(c=Number(c),c>l&&(c=l)):c=l,d=String(d||"utf8").toLowerCase();var m;switch(d){case"hex":m=e(this,a,b,c);break;case"utf8":case"utf-8":m=f(this,a,b,c);break;case"ascii":m=g(this,a,b,c);break;case"binary":m=h(this,a,b,c);break;case"base64":m=i(this,a,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":m=j(this,a,b,c);break;default:throw new Error("Unknown encoding")}return m},d.prototype.toString=function(a,b,c){var d=this;if(a=String(a||"utf8").toLowerCase(),b=Number(b)||0,c=void 0===c?d.length:Number(c),c===b)return"";var e;switch(a){case"hex":e=o(d,b,c);break;case"utf8":case"utf-8":e=l(d,b,c);break;case"ascii":e=m(d,b,c);break;case"binary":e=n(d,b,c);break;case"base64":e=k(d,b,c);break;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":e=p(d,b,c);break;default:throw new Error("Unknown encoding")}return e},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},d.prototype.equals=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),0===d.compare(this,a)},d.prototype.compare=function(a){return Q(d.isBuffer(a),"Argument must be a Buffer"),d.compare(this,a)},d.prototype.copy=function(a,b,c,d){var e=this;if(c||(c=0),d||0===d||(d=this.length),b||(b=0),d!==c&&0!==a.length&&0!==e.length){Q(d>=c,"sourceEnd < sourceStart"),Q(b>=0&&b=0&&c=0&&d<=e.length,"sourceEnd out of bounds"),d>this.length&&(d=this.length),a.length-bf||!T)for(var g=0;f>g;g++)a[g+b]=this[g+c];else a._set(this.subarray(c,c+f),b)}},d.prototype.slice=function(a,b){var c=this.length;if(a=~~a,b=void 0===b?c:~~b,0>a?(a+=c,0>a&&(a=0)):a>c&&(a=c),0>b?(b+=c,0>b&&(b=0)):b>c&&(b=c),a>b&&(b=a),T)return d._augment(this.subarray(a,b));for(var e=b-a,f=new d(e,void 0,!0),g=0;e>g;g++)f[g]=this[g+a];return f},d.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},d.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},d.prototype.readUInt8=function(a,b){return b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length?void 0:this[a]},d.prototype.readUInt16LE=function(a,b){return q(this,a,!0,b)},d.prototype.readUInt16BE=function(a,b){return q(this,a,!1,b)},d.prototype.readUInt32LE=function(a,b){return r(this,a,!0,b)},d.prototype.readUInt32BE=function(a,b){return r(this,a,!1,b)},d.prototype.readInt8=function(a,b){if(b||(Q(void 0!==a&&null!==a,"missing offset"),Q(a=this.length)){var c=128&this[a];return c?-1*(255-this[a]+1):this[a]}},d.prototype.readInt16LE=function(a,b){return s(this,a,!0,b)},d.prototype.readInt16BE=function(a,b){return s(this,a,!1,b)},d.prototype.readInt32LE=function(a,b){return t(this,a,!0,b)},d.prototype.readInt32BE=function(a,b){return t(this,a,!1,b)},d.prototype.readFloatLE=function(a,b){return u(this,a,!0,b)},d.prototype.readFloatBE=function(a,b){return u(this,a,!1,b)},d.prototype.readDoubleLE=function(a,b){return v(this,a,!0,b)},d.prototype.readDoubleBE=function(a,b){return v(this,a,!1,b)},d.prototype.writeUInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(this[b]=a,b+1)},d.prototype.writeUInt16LE=function(a,b,c){return w(this,a,b,!0,c)},d.prototype.writeUInt16BE=function(a,b,c){return w(this,a,b,!1,c)},d.prototype.writeUInt32LE=function(a,b,c){return x(this,a,b,!0,c)},d.prototype.writeUInt32BE=function(a,b,c){return x(this,a,b,!1,c)},d.prototype.writeInt8=function(a,b,c){return c||(Q(void 0!==a&&null!==a,"missing value"),Q(void 0!==b&&null!==b,"missing offset"),Q(b=this.length?void 0:(a>=0?this.writeUInt8(a,b,c):this.writeUInt8(255+a+1,b,c),b+1)},d.prototype.writeInt16LE=function(a,b,c){return y(this,a,b,!0,c)},d.prototype.writeInt16BE=function(a,b,c){return y(this,a,b,!1,c)},d.prototype.writeInt32LE=function(a,b,c){return z(this,a,b,!0,c)},d.prototype.writeInt32BE=function(a,b,c){return z(this,a,b,!1,c)},d.prototype.writeFloatLE=function(a,b,c){return A(this,a,b,!0,c)},d.prototype.writeFloatBE=function(a,b,c){return A(this,a,b,!1,c)},d.prototype.writeDoubleLE=function(a,b,c){return B(this,a,b,!0,c)},d.prototype.writeDoubleBE=function(a,b,c){return B(this,a,b,!1,c)},d.prototype.fill=function(a,b,c){if(a||(a=0),b||(b=0),c||(c=this.length),Q(c>=b,"end < start"),c!==b&&0!==this.length){Q(b>=0&&b=0&&c<=this.length,"end out of bounds");var d;if("number"==typeof a)for(d=b;c>d;d++)this[d]=a;else{var e=H(a.toString()),f=e.length;for(d=b;c>d;d++)this[d]=e[d%f]}return this}},d.prototype.inspect=function(){for(var a=[],b=this.length,d=0;b>d;d++)if(a[d]=G(this[d]),d===c.INSPECT_MAX_BYTES){a[d+1]="...";break}return""},d.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(T)return new d(this).buffer;for(var a=new Uint8Array(this.length),b=0,c=a.length;c>b;b+=1)a[b]=this[b];return a.buffer}throw new Error("Buffer.toArrayBuffer not supported in this browser")};var U=d.prototype;d._augment=function(a){return a._isBuffer=!0,a._get=a.get,a._set=a.set,a.get=U.get,a.set=U.set,a.write=U.write,a.toString=U.toString,a.toLocaleString=U.toString,a.toJSON=U.toJSON,a.equals=U.equals,a.compare=U.compare,a.copy=U.copy,a.slice=U.slice,a.readUInt8=U.readUInt8,a.readUInt16LE=U.readUInt16LE,a.readUInt16BE=U.readUInt16BE,a.readUInt32LE=U.readUInt32LE,a.readUInt32BE=U.readUInt32BE,a.readInt8=U.readInt8,a.readInt16LE=U.readInt16LE,a.readInt16BE=U.readInt16BE,a.readInt32LE=U.readInt32LE,a.readInt32BE=U.readInt32BE,a.readFloatLE=U.readFloatLE,a.readFloatBE=U.readFloatBE,a.readDoubleLE=U.readDoubleLE,a.readDoubleBE=U.readDoubleBE,a.writeUInt8=U.writeUInt8,a.writeUInt16LE=U.writeUInt16LE,a.writeUInt16BE=U.writeUInt16BE,a.writeUInt32LE=U.writeUInt32LE,a.writeUInt32BE=U.writeUInt32BE,a.writeInt8=U.writeInt8,a.writeInt16LE=U.writeInt16LE,a.writeInt16BE=U.writeInt16BE,a.writeInt32LE=U.writeInt32LE,a.writeInt32BE=U.writeInt32BE,a.writeFloatLE=U.writeFloatLE,a.writeFloatBE=U.writeFloatBE,a.writeDoubleLE=U.writeDoubleLE,a.writeDoubleBE=U.writeDoubleBE,a.fill=U.fill,a.inspect=U.inspect,a.toArrayBuffer=U.toArrayBuffer,a +};var V=/[^+\/0-9A-z]/g},{"base64-js":11,ieee754:12}],11:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(a){"use strict";function b(a){var b=a.charCodeAt(0);return b===g?62:b===h?63:i>b?-1:i+10>b?b-i+26+26:k+26>b?b-k:j+26>b?b-j+26:void 0}function c(a){function c(a){j[l++]=a}var d,e,g,h,i,j;if(a.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new f(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,e=0;g>d;d+=4,e+=3)h=b(a.charAt(d))<<18|b(a.charAt(d+1))<<12|b(a.charAt(d+2))<<6|b(a.charAt(d+3)),c((16711680&h)>>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function e(a){function b(a){return d.charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var e,f,g,h=a.length%3,i="";for(e=0,g=a.length-h;g>e;e+=3)f=(a[e]<<16)+(a[e+1]<<8)+a[e+2],i+=c(f);switch(h){case 1:f=a[a.length-1],i+=b(f>>2),i+=b(f<<4&63),i+="==";break;case 2:f=(a[a.length-2]<<8)+a[a.length-1],i+=b(f>>10),i+=b(f>>4&63),i+=b(f<<2&63),i+="="}return i}var f="undefined"!=typeof Uint8Array?Uint8Array:Array,g="+".charCodeAt(0),h="/".charCodeAt(0),i="0".charCodeAt(0),j="a".charCodeAt(0),k="A".charCodeAt(0);a.toByteArray=c,a.fromByteArray=e}("undefined"==typeof c?this.base64js={}:c)},{}],12:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],13:[function(a,b){b.exports="function"==typeof Object.create?function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],14:[function(a,b){function c(){}var d=b.exports={};d.nextTick=function(){var a="undefined"!=typeof window&&window.setImmediate,b="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(a)return function(a){return window.setImmediate(a)};if(b){var c=[];return window.addEventListener("message",function(a){var b=a.source;if((b===window||null===b)&&"process-tick"===a.data&&(a.stopPropagation(),c.length>0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),d.title="browser",d.browser=!0,d.env={},d.argv=[],d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.binding=function(){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(){throw new Error("process.chdir is not supported")}},{}],15:[function(a,b){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],16:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a){return a}function h(a){var b={};return a.forEach(function(a){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){var v=b.name?": "+b.name:"";r=" [Function"+v+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(0>d)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var x;return x=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(x,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(F(b,String(g))?m(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return" "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||"undefined"==typeof a}function C(a){return Object.prototype.toString.call(a)}function D(a){return 10>a?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];f>c;h=d[++c])g+=q(h)||!x(h)?" "+h:" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(b.noDeprecation===!0)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.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]},e.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("FWaASH"),"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":15,FWaASH:14,inherits:13}],17:[function(a,b){b.exports=a("./lib/chai")},{"./lib/chai":18}],18:[function(a,b,c){var d=[],c=b.exports={};c.version="1.9.1",c.AssertionError=a("assertion-error");var e=a("./chai/utils");c.use=function(a){return~d.indexOf(a)||(a(this,e),d.push(a)),this};var f=a("./chai/config");c.config=f;var g=a("./chai/assertion");c.use(g);var h=a("./chai/core/assertions");c.use(h);var i=a("./chai/interface/expect");c.use(i);var j=a("./chai/interface/should");c.use(j);var k=a("./chai/interface/assert");c.use(k)},{"./chai/assertion":19,"./chai/config":20,"./chai/core/assertions":21,"./chai/interface/assert":22,"./chai/interface/expect":23,"./chai/interface/should":24,"./chai/utils":35,"assertion-error":44}],19:[function(a,b){var c=a("./config");b.exports=function(a,b){function d(a,b,c){f(this,"ssfi",c||arguments.callee),f(this,"object",a),f(this,"message",b)}var e=a.AssertionError,f=b.flag;a.Assertion=d,Object.defineProperty(d,"includeStack",{get:function(){return console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack},set:function(a){console.warn("Assertion.includeStack is deprecated, use chai.config.includeStack instead."),c.includeStack=a}}),Object.defineProperty(d,"showDiff",{get:function(){return console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff},set:function(a){console.warn("Assertion.showDiff is deprecated, use chai.config.showDiff instead."),c.showDiff=a}}),d.addProperty=function(a,c){b.addProperty(this.prototype,a,c)},d.addMethod=function(a,c){b.addMethod(this.prototype,a,c)},d.addChainableMethod=function(a,c,d){b.addChainableMethod(this.prototype,a,c,d)},d.overwriteProperty=function(a,c){b.overwriteProperty(this.prototype,a,c)},d.overwriteMethod=function(a,c){b.overwriteMethod(this.prototype,a,c)},d.overwriteChainableMethod=function(a,c,d){b.overwriteChainableMethod(this.prototype,a,c,d)},d.prototype.assert=function(a,d,g,h,i,j){var k=b.test(this,arguments);if(!0!==j&&(j=!1),!0!==c.showDiff&&(j=!1),!k){var d=b.getMessage(this,arguments),l=b.getActual(this,arguments);throw new e(d,{actual:l,expected:h,showDiff:j},c.includeStack?this.assert:f(this,"ssfi"))}},Object.defineProperty(d.prototype,"_obj",{get:function(){return f(this,"object")},set:function(a){f(this,"object",a)}})}},{"./config":20}],20:[function(a,b){b.exports={includeStack:!1,showDiff:!0,truncateThreshold:40}},{}],21:[function(a,b){b.exports=function(a,b){function c(a,c){c&&u(this,"message",c),a=a.toLowerCase();var d=u(this,"object"),e=~["a","e","i","o","u"].indexOf(a.charAt(0))?"an ":"a ";this.assert(a===b.type(d),"expected #{this} to be "+e+a,"expected #{this} not to be "+e+a)}function d(){u(this,"contains",!0)}function e(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=!1;if("array"===b.type(d)&&"object"===b.type(a)){for(var f in d)if(b.eql(d[f],a)){e=!0;break}}else if("object"===b.type(a)){if(!u(this,"negate")){for(var g in a)new t(d).property(g,a[g]);return}var h={};for(var g in a)h[g]=d[g];e=b.eql(h,a)}else e=d&&~d.indexOf(a);this.assert(e,"expected #{this} to include "+b.inspect(a),"expected #{this} to not include "+b.inspect(a))}function f(){var a=u(this,"object"),b=Object.prototype.toString.call(a);this.assert("[object Arguments]"===b,"expected #{this} to be arguments but got "+b,"expected #{this} to not be arguments")}function g(a,b){b&&u(this,"message",b);var c=u(this,"object");return u(this,"deep")?this.eql(a):void this.assert(a===c,"expected #{this} to equal #{exp}","expected #{this} to not equal #{exp}",a,this._obj,!0)}function h(a,c){c&&u(this,"message",c),this.assert(b.eql(a,u(this,"object")),"expected #{this} to deeply equal #{exp}","expected #{this} to not deeply equal #{exp}",a,this._obj,!0)}function i(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>a,"expected #{this} to have a length above #{exp} but got #{act}","expected #{this} to not have a length above #{exp}",a,d)}else this.assert(c>a,"expected #{this} to be above "+a,"expected #{this} to be at most "+a)}function j(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(d>=a,"expected #{this} to have a length at least #{exp} but got #{act}","expected #{this} to have a length below #{exp}",a,d)}else this.assert(c>=a,"expected #{this} to be at least "+a,"expected #{this} to be below "+a)}function k(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>d,"expected #{this} to have a length below #{exp} but got #{act}","expected #{this} to not have a length below #{exp}",a,d)}else this.assert(a>c,"expected #{this} to be below "+a,"expected #{this} to be at least "+a)}function l(a,b){b&&u(this,"message",b);var c=u(this,"object");if(u(this,"doLength")){new t(c,b).to.have.property("length");var d=c.length;this.assert(a>=d,"expected #{this} to have a length at most #{exp} but got #{act}","expected #{this} to have a length above #{exp}",a,d)}else this.assert(a>=c,"expected #{this} to be at most "+a,"expected #{this} to be above "+a)}function m(a,c){c&&u(this,"message",c);var d=b.getName(a);this.assert(u(this,"object")instanceof a,"expected #{this} to be an instance of "+d,"expected #{this} to not be an instance of "+d)}function n(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(d.hasOwnProperty(a),"expected #{this} to have own property "+b.inspect(a),"expected #{this} to not have own property "+b.inspect(a))}function o(){u(this,"doLength",!0)}function p(a,b){b&&u(this,"message",b);var c=u(this,"object");new t(c,b).to.have.property("length");var d=c.length;this.assert(d==a,"expected #{this} to have a length of #{exp} but got #{act}","expected #{this} to not have a length of #{act}",a,d)}function q(a){var c,d=u(this,"object"),e=!0;if(a=a instanceof Array?a:Array.prototype.slice.call(arguments),!a.length)throw new Error("keys required");var f=Object.keys(d),g=a.length;if(e=a.every(function(a){return~f.indexOf(a)}),u(this,"negate")||u(this,"contains")||(e=e&&a.length==f.length),g>1){a=a.map(function(a){return b.inspect(a)});var h=a.pop();c=a.join(", ")+", and "+h}else c=b.inspect(a[0]);c=(g>1?"keys ":"key ")+c,c=(u(this,"contains")?"contain ":"have ")+c,this.assert(e,"expected #{this} to "+c,"expected #{this} to not "+c)}function r(a,c,d){d&&u(this,"message",d);var e=u(this,"object");new t(e,d).is.a("function");var f=!1,g=null,h=null,i=null;0===arguments.length?(c=null,a=null):a&&(a instanceof RegExp||"string"==typeof a)?(c=a,a=null):a&&a instanceof Error?(g=a,a=null,c=null):"function"==typeof a?(h=a.prototype.name||a.name,"Error"===h&&a!==Error&&(h=(new a).name)):a=null;try{e()}catch(j){if(g)return this.assert(j===g,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp}",g instanceof Error?g.toString():g,j instanceof Error?j.toString():j),u(this,"object",j),this;if(a&&(this.assert(j instanceof a,"expected #{this} to throw #{exp} but #{act} was thrown","expected #{this} to not throw #{exp} but #{act} was thrown",h,j instanceof Error?j.toString():j),!c))return u(this,"object",j),this;var k="object"===b.type(j)&&"message"in j?j.message:""+j;if(null!=k&&c&&c instanceof RegExp)return this.assert(c.exec(k),"expected #{this} to throw error matching #{exp} but got #{act}","expected #{this} to throw error not matching #{exp}",c,k),u(this,"object",j),this;if(null!=k&&c&&"string"==typeof c)return this.assert(~k.indexOf(c),"expected #{this} to throw error including #{exp} but got #{act}","expected #{this} to throw error not including #{act}",c,k),u(this,"object",j),this;f=!0,i=j}var l="",m=null!==h?h:g?"#{exp}":"an error";f&&(l=" but #{act} was thrown"),this.assert(f===!0,"expected #{this} to throw "+m+l,"expected #{this} to not throw "+m+l,g instanceof Error?g.toString():g,i instanceof Error?i.toString():i),u(this,"object",i)}function s(a,b,c){return a.every(function(a){return c?b.some(function(b){return c(a,b)}):-1!==b.indexOf(a)})}var t=a.Assertion,u=(Object.prototype.toString,b.flag);["to","be","been","is","and","has","have","with","that","at","of","same"].forEach(function(a){t.addProperty(a,function(){return this})}),t.addProperty("not",function(){u(this,"negate",!0)}),t.addProperty("deep",function(){u(this,"deep",!0)}),t.addChainableMethod("an",c),t.addChainableMethod("a",c),t.addChainableMethod("include",e,d),t.addChainableMethod("contain",e,d),t.addProperty("ok",function(){this.assert(u(this,"object"),"expected #{this} to be truthy","expected #{this} to be falsy")}),t.addProperty("true",function(){this.assert(!0===u(this,"object"),"expected #{this} to be true","expected #{this} to be false",this.negate?!1:!0)}),t.addProperty("false",function(){this.assert(!1===u(this,"object"),"expected #{this} to be false","expected #{this} to be true",this.negate?!0:!1)}),t.addProperty("null",function(){this.assert(null===u(this,"object"),"expected #{this} to be null","expected #{this} not to be null")}),t.addProperty("undefined",function(){this.assert(void 0===u(this,"object"),"expected #{this} to be undefined","expected #{this} not to be undefined")}),t.addProperty("exist",function(){this.assert(null!=u(this,"object"),"expected #{this} to exist","expected #{this} to not exist")}),t.addProperty("empty",function(){var a=u(this,"object"),b=a;Array.isArray(a)||"string"==typeof object?b=a.length:"object"==typeof a&&(b=Object.keys(a).length),this.assert(!b,"expected #{this} to be empty","expected #{this} not to be empty")}),t.addProperty("arguments",f),t.addProperty("Arguments",f),t.addMethod("equal",g),t.addMethod("equals",g),t.addMethod("eq",g),t.addMethod("eql",h),t.addMethod("eqls",h),t.addMethod("above",i),t.addMethod("gt",i),t.addMethod("greaterThan",i),t.addMethod("least",j),t.addMethod("gte",j),t.addMethod("below",k),t.addMethod("lt",k),t.addMethod("lessThan",k),t.addMethod("most",l),t.addMethod("lte",l),t.addMethod("within",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object"),e=a+".."+b;if(u(this,"doLength")){new t(d,c).to.have.property("length");var f=d.length;this.assert(f>=a&&b>=f,"expected #{this} to have a length within "+e,"expected #{this} to not have a length within "+e)}else this.assert(d>=a&&b>=d,"expected #{this} to be within "+e,"expected #{this} to not be within "+e)}),t.addMethod("instanceof",m),t.addMethod("instanceOf",m),t.addMethod("property",function(a,c,d){d&&u(this,"message",d);var e=u(this,"deep")?"deep property ":"property ",f=u(this,"negate"),g=u(this,"object"),h=u(this,"deep")?b.getPathValue(a,g):g[a];if(f&&void 0!==c){if(void 0===h)throw d=null!=d?d+": ":"",new Error(d+b.inspect(g)+" has no "+e+b.inspect(a))}else this.assert(void 0!==h,"expected #{this} to have a "+e+b.inspect(a),"expected #{this} to not have "+e+b.inspect(a));void 0!==c&&this.assert(c===h,"expected #{this} to have a "+e+b.inspect(a)+" of #{exp}, but got #{act}","expected #{this} to not have a "+e+b.inspect(a)+" of #{act}",c,h),u(this,"object",h)}),t.addMethod("ownProperty",n),t.addMethod("haveOwnProperty",n),t.addChainableMethod("length",p,o),t.addMethod("lengthOf",p,o),t.addMethod("match",function(a,b){b&&u(this,"message",b);var c=u(this,"object");this.assert(a.exec(c),"expected #{this} to match "+a,"expected #{this} not to match "+a)}),t.addMethod("string",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d,c).is.a("string"),this.assert(~d.indexOf(a),"expected #{this} to contain "+b.inspect(a),"expected #{this} to not contain "+b.inspect(a))}),t.addMethod("keys",q),t.addMethod("key",q),t.addMethod("throw",r),t.addMethod("throws",r),t.addMethod("Throw",r),t.addMethod("respondTo",function(a,c){c&&u(this,"message",c);var d=u(this,"object"),e=u(this,"itself"),f="function"!==b.type(d)||e?d[a]:d.prototype[a];this.assert("function"==typeof f,"expected #{this} to respond to "+b.inspect(a),"expected #{this} to not respond to "+b.inspect(a))}),t.addProperty("itself",function(){u(this,"itself",!0)}),t.addMethod("satisfy",function(a,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(a(d),"expected #{this} to satisfy "+b.objDisplay(a),"expected #{this} to not satisfy"+b.objDisplay(a),this.negate?!1:!0,a(d))}),t.addMethod("closeTo",function(a,b,c){c&&u(this,"message",c);var d=u(this,"object");this.assert(Math.abs(d-a)<=b,"expected #{this} to be close to "+a+" +/- "+b,"expected #{this} not to be close to "+a+" +/- "+b)}),t.addMethod("members",function(a,c){c&&u(this,"message",c);var d=u(this,"object");new t(d).to.be.an("array"),new t(a).to.be.an("array");var e=u(this,"deep")?b.eql:void 0;return u(this,"contains")?this.assert(s(a,d,e),"expected #{this} to be a superset of #{act}","expected #{this} to not be a superset of #{act}",d,a):void this.assert(s(d,a,e)&&s(a,d,e),"expected #{this} to have the same members as #{act}","expected #{this} to not have the same members as #{act}",d,a)})}},{}],22:[function(require,module,exports){module.exports=function(chai,util){var Assertion=chai.Assertion,flag=util.flag,assert=chai.assert=function(a,b){var c=new Assertion(null,null,chai.assert);c.assert(a,b,"[ negation message unavailable ]")};assert.fail=function(a,b,c,d){throw c=c||"assert.fail()",new chai.AssertionError(c,{actual:a,expected:b,operator:d},assert.fail)},assert.ok=function(a,b){new Assertion(a,b).is.ok},assert.notOk=function(a,b){new Assertion(a,b).is.not.ok},assert.equal=function(a,b,c){var d=new Assertion(a,c,assert.equal);d.assert(b==flag(d,"object"),"expected #{this} to equal #{exp}","expected #{this} to not equal #{act}",b,a)},assert.notEqual=function(a,b,c){var d=new Assertion(a,c,assert.notEqual);d.assert(b!=flag(d,"object"),"expected #{this} to not equal #{exp}","expected #{this} to equal #{act}",b,a)},assert.strictEqual=function(a,b,c){new Assertion(a,c).to.equal(b)},assert.notStrictEqual=function(a,b,c){new Assertion(a,c).to.not.equal(b)},assert.deepEqual=function(a,b,c){new Assertion(a,c).to.eql(b)},assert.notDeepEqual=function(a,b,c){new Assertion(a,c).to.not.eql(b)},assert.isTrue=function(a,b){new Assertion(a,b).is["true"]},assert.isFalse=function(a,b){new Assertion(a,b).is["false"]},assert.isNull=function(a,b){new Assertion(a,b).to.equal(null)},assert.isNotNull=function(a,b){new Assertion(a,b).to.not.equal(null)},assert.isUndefined=function(a,b){new Assertion(a,b).to.equal(void 0)},assert.isDefined=function(a,b){new Assertion(a,b).to.not.equal(void 0)},assert.isFunction=function(a,b){new Assertion(a,b).to.be.a("function")},assert.isNotFunction=function(a,b){new Assertion(a,b).to.not.be.a("function")},assert.isObject=function(a,b){new Assertion(a,b).to.be.a("object")},assert.isNotObject=function(a,b){new Assertion(a,b).to.not.be.a("object")},assert.isArray=function(a,b){new Assertion(a,b).to.be.an("array")},assert.isNotArray=function(a,b){new Assertion(a,b).to.not.be.an("array")},assert.isString=function(a,b){new Assertion(a,b).to.be.a("string")},assert.isNotString=function(a,b){new Assertion(a,b).to.not.be.a("string")},assert.isNumber=function(a,b){new Assertion(a,b).to.be.a("number")},assert.isNotNumber=function(a,b){new Assertion(a,b).to.not.be.a("number")},assert.isBoolean=function(a,b){new Assertion(a,b).to.be.a("boolean")},assert.isNotBoolean=function(a,b){new Assertion(a,b).to.not.be.a("boolean")},assert.typeOf=function(a,b,c){new Assertion(a,c).to.be.a(b)},assert.notTypeOf=function(a,b,c){new Assertion(a,c).to.not.be.a(b)},assert.instanceOf=function(a,b,c){new Assertion(a,c).to.be.instanceOf(b)},assert.notInstanceOf=function(a,b,c){new Assertion(a,c).to.not.be.instanceOf(b)},assert.include=function(a,b,c){new Assertion(a,c,assert.include).include(b)},assert.notInclude=function(a,b,c){new Assertion(a,c,assert.notInclude).not.include(b)},assert.match=function(a,b,c){new Assertion(a,c).to.match(b)},assert.notMatch=function(a,b,c){new Assertion(a,c).to.not.match(b)},assert.property=function(a,b,c){new Assertion(a,c).to.have.property(b)},assert.notProperty=function(a,b,c){new Assertion(a,c).to.not.have.property(b)},assert.deepProperty=function(a,b,c){new Assertion(a,c).to.have.deep.property(b)},assert.notDeepProperty=function(a,b,c){new Assertion(a,c).to.not.have.deep.property(b)},assert.propertyVal=function(a,b,c,d){new Assertion(a,d).to.have.property(b,c)},assert.propertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.property(b,c)},assert.deepPropertyVal=function(a,b,c,d){new Assertion(a,d).to.have.deep.property(b,c)},assert.deepPropertyNotVal=function(a,b,c,d){new Assertion(a,d).to.not.have.deep.property(b,c)},assert.lengthOf=function(a,b,c){new Assertion(a,c).to.have.length(b)},assert.Throw=function(a,b,c,d){("string"==typeof b||b instanceof RegExp)&&(c=b,b=null);var e=new Assertion(a,d).to.Throw(b,c);return flag(e,"object")},assert.doesNotThrow=function(a,b,c){"string"==typeof b&&(c=b,b=null),new Assertion(a,c).to.not.Throw(b)},assert.operator=function(val,operator,val2,msg){if(!~["==","===",">",">=","<","<=","!=","!=="].indexOf(operator))throw new Error('Invalid operator "'+operator+'"');var test=new Assertion(eval(val+operator+val2),msg);test.assert(!0===flag(test,"object"),"expected "+util.inspect(val)+" to be "+operator+" "+util.inspect(val2),"expected "+util.inspect(val)+" to not be "+operator+" "+util.inspect(val2))},assert.closeTo=function(a,b,c,d){new Assertion(a,d).to.be.closeTo(b,c)},assert.sameMembers=function(a,b,c){new Assertion(a,c).to.have.same.members(b)},assert.includeMembers=function(a,b,c){new Assertion(a,c).to.include.members(b)},assert.ifError=function(a,b){new Assertion(a,b).to.not.be.ok},function a(b,c){return assert[c]=assert[b],a}("Throw","throw")("Throw","throws")}},{}],23:[function(a,b){b.exports=function(a){a.expect=function(b,c){return new a.Assertion(b,c)}}},{}],24:[function(a,b){b.exports=function(a){function b(){function a(){return this instanceof String||this instanceof Number?new c(this.constructor(this),null,a):this instanceof Boolean?new c(1==this,null,a):new c(this,null,a)}function b(a){Object.defineProperty(this,"should",{value:a,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(Object.prototype,"should",{set:b,get:a,configurable:!0});var d={};return d.equal=function(a,b,d){new c(a,d).to.equal(b)},d.Throw=function(a,b,d,e){new c(a,e).to.Throw(b,d)},d.exist=function(a,b){new c(a,b).to.exist},d.not={},d.not.equal=function(a,b,d){new c(a,d).to.not.equal(b)},d.not.Throw=function(a,b,d,e){new c(a,e).to.not.Throw(b,d)},d.not.exist=function(a,b){new c(a,b).to.not.exist},d["throw"]=d.Throw,d.not["throw"]=d.not.Throw,d}var c=a.Assertion;a.should=b,a.Should=b}},{}],25:[function(a,b){var c=a("./transferFlags"),d=a("./flag"),e=a("../config"),f="__proto__"in Object,g=/^(?:length|name|arguments|caller)$/,h=Function.prototype.call,i=Function.prototype.apply;b.exports=function(a,b,j,k){"function"!=typeof k&&(k=function(){});var l={method:j,chainingBehavior:k};a.__methods||(a.__methods={}),a.__methods[b]=l,Object.defineProperty(a,b,{get:function(){l.chainingBehavior.call(this);var b=function m(){var a=d(this,"ssfi");a&&e.includeStack===!1&&d(this,"ssfi",m);var b=l.method.apply(this,arguments);return void 0===b?this:b};if(f){var j=b.__proto__=Object.create(this);j.call=h,j.apply=i}else{var k=Object.getOwnPropertyNames(a);k.forEach(function(c){if(!g.test(c)){var d=Object.getOwnPropertyDescriptor(a,c);Object.defineProperty(b,c,d)}})}return c(this,b),b},configurable:!0})}},{"../config":20,"./flag":28,"./transferFlags":42}],26:[function(a,b){var c=a("../config"),d=a("./flag");b.exports=function(a,b,e){a[b]=function(){var f=d(this,"ssfi");f&&c.includeStack===!1&&d(this,"ssfi",a[b]);var g=e.apply(this,arguments);return void 0===g?this:g}}},{"../config":20,"./flag":28}],27:[function(a,b){b.exports=function(a,b,c){Object.defineProperty(a,b,{get:function(){var a=c.call(this);return void 0===a?this:a},configurable:!0})}},{}],28:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));return 3!==arguments.length?d[b]:void(d[b]=c)}},{}],29:[function(a,b){b.exports=function(a,b){return b.length>4?b[4]:a._obj}},{}],30:[function(a,b){b.exports=function(a){var b=[];for(var c in a)b.push(c);return b}},{}],31:[function(a,b){var c=a("./flag"),d=a("./getActual"),e=(a("./inspect"),a("./objDisplay"));b.exports=function(a,b){var f=c(a,"negate"),g=c(a,"object"),h=b[3],i=d(a,b),j=f?b[2]:b[1],k=c(a,"message");return j=j||"",j=j.replace(/#{this}/g,e(g)).replace(/#{act}/g,e(i)).replace(/#{exp}/g,e(h)),k?k+": "+j:j}},{"./flag":28,"./getActual":29,"./inspect":36,"./objDisplay":37}],32:[function(a,b){b.exports=function(a){if(a.name)return a.name;var b=/^\s?function ([^(]*)\(/.exec(a);return b&&b[1]?b[1]:""}},{}],33:[function(a,b){function c(a){var b=a.replace(/\[/g,".["),c=b.match(/(\\\.|[^.]+?)+/g);return c.map(function(a){var b=/\[(\d+)\]$/,c=b.exec(a);return c?{i:parseFloat(c[1])}:{p:a}})}function d(a,b){for(var c,d=b,e=0,f=a.length;f>e;e++){var g=a[e];d?("undefined"!=typeof g.p?d=d[g.p]:"undefined"!=typeof g.i&&(d=d[g.i]),e==f-1&&(c=d)):c=void 0}return c}b.exports=function(a,b){var e=c(a);return d(e,b)}},{}],34:[function(a,b){b.exports=function(){function a(a){-1===b.indexOf(a)&&b.push(a)}for(var b=Object.getOwnPropertyNames(subject),c=Object.getPrototypeOf(subject);null!==c;)Object.getOwnPropertyNames(c).forEach(a),c=Object.getPrototypeOf(c);return b}},{}],35:[function(a,b,c){var c=b.exports={};c.test=a("./test"),c.type=a("./type"),c.getMessage=a("./getMessage"),c.getActual=a("./getActual"),c.inspect=a("./inspect"),c.objDisplay=a("./objDisplay"),c.flag=a("./flag"),c.transferFlags=a("./transferFlags"),c.eql=a("deep-eql"),c.getPathValue=a("./getPathValue"),c.getName=a("./getName"),c.addProperty=a("./addProperty"),c.addMethod=a("./addMethod"),c.overwriteProperty=a("./overwriteProperty"),c.overwriteMethod=a("./overwriteMethod"),c.addChainableMethod=a("./addChainableMethod"),c.overwriteChainableMethod=a("./overwriteChainableMethod")},{"./addChainableMethod":25,"./addMethod":26,"./addProperty":27,"./flag":28,"./getActual":29,"./getMessage":31,"./getName":32,"./getPathValue":33,"./inspect":36,"./objDisplay":37,"./overwriteChainableMethod":38,"./overwriteMethod":39,"./overwriteProperty":40,"./test":41,"./transferFlags":42,"./type":43,"deep-eql":45}],36:[function(a,b,c){function d(a,b,c){var d={showHidden:b,seen:[],stylize:function(a){return a +}};return e(d,a,"undefined"==typeof c?2:c)}function e(a,b,d){if(b&&"function"==typeof b.inspect&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var o=b.inspect(d);return"string"!=typeof o&&(o=e(a,o,d)),o}var u=f(a,b);if(u)return u;if(t(b))return s(b);var v=r(b),w=a.showHidden?q(b):v;if(0===w.length||n(b)&&(1===w.length&&"stack"===w[0]||2===w.length&&"description"===w[0]&&"stack"===w[1])){if("function"==typeof b){var x=p(b),y=x?": "+x:"";return a.stylize("[Function"+y+"]","special")}if(l(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(m(b))return a.stylize(Date.prototype.toUTCString.call(b),"date");if(n(b))return g(b)}var z="",A=!1,B=["{","}"];if(k(b)&&(A=!0,B=["[","]"]),"function"==typeof b){var x=p(b),y=x?": "+x:"";z=" [Function"+y+"]"}if(l(b)&&(z=" "+RegExp.prototype.toString.call(b)),m(b)&&(z=" "+Date.prototype.toUTCString.call(b)),n(b))return g(b);if(0===w.length&&(!A||0==b.length))return B[0]+z+B[1];if(0>d)return l(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var C;return C=A?h(a,b,d,v,w):w.map(function(c){return i(a,b,d,v,c,A)}),a.seen.pop(),j(C,z,B)}function f(a,b){switch(typeof b){case"undefined":return a.stylize("undefined","undefined");case"string":var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string");case"number":return a.stylize(""+b,"number");case"boolean":return a.stylize(""+b,"boolean")}return null===b?a.stylize("null","null"):void 0}function g(a){return"["+Error.prototype.toString.call(a)+"]"}function h(a,b,c,d,e){for(var f=[],g=0,h=b.length;h>g;++g)f.push(Object.prototype.hasOwnProperty.call(b,String(g))?i(a,b,c,d,String(g),!0):"");return e.forEach(function(e){e.match(/^\d+$/)||f.push(i(a,b,c,d,e,!0))}),f}function i(a,b,c,d,f,g){var h,i;if(b.__lookupGetter__&&(b.__lookupGetter__(f)?i=b.__lookupSetter__(f)?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):b.__lookupSetter__(f)&&(i=a.stylize("[Setter]","special"))),d.indexOf(f)<0&&(h="["+f+"]"),i||(a.seen.indexOf(b[f])<0?(i=null===c?e(a,b[f],null):e(a,b[f],c-1),i.indexOf("\n")>-1&&(i=g?i.split("\n").map(function(a){return" "+a}).join("\n").substr(2):"\n"+i.split("\n").map(function(a){return" "+a}).join("\n"))):i=a.stylize("[Circular]","special")),"undefined"==typeof h){if(g&&f.match(/^\d+$/))return i;h=JSON.stringify(""+f),h.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(h=h.substr(1,h.length-2),h=a.stylize(h,"name")):(h=h.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),h=a.stylize(h,"string"))}return h+": "+i}function j(a,b,c){var d=0,e=a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.length+1},0);return e>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function k(a){return Array.isArray(a)||"object"==typeof a&&"[object Array]"===o(a)}function l(a){return"object"==typeof a&&"[object RegExp]"===o(a)}function m(a){return"object"==typeof a&&"[object Date]"===o(a)}function n(a){return"object"==typeof a&&"[object Error]"===o(a)}function o(a){return Object.prototype.toString.call(a)}var p=a("./getName"),q=a("./getProperties"),r=a("./getEnumerableProperties");b.exports=d;var s=function(a){if("outerHTML"in a)return a.outerHTML;var b,c="http://www.w3.org/1999/xhtml",d=document.createElementNS(c,"_"),e=((window.HTMLElement||window.Element).prototype,new XMLSerializer);return document.xmlVersion?e.serializeToString(a):(d.appendChild(a.cloneNode(!1)),b=d.innerHTML.replace("><",">"+a.innerHTML+"<"),d.innerHTML="",b)},t=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&1===a.nodeType&&"string"==typeof a.nodeName}},{"./getEnumerableProperties":30,"./getName":32,"./getProperties":34}],37:[function(a,b){var c=a("./inspect"),d=a("../config");b.exports=function(a){var b=c(a),e=Object.prototype.toString.call(a);if(d.truncateThreshold&&b.length>=d.truncateThreshold){if("[object Function]"===e)return a.name&&""!==a.name?"[Function: "+a.name+"]":"[Function]";if("[object Array]"===e)return"[ Array("+a.length+") ]";if("[object Object]"===e){var f=Object.keys(a),g=f.length>2?f.splice(0,2).join(", ")+", ...":f.join(", ");return"{ Object ("+g+") }"}return b}return b}},{"../config":20,"./inspect":36}],38:[function(a,b){b.exports=function(a,b,c,d){var e=a.__methods[b],f=e.chainingBehavior;e.chainingBehavior=function(){var a=d(f).call(this);return void 0===a?this:a};var g=e.method;e.method=function(){var a=c(g).apply(this,arguments);return void 0===a?this:a}}},{}],39:[function(a,b){b.exports=function(a,b,c){var d=a[b],e=function(){return this};d&&"function"==typeof d&&(e=d),a[b]=function(){var a=c(e).apply(this,arguments);return void 0===a?this:a}}},{}],40:[function(a,b){b.exports=function(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b),e=function(){};d&&"function"==typeof d.get&&(e=d.get),Object.defineProperty(a,b,{get:function(){var a=c(e).call(this);return void 0===a?this:a},configurable:!0})}},{}],41:[function(a,b){var c=a("./flag");b.exports=function(a,b){var d=c(a,"negate"),e=b[0];return d?!e:e}},{"./flag":28}],42:[function(a,b){b.exports=function(a,b,c){var d=a.__flags||(a.__flags=Object.create(null));b.__flags||(b.__flags=Object.create(null)),c=3===arguments.length?c:!0;for(var e in d)(c||"object"!==e&&"ssfi"!==e&&"message"!=e)&&(b.__flags[e]=d[e])}},{}],43:[function(a,b){var c={"[object Arguments]":"arguments","[object Array]":"array","[object Date]":"date","[object Function]":"function","[object Number]":"number","[object RegExp]":"regexp","[object String]":"string"};b.exports=function(a){var b=Object.prototype.toString.call(a);return c[b]?c[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}},{}],44:[function(a,b){function c(){function a(a,c){Object.keys(c).forEach(function(d){~b.indexOf(d)||(a[d]=c[d])})}var b=[].slice.call(arguments);return function(){for(var b=[].slice.call(arguments),c=0,d={};c=0;e--)if(k=f[e],!c(a[k],b[k],d))return!1;return!0}var n,o=a("type-detect");try{n=a("buffer").Buffer}catch(p){n={},n.isBuffer=function(){return!1}}b.exports=c},{buffer:10,"type-detect":47}],47:[function(a,b){b.exports=a("./lib/type")},{"./lib/type":48}],48:[function(a,b,c){function d(a){var b=Object.prototype.toString.call(a);return f[b]?f[b]:null===a?"null":void 0===a?"undefined":a===Object(a)?"object":typeof a}function e(){this.tests={}}var c=b.exports=d,f={"[object Array]":"array","[object RegExp]":"regexp","[object Function]":"function","[object Arguments]":"arguments","[object Date]":"date"};c.Library=e,e.prototype.of=d,e.prototype.define=function(a,b){return 1===arguments.length?this.tests[a]:(this.tests[a]=b,this)},e.prototype.test=function(a,b){if(b===d(a))return!0;var c=this.tests[b];if(c&&"regexp"===d(c))return c.test(a);if(c&&"function"===d(c))return c(a);throw new ReferenceError('Type test "'+b+'" not defined or invalid.')}},{}],49:[function(a,b,c){!function(d){"use strict";"function"==typeof a&&"object"==typeof c&&"object"==typeof b?b.exports=d:"function"==typeof define&&define.amd?define(function(){return d}):chai.use(d)}(function(a,b){"use strict";function c(a){return"function"==typeof a&&"function"==typeof a.getCall&&"function"==typeof a.calledWithExactly}function d(a){return 1===a?"once":2===a?"twice":3===a?"thrice":(a||0)+" times"}function e(a){return a&&c(a.proxy)}function f(a){if(!c(a._obj)&&!e(a._obj))throw new TypeError(b.inspect(a._obj)+" is not a spy or a call to a spy!")}function g(a,b,d,e,f){function g(b){return a.printf.apply(a,b)}var h=e?"always have ":"have ";return d=d||"",c(a.proxy)&&(a=a.proxy),{affirmative:g(["expected %n to "+h+b+d].concat(f)),negative:g(["expected %n to not "+h+b].concat(f))}}function h(c,d,e){b.addProperty(a.Assertion.prototype,c,function(){f(this);var a=g(this._obj,d,e,!1);this.assert(this._obj[c],a.affirmative,a.negative)})}function i(c,e,h){b.addMethod(a.Assertion.prototype,c,function(a){f(this);var b=g(this._obj,e,h,!1,[d(a)]);this.assert(this._obj[c]===a,b.affirmative,b.negative)})}function j(a,c,d){return function(){f(this);var e="always"+a[0].toUpperCase()+a.substring(1),h=b.flag(this,"always")&&"function"==typeof this._obj[e],i=h?e:a,j=g(this._obj,c,d,h,n.call(arguments));this.assert(this._obj[i].apply(this._obj,arguments),j.affirmative,j.negative)}}function k(c,d,e){var f=j(c,d,e);b.addProperty(a.Assertion.prototype,c,f)}function l(c,d,e,f){var g=j(d,e,f);b.addMethod(a.Assertion.prototype,c,g)}function m(a,b,c){l(a,a,b,c)}var n=Array.prototype.slice;b.addProperty(a.Assertion.prototype,"always",function(){b.flag(this,"always",!0)}),h("called","been called"," at least once, but it was never called"),i("callCount","been called exactly %1",", but it was called %c%C"),h("calledOnce","been called exactly once",", but it was called %c%C"),h("calledTwice","been called exactly twice",", but it was called %c%C"),h("calledThrice","been called exactly thrice",", but it was called %c%C"),k("calledWithNew","been called with new"),m("calledBefore","been called before %1"),m("calledAfter","been called after %1"),m("calledOn","been called with %1 as this",", but it was called with %t instead"),m("calledWith","been called with arguments %*","%C"),m("calledWithExactly","been called with exact arguments %*","%C"),m("calledWithMatch","been called with arguments matching %*","%C"),m("returned","returned %1"),l("thrown","threw","thrown %1")})},{}],50:[function(a,b,c){"use strict";!function(d){function e(a){var b=!1;try{a.appendChild(l),b=l.parentNode==a}catch(c){return!1}finally{try{a.removeChild(l)}catch(c){}}return b}function f(a){return l&&a&&1===a.nodeType&&e(a)}function g(a){return"function"==typeof a||!!(a&&a.constructor&&a.call&&a.apply)}function h(a){return"number"==typeof a&&isNaN(a)}function i(a,b){for(var c in b)m.call(a,c)||(a[c]=b[c])}function j(a){return"function"==typeof a&&"function"==typeof a.restore&&a.restore.sinon}function k(a,b,c){c.exports=n,n.spy=a("./sinon/spy"),n.spyCall=a("./sinon/call"),n.behavior=a("./sinon/behavior"),n.stub=a("./sinon/stub"),n.mock=a("./sinon/mock"),n.collection=a("./sinon/collection"),n.assert=a("./sinon/assert"),n.sandbox=a("./sinon/sandbox"),n.test=a("./sinon/test"),n.testCase=a("./sinon/test_case"),n.match=a("./sinon/match")}var l="undefined"!=typeof document&&document.createElement("div"),m=Object.prototype.hasOwnProperty,n={wrapMethod:function(a,b,c){if(!a)throw new TypeError("Should wrap property of object");if("function"!=typeof c)throw new TypeError("Method wrapper should be function");var d,e=a[b];if(g(e)){if(e.restore&&e.restore.sinon)d=new TypeError("Attempted to wrap "+b+" which is already wrapped");else if(e.calledBefore){var f=e.returns?"stubbed":"spied on";d=new TypeError("Attempted to wrap "+b+" which is already "+f)}}else d=new TypeError("Attempted to wrap "+typeof e+" property "+b+" as function");if(d)throw e&&e._stack&&(d.stack+="\n--------------\n"+e._stack),d;var h=a.hasOwnProperty?a.hasOwnProperty(b):m.call(a,b);return a[b]=c,c.displayName=b,c._stack=new Error("Stack Trace for original").stack,c.restore=function(){h||delete a[b],a[b]===c&&(a[b]=e)},c.restore.sinon=!0,i(c,e),c},extend:function(a){for(var b=1,c=arguments.length;c>b;b+=1)for(var d in arguments[b])arguments[b].hasOwnProperty(d)&&(a[d]=arguments[b][d]),arguments[b].hasOwnProperty("toString")&&arguments[b].toString!=a.toString&&(a.toString=arguments[b].toString);return a},create:function(a){var b=function(){};return b.prototype=a,new b},deepEqual:function t(a,b){if(n.match&&n.match.isMatcher(a))return a.test(b);if("object"!=typeof a||"object"!=typeof b)return h(a)&&h(b)?!0:a===b;if(f(a)||f(b))return a===b;if(a===b)return!0;if(null===a&&null!==b||null!==a&&null===b)return!1;if(a instanceof RegExp&&b instanceof RegExp)return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;var c=Object.prototype.toString.call(a);if(c!=Object.prototype.toString.call(b))return!1;if("[object Date]"==c)return a.valueOf()===b.valueOf();var d,e=0,g=0;if("[object Array]"==c&&a.length!==b.length)return!1;for(d in a){if(e+=1,!(d in b))return!1;if(!t(a[d],b[d]))return!1}for(d in b)g+=1;return e==g},functionName:function(a){var b=a.displayName||a.name;if(!b){var c=a.toString().match(/function ([^\s\(]+)/);b=c&&c[1]}return b},functionToString:function(){if(this.getCall&&this.callCount)for(var a,b,c=this.callCount;c--;){a=this.getCall(c).thisValue;for(b in a)if(a[b]===this)return b}return this.displayName||"sinon fake"},getConfig:function(a){var b={};a=a||{};var c=n.defaultConfig;for(var d in c)c.hasOwnProperty(d)&&(b[d]=a.hasOwnProperty(d)?a[d]:c[d]);return b},format:function(a){return""+a},defaultConfig:{injectIntoThis:!0,injectInto:null,properties:["spy","stub","mock","clock","server","requests"],useFakeTimers:!0,useFakeServer:!0},timesInWords:function(a){return 1==a&&"once"||2==a&&"twice"||3==a&&"thrice"||(a||0)+" times"},calledInOrder:function(a){for(var b=1,c=a.length;c>b;b++)if(!a[b-1].calledBefore(a[b])||!a[b].called)return!1;return!0},orderByFirstCall:function(a){return a.sort(function(a,b){var c=a.getCall(0),d=b.getCall(0),e=c&&c.callId||-1,f=d&&d.callId||-1;return f>e?-1:1})},log:function(){},logError:function(a,b){var c=a+" threw exception: ";n.log(c+"["+b.name+"] "+b.message),b.stack&&n.log(b.stack),setTimeout(function(){throw b.message=c+b.message,b},0)},typeOf:function(a){if(null===a)return"null";if(void 0===a)return"undefined";var b=Object.prototype.toString.call(a);return b.substring(8,b.length-1).toLowerCase()},createStubInstance:function(a){if("function"!=typeof a)throw new TypeError("The constructor should be a function.");return n.stub(n.create(a.prototype))},restore:function(a){if(null!==a&&"object"==typeof a)for(var b in a)j(a[b])&&a[b].restore();else j(a)&&a.restore()}},o="undefined"!=typeof b&&b.exports&&"function"==typeof a,p="function"==typeof define&&"object"==typeof define.amd&&define.amd;if(p)define(k);else if(o){try{d=a("formatio")}catch(q){}k(a,c,b)}if(d){var r=d.configure({quoteStrings:!1});n.format=function(){return r.ascii.apply(r,arguments)}}else if(o)try{var s=a("util");n.format=function(a){return"object"==typeof a&&a.toString===Object.prototype.toString?s.inspect(a):a}}catch(q){}return n}("object"==typeof formatio&&formatio)},{"./sinon/assert":51,"./sinon/behavior":52,"./sinon/call":53,"./sinon/collection":54,"./sinon/match":55,"./sinon/mock":56,"./sinon/sandbox":57,"./sinon/spy":58,"./sinon/stub":59,"./sinon/test":60,"./sinon/test_case":61,formatio:63,util:16}],51:[function(a,b){(function(c){"use strict";!function(c,d){function e(){for(var a,b=0,c=arguments.length;c>b;++b)a=arguments[b],a||i.fail("fake is not a spy"),"function"!=typeof a&&i.fail(a+" is not a function"),"function"!=typeof a.getCall&&i.fail(a+" is not stubbed")}function f(a,b){a=a||d;var c=a.fail||i.fail;c.call(a,b)}function g(a,b,c){2==arguments.length&&(c=b,b=a),i[a]=function(d){e(d);var g=k.call(arguments,1),h=!1;h="function"==typeof b?!b(d):"function"==typeof d[b]?!d[b].apply(d,g):!d[b],h?f(this,d.printf.apply(d,[c].concat(g))):i.pass(a)}}function h(a,b){return!a||/^fail/.test(b)?b:a+b.slice(0,1).toUpperCase()+b.slice(1)}var i,j="undefined"!=typeof b&&b.exports&&"function"==typeof a,k=Array.prototype.slice;!c&&j&&(c=a("../sinon")),c&&(i={failException:"AssertError",fail:function(a){var b=new Error(a);throw b.name=this.failException||i.failException,b},pass:function(){},callOrder:function(){e.apply(null,arguments);var a="",b="";if(c.calledInOrder(arguments))i.pass("callOrder");else{try{a=[].join.call(arguments,", ");for(var d=k.call(arguments),g=d.length;g;)d[--g].called||d.splice(g,1);b=c.orderByFirstCall(d).join(", ")}catch(h){}f(this,"expected "+a+" to be called in order but were called as "+b)}},callCount:function(a,b){if(e(a),a.callCount!=b){var d="expected %n to be called "+c.timesInWords(b)+" but was called %c%C";f(this,a.printf(d))}else i.pass("callCount")},expose:function(a,b){if(!a)throw new TypeError("target is null or undefined");var c=b||{},d="undefined"==typeof c.prefix&&"assert"||c.prefix,e="undefined"==typeof c.includeFail||!!c.includeFail;for(var f in this)"export"==f||!e&&/^(fail)/.test(f)||(a[h(d,f)]=this[f]);return a},match:function(a,b){var d=c.match(b);if(d.test(a))i.pass("match");else{var e=["expected value to match"," expected = "+c.format(b)," actual = "+c.format(a)];f(this,e.join("\n"))}}},g("called","expected %n to have been called at least once but was never called"),g("notCalled",function(a){return!a.called},"expected %n to not have been called but was called %c%C"),g("calledOnce","expected %n to be called once but was called %c%C"),g("calledTwice","expected %n to be called twice but was called %c%C"),g("calledThrice","expected %n to be called thrice but was called %c%C"),g("calledOn","expected %n to be called with %1 as this but was called with %t"),g("alwaysCalledOn","expected %n to always be called with %1 as this but was called with %t"),g("calledWithNew","expected %n to be called with new"),g("alwaysCalledWithNew","expected %n to always be called with new"),g("calledWith","expected %n to be called with arguments %*%C"),g("calledWithMatch","expected %n to be called with match %*%C"),g("alwaysCalledWith","expected %n to always be called with arguments %*%C"),g("alwaysCalledWithMatch","expected %n to always be called with match %*%C"),g("calledWithExactly","expected %n to be called with exact arguments %*%C"),g("alwaysCalledWithExactly","expected %n to always be called with exact arguments %*%C"),g("neverCalledWith","expected %n to never be called with arguments %*%C"),g("neverCalledWithMatch","expected %n to never be called with match %*%C"),g("threw","%n did not throw exception%C"),g("alwaysThrew","%n did not always throw exception%C"),c.assert=i,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=i}):j&&(b.exports=i))}("object"==typeof sinon&&sinon||null,"undefined"!=typeof window?window:"undefined"!=typeof self?self:c)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../sinon":50}],52:[function(a,b){(function(c){"use strict";!function(d){function e(a,b){return"string"==typeof a?(this.exception=new Error(b||""),this.exception.name=a):this.exception=a?a:new Error("Error"),this}function f(a,b){var c=a.callArgAt;if(0>c){for(var d=a.callArgProp,e=0,f=b.length;f>e;++e){if(!d&&"function"==typeof b[e])return b[e];if(d&&b[e]&&"function"==typeof b[e][d])return b[e][d]}return null}return b[c]}function g(a,b,c){if(a.callArgAt<0){var e;return e=a.callArgProp?d.functionName(a.stub)+" expected to yield to '"+a.callArgProp+"', but no object with such a property was passed.":d.functionName(a.stub)+" expected to yield, but no callback was passed.",c.length>0&&(e+=" Received ["+l.call(c,", ")+"]"),e}return"argument at index "+a.callArgAt+" is not a function: "+b}function h(a,b){if("number"==typeof a.callArgAt){var c=f(a,b);if("function"!=typeof c)throw new TypeError(g(a,c,b));a.callbackAsync?m(function(){c.apply(a.callbackContext,a.callbackArguments)}):c.apply(a.callbackContext,a.callbackArguments)}}var i="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!d&&i&&(d=a("../sinon")),d){var j,k=Array.prototype.slice,l=Array.prototype.join,m=function(){return"object"==typeof c&&"function"==typeof c.nextTick?c.nextTick:"function"==typeof setImmediate?setImmediate:function(a){setTimeout(a,0)}}();j={create:function(a){var b=d.extend({},d.behavior);return delete b.create,b.stub=a,b},isPresent:function(){return"number"==typeof this.callArgAt||this.exception||"number"==typeof this.returnArgAt||this.returnThis||this.returnValueDefined},invoke:function(a,b){if(h(this,b),this.exception)throw this.exception;return"number"==typeof this.returnArgAt?b[this.returnArgAt]:this.returnThis?a:this.returnValue},onCall:function(a){return this.stub.onCall(a)},onFirstCall:function(){return this.stub.onFirstCall()},onSecondCall:function(){return this.stub.onSecondCall()},onThirdCall:function(){return this.stub.onThirdCall()},withArgs:function(){throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.')},callsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOn:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=[],this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgWith:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.callArgAt=a,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},callsArgOnWith:function(a,b){if("number"!=typeof a)throw new TypeError("argument index is not number");if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=a,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=void 0,this.callbackAsync=!1,this},yields:function(){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,0),this.callbackContext=void 0,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsOn:function(a){if("object"!=typeof a)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=a,this.callArgProp=void 0,this.callbackAsync=!1,this},yieldsTo:function(a){return this.callArgAt=-1,this.callbackArguments=k.call(arguments,1),this.callbackContext=void 0,this.callArgProp=a,this.callbackAsync=!1,this},yieldsToOn:function(a,b){if("object"!=typeof b)throw new TypeError("argument context is not an object");return this.callArgAt=-1,this.callbackArguments=k.call(arguments,2),this.callbackContext=b,this.callArgProp=a,this.callbackAsync=!1,this},"throws":e,throwsException:e,returns:function(a){return this.returnValue=a,this.returnValueDefined=!0,this},returnsArg:function(a){if("number"!=typeof a)throw new TypeError("argument index is not number");return this.returnArgAt=a,this},returnsThis:function(){return this.returnThis=!0,this}};for(var n in j)j.hasOwnProperty(n)&&n.match(/^(callsArg|yields)/)&&!n.match(/Async/)&&(j[n+"Async"]=function(a){return function(){var b=this[a].apply(this,arguments);return this.callbackAsync=!0,b}}(n));d.behavior=j,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=j}):i&&(b.exports=j)}}("object"==typeof sinon&&sinon||null)}).call(this,a("FWaASH"))},{"../sinon":50,FWaASH:14}],53:[function(a,b){"use strict";!function(c){function d(a,b,d){var e=c.functionName(a)+b;throw d.length&&(e+=" Received ["+g.call(d).join(", ")+"]"),new Error(e)}function e(a,b,d,e,f,g){if("number"!=typeof g)throw new TypeError("Call id is not a number");var i=c.create(h);return i.proxy=a,i.thisValue=b,i.args=d,i.returnValue=e,i.exception=f,i.callId=g,i}var f="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&f&&(c=a("../sinon")),c){var g=Array.prototype.slice,h={calledOn:function(a){return c.match&&c.match.isMatcher(a)?a.test(this.thisValue):this.thisValue===a},calledWith:function(){for(var a=0,b=arguments.length;b>a;a+=1)if(!c.deepEqual(arguments[a],this.args[a]))return!1;return!0},calledWithMatch:function(){for(var a=0,b=arguments.length;b>a;a+=1){var d=this.args[a],e=arguments[a];if(!c.match||!c.match(e).test(d))return!1}return!0},calledWithExactly:function(){return arguments.length==this.args.length&&this.calledWith.apply(this,arguments)},notCalledWith:function(){return!this.calledWith.apply(this,arguments)},notCalledWithMatch:function(){return!this.calledWithMatch.apply(this,arguments)},returned:function(a){return c.deepEqual(a,this.returnValue)},threw:function(a){return"undefined"!=typeof a&&this.exception?this.exception===a||this.exception.name===a:!!this.exception},calledWithNew:function(){return this.proxy.prototype&&this.thisValue instanceof this.proxy},calledBefore:function(a){return this.callIda.callId},callArg:function(a){this.args[a]()},callArgOn:function(a,b){this.args[a].apply(b)},callArgWith:function(a){this.callArgOnWith.apply(this,[a,null].concat(g.call(arguments,1)))},callArgOnWith:function(a,b){var c=g.call(arguments,2);this.args[a].apply(b,c)},"yield":function(){this.yieldOn.apply(this,[null].concat(g.call(arguments,0)))},yieldOn:function(a){for(var b=this.args,c=0,e=b.length;e>c;++c)if("function"==typeof b[c])return void b[c].apply(a,g.call(arguments,1));d(this.proxy," cannot yield since no callback was passed.",b)},yieldTo:function(a){this.yieldToOn.apply(this,[a,null].concat(g.call(arguments,1)))},yieldToOn:function(a,b){for(var c=this.args,e=0,f=c.length;f>e;++e)if(c[e]&&"function"==typeof c[e][a])return void c[e][a].apply(b,g.call(arguments,2));d(this.proxy," cannot yield to '"+a+"' since no callback was passed.",c)},toString:function(){for(var a=this.proxy.toString()+"(",b=[],d=0,e=this.args.length;e>d;++d)b.push(c.format(this.args[d]));return a=a+b.join(", ")+")","undefined"!=typeof this.returnValue&&(a+=" => "+c.format(this.returnValue)),this.exception&&(a+=" !"+this.exception.name,this.exception.message&&(a+="("+this.exception.message+")")),a}};h.invokeCallback=h.yield,e.toString=h.toString,c.spyCall=e,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=e}):f&&(b.exports=e)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],54:[function(a,b){"use strict";!function(c){function d(a){return a.fakes||(a.fakes=[]),a.fakes}function e(a,b){for(var c=d(a),e=0,f=c.length;f>e;e+=1)"function"==typeof c[e][b]&&c[e][b]()}function f(a){for(var b=d(a),c=0;cc;c+=1)b(a[c])}return{create:function(a){if(!a)throw new TypeError("object is null");var b=c.extend({},d);return b.object=a,delete b.create,b},expects:function(a){if(!a)throw new TypeError("method is falsy");if(this.expectations||(this.expectations={},this.proxies=[]),!this.expectations[a]){this.expectations[a]=[];var b=this;c.wrapMethod(this.object,a,function(){return b.invokeMethod(a,this,arguments)}),g.call(this.proxies,a)}var d=c.expectation.create(a);return g.call(this.expectations[a],d),d},restore:function(){var b=this.object;a(this.proxies,function(a){"function"==typeof b[a].restore&&b[a].restore()})},verify:function(){var b=this.expectations||{},d=[],e=[];return a(this.proxies,function(c){a(b[c],function(a){a.met()?g.call(e,a.toString()):g.call(d,a.toString())})}),this.restore(),d.length>0?c.expectation.fail(d.concat(e).join("\n")):c.expectation.pass(d.concat(e).join("\n")),!0},invokeMethod:function(a,b,d){var e,f=this.expectations&&this.expectations[a],h=f&&f.length||0;for(e=0;h>e;e+=1)if(!f[e].met()&&f[e].allowsCall(b,d))return f[e].apply(b,d);var i,j=[],k=0;for(e=0;h>e;e+=1)f[e].allowsCall(b,d)?i=i||f[e]:k+=1,g.call(j," "+f[e].toString());return 0===k?i.apply(b,d):(j.unshift("Unexpected call: "+c.spyCall.toString.call({proxy:a,args:d})),void c.expectation.fail(j.join("\n")))}}}());var h=c.timesInWords;c.expectation=function(){function a(a){return 0==a?"never called":"called "+h(a)}function b(a){var b=a.minCalls,c=a.maxCalls;if("number"==typeof b&&"number"==typeof c){var d=h(b);return b!=c&&(d="at least "+d+" and at most "+h(c)),d}return"number"==typeof b?"at least "+h(b):"at most "+h(c)}function d(a){var b="number"==typeof a.minCalls;return!b||a.callCount>=a.minCalls}function f(a){return"number"!=typeof a.maxCalls?!1:a.callCount==a.maxCalls}function i(a,b){return e&&e.isMatcher(a)?a.test(b):!0}var j=Array.prototype.slice,k=c.spy.invoke;return{minCalls:1,maxCalls:1,create:function(a){var b=c.extend(c.stub.create(),c.expectation);return delete b.create,b.method=a,b},invoke:function(a,b,c){return this.verifyCallAllowed(b,c),k.apply(this,arguments)},atLeast:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.maxCalls=null,this.limitsSet=!0),this.minCalls=a,this},atMost:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not number");return this.limitsSet||(this.minCalls=null,this.limitsSet=!0),this.maxCalls=a,this},never:function(){return this.exactly(0)},once:function(){return this.exactly(1)},twice:function(){return this.exactly(2)},thrice:function(){return this.exactly(3)},exactly:function(a){if("number"!=typeof a)throw new TypeError("'"+a+"' is not a number");return this.atLeast(a),this.atMost(a)},met:function(){return!this.failed&&d(this)},verifyCallAllowed:function(a,b){if(f(this)&&(this.failed=!0,c.expectation.fail(this.method+" already called "+h(this.maxCalls))),"expectedThis"in this&&this.expectedThis!==a&&c.expectation.fail(this.method+" called with "+a+" as thisValue, expected "+this.expectedThis),"expectedArguments"in this){b||c.expectation.fail(this.method+" received no arguments, expected "+c.format(this.expectedArguments)),b.lengthd;d+=1)i(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", didn't match "+this.expectedArguments.toString()),c.deepEqual(this.expectedArguments[d],b[d])||c.expectation.fail(this.method+" received wrong arguments "+c.format(b)+", expected "+c.format(this.expectedArguments))}},allowsCall:function(a,b){if(this.met()&&f(this))return!1;if("expectedThis"in this&&this.expectedThis!==a)return!1;if(!("expectedArguments"in this))return!0;if(b=b||[],b.lengthd;d+=1){if(!i(this.expectedArguments[d],b[d]))return!1;if(!c.deepEqual(this.expectedArguments[d],b[d]))return!1}return!0},withArgs:function(){return this.expectedArguments=j.call(arguments),this},withExactArgs:function(){return this.withArgs.apply(this,arguments),this.expectsExactArgCount=!0,this},on:function(a){return this.expectedThis=a,this},toString:function(){var d=(this.expectedArguments||[]).slice();this.expectsExactArgCount||g.call(d,"[...]");var e=c.spyCall.toString.call({proxy:this.method||"anonymous mock expectation",args:d}),f=e.replace(", [...","[, ...")+" "+b(this);return this.met()?"Expectation met: "+f:"Expected "+f+" ("+a(this.callCount)+")"},verify:function(){return this.met()?c.expectation.pass(this.toString()):c.expectation.fail(this.toString()),!0},pass:function(a){c.assert.pass(a)},fail:function(a){var b=new Error(a);throw b.name="ExpectationError",b}}}(),c.mock=d,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=d}):f&&(b.exports=d)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50,"./match":55}],57:[function(a,b){"use strict";if("undefined"!=typeof b&&b.exports&&"function"==typeof a){var c=a("../sinon");c.extend(c,a("./util/fake_timers"))}!function(){function a(a,b,c,d){d&&(!b.injectInto||c in b.injectInto?e.call(a.args,d):(b.injectInto[c]=d,a.injectedKeys.push(c)))}function d(a){var b=c.create(c.sandbox);return a.useFakeServer&&("object"==typeof a.useFakeServer&&(b.serverPrototype=a.useFakeServer),b.useFakeServer()),a.useFakeTimers&&("object"==typeof a.useFakeTimers?b.useFakeTimers.apply(b,a.useFakeTimers):b.useFakeTimers()),b}var e=[].push;c.sandbox=c.extend(c.create(c.collection),{useFakeTimers:function(){return this.clock=c.useFakeTimers.apply(c,arguments),this.add(this.clock)},serverPrototype:c.fakeServer,useFakeServer:function(){var a=this.serverPrototype||c.fakeServer;return a&&a.create?(this.server=a.create(),this.add(this.server)):null},inject:function(a){return c.collection.inject.call(this,a),this.clock&&(a.clock=this.clock),this.server&&(a.server=this.server,a.requests=this.server.requests),a},restore:function(){c.collection.restore.apply(this,arguments),this.restoreContext()},restoreContext:function(){if(this.injectedKeys){for(var a=0,b=this.injectedKeys.length;b>a;a++)delete this.injectInto[this.injectedKeys[a]];this.injectedKeys=[]}},create:function(b){if(!b)return c.create(c.sandbox);var e=d(b);e.args=e.args||[],e.injectedKeys=[],e.injectInto=b.injectInto;var f,g,h=e.inject({});if(b.properties)for(var i=0,j=b.properties.length;j>i;i++)f=b.properties[i],g=h[f]||"sandbox"==f&&e,a(e,b,f,g);else a(e,b,"sandbox",g);return e}}),c.sandbox.useFakeXMLHttpRequest=c.sandbox.useFakeServer,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=c.sandbox}):"undefined"!=typeof b&&b.exports&&(b.exports=c.sandbox)}()},{"../sinon":50,"./util/fake_timers":62}],58:[function(require,module,exports){"use strict";!function(sinon){function spy(a,b){if(!b&&"function"==typeof a)return spy.create(a);if(!a&&!b)return spy.create(function(){});var c=a[b];return sinon.wrapMethod(a,b,spy.create(c))}function matchingFake(a,b,c){if(a)for(var d=0,e=a.length;e>d;d++)if(a[d].matches(b,c))return a[d]}function incrementCallCount(){this.called=!0,this.callCount+=1,this.notCalled=!1,this.calledOnce=1==this.callCount,this.calledTwice=2==this.callCount,this.calledThrice=3==this.callCount}function createCallProperties(){this.firstCall=this.getCall(0),this.secondCall=this.getCall(1),this.thirdCall=this.getCall(2),this.lastCall=this.getCall(this.callCount-1)}function createProxy(func){var p;return func.length?eval("p = (function proxy("+vars.substring(0,2*func.length-1)+") { return p.invoke(func, this, slice.call(arguments)); });"):p=function(){return p.invoke(func,this,slice.call(arguments))},p}function delegateToCalls(a,b,c,d){spyApi[a]=function(){if(!this.called)return d?d.apply(this,arguments):!1;for(var e,f=0,g=0,h=this.callCount;h>g;g+=1)if(e=this.getCall(g),e[c||a].apply(e,arguments)&&(f+=1,b))return!0;return f===this.callCount}}var commonJSModule="undefined"!=typeof module&&module.exports&&"function"==typeof require,push=Array.prototype.push,slice=Array.prototype.slice,callId=0;if(!sinon&&commonJSModule&&(sinon=require("../sinon")),sinon){var vars="a,b,c,d,e,f,g,h,i,j,k,l",uuid=0,spyApi={reset:function(){if(this.called=!1,this.notCalled=!0,this.calledOnce=!1,this.calledTwice=!1,this.calledThrice=!1,this.callCount=0,this.firstCall=null,this.secondCall=null,this.thirdCall=null,this.lastCall=null,this.args=[],this.returnValues=[],this.thisValues=[],this.exceptions=[],this.callIds=[],this.fakes)for(var a=0;aa||a>=this.callCount?null:sinon.spyCall(this,this.thisValues[a],this.args[a],this.returnValues[a],this.exceptions[a],this.callIds[a])},getCalls:function(){var a,b=[];for(a=0;aa.callIds[a.callCount-1]:!1},withArgs:function(){var a=slice.call(arguments);if(this.fakes){var b=matchingFake(this.fakes,a,!0);if(b)return b}else this.fakes=[];var c=this,d=this._create();d.matchingAguments=a,d.parent=this,push.call(this.fakes,d),d.withArgs=function(){return c.withArgs.apply(c,arguments)};for(var e=0;ec;++c){var e=" "+a.getCall(c).toString();/\n/.test(b[c-1])&&(e="\n"+e),push.call(b,e)}return b.length>0?"\n"+b.join("\n"):""},t:function(a){for(var b=[],c=0,d=a.callCount;d>c;++c)push.call(b,sinon.format(a.thisValues[c]));return b.join(", ")},"*":function(a,b){for(var c=[],d=0,e=b.length;e>d;++d)push.call(c,sinon.format(b[d]));return c.join(", ")}},sinon.extend(spy,spyApi),spy.spyCall=sinon.spyCall,sinon.spy=spy,"function"==typeof define&&define.amd?define(["module"],function(a){a.exports=spy}):commonJSModule&&(module.exports=spy)}}("object"==typeof sinon&&sinon||null)},{"../sinon":50}],59:[function(a,b){"use strict";!function(c){function d(a,b,e){if(e&&"function"!=typeof e)throw new TypeError("Custom stub should be function");var f;if(f=e?c.spy&&c.spy.create?c.spy.create(e):e:d.create(),!a&&"undefined"==typeof b)return c.stub.create();if("undefined"==typeof b&&"object"==typeof a){for(var g in a)"function"==typeof a[g]&&d(a,g);return a}return c.wrapMethod(a,b,f)}function e(a){return a.defaultBehavior||f(a)||c.behavior.create(a)}function f(a){return a.parent&&g(a.parent)}function g(a){var b=a.behaviors[a.callCount-1];return b&&b.isPresent()?b:e(a)}var h="undefined"!=typeof b&&b.exports&&"function"==typeof a;if(!c&&h&&(c=a("../sinon")),c){var i=0;c.extend(d,function(){var a={create:function(){var a=function(){return g(a).invoke(this,arguments)};a.id="stub#"+i++;var b=a;return a=c.spy.create(a),a.func=b,c.extend(a,d),a._create=c.stub.create,a.displayName="stub",a.toString=c.functionToString,a.defaultBehavior=null,a.behaviors=[],a},resetBehavior:function(){var a;if(this.defaultBehavior=null,this.behaviors=[],delete this.returnValue,delete this.returnArgAt,this.returnThis=!1,this.fakes)for(a=0;a3||!/^(\d\d:){0,2}\d\d?$/.test(a))throw new Error("tick only understands numbers and 'h:m:s'");for(;e--;){if(b=parseInt(c[e],10),b>=60)throw new Error("Invalid time "+a);f+=b*Math.pow(60,d-e-1)}return 1e3*f}function createObject(a){var b;if(Object.create)b=Object.create(a);else{var c=function(){};c.prototype=a,b=new c}return b.Date.clock=b,b}function mirrorDateProperties(a,b){b.now?a.now=function(){return a.clock.now}:delete a.now,b.toSource?a.toSource=function(){return b.toSource()}:delete a.toSource,a.toString=function(){return b.toString()},a.prototype=b.prototype,a.parse=b.parse,a.UTC=b.UTC,a.prototype.toUTCString=b.prototype.toUTCString;for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function restore(){for(var a,b=0,c=this.methods.length;c>b;b++)if(a=this.methods[b],global[a].hadOwnProperty)global[a]=this["_"+a];else try{delete global[a]}catch(d){}this.methods=[]}function stubGlobal(a,b){if(b[a].hadOwnProperty=Object.prototype.hasOwnProperty.call(global,a),b["_"+a]=global[a],"Date"==a){var c=mirrorDateProperties(b[a],global[a]);global[a]=c}else{global[a]=function(){return b[a].apply(b,arguments)};for(var d in b[a])b[a].hasOwnProperty(d)&&(global[a][d]=b[a][d])}global[a].clock=b}var timeoutResult=setTimeout(function(){},0),addTimerReturnsObject="object"==typeof timeoutResult;clearTimeout(timeoutResult);var id=1;sinon.clock={now:0,create:function(a){var b=createObject(this);if("number"==typeof a&&(b.now=a),a&&"object"==typeof a)throw new TypeError("now should be milliseconds since UNIX epoch");return b},setTimeout:function(){return addTimer.call(this,arguments,!1)},clearTimeout:function(a){a&&(this.timeouts||(this.timeouts=[]),"object"==typeof a&&(a=a.id),a in this.timeouts&&delete this.timeouts[a])},setInterval:function(){return addTimer.call(this,arguments,!0)},clearInterval:function(a){this.clearTimeout(a)},setImmediate:function(a){var b=Array.prototype.slice.call(arguments,1);return addTimer.call(this,[a,0].concat(b),!1)},clearImmediate:function(a){this.clearTimeout(a)},tick:function(a){a="number"==typeof a?a:parseTime(a);for(var b,c=this.now,d=this.now+a,e=this.now,f=this.firstTimerInRange(c,d);f&&d>=c;){if(this.timeouts[f.id]){c=this.now=f.callAt;try{this.callTimer(f)}catch(g){b=b||g}}f=this.firstTimerInRange(e,d),e=c}if(this.now=d,b)throw b;return this.now},firstTimerInRange:function(a,b){var c,d,e=null;for(var f in this.timeouts)if(this.timeouts.hasOwnProperty(f)){if(this.timeouts[f].callAtb)continue;(null===e||this.timeouts[f].callAtc;c++)stubGlobal(b.methods[c],b);return b}}("undefined"!=typeof global&&"function"!=typeof global?global:this),sinon.timers={setTimeout:setTimeout,clearTimeout:clearTimeout,setImmediate:"undefined"!=typeof setImmediate?setImmediate:void 0,clearImmediate:"undefined"!=typeof clearImmediate?clearImmediate:void 0,setInterval:setInterval,clearInterval:clearInterval,Date:Date},"undefined"!=typeof module&&module.exports&&(module.exports=sinon)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],63:[function(a,b){(function(c){("function"==typeof define&&define.amd&&function(a){define("formatio",["samsam"],a)}||"object"==typeof b&&function(c){b.exports=c(a("samsam"))}||function(a){this.formatio=a(this.samsam)})(function(a){"use strict";function b(a){if(!a)return"";if(a.displayName)return a.displayName;if(a.name)return a.name;var b=a.toString().match(/function\s+([^\(]+)/m);return b&&b[1]||""}function d(a,c){var d,e,f=b(c&&c.constructor),g=a.excludeConstructors||h.excludeConstructors||[];for(d=0,e=g.length;e>d;++d){if("string"==typeof g[d]&&g[d]===f)return"";if(g[d].test&&g[d].test(f))return""}return f}function e(a,b){if("object"!=typeof a)return!1;var c,d;for(c=0,d=b.length;d>c;++c)if(b[c]===a)return!0;return!1}function f(b,c,d,g){if("string"==typeof c){var h=b.quoteStrings,j="boolean"!=typeof h||h;return d||j?'"'+c+'"':c}if("function"==typeof c&&!(c instanceof RegExp))return f.func(c);if(d=d||[],e(c,d))return"[Circular]";if("[object Array]"===Object.prototype.toString.call(c))return f.array.call(b,c,d);if(!c)return String(1/c===-1/0?"-0":c);if(a.isElement(c))return f.element(c);if("function"==typeof c.toString&&c.toString!==Object.prototype.toString)return c.toString();var k,l;for(k=0,l=i.length;l>k;k++)if(c===i[k].object)return i[k].value;return f.object.call(b,c,d,g)}function g(a){for(var b in a)this[b]=a[b]}var h={excludeConstructors:["Object",/^.$/],quoteStrings:!0},i=(Object.prototype.hasOwnProperty,[]);return"undefined"!=typeof c&&i.push({object:c,value:"[object global]"}),"undefined"!=typeof document&&i.push({object:document,value:"[object HTMLDocument]"}),"undefined"!=typeof window&&i.push({object:window,value:"[object Window]"}),f.func=function(a){return"function "+b(a)+"() {}"},f.array=function(a,b){b=b||[],b.push(a);var c,d,e=[];for(c=0,d=a.length;d>c;++c)e.push(f(this,a[c],b));return"["+e.join(", ")+"]"},f.object=function(b,c,g){c=c||[],c.push(b),g=g||0;var h,i,j,k,l,m=[],n=a.keys(b).sort(),o=3;for(k=0,l=n.length;l>k;++k)h=n[k],j=b[h],i=e(j,c)?"[Circular]":f(this,j,c,g+2),i=(/\s/.test(h)?'"'+h+'"':h)+": "+i,o+=i.length,m.push(i);var p=d(this,b),q=p?"["+p+"] ":"",r="";for(k=0,l=g;l>k;++k)r+=" ";return o+g>80?q+"{\n "+r+m.join(",\n "+r)+"\n"+r+"}":q+"{ "+m.join(", ")+" }"},f.element=function(a){var b,c,d,e,f,g=a.tagName.toLowerCase(),h=a.attributes,i=[];for(d=0,e=h.length;e>d;++d)b=h.item(d),c=b.nodeName.toLowerCase().replace("html:",""),f=b.nodeValue,("contenteditable"!==c||"inherit"!==f)&&f&&i.push(c+'="'+f+'"');var j="<"+g+(i.length>0?" ":""),k=a.innerHTML;k.length>20&&(k=k.substr(0,20)+"[...]");var l=j+i.join(" ")+">"+k+"";return l.replace(/ contentEditable="inherit"/,"")},g.prototype={functionName:b,configure:function(a){return new g(a)},constructorName:function(a){return d(this,a)},ascii:function(a,b,c){return f(this,a,b,c)}},g.prototype})}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{samsam:64}],64:[function(a,b){("function"==typeof define&&define.amd&&function(a){define("samsam",a)}||"object"==typeof b&&function(a){b.exports=a()}||function(a){this.samsam=a()})(function(){function a(a){var b=a;return"number"==typeof a&&a!==b}function b(a){return l.toString.call(a).split(/[ \]]/)[1]}function c(a){if("Arguments"===b(a))return!0;if("object"!=typeof a||"number"!=typeof a.length||"Array"===b(a))return!1;if("function"==typeof a.callee)return!0;try{a[a.length]=6,delete a[a.length]}catch(c){return!0}return!1}function d(a){if(!a||1!==a.nodeType||!m)return!1;try{a.appendChild(m),a.removeChild(m)}catch(b){return!1}return!0}function e(a){var b,c=[];for(b in a)l.hasOwnProperty.call(a,b)&&c.push(b);return c}function f(a){return"function"==typeof a.getTime&&a.getTime()==a.valueOf()}function g(a){return 0===a&&1/a===-1/0}function h(b,c){return b===c||a(b)&&a(c)?0!==b||g(b)===g(c):void 0}function i(g,i){function j(a){return"object"!=typeof a||null===a||a instanceof Boolean||a instanceof Date||a instanceof Number||a instanceof RegExp||a instanceof String?!1:!0}function k(a,b){var c;for(c=0;cD;D++){if(C=A[D],!l.hasOwnProperty.call(i,C))return!1;if(F=g[C],G=i[C],H=j(F),I=j(G),J=H?k(m,F):-1,K=I?k(n,G):-1,L=-1!==J?o[J]:s+"["+JSON.stringify(C)+"]",M=-1!==K?p[K]:t+"["+JSON.stringify(C)+"]",q[L+M])return!0;if(-1===J&&H&&(m.push(F),o.push(L)),-1===K&&I&&(n.push(G),p.push(M)),H&&I&&(q[L+M]=!0),!r(F,G,L,M))return!1}return!0}(g,i,"$1","$2")}function j(a,b){if(0===b.length)return!0;var c,d,e,f;for(c=0,d=a.length;d>c;++c)if(k(a[c],b[0])){for(e=0,f=b.length;f>e;++e)if(!k(a[c+e],b[e]))return!1;return!0}return!1}var k,l=Object.prototype,m="undefined"!=typeof document&&document.createElement("div");return k=function n(a,c){if(c&&"function"==typeof c.test)return c.test(a);if("function"==typeof c)return c(a)===!0;if("string"==typeof c){c=c.toLowerCase();var d="string"==typeof a||!!a;return d&&String(a).toLowerCase().indexOf(c)>=0}if("number"==typeof c)return c===a;if("boolean"==typeof c)return c===a;if("Array"===b(a)&&"Array"===b(c))return j(a,c);if(c&&"object"==typeof c){var e;for(e in c){var f=a[e];if("undefined"==typeof f&&"function"==typeof a.getAttribute&&(f=a.getAttribute(e)),"undefined"==typeof f||!n(f,c[e]))return!1}return!0}throw new Error("Matcher was not a string, a number, a function, a boolean or an object")},{isArguments:c,isElement:d,isDate:f,isNegZero:g,identical:h,deepEqual:i,match:k,keys:e}})},{}],65:[function(a,b,c){(function(){var a=this,d=a._,e={},f=Array.prototype,g=Object.prototype,h=Function.prototype,i=f.push,j=f.slice,k=f.concat,l=g.toString,m=g.hasOwnProperty,n=f.forEach,o=f.map,p=f.reduce,q=f.reduceRight,r=f.filter,s=f.every,t=f.some,u=f.indexOf,v=f.lastIndexOf,w=Array.isArray,x=Object.keys,y=h.bind,z=function(a){return a instanceof z?a:this instanceof z?void(this._wrapped=a):new z(a)};"undefined"!=typeof c?("undefined"!=typeof b&&b.exports&&(c=b.exports=z),c._=z):a._=z,z.VERSION="1.6.0";var A=z.each=z.forEach=function(a,b,c){if(null==a)return a;if(n&&a.forEach===n)a.forEach(b,c);else if(a.length===+a.length){for(var d=0,f=a.length;f>d;d++)if(b.call(c,a[d],d,a)===e)return}else for(var g=z.keys(a),d=0,f=g.length;f>d;d++)if(b.call(c,a[g[d]],g[d],a)===e)return;return a};z.map=z.collect=function(a,b,c){var d=[];return null==a?d:o&&a.map===o?a.map(b,c):(A(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var B="Reduce of empty array with no initial value";z.reduce=z.foldl=z.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),p&&a.reduce===p)return d&&(b=z.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(A(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(B);return c},z.reduceRight=z.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),q&&a.reduceRight===q)return d&&(b=z.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=z.keys(a);f=g.length}if(A(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(B);return c},z.find=z.detect=function(a,b,c){var d;return C(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},z.filter=z.select=function(a,b,c){var d=[];return null==a?d:r&&a.filter===r?a.filter(b,c):(A(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},z.reject=function(a,b,c){return z.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},z.every=z.all=function(a,b,c){b||(b=z.identity);var d=!0;return null==a?d:s&&a.every===s?a.every(b,c):(A(a,function(a,f,g){return(d=d&&b.call(c,a,f,g))?void 0:e}),!!d)};var C=z.some=z.any=function(a,b,c){b||(b=z.identity);var d=!1;return null==a?d:t&&a.some===t?a.some(b,c):(A(a,function(a,f,g){return d||(d=b.call(c,a,f,g))?e:void 0}),!!d)};z.contains=z.include=function(a,b){return null==a?!1:u&&a.indexOf===u?-1!=a.indexOf(b):C(a,function(a){return a===b})},z.invoke=function(a,b){var c=j.call(arguments,2),d=z.isFunction(b);return z.map(a,function(a){return(d?b:a[b]).apply(a,c)})},z.pluck=function(a,b){return z.map(a,z.property(b))},z.where=function(a,b){return z.filter(a,z.matches(b))},z.findWhere=function(a,b){return z.find(a,z.matches(b))},z.max=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},z.min=function(a,b,c){if(!b&&z.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return A(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},z.shuffle=function(a){var b,c=0,d=[];return A(a,function(a){b=z.random(c++),d[c-1]=d[b],d[b]=a}),d},z.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=z.values(a)),a[z.random(a.length-1)]):z.shuffle(a).slice(0,Math.max(0,b))};var D=function(a){return null==a?z.identity:z.isFunction(a)?a:z.property(a) +};z.sortBy=function(a,b,c){return b=D(b),z.pluck(z.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var E=function(a){return function(b,c,d){var e={};return c=D(c),A(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};z.groupBy=E(function(a,b,c){z.has(a,b)?a[b].push(c):a[b]=[c]}),z.indexBy=E(function(a,b,c){a[b]=c}),z.countBy=E(function(a,b){z.has(a,b)?a[b]++:a[b]=1}),z.sortedIndex=function(a,b,c,d){c=D(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:j.call(a,0,b)},z.initial=function(a,b,c){return j.call(a,0,a.length-(null==b||c?1:b))},z.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:j.call(a,Math.max(a.length-b,0))},z.rest=z.tail=z.drop=function(a,b,c){return j.call(a,null==b||c?1:b)},z.compact=function(a){return z.filter(a,z.identity)};var F=function(a,b,c){return b&&z.every(a,z.isArray)?k.apply(c,a):(A(a,function(a){z.isArray(a)||z.isArguments(a)?b?i.apply(c,a):F(a,b,c):c.push(a)}),c)};z.flatten=function(a,b){return F(a,b,[])},z.without=function(a){return z.difference(a,j.call(arguments,1))},z.partition=function(a,b){var c=[],d=[];return A(a,function(a){(b(a)?c:d).push(a)}),[c,d]},z.uniq=z.unique=function(a,b,c,d){z.isFunction(b)&&(d=c,c=b,b=!1);var e=c?z.map(a,c,d):a,f=[],g=[];return A(e,function(c,d){(b?d&&g[g.length-1]===c:z.contains(g,c))||(g.push(c),f.push(a[d]))}),f},z.union=function(){return z.uniq(z.flatten(arguments,!0))},z.intersection=function(a){var b=j.call(arguments,1);return z.filter(z.uniq(a),function(a){return z.every(b,function(b){return z.contains(b,a)})})},z.difference=function(a){var b=k.apply(f,j.call(arguments,1));return z.filter(a,function(a){return!z.contains(b,a)})},z.zip=function(){for(var a=z.max(z.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=z.pluck(arguments,""+c);return b},z.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},z.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=z.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(u&&a.indexOf===u)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},z.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(v&&a.lastIndexOf===v)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},z.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var G=function(){};z.bind=function(a,b){var c,d;if(y&&a.bind===y)return y.apply(a,j.call(arguments,1));if(!z.isFunction(a))throw new TypeError;return c=j.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(j.call(arguments)));G.prototype=a.prototype;var e=new G;G.prototype=null;var f=a.apply(e,c.concat(j.call(arguments)));return Object(f)===f?f:e}},z.partial=function(a){var b=j.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===z&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},z.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=z.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=z.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},z.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},z.wrap=function(a,b){return z.partial(b,a)},z.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},z.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},z.keys=function(a){if(!z.isObject(a))return[];if(x)return x(a);var b=[];for(var c in a)z.has(a,c)&&b.push(c);return b},z.values=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},z.pairs=function(a){for(var b=z.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},z.invert=function(a){for(var b={},c=z.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},z.functions=z.methods=function(a){var b=[];for(var c in a)z.isFunction(a[c])&&b.push(c);return b.sort()},z.extend=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},z.pick=function(a){var b={},c=k.apply(f,j.call(arguments,1));return A(c,function(c){c in a&&(b[c]=a[c])}),b},z.omit=function(a){var b={},c=k.apply(f,j.call(arguments,1));for(var d in a)z.contains(c,d)||(b[d]=a[d]);return b},z.defaults=function(a){return A(j.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},z.clone=function(a){return z.isObject(a)?z.isArray(a)?a.slice():z.extend({},a):a},z.tap=function(a,b){return b(a),a};var H=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof z&&(a=a._wrapped),b instanceof z&&(b=b._wrapped);var e=l.call(a);if(e!=l.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(z.isFunction(g)&&g instanceof g&&z.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,j=!0;if("[object Array]"==e){if(i=a.length,j=i==b.length)for(;i--&&(j=H(a[i],b[i],c,d)););}else{for(var k in a)if(z.has(a,k)&&(i++,!(j=z.has(b,k)&&H(a[k],b[k],c,d))))break;if(j){for(k in b)if(z.has(b,k)&&!i--)break;j=!i}}return c.pop(),d.pop(),j};z.isEqual=function(a,b){return H(a,b,[],[])},z.isEmpty=function(a){if(null==a)return!0;if(z.isArray(a)||z.isString(a))return 0===a.length;for(var b in a)if(z.has(a,b))return!1;return!0},z.isElement=function(a){return!(!a||1!==a.nodeType)},z.isArray=w||function(a){return"[object Array]"==l.call(a)},z.isObject=function(a){return a===Object(a)},A(["Arguments","Function","String","Number","Date","RegExp"],function(a){z["is"+a]=function(b){return l.call(b)=="[object "+a+"]"}}),z.isArguments(arguments)||(z.isArguments=function(a){return!(!a||!z.has(a,"callee"))}),"function"!=typeof/./&&(z.isFunction=function(a){return"function"==typeof a}),z.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},z.isNaN=function(a){return z.isNumber(a)&&a!=+a},z.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==l.call(a)},z.isNull=function(a){return null===a},z.isUndefined=function(a){return void 0===a},z.has=function(a,b){return m.call(a,b)},z.noConflict=function(){return a._=d,this},z.identity=function(a){return a},z.constant=function(a){return function(){return a}},z.property=function(a){return function(b){return b[a]}},z.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},z.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},z.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},z.now=Date.now||function(){return(new Date).getTime()};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=z.invert(I.escape);var J={escape:new RegExp("["+z.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+z.keys(I.unescape).join("|")+")","g")};z.each(["escape","unescape"],function(a){z[a]=function(b){return null==b?"":(""+b).replace(J[a],function(b){return I[a][b]})}}),z.result=function(a,b){if(null==a)return void 0;var c=a[b];return z.isFunction(c)?c.call(a):c},z.mixin=function(a){A(z.functions(a),function(b){var c=z[b]=a[b];z.prototype[b]=function(){var a=[this._wrapped];return i.apply(a,arguments),O.call(this,c.apply(z,a))}})};var K=0;z.uniqueId=function(a){var b=++K+"";return a?a+b:b},z.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,M={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},N=/\\|'|\r|\n|\t|\u2028|\u2029/g;z.template=function(a,b,c){var d;c=z.defaults({},c,z.templateSettings);var e=new RegExp([(c.escape||L).source,(c.interpolate||L).source,(c.evaluate||L).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(N,function(a){return"\\"+M[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,z);var i=function(a){return d.call(this,a,z)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},z.chain=function(a){return z(a).chain()};var O=function(a){return this._chain?z(a).chain():a};z.mixin(z),A(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=f[a];z.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],O.call(this,c)}}),A(["concat","join","slice"],function(a){var b=f[a];z.prototype[a]=function(){return O.call(this,b.apply(this._wrapped,arguments))}}),z.extend(z.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return z})}).call(this)},{}],66:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:17,sinon:50,"sinon-chai":49,underscore:65}],67:[function(a){var b,c,d,e,f,g,h,i;d=a("chai"),e=d.expect,f=d.should(),g=a("sinon"),h=a("sinon-chai"),i=a("underscore"),d.use(h),c=a("../lib/Frameworks/TextYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee")},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/TextYatta.coffee":4,chai:17,sinon:50,"sinon-chai":49,underscore:65}],68:[function(a){var b,c,d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}};e=a("chai"),f=e.expect,g=e.should(),h=a("sinon"),i=a("sinon-chai"),j=a("underscore"),e.use(i),d=a("../lib/Frameworks/JsonYatta.coffee"),b=a("../lib/Connectors/TestConnector.coffee"),c=function(){function a(){this.applyRandomOp=k(this.applyRandomOp,this),this.generateRandomOp=k(this.generateRandomOp,this),this.generateDeleteOp=k(this.generateDeleteOp,this),this.generateReplaceOp=k(this.generateReplaceOp,this),this.generateInsertOp=k(this.generateInsertOp,this),this.number_of_test_cases_multiplier=1,this.repeat_this=10*this.number_of_test_cases_multiplier,this.doSomething_amount=200*this.number_of_test_cases_multiplier,this.number_of_engines=12+this.number_of_test_cases_multiplier-1,this.time=0,this.ops=0,this.time_now=0,this.reinitialize()}return a.prototype.reinitialize=function(){var a,c,e,f;for(this.users=[],this.Connector=b(this.users),this.users.push(new d(0,this.Connector)),this.users[0].val("name","initial"),f=[],a=c=1,e=this.number_of_engines;e>=1?e>c:c>e;a=e>=1?++c:--c)f.push(this.users.push(new d(a,this.Connector)));return f},a.prototype.getSomeUser=function(){var a;return a=j.random(0,this.users.length-1),this.users[a]},a.prototype.getRandomText=function(){var a,b,c,d;return a="abcdefghijklmnopqrstuvwxyz",b=j.random(0,10),c=a[j.random(0,a.length-1)],d="",j(b).times(function(){return d+=c}),d},a.prototype.generateInsertOp=function(a){var b;return b=j.random(0,this.users[a].val("name").val().length-1),this.users[a].val("name").insertText(b,this.getRandomText()),null},a.prototype.generateReplaceOp=function(a){return this.users[a].val("name").replaceText(this.getRandomText()),null},a.prototype.generateDeleteOp=function(a){var b,c,d;return void(this.users[a].val("name").val().length>0&&(d=j.random(0,this.users[a].val("name").val().length-1),b=1,c=this.users[a].val("name").deleteText(d,b)))},a.prototype.generateRandomOp=function(a){var b,c,d;return d=[this.generateDeleteOp,this.generateInsertOp,this.generateReplaceOp],b=j.random(d.length-1),c=d[b](a)},a.prototype.applyRandomOp=function(a){var b;return b=this.users[a],b.getConnector().flushOneRandom()},a.prototype.doSomething=function(){var a,b,c;return c=j.random(this.number_of_engines-1),b=[this.applyRandomOp,this.generateRandomOp],a=j.random(b.length-1),b[a](c)},a.prototype.flushAll=function(){var a,b,c,d,e,f;for(e=this.users,f=[],b=c=0,d=e.length;d>c;b=++c)a=e[b],f.push(a.getConnector().flushAll());return f},a.prototype.compareAll=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;for(this.flushAll(),this.time+=(new Date).getTime()-this.time_now,d=0,b=i=0,m=this.users.length;m>=0?m>i:i>m;b=m>=0?++i:--i)d+=this.users[b].getConnector().getOpsInExecutionOrder().length;for(this.ops+=d*this.users.length,f=Math.floor(this.ops/this.time),null!=a&&console.log(""+a+"/"+this.repeat_this+": Every collaborator ("+this.users.length+") applied "+this.number_of_created_operations+" ops in a different order."+(" Over all we consumed "+this.ops+" operations in "+this.time/1e3+" seconds ("+f+" ops/msek).")),o=[],b=j=0,n=this.users.length-1;n>=0?n>j:j>n;b=n>=0?++j:--j)if(this.users[b].val("name").val()!==this.users[b+1].val("name").val()){for(g=function(a,b){var c,d,e,f,g,h,i,j;for(e=this.users[a].getConnector().getOpsInExecutionOrder(),g=0,i=e.length;i>g;g++)f=e[g],console.log(JSON.stringify(f));for(console.log(""),f="ops = [",c=h=0,j=e.length;j>h;c=++h)d=e[c],0!==c&&(f+=", "),f+="op"+c;return f+="]",console.log(f),console.log("@users[@last_user].ot.applyOps ops"),console.log("expect(@users[@last_user].ot.val('name')).to.equal(\""+users[b].val("name")+'")'),e},console.log(""),console.log("Found an OT Puzzle!"),console.log("OT states:"),c=k=0,l=users.length;l>k;c=++k)h=users[c],console.log("OT"+c+": "+h.val("name"));console.log("\nOT execution order ("+b+","+(b+1)+"):"),g(b,b+1),console.log(""),e=g(b+1,b),o.push(console.log(""))}else o.push(void 0);return o},a.prototype.run=function(){var a,b,c,d,e,f,g;for(console.log(""),g=[],b=c=1,e=this.repeat_this;e>=1?e>=c:c>=e;b=e>=1?++c:--c){for(this.time_now=(new Date).getTime(),a=d=1,f=this.doSomething_amount;f>=1?f>=d:d>=f;a=f>=1?++d:--d)this.doSomething();this.compareAll(b),g.push(this.reinitialize())}return g},a}(),describe("JsonYatta",function(){return beforeEach(function(a){return this.yTest=new c,a()}),it("has a JsonWrapper",function(){var a,b;return b=this.yTest.getSomeUser().root_element,b.val("x","dtrn","immutable"),b.val("set",{x:"x"},"immutable"),a=b.value,a.x,a.set={y:""},a.x,a.set,a.set.x,f(a.x).to.equal("dtrn"),f(a.set.x).to.equal("x")}),it("can handle creaton of complex json",function(){return this.yTest.getSomeUser().val("x",{a:"b"}),this.yTest.getSomeUser().val("a",{a:{q:"dtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"}}),this.yTest.getSomeUser().val("b",{a:{}}),this.yTest.getSomeUser().val("c",{a:"b"}),this.yTest.compareAll()}),it("handles some immutable tests",function(){return this.yTest.getSomeUser().val("string","text","immutable"),this.yTest.getSomeUser().val("number",4,"immutable"),this.yTest.getSomeUser().val("object",{q:"rr"},"immutable"),this.yTest.compareAll(),f(this.yTest.getSomeUser().val("string")).to.equal("text"),f(this.yTest.getSomeUser().val("number")).to.equal(4),f(this.yTest.getSomeUser().val("object").val("q")).to.equal("rr")}),it("can handle many engines, many operations, concurrently (random)",function(){return this.yTest.run()})})},{"../lib/Connectors/TestConnector.coffee":1,"../lib/Frameworks/JsonYatta.coffee":3,chai:17,sinon:50,"sinon-chai":49,underscore:65}]},{},[66,67,68]); \ No newline at end of file diff --git a/dest/lib/lib/Connectors/IwcConnector.js b/dest/lib/Connectors/IwcConnector.js similarity index 92% rename from dest/lib/lib/Connectors/IwcConnector.js rename to dest/lib/Connectors/IwcConnector.js index 95ef4221..32a3ee31 100644 --- a/dest/lib/lib/Connectors/IwcConnector.js +++ b/dest/lib/Connectors/IwcConnector.js @@ -4,16 +4,14 @@ createIwcConnector = function(callback) { var IwcConnector, duiClient, get_root_intent, init, iwcHandler, received_HB, root_element; iwcHandler = {}; duiClient = new DUIClient(); - duiClient.connect((function(_this) { - return function(intent) { - var _ref; - return (_ref = iwcHandler[intent.action]) != null ? _ref.map(function(f) { - return setTimeout(function() { - return f(intent); - }, 0); - }) : void 0; - }; - })(this)); + duiClient.connect(function(intent) { + var _ref; + return (_ref = iwcHandler[intent.action]) != null ? _ref.map(function(f) { + return setTimeout(function() { + return f(intent); + }, 0); + }) : void 0; + }); duiClient.initOK(); root_element = null; received_HB = null; diff --git a/dest/lib/Connectors/IwcConnector.js.map b/dest/lib/Connectors/IwcConnector.js.map new file mode 100644 index 00000000..fe55154c --- /dev/null +++ b/dest/lib/Connectors/IwcConnector.js.map @@ -0,0 +1,10 @@ +{ + "version": 3, + "file": "IwcConnector.js", + "sourceRoot": "../../../lib/Connectors/", + "sources": [ + "IwcConnector.coffee" + ], + "names": [], + "mappings": "AACA,IAAA,kBAAA;;AAAA,kBAAA,GAAqB,SAAC,QAAD,GAAA;AACnB,MAAA,qFAAA;AAAA,EAAA,UAAA,GAAa,EAAb,CAAA;AAAA,EACA,SAAA,GAAgB,IAAA,SAAA,CAAA,CADhB,CAAA;AAAA,EAGA,SAAS,CAAC,OAAV,CAAkB,SAAC,MAAD,GAAA;AAGhB,QAAA,IAAA;4DAAyB,CAAE,GAA3B,CAA+B,SAAC,CAAD,GAAA;aAC7B,UAAA,CAAW,SAAA,GAAA;eACP,CAAA,CAAE,MAAF,EADO;MAAA,CAAX,EAEI,CAFJ,EAD6B;IAAA,CAA/B,WAHgB;EAAA,CAAlB,CAHA,CAAA;AAAA,EAWA,SAAS,CAAC,MAAV,CAAA,CAXA,CAAA;AAAA,EAaA,YAAA,GAAe,IAbf,CAAA;AAAA,EAcA,WAAA,GAAc,IAdd,CAAA;AAAA,EAqBM;AACS,IAAA,sBAAE,MAAF,EAAW,EAAX,EAAgB,kBAAhB,EAAqC,KAArC,GAAA;AACX,UAAA,gCAAA;AAAA,MADY,IAAC,CAAA,SAAA,MACb,CAAA;AAAA,MADqB,IAAC,CAAA,KAAA,EACtB,CAAA;AAAA,MAD0B,IAAC,CAAA,qBAAA,kBAC3B,CAAA;AAAA,MAD+C,IAAC,CAAA,QAAA,KAChD,CAAA;AAAA,MAAA,IAAC,CAAA,SAAD,GAAa,SAAb,CAAA;AAAA,MACA,IAAC,CAAA,UAAD,GAAc,UADd,CAAA;AAAA,MAGA,KAAA,GAAQ,CAAA,SAAA,KAAA,GAAA;eAAA,SAAC,CAAD,GAAA;iBACN,KAAC,CAAA,IAAD,CAAM,CAAN,EADM;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAHR,CAAA;AAAA,MAKA,IAAC,CAAA,kBAAkB,CAAC,IAApB,CAAyB,KAAzB,CALA,CAAA;AAAA,MAOA,QAAA,GAAW,CAAA,SAAA,KAAA,GAAA;eAAA,SAAC,MAAD,GAAA;AACT,cAAA,CAAA;AAAA,UAAA,CAAA,GAAI,MAAM,CAAC,MAAX,CAAA;iBACA,KAAC,CAAA,OAAD,CAAS,CAAT,EAFS;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAPX,CAAA;AAAA,MAUA,IAAC,CAAA,UAAW,CAAA,qBAAA,CAAZ,GAAqC,CAAC,QAAD,CAVrC,CAAA;AAYA,MAAA,IAAG,oBAAH;AACE,QAAA,IAAC,CAAA,MAAM,CAAC,QAAR,CAAiB,WAAjB,CAAA,CADF;OAZA;AAAA,MAeA,eAAA,GAAkB,CAAA,SAAA,KAAA,GAAA;eAAA,SAAA,GAAA;AAChB,cAAA,IAAA;AAAA,UAAA,IAAA,GAAO;AAAA,YACH,YAAA,EAAe,KAAC,CAAA,KAAK,CAAC,cAAP,CAAA,CADZ;AAAA,YAEH,EAAA,EAAK,KAAC,CAAA,KAAK,CAAC,gBAAP,CAAA,CAAyB,CAAC,OAA1B,CAAA,CAFF;WAAP,CAAA;iBAIA,KAAC,CAAA,aAAD,CAAe,yBAAf,EAA0C,IAA1C,EALgB;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAflB,CAAA;AAAA,MAqBA,IAAC,CAAA,UAAW,CAAA,wBAAA,CAAZ,GAAwC,CAAC,eAAD,CArBxC,CADW;IAAA,CAAb;;AAAA,2BAwBA,cAAA,GAAgB,SAAA,GAAA;aACd,aADc;IAAA,CAxBhB,CAAA;;AAAA,2BA2BA,IAAA,GAAM,SAAC,CAAD,GAAA;AACJ,MAAA,IAAG,CAAC,CAAC,GAAG,CAAC,OAAN,KAAiB,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,CAAjB,IAAqC,CAAC,MAAA,CAAA,CAAQ,CAAC,GAAG,CAAC,SAAb,KAA4B,QAA7B,CAAxC;eACE,IAAC,CAAA,aAAD,CAAe,qBAAf,EAAsC,CAAtC,EADF;OADI;IAAA,CA3BN,CAAA;;AAAA,2BA+BA,OAAA,GAAS,SAAC,CAAD,GAAA;AACP,MAAA,IAAG,CAAC,CAAC,GAAG,CAAC,OAAN,KAAmB,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,CAAtB;eACE,IAAC,CAAA,MAAM,CAAC,OAAR,CAAgB,CAAhB,EADF;OADO;IAAA,CA/BT,CAAA;;AAAA,2BAmCA,aAAA,GAAe,SAAC,WAAD,EAAc,OAAd,GAAA;AACb,UAAA,MAAA;AAAA,MAAA,MAAA,GACE;AAAA,QAAA,MAAA,EAAQ,WAAR;AAAA,QACA,SAAA,EAAW,EADX;AAAA,QAEA,IAAA,EAAM,EAFN;AAAA,QAGA,QAAA,EAAU,EAHV;AAAA,QAIA,MAAA,EAAQ,OAJR;OADF,CAAA;aAOA,IAAC,CAAA,SAAS,CAAC,UAAX,CAAsB,MAAtB,EARa;IAAA,CAnCf,CAAA;;AAAA,2BA6CA,IAAA,GAAM,SAAA,GAAA;AACJ,YAAU,IAAA,KAAA,CAAM,uBAAN,CAAV,CADI;IAAA,CA7CN,CAAA;;wBAAA;;MAtBF,CAAA;AAAA,EAsEA,eAAA,GACE;AAAA,IAAA,MAAA,EAAQ,wBAAR;AAAA,IACA,SAAA,EAAW,EADX;AAAA,IAEA,IAAA,EAAM,EAFN;AAAA,IAGA,QAAA,EAAU,EAHV;AAAA,IAIA,MAAA,EAAQ,EAJR;GAvEF,CAAA;AAAA,EA6EA,IAAA,GAAO,SAAA,GAAA;AACL,QAAA,kCAAA;AAAA,IAAA,SAAS,CAAC,UAAV,CAAqB,eAArB,CAAA,CAAA;AAAA,IAEA,cAAA,GAAiB,KAFjB,CAAA;AAAA,IAGA,kBAAA,GAAqB,SAAC,IAAD,GAAA;AACnB,UAAA,gBAAA;AAAA,MAAA,gBAAA,GAAmB,SAAS,CAAC,YAAV,CAAA,CAAwB,CAAC,cAA5C,CAAA;AAAA,MACA,YAAA,kBAAe,IAAI,CAAE,MAAM,CAAC,qBAD5B,CAAA;AAAA,MAEA,WAAA,kBAAc,IAAI,CAAE,MAAM,CAAC,WAF3B,CAAA;AAGA,MAAA,IAAG,CAAA,cAAH;AACE,QAAA,cAAA,GAAiB,IAAjB,CAAA;eACA,QAAA,CAAS,YAAT,EAAuB,gBAAvB,EAFF;OAJmB;IAAA,CAHrB,CAAA;AAAA,IAUA,UAAW,CAAA,yBAAA,CAAX,GAAwC,CAAC,kBAAD,CAVxC,CAAA;WAWA,UAAA,CAAW,kBAAX,EAA+B,GAA/B,EAZK;EAAA,CA7EP,CAAA;AAAA,EA2FA,UAAA,CAAW,IAAX,EAAkB,IAAI,CAAC,MAAL,CAAA,CAAA,GAAc,IAAhC,CA3FA,CAAA;SA6FA,OA9FmB;AAAA,CAArB,CAAA;;AAAA,MA+FM,CAAC,OAAP,GAAiB,kBA/FjB,CAAA;;;EAgGA,MAAM,CAAE,eAAR,GAA0B;CAhG1B" +} \ No newline at end of file diff --git a/dest/lib/lib/Connectors/TestConnector.js b/dest/lib/Connectors/TestConnector.js similarity index 100% rename from dest/lib/lib/Connectors/TestConnector.js rename to dest/lib/Connectors/TestConnector.js diff --git a/dest/lib/lib/Connectors/TestConnector.js.map b/dest/lib/Connectors/TestConnector.js.map similarity index 98% rename from dest/lib/lib/Connectors/TestConnector.js.map rename to dest/lib/Connectors/TestConnector.js.map index 86ac66b9..2ec4d76a 100644 --- a/dest/lib/lib/Connectors/TestConnector.js.map +++ b/dest/lib/Connectors/TestConnector.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "TestConnector.js", - "sourceRoot": "../../../../lib/Connectors/", + "sourceRoot": "../../../lib/Connectors/", "sources": [ "TestConnector.coffee" ], diff --git a/dest/lib/lib/Engine.js b/dest/lib/Engine.js similarity index 100% rename from dest/lib/lib/Engine.js rename to dest/lib/Engine.js diff --git a/dest/lib/lib/Engine.js.map b/dest/lib/Engine.js.map similarity index 98% rename from dest/lib/lib/Engine.js.map rename to dest/lib/Engine.js.map index 409fa191..9d987d4b 100644 --- a/dest/lib/lib/Engine.js.map +++ b/dest/lib/Engine.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "Engine.js", - "sourceRoot": "../../../lib/", + "sourceRoot": "../../lib/", "sources": [ "Engine.coffee" ], diff --git a/dest/lib/lib/Frameworks/JsonYatta.js b/dest/lib/Frameworks/JsonYatta.js similarity index 100% rename from dest/lib/lib/Frameworks/JsonYatta.js rename to dest/lib/Frameworks/JsonYatta.js diff --git a/dest/lib/lib/Frameworks/JsonYatta.js.map b/dest/lib/Frameworks/JsonYatta.js.map similarity index 97% rename from dest/lib/lib/Frameworks/JsonYatta.js.map rename to dest/lib/Frameworks/JsonYatta.js.map index a31d93d3..38ab74bb 100644 --- a/dest/lib/lib/Frameworks/JsonYatta.js.map +++ b/dest/lib/Frameworks/JsonYatta.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "JsonYatta.js", - "sourceRoot": "../../../../lib/Frameworks/", + "sourceRoot": "../../../lib/Frameworks/", "sources": [ "JsonYatta.coffee" ], diff --git a/dest/lib/lib/Frameworks/TextYatta.js b/dest/lib/Frameworks/TextYatta.js similarity index 100% rename from dest/lib/lib/Frameworks/TextYatta.js rename to dest/lib/Frameworks/TextYatta.js diff --git a/dest/lib/lib/Frameworks/TextYatta.js.map b/dest/lib/Frameworks/TextYatta.js.map similarity index 97% rename from dest/lib/lib/Frameworks/TextYatta.js.map rename to dest/lib/Frameworks/TextYatta.js.map index e893a569..b14ce3f4 100644 --- a/dest/lib/lib/Frameworks/TextYatta.js.map +++ b/dest/lib/Frameworks/TextYatta.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "TextYatta.js", - "sourceRoot": "../../../../lib/Frameworks/", + "sourceRoot": "../../../lib/Frameworks/", "sources": [ "TextYatta.coffee" ], diff --git a/dest/lib/lib/HistoryBuffer.js b/dest/lib/HistoryBuffer.js similarity index 100% rename from dest/lib/lib/HistoryBuffer.js rename to dest/lib/HistoryBuffer.js diff --git a/dest/lib/lib/HistoryBuffer.js.map b/dest/lib/HistoryBuffer.js.map similarity index 98% rename from dest/lib/lib/HistoryBuffer.js.map rename to dest/lib/HistoryBuffer.js.map index 9a1e3dec..dc8190d7 100644 --- a/dest/lib/lib/HistoryBuffer.js.map +++ b/dest/lib/HistoryBuffer.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "HistoryBuffer.js", - "sourceRoot": "../../../lib/", + "sourceRoot": "../../lib/", "sources": [ "HistoryBuffer.coffee" ], diff --git a/dest/lib/lib/Types/BasicTypes.js b/dest/lib/Types/BasicTypes.js similarity index 100% rename from dest/lib/lib/Types/BasicTypes.js rename to dest/lib/Types/BasicTypes.js diff --git a/dest/lib/lib/Types/BasicTypes.js.map b/dest/lib/Types/BasicTypes.js.map similarity index 99% rename from dest/lib/lib/Types/BasicTypes.js.map rename to dest/lib/Types/BasicTypes.js.map index 3a9d3cd4..cfb0bf38 100644 --- a/dest/lib/lib/Types/BasicTypes.js.map +++ b/dest/lib/Types/BasicTypes.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "BasicTypes.js", - "sourceRoot": "../../../../lib/Types/", + "sourceRoot": "../../../lib/Types/", "sources": [ "BasicTypes.coffee" ], diff --git a/dest/lib/lib/Types/JsonTypes.js b/dest/lib/Types/JsonTypes.js similarity index 100% rename from dest/lib/lib/Types/JsonTypes.js rename to dest/lib/Types/JsonTypes.js diff --git a/dest/lib/lib/Types/JsonTypes.js.map b/dest/lib/Types/JsonTypes.js.map similarity index 99% rename from dest/lib/lib/Types/JsonTypes.js.map rename to dest/lib/Types/JsonTypes.js.map index c4372926..984d3ec5 100644 --- a/dest/lib/lib/Types/JsonTypes.js.map +++ b/dest/lib/Types/JsonTypes.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "JsonTypes.js", - "sourceRoot": "../../../../lib/Types/", + "sourceRoot": "../../../lib/Types/", "sources": [ "JsonTypes.coffee" ], diff --git a/dest/lib/lib/Types/StructuredTypes.js b/dest/lib/Types/StructuredTypes.js similarity index 100% rename from dest/lib/lib/Types/StructuredTypes.js rename to dest/lib/Types/StructuredTypes.js diff --git a/dest/lib/lib/Types/StructuredTypes.js.map b/dest/lib/Types/StructuredTypes.js.map similarity index 99% rename from dest/lib/lib/Types/StructuredTypes.js.map rename to dest/lib/Types/StructuredTypes.js.map index fbba4b8f..af90d458 100644 --- a/dest/lib/lib/Types/StructuredTypes.js.map +++ b/dest/lib/Types/StructuredTypes.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "StructuredTypes.js", - "sourceRoot": "../../../../lib/Types/", + "sourceRoot": "../../../lib/Types/", "sources": [ "StructuredTypes.coffee" ], diff --git a/dest/lib/lib/Types/TextTypes.js b/dest/lib/Types/TextTypes.js similarity index 100% rename from dest/lib/lib/Types/TextTypes.js rename to dest/lib/Types/TextTypes.js diff --git a/dest/lib/lib/Types/TextTypes.js.map b/dest/lib/Types/TextTypes.js.map similarity index 99% rename from dest/lib/lib/Types/TextTypes.js.map rename to dest/lib/Types/TextTypes.js.map index b6a4f66b..09b264a7 100644 --- a/dest/lib/lib/Types/TextTypes.js.map +++ b/dest/lib/Types/TextTypes.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "TextTypes.js", - "sourceRoot": "../../../../lib/Types/", + "sourceRoot": "../../../lib/Types/", "sources": [ "TextTypes.coffee" ], diff --git a/dest/lib/lib/Types/XmlTypes.js b/dest/lib/Types/XmlTypes.js similarity index 100% rename from dest/lib/lib/Types/XmlTypes.js rename to dest/lib/Types/XmlTypes.js diff --git a/dest/lib/lib/Types/XmlTypes.js.map b/dest/lib/Types/XmlTypes.js.map similarity index 74% rename from dest/lib/lib/Types/XmlTypes.js.map rename to dest/lib/Types/XmlTypes.js.map index d134878c..943bc6f5 100644 --- a/dest/lib/lib/Types/XmlTypes.js.map +++ b/dest/lib/Types/XmlTypes.js.map @@ -1,7 +1,7 @@ { "version": 3, "file": "XmlTypes.js", - "sourceRoot": "../../../../lib/Types/", + "sourceRoot": "../../../lib/Types/", "sources": [ "XmlTypes.coffee" ], diff --git a/dest/lib/lib/Connectors/IwcConnector.js.map b/dest/lib/lib/Connectors/IwcConnector.js.map deleted file mode 100644 index 207b67d9..00000000 --- a/dest/lib/lib/Connectors/IwcConnector.js.map +++ /dev/null @@ -1,10 +0,0 @@ -{ - "version": 3, - "file": "IwcConnector.js", - "sourceRoot": "../../../../lib/Connectors/", - "sources": [ - "IwcConnector.coffee" - ], - "names": [], - "mappings": "AACA,IAAA,kBAAA;;AAAA,kBAAA,GAAqB,SAAC,QAAD,GAAA;AACnB,MAAA,qFAAA;AAAA,EAAA,UAAA,GAAa,EAAb,CAAA;AAAA,EACA,SAAA,GAAgB,IAAA,SAAA,CAAA,CADhB,CAAA;AAAA,EAGA,SAAS,CAAC,OAAV,CAAkB,CAAA,SAAA,KAAA,GAAA;WAAA,SAAC,MAAD,GAAA;AAGhB,UAAA,IAAA;8DAAyB,CAAE,GAA3B,CAA+B,SAAC,CAAD,GAAA;eAC7B,UAAA,CAAW,SAAA,GAAA;iBACP,CAAA,CAAE,MAAF,EADO;QAAA,CAAX,EAEI,CAFJ,EAD6B;MAAA,CAA/B,WAHgB;IAAA,EAAA;EAAA,CAAA,CAAA,CAAA,IAAA,CAAlB,CAHA,CAAA;AAAA,EAWA,SAAS,CAAC,MAAV,CAAA,CAXA,CAAA;AAAA,EAaA,YAAA,GAAe,IAbf,CAAA;AAAA,EAcA,WAAA,GAAc,IAdd,CAAA;AAAA,EAqBM;AACS,IAAA,sBAAE,MAAF,EAAW,EAAX,EAAgB,kBAAhB,EAAqC,KAArC,GAAA;AACX,UAAA,gCAAA;AAAA,MADY,IAAC,CAAA,SAAA,MACb,CAAA;AAAA,MADqB,IAAC,CAAA,KAAA,EACtB,CAAA;AAAA,MAD0B,IAAC,CAAA,qBAAA,kBAC3B,CAAA;AAAA,MAD+C,IAAC,CAAA,QAAA,KAChD,CAAA;AAAA,MAAA,IAAC,CAAA,SAAD,GAAa,SAAb,CAAA;AAAA,MACA,IAAC,CAAA,UAAD,GAAc,UADd,CAAA;AAAA,MAGA,KAAA,GAAQ,CAAA,SAAA,KAAA,GAAA;eAAA,SAAC,CAAD,GAAA;iBACN,KAAC,CAAA,IAAD,CAAM,CAAN,EADM;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAHR,CAAA;AAAA,MAKA,IAAC,CAAA,kBAAkB,CAAC,IAApB,CAAyB,KAAzB,CALA,CAAA;AAAA,MAOA,QAAA,GAAW,CAAA,SAAA,KAAA,GAAA;eAAA,SAAC,MAAD,GAAA;AACT,cAAA,CAAA;AAAA,UAAA,CAAA,GAAI,MAAM,CAAC,MAAX,CAAA;iBACA,KAAC,CAAA,OAAD,CAAS,CAAT,EAFS;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAPX,CAAA;AAAA,MAUA,IAAC,CAAA,UAAW,CAAA,qBAAA,CAAZ,GAAqC,CAAC,QAAD,CAVrC,CAAA;AAYA,MAAA,IAAG,oBAAH;AACE,QAAA,IAAC,CAAA,MAAM,CAAC,QAAR,CAAiB,WAAjB,CAAA,CADF;OAZA;AAAA,MAeA,eAAA,GAAkB,CAAA,SAAA,KAAA,GAAA;eAAA,SAAA,GAAA;AAChB,cAAA,IAAA;AAAA,UAAA,IAAA,GAAO;AAAA,YACH,YAAA,EAAe,KAAC,CAAA,KAAK,CAAC,cAAP,CAAA,CADZ;AAAA,YAEH,EAAA,EAAK,KAAC,CAAA,KAAK,CAAC,gBAAP,CAAA,CAAyB,CAAC,OAA1B,CAAA,CAFF;WAAP,CAAA;iBAIA,KAAC,CAAA,aAAD,CAAe,yBAAf,EAA0C,IAA1C,EALgB;QAAA,EAAA;MAAA,CAAA,CAAA,CAAA,IAAA,CAflB,CAAA;AAAA,MAqBA,IAAC,CAAA,UAAW,CAAA,wBAAA,CAAZ,GAAwC,CAAC,eAAD,CArBxC,CADW;IAAA,CAAb;;AAAA,2BAwBA,cAAA,GAAgB,SAAA,GAAA;aACd,aADc;IAAA,CAxBhB,CAAA;;AAAA,2BA2BA,IAAA,GAAM,SAAC,CAAD,GAAA;AACJ,MAAA,IAAG,CAAC,CAAC,GAAG,CAAC,OAAN,KAAiB,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,CAAjB,IAAqC,CAAC,MAAA,CAAA,CAAQ,CAAC,GAAG,CAAC,SAAb,KAA4B,QAA7B,CAAxC;eACE,IAAC,CAAA,aAAD,CAAe,qBAAf,EAAsC,CAAtC,EADF;OADI;IAAA,CA3BN,CAAA;;AAAA,2BA+BA,OAAA,GAAS,SAAC,CAAD,GAAA;AACP,MAAA,IAAG,CAAC,CAAC,GAAG,CAAC,OAAN,KAAmB,IAAC,CAAA,EAAE,CAAC,SAAJ,CAAA,CAAtB;eACE,IAAC,CAAA,MAAM,CAAC,OAAR,CAAgB,CAAhB,EADF;OADO;IAAA,CA/BT,CAAA;;AAAA,2BAmCA,aAAA,GAAe,SAAC,WAAD,EAAc,OAAd,GAAA;AACb,UAAA,MAAA;AAAA,MAAA,MAAA,GACE;AAAA,QAAA,MAAA,EAAQ,WAAR;AAAA,QACA,SAAA,EAAW,EADX;AAAA,QAEA,IAAA,EAAM,EAFN;AAAA,QAGA,QAAA,EAAU,EAHV;AAAA,QAIA,MAAA,EAAQ,OAJR;OADF,CAAA;aAOA,IAAC,CAAA,SAAS,CAAC,UAAX,CAAsB,MAAtB,EARa;IAAA,CAnCf,CAAA;;AAAA,2BA6CA,IAAA,GAAM,SAAA,GAAA;AACJ,YAAU,IAAA,KAAA,CAAM,uBAAN,CAAV,CADI;IAAA,CA7CN,CAAA;;wBAAA;;MAtBF,CAAA;AAAA,EAsEA,eAAA,GACE;AAAA,IAAA,MAAA,EAAQ,wBAAR;AAAA,IACA,SAAA,EAAW,EADX;AAAA,IAEA,IAAA,EAAM,EAFN;AAAA,IAGA,QAAA,EAAU,EAHV;AAAA,IAIA,MAAA,EAAQ,EAJR;GAvEF,CAAA;AAAA,EA6EA,IAAA,GAAO,SAAA,GAAA;AACL,QAAA,kCAAA;AAAA,IAAA,SAAS,CAAC,UAAV,CAAqB,eAArB,CAAA,CAAA;AAAA,IAEA,cAAA,GAAiB,KAFjB,CAAA;AAAA,IAGA,kBAAA,GAAqB,SAAC,IAAD,GAAA;AACnB,UAAA,gBAAA;AAAA,MAAA,gBAAA,GAAmB,SAAS,CAAC,YAAV,CAAA,CAAwB,CAAC,cAA5C,CAAA;AAAA,MACA,YAAA,kBAAe,IAAI,CAAE,MAAM,CAAC,qBAD5B,CAAA;AAAA,MAEA,WAAA,kBAAc,IAAI,CAAE,MAAM,CAAC,WAF3B,CAAA;AAGA,MAAA,IAAG,CAAA,cAAH;AACE,QAAA,cAAA,GAAiB,IAAjB,CAAA;eACA,QAAA,CAAS,YAAT,EAAuB,gBAAvB,EAFF;OAJmB;IAAA,CAHrB,CAAA;AAAA,IAUA,UAAW,CAAA,yBAAA,CAAX,GAAwC,CAAC,kBAAD,CAVxC,CAAA;WAWA,UAAA,CAAW,kBAAX,EAA+B,GAA/B,EAZK;EAAA,CA7EP,CAAA;AAAA,EA2FA,UAAA,CAAW,IAAX,EAAkB,IAAI,CAAC,MAAL,CAAA,CAAA,GAAc,IAAhC,CA3FA,CAAA;SA6FA,OA9FmB;AAAA,CAArB,CAAA;;AAAA,MA+FM,CAAC,OAAP,GAAiB,kBA/FjB,CAAA;;;EAgGA,MAAM,CAAE,eAAR,GAA0B;CAhG1B" -} \ No newline at end of file diff --git a/dest/lib/lib/ReplaceType.js b/dest/lib/lib/ReplaceType.js deleted file mode 100644 index 84a44222..00000000 --- a/dest/lib/lib/ReplaceType.js +++ /dev/null @@ -1,33 +0,0 @@ -var Replaceable, y, _, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - -y = require("Engine"); - -_ = require("underscore"); - -Replaceable = (function(_super) { - __extends(Replaceable, _super); - - function Replaceable(user_id, content) { - Replaceable.__super__.constructor.call(this, user_id, []); - this.replace(content); - } - - Replaceable.prototype.replace = function(content) { - var o, op; - o = this.HB.getLastOperation(); - op = new I(content, this.user_id, this.HB.getOperationCounter(this.user_id), o, o.next_cl); - this.HB.addOperation(op).IT(); - return op.toJson(); - }; - - Replaceable.prototype.getContent = function() { - return this.HB.getLastOperation().execute(); - }; - - return Replaceable; - -})(y.Engine); - -//# sourceMappingURL=ReplaceType.js.map diff --git a/dest/lib/lib/ReplaceType.js.map b/dest/lib/lib/ReplaceType.js.map deleted file mode 100644 index 3865d941..00000000 --- a/dest/lib/lib/ReplaceType.js.map +++ /dev/null @@ -1,10 +0,0 @@ -{ - "version": 3, - "file": "ReplaceType.js", - "sourceRoot": "../../../lib/", - "sources": [ - "ReplaceType.coffee" - ], - "names": [], - "mappings": "AACA,IAAA,iBAAA;EAAA;iSAAA;;AAAA,CAAA,GAAI,OAAA,CAAQ,QAAR,CAAJ,CAAA;;AAAA,CACA,GAAI,OAAA,CAAQ,YAAR,CADJ,CAAA;;AAAA;AAIE,gCAAA,CAAA;;AAAa,EAAA,qBAAC,OAAD,EAAU,OAAV,GAAA;AACX,IAAA,6CAAM,OAAN,EAAe,EAAf,CAAA,CAAA;AAAA,IACA,IAAC,CAAA,OAAD,CAAS,OAAT,CADA,CADW;EAAA,CAAb;;AAAA,wBAIA,OAAA,GAAS,SAAC,OAAD,GAAA;AACP,QAAA,KAAA;AAAA,IAAA,CAAA,GAAI,IAAC,CAAA,EAAE,CAAC,gBAAJ,CAAA,CAAJ,CAAA;AAAA,IACA,EAAA,GAAS,IAAA,CAAA,CAAE,OAAF,EAAW,IAAC,CAAA,OAAZ,EAAqB,IAAC,CAAA,EAAE,CAAC,mBAAJ,CAAwB,IAAC,CAAA,OAAzB,CAArB,EAAwD,CAAxD,EAA2D,CAAC,CAAC,OAA7D,CADT,CAAA;AAAA,IAEA,IAAC,CAAA,EAAE,CAAC,YAAJ,CAAiB,EAAjB,CAAoB,CAAC,EAArB,CAAA,CAFA,CAAA;WAGA,EAAE,CAAC,MAAH,CAAA,EAJO;EAAA,CAJT,CAAA;;AAAA,wBAUA,UAAA,GAAY,SAAA,GAAA;WACV,IAAC,CAAA,EAAE,CAAC,gBAAJ,CAAA,CAAsB,CAAC,OAAvB,CAAA,EADU;EAAA,CAVZ,CAAA;;qBAAA;;GADwB,CAAC,CAAC,OAH5B,CAAA" -} \ No newline at end of file diff --git a/dest/test/test/JsonYatta_test.js b/dest/test/JsonYatta_test.js similarity index 100% rename from dest/test/test/JsonYatta_test.js rename to dest/test/JsonYatta_test.js diff --git a/dest/test/test/TextYatta_test.js b/dest/test/TextYatta_test.js similarity index 100% rename from dest/test/test/TextYatta_test.js rename to dest/test/TextYatta_test.js diff --git a/dest/test/test/Yatta_test.js b/dest/test/Yatta_test.js similarity index 91% rename from dest/test/test/Yatta_test.js rename to dest/test/Yatta_test.js index 6e143192..da2f7693 100644 --- a/dest/test/test/Yatta_test.js +++ b/dest/test/Yatta_test.js @@ -28,9 +28,9 @@ this.generateReplaceOp = __bind(this.generateReplaceOp, this); this.generateInsertOp = __bind(this.generateInsertOp, this); this.number_of_test_cases_multiplier = 1; - this.repeat_this = 10 * this.number_of_test_cases_multiplier; - this.doSomething_amount = 200 * this.number_of_test_cases_multiplier; - this.number_of_engines = 12 + this.number_of_test_cases_multiplier - 1; + this.repeat_this = 1 * this.number_of_test_cases_multiplier; + this.doSomething_amount = 5000 * this.number_of_test_cases_multiplier; + this.number_of_engines = 10 + this.number_of_test_cases_multiplier - 1; this.time = 0; this.ops = 0; this.time_now = 0; @@ -133,7 +133,7 @@ this.ops += number_of_created_operations * this.users.length; ops_per_msek = Math.floor(this.ops / this.time); if (test_number != null) { - console.log(("" + test_number + "/" + this.repeat_this + ": Every collaborator (" + this.users.length + ") applied " + this.number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek).")); + console.log(("" + test_number + "/" + this.repeat_this + ": Every collaborator (" + this.users.length + ") applied " + number_of_created_operations + " ops in a different order.") + (" Over all we consumed " + this.ops + " operations in " + (this.time / 1000) + " seconds (" + ops_per_msek + " ops/msek).")); } _results = []; for (i = _j = 0, _ref1 = this.users.length - 1; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) { @@ -233,10 +233,16 @@ this.yTest.getSomeUser().val('b', { 'a': {} }); + this.yTest.getSomeUser().val('c', { + 'a': 'c' + }); this.yTest.getSomeUser().val('c', { 'a': 'b' }); - return this.yTest.compareAll(); + this.yTest.compareAll(); + this.yTest.getSomeUser().value.a.a.q.insertText(0, 'AAA'); + this.yTest.compareAll(); + return expect(this.yTest.getSomeUser().value.a.a.q.val()).to.equal("AAAdtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt"); }); it("handles some immutable tests", function() { this.yTest.getSomeUser().val('string', "text", "immutable"); diff --git a/doc/alphabetical_index.html b/doc/alphabetical_index.html index 6dd5602d..a6e78ef6 100644 --- a/doc/alphabetical_index.html +++ b/doc/alphabetical_index.html @@ -29,6 +29,16 @@ LICENSE-LGPL +
  • + + examples/README.md + +
  • +
  • + + examples/IwcJson.md + +
  • Class Listing A-Z

    @@ -332,7 +342,7 @@
    @@ -121,7 +121,7 @@ console.log(w.newProperty == "Awesome") # true! diff --git a/doc/file/lib/Connectors/IwcConnector.coffee.html b/doc/file/lib/Connectors/IwcConnector.coffee.html index 5f7f925e..973521f8 100644 --- a/doc/file/lib/Connectors/IwcConnector.coffee.html +++ b/doc/file/lib/Connectors/IwcConnector.coffee.html @@ -84,7 +84,7 @@