New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

pixi-cull

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pixi-cull - npm Package Compare versions

Comparing version 0.3.0 to 0.3.1

2

bundle/pixi-cull.js

@@ -885,5 +885,3 @@ (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){

var xStart = Math.floor(AABB.x / this.xSize);
xStart = xStart < 0 ? 0 : xStart;
var yStart = Math.floor(AABB.y / this.ySize);
yStart = yStart < 0 ? 0 : yStart;
var xEnd = Math.floor((AABB.x + AABB.width) / this.xSize);

@@ -890,0 +888,0 @@ var yEnd = Math.floor((AABB.y + AABB.height) / this.ySize);

2

bundle/pixi-cull.min.js

@@ -1,1 +0,1 @@

!function(){return function t(i,e,r){function a(n,h){if(!e[n]){if(!i[n]){var l="function"==typeof require&&require;if(!h&&l)return l(n,!0);if(s)return s(n,!0);var o=new Error("Cannot find module '"+n+"'");throw o.code="MODULE_NOT_FOUND",o}var u=e[n]={exports:{}};i[n][0].call(u.exports,function(t){return a(i[n][1][t]||t)},u,u.exports,t,i,e,r)}return e[n].exports}for(var s="function"==typeof require&&require,n=0;n<r.length;n++)a(r[n]);return a}}()({1:[function(t,i,e){"use strict";i.exports={Simple:t("./simple"),SpatialHash:t("./spatial-hash")},PIXI&&(PIXI.extras.Cull={Simple:t("./simple"),SpatialHash:t("./spatial-hash")})},{"./simple":2,"./spatial-hash":3}],2:[function(t,i,e){"use strict";var r=function(){function t(t,i){for(var e=0;e<i.length;e++){var r=i[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(i,e,r){return e&&t(i.prototype,e),r&&t(i,r),i}}();var a=function(){function t(i){!function(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}(this,t),i=i||{},this.visible=i.visible||"visible",this.calculatePIXI=void 0===i.calculatePIXI||i.calculatePIXI,this.dirtyTest=void 0===i.dirtyTest||i.dirtyTest,this.AABB=i.AABB||"AABB",this.lists=[[]]}return r(t,[{key:"addList",value:function(t,i){if(this.lists.push(t),i&&(t.staticObject=!0),this.calculatePIXI&&this.dirtyTest){var e=!0,r=!1,a=void 0;try{for(var s,n=t[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value;this.updateObject(h)}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}}return t}},{key:"removeList",value:function(t){return this.lists.splice(this.lists.indexOf(t),1),t}},{key:"add",value:function(t,i){return i&&(t.staticObject=!0),this.calculatePIXI&&(this.dirtyTest||i)&&this.updateObject(t),this.lists[0].push(t),t}},{key:"remove",value:function(t){return this.lists[0].splice(this.lists[0].indexOf(t),1),t}},{key:"cull",value:function(t,i){this.calculatePIXI&&!i&&this.updateObjects();var e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value,l=!0,o=!1,u=void 0;try{for(var y,c=h[Symbol.iterator]();!(l=(y=c.next()).done);l=!0){var v=y.value,f=v[this.AABB];v[this.visible]=f.x+f.width>t.x&&f.x<t.x+t.width&&f.y+f.height>t.y&&f.y<t.y+t.height}}catch(t){o=!0,u=t}finally{try{!l&&c.return&&c.return()}finally{if(o)throw u}}}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}}},{key:"updateObjects",value:function(){if(this.dirtyTest){var t=!0,i=!1,e=void 0;try{for(var r,a=this.lists[Symbol.iterator]();!(t=(r=a.next()).done);t=!0){var s=r.value;if(!s.staticObject){var n=!0,h=!1,l=void 0;try{for(var o,u=s[Symbol.iterator]();!(n=(o=u.next()).done);n=!0){var y=o.value;!y.staticObject&&y[this.dirty]&&(this.updateObject(y),y[this.dirty]=!1)}}catch(t){h=!0,l=t}finally{try{!n&&u.return&&u.return()}finally{if(h)throw l}}}}}catch(t){i=!0,e=t}finally{try{!t&&a.return&&a.return()}finally{if(i)throw e}}}else{var c=!0,v=!1,f=void 0;try{for(var d,x=this.lists[Symbol.iterator]();!(c=(d=x.next()).done);c=!0){var b=d.value;if(!b.staticObject){var p=!0,B=!1,S=void 0;try{for(var g,m=b[Symbol.iterator]();!(p=(g=m.next()).done);p=!0){var w=g.value;w.staticObject||this.updateObject(w)}}catch(t){B=!0,S=t}finally{try{!p&&m.return&&m.return()}finally{if(B)throw S}}}}}catch(t){v=!0,f=t}finally{try{!c&&x.return&&x.return()}finally{if(v)throw f}}}}},{key:"updateObject",value:function(t){var i=t.getLocalBounds();t[this.AABB]=t[this.AABB]||{},t[this.AABB].x=t.x+i.x*t.scale.x,t[this.AABB].y=t.y+i.y*t.scale.y,t[this.AABB].width=i.width*t.scale.x,t[this.AABB].height=i.height*t.scale.y}},{key:"query",value:function(t){var i=[],e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value,l=!0,o=!1,u=void 0;try{for(var y,c=h[Symbol.iterator]();!(l=(y=c.next()).done);l=!0){var v=y.value,f=v[this.AABB];f.x+f.width>t.x&&f.x-f.width<t.x+t.width&&f.y+f.height>t.y&&f.y-f.height<t.y+t.height&&i.push(v)}}catch(t){o=!0,u=t}finally{try{!l&&c.return&&c.return()}finally{if(o)throw u}}}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}return i}},{key:"queryCallback",value:function(t,i){var e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value,l=!0,o=!1,u=void 0;try{for(var y,c=h[Symbol.iterator]();!(l=(y=c.next()).done);l=!0){var v=y.value,f=v[this.AABB];if(f.x+f.width>t.x&&f.x-f.width<t.x+t.width&&f.y+f.height>t.y&&f.y-f.height<t.y+t.height&&i(v))return!0}}catch(t){o=!0,u=t}finally{try{!l&&c.return&&c.return()}finally{if(o)throw u}}}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}return!1}},{key:"stats",value:function(){var t=0,i=0,e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){s.value.forEach(function(e){t+=e.visible?1:0,i++})}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}return{total:i,visible:t,culled:i-t}}}]),t}();i.exports=a},{}],3:[function(t,i,e){"use strict";var r=function(){function t(t,i){for(var e=0;e<i.length;e++){var r=i[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(i,e,r){return e&&t(i.prototype,e),r&&t(i,r),i}}();var a=function(){function t(i){!function(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}(this,t),i=i||{},this.xSize=i.xSize||i.size||1e3,this.ySize=i.ySize||i.size||1e3,this.AABB=i.type||"AABB",this.spatial=i.spatial||"spatial",this.calculatePIXI=void 0===i.calculatePIXI||i.calculatePIXI,this.visibleText=void 0===i.visibleTest||i.visibleTest,this.simpleTest=void 0===i.simpleTest||i.simpleTest,this.dirtyTest=void 0===i.dirtyTest||i.dirtyTest,this.visible=i.visible||"visible",this.dirty=i.dirty||"dirty",this.width=this.height=0,this.hash={},this.lists=[[]]}return r(t,[{key:"add",value:function(t,i){t[this.spatial]={hashes:[]},this.calculatePIXI&&this.dirtyTest&&(t[this.dirty]=!0),i&&(t.staticObject=!0),this.updateObject(t),this.lists[0].push(t)}},{key:"remove",value:function(t){return this.lists[0].splice(this.list[0].indexOf(t),1),this.removeFromHash(t),t}},{key:"addList",value:function(t,i){var e=!0,r=!1,a=void 0;try{for(var s,n=t[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value;h[this.spatial]={hashes:[]},this.calculatePIXI&&this.dirtyTest&&(h[this.dirty]=!0),i&&(t.staticObject=!0),this.updateObject(h)}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}this.lists.push(t)}},{key:"removeList",value:function(t){var i=this;return this.lists.splice(this.lists.indexOf(t),1),t.forEach(function(t){return i.removeFromHash(t)}),t}},{key:"cull",value:function(t,i){var e=this;return i||this.updateObjects(),this.invisible(),this.query(t,this.simpleTest).forEach(function(t){return t[e.visible]=!0}),this.lastBuckets}},{key:"invisible",value:function(){var t=this,i=!0,e=!1,r=void 0;try{for(var a,s=this.lists[Symbol.iterator]();!(i=(a=s.next()).done);i=!0){a.value.forEach(function(i){return i[t.visible]=!1})}}catch(t){e=!0,r=t}finally{try{!i&&s.return&&s.return()}finally{if(e)throw r}}}},{key:"updateObjects",value:function(){var t=this;if(this.dirtyTest){var i=!0,e=!1,r=void 0;try{for(var a,s=this.lists[Symbol.iterator]();!(i=(a=s.next()).done);i=!0){var n=a.value,h=!0,l=!1,o=void 0;try{for(var u,y=n[Symbol.iterator]();!(h=(u=y.next()).done);h=!0){var c=u.value;c[this.dirty]&&(this.updateObject(c),c[this.dirty]=!1)}}catch(t){l=!0,o=t}finally{try{!h&&y.return&&y.return()}finally{if(l)throw o}}}}catch(t){e=!0,r=t}finally{try{!i&&s.return&&s.return()}finally{if(e)throw r}}}else{var v=!0,f=!1,d=void 0;try{for(var x,b=this.lists[Symbol.iterator]();!(v=(x=b.next()).done);v=!0){x.value.forEach(function(i){return t.updateObject(i)})}}catch(t){f=!0,d=t}finally{try{!v&&b.return&&b.return()}finally{if(f)throw d}}}}},{key:"updateObject",value:function(t){var i=void 0;if(this.calculatePIXI){var e=t.getLocalBounds();i=t[this.AABB]={x:t.x+e.x*t.scale.x,y:t.y+e.y*t.scale.y,width:e.width*t.scale.x,height:e.height*t.scale.y}}else i=t[this.AABB];var r=t[this.spatial],a=this.getBounds(i),s=a.xStart,n=a.yStart,h=a.xEnd,l=a.yEnd;if(r.xStart!==s||r.yStart!==n||r.xEnd!==h||r.yEnd!==l){r.hashes.length&&this.removeFromHash(t);for(var o=n;o<=l;o++)for(var u=s;u<=h;u++){var y=u+","+o;this.insert(t,y),r.hashes.push(y)}r.xStart=s,r.yStart=n,r.xEnd=h,r.yEnd=l}}},{key:"getBounds",value:function(t){var i=Math.floor(t.x/this.xSize);i=i<0?0:i;var e=Math.floor(t.y/this.ySize);return{xStart:i,yStart:e=e<0?0:e,xEnd:Math.floor((t.x+t.width)/this.xSize),yEnd:Math.floor((t.y+t.height)/this.ySize)}}},{key:"insert",value:function(t,i){this.hash[i]?this.hash[i].push(t):this.hash[i]=[t]}},{key:"removeFromHash",value:function(t){for(var i=t[this.spatial];i.hashes.length;){var e=i.hashes.pop(),r=this.hash[e];r.splice(r.indexOf(t),1)}}},{key:"neighbors",value:function(t){var i=this,e=[];return t[this.spatial].hashes.forEach(function(t){return e=e.concat(i.hash[t])}),e}},{key:"query",value:function(t,i){i=void 0===i||i;for(var e=0,r=[],a=this.getBounds(t),s=a.xStart,n=a.yStart,h=a.xEnd,l=a.yEnd,o=n;o<=l;o++)for(var u=s;u<=h;u++){var y=this.hash[u+","+o];if(y){if(i){var c=!0,v=!1,f=void 0;try{for(var d,x=y[Symbol.iterator]();!(c=(d=x.next()).done);c=!0){var b=d.value,p=b[this.AABB];p.x+p.width>t.x&&p.x<t.x+t.width&&p.y+p.height>t.y&&p.y<t.y+t.height&&r.push(b)}}catch(t){v=!0,f=t}finally{try{!c&&x.return&&x.return()}finally{if(v)throw f}}}else r=r.concat(y);e++}}return this.lastBuckets=e,r}},{key:"queryCallback",value:function(t,i,e){e=void 0===e||e;for(var r=this.getBounds(t),a=r.xStart,s=r.yStart,n=r.xEnd,h=r.yEnd,l=s;l<=h;l++)for(var o=a;o<=n;o++){var u=this.hash[o+","+l];if(u)for(var y=0;y<u.length;y++){var c=u[y];if(e){var v=c.AABB;if(v.x+v.width>v.x&&v.x<v.x+v.width&&v.y+v.height>v.y&&v.y<v.y+v.height&&i(c))return!0}else if(i(c))return!0}}return!1}},{key:"stats",value:function(){var t=0,i=0,e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){s.value.forEach(function(e){t+=e.visible?1:0,i++})}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}return{total:i,visible:t,culled:i-t}}},{key:"getBuckets",value:function(){return Object.keys(this.hash).length}},{key:"getAverageSize",value:function(){var t=0;for(var i in this.hash)t+=this.hash[i].length;return t/this.getBuckets()}},{key:"getLargest",value:function(){var t=0;for(var i in this.hash)this.hash[i].length>t&&(t=this.hash[i].length);return t}},{key:"getSparseness",value:function(t){for(var i=0,e=0,r=this.getBounds(t),a=r.xStart,s=r.yStart,n=r.xEnd,h=r.yEnd,l=s;l<h;l++)for(var o=a;o<n;o++)i+=this.hash[o+","+l]?1:0,e++;return i/e}}]),t}();i.exports=a},{}]},{},[1]);
!function(){return function t(i,e,r){function a(n,h){if(!e[n]){if(!i[n]){var l="function"==typeof require&&require;if(!h&&l)return l(n,!0);if(s)return s(n,!0);var o=new Error("Cannot find module '"+n+"'");throw o.code="MODULE_NOT_FOUND",o}var u=e[n]={exports:{}};i[n][0].call(u.exports,function(t){return a(i[n][1][t]||t)},u,u.exports,t,i,e,r)}return e[n].exports}for(var s="function"==typeof require&&require,n=0;n<r.length;n++)a(r[n]);return a}}()({1:[function(t,i,e){"use strict";i.exports={Simple:t("./simple"),SpatialHash:t("./spatial-hash")},PIXI&&(PIXI.extras.Cull={Simple:t("./simple"),SpatialHash:t("./spatial-hash")})},{"./simple":2,"./spatial-hash":3}],2:[function(t,i,e){"use strict";var r=function(){function t(t,i){for(var e=0;e<i.length;e++){var r=i[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(i,e,r){return e&&t(i.prototype,e),r&&t(i,r),i}}();var a=function(){function t(i){!function(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}(this,t),i=i||{},this.visible=i.visible||"visible",this.calculatePIXI=void 0===i.calculatePIXI||i.calculatePIXI,this.dirtyTest=void 0===i.dirtyTest||i.dirtyTest,this.AABB=i.AABB||"AABB",this.lists=[[]]}return r(t,[{key:"addList",value:function(t,i){if(this.lists.push(t),i&&(t.staticObject=!0),this.calculatePIXI&&this.dirtyTest){var e=!0,r=!1,a=void 0;try{for(var s,n=t[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value;this.updateObject(h)}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}}return t}},{key:"removeList",value:function(t){return this.lists.splice(this.lists.indexOf(t),1),t}},{key:"add",value:function(t,i){return i&&(t.staticObject=!0),this.calculatePIXI&&(this.dirtyTest||i)&&this.updateObject(t),this.lists[0].push(t),t}},{key:"remove",value:function(t){return this.lists[0].splice(this.lists[0].indexOf(t),1),t}},{key:"cull",value:function(t,i){this.calculatePIXI&&!i&&this.updateObjects();var e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value,l=!0,o=!1,u=void 0;try{for(var y,c=h[Symbol.iterator]();!(l=(y=c.next()).done);l=!0){var f=y.value,v=f[this.AABB];f[this.visible]=v.x+v.width>t.x&&v.x<t.x+t.width&&v.y+v.height>t.y&&v.y<t.y+t.height}}catch(t){o=!0,u=t}finally{try{!l&&c.return&&c.return()}finally{if(o)throw u}}}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}}},{key:"updateObjects",value:function(){if(this.dirtyTest){var t=!0,i=!1,e=void 0;try{for(var r,a=this.lists[Symbol.iterator]();!(t=(r=a.next()).done);t=!0){var s=r.value;if(!s.staticObject){var n=!0,h=!1,l=void 0;try{for(var o,u=s[Symbol.iterator]();!(n=(o=u.next()).done);n=!0){var y=o.value;!y.staticObject&&y[this.dirty]&&(this.updateObject(y),y[this.dirty]=!1)}}catch(t){h=!0,l=t}finally{try{!n&&u.return&&u.return()}finally{if(h)throw l}}}}}catch(t){i=!0,e=t}finally{try{!t&&a.return&&a.return()}finally{if(i)throw e}}}else{var c=!0,f=!1,v=void 0;try{for(var d,x=this.lists[Symbol.iterator]();!(c=(d=x.next()).done);c=!0){var b=d.value;if(!b.staticObject){var p=!0,B=!1,S=void 0;try{for(var g,m=b[Symbol.iterator]();!(p=(g=m.next()).done);p=!0){var w=g.value;w.staticObject||this.updateObject(w)}}catch(t){B=!0,S=t}finally{try{!p&&m.return&&m.return()}finally{if(B)throw S}}}}}catch(t){f=!0,v=t}finally{try{!c&&x.return&&x.return()}finally{if(f)throw v}}}}},{key:"updateObject",value:function(t){var i=t.getLocalBounds();t[this.AABB]=t[this.AABB]||{},t[this.AABB].x=t.x+i.x*t.scale.x,t[this.AABB].y=t.y+i.y*t.scale.y,t[this.AABB].width=i.width*t.scale.x,t[this.AABB].height=i.height*t.scale.y}},{key:"query",value:function(t){var i=[],e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value,l=!0,o=!1,u=void 0;try{for(var y,c=h[Symbol.iterator]();!(l=(y=c.next()).done);l=!0){var f=y.value,v=f[this.AABB];v.x+v.width>t.x&&v.x-v.width<t.x+t.width&&v.y+v.height>t.y&&v.y-v.height<t.y+t.height&&i.push(f)}}catch(t){o=!0,u=t}finally{try{!l&&c.return&&c.return()}finally{if(o)throw u}}}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}return i}},{key:"queryCallback",value:function(t,i){var e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value,l=!0,o=!1,u=void 0;try{for(var y,c=h[Symbol.iterator]();!(l=(y=c.next()).done);l=!0){var f=y.value,v=f[this.AABB];if(v.x+v.width>t.x&&v.x-v.width<t.x+t.width&&v.y+v.height>t.y&&v.y-v.height<t.y+t.height&&i(f))return!0}}catch(t){o=!0,u=t}finally{try{!l&&c.return&&c.return()}finally{if(o)throw u}}}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}return!1}},{key:"stats",value:function(){var t=0,i=0,e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){s.value.forEach(function(e){t+=e.visible?1:0,i++})}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}return{total:i,visible:t,culled:i-t}}}]),t}();i.exports=a},{}],3:[function(t,i,e){"use strict";var r=function(){function t(t,i){for(var e=0;e<i.length;e++){var r=i[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(i,e,r){return e&&t(i.prototype,e),r&&t(i,r),i}}();var a=function(){function t(i){!function(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}(this,t),i=i||{},this.xSize=i.xSize||i.size||1e3,this.ySize=i.ySize||i.size||1e3,this.AABB=i.type||"AABB",this.spatial=i.spatial||"spatial",this.calculatePIXI=void 0===i.calculatePIXI||i.calculatePIXI,this.visibleText=void 0===i.visibleTest||i.visibleTest,this.simpleTest=void 0===i.simpleTest||i.simpleTest,this.dirtyTest=void 0===i.dirtyTest||i.dirtyTest,this.visible=i.visible||"visible",this.dirty=i.dirty||"dirty",this.width=this.height=0,this.hash={},this.lists=[[]]}return r(t,[{key:"add",value:function(t,i){t[this.spatial]={hashes:[]},this.calculatePIXI&&this.dirtyTest&&(t[this.dirty]=!0),i&&(t.staticObject=!0),this.updateObject(t),this.lists[0].push(t)}},{key:"remove",value:function(t){return this.lists[0].splice(this.list[0].indexOf(t),1),this.removeFromHash(t),t}},{key:"addList",value:function(t,i){var e=!0,r=!1,a=void 0;try{for(var s,n=t[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){var h=s.value;h[this.spatial]={hashes:[]},this.calculatePIXI&&this.dirtyTest&&(h[this.dirty]=!0),i&&(t.staticObject=!0),this.updateObject(h)}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}this.lists.push(t)}},{key:"removeList",value:function(t){var i=this;return this.lists.splice(this.lists.indexOf(t),1),t.forEach(function(t){return i.removeFromHash(t)}),t}},{key:"cull",value:function(t,i){var e=this;return i||this.updateObjects(),this.invisible(),this.query(t,this.simpleTest).forEach(function(t){return t[e.visible]=!0}),this.lastBuckets}},{key:"invisible",value:function(){var t=this,i=!0,e=!1,r=void 0;try{for(var a,s=this.lists[Symbol.iterator]();!(i=(a=s.next()).done);i=!0){a.value.forEach(function(i){return i[t.visible]=!1})}}catch(t){e=!0,r=t}finally{try{!i&&s.return&&s.return()}finally{if(e)throw r}}}},{key:"updateObjects",value:function(){var t=this;if(this.dirtyTest){var i=!0,e=!1,r=void 0;try{for(var a,s=this.lists[Symbol.iterator]();!(i=(a=s.next()).done);i=!0){var n=a.value,h=!0,l=!1,o=void 0;try{for(var u,y=n[Symbol.iterator]();!(h=(u=y.next()).done);h=!0){var c=u.value;c[this.dirty]&&(this.updateObject(c),c[this.dirty]=!1)}}catch(t){l=!0,o=t}finally{try{!h&&y.return&&y.return()}finally{if(l)throw o}}}}catch(t){e=!0,r=t}finally{try{!i&&s.return&&s.return()}finally{if(e)throw r}}}else{var f=!0,v=!1,d=void 0;try{for(var x,b=this.lists[Symbol.iterator]();!(f=(x=b.next()).done);f=!0){x.value.forEach(function(i){return t.updateObject(i)})}}catch(t){v=!0,d=t}finally{try{!f&&b.return&&b.return()}finally{if(v)throw d}}}}},{key:"updateObject",value:function(t){var i=void 0;if(this.calculatePIXI){var e=t.getLocalBounds();i=t[this.AABB]={x:t.x+e.x*t.scale.x,y:t.y+e.y*t.scale.y,width:e.width*t.scale.x,height:e.height*t.scale.y}}else i=t[this.AABB];var r=t[this.spatial],a=this.getBounds(i),s=a.xStart,n=a.yStart,h=a.xEnd,l=a.yEnd;if(r.xStart!==s||r.yStart!==n||r.xEnd!==h||r.yEnd!==l){r.hashes.length&&this.removeFromHash(t);for(var o=n;o<=l;o++)for(var u=s;u<=h;u++){var y=u+","+o;this.insert(t,y),r.hashes.push(y)}r.xStart=s,r.yStart=n,r.xEnd=h,r.yEnd=l}}},{key:"getBounds",value:function(t){return{xStart:Math.floor(t.x/this.xSize),yStart:Math.floor(t.y/this.ySize),xEnd:Math.floor((t.x+t.width)/this.xSize),yEnd:Math.floor((t.y+t.height)/this.ySize)}}},{key:"insert",value:function(t,i){this.hash[i]?this.hash[i].push(t):this.hash[i]=[t]}},{key:"removeFromHash",value:function(t){for(var i=t[this.spatial];i.hashes.length;){var e=i.hashes.pop(),r=this.hash[e];r.splice(r.indexOf(t),1)}}},{key:"neighbors",value:function(t){var i=this,e=[];return t[this.spatial].hashes.forEach(function(t){return e=e.concat(i.hash[t])}),e}},{key:"query",value:function(t,i){i=void 0===i||i;for(var e=0,r=[],a=this.getBounds(t),s=a.xStart,n=a.yStart,h=a.xEnd,l=a.yEnd,o=n;o<=l;o++)for(var u=s;u<=h;u++){var y=this.hash[u+","+o];if(y){if(i){var c=!0,f=!1,v=void 0;try{for(var d,x=y[Symbol.iterator]();!(c=(d=x.next()).done);c=!0){var b=d.value,p=b[this.AABB];p.x+p.width>t.x&&p.x<t.x+t.width&&p.y+p.height>t.y&&p.y<t.y+t.height&&r.push(b)}}catch(t){f=!0,v=t}finally{try{!c&&x.return&&x.return()}finally{if(f)throw v}}}else r=r.concat(y);e++}}return this.lastBuckets=e,r}},{key:"queryCallback",value:function(t,i,e){e=void 0===e||e;for(var r=this.getBounds(t),a=r.xStart,s=r.yStart,n=r.xEnd,h=r.yEnd,l=s;l<=h;l++)for(var o=a;o<=n;o++){var u=this.hash[o+","+l];if(u)for(var y=0;y<u.length;y++){var c=u[y];if(e){var f=c.AABB;if(f.x+f.width>f.x&&f.x<f.x+f.width&&f.y+f.height>f.y&&f.y<f.y+f.height&&i(c))return!0}else if(i(c))return!0}}return!1}},{key:"stats",value:function(){var t=0,i=0,e=!0,r=!1,a=void 0;try{for(var s,n=this.lists[Symbol.iterator]();!(e=(s=n.next()).done);e=!0){s.value.forEach(function(e){t+=e.visible?1:0,i++})}}catch(t){r=!0,a=t}finally{try{!e&&n.return&&n.return()}finally{if(r)throw a}}return{total:i,visible:t,culled:i-t}}},{key:"getBuckets",value:function(){return Object.keys(this.hash).length}},{key:"getAverageSize",value:function(){var t=0;for(var i in this.hash)t+=this.hash[i].length;return t/this.getBuckets()}},{key:"getLargest",value:function(){var t=0;for(var i in this.hash)this.hash[i].length>t&&(t=this.hash[i].length);return t}},{key:"getSparseness",value:function(t){for(var i=0,e=0,r=this.getBounds(t),a=r.xStart,s=r.yStart,n=r.xEnd,h=r.yEnd,l=s;l<h;l++)for(var o=a;o<n;o++)i+=this.hash[o+","+l]?1:0,e++;return i/e}}]),t}();i.exports=a},{}]},{},[1]);

@@ -226,5 +226,3 @@ // Copyright 2018 YOPEY YOPEY LLC

let xStart = Math.floor(AABB.x / this.xSize)
xStart = xStart < 0 ? 0 : xStart
let yStart = Math.floor(AABB.y / this.ySize)
yStart = yStart < 0 ? 0 : yStart
let xEnd = Math.floor((AABB.x + AABB.width) / this.xSize)

@@ -231,0 +229,0 @@ let yEnd = Math.floor((AABB.y + AABB.height) / this.ySize)

@@ -358,5 +358,3 @@ 'use strict';

var xStart = Math.floor(AABB.x / this.xSize);
xStart = xStart < 0 ? 0 : xStart;
var yStart = Math.floor(AABB.y / this.ySize);
yStart = yStart < 0 ? 0 : yStart;
var xEnd = Math.floor((AABB.x + AABB.width) / this.xSize);

@@ -670,2 +668,2 @@ var yEnd = Math.floor((AABB.y + AABB.height) / this.ySize);

module.exports = SpatialHash;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2NvZGUvc3BhdGlhbC1oYXNoLmpzIl0sIm5hbWVzIjpbIlNwYXRpYWxIYXNoIiwib3B0aW9ucyIsInhTaXplIiwic2l6ZSIsInlTaXplIiwiQUFCQiIsInR5cGUiLCJzcGF0aWFsIiwiY2FsY3VsYXRlUElYSSIsInZpc2libGVUZXh0IiwidmlzaWJsZVRlc3QiLCJzaW1wbGVUZXN0IiwiZGlydHlUZXN0IiwidmlzaWJsZSIsImRpcnR5Iiwid2lkdGgiLCJoZWlnaHQiLCJoYXNoIiwibGlzdHMiLCJvYmplY3QiLCJzdGF0aWNPYmplY3QiLCJoYXNoZXMiLCJ1cGRhdGVPYmplY3QiLCJwdXNoIiwic3BsaWNlIiwibGlzdCIsImluZGV4T2YiLCJyZW1vdmVGcm9tSGFzaCIsImFycmF5IiwiZm9yRWFjaCIsInNraXBVcGRhdGUiLCJ1cGRhdGVPYmplY3RzIiwiaW52aXNpYmxlIiwib2JqZWN0cyIsInF1ZXJ5IiwibGFzdEJ1Y2tldHMiLCJib3giLCJnZXRMb2NhbEJvdW5kcyIsIngiLCJzY2FsZSIsInkiLCJnZXRCb3VuZHMiLCJ4U3RhcnQiLCJ5U3RhcnQiLCJ4RW5kIiwieUVuZCIsImxlbmd0aCIsImtleSIsImluc2VydCIsIk1hdGgiLCJmbG9vciIsInBvcCIsInJlc3VsdHMiLCJjb25jYXQiLCJidWNrZXRzIiwiZW50cnkiLCJjYWxsYmFjayIsImkiLCJjb3VudCIsInRvdGFsIiwiY3VsbGVkIiwiT2JqZWN0Iiwia2V5cyIsImdldEJ1Y2tldHMiLCJsYXJnZXN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBOztJQUVNQSxXO0FBRUY7Ozs7Ozs7Ozs7Ozs7O0FBY0EseUJBQVlDLE9BQVosRUFDQTtBQUFBOztBQUNJQSxrQkFBVUEsV0FBVyxFQUFyQjtBQUNBLGFBQUtDLEtBQUwsR0FBYUQsUUFBUUMsS0FBUixJQUFpQkQsUUFBUUUsSUFBekIsSUFBaUMsSUFBOUM7QUFDQSxhQUFLQyxLQUFMLEdBQWFI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cUJBQUssSUFBSUYsSUFBSUksTUFBYixFQUFxQkosSUFBSU0sSUFBekIsRUFBK0JOLEdBQS9CLEVBQ0E7QUFDSW9CLDZCQUFVLEtBQUt6QyxJQUFMLENBQVVxQixJQUFJLEdBQUosR0FBVUUsQ0FBcEIsSUFBeUIsQ0FBekIsR0FBNkIsQ0FBdkM7QUFDQW1CO0FBQ0g7QUFDSjtBQUNELG1CQUFPRCxRQUFRQyxLQUFmO0FBQ0g7Ozs7OztBQUdMOzs7Ozs7O0FBT0E7Ozs7Ozs7O0FBUUE7Ozs7Ozs7O0FBUUFNLE9BQU9DLE9BQVAsR0FBaUJsRSxXQUFqQiIsImZpbGUiOiJzcGF0aWFsLWhhc2guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAxOCBZT1BFWSBZT1BFWSBMTENcclxuLy8gRGF2aWQgRmlnYXRuZXJcclxuLy8gTUlUIExpY2Vuc2VcclxuXHJcbmNsYXNzIFNwYXRpYWxIYXNoXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogY3JlYXRlcyBhIHNwYXRpYWwtaGFzaCBjdWxsXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2l6ZT0xMDAwXSBjZWxsIHNpemUgdXNlZCB0byBjcmVhdGUgaGFzaCAoeFNpemUgPSB5U2l6ZSlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy54U2l6ZV0gaG9yaXpvbnRhbCBjZWxsIHNpemVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy55U2l6ZV0gdmVydGljYWwgY2VsbCBzaXplXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNhbGN1bGF0ZVBJWEk9dHJ1ZV0gY2FsY3VsYXRlIGJvdW5kaW5nIGJveCBhdXRvbWF0aWNhbGx5OyBpZiB0aGlzIGlzIHNldCB0byBmYWxzZSB0aGVuIGl0IHVzZXMgb2JqZWN0W29wdGlvbnMuQUFCQl0gZm9yIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy52aXNpYmxlPXZpc2libGVdIHBhcmFtZXRlciBvZiB0aGUgb2JqZWN0IHRvIHNldCAodXN1YWxseSB2aXNpYmxlIG9yIHJlbmRlcmFibGUpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnNpbXBsZVRlc3Q9dHJ1ZV0gaXRlcmF0ZSB0aHJvdWdoIHZpc2libGUgYnVja2V0cyB0byBjaGVjayBmb3IgYm91bmRzXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZGlydHlUZXN0PXRydWVdIG9ubHkgdXBkYXRlIHNwYXRpYWwgaGFzaCBmb3Igb2JqZWN0cyB3aXRoIG9iamVjdFtvcHRpb25zLmRpcnR5VGVzdF09dHJ1ZTsgdGhpcyBoYXMgYSBIVUdFIGltcGFjdCBvbiBwZXJmb3JtYW5jZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLkFBQkI9QUFCQl0gb2JqZWN0IHByb3BlcnR5IHRoYXQgaG9sZHMgYm91bmRpbmcgYm94IHNvIHRoYXQgb2JqZWN0W3R5cGVdID0geyB4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNwYXRpYWw9c3BhdGlhbF0gb2JqZWN0IHByb3BlcnR5IHRoYXQgaG9sZHMgb2JqZWN0J3MgaGFzaCBsaXN0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZGlydHk9ZGlydHldIG9iamVjdCBwcm9wZXJ0eSBmb3IgZGlydHlUZXN0XHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cclxuICAgICAgICB0aGlzLnhTaXplID0gb3B0aW9ucy54U2l6ZSB8fCBvcHRpb25zLnNpemUgfHwgMTAwMFxyXG4gICAgICAgIHRoaXMueVNpemUgPSBvcHRpb25zLnlTaXplIHx8IG9wdGlvbnMuc2l6ZSB8fCAxMDAwXHJcbiAgICAgICAgdGhpcy5BQUJCID0gb3B0aW9ucy50eXBlIHx8ICdBQUJCJ1xyXG4gICAgICAgIHRoaXMuc3BhdGlhbCA9IG9wdGlvbnMuc3BhdGlhbCB8fCAnc3BhdGlhbCdcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVBJWEkgPSB0eXBlb2Ygb3B0aW9ucy5jYWxjdWxhdGVQSVhJICE9PSAndW5kZWZpbmVkJyA/IG9wdGlvbnMuY2FsY3VsYXRlUElYSSA6IHRydWVcclxuICAgICAgICB0aGlzLnZpc2libGVUZXh0ID0gdHlwZW9mIG9wdGlvbnMudmlzaWJsZVRlc3QgIT09ICd1bmRlZmluZWQnID8gb3B0aW9ucy52aXNpYmxlVGVzdCA6IHRydWVcclxuICAgICAgICB0aGlzLnNpbXBsZVRlc3QgPSB0eXBlb2Ygb3B0aW9ucy5zaW1wbGVUZXN0ICE9PSAndW5kZWZpbmVkJyA/IG9wdGlvbnMuc2ltcGxlVGVzdCA6IHRydWVcclxuICAgICAgICB0aGlzLmRpcnR5VGVzdCA9IHR5cGVvZiBvcHRpb25zLmRpcnR5VGVzdCAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zLmRpcnR5VGVzdCA6IHRydWVcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBvcHRpb25zLnZpc2libGUgfHwgJ3Zpc2libGUnXHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IG9wdGlvbnMuZGlydHkgfHwgJ2RpcnR5J1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmhlaWdodCA9IDBcclxuICAgICAgICB0aGlzLmhhc2ggPSB7fVxyXG4gICAgICAgIHRoaXMubGlzdHMgPSBbW11dXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgYW4gb2JqZWN0IHRvIGJlIGN1bGxlZFxyXG4gICAgICogc2lkZSBlZmZlY3Q6IGFkZHMgb2JqZWN0LnNwYXRpYWxIYXNoZXMgdG8gdHJhY2sgZXhpc3RpbmcgaGFzaGVzXHJcbiAgICAgKiBAcGFyYW0geyp9IG9iamVjdFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc3RhdGljT2JqZWN0XSBzZXQgdG8gdHJ1ZSBpZiB0aGUgb2JqZWN0J3MgcG9zaXRpb24vc2l6ZSBkb2VzIG5vdCBjaGFuZ2VcclxuICAgICAqIEByZXR1cm4geyp9IG9iamVjdFxyXG4gICAgICovXHJcbiAgICBhZGQob2JqZWN0LCBzdGF0aWNPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgb2JqZWN0W3RoaXMuc3BhdGlhbF0gPSB7IGhhc2hlczogW10gfVxyXG4gICAgICAgIGlmICh0aGlzLmNhbGN1bGF0ZVBJWEkgJiYgdGhpcy5kaXJ0eVRlc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvYmplY3RbdGhpcy5kaXJ0eV0gPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGF0aWNPYmplY3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvYmplY3Quc3RhdGljT2JqZWN0ID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZU9iamVjdChvYmplY3QpXHJcbiAgICAgICAgdGhpcy5saXN0c1swXS5wdXNoKG9iamVjdClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHJlbW92ZSBhbiBvYmplY3QgYWRkZWQgYnkgYWRkKClcclxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0XHJcbiAgICAgKiBAcmV0dXJuIHsqfSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlKG9iamVjdClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmxpc3RzWzBdLnNwbGljZSh0aGlzLmxpc3RbMF0uaW5kZXhPZihvYmplY3QpLCAxKVxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUhhc2gob2JqZWN0KVxyXG4gICAgICAgIHJldHVybiBvYmplY3RcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGFkZCBhbiBhcnJheSBvZiBvYmplY3RzIHRvIGJlIGN1bGxlZFxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXRpY09iamVjdF0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdHMgaW4gdGhlIGxpc3QgcG9zaXRpb24vc2l6ZSBkb2VzIG5vdCBjaGFuZ2VcclxuICAgICAqIEByZXR1cm4ge0FycmF5fSBhcnJheVxyXG4gICAgICovXHJcbiAgICBhZGRMaXN0KGxpc3QsIHN0YXRpY09iamVjdClcclxuICAgIHtcclxuICAgICAgICBmb3IgKGxldCBvYmplY3Qgb2YgbGlzdClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9iamVjdFt0aGlzLnNwYXRpYWxdID0geyBoYXNoZXM6IFtdIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsY3VsYXRlUElYSSAmJiB0aGlzLmRpcnR5VGVzdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0W3RoaXMuZGlydHldID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0aWNPYmplY3QpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpc3Quc3RhdGljT2JqZWN0ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT2JqZWN0KG9iamVjdClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saXN0cy5wdXNoKGxpc3QpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZW1vdmUgYW4gYXJyYXkgYWRkZWQgYnkgYWRkTGlzdCgpXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gICAgICogQHJldHVybiB7QXJyYXl9IGFycmF5XHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUxpc3QoYXJyYXkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5saXN0cy5zcGxpY2UodGhpcy5saXN0cy5pbmRleE9mKGFycmF5KSwgMSlcclxuICAgICAgICBhcnJheS5mb3JFYWNoKG9iamVjdCA9PiB0aGlzLnJlbW92ZUZyb21IYXNoKG9iamVjdCkpXHJcbiAgICAgICAgcmV0dXJuIGFycmF5XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB1cGRhdGUgdGhlIGhhc2hlcyBhbmQgY3VsbCB0aGUgaXRlbXMgaW4gdGhlIGxpc3RcclxuICAgICAqIEBwYXJhbSB7QUFCQn0gQUFCQlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFVwZGF0ZV0gc2tpcCB1cGRhdGluZyB0aGUgaGFzaGVzIG9mIGFsbCBvYmplY3RzXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IG51bWJlciBvZiBidWNrZXRzIGluIHJlc3VsdHNcclxuICAgICAqL1xyXG4gICAgY3VsbChBQUJCLCBza2lwVXBkYXRlKVxyXG4gICAge1xyXG4gICAgICAgIGlmICghc2tpcFVwZGF0ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT2JqZWN0cygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW52aXNpYmxlKClcclxuICAgICAgICBjb25zdCBvYmplY3RzID0gdGhpcy5xdWVyeShBQUJCLCB0aGlzLnNpbXBsZVRlc3QpXHJcbiAgICAgICAgb2JqZWN0cy5mb3JFYWNoKG9iamVjdCA9PiBvYmplY3RbdGhpcy52aXNpYmxlXSA9IHRydWUpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdEJ1Y2tldHNcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHNldCBhbGwgb2JqZWN0cyBpbiBoYXNoIHRvIHZpc2libGU9ZmFsc2VcclxuICAgICAqL1xyXG4gICAgaW52aXNpYmxlKClcclxuICAgIHtcclxuICAgICAgICBmb3IgKGxldCBsaXN0IG9mIHRoaXMubGlzdHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsaXN0LmZvckVhY2gob2JqZWN0ID0+IG9iamVjdFt0aGlzLnZpc2libGVdID0gZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXBkYXRlIHRoZSBoYXNoZXMgZm9yIGFsbCBvYmplY3RzXHJcbiAgICAgKiBhdXRvbWF0aWNhbGx5IGNhbGxlZCBmcm9tIHVwZGF0ZSgpIHdoZW4gc2tpcFVwZGF0ZT1mYWxzZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVPYmplY3RzKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy5kaXJ0eVRlc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBsaXN0IG9mIHRoaXMubGlzdHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG9iamVjdCBvZiBsaXN0KVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3RbdGhpcy5kaXJ0eV0pXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9iamVjdChvYmplY3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFt0aGlzLmRpcnR5XSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGxpc3Qgb2YgdGhpcy5saXN0cylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGlzdC5mb3JFYWNoKG9iamVjdCA9PiB0aGlzLnVwZGF0ZU9iamVjdChvYmplY3QpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXBkYXRlIHRoZSBoYXMgb2YgYW4gb2JqZWN0XHJcbiAgICAgKiBhdXRvbWF0aWNhbGx5IGNhbGxlZCBmcm9tIHVwZGF0ZU9iamVjdHMoKVxyXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlXSBmb3JjZSB1cGRhdGUgZm9yIGNhbGN1bGF0ZVBJWElcclxuICAgICAqL1xyXG4gICAgdXBkYXRlT2JqZWN0KG9iamVjdClcclxuICAgIHtcclxuICAgICAgICBsZXQgQUFCQlxyXG4gICAgICAgIGlmICh0aGlzLmNhbGN1bGF0ZVBJWEkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBib3ggPSBvYmplY3QuZ2V0TG9jYWxCb3VuZHMoKVxyXG4gICAgICAgICAgICBBQUJCID0gb2JqZWN0W3RoaXMuQUFCQl0gPSB7XHJcbiAgICAgICAgICAgICAgICB4OiBvYmplY3QueCArIGJveC54ICogb2JqZWN0LnNjYWxlLngsXHJcbiAgICAgICAgICAgICAgICB5OiBvYmplY3QueSArIGJveC55ICogb2JqZWN0LnNjYWxlLnksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogYm94LndpZHRoICogb2JqZWN0LnNjYWxlLngsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGJveC5oZWlnaHQgKiBvYmplY3Quc2NhbGUueVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIEFBQkIgPSBvYmplY3RbdGhpcy5BQUJCXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3BhdGlhbCA9IG9iamVjdFt0aGlzLnNwYXRpYWxdXHJcbiAgICAgICAgY29uc3QgeyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9ID0gdGhpcy5nZXRCb3VuZHMoQUFCQilcclxuXHJcbiAgICAgICAgLy8gb25seSByZW1vdmUgYW5kIGluc2VydCBpZiBtYXBwaW5nIGhhcyBjaGFuZ2VkXHJcbiAgICAgICAgaWYgKHNwYXRpYWwueFN0YXJ0ICE9PSB4U3RhcnQgfHwgc3BhdGlhbC55U3RhcnQgIT09IHlTdGFydCB8fCBzcGF0aWFsLnhFbmQgIT09IHhFbmQgfHwgc3BhdGlhbC55RW5kICE9PSB5RW5kKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHNwYXRpYWwuaGFzaGVzLmxlbmd0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tSGFzaChvYmplY3QpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgeSA9IHlTdGFydDsgeSA8PSB5RW5kOyB5KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHggPSB4U3RhcnQ7IHggPD0geEVuZDsgeCsrKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHggKyAnLCcgKyB5XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQob2JqZWN0LCBrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgc3BhdGlhbC5oYXNoZXMucHVzaChrZXkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3BhdGlhbC54U3RhcnQgPSB4U3RhcnRcclxuICAgICAgICAgICAgc3BhdGlhbC55U3RhcnQgPSB5U3RhcnRcclxuICAgICAgICAgICAgc3BhdGlhbC54RW5kID0geEVuZFxyXG4gICAgICAgICAgICBzcGF0aWFsLnlFbmQgPSB5RW5kXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2V0cyBoYXNoIGJvdW5kc1xyXG4gICAgICogQHBhcmFtIHtBQUJCfSBBQUJCXHJcbiAgICAgKiBAcmV0dXJuIHtCb3VuZHN9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBnZXRCb3VuZHMoQUFCQilcclxuICAgIHtcclxuICAgICAgICBsZXQgeFN0YXJ0ID0gTWF0aC5mbG9vcihBQUJCLnggLyB0aGlzLnhTaXplKVxyXG4gICAgICAgIHhTdGFydCA9IHhTdGFydCA8IDAgPyAwIDogeFN0YXJ0XHJcbiAgICAgICAgbGV0IHlTdGFydCA9IE1hdGguZmxvb3IoQUFCQi55IC8gdGhpcy55U2l6ZSlcclxuICAgICAgICB5U3RhcnQgPSB5U3RhcnQgPCAwID8gMCA6IHlTdGFydFxyXG4gICAgICAgIGxldCB4RW5kID0gTWF0aC5mbG9vcigoQUFCQi54ICsgQUFCQi53aWR0aCkgLyB0aGlzLnhTaXplKVxyXG4gICAgICAgIGxldCB5RW5kID0gTWF0aC5mbG9vcigoQUFCQi55ICsgQUFCQi5oZWlnaHQpIC8gdGhpcy55U2l6ZSlcclxuICAgICAgICByZXR1cm4geyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpbnNlcnQgb2JqZWN0IGludG8gdGhlIHNwYXRpYWwgaGFzaFxyXG4gICAgICogYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSB1cGRhdGVPYmplY3QoKVxyXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuICAgICAqL1xyXG4gICAgaW5zZXJ0KG9iamVjdCwga2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNoW2tleV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IFtvYmplY3RdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldLnB1c2gob2JqZWN0KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHJlbW92ZXMgb2JqZWN0IGZyb20gdGhlIGhhc2ggdGFibGVcclxuICAgICAqIHNob3VsZCBiZSBjYWxsZWQgd2hlbiByZW1vdmluZyBhbiBvYmplY3RcclxuICAgICAqIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGZyb20gdXBkYXRlT2JqZWN0KClcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRnJvbUhhc2gob2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGNvbnN0IHNwYXRpYWwgPSBvYmplY3RbdGhpcy5zcGF0aWFsXVxyXG4gICAgICAgIHdoaWxlIChzcGF0aWFsLmhhc2hlcy5sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzcGF0aWFsLmhhc2hlcy5wb3AoKVxyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5oYXNoW2tleV1cclxuICAgICAgICAgICAgbGlzdC5zcGxpY2UobGlzdC5pbmRleE9mKG9iamVjdCksIDEpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2V0IGFsbCBuZWlnaGJvcnMgdGhhdCBzaGFyZSB0aGUgc2FtZSBoYXNoIGFzIG9iamVjdFxyXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3QgaW4gdGhlIHNwYXRpYWwgaGFzaFxyXG4gICAgICogQHJldHVybiB7QXJyYXl9IG9mIG9iamVjdHMgdGhhdCBhcmUgaW4gdGhlIHNhbWUgaGFzaCBhcyBvYmplY3RcclxuICAgICAqL1xyXG4gICAgbmVpZ2hib3JzKG9iamVjdClcclxuICAgIHtcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdXHJcbiAgICAgICAgb2JqZWN0W3RoaXMuc3BhdGlhbF0uaGFzaGVzLmZvckVhY2goa2V5ID0+IHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdCh0aGlzLmhhc2hba2V5XSkpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluZWQgd2l0aGluIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtIHtBQUJCfSBBQUJCIGJvdW5kaW5nIGJveCB0byBzZWFyY2hcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NpbXBsZVRlc3Q9dHJ1ZV0gcGVyZm9ybSBhIHNpbXBsZSBib3VuZHMgY2hlY2sgb2YgYWxsIGl0ZW1zIGluIHRoZSBidWNrZXRzXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3RbXX0gc2VhcmNoIHJlc3VsdHNcclxuICAgICAqL1xyXG4gICAgcXVlcnkoQUFCQiwgc2ltcGxlVGVzdClcclxuICAgIHtcclxuICAgICAgICBzaW1wbGVUZXN0ID0gdHlwZW9mIHNpbXBsZVRlc3QgIT09ICd1bmRlZmluZWQnID8gc2ltcGxlVGVzdCA6IHRydWVcclxuICAgICAgICBsZXQgYnVja2V0cyA9IDBcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdXHJcbiAgICAgICAgY29uc3QgeyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9ID0gdGhpcy5nZXRCb3VuZHMoQUFCQilcclxuICAgICAgICBmb3IgKGxldCB5ID0geVN0YXJ0OyB5IDw9IHlFbmQ7IHkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHggPSB4U3RhcnQ7IHggPD0geEVuZDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuaGFzaFt4ICsgJywnICsgeV1cclxuICAgICAgICAgICAgICAgIGlmIChlbnRyeSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlVGVzdClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG9iamVjdCBvZiBlbnRyeSlcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm94ID0gb2JqZWN0W3RoaXMuQUFCQl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3gueCArIGJveC53aWR0aCA+IEFBQkIueCAmJiBib3gueCA8IEFBQkIueCArIEFBQkIud2lkdGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC55ICsgYm94LmhlaWdodCA+IEFBQkIueSAmJiBib3gueSA8IEFBQkIueSArIEFBQkIuaGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChvYmplY3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KGVudHJ5KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBidWNrZXRzKytcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RCdWNrZXRzID0gYnVja2V0c1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpdGVyYXRlcyB0aHJvdWdoIG9iamVjdHMgY29udGFpbmVkIHdpdGhpbiBib3VuZGluZyBib3hcclxuICAgICAqIHN0b3BzIGl0ZXJhdGluZyBpZiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlXHJcbiAgICAgKiBAcGFyYW0ge0FBQkJ9IEFBQkIgYm91bmRpbmcgYm94IHRvIHNlYXJjaFxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NpbXBsZVRlc3Q9dHJ1ZV0gcGVyZm9ybSBhIHNpbXBsZSBib3VuZHMgY2hlY2sgb2YgYWxsIGl0ZW1zIGluIHRoZSBidWNrZXRzXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGNhbGxiYWNrIHJldHVybmVkIGVhcmx5XHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5Q2FsbGJhY2soQUFCQiwgY2FsbGJhY2ssIHNpbXBsZVRlc3QpXHJcbiAgICB7XHJcbiAgICAgICAgc2ltcGxlVGVzdCA9IHR5cGVvZiBzaW1wbGVUZXN0ICE9PSAndW5kZWZpbmVkJyA/IHNpbXBsZVRlc3QgOiB0cnVlXHJcbiAgICAgICAgY29uc3QgeyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9ID0gdGhpcy5nZXRCb3VuZHMoQUFCQilcclxuICAgICAgICBmb3IgKGxldCB5ID0geVN0YXJ0OyB5IDw9IHlFbmQ7IHkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHggPSB4U3RhcnQ7IHggPD0geEVuZDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuaGFzaFt4ICsgJywnICsgeV1cclxuICAgICAgICAgICAgICAgIGlmIChlbnRyeSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJ5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gZW50cnlbaV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpbXBsZVRlc3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFBQkIgPSBvYmplY3QuQUFCQlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFBQkIueCArIEFBQkIud2lkdGggPiBBQUJCLnggJiYgQUFCQi54IDwgQUFCQi54ICsgQUFCQi53aWR0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQUFCQi55ICsgQUFCQi5oZWlnaHQgPiBBQUJCLnkgJiYgQUFCQi55IDwgQUFCQi55ICsgQUFCQi5oZWlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKG9iamVjdCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhvYmplY3QpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBnZXQgc3RhdHNcclxuICAgICAqIEByZXR1cm4ge1N0YXRzfVxyXG4gICAgICovXHJcbiAgICBzdGF0cygpXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IHZpc2libGUgPSAwLCBjb3VudCA9IDBcclxuICAgICAgICBmb3IgKGxldCBsaXN0IG9mIHRoaXMubGlzdHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsaXN0LmZvckVhY2gob2JqZWN0ID0+XHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZpc2libGUgKz0gb2JqZWN0LnZpc2libGUgPyAxIDogMFxyXG4gICAgICAgICAgICAgICAgY291bnQrK1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG90YWw6IGNvdW50LFxyXG4gICAgICAgICAgICB2aXNpYmxlLFxyXG4gICAgICAgICAgICBjdWxsZWQ6IGNvdW50IC0gdmlzaWJsZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGhlbHBlciBmdW5jdGlvbiB0byBldmFsdWF0ZSBoYXNoIHRhYmxlXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZVxyXG4gICAgICogKi9cclxuICAgIGdldEJ1Y2tldHMoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmhhc2gpLmxlbmd0aFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogaGVscGVyIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIGhhc2ggdGFibGVcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGVudHJpZXMgaW4gZWFjaCBidWNrZXRcclxuICAgICAqL1xyXG4gICAgZ2V0QXZlcmFnZVNpemUoKVxyXG4gICAge1xyXG4gICAgICAgIGxldCB0b3RhbCA9IDBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5oYXNoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5oYXNoW2tleV0ubGVuZ3RoXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0b3RhbCAvIHRoaXMuZ2V0QnVja2V0cygpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gZXZhbHVhdGUgdGhlIGhhc2ggdGFibGVcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGxhcmdlc3Qgc2l6ZWQgYnVja2V0XHJcbiAgICAgKi9cclxuICAgIGdldExhcmdlc3QoKVxyXG4gICAge1xyXG4gICAgICAgIGxldCBsYXJnZXN0ID0gMFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmhhc2gpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNoW2tleV0ubGVuZ3RoID4gbGFyZ2VzdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFyZ2VzdCA9IHRoaXMuaGFzaFtrZXldLmxlbmd0aFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsYXJnZXN0XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIGhlbHBlciBmdW5jdGlvbiB0byBldmFsdXRlIHRoZSBoYXNoIHRhYmxlXHJcbiAgICAgKiBAcGFyYW0ge0FBQkJ9IEFBQkIgYm91bmRpbmcgYm94IHRvIHNlYXJjaFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBzcGFyc2VuZXNzIHBlcmNlbnRhZ2UgKGkuZS4sIGJ1Y2tldHMgd2l0aCBhdCBsZWFzdCAxIGVsZW1lbnQgZGl2aWRlZCBieSB0b3RhbCBwb3NzaWJsZSBidWNrZXRzKVxyXG4gICAgICovXHJcbiAgICBnZXRTcGFyc2VuZXNzKEFBQkIpXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gMCwgdG90YWwgPSAwXHJcbiAgICAgICAgY29uc3QgeyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9ID0gdGhpcy5nZXRCb3VuZHMoQUFCQilcclxuICAgICAgICBmb3IgKGxldCB5ID0geVN0YXJ0OyB5IDwgeUVuZDsgeSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgeCA9IHhTdGFydDsgeCA8IHhFbmQ7IHgrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY291bnQgKz0gKHRoaXMuaGFzaFt4ICsgJywnICsgeV0gPyAxIDogMClcclxuICAgICAgICAgICAgICAgIHRvdGFsKytcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY291bnQgLyB0b3RhbFxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge29iamVjdH0gU3RhdHNcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2aXNpYmxlXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjdWxsZWRcclxuICovXHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge29iamVjdH0gQm91bmRzXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4U3RhcnRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHlTdGFydFxyXG4gKiBAcHJvcGVydHkge251bWJlcn0geEVuZFxyXG4gKiBAcHJvcGVydHkge251bWJlcn0geEVuZFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gICogQHR5cGVkZWYge29iamVjdH0gQUFCQlxyXG4gICogQHByb3BlcnR5IHtudW1iZXJ9IHhcclxuICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB5XHJcbiAgKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGhcclxuICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHRcclxuICAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcGF0aWFsSGFzaCJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2NvZGUvc3BhdGlhbC1oYXNoLmpzIl0sIm5hbWVzIjpbIlNwYXRpYWxIYXNoIiwib3B0aW9ucyIsInhTaXplIiwic2l6ZSIsInlTaXplIiwiQUFCQiIsInR5cGUiLCJzcGF0aWFsIiwiY2FsY3VsYXRlUElYSSIsInZpc2libGVUZXh0IiwidmlzaWJsZVRlc3QiLCJzaW1wbGVUZXN0IiwiZGlydHlUZXN0IiwidmlzaWJsZSIsImRpcnR5Iiwid2lkdGgiLCJoZWlnaHQiLCJoYXNoIiwibGlzdHMiLCJvYmplY3QiLCJzdGF0aWNPYmplY3QiLCJoYXNoZXMiLCJ1cGRhdGVPYmplY3QiLCJwdXNoIiwic3BsaWNlIiwibGlzdCIsImluZGV4T2YiLCJyZW1vdmVGcm9tSGFzaCIsImFycmF5IiwiZm9yRWFjaCIsInNraXBVcGRhdGUiLCJ1cGRhdGVPYmplY3RzIiwiaW52aXNpYmxlIiwib2JqZWN0cyIsInF1ZXJ5IiwibGFzdEJ1Y2tldHMiLCJib3giLCJnZXRMb2NhbEJvdW5kcyIsIngiLCJzY2FsZSIsInkiLCJnZXRCb3VuZHMiLCJ4U3RhcnQiLCJ5U3RhcnQiLCJ4RW5kIiwieUVuZCIsImxlbmd0aCIsImtleSIsImluc2VydCIsIk1hdGgiLCJmbG9vciIsInBvcCIsInJlc3VsdHMiLCJjb25jYXQiLCJidWNrZXRzIiwiZW50cnkiLCJjYWxsYmFjayIsImkiLCJjb3VudCIsInRvdGFsIiwiY3VsbGVkIiwiT2JqZWN0Iiwia2V5cyIsImdldEJ1Y2tldHMiLCJsYXJnZXN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBOztJQUVNQSxXO0FBRUY7Ozs7Ozs7Ozs7Ozs7O0FBY0EseUJBQVlDLE9BQVosRUFDQTtBQUFBOztBQUNJQSxrQkFBVUEsV0FBVyxFQUFyQjtBQUNBLGFBQUtDLEtBQUwsR0FBYUQsUUFBUUMsS0FBUixJQUFpQkQsUUFBUUUsSUFBekIsSUFBaUMsSUFBOUM7QUFDQSxhQUFLQyxLQUFMLEdBQWFI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SUFBSSxHQUFKLEdBQVVFLENBQXBCLElBQXlCLENBQXpCLEdBQTZCLENBQXZDO0FBQ0FtQjtBQUNIO0FBQ0o7QUFDRCxtQkFBT0QsUUFBUUMsS0FBZjtBQUNIOzs7Ozs7QUFHTDs7Ozs7OztBQU9BOzs7Ozs7OztBQVFBOzs7Ozs7OztBQVFBTSxPQUFPQyxPQUFQLEdBQWlCbEUsV0FBakIiLCJmaWxlIjoic3BhdGlhbC1oYXNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTggWU9QRVkgWU9QRVkgTExDXHJcbi8vIERhdmlkIEZpZ2F0bmVyXHJcbi8vIE1JVCBMaWNlbnNlXHJcblxyXG5jbGFzcyBTcGF0aWFsSGFzaFxyXG57XHJcbiAgICAvKipcclxuICAgICAqIGNyZWF0ZXMgYSBzcGF0aWFsLWhhc2ggY3VsbFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNpemU9MTAwMF0gY2VsbCBzaXplIHVzZWQgdG8gY3JlYXRlIGhhc2ggKHhTaXplID0geVNpemUpXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMueFNpemVdIGhvcml6b250YWwgY2VsbCBzaXplXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMueVNpemVdIHZlcnRpY2FsIGNlbGwgc2l6ZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jYWxjdWxhdGVQSVhJPXRydWVdIGNhbGN1bGF0ZSBib3VuZGluZyBib3ggYXV0b21hdGljYWxseTsgaWYgdGhpcyBpcyBzZXQgdG8gZmFsc2UgdGhlbiBpdCB1c2VzIG9iamVjdFtvcHRpb25zLkFBQkJdIGZvciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmlzaWJsZT12aXNpYmxlXSBwYXJhbWV0ZXIgb2YgdGhlIG9iamVjdCB0byBzZXQgKHVzdWFsbHkgdmlzaWJsZSBvciByZW5kZXJhYmxlKVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5zaW1wbGVUZXN0PXRydWVdIGl0ZXJhdGUgdGhyb3VnaCB2aXNpYmxlIGJ1Y2tldHMgdG8gY2hlY2sgZm9yIGJvdW5kc1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmRpcnR5VGVzdD10cnVlXSBvbmx5IHVwZGF0ZSBzcGF0aWFsIGhhc2ggZm9yIG9iamVjdHMgd2l0aCBvYmplY3Rbb3B0aW9ucy5kaXJ0eVRlc3RdPXRydWU7IHRoaXMgaGFzIGEgSFVHRSBpbXBhY3Qgb24gcGVyZm9ybWFuY2VcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5BQUJCPUFBQkJdIG9iamVjdCBwcm9wZXJ0eSB0aGF0IGhvbGRzIGJvdW5kaW5nIGJveCBzbyB0aGF0IG9iamVjdFt0eXBlXSA9IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH1cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zcGF0aWFsPXNwYXRpYWxdIG9iamVjdCBwcm9wZXJ0eSB0aGF0IGhvbGRzIG9iamVjdCdzIGhhc2ggbGlzdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmRpcnR5PWRpcnR5XSBvYmplY3QgcHJvcGVydHkgZm9yIGRpcnR5VGVzdFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XHJcbiAgICAgICAgdGhpcy54U2l6ZSA9IG9wdGlvbnMueFNpemUgfHwgb3B0aW9ucy5zaXplIHx8IDEwMDBcclxuICAgICAgICB0aGlzLnlTaXplID0gb3B0aW9ucy55U2l6ZSB8fCBvcHRpb25zLnNpemUgfHwgMTAwMFxyXG4gICAgICAgIHRoaXMuQUFCQiA9IG9wdGlvbnMudHlwZSB8fCAnQUFCQidcclxuICAgICAgICB0aGlzLnNwYXRpYWwgPSBvcHRpb25zLnNwYXRpYWwgfHwgJ3NwYXRpYWwnXHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQSVhJID0gdHlwZW9mIG9wdGlvbnMuY2FsY3VsYXRlUElYSSAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zLmNhbGN1bGF0ZVBJWEkgOiB0cnVlXHJcbiAgICAgICAgdGhpcy52aXNpYmxlVGV4dCA9IHR5cGVvZiBvcHRpb25zLnZpc2libGVUZXN0ICE9PSAndW5kZWZpbmVkJyA/IG9wdGlvbnMudmlzaWJsZVRlc3QgOiB0cnVlXHJcbiAgICAgICAgdGhpcy5zaW1wbGVUZXN0ID0gdHlwZW9mIG9wdGlvbnMuc2ltcGxlVGVzdCAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb25zLnNpbXBsZVRlc3QgOiB0cnVlXHJcbiAgICAgICAgdGhpcy5kaXJ0eVRlc3QgPSB0eXBlb2Ygb3B0aW9ucy5kaXJ0eVRlc3QgIT09ICd1bmRlZmluZWQnID8gb3B0aW9ucy5kaXJ0eVRlc3QgOiB0cnVlXHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gb3B0aW9ucy52aXNpYmxlIHx8ICd2aXNpYmxlJ1xyXG4gICAgICAgIHRoaXMuZGlydHkgPSBvcHRpb25zLmRpcnR5IHx8ICdkaXJ0eSdcclxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5oZWlnaHQgPSAwXHJcbiAgICAgICAgdGhpcy5oYXNoID0ge31cclxuICAgICAgICB0aGlzLmxpc3RzID0gW1tdXVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogYWRkIGFuIG9iamVjdCB0byBiZSBjdWxsZWRcclxuICAgICAqIHNpZGUgZWZmZWN0OiBhZGRzIG9iamVjdC5zcGF0aWFsSGFzaGVzIHRvIHRyYWNrIGV4aXN0aW5nIGhhc2hlc1xyXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0YXRpY09iamVjdF0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCdzIHBvc2l0aW9uL3NpemUgZG9lcyBub3QgY2hhbmdlXHJcbiAgICAgKiBAcmV0dXJuIHsqfSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgYWRkKG9iamVjdCwgc3RhdGljT2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIG9iamVjdFt0aGlzLnNwYXRpYWxdID0geyBoYXNoZXM6IFtdIH1cclxuICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVQSVhJICYmIHRoaXMuZGlydHlUZXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb2JqZWN0W3RoaXMuZGlydHldID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhdGljT2JqZWN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb2JqZWN0LnN0YXRpY09iamVjdCA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVPYmplY3Qob2JqZWN0KVxyXG4gICAgICAgIHRoaXMubGlzdHNbMF0ucHVzaChvYmplY3QpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZW1vdmUgYW4gb2JqZWN0IGFkZGVkIGJ5IGFkZCgpXHJcbiAgICAgKiBAcGFyYW0geyp9IG9iamVjdFxyXG4gICAgICogQHJldHVybiB7Kn0gb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHJlbW92ZShvYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5saXN0c1swXS5zcGxpY2UodGhpcy5saXN0WzBdLmluZGV4T2Yob2JqZWN0KSwgMSlcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21IYXNoKG9iamVjdClcclxuICAgICAgICByZXR1cm4gb2JqZWN0XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBhZGQgYW4gYXJyYXkgb2Ygb2JqZWN0cyB0byBiZSBjdWxsZWRcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdGF0aWNPYmplY3RdIHNldCB0byB0cnVlIGlmIHRoZSBvYmplY3RzIGluIHRoZSBsaXN0IHBvc2l0aW9uL3NpemUgZG9lcyBub3QgY2hhbmdlXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gYXJyYXlcclxuICAgICAqL1xyXG4gICAgYWRkTGlzdChsaXN0LCBzdGF0aWNPYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChsZXQgb2JqZWN0IG9mIGxpc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvYmplY3RbdGhpcy5zcGF0aWFsXSA9IHsgaGFzaGVzOiBbXSB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGN1bGF0ZVBJWEkgJiYgdGhpcy5kaXJ0eVRlc3QpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFt0aGlzLmRpcnR5XSA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGljT2JqZWN0KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsaXN0LnN0YXRpY09iamVjdCA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9iamVjdChvYmplY3QpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGlzdHMucHVzaChsaXN0KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogcmVtb3ZlIGFuIGFycmF5IGFkZGVkIGJ5IGFkZExpc3QoKVxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcclxuICAgICAqIEByZXR1cm4ge0FycmF5fSBhcnJheVxyXG4gICAgICovXHJcbiAgICByZW1vdmVMaXN0KGFycmF5KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMubGlzdHMuc3BsaWNlKHRoaXMubGlzdHMuaW5kZXhPZihhcnJheSksIDEpXHJcbiAgICAgICAgYXJyYXkuZm9yRWFjaChvYmplY3QgPT4gdGhpcy5yZW1vdmVGcm9tSGFzaChvYmplY3QpKVxyXG4gICAgICAgIHJldHVybiBhcnJheVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXBkYXRlIHRoZSBoYXNoZXMgYW5kIGN1bGwgdGhlIGl0ZW1zIGluIHRoZSBsaXN0XHJcbiAgICAgKiBAcGFyYW0ge0FBQkJ9IEFBQkJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBVcGRhdGVdIHNraXAgdXBkYXRpbmcgdGhlIGhhc2hlcyBvZiBhbGwgb2JqZWN0c1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBudW1iZXIgb2YgYnVja2V0cyBpbiByZXN1bHRzXHJcbiAgICAgKi9cclxuICAgIGN1bGwoQUFCQiwgc2tpcFVwZGF0ZSlcclxuICAgIHtcclxuICAgICAgICBpZiAoIXNraXBVcGRhdGUpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9iamVjdHMoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmludmlzaWJsZSgpXHJcbiAgICAgICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMucXVlcnkoQUFCQiwgdGhpcy5zaW1wbGVUZXN0KVxyXG4gICAgICAgIG9iamVjdHMuZm9yRWFjaChvYmplY3QgPT4gb2JqZWN0W3RoaXMudmlzaWJsZV0gPSB0cnVlKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RCdWNrZXRzXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBzZXQgYWxsIG9iamVjdHMgaW4gaGFzaCB0byB2aXNpYmxlPWZhbHNlXHJcbiAgICAgKi9cclxuICAgIGludmlzaWJsZSgpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChsZXQgbGlzdCBvZiB0aGlzLmxpc3RzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKG9iamVjdCA9PiBvYmplY3RbdGhpcy52aXNpYmxlXSA9IGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHVwZGF0ZSB0aGUgaGFzaGVzIGZvciBhbGwgb2JqZWN0c1xyXG4gICAgICogYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSB1cGRhdGUoKSB3aGVuIHNraXBVcGRhdGU9ZmFsc2VcclxuICAgICAqL1xyXG4gICAgdXBkYXRlT2JqZWN0cygpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHlUZXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbGlzdCBvZiB0aGlzLmxpc3RzKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBvYmplY3Qgb2YgbGlzdClcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W3RoaXMuZGlydHldKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVPYmplY3Qob2JqZWN0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbdGhpcy5kaXJ0eV0gPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBsaXN0IG9mIHRoaXMubGlzdHMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxpc3QuZm9yRWFjaChvYmplY3QgPT4gdGhpcy51cGRhdGVPYmplY3Qob2JqZWN0KSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHVwZGF0ZSB0aGUgaGFzIG9mIGFuIG9iamVjdFxyXG4gICAgICogYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSB1cGRhdGVPYmplY3RzKClcclxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZV0gZm9yY2UgdXBkYXRlIGZvciBjYWxjdWxhdGVQSVhJXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZU9iamVjdChvYmplY3QpXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IEFBQkJcclxuICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVQSVhJKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgYm94ID0gb2JqZWN0LmdldExvY2FsQm91bmRzKClcclxuICAgICAgICAgICAgQUFCQiA9IG9iamVjdFt0aGlzLkFBQkJdID0ge1xyXG4gICAgICAgICAgICAgICAgeDogb2JqZWN0LnggKyBib3gueCAqIG9iamVjdC5zY2FsZS54LFxyXG4gICAgICAgICAgICAgICAgeTogb2JqZWN0LnkgKyBib3gueSAqIG9iamVjdC5zY2FsZS55LFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGJveC53aWR0aCAqIG9iamVjdC5zY2FsZS54LFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBib3guaGVpZ2h0ICogb2JqZWN0LnNjYWxlLnlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBBQUJCID0gb2JqZWN0W3RoaXMuQUFCQl1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNwYXRpYWwgPSBvYmplY3RbdGhpcy5zcGF0aWFsXVxyXG4gICAgICAgIGNvbnN0IHsgeFN0YXJ0LCB5U3RhcnQsIHhFbmQsIHlFbmQgfSA9IHRoaXMuZ2V0Qm91bmRzKEFBQkIpXHJcblxyXG4gICAgICAgIC8vIG9ubHkgcmVtb3ZlIGFuZCBpbnNlcnQgaWYgbWFwcGluZyBoYXMgY2hhbmdlZFxyXG4gICAgICAgIGlmIChzcGF0aWFsLnhTdGFydCAhPT0geFN0YXJ0IHx8IHNwYXRpYWwueVN0YXJ0ICE9PSB5U3RhcnQgfHwgc3BhdGlhbC54RW5kICE9PSB4RW5kIHx8IHNwYXRpYWwueUVuZCAhPT0geUVuZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChzcGF0aWFsLmhhc2hlcy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbUhhc2gob2JqZWN0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSB5U3RhcnQ7IHkgPD0geUVuZDsgeSsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB4ID0geFN0YXJ0OyB4IDw9IHhFbmQ7IHgrKylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB4ICsgJywnICsgeVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0KG9iamVjdCwga2V5KVxyXG4gICAgICAgICAgICAgICAgICAgIHNwYXRpYWwuaGFzaGVzLnB1c2goa2V5KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNwYXRpYWwueFN0YXJ0ID0geFN0YXJ0XHJcbiAgICAgICAgICAgIHNwYXRpYWwueVN0YXJ0ID0geVN0YXJ0XHJcbiAgICAgICAgICAgIHNwYXRpYWwueEVuZCA9IHhFbmRcclxuICAgICAgICAgICAgc3BhdGlhbC55RW5kID0geUVuZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldHMgaGFzaCBib3VuZHNcclxuICAgICAqIEBwYXJhbSB7QUFCQn0gQUFCQlxyXG4gICAgICogQHJldHVybiB7Qm91bmRzfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgZ2V0Qm91bmRzKEFBQkIpXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IHhTdGFydCA9IE1hdGguZmxvb3IoQUFCQi54IC8gdGhpcy54U2l6ZSlcclxuICAgICAgICBsZXQgeVN0YXJ0ID0gTWF0aC5mbG9vcihBQUJCLnkgLyB0aGlzLnlTaXplKVxyXG4gICAgICAgIGxldCB4RW5kID0gTWF0aC5mbG9vcigoQUFCQi54ICsgQUFCQi53aWR0aCkgLyB0aGlzLnhTaXplKVxyXG4gICAgICAgIGxldCB5RW5kID0gTWF0aC5mbG9vcigoQUFCQi55ICsgQUFCQi5oZWlnaHQpIC8gdGhpcy55U2l6ZSlcclxuICAgICAgICByZXR1cm4geyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpbnNlcnQgb2JqZWN0IGludG8gdGhlIHNwYXRpYWwgaGFzaFxyXG4gICAgICogYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSB1cGRhdGVPYmplY3QoKVxyXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuICAgICAqL1xyXG4gICAgaW5zZXJ0KG9iamVjdCwga2V5KVxyXG4gICAge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNoW2tleV0pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IFtvYmplY3RdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldLnB1c2gob2JqZWN0KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHJlbW92ZXMgb2JqZWN0IGZyb20gdGhlIGhhc2ggdGFibGVcclxuICAgICAqIHNob3VsZCBiZSBjYWxsZWQgd2hlbiByZW1vdmluZyBhbiBvYmplY3RcclxuICAgICAqIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGZyb20gdXBkYXRlT2JqZWN0KClcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRnJvbUhhc2gob2JqZWN0KVxyXG4gICAge1xyXG4gICAgICAgIGNvbnN0IHNwYXRpYWwgPSBvYmplY3RbdGhpcy5zcGF0aWFsXVxyXG4gICAgICAgIHdoaWxlIChzcGF0aWFsLmhhc2hlcy5sZW5ndGgpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzcGF0aWFsLmhhc2hlcy5wb3AoKVxyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5oYXNoW2tleV1cclxuICAgICAgICAgICAgbGlzdC5zcGxpY2UobGlzdC5pbmRleE9mKG9iamVjdCksIDEpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2V0IGFsbCBuZWlnaGJvcnMgdGhhdCBzaGFyZSB0aGUgc2FtZSBoYXNoIGFzIG9iamVjdFxyXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3QgaW4gdGhlIHNwYXRpYWwgaGFzaFxyXG4gICAgICogQHJldHVybiB7QXJyYXl9IG9mIG9iamVjdHMgdGhhdCBhcmUgaW4gdGhlIHNhbWUgaGFzaCBhcyBvYmplY3RcclxuICAgICAqL1xyXG4gICAgbmVpZ2hib3JzKG9iamVjdClcclxuICAgIHtcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdXHJcbiAgICAgICAgb2JqZWN0W3RoaXMuc3BhdGlhbF0uaGFzaGVzLmZvckVhY2goa2V5ID0+IHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdCh0aGlzLmhhc2hba2V5XSkpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluZWQgd2l0aGluIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtIHtBQUJCfSBBQUJCIGJvdW5kaW5nIGJveCB0byBzZWFyY2hcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NpbXBsZVRlc3Q9dHJ1ZV0gcGVyZm9ybSBhIHNpbXBsZSBib3VuZHMgY2hlY2sgb2YgYWxsIGl0ZW1zIGluIHRoZSBidWNrZXRzXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3RbXX0gc2VhcmNoIHJlc3VsdHNcclxuICAgICAqL1xyXG4gICAgcXVlcnkoQUFCQiwgc2ltcGxlVGVzdClcclxuICAgIHtcclxuICAgICAgICBzaW1wbGVUZXN0ID0gdHlwZW9mIHNpbXBsZVRlc3QgIT09ICd1bmRlZmluZWQnID8gc2ltcGxlVGVzdCA6IHRydWVcclxuICAgICAgICBsZXQgYnVja2V0cyA9IDBcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdXHJcbiAgICAgICAgY29uc3QgeyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9ID0gdGhpcy5nZXRCb3VuZHMoQUFCQilcclxuICAgICAgICBmb3IgKGxldCB5ID0geVN0YXJ0OyB5IDw9IHlFbmQ7IHkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHggPSB4U3RhcnQ7IHggPD0geEVuZDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuaGFzaFt4ICsgJywnICsgeV1cclxuICAgICAgICAgICAgICAgIGlmIChlbnRyeSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlVGVzdClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG9iamVjdCBvZiBlbnRyeSlcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm94ID0gb2JqZWN0W3RoaXMuQUFCQl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3gueCArIGJveC53aWR0aCA+IEFBQkIueCAmJiBib3gueCA8IEFBQkIueCArIEFBQkIud2lkdGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC55ICsgYm94LmhlaWdodCA+IEFBQkIueSAmJiBib3gueSA8IEFBQkIueSArIEFBQkIuaGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChvYmplY3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KGVudHJ5KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBidWNrZXRzKytcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RCdWNrZXRzID0gYnVja2V0c1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpdGVyYXRlcyB0aHJvdWdoIG9iamVjdHMgY29udGFpbmVkIHdpdGhpbiBib3VuZGluZyBib3hcclxuICAgICAqIHN0b3BzIGl0ZXJhdGluZyBpZiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlXHJcbiAgICAgKiBAcGFyYW0ge0FBQkJ9IEFBQkIgYm91bmRpbmcgYm94IHRvIHNlYXJjaFxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NpbXBsZVRlc3Q9dHJ1ZV0gcGVyZm9ybSBhIHNpbXBsZSBib3VuZHMgY2hlY2sgb2YgYWxsIGl0ZW1zIGluIHRoZSBidWNrZXRzXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGNhbGxiYWNrIHJldHVybmVkIGVhcmx5XHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5Q2FsbGJhY2soQUFCQiwgY2FsbGJhY2ssIHNpbXBsZVRlc3QpXHJcbiAgICB7XHJcbiAgICAgICAgc2ltcGxlVGVzdCA9IHR5cGVvZiBzaW1wbGVUZXN0ICE9PSAndW5kZWZpbmVkJyA/IHNpbXBsZVRlc3QgOiB0cnVlXHJcbiAgICAgICAgY29uc3QgeyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9ID0gdGhpcy5nZXRCb3VuZHMoQUFCQilcclxuICAgICAgICBmb3IgKGxldCB5ID0geVN0YXJ0OyB5IDw9IHlFbmQ7IHkrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHggPSB4U3RhcnQ7IHggPD0geEVuZDsgeCsrKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuaGFzaFt4ICsgJywnICsgeV1cclxuICAgICAgICAgICAgICAgIGlmIChlbnRyeSlcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJ5Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gZW50cnlbaV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpbXBsZVRlc3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFBQkIgPSBvYmplY3QuQUFCQlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFBQkIueCArIEFBQkIud2lkdGggPiBBQUJCLnggJiYgQUFCQi54IDwgQUFCQi54ICsgQUFCQi53aWR0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQUFCQi55ICsgQUFCQi5oZWlnaHQgPiBBQUJCLnkgJiYgQUFCQi55IDwgQUFCQi55ICsgQUFCQi5oZWlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKG9iamVjdCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhvYmplY3QpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBnZXQgc3RhdHNcclxuICAgICAqIEByZXR1cm4ge1N0YXRzfVxyXG4gICAgICovXHJcbiAgICBzdGF0cygpXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IHZpc2libGUgPSAwLCBjb3VudCA9IDBcclxuICAgICAgICBmb3IgKGxldCBsaXN0IG9mIHRoaXMubGlzdHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsaXN0LmZvckVhY2gob2JqZWN0ID0+XHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZpc2libGUgKz0gb2JqZWN0LnZpc2libGUgPyAxIDogMFxyXG4gICAgICAgICAgICAgICAgY291bnQrK1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG90YWw6IGNvdW50LFxyXG4gICAgICAgICAgICB2aXNpYmxlLFxyXG4gICAgICAgICAgICBjdWxsZWQ6IGNvdW50IC0gdmlzaWJsZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGhlbHBlciBmdW5jdGlvbiB0byBldmFsdWF0ZSBoYXNoIHRhYmxlXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZVxyXG4gICAgICogKi9cclxuICAgIGdldEJ1Y2tldHMoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmhhc2gpLmxlbmd0aFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogaGVscGVyIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIGhhc2ggdGFibGVcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGVudHJpZXMgaW4gZWFjaCBidWNrZXRcclxuICAgICAqL1xyXG4gICAgZ2V0QXZlcmFnZVNpemUoKVxyXG4gICAge1xyXG4gICAgICAgIGxldCB0b3RhbCA9IDBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5oYXNoKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5oYXNoW2tleV0ubGVuZ3RoXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0b3RhbCAvIHRoaXMuZ2V0QnVja2V0cygpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gZXZhbHVhdGUgdGhlIGhhc2ggdGFibGVcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGxhcmdlc3Qgc2l6ZWQgYnVja2V0XHJcbiAgICAgKi9cclxuICAgIGdldExhcmdlc3QoKVxyXG4gICAge1xyXG4gICAgICAgIGxldCBsYXJnZXN0ID0gMFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmhhc2gpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNoW2tleV0ubGVuZ3RoID4gbGFyZ2VzdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFyZ2VzdCA9IHRoaXMuaGFzaFtrZXldLmxlbmd0aFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsYXJnZXN0XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIGhlbHBlciBmdW5jdGlvbiB0byBldmFsdXRlIHRoZSBoYXNoIHRhYmxlXHJcbiAgICAgKiBAcGFyYW0ge0FBQkJ9IEFBQkIgYm91bmRpbmcgYm94IHRvIHNlYXJjaFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBzcGFyc2VuZXNzIHBlcmNlbnRhZ2UgKGkuZS4sIGJ1Y2tldHMgd2l0aCBhdCBsZWFzdCAxIGVsZW1lbnQgZGl2aWRlZCBieSB0b3RhbCBwb3NzaWJsZSBidWNrZXRzKVxyXG4gICAgICovXHJcbiAgICBnZXRTcGFyc2VuZXNzKEFBQkIpXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gMCwgdG90YWwgPSAwXHJcbiAgICAgICAgY29uc3QgeyB4U3RhcnQsIHlTdGFydCwgeEVuZCwgeUVuZCB9ID0gdGhpcy5nZXRCb3VuZHMoQUFCQilcclxuICAgICAgICBmb3IgKGxldCB5ID0geVN0YXJ0OyB5IDwgeUVuZDsgeSsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgeCA9IHhTdGFydDsgeCA8IHhFbmQ7IHgrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY291bnQgKz0gKHRoaXMuaGFzaFt4ICsgJywnICsgeV0gPyAxIDogMClcclxuICAgICAgICAgICAgICAgIHRvdGFsKytcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY291bnQgLyB0b3RhbFxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge29iamVjdH0gU3RhdHNcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2aXNpYmxlXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjdWxsZWRcclxuICovXHJcblxyXG4vKipcclxuICogQHR5cGVkZWYge29iamVjdH0gQm91bmRzXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4U3RhcnRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHlTdGFydFxyXG4gKiBAcHJvcGVydHkge251bWJlcn0geEVuZFxyXG4gKiBAcHJvcGVydHkge251bWJlcn0geEVuZFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gICogQHR5cGVkZWYge29iamVjdH0gQUFCQlxyXG4gICogQHByb3BlcnR5IHtudW1iZXJ9IHhcclxuICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB5XHJcbiAgKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGhcclxuICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHRcclxuICAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTcGF0aWFsSGFzaCJdfQ==
{
"name": "pixi-cull",
"version": "0.3.0",
"version": "0.3.1",
"description": "a library to visibly cull objects designed to work with pixi.js",

@@ -5,0 +5,0 @@ "main": "dist/index.js",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc