billboard.js
Version:
Re-usable easy interface JavaScript chart library, based on D3 v4+
13 lines • 22.5 kB
JavaScript
/*!
* Copyright (c) 2017 ~ present NAVER Corp.
* billboard.js project is licensed under the MIT license
*
* billboard.js, JavaScript chart library
* https://naver.github.io/billboard.js/
*
* @version 2.0.0-next.5
* @requires billboard.js
* @summary billboard.js plugin
*/
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("d3-selection")):"function"==typeof define&&define.amd?define("bubblecompare",["d3-selection"],e):"object"==typeof exports?exports.bubblecompare=e(require("d3-selection")):(t.bb=t.bb||{},t.bb.plugin=t.bb.plugin||{},t.bb.plugin.bubblecompare=e(t.d3))}(this,(function(t){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return c}));var r=n(1),i=n(2),o=n(3),u=n(4),c=function(t){function e(e){var n;return n=t.call(this,e)||this,Object(o.a)(Object(r.a)(n),"$$",void 0),Object(r.a)(n)||Object(r.a)(n)}Object(i.a)(e,t);var n=e.prototype;return n.$init=function(){var t=this.$$;t.findClosest=this.findClosest.bind(this),t.getBubbleR=this.getBubbleR.bind(this),t.pointExpandedR=this.pointExpandedR.bind(this)},n.pointExpandedR=function(t){var n=this.getBubbleR(t),r=this.options.expandScale,i=void 0===r?1:r;return e.raiseFocusedBubbleLayer(t),this.changeCursorPoint(),n*i},e.raiseFocusedBubbleLayer=function(t){t.raise&&Object(u.select)(t.node().parentNode.parentNode).raise()},n.changeCursorPoint=function(){this.$$.$el.svg.select(".bb-event-rect").style("cursor","pointer")},n.findClosest=function(t,e){var n=this,r=this.$$;return t.filter((function(t){return t&&!r.isBarType(t.id)})).reduce((function(t,i){return r.dist(i,e)<n.getBubbleR(i)?i:t}),0)},n.getBubbleR=function(t){var e=this,n=this.options,r=n.minR,i=n.maxR,o=this.getZData(t);if(!o)return r;var u=this.$$.data.targets.reduce((function(t,n){var r=t[0],i=t[1],o=e.getZData(n.values[0]);return[Math.min(r,o),Math.max(i,o)]}),[1e4,0]),c=u[0],a=u[1],s=c>0&&a===c?0:o/a;return Math.abs(s)*(i-r)+r},n.getZData=function(t){return this.$$.isBubbleZType(t)?this.$$.getBubbleZData(t.value,"z"):t.value},e}(n(5).a);Object(o.a)(c,"version","0.0.1")},function(t,e,n){"use strict";function r(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";function r(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,"a",(function(){return r}))},function(e,n){e.exports=t},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(3),i=function(){function t(t){void 0===t&&(t={}),Object(r.a)(this,"$$",void 0),Object(r.a)(this,"options",void 0),this.options=t}var e=t.prototype;return e.$beforeInit=function(){},e.$init=function(){},e.$afterInit=function(){},e.$redraw=function(){},e.$willDestroy=function(){var t=this;Object.keys(this).forEach((function(e){t[e]=null,delete t[e]}))},t}();Object(r.a)(i,"version","2.0.0-next.5")}]).default}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9iYi5wbHVnaW4uW25hbWVdL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9iYi5wbHVnaW4uW25hbWVdL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2JiLnBsdWdpbi5bbmFtZV0vLi9zcmMvUGx1Z2luL2J1YmJsZWNvbXBhcmUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vYmIucGx1Z2luLltuYW1lXS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vYmIucGx1Z2luLltuYW1lXS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovL2JiLnBsdWdpbi5bbmFtZV0vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vYmIucGx1Z2luLltuYW1lXS9leHRlcm5hbCB7XCJjb21tb25qc1wiOlwiZDMtc2VsZWN0aW9uXCIsXCJjb21tb25qczJcIjpcImQzLXNlbGVjdGlvblwiLFwiYW1kXCI6XCJkMy1zZWxlY3Rpb25cIixcInJvb3RcIjpcImQzXCJ9Iiwid2VicGFjazovL2JiLnBsdWdpbi5bbmFtZV0vLi9zcmMvUGx1Z2luL1BsdWdpbi50cyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzRfXyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJCdWJibGVDb21wYXJlIiwib3B0aW9ucyIsIiRpbml0IiwiJCQiLCJmaW5kQ2xvc2VzdCIsImdldEJ1YmJsZVIiLCJwb2ludEV4cGFuZGVkUiIsImJhc2VSIiwiZXhwYW5kU2NhbGUiLCJyYWlzZUZvY3VzZWRCdWJibGVMYXllciIsImNoYW5nZUN1cnNvclBvaW50IiwicmFpc2UiLCJkM1NlbGVjdCIsIm5vZGUiLCJwYXJlbnROb2RlIiwiJGVsIiwic3ZnIiwic2VsZWN0Iiwic3R5bGUiLCJ2YWx1ZXMiLCJwb3MiLCJmaWx0ZXIiLCJ2IiwiaXNCYXJUeXBlIiwiaWQiLCJyZWR1Y2UiLCJhY2MiLCJjdXIiLCJkaXN0IiwibWluUiIsIm1heFIiLCJjdXJWYWwiLCJnZXRaRGF0YSIsImRhdGEiLCJ0YXJnZXRzIiwiYWNjTWluIiwiYWNjTWF4IiwidmFsIiwiTWF0aCIsIm1pbiIsIm1heCIsInNpemUiLCJhYnMiLCJpc0J1YmJsZVpUeXBlIiwiZ2V0QnViYmxlWkRhdGEiLCJQbHVnaW4iLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX2luaGVyaXRzTG9vc2UiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjb25zdHJ1Y3RvciIsIl9fcHJvdG9fXyIsIl9kZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiJGJlZm9yZUluaXQiLCIkYWZ0ZXJJbml0IiwiJHJlZHJhdyIsIiR3aWxsRGVzdHJveSIsImtleXMiLCJmb3JFYWNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztDQUFBLFNBQTJDQSxFQUFNQyxHQUMx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LEdBQzVCWCxLQUFLd0MsR0FBR3lDLGVBQWV0RSxFQUFFVyxNQUFPLEtBQ2hDWCxFQUFFVyxPLFFBdEVzQzRELEcsWUFBdEI3QyxFLGlEQzFDTixTQUFTOEMsRUFBdUJDLEdBQzdDLFFBQWEsSUFBVEEsRUFDRixNQUFNLElBQUlDLGVBQWUsNkRBRzNCLE9BQU9ELEVBTFQsbUMsNkJDQWUsU0FBU0UsRUFBZUMsRUFBVUMsR0FDL0NELEVBQVN0RCxVQUFZbEIsT0FBT1ksT0FBTzZELEVBQVd2RCxXQUM5Q3NELEVBQVN0RCxVQUFVd0QsWUFBY0YsRUFDakNBLEVBQVNHLFVBQVlGLEVBSHZCLG1DLDZCQ0FlLFNBQVNHLEVBQWdCQyxFQUFLaEUsRUFBS04sR0FZaEQsT0FYSU0sS0FBT2dFLEVBQ1Q3RSxPQUFPQyxlQUFlNEUsRUFBS2hFLEVBQUssQ0FDOUJOLE1BQU9BLEVBQ1BMLFlBQVksRUFDWjRFLGNBQWMsRUFDZEMsVUFBVSxJQUdaRixFQUFJaEUsR0FBT04sRUFHTnNFLEVBWlQsbUMsY0NBQWhHLEVBQU9ELFFBQVVNLEcsMEVDaUJJaUYsRSxXQVVwQixXQUFZNUMsUUFBYyxJQUFkQSxNQUFVLElBQUksaUVBQ3pCdEMsS0FBS3NDLFFBQVVBLEUsMkJBT2hCeUQsWUFBQSxhLEVBTUF4RCxNQUFBLGEsRUFNQXlELFdBQUEsYSxFQU1BQyxRQUFBLGEsRUFNQUMsYUFBQSxXQUFlLFdBQ2RuRixPQUFPb0YsS0FBS25HLE1BQU1vRyxTQUFRLFNBQUF4RSxHQUN6QixFQUFLQSxHQUFPLFlBQ0wsRUFBS0EsTyxpQkE3Q01zRCxFLFVBR0gsbUIiLCJmaWxlIjoiYmlsbGJvYXJkanMtcGx1Z2luLWJ1YmJsZWNvbXBhcmUubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiZDMtc2VsZWN0aW9uXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiYnViYmxlY29tcGFyZVwiLCBbXCJkMy1zZWxlY3Rpb25cIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiYnViYmxlY29tcGFyZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcImQzLXNlbGVjdGlvblwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiYmJcIl0gPSByb290W1wiYmJcIl0gfHwge30sIHJvb3RbXCJiYlwiXVtcInBsdWdpblwiXSA9IHJvb3RbXCJiYlwiXVtcInBsdWdpblwiXSB8fCB7fSwgcm9vdFtcImJiXCJdW1wicGx1Z2luXCJdW1wiYnViYmxlY29tcGFyZVwiXSA9IGZhY3Rvcnkocm9vdFtcImQzXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzRfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsImltcG9ydCB7c2VsZWN0IGFzIGQzU2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgUGx1Z2luIGZyb20gXCIuLi9QbHVnaW5cIjtcblxuLyoqXG4gKiBCdWJibGUgY29tcGFyZSBkaWFncmFtIHBsdWdpbi48YnI+XG4gKiBDb21wYXJlIGRhdGEgMy1kaW1lbnNpb25hbCB3YXlzOiB4LWF4aXMsIHktYXhpcyAmIGJ1YmJsZS1zaXplLlxuICogLSAqKk5PVEU6KipcbiAqICAgLSBQbHVnaW5zIGFyZW4ndCBidWlsdC1pbi4gTmVlZCB0byBiZSBsb2FkZWQgb3IgaW1wb3J0ZWQgdG8gYmUgdXNlZC5cbiAqICAgLSBOb24gcmVxdWlyZWQgbW9kdWxlcyBmcm9tIGJpbGxib2FyZC5qcyBjb3JlLCBuZWVkIHRvIGJlIGluc3RhbGxlZCBzZXBhcmF0ZWx5LlxuICogLSAqKlJlcXVpcmVkIG1vZHVsZXM6KipcbiAqICAgLSBbZDMtc2VsZWN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2VsZWN0aW9uKVxuICogQGNsYXNzIHBsdWdpbi1idWJibGVjb21wYXJlXG4gKiBAcmVxdWlyZXMgZDMtc2VsZWN0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBidWJibGUgY29tcGFyZSBwbHVnaW4gb3B0aW9uc1xuICogQGF1Z21lbnRzIFBsdWdpblxuICogQHJldHVybnMge0J1YmJsZUNvbXBhcmV9XG4gKiBAZXhhbXBsZVxuICogIHZhciBjaGFydCA9IGJiLmdlbmVyYXRlKHtcbiAqICAgICBkYXRhOiB7XG4gKiAgICAgICAgY29sdW1uczogWyAuLi4gXSxcbiAqICAgICAgICB0eXBlOiBcImJ1YmJsZVwiXG4gKiAgICAgfVxuICogICAgIC4uLlxuICogICAgIHBsdWdpbnM6IFtcbiAqICAgICAgICBuZXcgYmIucGx1Z2luLmJ1YmJsZWNvbXBhcmUoe1xuICogICAgICAgICAgbWluUjogMTEsXG4gKiAgICAgICAgICBtYXhSOiA3NCxcbiAqICAgICAgICAgIGV4cGFuZFNjYWxlOiAxLjFcbiAqICAgICAgICB9KSxcbiAqICAgICBdXG4gKiAgfSk7XG4gKiBAZXhhbXBsZVxuICpcdGltcG9ydCB7YmJ9IGZyb20gXCJiaWxsYm9hcmQuanNcIjtcbiAqIGltcG9ydCBCdWJibGVDb21wYXJlIGZyb20gXCJiaWxsYm9hcmQuanMvZGlzdC9iaWxsYm9hcmRqcy1wbHVnaW4tYnViYmxlY29tcGFyZVwiO1xuICpcbiAqIGJiLmdlbmVyYXRlKHtcbiAqICAgICBwbHVnaW5zOiBbXG4gKiAgICAgICAgbmV3IEJ1YmJsZUNvbXBhcmUoeyAuLi4gfSlcbiAqICAgICBdXG4gKiB9KVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1YmJsZUNvbXBhcmUgZXh0ZW5kcyBQbHVnaW4ge1xuXHRzdGF0aWMgdmVyc2lvbiA9IGAwLjAuMWA7XG5cdHB1YmxpYyAkJDtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdCRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHskJH0gPSB0aGlzO1xuXG5cdFx0JCQuZmluZENsb3Nlc3QgPSB0aGlzLmZpbmRDbG9zZXN0LmJpbmQodGhpcyk7XG5cdFx0JCQuZ2V0QnViYmxlUiA9IHRoaXMuZ2V0QnViYmxlUi5iaW5kKHRoaXMpO1xuXHRcdCQkLnBvaW50RXhwYW5kZWRSID0gdGhpcy5wb2ludEV4cGFuZGVkUi5iaW5kKHRoaXMpO1xuXHR9XG5cblx0cG9pbnRFeHBhbmRlZFIoZCk6IG51bWJlciB7XG5cdFx0Y29uc3QgYmFzZVIgPSB0aGlzLmdldEJ1YmJsZVIoZCk7XG5cdFx0Y29uc3Qge2V4cGFuZFNjYWxlID0gMX0gPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRCdWJibGVDb21wYXJlLnJhaXNlRm9jdXNlZEJ1YmJsZUxheWVyKGQpO1xuXHRcdHRoaXMuY2hhbmdlQ3Vyc29yUG9pbnQoKTtcblxuXHRcdHJldHVybiBiYXNlUiAqIGV4cGFuZFNjYWxlO1xuXHR9XG5cblx0c3RhdGljIHJhaXNlRm9jdXNlZEJ1YmJsZUxheWVyKGQpOiB2b2lkIHtcblx0XHRkLnJhaXNlICYmIGQzU2VsZWN0KGQubm9kZSgpLnBhcmVudE5vZGUucGFyZW50Tm9kZSkucmFpc2UoKTtcblx0fVxuXG5cdGNoYW5nZUN1cnNvclBvaW50KCk6IHZvaWQge1xuXHRcdHRoaXMuJCQuJGVsLnN2Zy5zZWxlY3QoYC5iYi1ldmVudC1yZWN0YCkuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xuXHR9XG5cblx0ZmluZENsb3Nlc3QodmFsdWVzLCBwb3MpOiBudW1iZXIge1xuXHRcdGNvbnN0IHskJH0gPSB0aGlzO1xuXG5cdFx0cmV0dXJuIHZhbHVlc1xuXHRcdFx0LmZpbHRlcih2ID0+IHYgJiYgISQkLmlzQmFyVHlwZSh2LmlkKSlcblx0XHRcdC5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGQgPSAkJC5kaXN0KGN1ciwgcG9zKTtcblxuXHRcdFx0XHRyZXR1cm4gZCA8IHRoaXMuZ2V0QnViYmxlUihjdXIpID8gY3VyIDogYWNjO1xuXHRcdFx0fSwgMCk7XG5cdH1cblxuXHRnZXRCdWJibGVSKGQpOiBudW1iZXIge1xuXHRcdGNvbnN0IHttaW5SLCBtYXhSfSA9IHRoaXMub3B0aW9ucztcblx0XHRjb25zdCBjdXJWYWwgPSB0aGlzLmdldFpEYXRhKGQpO1xuXG5cdFx0aWYgKCFjdXJWYWwpIHJldHVybiBtaW5SO1xuXG5cdFx0Y29uc3QgW21pbiwgbWF4XSA9IHRoaXMuJCQuZGF0YS50YXJnZXRzLnJlZHVjZShcblx0XHRcdChbYWNjTWluLCBhY2NNYXhdLCBjdXIpID0+IHtcblx0XHRcdFx0Y29uc3QgdmFsID0gdGhpcy5nZXRaRGF0YShjdXIudmFsdWVzWzBdKTtcblxuXHRcdFx0XHRyZXR1cm4gW01hdGgubWluKGFjY01pbiwgdmFsKSwgTWF0aC5tYXgoYWNjTWF4LCB2YWwpXTtcblx0XHRcdH0sXG5cdFx0XHRbMTAwMDAsIDBdXG5cdFx0KTtcblx0XHRjb25zdCBzaXplID0gbWluID4gMCAmJiBtYXggPT09IG1pbiA/IDAgOiBjdXJWYWwgLyBtYXg7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoc2l6ZSkgKiAobWF4UiAtIG1pblIpICsgbWluUjtcblx0fVxuXG5cdGdldFpEYXRhKGQpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLiQkLmlzQnViYmxlWlR5cGUoZCkgP1xuXHRcdFx0dGhpcy4kJC5nZXRCdWJibGVaRGF0YShkLnZhbHVlLCBcInpcIikgOlxuXHRcdFx0ZC52YWx1ZTtcblx0fVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180X187IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcgfiBwcmVzZW50IE5BVkVSIENvcnAuXG4gKiBiaWxsYm9hcmQuanMgcHJvamVjdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLyoqXG4gKiBCYXNlIGNsYXNzIHRvIGdlbmVyYXRlIGJpbGxib2FyZC5qcyBwbHVnaW5cbiAqIEBjbGFzcyBQbHVnaW5cbiAqL1xuLyoqXG4gKiBWZXJzaW9uIGluZm8gc3RyaW5nIGZvciBwbHVnaW5cbiAqIEBuYW1lIHZlcnNpb25cbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJvZiBQbHVnaW5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogICBiYi5wbHVnaW4uc3RhbmZvcmQudmVyc2lvbjsgIC8vIGV4KSAxLjkuMFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW4ge1xuXHRwdWJsaWMgJCQ7XG5cdHB1YmxpYyBvcHRpb25zO1xuXHRzdGF0aWMgdmVyc2lvbiA9IFwiMi4wLjAtbmV4dC41XCI7XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yXG5cdCAqIEBwYXJhbSB7QW55fSBvcHRpb25zIGNvbmZpZyBvcHRpb24gb2JqZWN0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIExpZmVjeWNsZSBob29rIGZvciAnYmVmb3JlSW5pdCcgcGhhc2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHQkYmVmb3JlSW5pdCgpIHt9XG5cblx0LyoqXG5cdCAqIExpZmVjeWNsZSBob29rIGZvciAnaW5pdCcgcGhhc2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHQkaW5pdCgpIHt9XG5cblx0LyoqXG5cdCAqIExpZmVjeWNsZSBob29rIGZvciAnYWZ0ZXJJbml0JyBwaGFzZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdCRhZnRlckluaXQoKSB7fVxuXG5cdC8qKlxuXHQgKiBMaWZlY3ljbGUgaG9vayBmb3IgJ3JlZHJhdycgcGhhc2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHQkcmVkcmF3KCkge31cblxuXHQvKipcblx0ICogTGlmZWN5Y2xlIGhvb2sgZm9yICd3aWxsRGVzdHJveScgcGhhc2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHQkd2lsbERlc3Ryb3koKSB7XG5cdFx0T2JqZWN0LmtleXModGhpcykuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0dGhpc1trZXldID0gbnVsbDtcblx0XHRcdGRlbGV0ZSB0aGlzW2tleV07XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=