Socket
Socket
Sign inDemoInstall

@limble/limble-tree

Package Overview
Dependencies
Maintainers
2
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@limble/limble-tree - npm Package Compare versions

Comparing version 0.8.1 to 0.9.0

esm2015/lib/custom-event-bindings/dragleave-no-change-detect.directive.js

2

bundles/limble-limble-tree.umd.min.js

@@ -15,3 +15,3 @@ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("@angular/common"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@limble/limble-tree",["exports","@angular/core","rxjs","@angular/common","rxjs/operators"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).limble=e.limble||{},e.limble["limble-tree"]={}),e.ng.core,e.rxjs,e.ng.common,e.rxjs.operators)}(this,(function(e,t,r,n,o){"use strict";

PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};Object.create;function a(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function l(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a}function s(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(l(arguments[t]));return e}Object.create;var d=function(e,t){return{active:e,related:t}},c=function(){function e(e){this.dropZoneService=e,this.active=!1}return e.prototype.dragenterHandler=function(){!0!==this.active&&void 0!==this.coordinates&&this.dropZoneService.swapActiveDropZone(this.coordinates)},e}();function p(e,t){var r,n;if(e.length!==t.length)return!1;try{for(var o=a(e.entries()),i=o.next();!i.done;i=o.next()){var s=l(i.value,2),d=s[0],c=s[1],h=t[d];if(c instanceof Array&&h instanceof Array){if(!p(c,h))return!1}else if(c!==h)return!1}}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!0}function h(e,t){return void 0!==e&&(!0===e.allowNesting||"function"==typeof e.allowNesting&&void 0!==t&&!0===e.allowNesting(t))}c.ɵfac=function(e){return new(e||c)(t.ɵɵdirectiveInject(w))},c.ɵcmp=t.ɵɵdefineComponent({type:c,selectors:[["drop-zone"]],inputs:{active:"active",coordinates:"coordinates"},decls:2,vars:4,consts:[[1,"dropZoneContainer",3,"dragenter"],[3,"ngClass"]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div",0),t.ɵɵlistener("dragenter",(function(){return r.dragenterHandler()})),t.ɵɵelement(1,"div",1),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(1),t.ɵɵproperty("ngClass",t.ɵɵpureFunction2(1,d,r.active,!r.active)))},directives:[n.NgClass],styles:[".active[_ngcontent-%COMP%]{height:105px;border-radius:5px;background:#f0f9ff;border:2px dashed #bed2db}.active[_ngcontent-%COMP%], .related[_ngcontent-%COMP%]{margin:10px 0;width:calc(100% - 20px);box-sizing:border-box}.related[_ngcontent-%COMP%]{height:30px;border-radius:5px;background:#fff6f0;border:1px dashed #dbccbe;opacity:.8}.dropZoneContainer[_ngcontent-%COMP%]{position:relative}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(c,[{type:t.Component,args:[{selector:"drop-zone",templateUrl:"./drop-zone.component.html",styleUrls:["./drop-zone.component.scss"]}]}],(function(){return[{type:w}]}),{active:[{type:t.Input}],coordinates:[{type:t.Input}]});var u=function(){function e(e){this.data=e,this.children=[],this.parent=null}return e.prototype.isRoot=function(){return null===this.parent},e.prototype.getParent=function(){return this.parent},e.prototype.setParent=function(e){this.parent=e},e.prototype.findByCoordinates=function(e){var t,r,n=this;try{for(var o=a(e.values()),i=o.next();!i.done;i=o.next()){var l=i.value;if(void 0===(n=n.getChild(l)))return}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.getCoordinates=function(){for(var e=[],t=this;null!==t.parent;){var r=t.getIndex();if(void 0===r)throw new Error("Could not get cursor index");e.unshift(r),t=t.parent}return e},e.prototype.getChild=function(e){return this.children[e]},e.prototype.getChildren=function(){return this.children},e.prototype.getIndex=function(){var e=this;if(null!==this.parent){var t=this.parent.children.findIndex((function(t){return t===e}));if(-1!==t)return t}},e.prototype.getDescendant=function(e){var t,r,n=this;try{for(var o=a(e),i=o.next();!i.done;i=o.next()){var l=i.value;if(void 0===(n=n.children[l]))return}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.findDescendant=function(e){var t,r;if(!0===e(this.data))return this;if(this.children.length>0)try{for(var n=a(this.children),o=n.next();!o.done;o=n.next()){var i=o.value.findDescendant(e);if(void 0!==i)return i}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},e.prototype.getAncestors=function(){for(var e=[],t=this;null!==t.parent;)e.push(t.parent),t=t.parent;return e},e.prototype.appendChild=function(e){return null!==e.getParent()&&e.remove(),e.setParent(this),this.children.push(e),e},e.prototype.insertChild=function(e,t){var r=this.children.indexOf(e);return-1===r?(null!==e.getParent()&&e.remove(),e.setParent(this),this.children.splice(t,0,e)):t>r?(this.children.splice(t,0,e),this.removeChild(r),e.setParent(this)):(e.remove(),this.children.splice(t,0,e),e.setParent(this)),e},e.prototype.removeChild=function(e){var t=this.children.splice(e,1)[0];return t.setParent(null),t},e.prototype.remove=function(){var e=this.getIndex();if(null===this.parent||void 0===e)throw new Error("can't remove root");return this.parent.removeChild(e)},e.prototype.copy=function(){var e=this.copyHelper();return e.setParent(null),e},e.prototype.copyHelper=function(){var t,r,n=new e(this.data);try{for(var o=a(this.children),i=o.next();!i.done;i=o.next()){var l=i.value;n.appendChild(l.copyHelper()).parent=n}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e}();function f(e){var t,r,n=new v(e.data);try{for(var o=a(e.getChildren()),i=o.next();!i.done;i=o.next()){var l=i.value;n.appendChild(v.fromBranch(l)).setParent(n)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n}var v=function(e){function t(t,r){void 0===r&&(r=!1);var n=e.call(this,t)||this;return n.hidden=r,n.hiddenChildren=new Map,n.children=[],n.parent=null,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}(t,e),t.fromBranch=function(e){var t=f(e);return t.setParent(null),t},t.prototype.getHiddenChild=function(e){return this.hiddenChildren.get(e)},t.prototype.getParent=function(){return this.parent},t.prototype.addHiddenChild=function(e,t){return this.hiddenChildren.set(t,e),e.setHidden(!0),e.setParent(this),e},t.prototype.findByCoordinates=function(e,t){var r,n;void 0===t&&(t=!1);var o=this;try{for(var i=a(e.entries()),s=i.next();!s.done;s=i.next()){var d=l(s.value,2),c=d[0],p=d[1],h=void 0;if(void 0===(h=c===e.length-1&&!0===t?o.getHiddenChild(p):o.getChild(p)))return;o=h}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return o},t.prototype.getChild=function(e){return this.children[e]},t.prototype.getIndex=function(){var e,t,r=this;if(null!==this.parent){if(!1===this.hidden){var n=this.parent.children.findIndex((function(e){return e===r}));if(-1===n)return;return n}try{for(var o=a(this.parent.hiddenChildren.entries()),i=o.next();!i.done;i=o.next()){var s=l(i.value,2),d=s[0];if(s[1]===this)return d}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}}},t.prototype.setHidden=function(e){this.hidden=e},t.prototype.isHidden=function(){return this.hidden},t.prototype.copy=function(){var e=this.copyHelper();return e.setParent(null),e},t.prototype.copyHelper=function(){var t,r,n=e.prototype.copyHelper.call(this);try{for(var o=a(this.hiddenChildren.entries()),i=o.next();!i.done;i=o.next()){var s=l(i.value,2),d=s[0],c=s[1];n.addHiddenChild(c.copyHelper(),d).parent=n}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},t}(u),g=function(){function e(){this.state="idle",this.state$=new r.BehaviorSubject(this.state)}return e.prototype.dragging=function(e){this._tempData=e,this.state="dragging",this.state$.next(this.state)},e.prototype.droppable=function(){if("dragging"!==this.state)throw new Error("Can only call `droppable` when state is `dragging`");this.state="droppable",this.state$.next(this.state)},e.prototype.notDroppable=function(){if("droppable"!==this.state)throw new Error("Can only call `notDroppable` when state is `droppable`");this.state="dragging",this.state$.next(this.state)},e.prototype.capture=function(){if("droppable"!==this.state)throw new Error("Can only move to `captured` state from `droppable` state");return this.state="captured",this.state$.next(this.state),this._tempData},e.prototype.release=function(){this._tempData=void 0,this.state="idle",this.state$.next(this.state)},e.prototype.getData=function(){return this._tempData},e.prototype.getState=function(){return this.state},e}();g.ɵfac=function(e){return new(e||g)},g.ɵprov=t.ɵɵdefineInjectable({token:g,factory:g.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(g,[{type:t.Injectable}],(function(){return[]}),null);var y=function(){function e(e){this.factoryResolver=e,this.factoryResolver=e}return e.prototype.appendComponent=function(e,t,r){void 0===r&&(r=null);var n=this.factoryResolver.resolveComponentFactory(e),o=t.createComponent(n);if(null!==r){var i=t.indexOf(o.hostView);t.detach(i),t.insert(o.hostView,r)}return o},e}();function m(e,t){var r=e.getCoordinates(),n=t.getCoordinates();return r.length>n.length?-1:r.length<n.length?1:0}y.ɵfac=function(e){return new(e||y)(t.ɵɵinject(t.ComponentFactoryResolver))},y.ɵprov=t.ɵɵdefineInjectable({token:y,factory:y.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(y,[{type:t.Injectable}],(function(){return[{type:t.ComponentFactoryResolver}]}),null);var w=function(){function e(e,t){this.dragStateService=e,this.componentCreatorService=t,this.dropZoneStack=[],this.dropZoneInventory=[],this.dropZoneFamilies=[],this.visibleFamily=null,this.activeDropZone=null,this.tempFamilies=[],this.setActiveDropZone(null)}return e.prototype.addDropZone=function(e,t){if(void 0===this.dropZoneStack.find((function(t){return p(t.coordinates,e)}))){var r=new v({container:t});this.dropZoneStack.push({dropZone:r,coordinates:e})}},e.prototype.clear=function(){var e,t;if(null!==this.visibleFamily){try{for(var r=a(this.visibleFamily.members),n=r.next();!n.done;n=r.next()){n.value.data.container.clear()}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.visibleFamily=null}this.restoreFamilies(),this.setActiveDropZone(null)},e.prototype.getActiveDropZone=function(){return this.activeDropZone},e.prototype.init=function(e,t){var r,n;this.tree=e,this.treeOptions=t,this.reset();var o=function(e){i.dropZoneInventory.find((function(t){return p(t.getCoordinates(),e.coordinates)}))||(i.dropZoneInventory.push(e.dropZone),i.addToTree(e.dropZone,e.coordinates))},i=this;try{for(var l=a(this.dropZoneStack),s=l.next();!s.done;s=l.next()){o(s.value)}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}this.dropZoneStack.length=0,this.assignFamilies()},e.prototype.reset=function(){this.clear(),this.dropZoneFamilies.length=0,this.dropZoneInventory.length=0,this.tree&&(this.treeWithDropZones=v.fromBranch(this.tree))},e.prototype.restoreFamilies=function(){var e,t,r,n;if(2===this.tempFamilies.length){this.dropZoneFamilies.pop(),this.dropZoneFamilies.push(this.tempFamilies[0]);try{for(var o=a(this.tempFamilies[0].members),i=o.next();!i.done;i=o.next()){i.value.data.family=this.tempFamilies[0]}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}if(null!==this.tempFamilies[1]){this.dropZoneFamilies.push(this.tempFamilies[1]);try{for(var l=a(this.tempFamilies[1].members),s=l.next();!s.done;s=l.next()){s.value.data.family=this.tempFamilies[1]}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}}this.tempFamilies=[]}},e.prototype.showDropZoneFamily=function(e,t){var r,n,o,i,l,d;if(void 0===t&&(t={joinFamilies:!1,activateLowestInsteadOfFounder:!1}),null===this.activeDropZone||!p(this.activeDropZone.getCoordinates(),e)){if(null===this.visibleFamily&&null===this.activeDropZone||this.clear(),void 0===this.treeWithDropZones)throw new Error("dropZoneService not initialized");var c=this.treeWithDropZones.findByCoordinates(e,!0);if(void 0===c)throw new Error("Could not find drop zone to show");var h=c.data.family;if(!0===t.joinFamilies){var u=s(e);u[u.length-1]++;var f=this.treeWithDropZones.findByCoordinates(u,!0);if(void 0===f)throw new Error("Could not find drop zone to show");var v=f.data.family;if(void 0===h||void 0===v)throw new Error("No family");var g={founder:h.founder,members:s(h.members)};try{for(var y=a(h.members),w=y.next();!w.done;w=y.next()){(I=w.value).data.family=g,I===h.founder?this.showDropZone(I,!0):this.showDropZone(I)}}catch(e){r={error:e}}finally{try{w&&!w.done&&(n=y.return)&&n.call(y)}finally{if(r)throw r.error}}try{for(var b=a(v.members),C=b.next();!C.done;C=b.next()){(I=C.value).data.family=g,I.getCoordinates().length<f.getCoordinates().length&&(g.members.push(I),this.showDropZone(I))}}catch(e){o={error:e}}finally{try{C&&!C.done&&(i=b.return)&&i.call(b)}finally{if(o)throw o.error}}this.tempFamilies=[h,v];var Z=this.dropZoneFamilies.indexOf(h);this.dropZoneFamilies.splice(Z,1);var D=this.dropZoneFamilies.indexOf(v);this.dropZoneFamilies.splice(D,1),this.dropZoneFamilies.push(g),this.visibleFamily=g}else{if(void 0===h)throw new Error("No family");this.visibleFamily=h;try{for(var S=a(h.members),x=S.next();!x.done;x=S.next()){var I;(I=x.value)===h.founder?this.showDropZone(I,!0):this.showDropZone(I)}}catch(e){l={error:e}}finally{try{x&&!x.done&&(d=S.return)&&d.call(S)}finally{if(l)throw l.error}}}if(!0===t.activateLowestInsteadOfFounder){var E=s(this.visibleFamily.members).sort(m).pop();if(void 0===E)throw new Error("Could not get lowest member");this.swapActiveDropZone(E.getCoordinates())}}},e.prototype.swapActiveDropZone=function(e){var t=this.getActiveDropZone();if(null===t)throw new Error("could not get active drop zone");if(null===this.visibleFamily)throw new Error("No visible family available for swapping");if(void 0===this.treeWithDropZones)throw new Error("dropZoneService not initialized");if(-1===this.visibleFamily.members.findIndex((function(t){return p(t.getCoordinates(),e)})))throw new Error("failed to swap active drop zone");t.data.componentRef&&(t.data.componentRef.instance.active=!1);var r=this.treeWithDropZones.findByCoordinates(e,!0);if(void 0===r)throw new Error("Failed to get new drop zone");this.setActiveDropZone(r)},e.prototype.addToTree=function(e,t){if(void 0===this.treeWithDropZones)throw new Error("dropZoneService not initialized");var r=s(t);r.pop();var n=this.treeWithDropZones.findByCoordinates(r);if(void 0===n)throw new Error("could not get parent");n.addHiddenChild(e,t[t.length-1])},e.prototype.assignFamilies=function(){var e,t,r,n,o,i,l=s(this.dropZoneInventory),d=l.filter((function(e){var t=e.getCoordinates();return 0===t[t.length-1]&&t.length>1})).sort((function(e,t){for(var r,n,o,i,a=e.getCoordinates(),l=t.getCoordinates(),s=Math.max(a.length,l.length),d=0;d<s;d++){if((null!==(r=a[d])&&void 0!==r?r:-1)>(null!==(n=l[d])&&void 0!==n?n:-1))return-1;if((null!==(o=a[d])&&void 0!==o?o:-1)<(null!==(i=l[d])&&void 0!==i?i:-1))return 1}return 0})),c=function(e){if(!l.includes(e))return"continue";var t={founder:e,members:[]};e.data.family=t;for(var r=s(e.getCoordinates());r.length>0;){var n=l.findIndex((function(e){return p(e.getCoordinates(),r)}));if(-1!==n){var o=l.splice(n,1)[0];t.members.push(o),o.data.family=t}r.pop(),r[r.length-1]++}h.dropZoneFamilies.push(t)},h=this;try{for(var u=a(d),f=u.next();!f.done;f=u.next()){c(y=f.value)}}catch(t){e={error:t}}finally{try{f&&!f.done&&(t=u.return)&&t.call(u)}finally{if(e)throw e.error}}try{for(var v=a(l.filter((function(e){return 1===e.getCoordinates().length}))),g=v.next();!g.done;g=v.next()){var y,m={founder:y=g.value,members:[y]};y.data.family=m,this.dropZoneFamilies.push(m),l.splice(l.indexOf(y),1)}}catch(e){r={error:e}}finally{try{g&&!g.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}if(0!==l.length){var w="";try{for(var b=a(l),C=b.next();!C.done;C=b.next()){var Z=C.value;w+=JSON.stringify(Z.getCoordinates())+", "}}catch(e){o={error:e}}finally{try{C&&!C.done&&(i=b.return)&&i.call(b)}finally{if(o)throw o.error}}throw w=w.slice(0,w.length-2),new Error("Some zones were not assigned to a family. The orphan zones have the following coordinates: "+w)}},e.prototype.setActiveDropZone=function(e){var t;this.activeDropZone=e,null!==this.activeDropZone&&"droppable"!==this.dragStateService.getState()?this.dragStateService.droppable():null===this.activeDropZone&&"droppable"===this.dragStateService.getState()&&this.dragStateService.notDroppable(),(null===(t=this.activeDropZone)||void 0===t?void 0:t.data.componentRef)&&(this.activeDropZone.data.componentRef.instance.active=!0)},e.prototype.showDropZone=function(e,t){if(void 0===t&&(t=!1),!this.zoneIsAllowed(e))return!1;if(null===e.getParent())throw new Error("Bad family member");var r=this.componentCreatorService.appendComponent(c,e.data.container);return r.instance.active=t,r.instance.coordinates=e.getCoordinates(),!0===t&&this.setActiveDropZone(e),e.data.componentRef=r,!0},e.prototype.zoneIsAllowed=function(e){if(void 0===this.treeOptions)throw new Error("dropZoneService not initialized");var t=this.dragStateService.getData();if(void 0===t)throw new Error("Can't get dragged node");var r=e.getParent();if(null===r)throw new Error("Could not get drop zone parent");var n=e.getIndex();if(void 0===n)throw new Error("Could not get drop zone index");return!!this.treeOptions.allowDrop(t.data,r.data,n)},e}();w.ɵfac=function(e){return new(e||w)(t.ɵɵinject(g),t.ɵɵinject(y))},w.ɵprov=t.ɵɵdefineInjectable({token:w,factory:w.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(w,[{type:t.Injectable}],(function(){return[{type:g},{type:y}]}),null);var b=["host"],C=["dropZoneInside"];function Z(e,t){}function D(e,t){}var S=function(){function e(e,t){var n;this.treeService=e,this.changeDetectorRef=t,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.indent=null===(n=this.treeService.treeOptions)||void 0===n?void 0:n.indent}return e.prototype.ngAfterViewInit=function(){this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),this.reRender(),this.changeDetectorRef.detectChanges()},e.prototype.reRender=function(){if(void 0===this.host||void 0===this.branch)throw new Error("Failed to render limble tree branch");this.treeService.renderBranch(this.host,this.branch)},e}();function x(e){var t,r,n,o=/(auto|scroll)/,i=function(e,t){return null===e||null===e.parentNode?t:i(e.parentElement,t.concat([e]))},l=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},s=function(e){return o.test(function(e){return l(e,"overflow")+l(e,"overflow-y")+l(e,"overflow-x")}(e))},d=i(e.parentElement,[]);try{for(var c=a(d),p=c.next();!p.done;p=c.next()){var h=p.value;if(s(h))return h}}catch(e){t={error:e}}finally{try{p&&!p.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}return null!==(n=document.scrollingElement)&&void 0!==n?n:document.documentElement}S.ɵfac=function(e){return new(e||S)(t.ɵɵdirectiveInject($),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},S.ɵcmp=t.ɵɵdefineComponent({type:S,selectors:[["limble-tree-branch"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(b,1,t.ViewContainerRef),t.ɵɵviewQuery(C,1,t.ViewContainerRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.host=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneInside=n.first)}},inputs:{branch:"branch"},outputs:{dropZoneInside$:"dropZoneInside$"},decls:6,vars:3,consts:[["dropZoneInside",""],[1,"limble-child-nodes",3,"hidden"],["host",""]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵtemplate(1,Z,0,0,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"span",1),t.ɵɵtemplate(4,D,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵstyleProp("margin-left",r.indent,"px"),t.ɵɵadvance(3),t.ɵɵproperty("hidden",r.branch&&r.branch.data.collapsed))},styles:["./limble-tree-branch.component.scss"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(S,[{type:t.Component,args:[{selector:"limble-tree-branch",templateUrl:"./limble-tree-branch.component.html",styles:["./limble-tree-branch.component.scss"]}]}],(function(){return[{type:$},{type:t.ChangeDetectorRef}]}),{branch:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}]});var I=function(){function e(){this.globalDrag$=r.fromEvent(document,"drag"),this.scrolling=!1}return e.prototype.addScrolling=function(){var e,t,r,n,i,a,l,s,d,c=this;void 0===this.globalDragSubscription&&(this.globalDragSubscription=this.globalDrag$.pipe(o.throttleTime(25),o.filter((function(o){if(!o.target)return!1;s=x(o.target),e=s.clientHeight;var l,c=s.clientWidth;if("fixed"===window.getComputedStyle(s).getPropertyValue("position").toLowerCase())l=o.clientX,d=o.clientY;else{var p=s.getBoundingClientRect(),h=x(s);l=o.clientX-(p.left+h.scrollLeft),d=o.clientY-(p.top+h.scrollTop)}return!(l<0||l>c||d<0||d>e)&&(t=Math.max(.1*e,100),a=d>(n=e-t),(i=d<(r=t))||a)}))).subscribe((function(){if(null!==s){var o,p=s.scrollHeight-e,h=s.scrollTop;if(i&&h>0){o=h-75*((r-d)/t)}else{if(!a||!(h<p))return;o=h+75*((d-n)/t)}(o=Math.max(0,Math.min(p,o)))!==h&&(s.scrollTo({top:o}),c.scrolling=!0,clearTimeout(l),l=setTimeout((function(){c.scrolling=!1}),100))}})))},e.prototype.removeScrolling=function(){void 0!==this.globalDragSubscription&&this.globalDragSubscription.unsubscribe()},e}();I.ɵfac=function(e){return new(e||I)},I.ɵprov=t.ɵɵdefineInjectable({token:I,factory:I.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(I,[{type:t.Injectable}],(function(){return[]}),null);var E=["nodeHost"],M=["dropZoneAbove"],P=["dropZoneBelow"],F=["children"],O=["draggableDiv"];function R(e,t){}function j(e,t){}function H(e,t){}function A(e,t){}var T=function(){function e(e,t,r,n,o,i){this.componentCreatorService=e,this.changeDetectorRef=t,this.dragStateService=r,this.dropZoneService=n,this.treeService=o,this.globalEventsService=i}return e.prototype.ngAfterViewInit=function(){this.registerDropZones(),this.renderSelf(),this.renderChildren(),this.checkForHandle(),this.changeDetectorRef.detectChanges()},e.prototype.dragstartHandler=function(e){var t,r=this;if(e.stopPropagation(),null===e.dataTransfer||void 0===this.branch)throw new Error("failed to run dragstartHandler");var n=e.target;"LIMBLE-TREE-NODE"===(null===(t=n.parentElement)||void 0===t?void 0:t.tagName)&&(e.dataTransfer.effectAllowed="move",this.dragStateService.dragging(this.branch),setTimeout((function(){var e;if(n.classList.add("dragging"),void 0===r.branch)throw new Error("Could not show surrounding drop zones");var t,o=r.branch.getParent(),i=!0;null!==(null==o?void 0:o.data)&&(t=null==o?void 0:o.data,i=h(r.treeService.treeOptions,t)),void 0!==r.dropZoneAbove&&i&&(r.dropZoneService.showDropZoneFamily(r.branch.getCoordinates(),{joinFamilies:!0}),1===(null===(e=r.treeService.treeData)||void 0===e?void 0:e.length)&&1===r.branch.getCoordinates().length&&r.treeService.usePlaceholder())})))},e.prototype.dragendHandler=function(e){var t=this;if(e.stopPropagation(),e.target.classList.remove("dragging"),void 0===this.branch)throw new Error("failed to get current branch in dragendHandler");if("captured"!==this.dragStateService.getState())return this.dragStateService.release(),this.dropZoneService.clear(),this.dropZoneService.restoreFamilies(),void this.treeService.removePlaceholder();this.dragStateService.state$.pipe(o.take(2)).subscribe((function(e){"captured"===e&&void 0!==t.branch&&(t.treeService.remove(t.branch),t.dragStateService.release())}))},e.prototype.dragoverHandler=function(e){var t,r,n;if(!0!==this.globalEventsService.scrolling){if(void 0===this.branch)throw new Error("Can't get current branch during dragover event");var o=this.dragStateService.getData();if(void 0!==o&&o!==this.branch&&!this.branch.getAncestors().includes(o))if(!0!==this.treeService.getPlaceholder()||void 0===this.dropZoneAbove){var i,a=e.currentTarget.offsetHeight/3,l=2*a,d=this.branch.getParent(),c=!0;if(null!==(null==d?void 0:d.data)&&(i=null==d?void 0:d.data,c=h(this.treeService.treeOptions,i)),e.offsetY<a&&void 0!==this.dropZoneAbove&&(null===(t=this.dropZoneService.getActiveDropZone())||void 0===t?void 0:t.data.container)!==this.dropZoneAbove&&c){p=s(this.branch.getCoordinates());this.dropZoneService.showDropZoneFamily(p,{activateLowestInsteadOfFounder:!0})}else if(e.offsetY<l&&void 0!==this.dropZoneInside&&(null===(r=this.dropZoneService.getActiveDropZone())||void 0===r?void 0:r.data.container)!==this.dropZoneInside){(p=s(this.branch.getCoordinates())).push(0),this.dropZoneService.showDropZoneFamily(p)}else if(e.offsetY>=l&&void 0!==this.dropZoneBelow&&(null===(n=this.dropZoneService.getActiveDropZone())||void 0===n?void 0:n.data.container)!==this.dropZoneBelow&&0===this.branch.getChildren().length&&c){(p=s(this.branch.getCoordinates()))[p.length-1]++,this.dropZoneService.showDropZoneFamily(p)}}else{var p=s(this.branch.getCoordinates());this.dropZoneService.showDropZoneFamily(p)}}},e.prototype.renderSelf=function(){var e;if(void 0===this.nodeHost||void 0===this.branch)throw new Error("Failed to render tree node");var t=this.branch.data.component;if(void 0===t&&(t=null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.defaultComponent),void 0===t)throw new Error("limbleTree requires a component to render");var r=this.componentCreatorService.appendComponent(t.class,this.nodeHost);for(var n in r.instance.nodeData=this.branch.data,t.bindings)r.instance[n]=t.bindings[n]},e.prototype.renderChildren=function(){var e,t=this;if(void 0!==this.children&&!0!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.listMode)&&!0!==this.treeService.getPlaceholder()){if(void 0===this.branch)throw new Error("branch is undefined");var r=this.componentCreatorService.appendComponent(S,this.children);r.instance.branch=this.branch,h(this.treeService.treeOptions,this.branch.data)&&r.instance.dropZoneInside$.subscribe((function(e){var r;if(void 0!==e&&!1!==(null===(r=t.treeService.treeOptions)||void 0===r?void 0:r.allowDragging)){if(t.dropZoneInside=e,void 0===t.branch)throw new Error("failed to register inner drop zone");var n=t.branch.getCoordinates();n.push(0),t.dropZoneService.addDropZone(n,t.dropZoneInside)}}))}},e.prototype.registerDropZones=function(){var e;if(!1!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.allowDragging)){if(void 0===this.dropZoneAbove||void 0===this.dropZoneBelow||void 0===this.branch)throw new Error("failed to register drop zones");var t,r=this.branch.getParent();if(null===(null==r?void 0:r.data)||(t=null==r?void 0:r.data,h(this.treeService.treeOptions,t))){var n=this.branch.getCoordinates(),o=s(n);if(this.dropZoneService.addDropZone(o,this.dropZoneAbove),!0!==this.treeService.getPlaceholder()){var i=s(n);i[i.length-1]++,this.dropZoneService.addDropZone(i,this.dropZoneBelow)}}}},e.prototype.checkForHandle=function(){var e,t=this;if(void 0!==this.draggableDiv){var r,n,i=this.draggableDiv.nativeElement,a=i.querySelector(".limble-tree-handle");r=this.treeService.treeOptions,n=null===(e=this.branch)||void 0===e?void 0:e.data,void 0===r||!0!==r.allowDragging&&("function"!=typeof r.allowDragging||void 0===n||!0!==r.allowDragging(n))?i.setAttribute("draggable","false"):null===a?i.setAttribute("draggable","true"):a.addEventListener("mousedown",(function(){i.setAttribute("draggable","true");var e=t.dragStateService.state$.pipe(o.filter((function(e){return"dragging"===e})),o.first());t.dragStateService.state$.pipe(o.skipUntil(e),o.filter((function(e){return"idle"===e})),o.first()).subscribe((function(){i.setAttribute("draggable","false")}))}))}},e}();T.ɵfac=function(e){return new(e||T)(t.ɵɵdirectiveInject(y),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(g),t.ɵɵdirectiveInject(w),t.ɵɵdirectiveInject($),t.ɵɵdirectiveInject(I))},T.ɵcmp=t.ɵɵdefineComponent({type:T,selectors:[["limble-tree-node"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(E,1,t.ViewContainerRef),t.ɵɵviewQuery(M,1,t.ViewContainerRef),t.ɵɵviewQuery(P,1,t.ViewContainerRef),t.ɵɵviewQuery(F,1,t.ViewContainerRef),t.ɵɵviewQuery(O,1,t.ElementRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.nodeHost=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneAbove=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneBelow=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.children=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.draggableDiv=n.first)}},inputs:{branch:"branch"},decls:11,vars:0,consts:[["dropZoneAbove",""],[1,"limble-parent-container",3,"dragstart","dragend"],["draggableDiv",""],[3,"dragover"],["nodeHost",""],["children",""],["dropZoneBelow",""]],template:function(e,r){1&e&&(t.ɵɵtemplate(0,R,0,0,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(2,"div",1,2),t.ɵɵlistener("dragstart",(function(e){return r.dragstartHandler(e)}))("dragend",(function(e){return r.dragendHandler(e)})),t.ɵɵelementStart(4,"div",3),t.ɵɵlistener("dragover",(function(e){return r.dragoverHandler(e)})),t.ɵɵtemplate(5,j,0,0,"ng-template",null,4,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵtemplate(7,H,0,0,"ng-template",null,5,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵtemplate(9,A,0,0,"ng-template",null,6,t.ɵɵtemplateRefExtractor))},styles:[".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(T,[{type:t.Component,args:[{selector:"limble-tree-node",templateUrl:"./limble-tree-node.component.html",styleUrls:["./limble-tree-node.component.scss"]}]}],(function(){return[{type:y},{type:t.ChangeDetectorRef},{type:g},{type:w},{type:$},{type:I}]}),{branch:[{type:t.Input}],nodeHost:[{type:t.ViewChild,args:["nodeHost",{read:t.ViewContainerRef}]}],dropZoneAbove:[{type:t.ViewChild,args:["dropZoneAbove",{read:t.ViewContainerRef}]}],dropZoneBelow:[{type:t.ViewChild,args:["dropZoneBelow",{read:t.ViewContainerRef}]}],children:[{type:t.ViewChild,args:["children",{read:t.ViewContainerRef}]}],draggableDiv:[{type:t.ViewChild,args:["draggableDiv",{read:t.ElementRef}]}]});var V=function(){};V.ɵfac=function(e){return new(e||V)},V.ɵcmp=t.ɵɵdefineComponent({type:V,selectors:[["limble-tree-placeholder"]],decls:1,vars:0,consts:[[1,"placeholder"]],template:function(e,r){1&e&&t.ɵɵelement(0,"div",0)},styles:[".placeholder[_ngcontent-%COMP%]{width:100%;height:20px}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(V,[{type:t.Component,args:[{selector:"limble-tree-placeholder",templateUrl:"./limble-tree-placeholder.component.html",styleUrls:["./limble-tree-placeholder.component.scss"]}]}],null,null);var $=function(){function e(e,t){this.componentCreatorService=e,this.dropZoneService=t,this.changes$=new r.ReplaySubject(1),this.drops$=new r.ReplaySubject(1),this.treeModel=new u(null),this.placeholder=!1}return e.prototype.init=function(e,t,r,n,o){if(this.host=e,this.uncutData=t,this.treeOptions=this.processOptions(r,n,o),!0===this.treeOptions.listMode){var i=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(i)&&(i=0);var a=i+this.treeOptions.itemsPerPage;this.treeData=this.uncutData.slice(i,a)}else this.treeData=this.uncutData;this.render()},e.prototype.usePlaceholder=function(){if(!0!==this.placeholder){if(void 0===this.host)throw new Error("TreeModel not initialized");this.placeholder=!0;var e=new u({component:{class:V}});this.treeModel.appendChild(e),this.componentCreatorService.appendComponent(T,this.host).instance.branch=e}},e.prototype.removePlaceholder=function(){if(!1!==this.placeholder){var e=this.treeModel.getChildren().length-1;-1!==e&&this.treeModel.removeChild(e),this.placeholder=!1}},e.prototype.render=function(){var e,t,r,n,o=this;if(void 0===this.host||void 0===this.treeData||void 0===this.treeOptions)throw new Error("TreeModel not initialized");if(this.host.clear(),this.dropZoneService.reset(),this.placeholder=!1,this.treeModel=new u(null),0===this.treeData.length)this.usePlaceholder();else{try{for(var i=a(this.treeData),l=i.next();!l.done;l=i.next()){var s=l.value,d=new u(s);this.treeModel.appendChild(d)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}try{for(var c=a(this.treeModel.getChildren()),p=c.next();!p.done;p=c.next()){d=p.value;this.componentCreatorService.appendComponent(T,this.host).instance.branch=d}}catch(e){r={error:e}}finally{try{p&&!p.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}}setTimeout((function(){if(void 0===o.treeOptions)throw new Error("TreeModel not initialized");o.dropZoneService.init(o.treeModel,o.treeOptions),o.changes$.next(null)}))},e.prototype.renderBranch=function(e,t){var r,n,o;if(void 0===this.treeModel)throw new Error("TreeModel not initialized");e.clear();try{for(var i=a(null!==(o=t.data.nodes)&&void 0!==o?o:[]),l=i.next();!l.done;l=i.next()){var s=l.value,d=new u(s);t.appendChild(d),this.componentCreatorService.appendComponent(T,e).instance.branch=d}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},e.prototype.processOptions=function(e,t,r){var n,o,i,a,l;return void 0===e&&(e={}),void 0===t&&(t=1/0),void 0===r&&(r=1),!0===e.listMode&&void 0!==e.allowNesting&&!1!==e.allowNesting&&console.warn("The value of `allowNesting` will be ignored; it must be false when `listMode` is true"),{defaultComponent:e.defaultComponent,indent:null!==(n=e.indent)&&void 0!==n?n:45,allowNesting:!0!==e.listMode&&(null===(o=e.allowNesting)||void 0===o||o),allowDragging:null===(i=e.allowDragging)||void 0===i||i,allowDrop:null!==(a=e.allowDrop)&&void 0!==a?a:function(){return!0},listMode:null!==(l=e.listMode)&&void 0!==l&&l,itemsPerPage:e.listMode?t:void 0,page:e.listMode?r:void 0}},e.prototype.drop=function(e,t){var r,n,o=e.getParent(),i=e.getIndex();if(void 0===i)throw new Error("Cannot move the hidden root node");if(!0===this.placeholder?(r=[],n=0,this.removePlaceholder()):n=(r=s(t)).pop(),void 0===n)throw new Error("target coordinates are empty");var a=this.treeModel.getDescendant(r);if(void 0===a)throw new Error("could not get to target");a.insertChild(e,n),this.rebuildTreeData(),this.drops$.next({target:e.data,oldParent:null==o?void 0:o.data,oldIndex:i,newParent:a.data,newIndex:n}),this.render()},e.prototype.remove=function(e){e.remove(),this.removePlaceholder(),this.rebuildTreeData(),this.render()},e.prototype.rebuildTreeData=function(){var e,t,r;if(void 0===this.uncutData||void 0===this.treeData||void 0===this.treeOptions)throw new Error("Tree data not initialized");this.treeData.length=0;try{for(var n=a(this.treeModel.getChildren()),o=n.next();!o.done;o=n.next()){var i=o.value;this.treeData.push(this.rebuildBranch(i))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}if(!0===this.treeOptions.listMode){var l=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(l)&&(l=0);var d=l+this.treeOptions.itemsPerPage;(r=this.uncutData).splice.apply(r,s([l,this.treeOptions.itemsPerPage],this.treeData)),this.treeData=this.uncutData.slice(l,d)}else this.uncutData=this.treeData},e.prototype.rebuildBranch=function(e){var t,r,n=e.data;n.nodes=[];try{for(var o=a(e.getChildren()),i=o.next();!i.done;i=o.next()){var l=i.value;n.nodes.push(this.rebuildBranch(l))}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.getPlaceholder=function(){return this.placeholder},e}();$.ɵfac=function(e){return new(e||$)(t.ɵɵinject(y),t.ɵɵinject(w))},$.ɵprov=t.ɵɵdefineInjectable({token:$,factory:$.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata($,[{type:t.Injectable}],(function(){return[{type:y},{type:w}]}),null);var z=["host"],B=["dropZoneInside"];function N(e,t){}function Q(e,t){}var _=function(){function e(e,n,o,i){var a=this;this.treeService=e,this.dropZoneService=n,this.dragStateService=o,this.globalEventsService=i,this.treeChange=new t.EventEmitter,this.treeDrop=new t.EventEmitter,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.changesSubscription=this.treeService.changes$.subscribe((function(){a.treeChange.emit()})),this.dropSubscription=this.treeService.drops$.subscribe((function(e){a.treeDrop.emit(e)}))}return e.prototype.ngAfterViewInit=function(){var e;this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),!0===(null===(e=this.options)||void 0===e?void 0:e.listMode)||void 0===this.itemsPerPage&&void 0===this.page||console.warn("pagination is only allowed in listMode; `itemsPerPage` and `page` inputs will be ignored"),this.update()},e.prototype.ngOnChanges=function(){void 0!==this.host&&void 0!==this.data&&this.update()},e.prototype.update=function(){if(void 0===this.host)throw new Error("Failed to render limble tree. Failure occurred at root.");if(void 0===this.data)throw new Error("limbleTree requires a data object");this.treeService.init(this.host,this.data,this.options,this.itemsPerPage,this.page),this.globalEventsService.addScrolling()},e.prototype.dragoverHandler=function(e){null!==e.dataTransfer&&(e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="move")},e.prototype.dragleaveHandler=function(e){var t=e.currentTarget,r=e.relatedTarget;t instanceof Node&&r instanceof Node&&!1===function(e,t){if(e===t)return!0;for(var r=t.parentNode;r!==document;){if(null===r)return;if(r===e)return!0;r=r.parentNode}return!1}(t,r)&&this.dropZoneService.clear()},e.prototype.dropHandler=function(e){e.stopPropagation();var t=this.dropZoneService.getActiveDropZone();if("droppable"===this.dragStateService.getState()){if(null===t)throw new Error("failed to get active drop zone at drop handler");var r=this.dragStateService.capture();if(void 0===r)throw new Error("failed to get current branch in dragendHandler");this.dropZoneService.clear(),this.treeService.drop(r,t.getCoordinates())}},e.prototype.ngOnDestroy=function(){this.changesSubscription.unsubscribe(),this.dropSubscription.unsubscribe()},e}();_.ɵfac=function(e){return new(e||_)(t.ɵɵdirectiveInject($),t.ɵɵdirectiveInject(w),t.ɵɵdirectiveInject(g),t.ɵɵdirectiveInject(I))},_.ɵcmp=t.ɵɵdefineComponent({type:_,selectors:[["limble-tree-root"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(z,1,t.ViewContainerRef),t.ɵɵviewQuery(B,1,t.ViewContainerRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.host=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneInside=n.first)}},inputs:{data:"data",options:"options",itemsPerPage:"itemsPerPage",page:"page"},outputs:{dropZoneInside$:"dropZoneInside$",treeChange:"treeChange",treeDrop:"treeDrop"},features:[t.ɵɵProvidersFeature([$,w]),t.ɵɵNgOnChangesFeature],decls:5,vars:0,consts:[[3,"dragover","dragleave","drop"],["dropZoneInside",""],["host",""]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div",0),t.ɵɵlistener("dragover",(function(e){return r.dragoverHandler(e)}))("dragleave",(function(e){return r.dragleaveHandler(e)}))("drop",(function(e){return r.dropHandler(e)})),t.ɵɵtemplate(1,N,0,0,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵtemplate(3,Q,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd())},styles:[""]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(_,[{type:t.Component,args:[{selector:"limble-tree-root",templateUrl:"./limble-tree-root.component.html",styleUrls:["./limble-tree-root.component.scss"],providers:[$,w]}]}],(function(){return[{type:$},{type:w},{type:g},{type:I}]}),{data:[{type:t.Input}],options:[{type:t.Input}],itemsPerPage:[{type:t.Input}],page:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}],treeChange:[{type:t.Output}],treeDrop:[{type:t.Output}]});var k=function(){};k.ɵmod=t.ɵɵdefineNgModule({type:k}),k.ɵinj=t.ɵɵdefineInjector({factory:function(e){return new(e||k)},providers:[y,g,I],imports:[[n.CommonModule]]}),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(k,{declarations:[S,c,T,_,V],imports:[n.CommonModule],exports:[_]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(k,[{type:t.NgModule,args:[{declarations:[S,c,T,_,V],imports:[n.CommonModule],exports:[_],providers:[y,g,I]}]}],null,null),e.LimbleTreeModule=k,e.LimbleTreeRootComponent=_,Object.defineProperty(e,"__esModule",{value:!0})}));
***************************************************************************** */var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};Object.create;function a(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function l(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a}function s(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(l(arguments[t]));return e}Object.create;var d=function(e,t){return{active:e,related:t}},c=function(){function e(e){this.dropZoneService=e,this.active=!1}return e.prototype.dragenterHandler=function(){!0!==this.active&&void 0!==this.coordinates&&this.dropZoneService.swapActiveDropZone(this.coordinates)},e}();function h(e,t){var r,n;if(e.length!==t.length)return!1;try{for(var o=a(e.entries()),i=o.next();!i.done;i=o.next()){var s=l(i.value,2),d=s[0],c=s[1],p=t[d];if(c instanceof Array&&p instanceof Array){if(!h(c,p))return!1}else if(c!==p)return!1}}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!0}function p(e,t){return void 0!==e&&(!0===e.allowNesting||"function"==typeof e.allowNesting&&void 0!==t&&!0===e.allowNesting(t))}c.ɵfac=function(e){return new(e||c)(t.ɵɵdirectiveInject(w))},c.ɵcmp=t.ɵɵdefineComponent({type:c,selectors:[["drop-zone"]],inputs:{active:"active",coordinates:"coordinates"},decls:2,vars:4,consts:[[1,"dropZoneContainer",3,"dragenter"],[3,"ngClass"]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div",0),t.ɵɵlistener("dragenter",(function(){return r.dragenterHandler()})),t.ɵɵelement(1,"div",1),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(1),t.ɵɵproperty("ngClass",t.ɵɵpureFunction2(1,d,r.active,!r.active)))},directives:[n.NgClass],styles:[".active[_ngcontent-%COMP%]{height:105px;border-radius:5px;background:#f0f9ff;border:2px dashed #bed2db}.active[_ngcontent-%COMP%], .related[_ngcontent-%COMP%]{margin:10px 0;width:calc(100% - 20px);box-sizing:border-box}.related[_ngcontent-%COMP%]{height:30px;border-radius:5px;background:#fff6f0;border:1px dashed #dbccbe;opacity:.8}.dropZoneContainer[_ngcontent-%COMP%]{position:relative}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(c,[{type:t.Component,args:[{selector:"drop-zone",templateUrl:"./drop-zone.component.html",styleUrls:["./drop-zone.component.scss"]}]}],(function(){return[{type:w}]}),{active:[{type:t.Input}],coordinates:[{type:t.Input}]});var u=function(){function e(e){this.data=e,this.children=[],this.parent=null}return e.prototype.isRoot=function(){return null===this.parent},e.prototype.getParent=function(){return this.parent},e.prototype.setParent=function(e){this.parent=e},e.prototype.findByCoordinates=function(e){var t,r,n=this;try{for(var o=a(e.values()),i=o.next();!i.done;i=o.next()){var l=i.value;if(void 0===(n=n.getChild(l)))return}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.getCoordinates=function(){for(var e=[],t=this;null!==t.parent;){var r=t.getIndex();if(void 0===r)throw new Error("Could not get cursor index");e.unshift(r),t=t.parent}return e},e.prototype.getChild=function(e){return this.children[e]},e.prototype.getChildren=function(){return this.children},e.prototype.getIndex=function(){var e=this;if(null!==this.parent){var t=this.parent.children.findIndex((function(t){return t===e}));if(-1!==t)return t}},e.prototype.getDescendant=function(e){var t,r,n=this;try{for(var o=a(e),i=o.next();!i.done;i=o.next()){var l=i.value;if(void 0===(n=n.children[l]))return}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.findDescendant=function(e){var t,r;if(!0===e(this.data))return this;if(this.children.length>0)try{for(var n=a(this.children),o=n.next();!o.done;o=n.next()){var i=o.value.findDescendant(e);if(void 0!==i)return i}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},e.prototype.getAncestors=function(){for(var e=[],t=this;null!==t.parent;)e.push(t.parent),t=t.parent;return e},e.prototype.appendChild=function(e){return null!==e.getParent()&&e.remove(),e.setParent(this),this.children.push(e),e},e.prototype.insertChild=function(e,t){var r=this.children.indexOf(e);return-1===r?(null!==e.getParent()&&e.remove(),e.setParent(this),this.children.splice(t,0,e)):t>r?(this.children.splice(t,0,e),this.removeChild(r),e.setParent(this)):(e.remove(),this.children.splice(t,0,e),e.setParent(this)),e},e.prototype.removeChild=function(e){var t=this.children.splice(e,1)[0];return t.setParent(null),t},e.prototype.remove=function(){var e=this.getIndex();if(null===this.parent||void 0===e)throw new Error("can't remove root");return this.parent.removeChild(e)},e.prototype.copy=function(){var e=this.copyHelper();return e.setParent(null),e},e.prototype.copyHelper=function(){var t,r,n=new e(this.data);try{for(var o=a(this.children),i=o.next();!i.done;i=o.next()){var l=i.value;n.appendChild(l.copyHelper()).parent=n}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e}();function f(e){var t,r,n=new v(e.data);try{for(var o=a(e.getChildren()),i=o.next();!i.done;i=o.next()){var l=i.value;n.appendChild(v.fromBranch(l)).setParent(n)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n}var v=function(e){function t(t,r){void 0===r&&(r=!1);var n=e.call(this,t)||this;return n.hidden=r,n.hiddenChildren=new Map,n.children=[],n.parent=null,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}(t,e),t.fromBranch=function(e){var t=f(e);return t.setParent(null),t},t.prototype.getHiddenChild=function(e){return this.hiddenChildren.get(e)},t.prototype.getParent=function(){return this.parent},t.prototype.addHiddenChild=function(e,t){return this.hiddenChildren.set(t,e),e.setHidden(!0),e.setParent(this),e},t.prototype.findByCoordinates=function(e,t){var r,n;void 0===t&&(t=!1);var o=this;try{for(var i=a(e.entries()),s=i.next();!s.done;s=i.next()){var d=l(s.value,2),c=d[0],h=d[1],p=void 0;if(void 0===(p=c===e.length-1&&!0===t?o.getHiddenChild(h):o.getChild(h)))return;o=p}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return o},t.prototype.getChild=function(e){return this.children[e]},t.prototype.getIndex=function(){var e,t,r=this;if(null!==this.parent){if(!1===this.hidden){var n=this.parent.children.findIndex((function(e){return e===r}));if(-1===n)return;return n}try{for(var o=a(this.parent.hiddenChildren.entries()),i=o.next();!i.done;i=o.next()){var s=l(i.value,2),d=s[0];if(s[1]===this)return d}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}}},t.prototype.setHidden=function(e){this.hidden=e},t.prototype.isHidden=function(){return this.hidden},t.prototype.copy=function(){var e=this.copyHelper();return e.setParent(null),e},t.prototype.copyHelper=function(){var t,r,n=e.prototype.copyHelper.call(this);try{for(var o=a(this.hiddenChildren.entries()),i=o.next();!i.done;i=o.next()){var s=l(i.value,2),d=s[0],c=s[1];n.addHiddenChild(c.copyHelper(),d).parent=n}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},t}(u),g=function(){function e(){this.state="idle",this.state$=new r.BehaviorSubject(this.state)}return e.prototype.dragging=function(e){this._tempData=e,this.state="dragging",this.state$.next(this.state)},e.prototype.droppable=function(){if("dragging"!==this.state)throw new Error("Can only call `droppable` when state is `dragging`");this.state="droppable",this.state$.next(this.state)},e.prototype.notDroppable=function(){if("droppable"!==this.state)throw new Error("Can only call `notDroppable` when state is `droppable`");this.state="dragging",this.state$.next(this.state)},e.prototype.capture=function(){if("droppable"!==this.state)throw new Error("Can only move to `captured` state from `droppable` state");return this.state="captured",this.state$.next(this.state),this._tempData},e.prototype.release=function(){this._tempData=void 0,this.state="idle",this.state$.next(this.state)},e.prototype.getData=function(){return this._tempData},e.prototype.getState=function(){return this.state},e}();g.ɵfac=function(e){return new(e||g)},g.ɵprov=t.ɵɵdefineInjectable({token:g,factory:g.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(g,[{type:t.Injectable}],(function(){return[]}),null);var y=function(){function e(e){this.factoryResolver=e,this.factoryResolver=e}return e.prototype.appendComponent=function(e,t,r){void 0===r&&(r=null);var n=this.factoryResolver.resolveComponentFactory(e),o=t.createComponent(n);if(null!==r){var i=t.indexOf(o.hostView);t.detach(i),t.insert(o.hostView,r)}return o},e}();function m(e,t){var r=e.getCoordinates(),n=t.getCoordinates();return r.length>n.length?-1:r.length<n.length?1:0}y.ɵfac=function(e){return new(e||y)(t.ɵɵinject(t.ComponentFactoryResolver))},y.ɵprov=t.ɵɵdefineInjectable({token:y,factory:y.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(y,[{type:t.Injectable}],(function(){return[{type:t.ComponentFactoryResolver}]}),null);var w=function(){function e(e,t){this.dragStateService=e,this.componentCreatorService=t,this.dropZoneStack=[],this.dropZoneInventory=[],this.dropZoneFamilies=[],this.visibleFamily=null,this.activeDropZone=null,this.tempFamilies=[],this.setActiveDropZone(null)}return e.prototype.addDropZone=function(e,t){if(void 0===this.dropZoneStack.find((function(t){return h(t.coordinates,e)}))){var r=new v({container:t});this.dropZoneStack.push({dropZone:r,coordinates:e})}},e.prototype.clear=function(){var e,t;if(null!==this.visibleFamily){try{for(var r=a(this.visibleFamily.members),n=r.next();!n.done;n=r.next()){n.value.data.container.clear()}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.visibleFamily=null}this.restoreFamilies(),this.setActiveDropZone(null)},e.prototype.getActiveDropZone=function(){return this.activeDropZone},e.prototype.init=function(e,t){var r,n;this.tree=e,this.treeOptions=t,this.reset();try{for(var o=a(this.dropZoneStack),i=o.next();!i.done;i=o.next()){var l=i.value;this.dropZoneInventory.push(l.dropZone),this.addToTree(l.dropZone,l.coordinates)}}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}this.dropZoneStack.length=0,this.assignFamilies()},e.prototype.reset=function(){this.clear(),this.dropZoneFamilies.length=0,this.dropZoneInventory.length=0,this.tree&&(this.treeWithDropZones=v.fromBranch(this.tree))},e.prototype.restoreFamilies=function(){var e,t,r,n;if(2===this.tempFamilies.length){this.dropZoneFamilies.pop(),this.dropZoneFamilies.push(this.tempFamilies[0]);try{for(var o=a(this.tempFamilies[0].members),i=o.next();!i.done;i=o.next()){i.value.data.family=this.tempFamilies[0]}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}if(null!==this.tempFamilies[1]){this.dropZoneFamilies.push(this.tempFamilies[1]);try{for(var l=a(this.tempFamilies[1].members),s=l.next();!s.done;s=l.next()){s.value.data.family=this.tempFamilies[1]}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}}this.tempFamilies=[]}},e.prototype.showDropZoneFamily=function(e,t){var r,n,o,i,l,d;if(void 0===t&&(t={joinFamilies:!1,activateLowestInsteadOfFounder:!1}),null===this.activeDropZone||!h(this.activeDropZone.getCoordinates(),e)){if(null===this.visibleFamily&&null===this.activeDropZone||this.clear(),void 0===this.treeWithDropZones)throw new Error("dropZoneService not initialized");var c=this.treeWithDropZones.findByCoordinates(e,!0);if(void 0===c)throw new Error("Could not find drop zone to show");var p=c.data.family;if(!0===t.joinFamilies){var u=s(e);u[u.length-1]++;var f=this.treeWithDropZones.findByCoordinates(u,!0);if(void 0===f)throw new Error("Could not find drop zone to show");var v=f.data.family;if(void 0===p||void 0===v)throw new Error("No family");var g={founder:p.founder,members:s(p.members)};try{for(var y=a(p.members),w=y.next();!w.done;w=y.next()){(E=w.value).data.family=g,E===p.founder?this.showDropZone(E,!0):this.showDropZone(E)}}catch(e){r={error:e}}finally{try{w&&!w.done&&(n=y.return)&&n.call(y)}finally{if(r)throw r.error}}try{for(var b=a(v.members),C=b.next();!C.done;C=b.next()){(E=C.value).data.family=g,E.getCoordinates().length<f.getCoordinates().length&&(g.members.push(E),this.showDropZone(E))}}catch(e){o={error:e}}finally{try{C&&!C.done&&(i=b.return)&&i.call(b)}finally{if(o)throw o.error}}this.tempFamilies=[p,v];var D=this.dropZoneFamilies.indexOf(p);this.dropZoneFamilies.splice(D,1);var Z=this.dropZoneFamilies.indexOf(v);this.dropZoneFamilies.splice(Z,1),this.dropZoneFamilies.push(g),this.visibleFamily=g}else{if(void 0===p)throw new Error("No family");this.visibleFamily=p;try{for(var S=a(p.members),x=S.next();!x.done;x=S.next()){var E;(E=x.value)===p.founder?this.showDropZone(E,!0):this.showDropZone(E)}}catch(e){l={error:e}}finally{try{x&&!x.done&&(d=S.return)&&d.call(S)}finally{if(l)throw l.error}}}if(!0===t.activateLowestInsteadOfFounder){var I=s(this.visibleFamily.members).sort(m).pop();if(void 0===I)throw new Error("Could not get lowest member");this.swapActiveDropZone(I.getCoordinates())}}},e.prototype.swapActiveDropZone=function(e){if(null===this.getActiveDropZone())throw new Error("could not get active drop zone");if(null===this.visibleFamily)throw new Error("No visible family available for swapping");if(void 0===this.treeWithDropZones)throw new Error("dropZoneService not initialized");if(-1===this.visibleFamily.members.findIndex((function(t){return h(t.getCoordinates(),e)})))throw new Error("failed to swap active drop zone");var t=this.treeWithDropZones.findByCoordinates(e,!0);if(void 0===t)throw new Error("Failed to get new drop zone");this.setActiveDropZone(t)},e.prototype.addToTree=function(e,t){if(void 0===this.treeWithDropZones)throw new Error("dropZoneService not initialized");var r=s(t);r.pop();var n=this.treeWithDropZones.findByCoordinates(r);if(void 0===n)throw new Error("could not get parent");n.addHiddenChild(e,t[t.length-1])},e.prototype.assignFamilies=function(){var e,t,r,n,o,i,l=s(this.dropZoneInventory),d=l.filter((function(e){var t=e.getCoordinates();return 0===t[t.length-1]&&t.length>1})).sort((function(e,t){for(var r,n,o,i,a=e.getCoordinates(),l=t.getCoordinates(),s=Math.max(a.length,l.length),d=0;d<s;d++){if((null!==(r=a[d])&&void 0!==r?r:-1)>(null!==(n=l[d])&&void 0!==n?n:-1))return-1;if((null!==(o=a[d])&&void 0!==o?o:-1)<(null!==(i=l[d])&&void 0!==i?i:-1))return 1}return 0})),c=function(e){if(!l.includes(e))return"continue";var t={founder:e,members:[]};e.data.family=t;for(var r=s(e.getCoordinates());r.length>0;){var n=l.findIndex((function(e){return h(e.getCoordinates(),r)}));if(-1!==n){var o=l.splice(n,1)[0];t.members.push(o),o.data.family=t}r.pop(),r[r.length-1]++}p.dropZoneFamilies.push(t)},p=this;try{for(var u=a(d),f=u.next();!f.done;f=u.next()){c(y=f.value)}}catch(t){e={error:t}}finally{try{f&&!f.done&&(t=u.return)&&t.call(u)}finally{if(e)throw e.error}}try{for(var v=a(l.filter((function(e){return 1===e.getCoordinates().length}))),g=v.next();!g.done;g=v.next()){var y,m={founder:y=g.value,members:[y]};y.data.family=m,this.dropZoneFamilies.push(m),l.splice(l.indexOf(y),1)}}catch(e){r={error:e}}finally{try{g&&!g.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}if(0!==l.length){var w="";try{for(var b=a(l),C=b.next();!C.done;C=b.next()){var D=C.value;w+=JSON.stringify(D.getCoordinates())+", "}}catch(e){o={error:e}}finally{try{C&&!C.done&&(i=b.return)&&i.call(b)}finally{if(o)throw o.error}}throw w=w.slice(0,w.length-2),new Error("Some zones were not assigned to a family. The orphan zones have the following coordinates: "+w)}},e.prototype.setActiveDropZone=function(e){var r,n;(null===(r=this.activeDropZone)||void 0===r?void 0:r.data.componentRef)&&(this.activeDropZone.data.componentRef.instance.active=!1,t.NgZone.isInAngularZone()||this.activeDropZone.data.componentRef.changeDetectorRef.detectChanges()),this.activeDropZone=e,null!==this.activeDropZone&&"droppable"!==this.dragStateService.getState()?this.dragStateService.droppable():null===this.activeDropZone&&"droppable"===this.dragStateService.getState()&&this.dragStateService.notDroppable(),(null===(n=this.activeDropZone)||void 0===n?void 0:n.data.componentRef)&&(this.activeDropZone.data.componentRef.instance.active=!0,t.NgZone.isInAngularZone()||this.activeDropZone.data.componentRef.changeDetectorRef.detectChanges())},e.prototype.showDropZone=function(e,r){if(void 0===r&&(r=!1),!this.zoneIsAllowed(e))return!1;if(null===e.getParent())throw new Error("Bad family member");var n=this.componentCreatorService.appendComponent(c,e.data.container);return n.instance.active=r,n.instance.coordinates=e.getCoordinates(),!0===r&&this.setActiveDropZone(e),e.data.componentRef=n,t.NgZone.isInAngularZone()||n.changeDetectorRef.detectChanges(),!0},e.prototype.zoneIsAllowed=function(e){if(void 0===this.treeOptions)throw new Error("dropZoneService not initialized");var t=this.dragStateService.getData();if(void 0===t)throw new Error("Can't get dragged node");var r=e.getParent();if(null===r)throw new Error("Could not get drop zone parent");var n=e.getIndex();if(void 0===n)throw new Error("Could not get drop zone index");return!!this.treeOptions.allowDrop(t.data,r.data,n)},e}();w.ɵfac=function(e){return new(e||w)(t.ɵɵinject(g),t.ɵɵinject(y))},w.ɵprov=t.ɵɵdefineInjectable({token:w,factory:w.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(w,[{type:t.Injectable}],(function(){return[{type:g},{type:y}]}),null);var b=["host"],C=["dropZoneInside"];function D(e,t){}function Z(e,t){}var S=function(){function e(e,t){var n;this.treeService=e,this.changeDetectorRef=t,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.indent=null===(n=this.treeService.treeOptions)||void 0===n?void 0:n.indent}return e.prototype.ngAfterViewInit=function(){this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),this.reRender(),this.changeDetectorRef.detectChanges()},e.prototype.reRender=function(){if(void 0===this.host||void 0===this.branch)throw new Error("Failed to render limble tree branch");this.treeService.renderBranch(this.host,this.branch)},e}();function x(e){var t,r,n,o=/(auto|scroll)/,i=function(e,t){return null===e||null===e.parentNode?t:i(e.parentElement,t.concat([e]))},l=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},s=function(e){return o.test(function(e){return l(e,"overflow")+l(e,"overflow-y")+l(e,"overflow-x")}(e))},d=i(e.parentElement,[]);try{for(var c=a(d),h=c.next();!h.done;h=c.next()){var p=h.value;if(s(p))return p}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}return null!==(n=document.scrollingElement)&&void 0!==n?n:document.documentElement}S.ɵfac=function(e){return new(e||S)(t.ɵɵdirectiveInject($),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},S.ɵcmp=t.ɵɵdefineComponent({type:S,selectors:[["limble-tree-branch"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(b,1,t.ViewContainerRef),t.ɵɵviewQuery(C,1,t.ViewContainerRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.host=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneInside=n.first)}},inputs:{branch:"branch"},outputs:{dropZoneInside$:"dropZoneInside$"},decls:6,vars:3,consts:[["dropZoneInside",""],[1,"limble-child-nodes",3,"hidden"],["host",""]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵtemplate(1,D,0,0,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"span",1),t.ɵɵtemplate(4,Z,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵstyleProp("margin-left",r.indent,"px"),t.ɵɵadvance(3),t.ɵɵproperty("hidden",r.branch&&r.branch.data.collapsed))},styles:["./limble-tree-branch.component.scss"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(S,[{type:t.Component,args:[{selector:"limble-tree-branch",templateUrl:"./limble-tree-branch.component.html",styles:["./limble-tree-branch.component.scss"]}]}],(function(){return[{type:$},{type:t.ChangeDetectorRef}]}),{branch:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}]});var E=function(){function e(e){var t=this;this.ngZone=e,this.ngZone.runOutsideAngular((function(){t.globalDrag$=r.fromEvent(document,"drag")})),this.scrolling=!1}return e.prototype.addScrolling=function(){var e=this;this.ngZone.runOutsideAngular((function(){if(void 0===e.globalDragSubscription){if(void 0===e.globalDrag$)throw new Error("Could not get observable");var t,r,n,i,a,l,s,d,c;e.globalDragSubscription=e.globalDrag$.pipe(o.throttleTime(25),o.filter((function(e){if(!e.target)return!1;d=x(e.target),t=d.clientHeight;var o,s=d.clientWidth;if("fixed"===window.getComputedStyle(d).getPropertyValue("position").toLowerCase())o=e.clientX,c=e.clientY;else{var h=d.getBoundingClientRect(),p=x(d);o=e.clientX-(h.left+p.scrollLeft),c=e.clientY-(h.top+p.scrollTop)}return!(o<0||o>s||c<0||c>t)&&(r=Math.max(.1*t,100),l=c>(i=t-r),(a=c<(n=r))||l)}))).subscribe((function(){if(null!==d){var o,h=d.scrollHeight-t,p=d.scrollTop;if(a&&p>0){o=p-75*((n-c)/r)}else{if(!l||!(p<h))return;o=p+75*((c-i)/r)}(o=Math.max(0,Math.min(h,o)))!==p&&(d.scrollTo({top:o}),e.scrolling=!0,clearTimeout(s),s=setTimeout((function(){e.scrolling=!1}),100))}}))}}))},e.prototype.removeScrolling=function(){void 0!==this.globalDragSubscription&&this.globalDragSubscription.unsubscribe()},e}();E.ɵfac=function(e){return new(e||E)(t.ɵɵinject(t.NgZone))},E.ɵprov=t.ɵɵdefineInjectable({token:E,factory:E.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(E,[{type:t.Injectable}],(function(){return[{type:t.NgZone}]}),null);var I=function(){function e(e,r){this.ngZone=e,this.el=r,this.dragoverNoChangeDetect=new t.EventEmitter,this.dragoverEventThrottle=0}return e.prototype.ngOnInit=function(){var e=this;this.ngZone.runOutsideAngular((function(){e.eventSubscription=r.fromEvent(e.el.nativeElement,"dragover").pipe(o.throttleTime(e.dragoverEventThrottle)).subscribe((function(t){e.dragoverNoChangeDetect.emit(t)}))}))},e.prototype.ngOnDestroy=function(){void 0!==this.eventSubscription&&this.eventSubscription.unsubscribe()},e}();I.ɵfac=function(e){return new(e||I)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},I.ɵdir=t.ɵɵdefineDirective({type:I,selectors:[["","dragoverNoChangeDetect",""]],inputs:{dragoverEventThrottle:"dragoverEventThrottle"},outputs:{dragoverNoChangeDetect:"dragoverNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(I,[{type:t.Directive,args:[{selector:"[dragoverNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragoverEventThrottle:[{type:t.Input}],dragoverNoChangeDetect:[{type:t.Output}]});var M=["nodeHost"],P=["dropZoneAbove"],R=["dropZoneBelow"],O=["children"],F=["draggableDiv"];function j(e,t){}function N(e,t){}function T(e,t){}function A(e,t){}var H=function(){function e(e,t,r,n,o,i){this.componentCreatorService=e,this.changeDetectorRef=t,this.dragStateService=r,this.dropZoneService=n,this.treeService=o,this.globalEventsService=i}return e.prototype.ngAfterViewInit=function(){this.registerDropZones(),this.renderSelf(),this.renderChildren(),this.checkForHandle(),this.changeDetectorRef.detectChanges()},e.prototype.dragstartHandler=function(e){var t,r=this;if(e.stopPropagation(),null===e.dataTransfer||void 0===this.branch)throw new Error("failed to run dragstartHandler");var n=e.target;"LIMBLE-TREE-NODE"===(null===(t=n.parentElement)||void 0===t?void 0:t.tagName)&&(e.dataTransfer.effectAllowed="move",this.dragStateService.dragging(this.branch),setTimeout((function(){var e;if(n.classList.add("dragging"),void 0===r.branch)throw new Error("Could not show surrounding drop zones");var t,o=r.branch.getParent(),i=!0;null!==(null==o?void 0:o.data)&&(t=null==o?void 0:o.data,i=p(r.treeService.treeOptions,t)),void 0!==r.dropZoneAbove&&i&&(r.dropZoneService.showDropZoneFamily(r.branch.getCoordinates(),{joinFamilies:!0}),1===(null===(e=r.treeService.treeData)||void 0===e?void 0:e.length)&&1===r.branch.getCoordinates().length&&r.treeService.usePlaceholder())})))},e.prototype.dragendHandler=function(e){var t=this;if(e.stopPropagation(),e.target.classList.remove("dragging"),void 0===this.branch)throw new Error("failed to get current branch in dragendHandler");if("captured"!==this.dragStateService.getState())return this.dragStateService.release(),this.dropZoneService.clear(),this.dropZoneService.restoreFamilies(),void this.treeService.removePlaceholder();this.dragStateService.state$.pipe(o.take(2)).subscribe((function(e){"captured"===e&&void 0!==t.branch&&(t.treeService.remove(t.branch),t.dragStateService.release())}))},e.prototype.dragoverHandler=function(e){var t,r,n;if(!0!==this.globalEventsService.scrolling){if(void 0===this.branch)throw new Error("Can't get current branch during dragover event");var o=this.dragStateService.getData();if(void 0!==o&&o!==this.branch&&!this.branch.getAncestors().includes(o))if(!0!==this.treeService.getPlaceholder()||void 0===this.dropZoneAbove){var i,a=e.currentTarget.offsetHeight/3,l=2*a,d=this.branch.getParent(),c=!0;if(null!==(null==d?void 0:d.data)&&(i=null==d?void 0:d.data,c=p(this.treeService.treeOptions,i)),e.offsetY<a&&void 0!==this.dropZoneAbove&&(null===(t=this.dropZoneService.getActiveDropZone())||void 0===t?void 0:t.data.container)!==this.dropZoneAbove&&c){var h=s(this.branch.getCoordinates());this.dropZoneService.showDropZoneFamily(h,{activateLowestInsteadOfFounder:!0})}else if(e.offsetY<l&&void 0!==this.dropZoneInside&&(null===(r=this.dropZoneService.getActiveDropZone())||void 0===r?void 0:r.data.container)!==this.dropZoneInside){(h=s(this.branch.getCoordinates())).push(0),this.dropZoneService.showDropZoneFamily(h)}else if(e.offsetY>=l&&void 0!==this.dropZoneBelow&&(null===(n=this.dropZoneService.getActiveDropZone())||void 0===n?void 0:n.data.container)!==this.dropZoneBelow&&0===this.branch.getChildren().length&&c){(h=s(this.branch.getCoordinates()))[h.length-1]++,this.dropZoneService.showDropZoneFamily(h)}}else this.dropZoneService.showDropZoneFamily([0])}},e.prototype.renderSelf=function(){var e;if(void 0===this.nodeHost||void 0===this.branch)throw new Error("Failed to render tree node");var t=this.branch.data.component;if(void 0===t&&(t=null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.defaultComponent),void 0===t)throw new Error("limbleTree requires a component to render");var r=this.componentCreatorService.appendComponent(t.class,this.nodeHost);for(var n in r.instance.nodeData=this.branch.data,t.bindings)r.instance[n]=t.bindings[n]},e.prototype.renderChildren=function(){var e,t=this;if(void 0!==this.children&&!0!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.listMode)&&!0!==this.treeService.getPlaceholder()){if(void 0===this.branch)throw new Error("branch is undefined");var r=this.componentCreatorService.appendComponent(S,this.children);r.instance.branch=this.branch,p(this.treeService.treeOptions,this.branch.data)&&r.instance.dropZoneInside$.subscribe((function(e){var r;if(void 0!==e&&!1!==(null===(r=t.treeService.treeOptions)||void 0===r?void 0:r.allowDragging)){if(t.dropZoneInside=e,void 0===t.branch)throw new Error("failed to register inner drop zone");var n=t.branch.getCoordinates();n.push(0),t.dropZoneService.addDropZone(n,t.dropZoneInside)}}))}},e.prototype.registerDropZones=function(){var e;if(!1!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.allowDragging)){if(void 0===this.dropZoneAbove||void 0===this.dropZoneBelow||void 0===this.branch)throw new Error("failed to register drop zones");var t,r=this.branch.getParent();if(null===(null==r?void 0:r.data)||(t=null==r?void 0:r.data,p(this.treeService.treeOptions,t))){var n=this.branch.getCoordinates(),o=s(n);if(this.dropZoneService.addDropZone(o,this.dropZoneAbove),!0!==this.treeService.getPlaceholder()){var i=s(n);i[i.length-1]++,this.dropZoneService.addDropZone(i,this.dropZoneBelow)}}}},e.prototype.checkForHandle=function(){var e,t=this;if(void 0!==this.draggableDiv){var r,n,i=this.draggableDiv.nativeElement,a=i.querySelector(".limble-tree-handle");r=this.treeService.treeOptions,n=null===(e=this.branch)||void 0===e?void 0:e.data,void 0===r||!0!==r.allowDragging&&("function"!=typeof r.allowDragging||void 0===n||!0!==r.allowDragging(n))?i.setAttribute("draggable","false"):null===a?i.setAttribute("draggable","true"):a.addEventListener("mousedown",(function(){i.setAttribute("draggable","true");var e=t.dragStateService.state$.pipe(o.filter((function(e){return"dragging"===e})),o.first());t.dragStateService.state$.pipe(o.skipUntil(e),o.filter((function(e){return"idle"===e})),o.first()).subscribe((function(){i.setAttribute("draggable","false")}))}))}},e}();H.ɵfac=function(e){return new(e||H)(t.ɵɵdirectiveInject(y),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(g),t.ɵɵdirectiveInject(w),t.ɵɵdirectiveInject($),t.ɵɵdirectiveInject(E))},H.ɵcmp=t.ɵɵdefineComponent({type:H,selectors:[["limble-tree-node"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(M,1,t.ViewContainerRef),t.ɵɵviewQuery(P,1,t.ViewContainerRef),t.ɵɵviewQuery(R,1,t.ViewContainerRef),t.ɵɵviewQuery(O,1,t.ViewContainerRef),t.ɵɵviewQuery(F,1,t.ElementRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.nodeHost=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneAbove=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneBelow=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.children=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.draggableDiv=n.first)}},inputs:{branch:"branch"},decls:11,vars:1,consts:[["dropZoneAbove",""],[1,"limble-parent-container",3,"dragstart","dragend"],["draggableDiv",""],[3,"dragoverEventThrottle","dragoverNoChangeDetect"],["nodeHost",""],["children",""],["dropZoneBelow",""]],template:function(e,r){1&e&&(t.ɵɵtemplate(0,j,0,0,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(2,"div",1,2),t.ɵɵlistener("dragstart",(function(e){return r.dragstartHandler(e)}))("dragend",(function(e){return r.dragendHandler(e)})),t.ɵɵelementStart(4,"div",3),t.ɵɵlistener("dragoverNoChangeDetect",(function(e){return r.dragoverHandler(e)})),t.ɵɵtemplate(5,N,0,0,"ng-template",null,4,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵtemplate(7,T,0,0,"ng-template",null,5,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵtemplate(9,A,0,0,"ng-template",null,6,t.ɵɵtemplateRefExtractor)),2&e&&(t.ɵɵadvance(4),t.ɵɵproperty("dragoverEventThrottle",10))},directives:[I],styles:[".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(H,[{type:t.Component,args:[{selector:"limble-tree-node",templateUrl:"./limble-tree-node.component.html",styleUrls:["./limble-tree-node.component.scss"]}]}],(function(){return[{type:y},{type:t.ChangeDetectorRef},{type:g},{type:w},{type:$},{type:E}]}),{branch:[{type:t.Input}],nodeHost:[{type:t.ViewChild,args:["nodeHost",{read:t.ViewContainerRef}]}],dropZoneAbove:[{type:t.ViewChild,args:["dropZoneAbove",{read:t.ViewContainerRef}]}],dropZoneBelow:[{type:t.ViewChild,args:["dropZoneBelow",{read:t.ViewContainerRef}]}],children:[{type:t.ViewChild,args:["children",{read:t.ViewContainerRef}]}],draggableDiv:[{type:t.ViewChild,args:["draggableDiv",{read:t.ElementRef}]}]});var V=function(){};V.ɵfac=function(e){return new(e||V)},V.ɵcmp=t.ɵɵdefineComponent({type:V,selectors:[["limble-tree-placeholder"]],decls:1,vars:0,consts:[[1,"placeholder"]],template:function(e,r){1&e&&t.ɵɵelement(0,"div",0)},styles:[".placeholder[_ngcontent-%COMP%]{width:100%;height:20px}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(V,[{type:t.Component,args:[{selector:"limble-tree-placeholder",templateUrl:"./limble-tree-placeholder.component.html",styleUrls:["./limble-tree-placeholder.component.scss"]}]}],null,null);var $=function(){function e(e,t){this.componentCreatorService=e,this.dropZoneService=t,this.changes$=new r.ReplaySubject(1),this.drops$=new r.ReplaySubject(1),this.treeModel=new u(null),this.placeholder=!1}return e.prototype.init=function(e,t,r,n,o){if(this.host=e,this.uncutData=t,this.treeOptions=this.processOptions(r,n,o),!0===this.treeOptions.listMode){var i=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(i)&&(i=0);var a=i+this.treeOptions.itemsPerPage;this.treeData=this.uncutData.slice(i,a)}else this.treeData=this.uncutData;this.render()},e.prototype.usePlaceholder=function(){if(!0!==this.placeholder){if(void 0===this.host)throw new Error("TreeModel not initialized");this.placeholder=!0;var e=new u({component:{class:V}});this.treeModel.appendChild(e),this.componentCreatorService.appendComponent(H,this.host).instance.branch=e}},e.prototype.removePlaceholder=function(){if(!1!==this.placeholder){var e=this.treeModel.getChildren().length-1;-1!==e&&this.treeModel.removeChild(e),this.placeholder=!1}},e.prototype.render=function(){var e,t,r,n,o=this;if(void 0===this.host||void 0===this.treeData||void 0===this.treeOptions)throw new Error("TreeModel not initialized");if(this.host.clear(),this.dropZoneService.reset(),this.placeholder=!1,this.treeModel=new u(null),0===this.treeData.length)this.usePlaceholder();else{try{for(var i=a(this.treeData),l=i.next();!l.done;l=i.next()){var s=l.value,d=new u(s);this.treeModel.appendChild(d)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}try{for(var c=a(this.treeModel.getChildren()),h=c.next();!h.done;h=c.next()){d=h.value;this.componentCreatorService.appendComponent(H,this.host).instance.branch=d}}catch(e){r={error:e}}finally{try{h&&!h.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}}setTimeout((function(){if(void 0===o.treeOptions)throw new Error("TreeModel not initialized");o.dropZoneService.init(o.treeModel,o.treeOptions),o.changes$.next(null)}))},e.prototype.renderBranch=function(e,t){var r,n,o;if(void 0===this.treeModel)throw new Error("TreeModel not initialized");e.clear();try{for(var i=a(null!==(o=t.data.nodes)&&void 0!==o?o:[]),l=i.next();!l.done;l=i.next()){var s=l.value,d=new u(s);t.appendChild(d),this.componentCreatorService.appendComponent(H,e).instance.branch=d}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},e.prototype.processOptions=function(e,t,r){var n,o,i,a,l;return void 0===e&&(e={}),void 0===t&&(t=1/0),void 0===r&&(r=1),!0===e.listMode&&void 0!==e.allowNesting&&!1!==e.allowNesting&&console.warn("The value of `allowNesting` will be ignored; it must be false when `listMode` is true"),{defaultComponent:e.defaultComponent,indent:null!==(n=e.indent)&&void 0!==n?n:45,allowNesting:!0!==e.listMode&&(null===(o=e.allowNesting)||void 0===o||o),allowDragging:null===(i=e.allowDragging)||void 0===i||i,allowDrop:null!==(a=e.allowDrop)&&void 0!==a?a:function(){return!0},listMode:null!==(l=e.listMode)&&void 0!==l&&l,itemsPerPage:e.listMode?t:void 0,page:e.listMode?r:void 0}},e.prototype.drop=function(e,t){var r,n,o=e.getParent(),i=e.getIndex();if(void 0===i)throw new Error("Cannot move the hidden root node");if(!0===this.placeholder?(r=[],n=0,this.removePlaceholder()):n=(r=s(t)).pop(),void 0===n)throw new Error("target coordinates are empty");var a=this.treeModel.getDescendant(r);if(void 0===a)throw new Error("could not get to target");a.insertChild(e,n),this.rebuildTreeData(),this.drops$.next({target:e.data,oldParent:null==o?void 0:o.data,oldIndex:i,newParent:a.data,newIndex:n}),this.render()},e.prototype.remove=function(e){e.remove(),this.removePlaceholder(),this.rebuildTreeData(),this.render()},e.prototype.rebuildTreeData=function(){var e,t,r;if(void 0===this.uncutData||void 0===this.treeData||void 0===this.treeOptions)throw new Error("Tree data not initialized");this.treeData.length=0;try{for(var n=a(this.treeModel.getChildren()),o=n.next();!o.done;o=n.next()){var i=o.value;this.treeData.push(this.rebuildBranch(i))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}if(!0===this.treeOptions.listMode){var l=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(l)&&(l=0);var d=l+this.treeOptions.itemsPerPage;(r=this.uncutData).splice.apply(r,s([l,this.treeOptions.itemsPerPage],this.treeData)),this.treeData=this.uncutData.slice(l,d)}else this.uncutData=this.treeData},e.prototype.rebuildBranch=function(e){var t,r,n=e.data;n.nodes=[];try{for(var o=a(e.getChildren()),i=o.next();!i.done;i=o.next()){var l=i.value;n.nodes.push(this.rebuildBranch(l))}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.getPlaceholder=function(){return this.placeholder},e}();$.ɵfac=function(e){return new(e||$)(t.ɵɵinject(y),t.ɵɵinject(w))},$.ɵprov=t.ɵɵdefineInjectable({token:$,factory:$.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata($,[{type:t.Injectable}],(function(){return[{type:y},{type:w}]}),null);var z=function(){function e(e,r){this.ngZone=e,this.el=r,this.dragleaveNoChangeDetect=new t.EventEmitter,this.dragleaveEventThrottle=0}return e.prototype.ngOnInit=function(){var e=this;this.ngZone.runOutsideAngular((function(){e.eventSubscription=r.fromEvent(e.el.nativeElement,"dragleave").pipe(o.throttleTime(e.dragleaveEventThrottle)).subscribe((function(t){e.dragleaveNoChangeDetect.emit(t)}))}))},e.prototype.ngOnDestroy=function(){void 0!==this.eventSubscription&&this.eventSubscription.unsubscribe()},e}();z.ɵfac=function(e){return new(e||z)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},z.ɵdir=t.ɵɵdefineDirective({type:z,selectors:[["","dragleaveNoChangeDetect",""]],inputs:{dragleaveEventThrottle:"dragleaveEventThrottle"},outputs:{dragleaveNoChangeDetect:"dragleaveNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(z,[{type:t.Directive,args:[{selector:"[dragleaveNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragleaveEventThrottle:[{type:t.Input}],dragleaveNoChangeDetect:[{type:t.Output}]});var B=["host"],Q=["dropZoneInside"];function _(e,t){}function k(e,t){}var q=function(){function e(e,n,o,i,a){var l=this;this.treeService=e,this.dropZoneService=n,this.dragStateService=o,this.globalEventsService=i,this.changeDetectorRef=a,this.treeChange=new t.EventEmitter,this.treeDrop=new t.EventEmitter,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.changesSubscription=this.treeService.changes$.subscribe((function(){l.treeChange.emit()})),this.dropSubscription=this.treeService.drops$.subscribe((function(e){l.treeDrop.emit(e)}))}return e.prototype.ngAfterViewInit=function(){var e;this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),!0===(null===(e=this.options)||void 0===e?void 0:e.listMode)||void 0===this.itemsPerPage&&void 0===this.page||console.warn("pagination is only allowed in listMode; `itemsPerPage` and `page` inputs will be ignored"),this.update(),this.changeDetectorRef.detectChanges()},e.prototype.ngOnChanges=function(){void 0!==this.host&&void 0!==this.data&&this.update()},e.prototype.update=function(){if(void 0===this.host)throw new Error("Failed to render limble tree. Failure occurred at root.");if(void 0===this.data)throw new Error("limbleTree requires a data object");this.treeService.init(this.host,this.data,this.options,this.itemsPerPage,this.page),this.globalEventsService.addScrolling()},e.prototype.dragoverHandler=function(e){null!==e.dataTransfer&&(e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="move")},e.prototype.dragleaveHandler=function(e){var t=e.currentTarget,r=e.relatedTarget;t instanceof Node&&r instanceof Node&&!1===function(e,t){if(e===t)return!0;for(var r=t.parentNode;r!==document;){if(null===r)return;if(r===e)return!0;r=r.parentNode}return!1}(t,r)&&(this.dropZoneService.clear(),this.changeDetectorRef.detectChanges())},e.prototype.dropHandler=function(e){e.stopPropagation();var t=this.dropZoneService.getActiveDropZone();if("droppable"===this.dragStateService.getState()){if(null===t)throw new Error("failed to get active drop zone at drop handler");var r=this.dragStateService.capture();if(void 0===r)throw new Error("failed to get current branch in dragendHandler");this.dropZoneService.clear(),this.treeService.drop(r,t.getCoordinates())}},e.prototype.ngOnDestroy=function(){this.changesSubscription.unsubscribe(),this.dropSubscription.unsubscribe()},e}();q.ɵfac=function(e){return new(e||q)(t.ɵɵdirectiveInject($),t.ɵɵdirectiveInject(w),t.ɵɵdirectiveInject(g),t.ɵɵdirectiveInject(E),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},q.ɵcmp=t.ɵɵdefineComponent({type:q,selectors:[["limble-tree-root"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(B,1,t.ViewContainerRef),t.ɵɵviewQuery(Q,1,t.ViewContainerRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.host=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneInside=n.first)}},inputs:{data:"data",options:"options",itemsPerPage:"itemsPerPage",page:"page"},outputs:{dropZoneInside$:"dropZoneInside$",treeChange:"treeChange",treeDrop:"treeDrop"},features:[t.ɵɵProvidersFeature([$,w]),t.ɵɵNgOnChangesFeature],decls:5,vars:0,consts:[[3,"dragoverNoChangeDetect","dragleaveNoChangeDetect","drop"],["dropZoneInside",""],["host",""]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div",0),t.ɵɵlistener("dragoverNoChangeDetect",(function(e){return r.dragoverHandler(e)}))("dragleaveNoChangeDetect",(function(e){return r.dragleaveHandler(e)}))("drop",(function(e){return r.dropHandler(e)})),t.ɵɵtemplate(1,_,0,0,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵtemplate(3,k,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd())},directives:[I,z],styles:[""]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(q,[{type:t.Component,args:[{selector:"limble-tree-root",templateUrl:"./limble-tree-root.component.html",styleUrls:["./limble-tree-root.component.scss"],providers:[$,w]}]}],(function(){return[{type:$},{type:w},{type:g},{type:E},{type:t.ChangeDetectorRef}]}),{data:[{type:t.Input}],options:[{type:t.Input}],itemsPerPage:[{type:t.Input}],page:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}],treeChange:[{type:t.Output}],treeDrop:[{type:t.Output}]});var L=function(){};L.ɵmod=t.ɵɵdefineNgModule({type:L}),L.ɵinj=t.ɵɵdefineInjector({factory:function(e){return new(e||L)},providers:[y,g,E],imports:[[n.CommonModule]]}),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(L,{declarations:[S,c,H,q,V,I,z],imports:[n.CommonModule],exports:[q]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(L,[{type:t.NgModule,args:[{declarations:[S,c,H,q,V,I,z],imports:[n.CommonModule],exports:[q],providers:[y,g,E]}]}],null,null),e.LimbleTreeModule=L,e.LimbleTreeRootComponent=q,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=limble-limble-tree.umd.min.js.map

@@ -11,2 +11,3 @@ import { Component, ElementRef, Input, ViewChild, ViewContainerRef } from "@angular/core";

import * as i5 from "../singletons/global-events.service";
import * as i6 from "../custom-event-bindings/dragover-no-change-detect.directive";
const _c0 = ["nodeHost"];

@@ -121,4 +122,3 @@ const _c1 = ["dropZoneAbove"];

//and skip the rest of the logic in this function
const dropCoordinates = [...this.branch.getCoordinates()];
this.dropZoneService.showDropZoneFamily(dropCoordinates);
this.dropZoneService.showDropZoneFamily([0]);
return;

@@ -280,3 +280,3 @@ }

i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.draggableDiv = _t.first);
} }, inputs: { branch: "branch" }, decls: 11, vars: 0, consts: [["dropZoneAbove", ""], [1, "limble-parent-container", 3, "dragstart", "dragend"], ["draggableDiv", ""], [3, "dragover"], ["nodeHost", ""], ["children", ""], ["dropZoneBelow", ""]], template: function LimbleTreeNodeComponent_Template(rf, ctx) { if (rf & 1) {
} }, inputs: { branch: "branch" }, decls: 11, vars: 1, consts: [["dropZoneAbove", ""], [1, "limble-parent-container", 3, "dragstart", "dragend"], ["draggableDiv", ""], [3, "dragoverEventThrottle", "dragoverNoChangeDetect"], ["nodeHost", ""], ["children", ""], ["dropZoneBelow", ""]], template: function LimbleTreeNodeComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, LimbleTreeNodeComponent_ng_template_0_Template, 0, 0, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);

@@ -286,3 +286,3 @@ i0.ɵɵelementStart(2, "div", 1, 2);

i0.ɵɵelementStart(4, "div", 3);
i0.ɵɵlistener("dragover", function LimbleTreeNodeComponent_Template_div_dragover_4_listener($event) { return ctx.dragoverHandler($event); });
i0.ɵɵlistener("dragoverNoChangeDetect", function LimbleTreeNodeComponent_Template_div_dragoverNoChangeDetect_4_listener($event) { return ctx.dragoverHandler($event); });
i0.ɵɵtemplate(5, LimbleTreeNodeComponent_ng_template_5_Template, 0, 0, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);

@@ -293,3 +293,6 @@ i0.ɵɵelementEnd();

i0.ɵɵtemplate(9, LimbleTreeNodeComponent_ng_template_9_Template, 0, 0, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
} }, styles: [".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"] });
} if (rf & 2) {
i0.ɵɵadvance(4);
i0.ɵɵproperty("dragoverEventThrottle", 10);
} }, directives: [i6.DragoverNoChangeDetectDirective], styles: [".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"] });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeNodeComponent, [{

@@ -320,2 +323,2 @@ type: Component,

}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0osU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUkvRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBUWhFLE1BQU0sT0FBTyx1QkFBdUI7SUFpQmpDLFlBQ29CLHVCQUFnRCxFQUNoRCxpQkFBb0MsRUFDcEMsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLFdBQXdCLEVBQ3hCLG1CQUF3QztRQUx4Qyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtJQUN6RCxDQUFDO0lBRUosZUFBZTtRQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxD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QztZQUNULENBQUMsQ0FBQyxDQUFDO1NBQ0w7SUFDSixDQUFDOzs4RkFqVFMsdUJBQXVCOzREQUF2Qix1QkFBdUI7K0JBRUYsZ0JBQWdCOytCQUdYLGdCQUFnQjsrQkFFaEIsZ0JBQWdCOytCQUdyQixnQkFBZ0I7K0JBR1osVUFBVTs7Ozs7Ozs7O1FDckNoRCx5SEFBMEM7UUFDMUMsaUNBS0M7UUFKRSwrR0FBYSw0QkFBd0IsSUFBQyw4RkFDM0IsMEJBQXNCLElBREs7UUFLdEMsOEJBQTBDO1FBQXJDLDZHQUFZLDJCQUF1QixJQUFDO1FBQ3RDLHlIQUFxQztRQUN4QyxpQkFBTTtRQUNOLHlIQUFxQztRQUN4QyxpQkFBTTtRQUNOLHlIQUEwQzs7dUZEWTdCLHVCQUF1QjtjQUxuQyxTQUFTO2VBQUM7Z0JBQ1IsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsV0FBVyxFQUFFLG1DQUFtQztnQkFDaEQsU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7YUFDbEQ7bU9BRVcsTUFBTTtrQkFBZCxLQUFLO1lBQ3FELFFBQVE7a0JBQWxFLFNBQVM7bUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBSXpDLGFBQWE7a0JBRHBCLFNBQVM7bUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBRzlDLGFBQWE7a0JBRHBCLFNBQVM7bUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBR0ssUUFBUTtrQkFBbEUsU0FBUzttQkFBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFHUSxZQUFZO2tCQUFwRSxTQUFTO21CQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICBBZnRlclZpZXdJbml0LFxyXG4gICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgQ29tcG9uZW50LFxyXG4gICBFbGVtZW50UmVmLFxyXG4gICBJbnB1dCxcclxuICAgVmlld0NoaWxkLFxyXG4gICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50Q3JlYXRvclNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9jb21wb25lbnQtY3JlYXRvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERyb3Bab25lU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtYnJhbmNoL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRHJhZ1N0YXRlU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMaW1ibGVUcmVlTm9kZSwgVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcm9vdC90cmVlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQnJhbmNoIH0gZnJvbSBcIi4uL0JyYW5jaFwiO1xyXG5pbXBvcnQgeyBpc0RyYWdnaW5nQWxsb3dlZCwgaXNOZXN0aW5nQWxsb3dlZCB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QsIHNraXBVbnRpbCwgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZ2xvYmFsLWV2ZW50cy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwibGltYmxlLXRyZWUtbm9kZVwiLFxyXG4gICB0ZW1wbGF0ZVVybDogXCIuL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgc3R5bGVVcmxzOiBbXCIuL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgIEBJbnB1dCgpIGJyYW5jaDogQnJhbmNoPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgIEBWaWV3Q2hpbGQoXCJub2RlSG9zdFwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcHJpdmF0ZSBub2RlSG9zdDpcclxuICAgICAgfCBWaWV3Q29udGFpbmVyUmVmXHJcbiAgICAgIHwgdW5kZWZpbmVkO1xyXG4gICBAVmlld0NoaWxkKFwiZHJvcFpvbmVBYm92ZVwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICAgcHJpdmF0ZSBkcm9wWm9uZUFib3ZlOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG4gICBAVmlld0NoaWxkKFwiZHJvcFpvbmVCZWxvd1wiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICAgcHJpdmF0ZSBkcm9wWm9uZUJlbG93OiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG4gICBwcml2YXRlIGRyb3Bab25lSW5zaWRlOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG4gICBAVmlld0NoaWxkKFwiY2hpbGRyZW5cIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHByaXZhdGUgY2hpbGRyZW46XHJcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImRyYWdnYWJsZURpdlwiLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcHJpdmF0ZSBkcmFnZ2FibGVEaXY6XHJcbiAgICAgIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cclxuICAgICAgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRDcmVhdG9yU2VydmljZTogQ29tcG9uZW50Q3JlYXRvclNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdTdGF0ZVNlcnZpY2U6IERyYWdTdGF0ZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVTZXJ2aWNlOiBEcm9wWm9uZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEV2ZW50c1NlcnZpY2U6IEdsb2JhbEV2ZW50c1NlcnZpY2VcclxuICAgKSB7fVxyXG5cclxuICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyRHJvcFpvbmVzKCk7XHJcbiAgICAgIHRoaXMucmVuZGVyU2VsZigpO1xyXG4gICAgICB0aGlzLnJlbmRlckNoaWxkcmVuKCk7XHJcbiAgICAgIHRoaXMuY2hlY2tGb3JIYW5kbGUoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnc3RhcnRIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIgPT09IG51bGwgfHwgdGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcnVuIGRyYWdzdGFydEhhbmRsZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmIChkcmFnZ2VkRWxlbWVudC5wYXJlbnRFbGVtZW50Py50YWdOYW1lICE9PSBcIkxJTUJMRS1UUkVFLU5PREVcIikge1xyXG4gICAgICAgICAvL0Rvbid0IGRyYWcgc3R1ZmYgdGhhdCBpc24ndCBwYXJ0IG9mIHRoZSB0cmVlXHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IFwibW92ZVwiO1xyXG4gICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZHJhZ2dpbmcodGhpcy5icmFuY2gpO1xyXG4gICAgICAvL1dlIGhhdmUgdG8gdXNlIGEgc2V0VGltZW91dCBkdWUgdG8gYSBidWcgaW4gY2hyb21lOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjA3MzM4NzAvODc5NjY1MVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgZHJhZ2dlZEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImRyYWdnaW5nXCIpO1xyXG4gICAgICAgICBpZiAodGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3Qgc2hvdyBzdXJyb3VuZGluZyBkcm9wIHpvbmVzXCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuYnJhbmNoLmdldFBhcmVudCgpO1xyXG4gICAgICAgICBsZXQgcGFyZW50RGF0YTogTGltYmxlVHJlZU5vZGU7XHJcbiAgICAgICAgIGxldCBwYXJlbnROZXN0aW5nQWxsb3dlZCA9IHRydWU7XHJcbiAgICAgICAgIGlmIChwYXJlbnQ/LmRhdGEgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcGFyZW50RGF0YSA9IHBhcmVudD8uZGF0YSBhcyBMaW1ibGVUcmVlTm9kZTtcclxuICAgICAgICAgICAgcGFyZW50TmVzdGluZ0FsbG93ZWQgPSBpc05lc3RpbmdBbGxvd2VkKFxyXG4gICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLFxyXG4gICAgICAgICAgICAgICBwYXJlbnREYXRhXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgaWYgKHRoaXMuZHJvcFpvbmVBYm92ZSAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE5lc3RpbmdBbGxvd2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnNob3dEcm9wWm9uZUZhbWlseShcclxuICAgICAgICAgICAgICAgdGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKSxcclxuICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBqb2luRmFtaWxpZXM6IHRydWVcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZURhdGE/Lmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgICAgICAgICB0aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgLy9XZSBhcmUgZHJhZ2dpbmcgdGhlIG9ubHkgZWxlbWVudCBpbiB0aGUgdHJlZSwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIHBsYWNlaG9sZGVyIHN5c3RlbVxyXG4gICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnVzZVBsYWNlaG9sZGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyYWdlbmRIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBkcmFnZ2VkRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHJhZ2dpbmdcIik7XHJcbiAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBnZXQgY3VycmVudCBicmFuY2ggaW4gZHJhZ2VuZEhhbmRsZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpICE9PSBcImNhcHR1cmVkXCIpIHtcclxuICAgICAgICAgLy9XYXNuJ3QgZHJvcHBlZCBpbnRvIGEgdmFsaWQgdHJlZSwgc28gcmVzZXQgZm9yIG5leHQgZHJhZyBhbmRcclxuICAgICAgICAgLy9kb24ndCBkbyBhbnl0aGluZyBlbHNlLlxyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UucmVsZWFzZSgpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5jbGVhcigpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5yZXN0b3JlRmFtaWxpZXMoKTtcclxuICAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmVQbGFjZWhvbGRlcigpO1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLnN0YXRlJC5waXBlKHRha2UoMikpLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcclxuICAgICAgICAgaWYgKHN0YXRlID09PSBcImNhcHR1cmVkXCIgJiYgdGhpcy5icmFuY2ggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnJlbW92ZSh0aGlzLmJyYW5jaCk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5yZWxlYXNlKCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnb3ZlckhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWxFdmVudHNTZXJ2aWNlLnNjcm9sbGluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZ2V0IGN1cnJlbnQgYnJhbmNoIGR1cmluZyBkcmFnb3ZlciBldmVudFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzb3VyY2VCcmFuY2ggPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0RGF0YSgpO1xyXG4gICAgICBpZiAoc291cmNlQnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgLy9UaGV5IG1pZ2h0IGJlIGRyYWdnaW5nIHNvbWV0aGluZyB0aGF0IGlzbid0IGEgbm9kZS4gSnVzdCBpZ25vcmUgaXQuXHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvL0lmIHRyeWluZyB0byBkcm9wIG9uIHNlbGYsIHJldHVybi5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICBzb3VyY2VCcmFuY2ggPT09IHRoaXMuYnJhbmNoIHx8XHJcbiAgICAgICAgIHRoaXMuYnJhbmNoLmdldEFuY2VzdG9ycygpLmluY2x1ZGVzKHNvdXJjZUJyYW5jaClcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZ2V0UGxhY2Vob2xkZXIoKSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQWJvdmUgIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICAgLy9JZiBwbGFjZWhvbGRlciBzeXN0ZW0gaXMgYWN0aXZlLCB0aGVuIGFjdGl2YXRlIHRoZSBvbmx5IGV4aXN0aW5nIGRyb3Agem9uZVxyXG4gICAgICAgICAvL2FuZCBza2lwIHRoZSByZXN0IG9mIHRoZSBsb2dpYyBpbiB0aGlzIGZ1bmN0aW9uXHJcbiAgICAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlcyA9IFsuLi50aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpXTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc2hvd0Ryb3Bab25lRmFtaWx5KGRyb3BDb29yZGluYXRlcyk7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCB0b3BMaW5lID0gdGFyZ2V0Lm9mZnNldEhlaWdodCAvIDM7IC8vYW4gaW1hZ2luYXJ5IGxpbmUgMS8zIG9mIHRoZSB3YXkgZG93biBmcm9tIHRoZSB0b3Agb2YgdGhlIGVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGJvdHRvbUxpbmUgPSB0b3BMaW5lICogMjsgLy9hbiBpbWFnaW5hcnkgbGluZSAxLzMgb2YgdGhlIHdheSB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuYnJhbmNoLmdldFBhcmVudCgpO1xyXG4gICAgICBsZXQgcGFyZW50RGF0YTogTGltYmxlVHJlZU5vZGU7XHJcbiAgICAgIGxldCBwYXJlbnROZXN0aW5nQWxsb3dlZCA9IHRydWU7XHJcbiAgICAgIGlmIChwYXJlbnQ/LmRhdGEgIT09IG51bGwpIHtcclxuICAgICAgICAgcGFyZW50RGF0YSA9IHBhcmVudD8uZGF0YSBhcyBMaW1ibGVUcmVlTm9kZTtcclxuICAgICAgICAgcGFyZW50TmVzdGluZ0FsbG93ZWQgPSBpc05lc3RpbmdBbGxvd2VkKFxyXG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLFxyXG4gICAgICAgICAgICBwYXJlbnREYXRhXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICBldmVudC5vZmZzZXRZIDwgdG9wTGluZSAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQWJvdmUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZSgpPy5kYXRhLmNvbnRhaW5lciAhPT1cclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlICYmXHJcbiAgICAgICAgIHBhcmVudE5lc3RpbmdBbGxvd2VkXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXMgPSBbLi4udGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnNob3dEcm9wWm9uZUZhbWlseShkcm9wQ29vcmRpbmF0ZXMsIHtcclxuICAgICAgICAgICAgYWN0aXZhdGVMb3dlc3RJbnN0ZWFkT2ZGb3VuZGVyOiB0cnVlXHJcbiAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICBldmVudC5vZmZzZXRZIDwgYm90dG9tTGluZSAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuZ2V0QWN0aXZlRHJvcFpvbmUoKT8uZGF0YS5jb250YWluZXIgIT09XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlcyA9IFsuLi50aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpXTtcclxuICAgICAgICAgZHJvcENvb3JkaW5hdGVzLnB1c2goMCk7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnNob3dEcm9wWm9uZUZhbWlseShkcm9wQ29vcmRpbmF0ZXMpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICBldmVudC5vZmZzZXRZID49IGJvdHRvbUxpbmUgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUJlbG93ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuZ2V0QWN0aXZlRHJvcFpvbmUoKT8uZGF0YS5jb250YWluZXIgIT09XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVCZWxvdyAmJlxyXG4gICAgICAgICB0aGlzLmJyYW5jaC5nZXRDaGlsZHJlbigpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgICBwYXJlbnROZXN0aW5nQWxsb3dlZFxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc3QgZHJvcENvb3JkaW5hdGVzID0gWy4uLnRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCldO1xyXG4gICAgICAgICBkcm9wQ29vcmRpbmF0ZXNbZHJvcENvb3JkaW5hdGVzLmxlbmd0aCAtIDFdKys7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnNob3dEcm9wWm9uZUZhbWlseShkcm9wQ29vcmRpbmF0ZXMpO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcmVuZGVyU2VsZigpIHtcclxuICAgICAgaWYgKHRoaXMubm9kZUhvc3QgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZW5kZXIgdHJlZSBub2RlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmJyYW5jaC5kYXRhLmNvbXBvbmVudDtcclxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmRlZmF1bHRDb21wb25lbnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImxpbWJsZVRyZWUgcmVxdWlyZXMgYSBjb21wb25lbnQgdG8gcmVuZGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PGFueT4oXHJcbiAgICAgICAgIGNvbXBvbmVudC5jbGFzcyxcclxuICAgICAgICAgdGhpcy5ub2RlSG9zdFxyXG4gICAgICApO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uubm9kZURhdGEgPSB0aGlzLmJyYW5jaC5kYXRhO1xyXG4gICAgICBmb3IgKGNvbnN0IGJpbmRpbmcgaW4gY29tcG9uZW50LmJpbmRpbmdzKSB7XHJcbiAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVtiaW5kaW5nXSA9IGNvbXBvbmVudC5iaW5kaW5nc1tiaW5kaW5nXTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlbmRlckNoaWxkcmVuKCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zPy5saXN0TW9kZSAhPT0gdHJ1ZSAmJlxyXG4gICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKCkgIT09IHRydWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImJyYW5jaCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgbmV3QnJhbmNoQ29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQ8TGltYmxlVHJlZUJyYW5jaENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5cclxuICAgICAgICAgKTtcclxuICAgICAgICAgbmV3QnJhbmNoQ29tcG9uZW50Lmluc3RhbmNlLmJyYW5jaCA9IHRoaXMuYnJhbmNoO1xyXG4gICAgICAgICBpZiAoaXNOZXN0aW5nQWxsb3dlZCh0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLCB0aGlzLmJyYW5jaC5kYXRhKSkge1xyXG4gICAgICAgICAgICBuZXdCcmFuY2hDb21wb25lbnQuaW5zdGFuY2UuZHJvcFpvbmVJbnNpZGUkLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgKGRyb3Bab25lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgZHJvcFpvbmUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zPy5hbGxvd0RyYWdnaW5nICE9PSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSA9IGRyb3Bab25lO1xyXG4gICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcmVnaXN0ZXIgaW5uZXIgZHJvcCB6b25lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlc0luc2lkZSA9IHRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgIGRyb3BDb29yZGluYXRlc0luc2lkZS5wdXNoKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5hZGREcm9wWm9uZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHJvcENvb3JkaW5hdGVzSW5zaWRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlXHJcbiAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSByZWdpc3RlckRyb3Bab25lcygpIHtcclxuICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmFsbG93RHJhZ2dpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVBYm92ZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVCZWxvdyA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byByZWdpc3RlciBkcm9wIHpvbmVzXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuYnJhbmNoLmdldFBhcmVudCgpO1xyXG4gICAgICBsZXQgcGFyZW50RGF0YTogTGltYmxlVHJlZU5vZGU7XHJcbiAgICAgIGlmIChwYXJlbnQ/LmRhdGEgIT09IG51bGwpIHtcclxuICAgICAgICAgcGFyZW50RGF0YSA9IHBhcmVudD8uZGF0YSBhcyBMaW1ibGVUcmVlTm9kZTtcclxuICAgICAgICAgaWYgKCFpc05lc3RpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHBhcmVudERhdGEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlc0Fib3ZlID0gWy4uLmN1cnJlbnRDb29yZGluYXRlc107XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmFkZERyb3Bab25lKFxyXG4gICAgICAgICBkcm9wQ29vcmRpbmF0ZXNBYm92ZSxcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKCkgPT09IHRydWUpIHtcclxuICAgICAgICAgLy9Pbmx5IHJlZ2lzdGVyIG9uZSBkcm9wIHpvbmUgaWYgdGhlIHBsYWNlaG9sZGVyIHN5c3RlbSBpcyBhY3RpdmVcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlc0JlbG93ID0gWy4uLmN1cnJlbnRDb29yZGluYXRlc107XHJcbiAgICAgIGRyb3BDb29yZGluYXRlc0JlbG93W2Ryb3BDb29yZGluYXRlc0JlbG93Lmxlbmd0aCAtIDFdKys7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmFkZERyb3Bab25lKFxyXG4gICAgICAgICBkcm9wQ29vcmRpbmF0ZXNCZWxvdyxcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUJlbG93XHJcbiAgICAgICk7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgY2hlY2tGb3JIYW5kbGUoKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLmRyYWdnYWJsZURpdiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kcmFnZ2FibGVEaXYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgaGFuZGxlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmxpbWJsZS10cmVlLWhhbmRsZVwiKTtcclxuICAgICAgaWYgKCFpc0RyYWdnaW5nQWxsb3dlZCh0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLCB0aGlzLmJyYW5jaD8uZGF0YSkpIHtcclxuICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgfSBlbHNlIGlmIChoYW5kbGUgPT09IG51bGwpIHtcclxuICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZHJhZ2dhYmxlXCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICAgICAgLy9Gb3Igc29tZSByZWFzb24gbW91c2V1cCBkb2Vzbid0IGZpcmUgYWZ0ZXIgYSBkcmFnLCBzbyB3ZSB1c2UgdGhpcyBvYnNlcnZhYmxlIHNlcXVlbmNlIGluc3RlYWQuXHJcbiAgICAgICAgICAgIGNvbnN0IGRyYWdnaW5nID0gdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLnN0YXRlJC5waXBlKFxyXG4gICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gXCJkcmFnZ2luZ1wiKSxcclxuICAgICAgICAgICAgICAgZmlyc3QoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2Uuc3RhdGUkXHJcbiAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICBza2lwVW50aWwoZHJhZ2dpbmcpLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gXCJpZGxlXCIpLFxyXG4gICAgICAgICAgICAgICAgICBmaXJzdCgpXHJcbiAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZHJhZ2dhYmxlXCIsIFwiZmFsc2VcIik7XHJcbiAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlICNkcm9wWm9uZUFib3ZlPjwvbmctdGVtcGxhdGU+XHJcbjxkaXZcclxuICAgKGRyYWdzdGFydCk9XCJkcmFnc3RhcnRIYW5kbGVyKCRldmVudClcIlxyXG4gICAoZHJhZ2VuZCk9XCJkcmFnZW5kSGFuZGxlcigkZXZlbnQpXCJcclxuICAgY2xhc3M9XCJsaW1ibGUtcGFyZW50LWNvbnRhaW5lclwiXHJcbiAgICNkcmFnZ2FibGVEaXZcclxuPlxyXG4gICA8ZGl2IChkcmFnb3Zlcik9XCJkcmFnb3ZlckhhbmRsZXIoJGV2ZW50KVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vZGVIb3N0PjwvbmctdGVtcGxhdGU+XHJcbiAgIDwvZGl2PlxyXG4gICA8bmctdGVtcGxhdGUgI2NoaWxkcmVuPjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI2Ryb3Bab25lQmVsb3c+PC9uZy10ZW1wbGF0ZT5cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0osU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUkvRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVFoRSxNQUFNLE9BQU8sdUJBQXVCO0lBaUJqQyxZQUNvQix1QkFBZ0QsRUFDaEQsaUJBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxXQUF3QixFQUN4QixtQkFBd0M7UUFMeEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7SUFDekQsQ0FBQztJQUVKLGVBQWU7UUFDWixJQUFJLENBQUMsaUJBQWlCLEVBQUUs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QkFBdUI7K0JBRUYsZ0JBQWdCOytCQUdYLGdCQUFnQjsrQkFFaEIsZ0JBQWdCOytCQUdyQixnQkFBZ0I7K0JBR1osVUFBVTs7Ozs7Ozs7O1FDckNoRCx5SEFBMEM7UUFDMUMsaUNBS0M7UUFKRSwrR0FBYSw0QkFBd0IsSUFBQyw4RkFDM0IsMEJBQXNCLElBREs7UUFLdEMsOEJBR0M7UUFGRSx5SUFBMEIsMkJBQXVCLElBQUM7UUFHbEQseUhBQXFDO1FBQ3hDLGlCQUFNO1FBQ04seUhBQXFDO1FBQ3hDLGlCQUFNO1FBQ04seUhBQTBDOztRQU5wQyxlQUE0QjtRQUE1QiwwQ0FBNEI7O3VGRGVyQix1QkFBdUI7Y0FMbkMsU0FBUztlQUFDO2dCQUNSLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLFdBQVcsRUFBRSxtQ0FBbUM7Z0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2FBQ2xEO21PQUVXLE1BQU07a0JBQWQsS0FBSztZQUNxRCxRQUFRO2tCQUFsRSxTQUFTO21CQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUl6QyxhQUFhO2tCQURwQixTQUFTO21CQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUc5QyxhQUFhO2tCQURwQixTQUFTO21CQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUdLLFFBQVE7a0JBQWxFLFNBQVM7bUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBR1EsWUFBWTtrQkFBcEUsU0FBUzttQkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgRWxlbWVudFJlZixcclxuICAgSW5wdXQsXHJcbiAgIFZpZXdDaGlsZCxcclxuICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcm9vdC9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50IH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZU5vZGUsIFRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJyYW5jaCB9IGZyb20gXCIuLi9CcmFuY2hcIjtcclxuaW1wb3J0IHsgaXNEcmFnZ2luZ0FsbG93ZWQsIGlzTmVzdGluZ0FsbG93ZWQgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBza2lwVW50aWwsIHRha2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgR2xvYmFsRXZlbnRzU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2dsb2JhbC1ldmVudHMuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgIHNlbGVjdG9yOiBcImxpbWJsZS10cmVlLW5vZGVcIixcclxuICAgdGVtcGxhdGVVcmw6IFwiLi9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICBASW5wdXQoKSBicmFuY2g6IEJyYW5jaDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICBAVmlld0NoaWxkKFwibm9kZUhvc3RcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHByaXZhdGUgbm9kZUhvc3Q6XHJcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImRyb3Bab25lQWJvdmVcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIHByaXZhdGUgZHJvcFpvbmVBYm92ZTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImRyb3Bab25lQmVsb3dcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIHByaXZhdGUgZHJvcFpvbmVCZWxvdzogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSBkcm9wWm9uZUluc2lkZTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImNoaWxkcmVuXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwcml2YXRlIGNoaWxkcmVuOlxyXG4gICAgICB8IFZpZXdDb250YWluZXJSZWZcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgIEBWaWV3Q2hpbGQoXCJkcmFnZ2FibGVEaXZcIiwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgZHJhZ2dhYmxlRGl2OlxyXG4gICAgICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XHJcbiAgICAgIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50Q3JlYXRvclNlcnZpY2U6IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcmFnU3RhdGVTZXJ2aWNlOiBEcmFnU3RhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHRyZWVTZXJ2aWNlOiBUcmVlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxFdmVudHNTZXJ2aWNlOiBHbG9iYWxFdmVudHNTZXJ2aWNlXHJcbiAgICkge31cclxuXHJcbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgdGhpcy5yZWdpc3RlckRyb3Bab25lcygpO1xyXG4gICAgICB0aGlzLnJlbmRlclNlbGYoKTtcclxuICAgICAgdGhpcy5yZW5kZXJDaGlsZHJlbigpO1xyXG4gICAgICB0aGlzLmNoZWNrRm9ySGFuZGxlKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ3N0YXJ0SGFuZGxlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyID09PSBudWxsIHx8IHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHJ1biBkcmFnc3RhcnRIYW5kbGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZHJhZ2dlZEVsZW1lbnQucGFyZW50RWxlbWVudD8udGFnTmFtZSAhPT0gXCJMSU1CTEUtVFJFRS1OT0RFXCIpIHtcclxuICAgICAgICAgLy9Eb24ndCBkcmFnIHN0dWZmIHRoYXQgaXNuJ3QgcGFydCBvZiB0aGUgdHJlZVxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBcIm1vdmVcIjtcclxuICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmRyYWdnaW5nKHRoaXMuYnJhbmNoKTtcclxuICAgICAgLy9XZSBoYXZlIHRvIHVzZSBhIHNldFRpbWVvdXQgZHVlIHRvIGEgYnVnIGluIGNocm9tZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIwNzMzODcwLzg3OTY2NTFcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgIGRyYWdnZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkcmFnZ2luZ1wiKTtcclxuICAgICAgICAgaWYgKHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IHNob3cgc3Vycm91bmRpbmcgZHJvcCB6b25lc1wiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmJyYW5jaC5nZXRQYXJlbnQoKTtcclxuICAgICAgICAgbGV0IHBhcmVudERhdGE6IExpbWJsZVRyZWVOb2RlO1xyXG4gICAgICAgICBsZXQgcGFyZW50TmVzdGluZ0FsbG93ZWQgPSB0cnVlO1xyXG4gICAgICAgICBpZiAocGFyZW50Py5kYXRhICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHBhcmVudERhdGEgPSBwYXJlbnQ/LmRhdGEgYXMgTGltYmxlVHJlZU5vZGU7XHJcbiAgICAgICAgICAgIHBhcmVudE5lc3RpbmdBbGxvd2VkID0gaXNOZXN0aW5nQWxsb3dlZChcclxuICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgcGFyZW50RGF0YVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGlmICh0aGlzLmRyb3Bab25lQWJvdmUgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnROZXN0aW5nQWxsb3dlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5zaG93RHJvcFpvbmVGYW1pbHkoXHJcbiAgICAgICAgICAgICAgIHRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCksXHJcbiAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgam9pbkZhbWlsaWVzOiB0cnVlXHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVEYXRhPy5sZW5ndGggPT09IDEgJiZcclxuICAgICAgICAgICAgICAgdGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKS5sZW5ndGggPT09IDFcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgIC8vV2UgYXJlIGRyYWdnaW5nIHRoZSBvbmx5IGVsZW1lbnQgaW4gdGhlIHRyZWUsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBwbGFjZWhvbGRlciBzeXN0ZW1cclxuICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS51c2VQbGFjZWhvbGRlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnZW5kSGFuZGxlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBjb25zdCBkcmFnZ2VkRWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgZHJhZ2dlZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImRyYWdnaW5nXCIpO1xyXG4gICAgICBpZiAodGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGN1cnJlbnQgYnJhbmNoIGluIGRyYWdlbmRIYW5kbGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0U3RhdGUoKSAhPT0gXCJjYXB0dXJlZFwiKSB7XHJcbiAgICAgICAgIC8vV2Fzbid0IGRyb3BwZWQgaW50byBhIHZhbGlkIHRyZWUsIHNvIHJlc2V0IGZvciBuZXh0IGRyYWcgYW5kXHJcbiAgICAgICAgIC8vZG9uJ3QgZG8gYW55dGhpbmcgZWxzZS5cclxuICAgICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLnJlbGVhc2UoKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UucmVzdG9yZUZhbWlsaWVzKCk7XHJcbiAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UucmVtb3ZlUGxhY2Vob2xkZXIoKTtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5zdGF0ZSQucGlwZSh0YWtlKDIpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgIGlmIChzdGF0ZSA9PT0gXCJjYXB0dXJlZFwiICYmIHRoaXMuYnJhbmNoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmUodGhpcy5icmFuY2gpO1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UucmVsZWFzZSgpO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ292ZXJIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsRXZlbnRzU2VydmljZS5zY3JvbGxpbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGdldCBjdXJyZW50IGJyYW5jaCBkdXJpbmcgZHJhZ292ZXIgZXZlbnRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc291cmNlQnJhbmNoID0gdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldERhdGEoKTtcclxuICAgICAgaWYgKHNvdXJjZUJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIC8vVGhleSBtaWdodCBiZSBkcmFnZ2luZyBzb21ldGhpbmcgdGhhdCBpc24ndCBhIG5vZGUuIEp1c3QgaWdub3JlIGl0LlxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy9JZiB0cnlpbmcgdG8gZHJvcCBvbiBzZWxmLCByZXR1cm4uXHJcbiAgICAgIGlmIChcclxuICAgICAgICAgc291cmNlQnJhbmNoID09PSB0aGlzLmJyYW5jaCB8fFxyXG4gICAgICAgICB0aGlzLmJyYW5jaC5nZXRBbmNlc3RvcnMoKS5pbmNsdWRlcyhzb3VyY2VCcmFuY2gpXHJcbiAgICAgICkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKCkgPT09IHRydWUgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIC8vSWYgcGxhY2Vob2xkZXIgc3lzdGVtIGlzIGFjdGl2ZSwgdGhlbiBhY3RpdmF0ZSB0aGUgb25seSBleGlzdGluZyBkcm9wIHpvbmVcclxuICAgICAgICAgLy9hbmQgc2tpcCB0aGUgcmVzdCBvZiB0aGUgbG9naWMgaW4gdGhpcyBmdW5jdGlvblxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5zaG93RHJvcFpvbmVGYW1pbHkoWzBdKTtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHRvcExpbmUgPSB0YXJnZXQub2Zmc2V0SGVpZ2h0IC8gMzsgLy9hbiBpbWFnaW5hcnkgbGluZSAxLzMgb2YgdGhlIHdheSBkb3duIGZyb20gdGhlIHRvcCBvZiB0aGUgZWxlbWVudDtcclxuICAgICAgY29uc3QgYm90dG9tTGluZSA9IHRvcExpbmUgKiAyOyAvL2FuIGltYWdpbmFyeSBsaW5lIDEvMyBvZiB0aGUgd2F5IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgZWxlbWVudDtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5icmFuY2guZ2V0UGFyZW50KCk7XHJcbiAgICAgIGxldCBwYXJlbnREYXRhOiBMaW1ibGVUcmVlTm9kZTtcclxuICAgICAgbGV0IHBhcmVudE5lc3RpbmdBbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgaWYgKHBhcmVudD8uZGF0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgICBwYXJlbnREYXRhID0gcGFyZW50Py5kYXRhIGFzIExpbWJsZVRyZWVOb2RlO1xyXG4gICAgICAgICBwYXJlbnROZXN0aW5nQWxsb3dlZCA9IGlzTmVzdGluZ0FsbG93ZWQoXHJcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsXHJcbiAgICAgICAgICAgIHBhcmVudERhdGFcclxuICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIGV2ZW50Lm9mZnNldFkgPCB0b3BMaW5lICYmXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVBYm92ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmdldEFjdGl2ZURyb3Bab25lKCk/LmRhdGEuY29udGFpbmVyICE9PVxyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lQWJvdmUgJiZcclxuICAgICAgICAgcGFyZW50TmVzdGluZ0FsbG93ZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlcyA9IFsuLi50aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpXTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc2hvd0Ryb3Bab25lRmFtaWx5KGRyb3BDb29yZGluYXRlcywge1xyXG4gICAgICAgICAgICBhY3RpdmF0ZUxvd2VzdEluc3RlYWRPZkZvdW5kZXI6IHRydWVcclxuICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIGV2ZW50Lm9mZnNldFkgPCBib3R0b21MaW5lICYmXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZSgpPy5kYXRhLmNvbnRhaW5lciAhPT1cclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZVxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc3QgZHJvcENvb3JkaW5hdGVzID0gWy4uLnRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCldO1xyXG4gICAgICAgICBkcm9wQ29vcmRpbmF0ZXMucHVzaCgwKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc2hvd0Ryb3Bab25lRmFtaWx5KGRyb3BDb29yZGluYXRlcyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIGV2ZW50Lm9mZnNldFkgPj0gYm90dG9tTGluZSAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQmVsb3cgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZSgpPy5kYXRhLmNvbnRhaW5lciAhPT1cclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUJlbG93ICYmXHJcbiAgICAgICAgIHRoaXMuYnJhbmNoLmdldENoaWxkcmVuKCkubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgIHBhcmVudE5lc3RpbmdBbGxvd2VkXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXMgPSBbLi4udGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIGRyb3BDb29yZGluYXRlc1tkcm9wQ29vcmRpbmF0ZXMubGVuZ3RoIC0gMV0rKztcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc2hvd0Ryb3Bab25lRmFtaWx5KGRyb3BDb29yZGluYXRlcyk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSByZW5kZXJTZWxmKCkge1xyXG4gICAgICBpZiAodGhpcy5ub2RlSG9zdCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlbmRlciB0cmVlIG5vZGVcIik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYnJhbmNoLmRhdGEuY29tcG9uZW50O1xyXG4gICAgICBpZiAoY29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgY29tcG9uZW50ID0gdGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucz8uZGVmYXVsdENvbXBvbmVudDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibGltYmxlVHJlZSByZXF1aXJlcyBhIGNvbXBvbmVudCB0byByZW5kZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQ8YW55PihcclxuICAgICAgICAgY29tcG9uZW50LmNsYXNzLFxyXG4gICAgICAgICB0aGlzLm5vZGVIb3N0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ub2RlRGF0YSA9IHRoaXMuYnJhbmNoLmRhdGE7XHJcbiAgICAgIGZvciAoY29uc3QgYmluZGluZyBpbiBjb21wb25lbnQuYmluZGluZ3MpIHtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW2JpbmRpbmddID0gY29tcG9uZW50LmJpbmRpbmdzW2JpbmRpbmddO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcmVuZGVyQ2hpbGRyZW4oKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/Lmxpc3RNb2RlICE9PSB0cnVlICYmXHJcbiAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZ2V0UGxhY2Vob2xkZXIoKSAhPT0gdHJ1ZVxyXG4gICAgICApIHtcclxuICAgICAgICAgaWYgKHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYnJhbmNoIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBuZXdCcmFuY2hDb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50PihcclxuICAgICAgICAgICAgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlblxyXG4gICAgICAgICApO1xyXG4gICAgICAgICBuZXdCcmFuY2hDb21wb25lbnQuaW5zdGFuY2UuYnJhbmNoID0gdGhpcy5icmFuY2g7XHJcbiAgICAgICAgIGlmIChpc05lc3RpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHRoaXMuYnJhbmNoLmRhdGEpKSB7XHJcbiAgICAgICAgICAgIG5ld0JyYW5jaENvbXBvbmVudC5pbnN0YW5jZS5kcm9wWm9uZUluc2lkZSQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAoZHJvcFpvbmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICBkcm9wWm9uZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmFsbG93RHJhZ2dpbmcgIT09IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlID0gZHJvcFpvbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byByZWdpc3RlciBpbm5lciBkcm9wIHpvbmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJvcENvb3JkaW5hdGVzSW5zaWRlID0gdGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgZHJvcENvb3JkaW5hdGVzSW5zaWRlLnB1c2goMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmFkZERyb3Bab25lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wQ29vcmRpbmF0ZXNJbnNpZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGVcclxuICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlZ2lzdGVyRHJvcFpvbmVzKCkge1xyXG4gICAgICBpZiAodGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucz8uYWxsb3dEcmFnZ2luZyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUJlbG93ID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgdGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGRyb3Agem9uZXNcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5icmFuY2guZ2V0UGFyZW50KCk7XHJcbiAgICAgIGxldCBwYXJlbnREYXRhOiBMaW1ibGVUcmVlTm9kZTtcclxuICAgICAgaWYgKHBhcmVudD8uZGF0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgICBwYXJlbnREYXRhID0gcGFyZW50Py5kYXRhIGFzIExpbWJsZVRyZWVOb2RlO1xyXG4gICAgICAgICBpZiAoIWlzTmVzdGluZ0FsbG93ZWQodGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucywgcGFyZW50RGF0YSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgY29uc3QgZHJvcENvb3JkaW5hdGVzQWJvdmUgPSBbLi4uY3VycmVudENvb3JkaW5hdGVzXTtcclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuYWRkRHJvcFpvbmUoXHJcbiAgICAgICAgIGRyb3BDb29yZGluYXRlc0Fib3ZlLFxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQWJvdmVcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UuZ2V0UGxhY2Vob2xkZXIoKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAvL09ubHkgcmVnaXN0ZXIgb25lIGRyb3Agem9uZSBpZiB0aGUgcGxhY2Vob2xkZXIgc3lzdGVtIGlzIGFjdGl2ZVxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJvcENvb3JkaW5hdGVzQmVsb3cgPSBbLi4uY3VycmVudENvb3JkaW5hdGVzXTtcclxuICAgICAgZHJvcENvb3JkaW5hdGVzQmVsb3dbZHJvcENvb3JkaW5hdGVzQmVsb3cubGVuZ3RoIC0gMV0rKztcclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuYWRkRHJvcFpvbmUoXHJcbiAgICAgICAgIGRyb3BDb29yZGluYXRlc0JlbG93LFxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQmVsb3dcclxuICAgICAgKTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBjaGVja0ZvckhhbmRsZSgpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMuZHJhZ2dhYmxlRGl2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRyYWdnYWJsZURpdi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCBoYW5kbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubGltYmxlLXRyZWUtaGFuZGxlXCIpO1xyXG4gICAgICBpZiAoIWlzRHJhZ2dpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHRoaXMuYnJhbmNoPy5kYXRhKSkge1xyXG4gICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCBcImZhbHNlXCIpO1xyXG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCBcInRydWVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgICAgICAvL0ZvciBzb21lIHJlYXNvbiBtb3VzZXVwIGRvZXNuJ3QgZmlyZSBhZnRlciBhIGRyYWcsIHNvIHdlIHVzZSB0aGlzIG9ic2VydmFibGUgc2VxdWVuY2UgaW5zdGVhZC5cclxuICAgICAgICAgICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2Uuc3RhdGUkLnBpcGUoXHJcbiAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlID09PSBcImRyYWdnaW5nXCIpLFxyXG4gICAgICAgICAgICAgICBmaXJzdCgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5zdGF0ZSRcclxuICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHNraXBVbnRpbChkcmFnZ2luZyksXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlID09PSBcImlkbGVcIiksXHJcbiAgICAgICAgICAgICAgICAgIGZpcnN0KClcclxuICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgIH1cclxufVxyXG4iLCI8bmctdGVtcGxhdGUgI2Ryb3Bab25lQWJvdmU+PC9uZy10ZW1wbGF0ZT5cclxuPGRpdlxyXG4gICAoZHJhZ3N0YXJ0KT1cImRyYWdzdGFydEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgIChkcmFnZW5kKT1cImRyYWdlbmRIYW5kbGVyKCRldmVudClcIlxyXG4gICBjbGFzcz1cImxpbWJsZS1wYXJlbnQtY29udGFpbmVyXCJcclxuICAgI2RyYWdnYWJsZURpdlxyXG4+XHJcbiAgIDxkaXZcclxuICAgICAgKGRyYWdvdmVyTm9DaGFuZ2VEZXRlY3QpPVwiZHJhZ292ZXJIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICBbZHJhZ292ZXJFdmVudFRocm90dGxlXT1cIjEwXCJcclxuICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vZGVIb3N0PjwvbmctdGVtcGxhdGU+XHJcbiAgIDwvZGl2PlxyXG4gICA8bmctdGVtcGxhdGUgI2NoaWxkcmVuPjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI2Ryb3Bab25lQmVsb3c+PC9uZy10ZW1wbGF0ZT5cclxuIl19

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

import { Injectable } from "@angular/core";
import { Injectable, NgZone } from "@angular/core";
import { DropZoneComponent } from "../drop-zone/drop-zone.component";

@@ -56,6 +56,4 @@ import { arraysAreEqual } from "../util";

for (const dropZoneInfo of this.dropZoneStack) {
if (!this.dropZoneInventory.find((zone) => arraysAreEqual(zone.getCoordinates(), dropZoneInfo.coordinates))) {
this.dropZoneInventory.push(dropZoneInfo.dropZone);
this.addToTree(dropZoneInfo.dropZone, dropZoneInfo.coordinates);
}
this.dropZoneInventory.push(dropZoneInfo.dropZone);
this.addToTree(dropZoneInfo.dropZone, dropZoneInfo.coordinates);
}

@@ -192,5 +190,2 @@ this.dropZoneStack.length = 0;

}
if (activeDropZone.data.componentRef) {
activeDropZone.data.componentRef.instance.active = false;
}
const newActiveDropZone = this.treeWithDropZones.findByCoordinates(newActiveDropZoneCoordinates, true);

@@ -279,3 +274,9 @@ if (newActiveDropZone === undefined) {

setActiveDropZone(dropZone) {
var _a;
var _a, _b;
if ((_a = this.activeDropZone) === null || _a === void 0 ? void 0 : _a.data.componentRef) {
this.activeDropZone.data.componentRef.instance.active = false;
if (!NgZone.isInAngularZone()) {
this.activeDropZone.data.componentRef.changeDetectorRef.detectChanges();
}
}
this.activeDropZone = dropZone;

@@ -290,4 +291,7 @@ if (this.activeDropZone !== null &&

}
if ((_a = this.activeDropZone) === null || _a === void 0 ? void 0 : _a.data.componentRef) {
if ((_b = this.activeDropZone) === null || _b === void 0 ? void 0 : _b.data.componentRef) {
this.activeDropZone.data.componentRef.instance.active = true;
if (!NgZone.isInAngularZone()) {
this.activeDropZone.data.componentRef.changeDetectorRef.detectChanges();
}
}

@@ -311,2 +315,8 @@ }

dropZone.data.componentRef = componentRef;
//We use this zone check in case we are running outside of angular, which happens
//often due to the way we catch dragover events using the DragoverNoChangeDetect
//directive
if (!NgZone.isInAngularZone()) {
componentRef.changeDetectorRef.detectChanges();
}
return true;

@@ -341,2 +351,2 @@ }

}], function () { return [{ type: i1.DragStateService }, { type: i2.ComponentCreatorService }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBSzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBZ0IvQyxTQUFTLFVBQVUsQ0FBQyxPQUFpQixFQUFFLE9BQWlCO0lBQ3JELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNaO0lBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDNUMsT0FBTyxDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUdELE1BQU0sT0FBTyxlQUFlO0lBZ0J6QixZQUNvQixnQkFBa0MsRUFDbEMsdUJBQWdEO1FBRGhELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUVqRSxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7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ZUFBZTtjQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQnJhbmNoLCBCcmFuY2hDb29yZGluYXRlcyB9IGZyb20gXCIuLi9CcmFuY2hcIjtcclxuaW1wb3J0IHsgRHJhZ1N0YXRlU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgdHlwZSB7IExpbWJsZVRyZWVOb2RlLCBQcm9jZXNzZWRPcHRpb25zIH0gZnJvbSBcIi4vdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuLi9kcm9wLXpvbmUvZHJvcC16b25lLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBhcnJheXNBcmVFcXVhbCB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IEhpZGRlbkJyYW5jaCB9IGZyb20gXCIuLi9IaWRkZW5CcmFuY2hcIjtcclxuXHJcbmludGVyZmFjZSBEcm9wWm9uZURhdGEge1xyXG4gICBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgIGZhbWlseT86IERyb3Bab25lRmFtaWx5O1xyXG4gICBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8RHJvcFpvbmVDb21wb25lbnQ+O1xyXG59XHJcblxyXG50eXBlIERyb3Bab25lID0gSGlkZGVuQnJhbmNoPERyb3Bab25lRGF0YT47XHJcblxyXG5pbnRlcmZhY2UgRHJvcFpvbmVGYW1pbHkge1xyXG4gICAvKiogVGhlIGRlZXBlc3QgbWVtYmVyIG9mIHRoZSBmYW1pbHkgKi9cclxuICAgZm91bmRlcjogRHJvcFpvbmU7XHJcbiAgIG1lbWJlcnM6IEFycmF5PERyb3Bab25lPjtcclxufVxyXG5cclxuZnVuY3Rpb24gc29ydEZhbWlseShtZW1iZXJBOiBEcm9wWm9uZSwgbWVtYmVyQjogRHJvcFpvbmUpIHtcclxuICAgY29uc3QgYUNvb3JkaW5hdGVzID0gbWVtYmVyQS5nZXRDb29yZGluYXRlcygpO1xyXG4gICBjb25zdCBiQ29vcmRpbmF0ZXMgPSBtZW1iZXJCLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgIGlmIChhQ29vcmRpbmF0ZXMubGVuZ3RoID4gYkNvb3JkaW5hdGVzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgIH1cclxuICAgaWYgKGFDb29yZGluYXRlcy5sZW5ndGggPCBiQ29vcmRpbmF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICB9XHJcbiAgIHJldHVybiAwO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEcm9wWm9uZVNlcnZpY2Uge1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU3RhY2s6IEFycmF5PHtcclxuICAgICAgZHJvcFpvbmU6IERyb3Bab25lO1xyXG4gICAgICBjb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXM7XHJcbiAgIH0+O1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lSW52ZW50b3J5OiBBcnJheTxEcm9wWm9uZT47XHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVGYW1pbGllczogQXJyYXk8RHJvcFpvbmVGYW1pbHk+O1xyXG4gICBwcml2YXRlIHZpc2libGVGYW1pbHk6IERyb3Bab25lRmFtaWx5IHwgbnVsbDtcclxuICAgcHJpdmF0ZSBhY3RpdmVEcm9wWm9uZTogRHJvcFpvbmUgfCBudWxsO1xyXG4gICBwcml2YXRlIHRyZWU6IEJyYW5jaDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICBwcml2YXRlIHRyZWVXaXRoRHJvcFpvbmVzOiBIaWRkZW5CcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSB0cmVlT3B0aW9uczogUHJvY2Vzc2VkT3B0aW9ucyB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSB0ZW1wRmFtaWxpZXM6XHJcbiAgICAgIHwgcmVhZG9ubHkgW0Ryb3Bab25lRmFtaWx5LCBEcm9wWm9uZUZhbWlseSB8IG51bGxdXHJcbiAgICAgIHwgcmVhZG9ubHkgW107XHJcblxyXG4gICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcmFnU3RhdGVTZXJ2aWNlOiBEcmFnU3RhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudENyZWF0b3JTZXJ2aWNlOiBDb21wb25lbnRDcmVhdG9yU2VydmljZVxyXG4gICApIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZVN0YWNrID0gW107XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkgPSBbXTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzID0gW107XHJcbiAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IG51bGw7XHJcbiAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlbXBGYW1pbGllcyA9IFtdO1xyXG4gICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKG51bGwpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgYWRkRHJvcFpvbmUoXHJcbiAgICAgIGNvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcyxcclxuICAgICAgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXHJcbiAgICk6IHZvaWQge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTdGFjay5maW5kKChyZWdpc3RlcmVkWm9uZSkgPT5cclxuICAgICAgICAgICAgYXJyYXlzQXJlRXF1YWwocmVnaXN0ZXJlZFpvbmUuY29vcmRpbmF0ZXMsIGNvb3JkaW5hdGVzKVxyXG4gICAgICAgICApICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkcm9wWm9uZSA9IG5ldyBIaWRkZW5CcmFuY2goeyBjb250YWluZXI6IGNvbnRhaW5lciB9KTtcclxuICAgICAgdGhpcy5kcm9wWm9uZVN0YWNrLnB1c2goeyBkcm9wWm9uZTogZHJvcFpvbmUsIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyB9KTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy52aXNpYmxlRmFtaWx5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHRoaXMudmlzaWJsZUZhbWlseS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIG1lbWJlci5kYXRhLmNvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN0b3JlRmFtaWxpZXMoKTtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVEcm9wWm9uZShudWxsKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldEFjdGl2ZURyb3Bab25lKCk6IERyb3Bab25lU2VydmljZVtcImFjdGl2ZURyb3Bab25lXCJdIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRHJvcFpvbmU7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBpbml0KHRyZWU6IEJyYW5jaDxhbnk+LCB0cmVlT3B0aW9uczogUHJvY2Vzc2VkT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRyZWUgPSB0cmVlO1xyXG4gICAgICB0aGlzLnRyZWVPcHRpb25zID0gdHJlZU9wdGlvbnM7XHJcbiAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgZm9yIChjb25zdCBkcm9wWm9uZUluZm8gb2YgdGhpcy5kcm9wWm9uZVN0YWNrKSB7XHJcbiAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuZHJvcFpvbmVJbnZlbnRvcnkuZmluZCgoem9uZSkgPT5cclxuICAgICAgICAgICAgICAgYXJyYXlzQXJlRXF1YWwoem9uZS5nZXRDb29yZGluYXRlcygpLCBkcm9wWm9uZUluZm8uY29vcmRpbmF0ZXMpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkucHVzaChkcm9wWm9uZUluZm8uZHJvcFpvbmUpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZFRvVHJlZShkcm9wWm9uZUluZm8uZHJvcFpvbmUsIGRyb3Bab25lSW5mby5jb29yZGluYXRlcyk7XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRyb3Bab25lU3RhY2subGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5hc3NpZ25GYW1pbGllcygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmxlbmd0aCA9IDA7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkubGVuZ3RoID0gMDtcclxuICAgICAgaWYgKHRoaXMudHJlZSkge1xyXG4gICAgICAgICB0aGlzLnRyZWVXaXRoRHJvcFpvbmVzID0gSGlkZGVuQnJhbmNoLmZyb21CcmFuY2godGhpcy50cmVlKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVzdG9yZUZhbWlsaWVzKCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy50ZW1wRmFtaWxpZXMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wb3AoKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2godGhpcy50ZW1wRmFtaWxpZXNbMF0pO1xyXG4gICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiB0aGlzLnRlbXBGYW1pbGllc1swXS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIG1lbWJlci5kYXRhLmZhbWlseSA9IHRoaXMudGVtcEZhbWlsaWVzWzBdO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGlmICh0aGlzLnRlbXBGYW1pbGllc1sxXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucHVzaCh0aGlzLnRlbXBGYW1pbGllc1sxXSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHRoaXMudGVtcEZhbWlsaWVzWzFdLm1lbWJlcnMpIHtcclxuICAgICAgICAgICAgICAgbWVtYmVyLmRhdGEuZmFtaWx5ID0gdGhpcy50ZW1wRmFtaWxpZXNbMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLnRlbXBGYW1pbGllcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAgKiBTaG93cyB0aGUgZHJvcCB6b25lIGZhbWlseSBvZiB0aGUgZHJvcCB6b25lIGluZGljYXRlZCBieSBgY29vcmRpbmF0ZXNgLlxyXG4gICAgKi9cclxuICAgcHVibGljIHNob3dEcm9wWm9uZUZhbWlseShcclxuICAgICAgY29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgIGpvaW5GYW1pbGllcz86IGJvb2xlYW47XHJcbiAgICAgICAgIGFjdGl2YXRlTG93ZXN0SW5zdGVhZE9mRm91bmRlcj86IGJvb2xlYW47XHJcbiAgICAgIH0gPSB7IGpvaW5GYW1pbGllczogZmFsc2UsIGFjdGl2YXRlTG93ZXN0SW5zdGVhZE9mRm91bmRlcjogZmFsc2UgfVxyXG4gICApOiB2b2lkIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsICYmXHJcbiAgICAgICAgIGFycmF5c0FyZUVxdWFsKHRoaXMuYWN0aXZlRHJvcFpvbmUuZ2V0Q29vcmRpbmF0ZXMoKSwgY29vcmRpbmF0ZXMpXHJcbiAgICAgICkge1xyXG4gICAgICAgICAvL0FscmVhZHkgc2hvd2luZyB0aGUgZmFtaWx5IHdpdGggdGhlIGFwcHJvcHJpYXRlIGFjdGl2ZSBkcm9wIHpvbmVcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZpc2libGVGYW1pbHkgIT09IG51bGwgfHwgdGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZVdpdGhEcm9wWm9uZXMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcm9wWm9uZVNlcnZpY2Ugbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudHJlZVdpdGhEcm9wWm9uZXMuZmluZEJ5Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgIGNvb3JkaW5hdGVzLFxyXG4gICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBkcm9wIHpvbmUgdG8gc2hvd1wiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmYW1pbHkgPSAodGFyZ2V0LmRhdGEgYXMgRHJvcFpvbmVEYXRhKS5mYW1pbHk7XHJcbiAgICAgIGlmIChvcHRpb25zLmpvaW5GYW1pbGllcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICBjb25zdCBjb29yZGluYXRlczIgPSBbLi4uY29vcmRpbmF0ZXNdO1xyXG4gICAgICAgICBjb29yZGluYXRlczJbY29vcmRpbmF0ZXMyLmxlbmd0aCAtIDFdKys7XHJcbiAgICAgICAgIGNvbnN0IHRhcmdldDIgPSB0aGlzLnRyZWVXaXRoRHJvcFpvbmVzLmZpbmRCeUNvb3JkaW5hdGVzKFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczIsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgKTtcclxuICAgICAgICAgaWYgKHRhcmdldDIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBkcm9wIHpvbmUgdG8gc2hvd1wiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBmYW1pbHkyID0gKHRhcmdldDIuZGF0YSBhcyBEcm9wWm9uZURhdGEpLmZhbWlseTtcclxuICAgICAgICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkIHx8IGZhbWlseTIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBmYW1pbHlcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgbmV3RmFtaWx5ID0ge1xyXG4gICAgICAgICAgICBmb3VuZGVyOiBmYW1pbHkuZm91bmRlcixcclxuICAgICAgICAgICAgbWVtYmVyczogWy4uLmZhbWlseS5tZW1iZXJzXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBmYW1pbHkubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuZGF0YS5mYW1pbHkgPSBuZXdGYW1pbHk7XHJcbiAgICAgICAgICAgIGlmIChtZW1iZXIgPT09IGZhbWlseS5mb3VuZGVyKSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBmYW1pbHkyLm1lbWJlcnMpIHtcclxuICAgICAgICAgICAgbWVtYmVyLmRhdGEuZmFtaWx5ID0gbmV3RmFtaWx5O1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIG1lbWJlci5nZXRDb29yZGluYXRlcygpLmxlbmd0aCA8IHRhcmdldDIuZ2V0Q29vcmRpbmF0ZXMoKS5sZW5ndGhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgIG5ld0ZhbWlseS5tZW1iZXJzLnB1c2gobWVtYmVyKTtcclxuICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICAgIC8vVGVtcG9yYXJpbHkgc3RvcmUgdGhlIG9sZCBmYW1pbGllc1xyXG4gICAgICAgICB0aGlzLnRlbXBGYW1pbGllcyA9IFtmYW1pbHksIGZhbWlseTJdO1xyXG4gICAgICAgICAvL1JlbW92ZSB0aGUgb2xkIGZhbWlsaWVzXHJcbiAgICAgICAgIGNvbnN0IGZhbWlseUluZGV4ID0gdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmluZGV4T2YoZmFtaWx5KTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnNwbGljZShmYW1pbHlJbmRleCwgMSk7XHJcbiAgICAgICAgIGNvbnN0IGZhbWlseTJJbmRleCA9IHRoaXMuZHJvcFpvbmVGYW1pbGllcy5pbmRleE9mKGZhbWlseTIpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMuc3BsaWNlKGZhbWlseTJJbmRleCwgMSk7XHJcbiAgICAgICAgIC8vQWRkIHRoZSBuZXcgZmFtaWx5XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKG5ld0ZhbWlseSk7XHJcbiAgICAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IG5ld0ZhbWlseTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGZhbWlseVwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLnZpc2libGVGYW1pbHkgPSBmYW1pbHk7XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChtZW1iZXIgPT09IGZhbWlseS5mb3VuZGVyKSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLmFjdGl2YXRlTG93ZXN0SW5zdGVhZE9mRm91bmRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICBjb25zdCBsb3dlc3RNZW1iZXIgPSBbLi4udGhpcy52aXNpYmxlRmFtaWx5Lm1lbWJlcnNdXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnRGYW1pbHkpXHJcbiAgICAgICAgICAgIC5wb3AoKTtcclxuICAgICAgICAgaWYgKGxvd2VzdE1lbWJlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgbG93ZXN0IG1lbWJlclwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLnN3YXBBY3RpdmVEcm9wWm9uZShsb3dlc3RNZW1iZXIuZ2V0Q29vcmRpbmF0ZXMoKSk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHVibGljIHN3YXBBY3RpdmVEcm9wWm9uZShcclxuICAgICAgbmV3QWN0aXZlRHJvcFpvbmVDb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXNcclxuICAgKTogdm9pZCB7XHJcbiAgICAgIGNvbnN0IGFjdGl2ZURyb3Bab25lID0gdGhpcy5nZXRBY3RpdmVEcm9wWm9uZSgpO1xyXG4gICAgICBpZiAoYWN0aXZlRHJvcFpvbmUgPT09IG51bGwpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IGdldCBhY3RpdmUgZHJvcCB6b25lXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZpc2libGVGYW1pbHkgPT09IG51bGwpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmlzaWJsZSBmYW1pbHkgYXZhaWxhYmxlIGZvciBzd2FwcGluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50cmVlV2l0aERyb3Bab25lcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZpc2libGVGYW1pbHkubWVtYmVycy5maW5kSW5kZXgoKGRyb3Bab25lKSA9PiB7XHJcbiAgICAgICAgIHJldHVybiBhcnJheXNBcmVFcXVhbChcclxuICAgICAgICAgICAgZHJvcFpvbmUuZ2V0Q29vcmRpbmF0ZXMoKSxcclxuICAgICAgICAgICAgbmV3QWN0aXZlRHJvcFpvbmVDb29yZGluYXRlc1xyXG4gICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gc3dhcCBhY3RpdmUgZHJvcCB6b25lXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhY3RpdmVEcm9wWm9uZS5kYXRhLmNvbXBvbmVudFJlZikge1xyXG4gICAgICAgICBhY3RpdmVEcm9wWm9uZS5kYXRhLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdBY3RpdmVEcm9wWm9uZSA9IHRoaXMudHJlZVdpdGhEcm9wWm9uZXMuZmluZEJ5Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgIG5ld0FjdGl2ZURyb3Bab25lQ29vcmRpbmF0ZXMsXHJcbiAgICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKG5ld0FjdGl2ZURyb3Bab25lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBuZXcgZHJvcCB6b25lXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUobmV3QWN0aXZlRHJvcFpvbmUpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGFkZFRvVHJlZShkcm9wWm9uZTogRHJvcFpvbmUsIGNvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcyk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy50cmVlV2l0aERyb3Bab25lcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50Q29vcmRpbmF0ZXMgPSBbLi4uY29vcmRpbmF0ZXNdO1xyXG4gICAgICBwYXJlbnRDb29yZGluYXRlcy5wb3AoKTtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy50cmVlV2l0aERyb3Bab25lcy5maW5kQnlDb29yZGluYXRlcyhcclxuICAgICAgICAgcGFyZW50Q29vcmRpbmF0ZXNcclxuICAgICAgKTtcclxuICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCBnZXQgcGFyZW50XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcmVudC5hZGRIaWRkZW5DaGlsZChkcm9wWm9uZSwgY29vcmRpbmF0ZXNbY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV0pO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGFzc2lnbkZhbWlsaWVzKCk6IHZvaWQge1xyXG4gICAgICBjb25zdCBvcnBoYW5ab25lcyA9IFsuLi50aGlzLmRyb3Bab25lSW52ZW50b3J5XTtcclxuICAgICAgY29uc3QgZGVlcGVzdE1lbWJlcnMgPSBvcnBoYW5ab25lc1xyXG4gICAgICAgICAuZmlsdGVyKCh6b25lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gem9uZS5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICBjb29yZGluYXRlc1tjb29yZGluYXRlcy5sZW5ndGggLSAxXSA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgICBjb29yZGluYXRlcy5sZW5ndGggPiAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgIH0pXHJcbiAgICAgICAgIC5zb3J0KCh2YWx1ZUEsIHZhbHVlQikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhQ29vcmRpbmF0ZXMgPSB2YWx1ZUEuZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgICAgICAgY29uc3QgYkNvb3JkaW5hdGVzID0gdmFsdWVCLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KGFDb29yZGluYXRlcy5sZW5ndGgsIGJDb29yZGluYXRlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgIGlmICgoYUNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkgPiAoYkNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAoYUNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkgPCAoYkNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSlcclxuICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgICBmb3IgKGNvbnN0IGRyb3Bab25lIG9mIGRlZXBlc3RNZW1iZXJzKSB7XHJcbiAgICAgICAgIGlmICghb3JwaGFuWm9uZXMuaW5jbHVkZXMoZHJvcFpvbmUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNvbnN0IGZhbWlseTogRHJvcFpvbmVGYW1pbHkgPSB7XHJcbiAgICAgICAgICAgIGZvdW5kZXI6IGRyb3Bab25lLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBbXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICBkcm9wWm9uZS5kYXRhLmZhbWlseSA9IGZhbWlseTtcclxuICAgICAgICAgLy9TZWUgaWYgdGhlcmUgYXJlIGFueSBvcnBoYW5zIHRoYXQgYmVsb25nIHRvIHRoaXMgZmFtaWx5IGFuZCBjbGFpbSB0aGVtLlxyXG4gICAgICAgICBjb25zdCBjdXJzb3IgPSBbLi4uZHJvcFpvbmUuZ2V0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIHdoaWxlIChjdXJzb3IubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmYW1pbHlNZW1iZXJJbmRleCA9IG9ycGhhblpvbmVzLmZpbmRJbmRleCgoem9uZSkgPT5cclxuICAgICAgICAgICAgICAgYXJyYXlzQXJlRXF1YWwoem9uZS5nZXRDb29yZGluYXRlcygpLCBjdXJzb3IpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmYW1pbHlNZW1iZXJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgY29uc3QgZmFtaWx5TWVtYmVyID0gb3JwaGFuWm9uZXMuc3BsaWNlKGZhbWlseU1lbWJlckluZGV4LCAxKVswXTtcclxuICAgICAgICAgICAgICAgZmFtaWx5Lm1lbWJlcnMucHVzaChmYW1pbHlNZW1iZXIpO1xyXG4gICAgICAgICAgICAgICBmYW1pbHlNZW1iZXIuZGF0YS5mYW1pbHkgPSBmYW1pbHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3Vyc29yLnBvcCgpO1xyXG4gICAgICAgICAgICBjdXJzb3JbY3Vyc29yLmxlbmd0aCAtIDFdKys7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2goZmFtaWx5KTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IGRyb3Bab25lIG9mIG9ycGhhblpvbmVzLmZpbHRlcihcclxuICAgICAgICAgKHpvbmUpID0+IHpvbmUuZ2V0Q29vcmRpbmF0ZXMoKS5sZW5ndGggPT09IDFcclxuICAgICAgKSkge1xyXG4gICAgICAgICBjb25zdCBmYW1pbHk6IERyb3Bab25lRmFtaWx5ID0ge1xyXG4gICAgICAgICAgICBmb3VuZGVyOiBkcm9wWm9uZSxcclxuICAgICAgICAgICAgbWVtYmVyczogW2Ryb3Bab25lXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICBkcm9wWm9uZS5kYXRhLmZhbWlseSA9IGZhbWlseTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2goZmFtaWx5KTtcclxuICAgICAgICAgb3JwaGFuWm9uZXMuc3BsaWNlKG9ycGhhblpvbmVzLmluZGV4T2YoZHJvcFpvbmUpLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3JwaGFuWm9uZXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgIGxldCBvcnBoYW5zID0gXCJcIjtcclxuICAgICAgICAgZm9yIChjb25zdCB6b25lIG9mIG9ycGhhblpvbmVzKSB7XHJcbiAgICAgICAgICAgIG9ycGhhbnMgKz0gYCR7SlNPTi5zdHJpbmdpZnkoem9uZS5nZXRDb29yZGluYXRlcygpKX0sIGA7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgb3JwaGFucyA9IG9ycGhhbnMuc2xpY2UoMCwgb3JwaGFucy5sZW5ndGggLSAyKTtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgU29tZSB6b25lcyB3ZXJlIG5vdCBhc3NpZ25lZCB0byBhIGZhbWlseS4gVGhlIG9ycGhhbiB6b25lcyBoYXZlIHRoZSBmb2xsb3dpbmcgY29vcmRpbmF0ZXM6ICR7b3JwaGFuc31gXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBzZXRBY3RpdmVEcm9wWm9uZShkcm9wWm9uZTogRHJvcFpvbmUgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPSBkcm9wWm9uZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsICYmXHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpICE9PSBcImRyb3BwYWJsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZHJvcHBhYmxlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPT09IG51bGwgJiZcclxuICAgICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCkgPT09IFwiZHJvcHBhYmxlXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5ub3REcm9wcGFibGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZT8uZGF0YS5jb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZS5kYXRhLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgc2hvd0Ryb3Bab25lKGRyb3Bab25lOiBEcm9wWm9uZSwgYWN0aXZlID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgICAgaWYgKCF0aGlzLnpvbmVJc0FsbG93ZWQoZHJvcFpvbmUpKSB7XHJcbiAgICAgICAgIC8vVXNlciBzZXR0aW5ncyBpbmRpY2F0ZSB0byBza2lwIHRoaXMgZHJvcCB6b25lXHJcbiAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYXJlbnQgPSBkcm9wWm9uZS5nZXRQYXJlbnQoKTtcclxuICAgICAgaWYgKHBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgZmFtaWx5IG1lbWJlclwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxEcm9wWm9uZUNvbXBvbmVudD4oXHJcbiAgICAgICAgIERyb3Bab25lQ29tcG9uZW50LFxyXG4gICAgICAgICBkcm9wWm9uZS5kYXRhLmNvbnRhaW5lclxyXG4gICAgICApO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYWN0aXZlID0gYWN0aXZlO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29vcmRpbmF0ZXMgPSBkcm9wWm9uZS5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICBpZiAoYWN0aXZlID09PSB0cnVlKSB7XHJcbiAgICAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUoZHJvcFpvbmUpO1xyXG4gICAgICB9XHJcbiAgICAgIGRyb3Bab25lLmRhdGEuY29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSB6b25lSXNBbGxvd2VkKGRyb3Bab25lOiBEcm9wWm9uZSk6IGJvb2xlYW4ge1xyXG4gICAgICBpZiAodGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJhZ2dlZE5vZGUgPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0RGF0YSgpO1xyXG4gICAgICBpZiAoZHJhZ2dlZE5vZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBnZXQgZHJhZ2dlZCBub2RlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyb3Bab25lUGFyZW50ID0gZHJvcFpvbmUuZ2V0UGFyZW50KCkgYXMgSGlkZGVuQnJhbmNoPExpbWJsZVRyZWVOb2RlPjtcclxuICAgICAgaWYgKGRyb3Bab25lUGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgZHJvcCB6b25lIHBhcmVudFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkcm9wWm9uZUluZGV4ID0gZHJvcFpvbmUuZ2V0SW5kZXgoKTtcclxuICAgICAgaWYgKGRyb3Bab25lSW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGRyb3Agem9uZSBpbmRleFwiKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMuYWxsb3dEcm9wKFxyXG4gICAgICAgICAgICBkcmFnZ2VkTm9kZS5kYXRhLFxyXG4gICAgICAgICAgICBkcm9wWm9uZVBhcmVudC5kYXRhLFxyXG4gICAgICAgICAgICBkcm9wWm9uZUluZGV4XHJcbiAgICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVKLFVBQVUsRUFDVixNQUFNLEVBRVIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFnQi9DLFNBQVMsVUFBVSxDQUFDLE9BQWlCLEVBQUUsT0FBaUI7SUFDckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUM1QyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ1o7SUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUM1QyxPQUFPLENBQUMsQ0FBQztLQUNYO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWixDQUFDO0FBR0QsTUFBTSxPQUFPLGVBQWU7SUFnQnpCLFlBQ29CLGdCQUFrQyxFQUNsQyx1QkFBZ0Q7UUFEaEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBRWpFLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVB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RUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUNHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUN2QixXQUFXLENBQUMsSUFBSSxFQUNoQixjQUFjLENBQUMsSUFBSSxFQUNuQixhQUFhLENBQ2YsRUFDRjtZQUNDLE9BQU8sSUFBSSxDQUFDO1NBQ2Q7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNoQixDQUFDOzs4RUE5WVMsZUFBZTt1REFBZixlQUFlLFdBQWYsZUFBZTt1RkFBZixlQUFlO2NBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICBDb21wb25lbnRSZWYsXHJcbiAgIEluamVjdGFibGUsXHJcbiAgIE5nWm9uZSxcclxuICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJyYW5jaCwgQnJhbmNoQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vQnJhbmNoXCI7XHJcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHR5cGUgeyBMaW1ibGVUcmVlTm9kZSwgUHJvY2Vzc2VkT3B0aW9ucyB9IGZyb20gXCIuL3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2NvbXBvbmVudC1jcmVhdG9yLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVDb21wb25lbnQgfSBmcm9tIFwiLi4vZHJvcC16b25lL2Ryb3Atem9uZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgYXJyYXlzQXJlRXF1YWwgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBIaWRkZW5CcmFuY2ggfSBmcm9tIFwiLi4vSGlkZGVuQnJhbmNoXCI7XHJcblxyXG5pbnRlcmZhY2UgRHJvcFpvbmVEYXRhIHtcclxuICAgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gICBmYW1pbHk/OiBEcm9wWm9uZUZhbWlseTtcclxuICAgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPERyb3Bab25lQ29tcG9uZW50PjtcclxufVxyXG5cclxudHlwZSBEcm9wWm9uZSA9IEhpZGRlbkJyYW5jaDxEcm9wWm9uZURhdGE+O1xyXG5cclxuaW50ZXJmYWNlIERyb3Bab25lRmFtaWx5IHtcclxuICAgLyoqIFRoZSBkZWVwZXN0IG1lbWJlciBvZiB0aGUgZmFtaWx5ICovXHJcbiAgIGZvdW5kZXI6IERyb3Bab25lO1xyXG4gICBtZW1iZXJzOiBBcnJheTxEcm9wWm9uZT47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNvcnRGYW1pbHkobWVtYmVyQTogRHJvcFpvbmUsIG1lbWJlckI6IERyb3Bab25lKSB7XHJcbiAgIGNvbnN0IGFDb29yZGluYXRlcyA9IG1lbWJlckEuZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgY29uc3QgYkNvb3JkaW5hdGVzID0gbWVtYmVyQi5nZXRDb29yZGluYXRlcygpO1xyXG4gICBpZiAoYUNvb3JkaW5hdGVzLmxlbmd0aCA+IGJDb29yZGluYXRlcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICB9XHJcbiAgIGlmIChhQ29vcmRpbmF0ZXMubGVuZ3RoIDwgYkNvb3JkaW5hdGVzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgfVxyXG4gICByZXR1cm4gMDtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRHJvcFpvbmVTZXJ2aWNlIHtcclxuICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVN0YWNrOiBBcnJheTx7XHJcbiAgICAgIGRyb3Bab25lOiBEcm9wWm9uZTtcclxuICAgICAgY29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzO1xyXG4gICB9PjtcclxuICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZUludmVudG9yeTogQXJyYXk8RHJvcFpvbmU+O1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lRmFtaWxpZXM6IEFycmF5PERyb3Bab25lRmFtaWx5PjtcclxuICAgcHJpdmF0ZSB2aXNpYmxlRmFtaWx5OiBEcm9wWm9uZUZhbWlseSB8IG51bGw7XHJcbiAgIHByaXZhdGUgYWN0aXZlRHJvcFpvbmU6IERyb3Bab25lIHwgbnVsbDtcclxuICAgcHJpdmF0ZSB0cmVlOiBCcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSB0cmVlV2l0aERyb3Bab25lczogSGlkZGVuQnJhbmNoPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgIHByaXZhdGUgdHJlZU9wdGlvbnM6IFByb2Nlc3NlZE9wdGlvbnMgfCB1bmRlZmluZWQ7XHJcbiAgIHByaXZhdGUgdGVtcEZhbWlsaWVzOlxyXG4gICAgICB8IHJlYWRvbmx5IFtEcm9wWm9uZUZhbWlseSwgRHJvcFpvbmVGYW1pbHkgfCBudWxsXVxyXG4gICAgICB8IHJlYWRvbmx5IFtdO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXRlU2VydmljZTogRHJhZ1N0YXRlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRDcmVhdG9yU2VydmljZTogQ29tcG9uZW50Q3JlYXRvclNlcnZpY2VcclxuICAgKSB7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTdGFjayA9IFtdO1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW52ZW50b3J5ID0gW107XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcyA9IFtdO1xyXG4gICAgICB0aGlzLnZpc2libGVGYW1pbHkgPSBudWxsO1xyXG4gICAgICB0aGlzLmFjdGl2ZURyb3Bab25lID0gbnVsbDtcclxuICAgICAgdGhpcy50ZW1wRmFtaWxpZXMgPSBbXTtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVEcm9wWm9uZShudWxsKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGFkZERyb3Bab25lKFxyXG4gICAgICBjb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXMsXHJcbiAgICAgIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxyXG4gICApOiB2b2lkIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU3RhY2suZmluZCgocmVnaXN0ZXJlZFpvbmUpID0+XHJcbiAgICAgICAgICAgIGFycmF5c0FyZUVxdWFsKHJlZ2lzdGVyZWRab25lLmNvb3JkaW5hdGVzLCBjb29yZGluYXRlcylcclxuICAgICAgICAgKSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJvcFpvbmUgPSBuZXcgSGlkZGVuQnJhbmNoKHsgY29udGFpbmVyOiBjb250YWluZXIgfSk7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTdGFjay5wdXNoKHsgZHJvcFpvbmU6IGRyb3Bab25lLCBjb29yZGluYXRlczogY29vcmRpbmF0ZXMgfSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMudmlzaWJsZUZhbWlseSAhPT0gbnVsbCkge1xyXG4gICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiB0aGlzLnZpc2libGVGYW1pbHkubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuZGF0YS5jb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLnZpc2libGVGYW1pbHkgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdG9yZUZhbWlsaWVzKCk7XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUobnVsbCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBnZXRBY3RpdmVEcm9wWm9uZSgpOiBEcm9wWm9uZVNlcnZpY2VbXCJhY3RpdmVEcm9wWm9uZVwiXSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURyb3Bab25lO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgaW5pdCh0cmVlOiBCcmFuY2g8YW55PiwgdHJlZU9wdGlvbnM6IFByb2Nlc3NlZE9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgdGhpcy50cmVlID0gdHJlZTtcclxuICAgICAgdGhpcy50cmVlT3B0aW9ucyA9IHRyZWVPcHRpb25zO1xyXG4gICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIGZvciAoY29uc3QgZHJvcFpvbmVJbmZvIG9mIHRoaXMuZHJvcFpvbmVTdGFjaykge1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lSW52ZW50b3J5LnB1c2goZHJvcFpvbmVJbmZvLmRyb3Bab25lKTtcclxuICAgICAgICAgdGhpcy5hZGRUb1RyZWUoZHJvcFpvbmVJbmZvLmRyb3Bab25lLCBkcm9wWm9uZUluZm8uY29vcmRpbmF0ZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTdGFjay5sZW5ndGggPSAwO1xyXG4gICAgICB0aGlzLmFzc2lnbkZhbWlsaWVzKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMubGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5kcm9wWm9uZUludmVudG9yeS5sZW5ndGggPSAwO1xyXG4gICAgICBpZiAodGhpcy50cmVlKSB7XHJcbiAgICAgICAgIHRoaXMudHJlZVdpdGhEcm9wWm9uZXMgPSBIaWRkZW5CcmFuY2guZnJvbUJyYW5jaCh0aGlzLnRyZWUpO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZXN0b3JlRmFtaWxpZXMoKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLnRlbXBGYW1pbGllcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnBvcCgpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucHVzaCh0aGlzLnRlbXBGYW1pbGllc1swXSk7XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHRoaXMudGVtcEZhbWlsaWVzWzBdLm1lbWJlcnMpIHtcclxuICAgICAgICAgICAgbWVtYmVyLmRhdGEuZmFtaWx5ID0gdGhpcy50ZW1wRmFtaWxpZXNbMF07XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgaWYgKHRoaXMudGVtcEZhbWlsaWVzWzFdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKHRoaXMudGVtcEZhbWlsaWVzWzFdKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgdGhpcy50ZW1wRmFtaWxpZXNbMV0ubWVtYmVycykge1xyXG4gICAgICAgICAgICAgICBtZW1iZXIuZGF0YS5mYW1pbHkgPSB0aGlzLnRlbXBGYW1pbGllc1sxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMudGVtcEZhbWlsaWVzID0gW107XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAqIFNob3dzIHRoZSBkcm9wIHpvbmUgZmFtaWx5IG9mIHRoZSBkcm9wIHpvbmUgaW5kaWNhdGVkIGJ5IGBjb29yZGluYXRlc2AuXHJcbiAgICAqL1xyXG4gICBwdWJsaWMgc2hvd0Ryb3Bab25lRmFtaWx5KFxyXG4gICAgICBjb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXMsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgam9pbkZhbWlsaWVzPzogYm9vbGVhbjtcclxuICAgICAgICAgYWN0aXZhdGVMb3dlc3RJbnN0ZWFkT2ZGb3VuZGVyPzogYm9vbGVhbjtcclxuICAgICAgfSA9IHsgam9pbkZhbWlsaWVzOiBmYWxzZSwgYWN0aXZhdGVMb3dlc3RJbnN0ZWFkT2ZGb3VuZGVyOiBmYWxzZSB9XHJcbiAgICk6IHZvaWQge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgIT09IG51bGwgJiZcclxuICAgICAgICAgYXJyYXlzQXJlRXF1YWwodGhpcy5hY3RpdmVEcm9wWm9uZS5nZXRDb29yZGluYXRlcygpLCBjb29yZGluYXRlcylcclxuICAgICAgKSB7XHJcbiAgICAgICAgIC8vQWxyZWFkeSBzaG93aW5nIHRoZSBmYW1pbHkgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYWN0aXZlIGRyb3Agem9uZVxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudmlzaWJsZUZhbWlseSAhPT0gbnVsbCB8fCB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsKSB7XHJcbiAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50cmVlV2l0aERyb3Bab25lcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50cmVlV2l0aERyb3Bab25lcy5maW5kQnlDb29yZGluYXRlcyhcclxuICAgICAgICAgY29vcmRpbmF0ZXMsXHJcbiAgICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGRyb3Agem9uZSB0byBzaG93XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGZhbWlseSA9ICh0YXJnZXQuZGF0YSBhcyBEcm9wWm9uZURhdGEpLmZhbWlseTtcclxuICAgICAgaWYgKG9wdGlvbnMuam9pbkZhbWlsaWVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzMiA9IFsuLi5jb29yZGluYXRlc107XHJcbiAgICAgICAgIGNvb3JkaW5hdGVzMltjb29yZGluYXRlczIubGVuZ3RoIC0gMV0rKztcclxuICAgICAgICAgY29uc3QgdGFyZ2V0MiA9IHRoaXMudHJlZVdpdGhEcm9wWm9uZXMuZmluZEJ5Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzMixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICApO1xyXG4gICAgICAgICBpZiAodGFyZ2V0MiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGRyb3Agem9uZSB0byBzaG93XCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNvbnN0IGZhbWlseTIgPSAodGFyZ2V0Mi5kYXRhIGFzIERyb3Bab25lRGF0YSkuZmFtaWx5O1xyXG4gICAgICAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQgfHwgZmFtaWx5MiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGZhbWlseVwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBuZXdGYW1pbHkgPSB7XHJcbiAgICAgICAgICAgIGZvdW5kZXI6IGZhbWlseS5mb3VuZGVyLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBbLi4uZmFtaWx5Lm1lbWJlcnNdXHJcbiAgICAgICAgIH07XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIG1lbWJlci5kYXRhLmZhbWlseSA9IG5ld0ZhbWlseTtcclxuICAgICAgICAgICAgaWYgKG1lbWJlciA9PT0gZmFtaWx5LmZvdW5kZXIpIHtcclxuICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseTIubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuZGF0YS5mYW1pbHkgPSBuZXdGYW1pbHk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgbWVtYmVyLmdldENvb3JkaW5hdGVzKCkubGVuZ3RoIDwgdGFyZ2V0Mi5nZXRDb29yZGluYXRlcygpLmxlbmd0aFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgbmV3RmFtaWx5Lm1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShtZW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgLy9UZW1wb3JhcmlseSBzdG9yZSB0aGUgb2xkIGZhbWlsaWVzXHJcbiAgICAgICAgIHRoaXMudGVtcEZhbWlsaWVzID0gW2ZhbWlseSwgZmFtaWx5Ml07XHJcbiAgICAgICAgIC8vUmVtb3ZlIHRoZSBvbGQgZmFtaWxpZXNcclxuICAgICAgICAgY29uc3QgZmFtaWx5SW5kZXggPSB0aGlzLmRyb3Bab25lRmFtaWxpZXMuaW5kZXhPZihmYW1pbHkpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMuc3BsaWNlKGZhbWlseUluZGV4LCAxKTtcclxuICAgICAgICAgY29uc3QgZmFtaWx5MkluZGV4ID0gdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmluZGV4T2YoZmFtaWx5Mik7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5zcGxpY2UoZmFtaWx5MkluZGV4LCAxKTtcclxuICAgICAgICAgLy9BZGQgdGhlIG5ldyBmYW1pbHlcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2gobmV3RmFtaWx5KTtcclxuICAgICAgICAgdGhpcy52aXNpYmxlRmFtaWx5ID0gbmV3RmFtaWx5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZmFtaWx5XCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IGZhbWlseTtcclxuICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgZmFtaWx5Lm1lbWJlcnMpIHtcclxuICAgICAgICAgICAgaWYgKG1lbWJlciA9PT0gZmFtaWx5LmZvdW5kZXIpIHtcclxuICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9wdGlvbnMuYWN0aXZhdGVMb3dlc3RJbnN0ZWFkT2ZGb3VuZGVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgIGNvbnN0IGxvd2VzdE1lbWJlciA9IFsuLi50aGlzLnZpc2libGVGYW1pbHkubWVtYmVyc11cclxuICAgICAgICAgICAgLnNvcnQoc29ydEZhbWlseSlcclxuICAgICAgICAgICAgLnBvcCgpO1xyXG4gICAgICAgICBpZiAobG93ZXN0TWVtYmVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCBsb3dlc3QgbWVtYmVyXCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMuc3dhcEFjdGl2ZURyb3Bab25lKGxvd2VzdE1lbWJlci5nZXRDb29yZGluYXRlcygpKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgc3dhcEFjdGl2ZURyb3Bab25lKFxyXG4gICAgICBuZXdBY3RpdmVEcm9wWm9uZUNvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlc1xyXG4gICApOiB2b2lkIHtcclxuICAgICAgY29uc3QgYWN0aXZlRHJvcFpvbmUgPSB0aGlzLmdldEFjdGl2ZURyb3Bab25lKCk7XHJcbiAgICAgIGlmIChhY3RpdmVEcm9wWm9uZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZ2V0IGFjdGl2ZSBkcm9wIHpvbmVcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudmlzaWJsZUZhbWlseSA9PT0gbnVsbCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2aXNpYmxlIGZhbWlseSBhdmFpbGFibGUgZm9yIHN3YXBwaW5nXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRyZWVXaXRoRHJvcFpvbmVzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcFpvbmVTZXJ2aWNlIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMudmlzaWJsZUZhbWlseS5tZW1iZXJzLmZpbmRJbmRleCgoZHJvcFpvbmUpID0+IHtcclxuICAgICAgICAgcmV0dXJuIGFycmF5c0FyZUVxdWFsKFxyXG4gICAgICAgICAgICBkcm9wWm9uZS5nZXRDb29yZGluYXRlcygpLFxyXG4gICAgICAgICAgICBuZXdBY3RpdmVEcm9wWm9uZUNvb3JkaW5hdGVzXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBzd2FwIGFjdGl2ZSBkcm9wIHpvbmVcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmV3QWN0aXZlRHJvcFpvbmUgPSB0aGlzLnRyZWVXaXRoRHJvcFpvbmVzLmZpbmRCeUNvb3JkaW5hdGVzKFxyXG4gICAgICAgICBuZXdBY3RpdmVEcm9wWm9uZUNvb3JkaW5hdGVzLFxyXG4gICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChuZXdBY3RpdmVEcm9wWm9uZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbmV3IGRyb3Agem9uZVwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKG5ld0FjdGl2ZURyb3Bab25lKTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBhZGRUb1RyZWUoZHJvcFpvbmU6IERyb3Bab25lLCBjb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXMpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMudHJlZVdpdGhEcm9wWm9uZXMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcm9wWm9uZVNlcnZpY2Ugbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhcmVudENvb3JkaW5hdGVzID0gWy4uLmNvb3JkaW5hdGVzXTtcclxuICAgICAgcGFyZW50Q29vcmRpbmF0ZXMucG9wKCk7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMudHJlZVdpdGhEcm9wWm9uZXMuZmluZEJ5Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgIHBhcmVudENvb3JkaW5hdGVzXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZ2V0IHBhcmVudFwiKTtcclxuICAgICAgfVxyXG4gICAgICBwYXJlbnQuYWRkSGlkZGVuQ2hpbGQoZHJvcFpvbmUsIGNvb3JkaW5hdGVzW2Nvb3JkaW5hdGVzLmxlbmd0aCAtIDFdKTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBhc3NpZ25GYW1pbGllcygpOiB2b2lkIHtcclxuICAgICAgY29uc3Qgb3JwaGFuWm9uZXMgPSBbLi4udGhpcy5kcm9wWm9uZUludmVudG9yeV07XHJcbiAgICAgIGNvbnN0IGRlZXBlc3RNZW1iZXJzID0gb3JwaGFuWm9uZXNcclxuICAgICAgICAgLmZpbHRlcigoem9uZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IHpvbmUuZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNbY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV0gPT09IDAgJiZcclxuICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICB9KVxyXG4gICAgICAgICAuc29ydCgodmFsdWVBLCB2YWx1ZUIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYUNvb3JkaW5hdGVzID0gdmFsdWVBLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJDb29yZGluYXRlcyA9IHZhbHVlQi5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heChhQ29vcmRpbmF0ZXMubGVuZ3RoLCBiQ29vcmRpbmF0ZXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICBpZiAoKGFDb29yZGluYXRlc1tpbmRleF0gPz8gLTEpID4gKGJDb29yZGluYXRlc1tpbmRleF0gPz8gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgKGFDb29yZGluYXRlc1tpbmRleF0gPz8gLTEpIDwgKGJDb29yZGluYXRlc1tpbmRleF0gPz8gLTEpXHJcbiAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgZm9yIChjb25zdCBkcm9wWm9uZSBvZiBkZWVwZXN0TWVtYmVycykge1xyXG4gICAgICAgICBpZiAoIW9ycGhhblpvbmVzLmluY2x1ZGVzKGRyb3Bab25lKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBmYW1pbHk6IERyb3Bab25lRmFtaWx5ID0ge1xyXG4gICAgICAgICAgICBmb3VuZGVyOiBkcm9wWm9uZSxcclxuICAgICAgICAgICAgbWVtYmVyczogW11cclxuICAgICAgICAgfTtcclxuICAgICAgICAgZHJvcFpvbmUuZGF0YS5mYW1pbHkgPSBmYW1pbHk7XHJcbiAgICAgICAgIC8vU2VlIGlmIHRoZXJlIGFyZSBhbnkgb3JwaGFucyB0aGF0IGJlbG9uZyB0byB0aGlzIGZhbWlseSBhbmQgY2xhaW0gdGhlbS5cclxuICAgICAgICAgY29uc3QgY3Vyc29yID0gWy4uLmRyb3Bab25lLmdldENvb3JkaW5hdGVzKCldO1xyXG4gICAgICAgICB3aGlsZSAoY3Vyc29yLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmFtaWx5TWVtYmVySW5kZXggPSBvcnBoYW5ab25lcy5maW5kSW5kZXgoKHpvbmUpID0+XHJcbiAgICAgICAgICAgICAgIGFycmF5c0FyZUVxdWFsKHpvbmUuZ2V0Q29vcmRpbmF0ZXMoKSwgY3Vyc29yKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZmFtaWx5TWVtYmVySW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGZhbWlseU1lbWJlciA9IG9ycGhhblpvbmVzLnNwbGljZShmYW1pbHlNZW1iZXJJbmRleCwgMSlbMF07XHJcbiAgICAgICAgICAgICAgIGZhbWlseS5tZW1iZXJzLnB1c2goZmFtaWx5TWVtYmVyKTtcclxuICAgICAgICAgICAgICAgZmFtaWx5TWVtYmVyLmRhdGEuZmFtaWx5ID0gZmFtaWx5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnNvci5wb3AoKTtcclxuICAgICAgICAgICAgY3Vyc29yW2N1cnNvci5sZW5ndGggLSAxXSsrO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKGZhbWlseSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChjb25zdCBkcm9wWm9uZSBvZiBvcnBoYW5ab25lcy5maWx0ZXIoXHJcbiAgICAgICAgICh6b25lKSA9PiB6b25lLmdldENvb3JkaW5hdGVzKCkubGVuZ3RoID09PSAxXHJcbiAgICAgICkpIHtcclxuICAgICAgICAgY29uc3QgZmFtaWx5OiBEcm9wWm9uZUZhbWlseSA9IHtcclxuICAgICAgICAgICAgZm91bmRlcjogZHJvcFpvbmUsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFtkcm9wWm9uZV1cclxuICAgICAgICAgfTtcclxuICAgICAgICAgZHJvcFpvbmUuZGF0YS5mYW1pbHkgPSBmYW1pbHk7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKGZhbWlseSk7XHJcbiAgICAgICAgIG9ycGhhblpvbmVzLnNwbGljZShvcnBoYW5ab25lcy5pbmRleE9mKGRyb3Bab25lKSwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9ycGhhblpvbmVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICBsZXQgb3JwaGFucyA9IFwiXCI7XHJcbiAgICAgICAgIGZvciAoY29uc3Qgem9uZSBvZiBvcnBoYW5ab25lcykge1xyXG4gICAgICAgICAgICBvcnBoYW5zICs9IGAke0pTT04uc3RyaW5naWZ5KHpvbmUuZ2V0Q29vcmRpbmF0ZXMoKSl9LCBgO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIG9ycGhhbnMgPSBvcnBoYW5zLnNsaWNlKDAsIG9ycGhhbnMubGVuZ3RoIC0gMik7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYFNvbWUgem9uZXMgd2VyZSBub3QgYXNzaWduZWQgdG8gYSBmYW1pbHkuIFRoZSBvcnBoYW4gem9uZXMgaGF2ZSB0aGUgZm9sbG93aW5nIGNvb3JkaW5hdGVzOiAke29ycGhhbnN9YFxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgc2V0QWN0aXZlRHJvcFpvbmUoZHJvcFpvbmU6IERyb3Bab25lIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZT8uZGF0YS5jb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZS5kYXRhLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgaWYgKCFOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZS5kYXRhLmNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGl2ZURyb3Bab25lID0gZHJvcFpvbmU7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0U3RhdGUoKSAhPT0gXCJkcm9wcGFibGVcIlxyXG4gICAgICApIHtcclxuICAgICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmRyb3BwYWJsZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lID09PSBudWxsICYmXHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpID09PSBcImRyb3BwYWJsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2Uubm90RHJvcHBhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcFpvbmU/LmRhdGEuY29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUuZGF0YS5jb21wb25lbnRSZWYuaW5zdGFuY2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgaWYgKCFOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZS5kYXRhLmNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHNob3dEcm9wWm9uZShkcm9wWm9uZTogRHJvcFpvbmUsIGFjdGl2ZSA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICAgIGlmICghdGhpcy56b25lSXNBbGxvd2VkKGRyb3Bab25lKSkge1xyXG4gICAgICAgICAvL1VzZXIgc2V0dGluZ3MgaW5kaWNhdGUgdG8gc2tpcCB0aGlzIGRyb3Agem9uZVxyXG4gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50ID0gZHJvcFpvbmUuZ2V0UGFyZW50KCk7XHJcbiAgICAgIGlmIChwYXJlbnQgPT09IG51bGwpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGZhbWlseSBtZW1iZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQ8RHJvcFpvbmVDb21wb25lbnQ+KFxyXG4gICAgICAgICBEcm9wWm9uZUNvbXBvbmVudCxcclxuICAgICAgICAgZHJvcFpvbmUuZGF0YS5jb250YWluZXJcclxuICAgICAgKTtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmFjdGl2ZSA9IGFjdGl2ZTtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvb3JkaW5hdGVzID0gZHJvcFpvbmUuZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKGRyb3Bab25lKTtcclxuICAgICAgfVxyXG4gICAgICBkcm9wWm9uZS5kYXRhLmNvbXBvbmVudFJlZiA9IGNvbXBvbmVudFJlZjtcclxuICAgICAgLy9XZSB1c2UgdGhpcyB6b25lIGNoZWNrIGluIGNhc2Ugd2UgYXJlIHJ1bm5pbmcgb3V0c2lkZSBvZiBhbmd1bGFyLCB3aGljaCBoYXBwZW5zXHJcbiAgICAgIC8vb2Z0ZW4gZHVlIHRvIHRoZSB3YXkgd2UgY2F0Y2ggZHJhZ292ZXIgZXZlbnRzIHVzaW5nIHRoZSBEcmFnb3Zlck5vQ2hhbmdlRGV0ZWN0XHJcbiAgICAgIC8vZGlyZWN0aXZlXHJcbiAgICAgIGlmICghTmdab25lLmlzSW5Bbmd1bGFyWm9uZSgpKSB7XHJcbiAgICAgICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgem9uZUlzQWxsb3dlZChkcm9wWm9uZTogRHJvcFpvbmUpOiBib29sZWFuIHtcclxuICAgICAgaWYgKHRoaXMudHJlZU9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcm9wWm9uZVNlcnZpY2Ugbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyYWdnZWROb2RlID0gdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldERhdGEoKTtcclxuICAgICAgaWYgKGRyYWdnZWROb2RlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZ2V0IGRyYWdnZWQgbm9kZVwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkcm9wWm9uZVBhcmVudCA9IGRyb3Bab25lLmdldFBhcmVudCgpIGFzIEhpZGRlbkJyYW5jaDxMaW1ibGVUcmVlTm9kZT47XHJcbiAgICAgIGlmIChkcm9wWm9uZVBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGRyb3Agem9uZSBwYXJlbnRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJvcFpvbmVJbmRleCA9IGRyb3Bab25lLmdldEluZGV4KCk7XHJcbiAgICAgIGlmIChkcm9wWm9uZUluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCBkcm9wIHpvbmUgaW5kZXhcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnRyZWVPcHRpb25zLmFsbG93RHJvcChcclxuICAgICAgICAgICAgZHJhZ2dlZE5vZGUuZGF0YSxcclxuICAgICAgICAgICAgZHJvcFpvbmVQYXJlbnQuZGF0YSxcclxuICAgICAgICAgICAgZHJvcFpvbmVJbmRleFxyXG4gICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgIH1cclxufVxyXG4iXX0=

@@ -11,2 +11,4 @@ import { Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef } from "@angular/core";

import * as i4 from "../singletons/global-events.service";
import * as i5 from "../custom-event-bindings/dragover-no-change-detect.directive";
import * as i6 from "../custom-event-bindings/dragleave-no-change-detect.directive";
const _c0 = ["host"];

@@ -17,3 +19,3 @@ const _c1 = ["dropZoneInside"];

export class LimbleTreeRootComponent {
constructor(treeService, dropZoneService, dragStateService, globalEventsService) {
constructor(treeService, dropZoneService, dragStateService, globalEventsService, changeDetectorRef) {
this.treeService = treeService;

@@ -23,2 +25,3 @@ this.dropZoneService = dropZoneService;

this.globalEventsService = globalEventsService;
this.changeDetectorRef = changeDetectorRef;
this.treeChange = new EventEmitter();

@@ -43,2 +46,3 @@ this.treeDrop = new EventEmitter();

this.update();
this.changeDetectorRef.detectChanges();
}

@@ -75,5 +79,8 @@ ngOnChanges() {

isElementDescendant(currentTarget, relatedTarget) !== false) {
//event came from deeper in the tree. Ignore it.
return;
}
//Mouse has left the tree, so clear the drop zones
this.dropZoneService.clear();
this.changeDetectorRef.detectChanges();
}

@@ -101,3 +108,3 @@ dropHandler(event) {

}
LimbleTreeRootComponent.ɵfac = function LimbleTreeRootComponent_Factory(t) { return new (t || LimbleTreeRootComponent)(i0.ɵɵdirectiveInject(i1.TreeService), i0.ɵɵdirectiveInject(i2.DropZoneService), i0.ɵɵdirectiveInject(i3.DragStateService), i0.ɵɵdirectiveInject(i4.GlobalEventsService)); };
LimbleTreeRootComponent.ɵfac = function LimbleTreeRootComponent_Factory(t) { return new (t || LimbleTreeRootComponent)(i0.ɵɵdirectiveInject(i1.TreeService), i0.ɵɵdirectiveInject(i2.DropZoneService), i0.ɵɵdirectiveInject(i3.DragStateService), i0.ɵɵdirectiveInject(i4.GlobalEventsService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
LimbleTreeRootComponent.ɵcmp = i0.ɵɵdefineComponent({ type: LimbleTreeRootComponent, selectors: [["limble-tree-root"]], viewQuery: function LimbleTreeRootComponent_Query(rf, ctx) { if (rf & 1) {

@@ -110,9 +117,9 @@ i0.ɵɵviewQuery(_c0, 1, ViewContainerRef);

i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropZoneInside = _t.first);
} }, inputs: { data: "data", options: "options", itemsPerPage: "itemsPerPage", page: "page" }, outputs: { dropZoneInside$: "dropZoneInside$", treeChange: "treeChange", treeDrop: "treeDrop" }, features: [i0.ɵɵProvidersFeature([TreeService, DropZoneService]), i0.ɵɵNgOnChangesFeature], decls: 5, vars: 0, consts: [[3, "dragover", "dragleave", "drop"], ["dropZoneInside", ""], ["host", ""]], template: function LimbleTreeRootComponent_Template(rf, ctx) { if (rf & 1) {
} }, inputs: { data: "data", options: "options", itemsPerPage: "itemsPerPage", page: "page" }, outputs: { dropZoneInside$: "dropZoneInside$", treeChange: "treeChange", treeDrop: "treeDrop" }, features: [i0.ɵɵProvidersFeature([TreeService, DropZoneService]), i0.ɵɵNgOnChangesFeature], decls: 5, vars: 0, consts: [[3, "dragoverNoChangeDetect", "dragleaveNoChangeDetect", "drop"], ["dropZoneInside", ""], ["host", ""]], template: function LimbleTreeRootComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0);
i0.ɵɵlistener("dragover", function LimbleTreeRootComponent_Template_div_dragover_0_listener($event) { return ctx.dragoverHandler($event); })("dragleave", function LimbleTreeRootComponent_Template_div_dragleave_0_listener($event) { return ctx.dragleaveHandler($event); })("drop", function LimbleTreeRootComponent_Template_div_drop_0_listener($event) { return ctx.dropHandler($event); });
i0.ɵɵlistener("dragoverNoChangeDetect", function LimbleTreeRootComponent_Template_div_dragoverNoChangeDetect_0_listener($event) { return ctx.dragoverHandler($event); })("dragleaveNoChangeDetect", function LimbleTreeRootComponent_Template_div_dragleaveNoChangeDetect_0_listener($event) { return ctx.dragleaveHandler($event); })("drop", function LimbleTreeRootComponent_Template_div_drop_0_listener($event) { return ctx.dropHandler($event); });
i0.ɵɵtemplate(1, LimbleTreeRootComponent_ng_template_1_Template, 0, 0, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(3, LimbleTreeRootComponent_ng_template_3_Template, 0, 0, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementEnd();
} }, styles: [""] });
} }, directives: [i5.DragoverNoChangeDetectDirective, i6.DragleaveNoChangeDetectDirective], styles: [""] });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeRootComponent, [{

@@ -126,3 +133,3 @@ type: Component,

}]
}], function () { return [{ type: i1.TreeService }, { type: i2.DropZoneService }, { type: i3.DragStateService }, { type: i4.GlobalEventsService }]; }, { data: [{
}], function () { return [{ type: i1.TreeService }, { type: i2.DropZoneService }, { type: i3.DragStateService }, { type: i4.GlobalEventsService }, { type: i0.ChangeDetectorRef }]; }, { data: [{
type: Input

@@ -148,2 +155,2 @@ }], options: [{

}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUosU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7QUFVOUMsTUFBTSxPQUFPLHVCQUF1QjtJQXdCakMsWUFDb0IsV0FBd0IsRUFDeEIsZUFBZ0MsRUFDaEMsZ0JBQWtDLEVBQ2xDLG1CQUF3QztRQUh4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBWHpDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXRDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBV3hELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsZUFBZTs7UUFDWixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUNHLE9BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsUUFBUSxNQUFLLElBQUk7WUFDL0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxFQUM3RDtZQUNDLE9BQU8sQ0FBQyxJQUFJLENBQ1QsMEZBQTBGLENBQzVGLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVztRQUNSLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2hCO0lBQ0osQ0FBQztJQUVELHVCQUF1QjtJQUNoQixNQUFNO1FBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUNaLHlEQUF5RCxDQUMzRCxDQUFDO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNsQixJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsSUFBSSxDQUNYLENBQUM7UUFDRixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFnQjtRQUNwQyxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQzlCLE9BQU87U0FDVDtRQUNELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFnQjtRQUNyQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFDRyxDQUFDLENBQUMsYUFBYSxZQUFZLElBQUksQ0FBQztZQUNoQyxDQUFDLENBQUMsYUFBYSxZQUFZLElBQUksQ0FBQztZQUNoQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEtBQUssS0FBSyxFQUM1RDtZQUNDLE9BQU87U0FDVDtRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFnQjtRQUNoQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLFdBQVcsRUFBRTtZQUNuRCxPQUFPO1NBQ1Q7UUFDRCxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7U0FDcEU7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsV0FBVztRQUNSLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQzs7OEZBekhTLHVCQUF1Qjs0REFBdkIsdUJBQXVCOytCQU9OLGdCQUFnQjsrQkFJTixnQkFBZ0I7Ozs7O3FPQWIxQyxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUM7UUMzQjVDLDhCQUlDO1FBSEUsNkdBQVksMkJBQXVCLElBQUMsa0dBQ3ZCLDRCQUF3QixJQURELHdGQUU1Qix1QkFBbUIsSUFGUztRQUlwQyx5SEFBMkM7UUFDM0MseUhBQWlDO1FBQ3BDLGlCQUFNOzt1RkRzQk8sdUJBQXVCO2NBTm5DLFNBQVM7ZUFBQztnQkFDUixRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixXQUFXLEVBQUUsbUNBQW1DO2dCQUNoRCxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztnQkFDaEQsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQzthQUMzQzs2SkFHVyxJQUFJO2tCQUFaLEtBQUs7WUFDRyxPQUFPO2tCQUFmLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csSUFBSTtrQkFBWixLQUFLO1lBRWlELElBQUk7a0JBQTFELFNBQVM7bUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBSzdDLGNBQWM7a0JBRGIsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUk5QyxlQUFlO2tCQUR2QixNQUFNO1lBR1ksVUFBVTtrQkFBNUIsTUFBTTtZQUVZLFFBQVE7a0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICBBZnRlclZpZXdJbml0LFxyXG4gICBDb21wb25lbnQsXHJcbiAgIEV2ZW50RW1pdHRlcixcclxuICAgSW5wdXQsXHJcbiAgIE9uQ2hhbmdlcyxcclxuICAgT25EZXN0cm95LFxyXG4gICBPdXRwdXQsXHJcbiAgIFZpZXdDaGlsZCxcclxuICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4vZHJvcC16b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICAgTGltYmxlVHJlZURhdGEsXHJcbiAgIExpbWJsZVRyZWVPcHRpb25zLFxyXG4gICBUcmVlRHJvcFxyXG59IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gXCIuL3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBpc0VsZW1lbnREZXNjZW5kYW50IH0gZnJvbSBcIi4uL3V0aWxcIjtcclxuaW1wb3J0IHsgRHJhZ1N0YXRlU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZ2xvYmFsLWV2ZW50cy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwibGltYmxlLXRyZWUtcm9vdFwiLFxyXG4gICB0ZW1wbGF0ZVVybDogXCIuL2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50Lmh0bWxcIixcclxuICAgc3R5bGVVcmxzOiBbXCIuL2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgIHByb3ZpZGVyczogW1RyZWVTZXJ2aWNlLCBEcm9wWm9uZVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaW1ibGVUcmVlUm9vdENvbXBvbmVudFxyXG4gICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAgQElucHV0KCkgZGF0YTogTGltYmxlVHJlZURhdGEgfCB1bmRlZmluZWQ7XHJcbiAgIEBJbnB1dCgpIG9wdGlvbnM6IExpbWJsZVRyZWVPcHRpb25zIHwgdW5kZWZpbmVkO1xyXG4gICBASW5wdXQoKSBpdGVtc1BlclBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICAgQElucHV0KCkgcGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQFZpZXdDaGlsZChcImhvc3RcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHByaXZhdGUgaG9zdDpcclxuICAgICAgfCBWaWV3Q29udGFpbmVyUmVmXHJcbiAgICAgIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQFZpZXdDaGlsZChcImRyb3Bab25lSW5zaWRlXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gICBkcm9wWm9uZUluc2lkZTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBPdXRwdXQoKVxyXG4gICByZWFkb25seSBkcm9wWm9uZUluc2lkZSQ6IEJlaGF2aW9yU3ViamVjdDxWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgIEBPdXRwdXQoKSByZWFkb25seSB0cmVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xyXG5cclxuICAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVEcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlRHJvcD4oKTtcclxuXHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3BTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHRyZWVTZXJ2aWNlOiBUcmVlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcmFnU3RhdGVTZXJ2aWNlOiBEcmFnU3RhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEV2ZW50c1NlcnZpY2U6IEdsb2JhbEV2ZW50c1NlcnZpY2VcclxuICAgKSB7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlU2VydmljZS5jaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICB0aGlzLnRyZWVDaGFuZ2UuZW1pdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kcm9wU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlU2VydmljZS5kcm9wcyQuc3Vic2NyaWJlKChkcm9wKSA9PiB7XHJcbiAgICAgICAgIHRoaXMudHJlZURyb3AuZW1pdChkcm9wKTtcclxuICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQubmV4dCh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQuY29tcGxldGUoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLm9wdGlvbnM/Lmxpc3RNb2RlICE9PSB0cnVlICYmXHJcbiAgICAgICAgICh0aGlzLml0ZW1zUGVyUGFnZSAhPT0gdW5kZWZpbmVkIHx8IHRoaXMucGFnZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcInBhZ2luYXRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3RNb2RlOyBgaXRlbXNQZXJQYWdlYCBhbmQgYHBhZ2VgIGlucHV0cyB3aWxsIGJlIGlnbm9yZWRcIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgIH1cclxuXHJcbiAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICBpZiAodGhpcy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICAvKiogUmVidWlsZCB0aGUgdHJlZSAqL1xyXG4gICBwdWJsaWMgdXBkYXRlKCkge1xyXG4gICAgICBpZiAodGhpcy5ob3N0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBcIkZhaWxlZCB0byByZW5kZXIgbGltYmxlIHRyZWUuIEZhaWx1cmUgb2NjdXJyZWQgYXQgcm9vdC5cIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGEgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGxpbWJsZVRyZWUgcmVxdWlyZXMgYSBkYXRhIG9iamVjdGApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UuaW5pdChcclxuICAgICAgICAgdGhpcy5ob3N0LFxyXG4gICAgICAgICB0aGlzLmRhdGEsXHJcbiAgICAgICAgIHRoaXMub3B0aW9ucyxcclxuICAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgIHRoaXMucGFnZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmdsb2JhbEV2ZW50c1NlcnZpY2UuYWRkU2Nyb2xsaW5nKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnb3ZlckhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyID09PSBudWxsKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBcIm1vdmVcIjtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyYWdsZWF2ZUhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcclxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgIShjdXJyZW50VGFyZ2V0IGluc3RhbmNlb2YgTm9kZSkgfHxcclxuICAgICAgICAgIShyZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSkgfHxcclxuICAgICAgICAgaXNFbGVtZW50RGVzY2VuZGFudChjdXJyZW50VGFyZ2V0LCByZWxhdGVkVGFyZ2V0KSAhPT0gZmFsc2VcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5jbGVhcigpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJvcEhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgY29uc3QgZHJvcFpvbmUgPSB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZSgpO1xyXG4gICAgICBpZiAodGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCkgIT09IFwiZHJvcHBhYmxlXCIpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkcm9wWm9uZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGFjdGl2ZSBkcm9wIHpvbmUgYXQgZHJvcCBoYW5kbGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNvdXJjZUJyYW5jaCA9IHRoaXMuZHJhZ1N0YXRlU2VydmljZS5jYXB0dXJlKCk7XHJcbiAgICAgIGlmIChzb3VyY2VCcmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGN1cnJlbnQgYnJhbmNoIGluIGRyYWdlbmRIYW5kbGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UuZHJvcChzb3VyY2VCcmFuY2gsIGRyb3Bab25lLmdldENvb3JkaW5hdGVzKCkpO1xyXG4gICB9XHJcblxyXG4gICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICAoZHJhZ292ZXIpPVwiZHJhZ292ZXJIYW5kbGVyKCRldmVudClcIlxyXG4gICAoZHJhZ2xlYXZlKT1cImRyYWdsZWF2ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgIChkcm9wKT1cImRyb3BIYW5kbGVyKCRldmVudClcIlxyXG4+XHJcbiAgIDxuZy10ZW1wbGF0ZSAjZHJvcFpvbmVJbnNpZGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgPG5nLXRlbXBsYXRlICNob3N0PjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7OztBQVU5QyxNQUFNLE9BQU8sdUJBQXVCO0lBd0JqQyxZQUNvQixXQUF3QixFQUN4QixlQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUpwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFackMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFZeEQsSUFBSSxDQUFDLGVB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QUFFLGtCQUFrQjtnQkFDNUIsV0FBVyxFQUFFLG1DQUFtQztnQkFDaEQsU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7Z0JBQ2hELFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUM7YUFDM0M7NkxBR1csSUFBSTtrQkFBWixLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csWUFBWTtrQkFBcEIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUVpRCxJQUFJO2tCQUExRCxTQUFTO21CQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUs3QyxjQUFjO2tCQURiLFNBQVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFJOUMsZUFBZTtrQkFEdkIsTUFBTTtZQUdZLFVBQVU7a0JBQTVCLE1BQU07WUFFWSxRQUFRO2tCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgRXZlbnRFbWl0dGVyLFxyXG4gICBJbnB1dCxcclxuICAgT25DaGFuZ2VzLFxyXG4gICBPbkRlc3Ryb3ksXHJcbiAgIE91dHB1dCxcclxuICAgVmlld0NoaWxkLFxyXG4gICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICBMaW1ibGVUcmVlRGF0YSxcclxuICAgTGltYmxlVHJlZU9wdGlvbnMsXHJcbiAgIFRyZWVEcm9wXHJcbn0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4vdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGlzRWxlbWVudERlc2NlbmRhbnQgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZHJhZy1zdGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEdsb2JhbEV2ZW50c1NlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICBzZWxlY3RvcjogXCJsaW1ibGUtdHJlZS1yb290XCIsXHJcbiAgIHRlbXBsYXRlVXJsOiBcIi4vbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuaHRtbFwiLFxyXG4gICBzdHlsZVVybHM6IFtcIi4vbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgcHJvdmlkZXJzOiBbVHJlZVNlcnZpY2UsIERyb3Bab25lU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVSb290Q29tcG9uZW50XHJcbiAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gICBASW5wdXQoKSBkYXRhOiBMaW1ibGVUcmVlRGF0YSB8IHVuZGVmaW5lZDtcclxuICAgQElucHV0KCkgb3B0aW9uczogTGltYmxlVHJlZU9wdGlvbnMgfCB1bmRlZmluZWQ7XHJcbiAgIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICBASW5wdXQoKSBwYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAVmlld0NoaWxkKFwiaG9zdFwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcHJpdmF0ZSBob3N0OlxyXG4gICAgICB8IFZpZXdDb250YWluZXJSZWZcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAVmlld0NoaWxkKFwiZHJvcFpvbmVJbnNpZGVcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIGRyb3Bab25lSW5zaWRlOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQE91dHB1dCgpXHJcbiAgIHJlYWRvbmx5IGRyb3Bab25lSW5zaWRlJDogQmVoYXZpb3JTdWJqZWN0PFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ+O1xyXG5cclxuICAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bGw+KCk7XHJcblxyXG4gICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZURyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVEcm9wPigpO1xyXG5cclxuICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdTdGF0ZVNlcnZpY2U6IERyYWdTdGF0ZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsRXZlbnRzU2VydmljZTogR2xvYmFsRXZlbnRzU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgKSB7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlU2VydmljZS5jaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICB0aGlzLnRyZWVDaGFuZ2UuZW1pdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kcm9wU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlU2VydmljZS5kcm9wcyQuc3Vic2NyaWJlKChkcm9wKSA9PiB7XHJcbiAgICAgICAgIHRoaXMudHJlZURyb3AuZW1pdChkcm9wKTtcclxuICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQubmV4dCh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQuY29tcGxldGUoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLm9wdGlvbnM/Lmxpc3RNb2RlICE9PSB0cnVlICYmXHJcbiAgICAgICAgICh0aGlzLml0ZW1zUGVyUGFnZSAhPT0gdW5kZWZpbmVkIHx8IHRoaXMucGFnZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcInBhZ2luYXRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3RNb2RlOyBgaXRlbXNQZXJQYWdlYCBhbmQgYHBhZ2VgIGlucHV0cyB3aWxsIGJlIGlnbm9yZWRcIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBuZ09uQ2hhbmdlcygpIHtcclxuICAgICAgaWYgKHRoaXMuaG9zdCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgLyoqIFJlYnVpbGQgdGhlIHRyZWUgKi9cclxuICAgcHVibGljIHVwZGF0ZSgpIHtcclxuICAgICAgaWYgKHRoaXMuaG9zdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgXCJGYWlsZWQgdG8gcmVuZGVyIGxpbWJsZSB0cmVlLiBGYWlsdXJlIG9jY3VycmVkIGF0IHJvb3QuXCJcclxuICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsaW1ibGVUcmVlIHJlcXVpcmVzIGEgZGF0YSBvYmplY3RgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLmluaXQoXHJcbiAgICAgICAgIHRoaXMuaG9zdCxcclxuICAgICAgICAgdGhpcy5kYXRhLFxyXG4gICAgICAgICB0aGlzLm9wdGlvbnMsXHJcbiAgICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICB0aGlzLnBhZ2VcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5nbG9iYWxFdmVudHNTZXJ2aWNlLmFkZFNjcm9sbGluZygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ292ZXJIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2ZlciA9PT0gbnVsbCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gXCJtb3ZlXCI7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnbGVhdmVIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XHJcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgICEoY3VycmVudFRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8XHJcbiAgICAgICAgICEocmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8XHJcbiAgICAgICAgIGlzRWxlbWVudERlc2NlbmRhbnQoY3VycmVudFRhcmdldCwgcmVsYXRlZFRhcmdldCkgIT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgICAvL2V2ZW50IGNhbWUgZnJvbSBkZWVwZXIgaW4gdGhlIHRyZWUuIElnbm9yZSBpdC5cclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vTW91c2UgaGFzIGxlZnQgdGhlIHRyZWUsIHNvIGNsZWFyIHRoZSBkcm9wIHpvbmVzXHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJvcEhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgY29uc3QgZHJvcFpvbmUgPSB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZSgpO1xyXG4gICAgICBpZiAodGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCkgIT09IFwiZHJvcHBhYmxlXCIpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkcm9wWm9uZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGFjdGl2ZSBkcm9wIHpvbmUgYXQgZHJvcCBoYW5kbGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNvdXJjZUJyYW5jaCA9IHRoaXMuZHJhZ1N0YXRlU2VydmljZS5jYXB0dXJlKCk7XHJcbiAgICAgIGlmIChzb3VyY2VCcmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGN1cnJlbnQgYnJhbmNoIGluIGRyYWdlbmRIYW5kbGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UuZHJvcChzb3VyY2VCcmFuY2gsIGRyb3Bab25lLmdldENvb3JkaW5hdGVzKCkpO1xyXG4gICB9XHJcblxyXG4gICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICAoZHJhZ292ZXJOb0NoYW5nZURldGVjdCk9XCJkcmFnb3ZlckhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgIChkcmFnbGVhdmVOb0NoYW5nZURldGVjdCk9XCJkcmFnbGVhdmVIYW5kbGVyKCRldmVudClcIlxyXG4gICAoZHJvcCk9XCJkcm9wSGFuZGxlcigkZXZlbnQpXCJcclxuPlxyXG4gICA8bmctdGVtcGxhdGUgI2Ryb3Bab25lSW5zaWRlPjwvbmctdGVtcGxhdGU+XHJcbiAgIDxuZy10ZW1wbGF0ZSAjaG9zdD48L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuIl19

@@ -11,2 +11,4 @@ import { NgModule } from "@angular/core";

import { GlobalEventsService } from "./singletons/global-events.service";
import { DragoverNoChangeDetectDirective } from "./custom-event-bindings/dragover-no-change-detect.directive";
import { DragleaveNoChangeDetectDirective } from "./custom-event-bindings/dragleave-no-change-detect.directive";
import * as i0 from "@angular/core";

@@ -21,3 +23,5 @@ export class LimbleTreeModule {

LimbleTreeRootComponent,
LimbleTreePlaceholderComponent], imports: [CommonModule], exports: [LimbleTreeRootComponent] }); })();
LimbleTreePlaceholderComponent,
DragoverNoChangeDetectDirective,
DragleaveNoChangeDetectDirective], imports: [CommonModule], exports: [LimbleTreeRootComponent] }); })();
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeModule, [{

@@ -31,3 +35,5 @@ type: NgModule,

LimbleTreeRootComponent,
LimbleTreePlaceholderComponent
LimbleTreePlaceholderComponent,
DragoverNoChangeDetectDirective,
DragleaveNoChangeDetectDirective
],

@@ -39,2 +45,2 @@ imports: [CommonModule],

}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBY3pFLE1BQU0sT0FBTyxnQkFBZ0I7O29EQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixtQkFGZixDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLFlBRmxFLENBQUMsWUFBWSxDQUFDO3dGQUliLGdCQUFnQixtQkFWdkIseUJBQXlCO1FBQ3pCLGlCQUFpQjtRQUNqQix1QkFBdUI7UUFDdkIsdUJBQXVCO1FBQ3ZCLDhCQUE4QixhQUV2QixZQUFZLGFBQ1osdUJBQXVCO3VGQUd2QixnQkFBZ0I7Y0FaNUIsUUFBUTtlQUFDO2dCQUNQLFlBQVksRUFBRTtvQkFDWCx5QkFBeUI7b0JBQ3pCLGlCQUFpQjtvQkFDakIsdUJBQXVCO29CQUN2Qix1QkFBdUI7b0JBQ3ZCLDhCQUE4QjtpQkFDaEM7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUN2QixPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDbEMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUM7YUFDN0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9jb21wb25lbnQtY3JlYXRvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERyb3Bab25lQ29tcG9uZW50IH0gZnJvbSBcIi4vZHJvcC16b25lL2Ryb3Atem9uZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1ub2RlL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMaW1ibGVUcmVlUm9vdENvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtcGxhY2Vob2xkZXIvbGltYmxlLXRyZWUtcGxhY2Vob2xkZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEdsb2JhbEV2ZW50c1NlcnZpY2UgfSBmcm9tIFwiLi9zaW5nbGV0b25zL2dsb2JhbC1ldmVudHMuc2VydmljZVwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQsXHJcbiAgICAgIERyb3Bab25lQ29tcG9uZW50LFxyXG4gICAgICBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZVJvb3RDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudFxyXG4gICBdLFxyXG4gICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICAgZXhwb3J0czogW0xpbWJsZVRyZWVSb290Q29tcG9uZW50XSxcclxuICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q3JlYXRvclNlcnZpY2UsIERyYWdTdGF0ZVNlcnZpY2UsIEdsb2JhbEV2ZW50c1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaW1ibGVUcmVlTW9kdWxlIHt9XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOERBQThELENBQUM7O0FBZ0JoSCxNQUFNLE9BQU8sZ0JBQWdCOztvREFBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsbUJBRmYsQ0FBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxZQUZsRSxDQUFDLFlBQVksQ0FBQzt3RkFJYixnQkFBZ0IsbUJBWnZCLHlCQUF5QjtRQUN6QixpQkFBaUI7UUFDakIsdUJBQXVCO1FBQ3ZCLHVCQUF1QjtRQUN2Qiw4QkFBOEI7UUFDOUIsK0JBQStCO1FBQy9CLGdDQUFnQyxhQUV6QixZQUFZLGFBQ1osdUJBQXVCO3VGQUd2QixnQkFBZ0I7Y0FkNUIsUUFBUTtlQUFDO2dCQUNQLFlBQVksRUFBRTtvQkFDWCx5QkFBeUI7b0JBQ3pCLGlCQUFpQjtvQkFDakIsdUJBQXVCO29CQUN2Qix1QkFBdUI7b0JBQ3ZCLDhCQUE4QjtvQkFDOUIsK0JBQStCO29CQUMvQixnQ0FBZ0M7aUJBQ2xDO2dCQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDdkIsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO2FBQzdFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVJvb3RDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJhZ292ZXJOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnb3Zlci1uby1jaGFuZ2UtZGV0ZWN0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBEcmFnbGVhdmVOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnbGVhdmUtbm8tY2hhbmdlLWRldGVjdC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50LFxyXG4gICAgICBEcm9wWm9uZUNvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVSb290Q29tcG9uZW50LFxyXG4gICAgICBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQsXHJcbiAgICAgIERyYWdvdmVyTm9DaGFuZ2VEZXRlY3REaXJlY3RpdmUsXHJcbiAgICAgIERyYWdsZWF2ZU5vQ2hhbmdlRGV0ZWN0RGlyZWN0aXZlXHJcbiAgIF0sXHJcbiAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxyXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgRHJhZ1N0YXRlU2VydmljZSwgR2xvYmFsRXZlbnRzU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVNb2R1bGUge31cclxuIl19

@@ -28,90 +28,98 @@ import { Injectable } from "@angular/core";

export class GlobalEventsService {
constructor() {
this.globalDrag$ = fromEvent(document, "drag");
constructor(ngZone) {
this.ngZone = ngZone;
this.ngZone.runOutsideAngular(() => {
this.globalDrag$ = fromEvent(document, "drag");
});
this.scrolling = false;
}
addScrolling() {
if (this.globalDragSubscription !== undefined) {
return;
}
let viewPortHeight;
let scrollAreaSize;
let edgeTop;
let edgeBottom;
let isInTopScrollArea;
let isInBottomScrollArea;
let timer;
let scrollableDiv;
let relativeY;
this.globalDragSubscription = this.globalDrag$
.pipe(throttleTime(25), filter((event) => {
if (!event.target) {
return false;
}
scrollableDiv = getScrollParent(event.target);
viewPortHeight = scrollableDiv.clientHeight;
const viewPortWidth = scrollableDiv.clientWidth;
let relativeX;
if (window
.getComputedStyle(scrollableDiv)
.getPropertyValue("position")
.toLowerCase() === "fixed") {
relativeX = event.clientX;
relativeY = event.clientY;
}
else {
const boundingRect = scrollableDiv.getBoundingClientRect();
const scrollableDivAncestor = getScrollParent(scrollableDiv);
relativeX =
event.clientX -
(boundingRect.left + scrollableDivAncestor.scrollLeft);
relativeY =
event.clientY -
(boundingRect.top + scrollableDivAncestor.scrollTop);
}
if (relativeX < 0 ||
relativeX > viewPortWidth ||
relativeY < 0 ||
relativeY > viewPortHeight) {
//Outside of scrollable div
return false;
}
scrollAreaSize = Math.max(viewPortHeight * 0.1, 100);
edgeTop = scrollAreaSize;
edgeBottom = viewPortHeight - scrollAreaSize;
isInTopScrollArea = relativeY < edgeTop;
isInBottomScrollArea = relativeY > edgeBottom;
return isInTopScrollArea || isInBottomScrollArea;
}))
.subscribe(() => {
if (scrollableDiv === null) {
this.ngZone.runOutsideAngular(() => {
if (this.globalDragSubscription !== undefined) {
return;
}
const height = scrollableDiv.scrollHeight;
const maxScrollY = height - viewPortHeight;
const currentScrollY = scrollableDiv.scrollTop;
const canScrollUp = currentScrollY > 0;
const canScrollDown = currentScrollY < maxScrollY;
let nextScrollY;
const maxStep = 75;
if (isInTopScrollArea && canScrollUp) {
const intensity = (edgeTop - relativeY) / scrollAreaSize;
nextScrollY = currentScrollY - maxStep * intensity;
if (this.globalDrag$ === undefined) {
throw new Error("Could not get observable");
}
else if (isInBottomScrollArea && canScrollDown) {
const intensity = (relativeY - edgeBottom) / scrollAreaSize;
nextScrollY = currentScrollY + maxStep * intensity;
}
else {
return;
}
nextScrollY = Math.max(0, Math.min(maxScrollY, nextScrollY));
if (nextScrollY !== currentScrollY) {
scrollableDiv.scrollTo({ top: nextScrollY });
this.scrolling = true;
clearTimeout(timer);
timer = setTimeout(() => {
this.scrolling = false;
}, 100);
}
let viewPortHeight;
let scrollAreaSize;
let edgeTop;
let edgeBottom;
let isInTopScrollArea;
let isInBottomScrollArea;
let timer;
let scrollableDiv;
let relativeY;
this.globalDragSubscription = this.globalDrag$
.pipe(throttleTime(25), filter((event) => {
if (!event.target) {
return false;
}
scrollableDiv = getScrollParent(event.target);
viewPortHeight = scrollableDiv.clientHeight;
const viewPortWidth = scrollableDiv.clientWidth;
let relativeX;
if (window
.getComputedStyle(scrollableDiv)
.getPropertyValue("position")
.toLowerCase() === "fixed") {
relativeX = event.clientX;
relativeY = event.clientY;
}
else {
const boundingRect = scrollableDiv.getBoundingClientRect();
const scrollableDivAncestor = getScrollParent(scrollableDiv);
relativeX =
event.clientX -
(boundingRect.left + scrollableDivAncestor.scrollLeft);
relativeY =
event.clientY -
(boundingRect.top + scrollableDivAncestor.scrollTop);
}
if (relativeX < 0 ||
relativeX > viewPortWidth ||
relativeY < 0 ||
relativeY > viewPortHeight) {
//Outside of scrollable div
return false;
}
scrollAreaSize = Math.max(viewPortHeight * 0.1, 100);
edgeTop = scrollAreaSize;
edgeBottom = viewPortHeight - scrollAreaSize;
isInTopScrollArea = relativeY < edgeTop;
isInBottomScrollArea = relativeY > edgeBottom;
return isInTopScrollArea || isInBottomScrollArea;
}))
.subscribe(() => {
if (scrollableDiv === null) {
return;
}
const height = scrollableDiv.scrollHeight;
const maxScrollY = height - viewPortHeight;
const currentScrollY = scrollableDiv.scrollTop;
const canScrollUp = currentScrollY > 0;
const canScrollDown = currentScrollY < maxScrollY;
let nextScrollY;
const maxStep = 75;
if (isInTopScrollArea && canScrollUp) {
const intensity = (edgeTop - relativeY) / scrollAreaSize;
nextScrollY = currentScrollY - maxStep * intensity;
}
else if (isInBottomScrollArea && canScrollDown) {
const intensity = (relativeY - edgeBottom) / scrollAreaSize;
nextScrollY = currentScrollY + maxStep * intensity;
}
else {
return;
}
nextScrollY = Math.max(0, Math.min(maxScrollY, nextScrollY));
if (nextScrollY !== currentScrollY) {
scrollableDiv.scrollTo({ top: nextScrollY });
this.scrolling = true;
clearTimeout(timer);
timer = setTimeout(() => {
this.scrolling = false;
}, 100);
}
});
});

@@ -125,7 +133,7 @@ }

}
GlobalEventsService.ɵfac = function GlobalEventsService_Factory(t) { return new (t || GlobalEventsService)(); };
GlobalEventsService.ɵfac = function GlobalEventsService_Factory(t) { return new (t || GlobalEventsService)(i0.ɵɵinject(i0.NgZone)); };
GlobalEventsService.ɵprov = i0.ɵɵdefineInjectable({ token: GlobalEventsService, factory: GlobalEventsService.ɵfac });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GlobalEventsService, [{
type: Injectable
}], function () { return []; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWV2ZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9zaW5nbGV0b25zL2dsb2JhbC1ldmVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXRELFNBQVMsZUFBZSxDQUFDLE9BQW9COztJQUMxQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FDYixLQUF5QixFQUN6QixVQUE4QixFQUNYLEVBQUU7UUFDckIsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQzlDLE9BQU8sVUFBVSxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBa0IsRUFBRSxJQUFZLEVBQUUsRUFBRSxDQUNoRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FDckMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7UUFDeEIsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7UUFDMUIsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJ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VyxLQUFLLGNBQWMsRUFBRTtnQkFDakMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDdEIsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQixLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQzFCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNWO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU0sZUFBZTtRQUNuQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxTQUFTLEVBQUU7WUFDNUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVDO0lBQ0osQ0FBQzs7c0ZBekdTLG1CQUFtQjsyREFBbkIsbUJBQW1CLFdBQW5CLG1CQUFtQjt1RkFBbkIsbUJBQW1CO2NBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRocm90dGxlVGltZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xyXG4gICBjb25zdCByZWdleCA9IC8oYXV0b3xzY3JvbGwpLztcclxuICAgY29uc3QgcGFyZW50cyA9IChcclxuICAgICAgX25vZGU6IEhUTUxFbGVtZW50IHwgbnVsbCxcclxuICAgICAgcGFyZW50TGlzdDogQXJyYXk8SFRNTEVsZW1lbnQ+XHJcbiAgICk6IEFycmF5PEhUTUxFbGVtZW50PiA9PiB7XHJcbiAgICAgIGlmIChfbm9kZSA9PT0gbnVsbCB8fCBfbm9kZS5wYXJlbnROb2RlID09PSBudWxsKSB7XHJcbiAgICAgICAgIHJldHVybiBwYXJlbnRMaXN0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwYXJlbnRzKF9ub2RlLnBhcmVudEVsZW1lbnQsIHBhcmVudExpc3QuY29uY2F0KFtfbm9kZV0pKTtcclxuICAgfTtcclxuXHJcbiAgIGNvbnN0IHN0eWxlID0gKF9ub2RlOiBIVE1MRWxlbWVudCwgcHJvcDogc3RyaW5nKSA9PlxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKF9ub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xyXG4gICBjb25zdCBvdmVyZmxvdyA9IChfbm9kZTogSFRNTEVsZW1lbnQpID0+XHJcbiAgICAgIHN0eWxlKF9ub2RlLCBcIm92ZXJmbG93XCIpICtcclxuICAgICAgc3R5bGUoX25vZGUsIFwib3ZlcmZsb3cteVwiKSArXHJcbiAgICAgIHN0eWxlKF9ub2RlLCBcIm92ZXJmbG93LXhcIik7XHJcbiAgIGNvbnN0IHNjcm9sbCA9IChfbm9kZTogSFRNTEVsZW1lbnQpID0+IHJlZ2V4LnRlc3Qob3ZlcmZsb3coX25vZGUpKTtcclxuXHJcbiAgIGNvbnN0IHBhcmVudExpc3QgPSBwYXJlbnRzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgW10pO1xyXG4gICBmb3IgKGNvbnN0IHBhcmVudCBvZiBwYXJlbnRMaXN0KSB7XHJcbiAgICAgIGlmIChzY3JvbGwocGFyZW50KSkge1xyXG4gICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgICB9XHJcbiAgIH1cclxuICAgcmV0dXJuIChcclxuICAgICAgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQpID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxyXG4gICApO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBHbG9iYWxFdmVudHNTZXJ2aWNlIHtcclxuICAgcHJpdmF0ZSBnbG9iYWxEcmFnJDogT2JzZXJ2YWJsZTxEcmFnRXZlbnQ+O1xyXG4gICBwcml2YXRlIGdsb2JhbERyYWdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHNjcm9sbGluZzogYm9vbGVhbjtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICB0aGlzLmdsb2JhbERyYWckID0gZnJvbUV2ZW50PERyYWdFdmVudD4oZG9jdW1lbnQsIFwiZHJhZ1wiKTtcclxuICAgICAgdGhpcy5zY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGFkZFNjcm9sbGluZygpIHtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsRHJhZ1N1YnNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBsZXQgdmlld1BvcnRIZWlnaHQ6IG51bWJlcjtcclxuICAgICAgbGV0IHNjcm9sbEFyZWFTaXplOiBudW1iZXI7XHJcbiAgICAgIGxldCBlZGdlVG9wOiBudW1iZXI7XHJcbiAgICAgIGxldCBlZGdlQm90dG9tOiBudW1iZXI7XHJcbiAgICAgIGxldCBpc0luVG9wU2Nyb2xsQXJlYTogYm9vbGVhbjtcclxuICAgICAgbGV0IGlzSW5Cb3R0b21TY3JvbGxBcmVhOiBib29sZWFuO1xyXG4gICAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xyXG4gICAgICBsZXQgc2Nyb2xsYWJsZURpdjogSFRNTEVsZW1lbnQgfCBudWxsO1xyXG4gICAgICBsZXQgcmVsYXRpdmVZOiBudW1iZXI7XHJcbiAgICAgIHRoaXMuZ2xvYmFsRHJhZ1N1YnNjcmlwdGlvbiA9IHRoaXMuZ2xvYmFsRHJhZyRcclxuICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIHRocm90dGxlVGltZSgyNSksXHJcbiAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIHNjcm9sbGFibGVEaXYgPSBnZXRTY3JvbGxQYXJlbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgdmlld1BvcnRIZWlnaHQgPSBzY3JvbGxhYmxlRGl2LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9IHNjcm9sbGFibGVEaXYuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgICAgICAgIGxldCByZWxhdGl2ZVg6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB3aW5kb3dcclxuICAgICAgICAgICAgICAgICAgICAgLmdldENvbXB1dGVkU3R5bGUoc2Nyb2xsYWJsZURpdilcclxuICAgICAgICAgICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJwb3NpdGlvblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKSA9PT0gXCJmaXhlZFwiXHJcbiAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZVggPSBldmVudC5jbGllbnRYO1xyXG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZVkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSBzY3JvbGxhYmxlRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRGl2QW5jZXN0b3IgPSBnZXRTY3JvbGxQYXJlbnQoc2Nyb2xsYWJsZURpdik7XHJcbiAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWCA9XHJcbiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNsaWVudFggLVxyXG4gICAgICAgICAgICAgICAgICAgICAoYm91bmRpbmdSZWN0LmxlZnQgKyBzY3JvbGxhYmxlRGl2QW5jZXN0b3Iuc2Nyb2xsTGVmdCk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWSA9XHJcbiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNsaWVudFkgLVxyXG4gICAgICAgICAgICAgICAgICAgICAoYm91bmRpbmdSZWN0LnRvcCArIHNjcm9sbGFibGVEaXZBbmNlc3Rvci5zY3JvbGxUb3ApO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgcmVsYXRpdmVYIDwgMCB8fFxyXG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZVggPiB2aWV3UG9ydFdpZHRoIHx8XHJcbiAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWSA8IDAgfHxcclxuICAgICAgICAgICAgICAgICAgcmVsYXRpdmVZID4gdmlld1BvcnRIZWlnaHRcclxuICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vT3V0c2lkZSBvZiBzY3JvbGxhYmxlIGRpdlxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgc2Nyb2xsQXJlYVNpemUgPSBNYXRoLm1heCh2aWV3UG9ydEhlaWdodCAqIDAuMSwgMTAwKTtcclxuICAgICAgICAgICAgICAgZWRnZVRvcCA9IHNjcm9sbEFyZWFTaXplO1xyXG4gICAgICAgICAgICAgICBlZGdlQm90dG9tID0gdmlld1BvcnRIZWlnaHQgLSBzY3JvbGxBcmVhU2l6ZTtcclxuICAgICAgICAgICAgICAgaXNJblRvcFNjcm9sbEFyZWEgPSByZWxhdGl2ZVkgPCBlZGdlVG9wO1xyXG4gICAgICAgICAgICAgICBpc0luQm90dG9tU2Nyb2xsQXJlYSA9IHJlbGF0aXZlWSA+IGVkZ2VCb3R0b207XHJcbiAgICAgICAgICAgICAgIHJldHVybiBpc0luVG9wU2Nyb2xsQXJlYSB8fCBpc0luQm90dG9tU2Nyb2xsQXJlYTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgKVxyXG4gICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVEaXYgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHNjcm9sbGFibGVEaXYuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBtYXhTY3JvbGxZID0gaGVpZ2h0IC0gdmlld1BvcnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxZID0gc2Nyb2xsYWJsZURpdi5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhblNjcm9sbFVwID0gY3VycmVudFNjcm9sbFkgPiAwO1xyXG4gICAgICAgICAgICBjb25zdCBjYW5TY3JvbGxEb3duID0gY3VycmVudFNjcm9sbFkgPCBtYXhTY3JvbGxZO1xyXG4gICAgICAgICAgICBsZXQgbmV4dFNjcm9sbFk6IG51bWJlcjtcclxuICAgICAgICAgICAgY29uc3QgbWF4U3RlcCA9IDc1O1xyXG4gICAgICAgICAgICBpZiAoaXNJblRvcFNjcm9sbEFyZWEgJiYgY2FuU2Nyb2xsVXApIHtcclxuICAgICAgICAgICAgICAgY29uc3QgaW50ZW5zaXR5ID0gKGVkZ2VUb3AgLSByZWxhdGl2ZVkpIC8gc2Nyb2xsQXJlYVNpemU7XHJcbiAgICAgICAgICAgICAgIG5leHRTY3JvbGxZID0gY3VycmVudFNjcm9sbFkgLSBtYXhTdGVwICogaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW5Cb3R0b21TY3JvbGxBcmVhICYmIGNhblNjcm9sbERvd24pIHtcclxuICAgICAgICAgICAgICAgY29uc3QgaW50ZW5zaXR5ID0gKHJlbGF0aXZlWSAtIGVkZ2VCb3R0b20pIC8gc2Nyb2xsQXJlYVNpemU7XHJcbiAgICAgICAgICAgICAgIG5leHRTY3JvbGxZID0gY3VycmVudFNjcm9sbFkgKyBtYXhTdGVwICogaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV4dFNjcm9sbFkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhTY3JvbGxZLCBuZXh0U2Nyb2xsWSkpO1xyXG4gICAgICAgICAgICBpZiAobmV4dFNjcm9sbFkgIT09IGN1cnJlbnRTY3JvbGxZKSB7XHJcbiAgICAgICAgICAgICAgIHNjcm9sbGFibGVEaXYuc2Nyb2xsVG8oeyB0b3A6IG5leHRTY3JvbGxZIH0pO1xyXG4gICAgICAgICAgICAgICB0aGlzLnNjcm9sbGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZW1vdmVTY3JvbGxpbmcoKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbERyYWdTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aGlzLmdsb2JhbERyYWdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICB9XHJcbn1cclxuIl19
}], function () { return [{ type: i0.NgZone }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWV2ZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9zaW5nbGV0b25zL2dsb2JhbC1ldmVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXRELFNBQVMsZUFBZSxDQUFDLE9BQW9COztJQUMxQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FDYixLQUF5QixFQUN6QixVQUE4QixFQUNYLEVBQUU7UUFDckIsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQzlDLE9BQU8sVUFBVSxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBa0IsRUFBRSxJQUFZLEVBQUUsRUFBRSxDQUNoRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FDckMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7UUFDeEIsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7UUFDMUIsS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJ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LElBQUksb0JBQW9CLElBQUksYUFBYSxFQUFFO29CQUMvQyxNQUFNLFNBQVMsR0FBRyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUM7b0JBQzVELFdBQVcsR0FBRyxjQUFjLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztpQkFDckQ7cUJBQU07b0JBQ0osT0FBTztpQkFDVDtnQkFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxXQUFXLEtBQUssY0FBYyxFQUFFO29CQUNqQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUN0QixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BCLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNWO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxlQUFlO1FBQ25CLElBQUksSUFBSSxDQUFDLHNCQUFzQixLQUFLLFNBQVMsRUFBRTtZQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUM7SUFDSixDQUFDOztzRkFsSFMsbUJBQW1COzJEQUFuQixtQkFBbUIsV0FBbkIsbUJBQW1CO3VGQUFuQixtQkFBbUI7Y0FEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZmlsdGVyLCB0aHJvdHRsZVRpbWUgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcclxuICAgY29uc3QgcmVnZXggPSAvKGF1dG98c2Nyb2xsKS87XHJcbiAgIGNvbnN0IHBhcmVudHMgPSAoXHJcbiAgICAgIF9ub2RlOiBIVE1MRWxlbWVudCB8IG51bGwsXHJcbiAgICAgIHBhcmVudExpc3Q6IEFycmF5PEhUTUxFbGVtZW50PlxyXG4gICApOiBBcnJheTxIVE1MRWxlbWVudD4gPT4ge1xyXG4gICAgICBpZiAoX25vZGUgPT09IG51bGwgfHwgX25vZGUucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICByZXR1cm4gcGFyZW50TGlzdDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGFyZW50cyhfbm9kZS5wYXJlbnRFbGVtZW50LCBwYXJlbnRMaXN0LmNvbmNhdChbX25vZGVdKSk7XHJcbiAgIH07XHJcblxyXG4gICBjb25zdCBzdHlsZSA9IChfbm9kZTogSFRNTEVsZW1lbnQsIHByb3A6IHN0cmluZykgPT5cclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShfbm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcclxuICAgY29uc3Qgb3ZlcmZsb3cgPSAoX25vZGU6IEhUTUxFbGVtZW50KSA9PlxyXG4gICAgICBzdHlsZShfbm9kZSwgXCJvdmVyZmxvd1wiKSArXHJcbiAgICAgIHN0eWxlKF9ub2RlLCBcIm92ZXJmbG93LXlcIikgK1xyXG4gICAgICBzdHlsZShfbm9kZSwgXCJvdmVyZmxvdy14XCIpO1xyXG4gICBjb25zdCBzY3JvbGwgPSAoX25vZGU6IEhUTUxFbGVtZW50KSA9PiByZWdleC50ZXN0KG92ZXJmbG93KF9ub2RlKSk7XHJcblxyXG4gICBjb25zdCBwYXJlbnRMaXN0ID0gcGFyZW50cyhlbGVtZW50LnBhcmVudEVsZW1lbnQsIFtdKTtcclxuICAgZm9yIChjb25zdCBwYXJlbnQgb2YgcGFyZW50TGlzdCkge1xyXG4gICAgICBpZiAoc2Nyb2xsKHBhcmVudCkpIHtcclxuICAgICAgICAgcmV0dXJuIHBhcmVudDtcclxuICAgICAgfVxyXG4gICB9XHJcbiAgIHJldHVybiAoXHJcbiAgICAgIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IGFzIEhUTUxFbGVtZW50KSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcclxuICAgKTtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgR2xvYmFsRXZlbnRzU2VydmljZSB7XHJcbiAgIHByaXZhdGUgZ2xvYmFsRHJhZyQ6IE9ic2VydmFibGU8RHJhZ0V2ZW50PiB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSBnbG9iYWxEcmFnU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyBzY3JvbGxpbmc6IGJvb2xlYW47XHJcblxyXG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lKSB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICAgdGhpcy5nbG9iYWxEcmFnJCA9IGZyb21FdmVudDxEcmFnRXZlbnQ+KGRvY3VtZW50LCBcImRyYWdcIik7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNjcm9sbGluZyA9IGZhbHNlO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgYWRkU2Nyb2xsaW5nKCkge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgIGlmICh0aGlzLmdsb2JhbERyYWdTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgaWYgKHRoaXMuZ2xvYmFsRHJhZyQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IG9ic2VydmFibGVcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgbGV0IHZpZXdQb3J0SGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgIGxldCBzY3JvbGxBcmVhU2l6ZTogbnVtYmVyO1xyXG4gICAgICAgICBsZXQgZWRnZVRvcDogbnVtYmVyO1xyXG4gICAgICAgICBsZXQgZWRnZUJvdHRvbTogbnVtYmVyO1xyXG4gICAgICAgICBsZXQgaXNJblRvcFNjcm9sbEFyZWE6IGJvb2xlYW47XHJcbiAgICAgICAgIGxldCBpc0luQm90dG9tU2Nyb2xsQXJlYTogYm9vbGVhbjtcclxuICAgICAgICAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcclxuICAgICAgICAgbGV0IHNjcm9sbGFibGVEaXY6IEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgICAgICAgbGV0IHJlbGF0aXZlWTogbnVtYmVyO1xyXG4gICAgICAgICB0aGlzLmdsb2JhbERyYWdTdWJzY3JpcHRpb24gPSB0aGlzLmdsb2JhbERyYWckXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICB0aHJvdHRsZVRpbWUoMjUpLFxyXG4gICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlRGl2ID0gZ2V0U2Nyb2xsUGFyZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgIHZpZXdQb3J0SGVpZ2h0ID0gc2Nyb2xsYWJsZURpdi5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdQb3J0V2lkdGggPSBzY3JvbGxhYmxlRGl2LmNsaWVudFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcmVsYXRpdmVYOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgd2luZG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDb21wdXRlZFN0eWxlKHNjcm9sbGFibGVEaXYpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwicG9zaXRpb25cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCkgPT09IFwiZml4ZWRcIlxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVYID0gZXZlbnQuY2xpZW50WDtcclxuICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVZID0gZXZlbnQuY2xpZW50WTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gc2Nyb2xsYWJsZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZURpdkFuY2VzdG9yID0gZ2V0U2Nyb2xsUGFyZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlRGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNsaWVudFggLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYm91bmRpbmdSZWN0LmxlZnQgKyBzY3JvbGxhYmxlRGl2QW5jZXN0b3Iuc2Nyb2xsTGVmdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNsaWVudFkgLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYm91bmRpbmdSZWN0LnRvcCArIHNjcm9sbGFibGVEaXZBbmNlc3Rvci5zY3JvbGxUb3ApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVYIDwgMCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVggPiB2aWV3UG9ydFdpZHRoIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWSA8IDAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVZID4gdmlld1BvcnRIZWlnaHRcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIC8vT3V0c2lkZSBvZiBzY3JvbGxhYmxlIGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsQXJlYVNpemUgPSBNYXRoLm1heCh2aWV3UG9ydEhlaWdodCAqIDAuMSwgMTAwKTtcclxuICAgICAgICAgICAgICAgICAgZWRnZVRvcCA9IHNjcm9sbEFyZWFTaXplO1xyXG4gICAgICAgICAgICAgICAgICBlZGdlQm90dG9tID0gdmlld1BvcnRIZWlnaHQgLSBzY3JvbGxBcmVhU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgaXNJblRvcFNjcm9sbEFyZWEgPSByZWxhdGl2ZVkgPCBlZGdlVG9wO1xyXG4gICAgICAgICAgICAgICAgICBpc0luQm90dG9tU2Nyb2xsQXJlYSA9IHJlbGF0aXZlWSA+IGVkZ2VCb3R0b207XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc0luVG9wU2Nyb2xsQXJlYSB8fCBpc0luQm90dG9tU2Nyb2xsQXJlYTtcclxuICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVEaXYgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHNjcm9sbGFibGVEaXYuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgICAgICAgICAgICBjb25zdCBtYXhTY3JvbGxZID0gaGVpZ2h0IC0gdmlld1BvcnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxZID0gc2Nyb2xsYWJsZURpdi5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGNhblNjcm9sbFVwID0gY3VycmVudFNjcm9sbFkgPiAwO1xyXG4gICAgICAgICAgICAgICBjb25zdCBjYW5TY3JvbGxEb3duID0gY3VycmVudFNjcm9sbFkgPCBtYXhTY3JvbGxZO1xyXG4gICAgICAgICAgICAgICBsZXQgbmV4dFNjcm9sbFk6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgY29uc3QgbWF4U3RlcCA9IDc1O1xyXG4gICAgICAgICAgICAgICBpZiAoaXNJblRvcFNjcm9sbEFyZWEgJiYgY2FuU2Nyb2xsVXApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZW5zaXR5ID0gKGVkZ2VUb3AgLSByZWxhdGl2ZVkpIC8gc2Nyb2xsQXJlYVNpemU7XHJcbiAgICAgICAgICAgICAgICAgIG5leHRTY3JvbGxZID0gY3VycmVudFNjcm9sbFkgLSBtYXhTdGVwICogaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW5Cb3R0b21TY3JvbGxBcmVhICYmIGNhblNjcm9sbERvd24pIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZW5zaXR5ID0gKHJlbGF0aXZlWSAtIGVkZ2VCb3R0b20pIC8gc2Nyb2xsQXJlYVNpemU7XHJcbiAgICAgICAgICAgICAgICAgIG5leHRTY3JvbGxZID0gY3VycmVudFNjcm9sbFkgKyBtYXhTdGVwICogaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgbmV4dFNjcm9sbFkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhTY3JvbGxZLCBuZXh0U2Nyb2xsWSkpO1xyXG4gICAgICAgICAgICAgICBpZiAobmV4dFNjcm9sbFkgIT09IGN1cnJlbnRTY3JvbGxZKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVEaXYuc2Nyb2xsVG8oeyB0b3A6IG5leHRTY3JvbGxZIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVtb3ZlU2Nyb2xsaW5nKCkge1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWxEcmFnU3Vic2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhpcy5nbG9iYWxEcmFnU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgfVxyXG59XHJcbiJdfQ==

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

import { AfterViewInit, EventEmitter, OnChanges, OnDestroy, ViewContainerRef } from "@angular/core";
import { AfterViewInit, ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, ViewContainerRef } from "@angular/core";
import { BehaviorSubject } from "rxjs";

@@ -14,2 +14,3 @@ import { DropZoneService } from "./drop-zone.service";

private readonly globalEventsService;
private readonly changeDetectorRef;
data: LimbleTreeData | undefined;

@@ -26,3 +27,3 @@ options: LimbleTreeOptions | undefined;

private readonly dropSubscription;
constructor(treeService: TreeService, dropZoneService: DropZoneService, dragStateService: DragStateService, globalEventsService: GlobalEventsService);
constructor(treeService: TreeService, dropZoneService: DropZoneService, dragStateService: DragStateService, globalEventsService: GlobalEventsService, changeDetectorRef: ChangeDetectorRef);
ngAfterViewInit(): void;

@@ -29,0 +30,0 @@ ngOnChanges(): void;

@@ -7,6 +7,8 @@ import * as i0 from "@angular/core";

import * as i5 from "./limble-tree-placeholder/limble-tree-placeholder.component";
import * as i6 from "@angular/common";
import * as i6 from "./custom-event-bindings/dragover-no-change-detect.directive";
import * as i7 from "./custom-event-bindings/dragleave-no-change-detect.directive";
import * as i8 from "@angular/common";
export declare class LimbleTreeModule {
static ɵmod: i0.ɵɵNgModuleDefWithMeta<LimbleTreeModule, [typeof i1.LimbleTreeBranchComponent, typeof i2.DropZoneComponent, typeof i3.LimbleTreeNodeComponent, typeof i4.LimbleTreeRootComponent, typeof i5.LimbleTreePlaceholderComponent], [typeof i6.CommonModule], [typeof i4.LimbleTreeRootComponent]>;
static ɵmod: i0.ɵɵNgModuleDefWithMeta<LimbleTreeModule, [typeof i1.LimbleTreeBranchComponent, typeof i2.DropZoneComponent, typeof i3.LimbleTreeNodeComponent, typeof i4.LimbleTreeRootComponent, typeof i5.LimbleTreePlaceholderComponent, typeof i6.DragoverNoChangeDetectDirective, typeof i7.DragleaveNoChangeDetectDirective], [typeof i8.CommonModule], [typeof i4.LimbleTreeRootComponent]>;
static ɵinj: i0.ɵɵInjectorDef<LimbleTreeModule>;
}

@@ -0,7 +1,9 @@

import { NgZone } from "@angular/core";
import * as i0 from "@angular/core";
export declare class GlobalEventsService {
private readonly ngZone;
private globalDrag$;
private globalDragSubscription;
scrolling: boolean;
constructor();
constructor(ngZone: NgZone);
addScrolling(): void;

@@ -8,0 +10,0 @@ removeScrolling(): void;

{
"name": "@limble/limble-tree",
"version": "0.8.1",
"version": "0.9.0",
"peerDependencies": {

@@ -5,0 +5,0 @@ "@angular/common": "^11.2.3",

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 too big to display

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