Socket
Socket
Sign inDemoInstall

@limble/limble-tree

Package Overview
Dependencies
5
Maintainers
2
Versions
50
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.9.2 to 0.10.0

esm2015/lib/classes/Branch.js

4

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

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

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

@@ -15,3 +15,3 @@ Copyright (c) Microsoft Corporation.

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 s(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 l(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(s(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 l=s(i.value,2),d=l[0],c=l[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 s=i.value;if(void 0===(n=n.getChild(s)))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 s=i.value;if(void 0===(n=n.children[s]))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 s=i.value;n.appendChild(s.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 s=i.value;n.appendChild(v.fromBranch(s)).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()),l=i.next();!l.done;l=i.next()){var d=s(l.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{l&&!l.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 l=s(i.value,2),d=l[0];if(l[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 l=s(i.value,2),d=l[0],c=l[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;if(this.tree=e,this.treeOptions=t,this.reset(),0!==this.dropZoneStack.length){try{for(var o=a(this.dropZoneStack),i=o.next();!i.done;i=o.next()){var s=i.value;this.dropZoneInventory.push(s.dropZone),this.addToTree(s.dropZone,s.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.restart=function(){this.reset(),this.dropZoneStack.length=0},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 s=a(this.tempFamilies[1].members),l=s.next();!l.done;l=s.next()){l.value.data.family=this.tempFamilies[1]}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}this.tempFamilies=[]}},e.prototype.showDropZoneFamily=function(e,t){var r,n,o,i,s,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. Coordinates: "+JSON.stringify(e));var p=c.data.family;if(!0===t.joinFamilies){var u=l(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:l(p.members)};this.showDropZone(p.founder,!0);try{for(var y=a(p.members.sort(m)),w=y.next();!w.done;w=y.next()){(E=w.value).data.family=g,E!==p.founder&&(null===this.activeDropZone?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,this.showDropZone(p.founder,!0);try{for(var S=a(p.members.sort(m)),x=S.next();!x.done;x=S.next()){var E;(E=x.value)!==p.founder&&(null===this.activeDropZone?this.showDropZone(E,!0):this.showDropZone(E))}}catch(e){s={error:e}}finally{try{x&&!x.done&&(d=S.return)&&d.call(S)}finally{if(s)throw s.error}}}if(!0===t.activateLowestInsteadOfFounder){var I=l(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.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=l(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,s=l(this.dropZoneInventory),d=s.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(),s=t.getCoordinates(),l=Math.max(a.length,s.length),d=0;d<l;d++){if((null!==(r=a[d])&&void 0!==r?r:-1)>(null!==(n=s[d])&&void 0!==n?n:-1))return-1;if((null!==(o=a[d])&&void 0!==o?o:-1)<(null!==(i=s[d])&&void 0!==i?i:-1))return 1}return 0})),c=function(e){if(!s.includes(e))return"continue";var t={founder:e,members:[]};e.data.family=t;for(var r=l(e.getCoordinates());r.length>0;){var n=s.findIndex((function(e){return h(e.getCoordinates(),r)}));if(-1!==n){var o=s.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(s.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),s.splice(s.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!==s.length){var w="";try{for(var b=a(s),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]))},s=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},l=function(e){return o.test(function(e){return s(e,"overflow")+s(e,"overflow-y")+s(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(l(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,s,l,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,l=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>l||c<0||c>t)&&(r=Math.max(.1*t,100),s=c>(i=t-r),(a=c<(n=r))||s)}))).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(!s||!(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(l),l=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,s=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=l(this.branch.getCoordinates());this.dropZoneService.showDropZoneFamily(h,{activateLowestInsteadOfFounder:!0})}else if(e.offsetY<s&&void 0!==this.dropZoneInside&&(null===(r=this.dropZoneService.getActiveDropZone())||void 0===r?void 0:r.data.container)!==this.dropZoneInside){(h=l(this.branch.getCoordinates())).push(0),this.dropZoneService.showDropZoneFamily(h)}else if(e.offsetY>=s&&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=l(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=l(n);if(this.dropZoneService.addDropZone(o,this.dropZoneAbove),!0!==this.treeService.getPlaceholder()){var i=l(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.restart(),this.placeholder=!1,this.treeModel=new u(null),0===this.treeData.length)this.usePlaceholder();else{try{for(var i=a(this.treeData),s=i.next();!s.done;s=i.next()){var l=s.value,d=new u(l);this.treeModel.appendChild(d)}}catch(t){e={error:t}}finally{try{s&&!s.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}}}var p=this.treeData;setTimeout((function(){if(void 0===o.treeOptions)throw new Error("TreeModel not initialized");o.changes$.next(null),o.treeData===p&&o.dropZoneService.init(o.treeModel,o.treeOptions)}))},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:[]),s=i.next();!s.done;s=i.next()){var l=s.value,d=new u(l);t.appendChild(d),this.componentCreatorService.appendComponent(H,e).instance.branch=d}}catch(e){r={error:e}}finally{try{s&&!s.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,s;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!==(s=e.listMode)&&void 0!==s&&s,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=l(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 s=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(s)&&(s=0);var d=s+this.treeOptions.itemsPerPage;(r=this.uncutData).splice.apply(r,l([s,this.treeOptions.itemsPerPage],this.treeData)),this.treeData=this.uncutData.slice(s,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 s=i.value;n.nodes.push(this.rebuildBranch(s))}}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 B=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}();B.ɵfac=function(e){return new(e||B)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},B.ɵdir=t.ɵɵdefineDirective({type:B,selectors:[["","dragleaveNoChangeDetect",""]],inputs:{dragleaveEventThrottle:"dragleaveEventThrottle"},outputs:{dragleaveNoChangeDetect:"dragleaveNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(B,[{type:t.Directive,args:[{selector:"[dragleaveNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragleaveEventThrottle:[{type:t.Input}],dragleaveNoChangeDetect:[{type:t.Output}]});var z=["host"],Q=["dropZoneInside"];function _(e,t){}function k(e,t){}var q=function(){function e(e,n,o,i,a){var s=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(){s.treeChange.emit()})),this.dropSubscription=this.treeService.drops$.subscribe((function(e){s.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(z,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,B],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,B],imports:[n.CommonModule],exports:[q]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(L,[{type:t.NgModule,args:[{declarations:[S,c,H,q,V,I,B],imports:[n.CommonModule],exports:[q],providers:[y,g,E]}]}],null,null),e.LimbleTreeModule=L,e.LimbleTreeRootComponent=q,Object.defineProperty(e,"__esModule",{value:!0})}));
***************************************************************************** */Object.create;function i(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 a(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(a(arguments[t]));return e}Object.create;function l(e,t){var r,n;if(e.length!==t.length)return!1;try{for(var o=i(e.entries()),s=o.next();!s.done;s=o.next()){var d=a(s.value,2),c=d[0],p=d[1],h=t[c];if(p instanceof Array&&h instanceof Array){if(!l(p,h))return!1}else if(p!==h)return!1}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!0}function d(e,t){return void 0!==e&&(!0===e.allowNesting||"function"==typeof e.allowNesting&&void 0!==t&&!0===e.allowNesting(t))}var c=function(){function e(e,t){this.parentCoordinates=e,this.insertIndex=t}return e.prototype.getFullInsertCoordinates=function(){return s(this.parentCoordinates,[this.insertIndex])},e}(),p=function(){function e(e,t){this.location=new c(e,t),this.visible=!1,this.active=!1,this.commChannel=new r.Subject}return e.dropZoneLocationsAreEqual=function(e,t){return l(e.getFullInsertCoordinates(),t.getFullInsertCoordinates())},e.prototype.isVisible=function(e){return void 0===e&&(e=void 0),void 0!==e&&(this.visible=e,void 0!==this.commChannel&&this.commChannel.next("checkVisible"),!1===this.visible&&this.isActive(!1)),this.visible},e.prototype.isActive=function(e){return void 0===e&&(e=void 0),void 0!==e&&(this.active=e,void 0!==this.commChannel&&this.commChannel.next("checkActive")),this.active},e.prototype.getLocation=function(){return this.location},e.prototype.getFamily=function(){return this.family},e.prototype.setFamily=function(e){this.family=e},e.prototype.getCommChannel=function(){return this.commChannel},e.prototype.getFullInsertCoordinates=function(){return this.location.getFullInsertCoordinates()},e}(),h=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}();function u(e,t){var r=e.getFullInsertCoordinates(),n=t.getFullInsertCoordinates();return r.length>n.length?-1:r.length<n.length?1:0}h.ɵfac=function(e){return new(e||h)},h.ɵprov=t.ɵɵdefineInjectable({token:h,factory:h.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(h,[{type:t.Injectable}],(function(){return[]}),null);var v=function(){function e(e){this.dragStateService=e,this.dropZoneInventory=[],this.dropZoneFamilies=[],this.visibleFamily=null,this.activeDropZone=null,this.tempFamilies=[],this.setActiveDropZone(null)}return e.prototype.addDropZone=function(e){return void 0===this.dropZoneInventory.find((function(t){return p.dropZoneLocationsAreEqual(t,e)}))&&(this.dropZoneInventory.push(e),!0)},e.prototype.clear=function(){var e,t;if(null!==this.visibleFamily){try{for(var r=i(this.visibleFamily.members),n=r.next();!n.done;n=r.next()){n.value.isVisible(!1)}}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){this.tree=e,this.treeOptions=t,this.reset(),this.assignFamilies()},e.prototype.reset=function(){this.clear(),this.dropZoneFamilies.length=0},e.prototype.restart=function(){this.reset(),this.dropZoneInventory.length=0},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=i(this.tempFamilies[0].members),a=o.next();!a.done;a=o.next()){a.value.setFamily(this.tempFamilies[0])}}catch(t){e={error:t}}finally{try{a&&!a.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 s=i(this.tempFamilies[1].members),l=s.next();!l.done;l=s.next()){l.value.setFamily(this.tempFamilies[1])}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}this.tempFamilies=[]}},e.prototype.showDropZoneFamily=function(e,t){var r,n,o,a,l,d;if(void 0===t&&(t={joinFamilies:!1,activateLowestInsteadOfFounder:!1}),null===this.activeDropZone||!p.dropZoneLocationsAreEqual(this.activeDropZone,e)){null===this.visibleFamily&&null===this.activeDropZone||this.clear();var h=this.dropZoneInventory.find((function(t){return p.dropZoneLocationsAreEqual(t,e)}));if(void 0===h)throw new Error("Could not find drop zone to show. location: "+JSON.stringify(e.getLocation()));var v=h.getFamily();if(!0===t.joinFamilies){var f=e.getLocation(),g=new c(s(f.parentCoordinates),f.insertIndex+1),y=this.dropZoneInventory.find((function(e){return p.dropZoneLocationsAreEqual(e,g)}));if(void 0===y)throw new Error("Could not find drop zone to show");var m=y.getFamily();if(void 0===v||void 0===m)throw new Error("No family");var b={founder:v.founder,members:s(v.members)};this.showDropZone(v.founder,!0);try{for(var w=i(v.members.sort(u)),D=w.next();!D.done;D=w.next()){(M=D.value).setFamily(b),M!==v.founder&&(null===this.activeDropZone?this.showDropZone(M,!0):this.showDropZone(M))}}catch(e){r={error:e}}finally{try{D&&!D.done&&(n=w.return)&&n.call(w)}finally{if(r)throw r.error}}try{for(var C=i(m.members),Z=C.next();!Z.done;Z=C.next()){(M=Z.value).setFamily(b),M.getLocation().parentCoordinates.length<y.getLocation().parentCoordinates.length&&(b.members.push(M),this.showDropZone(M))}}catch(e){o={error:e}}finally{try{Z&&!Z.done&&(a=C.return)&&a.call(C)}finally{if(o)throw o.error}}this.tempFamilies=[v,m];var I=this.dropZoneFamilies.indexOf(v);this.dropZoneFamilies.splice(I,1);var S=this.dropZoneFamilies.indexOf(m);this.dropZoneFamilies.splice(S,1),this.dropZoneFamilies.push(b),this.visibleFamily=b}else{if(void 0===v)throw new Error("No family");this.visibleFamily=v,this.showDropZone(v.founder,!0);try{for(var x=i(v.members.sort(u)),E=x.next();!E.done;E=x.next()){var M;(M=E.value)!==v.founder&&(null===this.activeDropZone?this.showDropZone(M,!0):this.showDropZone(M))}}catch(e){l={error:e}}finally{try{E&&!E.done&&(d=x.return)&&d.call(x)}finally{if(l)throw l.error}}}if(!0===t.activateLowestInsteadOfFounder){var F=s(this.visibleFamily.members).sort(u).pop();if(void 0===F)throw new Error("Could not get lowest member");this.swapActiveDropZone(F)}}},e.prototype.swapActiveDropZone=function(e){if(null===this.visibleFamily)throw new Error("No visible family available for swapping");if(-1===this.visibleFamily.members.findIndex((function(t){return t===e})))throw new Error("failed to swap active drop zone");this.setActiveDropZone(e)},e.prototype.assignFamilies=function(){var e,t,r,n,o,a,d=s(this.dropZoneInventory),c=d.filter((function(e){var t=e.getLocation();return 0===t.insertIndex&&t.parentCoordinates.length>0})).sort((function(e,t){for(var r,n,o,i,a=e.getFullInsertCoordinates(),s=t.getFullInsertCoordinates(),l=Math.max(a.length,s.length),d=0;d<l;d++){if((null!==(r=a[d])&&void 0!==r?r:-1)>(null!==(n=s[d])&&void 0!==n?n:-1))return-1;if((null!==(o=a[d])&&void 0!==o?o:-1)<(null!==(i=s[d])&&void 0!==i?i:-1))return 1}return 0})),p=function(e){if(!d.includes(e))return"continue";var t={founder:e,members:[]};e.setFamily(t);for(var r=s(e.getFullInsertCoordinates());r.length>0;){var n=d.findIndex((function(e){return l(e.getFullInsertCoordinates(),r)}));if(-1!==n){var o=d.splice(n,1)[0];t.members.push(o),o.setFamily(t)}r.pop(),r[r.length-1]++}h.dropZoneFamilies.push(t)},h=this;try{for(var u=i(c),v=u.next();!v.done;v=u.next()){p(y=v.value)}}catch(t){e={error:t}}finally{try{v&&!v.done&&(t=u.return)&&t.call(u)}finally{if(e)throw e.error}}try{for(var f=i(d.filter((function(e){return 1===e.getFullInsertCoordinates().length}))),g=f.next();!g.done;g=f.next()){var y,m={founder:y=g.value,members:[y]};y.setFamily(m),this.dropZoneFamilies.push(m),d.splice(d.indexOf(y),1)}}catch(e){r={error:e}}finally{try{g&&!g.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}if(0!==d.length){var b="";try{for(var w=i(d),D=w.next();!D.done;D=w.next()){var C=D.value;b+=JSON.stringify(C.getLocation())+", "}}catch(e){o={error:e}}finally{try{D&&!D.done&&(a=w.return)&&a.call(w)}finally{if(o)throw o.error}}throw b=b.slice(0,b.length-2),new Error("Some zones were not assigned to a family. The orphan zones have the following locations: "+b)}},e.prototype.setActiveDropZone=function(e){null!==this.activeDropZone&&this.activeDropZone.isActive(!1),this.activeDropZone=e,null!==this.activeDropZone&&"droppable"!==this.dragStateService.getState()?this.dragStateService.droppable():null===this.activeDropZone&&"droppable"===this.dragStateService.getState()&&this.dragStateService.notDroppable(),null!==this.activeDropZone&&this.activeDropZone.isActive(!0)},e.prototype.showDropZone=function(e,t){if(void 0===t&&(t=!1),void 0===this.tree)throw new Error("DropZoneService not initialized");if(!this.zoneIsAllowed(e))return!1;if(void 0===this.tree.findByCoordinates(e.getLocation().parentCoordinates))throw new Error("Bad family member");return e.isVisible(!0),!0===t&&this.setActiveDropZone(e),!0},e.prototype.zoneIsAllowed=function(e){if(void 0===this.treeOptions||void 0===this.tree)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=this.tree.findByCoordinates(e.getLocation().parentCoordinates);if(void 0===r)throw new Error("Could not get drop zone parent");var n=e.getLocation().insertIndex;if(void 0===n)throw new Error("Could not get drop zone index");return!!this.treeOptions.allowDrop(t.data,r.data,n)},e}();v.ɵfac=function(e){return new(e||v)(t.ɵɵinject(h))},v.ɵprov=t.ɵɵdefineInjectable({token:v,factory:v.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(v,[{type:t.Injectable}],(function(){return[{type:h}]}),null);var f=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=i(e.values()),a=o.next();!a.done;a=o.next()){var s=a.value;if(void 0===(n=n.getChild(s)))return}}catch(e){t={error:e}}finally{try{a&&!a.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(null==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.clearChildren=function(){var e,t;try{for(var r=i(this.children),n=r.next();!n.done;n=r.next()){n.value.setParent(null)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.children.length=0},e.prototype.getIndex=function(){var e=this;if(null===this.parent)return null;var t=this.parent.children.findIndex((function(t){return t===e}));return-1!==t?t:void 0},e.prototype.getDescendant=function(e){var t,r,n=this;try{for(var o=i(e),a=o.next();!a.done;a=o.next()){var s=a.value;if(void 0===(n=n.children[s]))return}}catch(e){t={error:e}}finally{try{a&&!a.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=i(this.children),o=n.next();!o.done;o=n.next()){var a=o.value.findDescendant(e);if(void 0!==a)return a}}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||null==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=i(this.children),a=o.next();!a.done;a=o.next()){var s=a.value;n.appendChild(s.copyHelper()).parent=n}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e}(),g=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 y(e){var t,r,n,o=/(auto|scroll)/,a=function(e,t){return null===e||null===e.parentNode?t:a(e.parentElement,t.concat([e]))},s=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},l=function(e){return o.test(function(e){return s(e,"overflow")+s(e,"overflow-y")+s(e,"overflow-x")}(e))},d=a(e.parentElement,[]);try{for(var c=i(d),p=c.next();!p.done;p=c.next()){var h=p.value;if(l(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}g.ɵfac=function(e){return new(e||g)(t.ɵɵinject(t.ComponentFactoryResolver))},g.ɵprov=t.ɵɵdefineInjectable({token:g,factory:g.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(g,[{type:t.Injectable}],(function(){return[{type:t.ComponentFactoryResolver}]}),null);var m=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,o,i,a,s,l,d,c;e.globalDragSubscription=e.globalDrag$.pipe(n.throttleTime(25),n.filter((function(e){if(!e.target)return!1;d=y(e.target),t=d.clientHeight;var n,l=d.clientWidth;if("fixed"===window.getComputedStyle(d).getPropertyValue("position").toLowerCase())n=e.clientX,c=e.clientY;else{var p=d.getBoundingClientRect(),h=y(d);n=e.clientX-(p.left+h.scrollLeft),c=e.clientY-(p.top+h.scrollTop)}return!(n<0||n>l||c<0||c>t)&&(r=Math.max(.1*t,100),s=c>(i=t-r),(a=c<(o=r))||s)}))).subscribe((function(){if(null!==d){var n,p=d.scrollHeight-t,h=d.scrollTop;if(a&&h>0){n=h-75*((o-c)/r)}else{if(!s||!(h<p))return;n=h+75*((c-i)/r)}(n=Math.max(0,Math.min(p,n)))!==h&&(d.scrollTo({top:n}),e.scrolling=!0,clearTimeout(l),l=setTimeout((function(){e.scrolling=!1}),100))}}))}}))},e.prototype.removeScrolling=function(){void 0!==this.globalDragSubscription&&this.globalDragSubscription.unsubscribe()},e}();m.ɵfac=function(e){return new(e||m)(t.ɵɵinject(t.NgZone))},m.ɵprov=t.ɵɵdefineInjectable({token:m,factory:m.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(m,[{type:t.Injectable}],(function(){return[{type:t.NgZone}]}),null);var b=["nodeHost"],w=["draggableDiv"];function D(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",6),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneAbove)}}function C(e,t){}function Z(e,r){if(1&e&&t.ɵɵelement(0,"limble-tree-branch",7),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("branch",n.branch)("dropZoneInside",n.dropZoneInside)("renderDropZoneInside",n.renderDropZoneInside)}}function I(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",6),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneBelow)}}var S=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,void 0!==this.treeService.treeOptions&&!0!==this.treeService.treeOptions.listMode&&!0!==this.treeService.getPlaceholder()?this.renderInnerBranch=!0:this.renderInnerBranch=!1,this.renderDropZoneBelow=!1,this.renderDropZoneAbove=!1,this.renderDropZoneInside=!1}return e.prototype.ngOnInit=function(){this.registerDropZones()},e.prototype.ngAfterViewInit=function(){this.renderNode(),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=d(r.treeService.treeOptions,t)),void 0!==r.dropZoneAbove&&i&&(r.dropZoneService.showDropZoneFamily(r.dropZoneAbove,{joinFamilies:!0}),1===(null===(e=r.treeService.treeData)||void 0===e?void 0:e.length)&&1===r.branch.getCoordinates().length&&r.treeService.usePlaceholder())}))):e.preventDefault()},e.prototype.dragendHandler=function(e){var t=this;if(e.stopPropagation(),e.target.classList.remove("dragging"),"captured"!==this.dragStateService.getState())return this.dragStateService.release(),this.dropZoneService.clear(),this.dropZoneService.restoreFamilies(),void this.treeService.removePlaceholder();this.dragStateService.state$.pipe(n.take(2)).subscribe((function(e){"captured"===e&&void 0!==t.branch&&(t.treeService.remove(t.branch),t.dragStateService.release())}))},e.prototype.dragoverHandler=function(e){if(!0!==this.globalEventsService.scrolling){if(void 0===this.branch)throw new Error("Can't get current branch during dragover event");var t=this.dragStateService.getData();if(void 0!==t&&t!==this.branch&&!this.branch.getAncestors().includes(t))if(!0!==this.treeService.getPlaceholder()||void 0===this.dropZoneAbove){var r,n=e.currentTarget.offsetHeight/3,o=2*n,i=this.branch.getParent(),a=!0;null!==(null==i?void 0:i.data)&&(r=null==i?void 0:i.data,a=d(this.treeService.treeOptions,r));var s=this.dropZoneService.getActiveDropZone();if(e.offsetY<n&&void 0!==this.dropZoneAbove&&(null===s||!p.dropZoneLocationsAreEqual(s,this.dropZoneAbove))&&a){if(null==this.branch.getIndex())throw new Error("can't get branch index");this.dropZoneService.showDropZoneFamily(this.dropZoneAbove,{activateLowestInsteadOfFounder:!0})}else if(e.offsetY<o&&void 0!==this.dropZoneInside&&(null===s||!p.dropZoneLocationsAreEqual(s,this.dropZoneInside)))this.dropZoneService.showDropZoneFamily(this.dropZoneInside);else if(e.offsetY>=o&&void 0!==this.dropZoneBelow&&(null===s||!p.dropZoneLocationsAreEqual(s,this.dropZoneBelow))&&0===this.branch.getChildren().length&&a){if(null==this.branch.getIndex())throw new Error("can't get branch index");this.dropZoneService.showDropZoneFamily(this.dropZoneBelow)}}else this.dropZoneService.showDropZoneFamily(this.dropZoneAbove)}},e.prototype.renderNode=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.registerDropZones=function(){var e;if(!1!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.allowDragging)){if(void 0===this.branch)throw new Error("failed to register drop zones");var t,r=this.branch.getParent();(null===(null==r?void 0:r.data)||(t=null==r?void 0:r.data,d(this.treeService.treeOptions,t)))&&(this.addDropZoneAbove(),!0!==this.treeService.getPlaceholder()&&(this.addDropZoneBelow(),d(this.treeService.treeOptions,this.branch.data)&&this.addDropZoneInside()))}},e.prototype.addDropZoneAbove=function(){var e;if(void 0===this.branch)throw new Error("failed to register drop zone above");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1];this.dropZoneAbove=new p(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[]),n);var o=this.dropZoneService.addDropZone(this.dropZoneAbove);this.renderDropZoneAbove=!0===o},e.prototype.addDropZoneBelow=function(){var e;if(void 0===this.branch)throw new Error("failed to register drop zone above");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1];this.dropZoneBelow=new p(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[]),n+1);var o=this.dropZoneService.addDropZone(this.dropZoneBelow);this.renderDropZoneBelow=!0===o},e.prototype.addDropZoneInside=function(){if(void 0===this.branch)throw new Error("failed to register drop zone above");this.dropZoneInside=new p(s(this.branch.getCoordinates()),0);var e=this.dropZoneService.addDropZone(this.dropZoneInside);this.renderDropZoneInside=!0===e},e.prototype.checkForHandle=function(){var e,t=this;if(void 0!==this.draggableDiv){var r,o,i=this.draggableDiv.nativeElement,a=i.querySelector(".limble-tree-handle");r=this.treeService.treeOptions,o=null===(e=this.branch)||void 0===e?void 0:e.data,void 0===r||!0!==r.allowDragging&&("function"!=typeof r.allowDragging||void 0===o||!0!==r.allowDragging(o))?i.setAttribute("draggable","false"):null===a?i.setAttribute("draggable","true"):a.addEventListener("mousedown",(function(){i.setAttribute("draggable","true");var e=t.dragStateService.state$.pipe(n.filter((function(e){return"dragging"===e})),n.first());t.dragStateService.state$.pipe(n.skipUntil(e),n.filter((function(e){return"idle"===e})),n.first()).subscribe((function(){i.setAttribute("draggable","false")}))}))}},e}();S.ɵfac=function(e){return new(e||S)(t.ɵɵdirectiveInject(g),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(h),t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(E),t.ɵɵdirectiveInject(m))},S.ɵcmp=t.ɵɵdefineComponent({type:S,selectors:[["limble-tree-node"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(b,1,t.ViewContainerRef),t.ɵɵviewQuery(w,1,t.ElementRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.nodeHost=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.draggableDiv=n.first)}},inputs:{branch:"branch"},decls:8,vars:4,consts:[[3,"dropZone",4,"ngIf"],[1,"limble-parent-container",3,"dragstart","dragend"],["draggableDiv",""],[3,"dragoverEventThrottle","dragoverNoChangeDetect"],["nodeHost",""],[3,"branch","dropZoneInside","renderDropZoneInside",4,"ngIf"],[3,"dropZone"],[3,"branch","dropZoneInside","renderDropZoneInside"]],template:function(e,r){1&e&&(t.ɵɵtemplate(0,D,1,1,"drop-zone",0),t.ɵɵelementStart(1,"div",1,2),t.ɵɵlistener("dragstart",(function(e){return r.dragstartHandler(e)}))("dragend",(function(e){return r.dragendHandler(e)})),t.ɵɵelementStart(3,"div",3),t.ɵɵlistener("dragoverNoChangeDetect",(function(e){return r.dragoverHandler(e)})),t.ɵɵtemplate(4,C,0,0,"ng-template",null,4,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵtemplate(6,Z,1,3,"limble-tree-branch",5),t.ɵɵelementEnd(),t.ɵɵtemplate(7,I,1,1,"drop-zone",0)),2&e&&(t.ɵɵproperty("ngIf",!0===r.renderDropZoneAbove),t.ɵɵadvance(3),t.ɵɵproperty("dragoverEventThrottle",10),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",void 0!==r.branch&&!0===r.renderInnerBranch),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",!0===r.renderDropZoneBelow))},styles:[".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(S,[{type:t.Component,args:[{selector:"limble-tree-node",templateUrl:"./limble-tree-node.component.html",styleUrls:["./limble-tree-node.component.scss"]}]}],(function(){return[{type:g},{type:t.ChangeDetectorRef},{type:h},{type:v},{type:E},{type:m}]}),{branch:[{type:t.Input}],nodeHost:[{type:t.ViewChild,args:["nodeHost",{read:t.ViewContainerRef}]}],draggableDiv:[{type:t.ViewChild,args:["draggableDiv",{read:t.ElementRef}]}]});var x=function(){};x.ɵfac=function(e){return new(e||x)},x.ɵcmp=t.ɵɵdefineComponent({type:x,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(x,[{type:t.Component,args:[{selector:"limble-tree-placeholder",templateUrl:"./limble-tree-placeholder.component.html",styleUrls:["./limble-tree-placeholder.component.scss"]}]}],null,null);var E=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 f(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 f({component:{class:x}});this.treeModel.appendChild(e),this.componentCreatorService.appendComponent(S,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.restart(),this.placeholder=!1,this.treeModel=new f(null),0===this.treeData.length)this.usePlaceholder();else{try{for(var a=i(this.treeData),s=a.next();!s.done;s=a.next()){var l=s.value,d=new f(l);this.treeModel.appendChild(d)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}try{for(var c=i(this.treeModel.getChildren()),p=c.next();!p.done;p=c.next()){d=p.value;this.componentCreatorService.appendComponent(S,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}}}var h=this.treeData;setTimeout((function(){if(void 0===o.treeOptions)throw new Error("TreeModel not initialized");o.changes$.next(null),o.treeData===h&&o.dropZoneService.init(o.treeModel,o.treeOptions)}))},e.prototype.renderBranch=function(e,t){var r,n,o,a;if(void 0===this.treeModel)throw new Error("TreeModel not initialized");e.clear(),t.clearChildren();try{for(var s=i(null!==(a=null===(o=t.data)||void 0===o?void 0:o.nodes)&&void 0!==a?a:[]),l=s.next();!l.done;l=s.next()){var d=l.value,c=new f(d);t.appendChild(c),this.componentCreatorService.appendComponent(S,e).instance.branch=c}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}},e.prototype.processOptions=function(e,t,r){var n,o,i,a,s;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!==(s=e.listMode)&&void 0!==s&&s,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(null==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=i(this.treeModel.getChildren()),o=n.next();!o.done;o=n.next()){var a=o.value;this.treeData.push(this.rebuildBranch(a))}}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=i(e.getChildren()),a=o.next();!a.done;a=o.next()){var s=a.value;n.nodes.push(this.rebuildBranch(s))}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.getPlaceholder=function(){return this.placeholder},e}();E.ɵfac=function(e){return new(e||E)(t.ɵɵinject(g),t.ɵɵinject(v))},E.ɵprov=t.ɵɵdefineInjectable({token:E,factory:E.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(E,[{type:t.Injectable}],(function(){return[{type:g},{type:v}]}),null);var M=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(n.throttleTime(e.dragoverEventThrottle)).subscribe((function(t){e.dragoverNoChangeDetect.emit(t)}))}))},e.prototype.ngOnDestroy=function(){void 0!==this.eventSubscription&&this.eventSubscription.unsubscribe()},e}();M.ɵfac=function(e){return new(e||M)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},M.ɵdir=t.ɵɵdefineDirective({type:M,selectors:[["","dragoverNoChangeDetect",""]],inputs:{dragoverEventThrottle:"dragoverEventThrottle"},outputs:{dragoverNoChangeDetect:"dragoverNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(M,[{type:t.Directive,args:[{selector:"[dragoverNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragoverEventThrottle:[{type:t.Input}],dragoverNoChangeDetect:[{type:t.Output}]});var F=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(n.throttleTime(e.dragleaveEventThrottle)).subscribe((function(t){e.dragleaveNoChangeDetect.emit(t)}))}))},e.prototype.ngOnDestroy=function(){void 0!==this.eventSubscription&&this.eventSubscription.unsubscribe()},e}();F.ɵfac=function(e){return new(e||F)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},F.ɵdir=t.ɵɵdefineDirective({type:F,selectors:[["","dragleaveNoChangeDetect",""]],inputs:{dragleaveEventThrottle:"dragleaveEventThrottle"},outputs:{dragleaveNoChangeDetect:"dragleaveNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(F,[{type:t.Directive,args:[{selector:"[dragleaveNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragleaveEventThrottle:[{type:t.Input}],dragleaveNoChangeDetect:[{type:t.Output}]});var O=["host"],P=["dropZoneInside"];function N(e,t){}function A(e,t){}var j=function(){function e(e,n,o,i,a){var s=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(){s.treeChange.emit()})),this.dropSubscription=this.treeService.drops$.subscribe((function(e){s.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.getFullInsertCoordinates())}},e.prototype.ngOnDestroy=function(){this.changesSubscription.unsubscribe(),this.dropSubscription.unsubscribe()},e}();j.ɵfac=function(e){return new(e||j)(t.ɵɵdirectiveInject(E),t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(h),t.ɵɵdirectiveInject(m),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},j.ɵcmp=t.ɵɵdefineComponent({type:j,selectors:[["limble-tree-root"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(O,1,t.ViewContainerRef),t.ɵɵviewQuery(P,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([E,v]),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,N,0,0,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵtemplate(3,A,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd())},directives:[M,F],styles:[""]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(j,[{type:t.Component,args:[{selector:"limble-tree-root",templateUrl:"./limble-tree-root.component.html",styleUrls:["./limble-tree-root.component.scss"],providers:[E,v]}]}],(function(){return[{type:E},{type:v},{type:h},{type:m},{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 R=function(e,t){return{active:e,related:t}};function T(e,r){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",1),t.ɵɵlistener("dragenter",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext().dragenterHandler()})),t.ɵɵelement(1,"div",2),t.ɵɵelementEnd()}if(2&e){var o=t.ɵɵnextContext();t.ɵɵadvance(1),t.ɵɵproperty("ngClass",t.ɵɵpureFunction2(1,R,o.active,!o.active))}}var z=function(){function e(e,t){this.dropZoneService=e,this.changeDetectorRef=t,this.visible=!1,this.active=!1}return e.prototype.dragenterHandler=function(){void 0!==this.dropZone&&!0!==this.active&&this.dropZoneService.swapActiveDropZone(this.dropZone)},e.prototype.ngOnInit=function(){var e=this;if(void 0===this.dropZone)throw new Error("No drop zone object at component initialization");this.commSubscription=this.dropZone.getCommChannel().subscribe((function(t){var r,n,o,i,a,s,l,d;switch(t){case"checkVisible":e.visible=null!==(n=null===(r=e.dropZone)||void 0===r?void 0:r.isVisible())&&void 0!==n&&n;break;case"checkActive":e.active=null!==(i=null===(o=e.dropZone)||void 0===o?void 0:o.isActive())&&void 0!==i&&i;break;case"checkBoth":e.visible=null!==(s=null===(a=e.dropZone)||void 0===a?void 0:a.isVisible())&&void 0!==s&&s,e.active=null!==(d=null===(l=e.dropZone)||void 0===l?void 0:l.isActive())&&void 0!==d&&d;break;default:throw new Error("unhandled comm message")}e.changeDetectorRef.detectChanges()}))},e.prototype.ngOnDestroy=function(){void 0!==this.commSubscription&&this.commSubscription.unsubscribe()},e}();z.ɵfac=function(e){return new(e||z)(t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},z.ɵcmp=t.ɵɵdefineComponent({type:z,selectors:[["drop-zone"]],inputs:{dropZone:"dropZone"},decls:1,vars:1,consts:[["class","dropZoneContainer",3,"dragenter",4,"ngIf"],[1,"dropZoneContainer",3,"dragenter"],[3,"ngClass"]],template:function(e,r){1&e&&t.ɵɵtemplate(0,T,2,4,"div",0),2&e&&t.ɵɵproperty("ngIf",r.visible)},directives:[o.NgIf,o.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}"],changeDetection:0}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(z,[{type:t.Component,args:[{selector:"drop-zone",templateUrl:"./drop-zone.component.html",styleUrls:["./drop-zone.component.scss"],changeDetection:t.ChangeDetectionStrategy.OnPush}]}],(function(){return[{type:v},{type:t.ChangeDetectorRef}]}),{dropZone:[{type:t.Input}]});var H=["host"];function L(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",3),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneInside)}}function V(e,t){}var B=function(){function e(e,t){var r;this.treeService=e,this.changeDetectorRef=t,this.indent=null===(r=this.treeService.treeOptions)||void 0===r?void 0:r.indent,this.renderDropZoneInside=!1}return e.prototype.ngAfterViewInit=function(){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}();B.ɵfac=function(e){return new(e||B)(t.ɵɵdirectiveInject(E),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},B.ɵcmp=t.ɵɵdefineComponent({type:B,selectors:[["limble-tree-branch"]],viewQuery:function(e,r){if(1&e&&t.ɵɵviewQuery(H,1,t.ViewContainerRef),2&e){var n;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.host=n.first)}},inputs:{branch:"branch",dropZoneInside:"dropZoneInside",renderDropZoneInside:"renderDropZoneInside"},decls:5,vars:4,consts:[[3,"dropZone",4,"ngIf"],[1,"limble-child-nodes",3,"hidden"],["host",""],[3,"dropZone"]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵtemplate(1,L,1,1,"drop-zone",0),t.ɵɵelementStart(2,"span",1),t.ɵɵtemplate(3,V,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵstyleProp("margin-left",r.indent,"px"),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",r.renderDropZoneInside),t.ɵɵadvance(1),t.ɵɵproperty("hidden",r.branch&&r.branch.data.collapsed))},directives:[o.NgIf,z],styles:["./limble-tree-branch.component.scss"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(B,[{type:t.Component,args:[{selector:"limble-tree-branch",templateUrl:"./limble-tree-branch.component.html",styles:["./limble-tree-branch.component.scss"]}]}],(function(){return[{type:E},{type:t.ChangeDetectorRef}]}),{branch:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.Input}],renderDropZoneInside:[{type:t.Input}]});var $=function(){};$.ɵmod=t.ɵɵdefineNgModule({type:$}),$.ɵinj=t.ɵɵdefineInjector({factory:function(e){return new(e||$)},providers:[g,h,m],imports:[[o.CommonModule]]}),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope($,{declarations:[B,z,S,j,x,M,F],imports:[o.CommonModule],exports:[j]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata($,[{type:t.NgModule,args:[{declarations:[B,z,S,j,x,M,F],imports:[o.CommonModule],exports:[j],providers:[g,h,m]}]}],null,null),t.ɵɵsetComponentScope(S,[o.NgIf,z,M,B],[]),e.LimbleTreeModule=$,e.LimbleTreeRootComponent=j,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=limble-limble-tree.umd.min.js.map

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

import { Component, Input } from "@angular/core";
import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
import * as i0 from "@angular/core";

@@ -6,24 +6,67 @@ import * as i1 from "../limble-tree-root/drop-zone.service";

const _c0 = function (a0, a1) { return { active: a0, related: a1 }; };
function DropZoneComponent_div_0_Template(rf, ctx) { if (rf & 1) {
const _r2 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 1);
i0.ɵɵlistener("dragenter", function DropZoneComponent_div_0_Template_div_dragenter_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r1 = i0.ɵɵnextContext(); return ctx_r1.dragenterHandler(); });
i0.ɵɵelement(1, "div", 2);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(1, _c0, ctx_r0.active, !ctx_r0.active));
} }
export class DropZoneComponent {
constructor(dropZoneService) {
constructor(dropZoneService, changeDetectorRef) {
this.dropZoneService = dropZoneService;
this.changeDetectorRef = changeDetectorRef;
this.visible = false;
this.active = false;
}
dragenterHandler() {
if (this.active === true || this.coordinates === undefined) {
if (this.dropZone === undefined || this.active === true) {
return;
}
this.dropZoneService.swapActiveDropZone(this.coordinates);
this.dropZoneService.swapActiveDropZone(this.dropZone);
}
ngOnInit() {
if (this.dropZone === undefined) {
throw new Error("No drop zone object at component initialization");
}
this.commSubscription = this.dropZone
.getCommChannel()
.subscribe((message) => {
var _a, _b, _c, _d, _e, _f, _g, _h;
switch (message) {
case "checkVisible": {
this.visible = (_b = (_a = this.dropZone) === null || _a === void 0 ? void 0 : _a.isVisible()) !== null && _b !== void 0 ? _b : false;
break;
}
case "checkActive": {
this.active = (_d = (_c = this.dropZone) === null || _c === void 0 ? void 0 : _c.isActive()) !== null && _d !== void 0 ? _d : false;
break;
}
case "checkBoth": {
this.visible = (_f = (_e = this.dropZone) === null || _e === void 0 ? void 0 : _e.isVisible()) !== null && _f !== void 0 ? _f : false;
this.active = (_h = (_g = this.dropZone) === null || _g === void 0 ? void 0 : _g.isActive()) !== null && _h !== void 0 ? _h : false;
break;
}
default: {
throw new Error("unhandled comm message");
}
}
this.changeDetectorRef.detectChanges();
});
}
ngOnDestroy() {
if (this.commSubscription !== undefined) {
this.commSubscription.unsubscribe();
}
}
}
DropZoneComponent.ɵfac = function DropZoneComponent_Factory(t) { return new (t || DropZoneComponent)(i0.ɵɵdirectiveInject(i1.DropZoneService)); };
DropZoneComponent.ɵcmp = i0.ɵɵdefineComponent({ type: DropZoneComponent, selectors: [["drop-zone"]], inputs: { active: "active", coordinates: "coordinates" }, decls: 2, vars: 4, consts: [[1, "dropZoneContainer", 3, "dragenter"], [3, "ngClass"]], template: function DropZoneComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0);
i0.ɵɵlistener("dragenter", function DropZoneComponent_Template_div_dragenter_0_listener() { return ctx.dragenterHandler(); });
i0.ɵɵelement(1, "div", 1);
i0.ɵɵelementEnd();
DropZoneComponent.ɵfac = function DropZoneComponent_Factory(t) { return new (t || DropZoneComponent)(i0.ɵɵdirectiveInject(i1.DropZoneService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
DropZoneComponent.ɵcmp = i0.ɵɵdefineComponent({ type: DropZoneComponent, selectors: [["drop-zone"]], inputs: { dropZone: "dropZone" }, decls: 1, vars: 1, consts: [["class", "dropZoneContainer", 3, "dragenter", 4, "ngIf"], [1, "dropZoneContainer", 3, "dragenter"], [3, "ngClass"]], template: function DropZoneComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, DropZoneComponent_div_0_Template, 2, 4, "div", 0);
} if (rf & 2) {
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(1, _c0, ctx.active, !ctx.active));
} }, directives: [i2.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}"] });
i0.ɵɵproperty("ngIf", ctx.visible);
} }, directives: [i2.NgIf, i2.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}"], changeDetection: 0 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DropZoneComponent, [{

@@ -34,9 +77,8 @@ type: Component,

templateUrl: "./drop-zone.component.html",
styleUrls: ["./drop-zone.component.scss"]
styleUrls: ["./drop-zone.component.scss"],
changeDetection: ChangeDetectionStrategy.OnPush
}]
}], function () { return [{ type: i1.DropZoneService }]; }, { active: [{
}], function () { return [{ type: i1.DropZoneService }, { type: i0.ChangeDetectorRef }]; }, { dropZone: [{
type: Input
}], coordinates: [{
type: Input
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvZHJvcC16b25lL2Ryb3Atem9uZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBU2pELE1BQU0sT0FBTyxpQkFBaUI7SUFJM0IsWUFBNkIsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBSHBELFdBQU0sR0FBWSxLQUFLLENBQUM7SUFHK0IsQ0FBQztJQUUxRCxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUN6RCxPQUFPO1NBQ1Q7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDOztrRkFYUyxpQkFBaUI7c0RBQWpCLGlCQUFpQjtRQ1Q5Qiw4QkFBZ0U7UUFBakMsbUdBQWEsc0JBQWtCLElBQUM7UUFDNUQseUJBQTREO1FBQy9ELGlCQUFNOztRQURFLGVBQWdEO1FBQWhELDZFQUFnRDs7dUZEUTNDLGlCQUFpQjtjQUw3QixTQUFTO2VBQUM7Z0JBQ1IsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLFdBQVcsRUFBRSw0QkFBNEI7Z0JBQ3pDLFNBQVMsRUFBRSxDQUFDLDRCQUE0QixDQUFDO2FBQzNDO2tFQUVXLE1BQU07a0JBQWQsS0FBSztZQUNHLFdBQVc7a0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQnJhbmNoQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vQnJhbmNoXCI7XHJcbmltcG9ydCB7IERyb3Bab25lU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwiZHJvcC16b25lXCIsXHJcbiAgIHRlbXBsYXRlVXJsOiBcIi4vZHJvcC16b25lLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9kcm9wLXpvbmUuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bab25lQ29tcG9uZW50IHtcclxuICAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgIEBJbnB1dCgpIGNvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVTZXJ2aWNlOiBEcm9wWm9uZVNlcnZpY2UpIHt9XHJcblxyXG4gICBwdWJsaWMgZHJhZ2VudGVySGFuZGxlcigpIHtcclxuICAgICAgaWYgKHRoaXMuYWN0aXZlID09PSB0cnVlIHx8IHRoaXMuY29vcmRpbmF0ZXMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc3dhcEFjdGl2ZURyb3Bab25lKHRoaXMuY29vcmRpbmF0ZXMpO1xyXG4gICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRyb3Bab25lQ29udGFpbmVyXCIgKGRyYWdlbnRlcik9XCJkcmFnZW50ZXJIYW5kbGVyKClcIj5cclxuICAgPGRpdiBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYWN0aXZlLCByZWxhdGVkOiAhYWN0aXZlIH1cIj48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvZHJvcC16b25lL2Ryb3Atem9uZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNKLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUdQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0lDUHZCLDhCQUFnRjtJQUFqRCxnTUFBZ0M7SUFDNUQseUJBQTREO0lBQy9ELGlCQUFNOzs7SUFERSxlQUFnRDtJQUFoRCxtRkFBZ0Q7O0FEaUJ4RCxNQUFNLE9BQU8saUJBQWlCO0lBTTNCLFlBQ29CLGVBQWdDLEVBQ2hDLGlCQUFvQztRQURwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUVyRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDdEQsT0FBTztTQUNUO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLFFBQVE7UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNyRTtRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNqQyxjQUFjLEVBQUU7YUFDaEIsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7O1lBQ3BCLFFBQVEsT0FBTyxFQUFFO2dCQUNkLEtBQUssY0FBYyxDQUFDLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLGVBQUcsSUFBSSxDQUFDLFFBQVEsMENBQUUsU0FBUyxxQ0FBTSxLQUFLLENBQUM7b0JBQ25ELE1BQU07aUJBQ1I7Z0JBQ0QsS0FBSyxhQUFhLENBQUMsQ0FBQztvQkFDakIsSUFBSSxDQUFDLE1BQU0sZUFBRyxJQUFJLENBQUMsUUFBUSwwQ0FBRSxRQUFRLHFDQUFNLEtBQUssQ0FBQztvQkFDakQsTUFBTTtpQkFDUjtnQkFDRCxLQUFLLFdBQVcsQ0FBQyxDQUFDO29CQUNmLElBQUksQ0FBQyxPQUFPLGVBQUcsSUFBSSxDQUFDLFFBQVEsMENBQUUsU0FBUyxxQ0FBTSxLQUFLLENBQUM7b0JBQ25ELElBQUksQ0FBQyxNQUFNLGVBQUcsSUFBSSxDQUFDLFFBQVEsMENBQUUsUUFBUSxxQ0FBTSxLQUFLLENBQUM7b0JBQ2pELE1BQU07aUJBQ1I7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7b0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2lCQUM1QzthQUNIO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVNLFdBQVc7UUFDZixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RDO0lBQ0osQ0FBQzs7a0ZBdERTLGlCQUFpQjtzREFBakIsaUJBQWlCO1FDbEI5QixrRUFFTTs7UUFGMkQsa0NBQWE7O3VGRGtCakUsaUJBQWlCO2NBTjdCLFNBQVM7ZUFBQztnQkFDUixRQUFRLEVBQUUsV0FBVztnQkFDckIsV0FBVyxFQUFFLDRCQUE0QjtnQkFDekMsU0FBUyxFQUFFLENBQUMsNEJBQTRCLENBQUM7Z0JBQ3pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2pEO2tHQUVXLFFBQVE7a0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgSW5wdXQsXHJcbiAgIE9uRGVzdHJveSxcclxuICAgT25Jbml0XHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmUgfSBmcm9tIFwiLi4vY2xhc3Nlcy9Ecm9wWm9uZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcm9vdC9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgIHNlbGVjdG9yOiBcImRyb3Atem9uZVwiLFxyXG4gICB0ZW1wbGF0ZVVybDogXCIuL2Ryb3Atem9uZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICBzdHlsZVVybHM6IFtcIi4vZHJvcC16b25lLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcFpvbmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgIEBJbnB1dCgpIGRyb3Bab25lOiBEcm9wWm9uZSB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSBjb21tU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyB2aXNpYmxlOiBib29sZWFuO1xyXG4gICBwdWJsaWMgYWN0aXZlOiBib29sZWFuO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVTZXJ2aWNlOiBEcm9wWm9uZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgICkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyYWdlbnRlckhhbmRsZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLmRyb3Bab25lID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3RpdmUgPT09IHRydWUpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnN3YXBBY3RpdmVEcm9wWm9uZSh0aGlzLmRyb3Bab25lKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICBpZiAodGhpcy5kcm9wWm9uZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGRyb3Agem9uZSBvYmplY3QgYXQgY29tcG9uZW50IGluaXRpYWxpemF0aW9uXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbVN1YnNjcmlwdGlvbiA9IHRoaXMuZHJvcFpvbmVcclxuICAgICAgICAgLmdldENvbW1DaGFubmVsKClcclxuICAgICAgICAgLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgY2FzZSBcImNoZWNrVmlzaWJsZVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuZHJvcFpvbmU/LmlzVmlzaWJsZSgpID8/IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tBY3RpdmVcIjoge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRoaXMuZHJvcFpvbmU/LmlzQWN0aXZlKCkgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja0JvdGhcIjoge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0aGlzLmRyb3Bab25lPy5pc1Zpc2libGUoKSA/PyBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLmRyb3Bab25lPy5pc0FjdGl2ZSgpID8/IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuaGFuZGxlZCBjb21tIG1lc3NhZ2VcIik7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgaWYgKHRoaXMuY29tbVN1YnNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRoaXMuY29tbVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcbiAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZHJvcFpvbmVDb250YWluZXJcIiAoZHJhZ2VudGVyKT1cImRyYWdlbnRlckhhbmRsZXIoKVwiICpuZ0lmPVwidmlzaWJsZVwiPlxyXG4gICA8ZGl2IFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBhY3RpdmUsIHJlbGF0ZWQ6ICFhY3RpdmUgfVwiPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19

@@ -1,9 +0,14 @@

import { Component, Input, Output, ViewChild, ViewContainerRef } from "@angular/core";
import { BehaviorSubject } from "rxjs";
import { Component, Input, ViewChild, ViewContainerRef } from "@angular/core";
import * as i0 from "@angular/core";
import * as i1 from "../limble-tree-root/tree.service";
import * as i2 from "@angular/common";
import * as i3 from "../drop-zone/drop-zone.component";
const _c0 = ["host"];
const _c1 = ["dropZoneInside"];
function LimbleTreeBranchComponent_ng_template_1_Template(rf, ctx) { }
function LimbleTreeBranchComponent_ng_template_4_Template(rf, ctx) { }
function LimbleTreeBranchComponent_drop_zone_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "drop-zone", 3);
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵproperty("dropZone", ctx_r0.dropZoneInside);
} }
function LimbleTreeBranchComponent_ng_template_3_Template(rf, ctx) { }
export class LimbleTreeBranchComponent {

@@ -14,8 +19,6 @@ constructor(treeService, changeDetectorRef) {

this.changeDetectorRef = changeDetectorRef;
this.dropZoneInside$ = new BehaviorSubject(this.dropZoneInside);
this.indent = (_a = this.treeService.treeOptions) === null || _a === void 0 ? void 0 : _a.indent;
this.renderDropZoneInside = false;
}
ngAfterViewInit() {
this.dropZoneInside$.next(this.dropZoneInside);
this.dropZoneInside$.complete();
this.reRender();

@@ -34,12 +37,10 @@ this.changeDetectorRef.detectChanges();

i0.ɵɵviewQuery(_c0, 1, ViewContainerRef);
i0.ɵɵviewQuery(_c1, 1, ViewContainerRef);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.host = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropZoneInside = _t.first);
} }, inputs: { branch: "branch" }, outputs: { dropZoneInside$: "dropZoneInside$" }, decls: 6, vars: 3, consts: [["dropZoneInside", ""], [1, "limble-child-nodes", 3, "hidden"], ["host", ""]], template: function LimbleTreeBranchComponent_Template(rf, ctx) { if (rf & 1) {
} }, inputs: { branch: "branch", dropZoneInside: "dropZoneInside", renderDropZoneInside: "renderDropZoneInside" }, decls: 5, vars: 4, consts: [[3, "dropZone", 4, "ngIf"], [1, "limble-child-nodes", 3, "hidden"], ["host", ""], [3, "dropZone"]], template: function LimbleTreeBranchComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div");
i0.ɵɵtemplate(1, LimbleTreeBranchComponent_ng_template_1_Template, 0, 0, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementStart(3, "span", 1);
i0.ɵɵtemplate(4, LimbleTreeBranchComponent_ng_template_4_Template, 0, 0, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(1, LimbleTreeBranchComponent_drop_zone_1_Template, 1, 1, "drop-zone", 0);
i0.ɵɵelementStart(2, "span", 1);
i0.ɵɵtemplate(3, LimbleTreeBranchComponent_ng_template_3_Template, 0, 0, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementEnd();

@@ -49,5 +50,7 @@ i0.ɵɵelementEnd();

i0.ɵɵstyleProp("margin-left", ctx.indent, "px");
i0.ɵɵadvance(3);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.renderDropZoneInside);
i0.ɵɵadvance(1);
i0.ɵɵproperty("hidden", ctx.branch && ctx.branch.data.collapsed);
} }, styles: ["./limble-tree-branch.component.scss"] });
} }, directives: [i2.NgIf, i3.DropZoneComponent], styles: ["./limble-tree-branch.component.scss"] });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeBranchComponent, [{

@@ -66,7 +69,6 @@ type: Component,

}], dropZoneInside: [{
type: ViewChild,
args: ["dropZoneInside", { read: ViewContainerRef }]
}], dropZoneInside$: [{
type: Output
type: Input
}], renderDropZoneInside: [{
type: Input
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvbGltYmxlLXRyZWUtYnJhbmNoL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdKLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQVN2QyxNQUFNLE9BQU8seUJBQXlCO0lBZW5DLFlBQ29CLFdBQXdCLEVBQ3hCLGlCQUFvQzs7UUFEcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUVyRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsTUFBTSxTQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVywwQ0FBRSxNQUFNLENBQUM7SUFDdEQsQ0FBQztJQUVELGVBQWU7UUFDWixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTSxRQUFRO1FBQ1osSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDOztrR0FuQ1MseUJBQXlCOzhEQUF6Qix5QkFBeUI7K0JBR1IsZ0JBQWdCOytCQUlOLGdCQUFnQjs7Ozs7O1FDekJ4RCwyQkFBb0M7UUFDakMsMkhBQTJDO1FBQzNDLCtCQUE0RTtRQUN6RSwySEFBaUM7UUFDcEMsaUJBQU87UUFDVixpQkFBTTs7UUFMRCwrQ0FBOEI7UUFFMUIsZUFBMEM7UUFBMUMsZ0VBQTBDOzt1RkRnQnRDLHlCQUF5QjtjQUxyQyxTQUFTO2VBQUM7Z0JBQ1IsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsV0FBVyxFQUFFLHFDQUFxQztnQkFDbEQsTUFBTSxFQUFFLENBQUMscUNBQXFDLENBQUM7YUFDakQ7OEZBRVcsTUFBTTtrQkFBZCxLQUFLO1lBRWlELElBQUk7a0JBQTFELFNBQVM7bUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBSzdDLGNBQWM7a0JBRGIsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUk5QyxlQUFlO2tCQUR2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgSW5wdXQsXHJcbiAgIE91dHB1dCxcclxuICAgVmlld0NoaWxkLFxyXG4gICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcm9vdC90cmVlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHR5cGUgeyBCcmFuY2ggfSBmcm9tIFwiLi4vQnJhbmNoXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwibGltYmxlLXRyZWUtYnJhbmNoXCIsXHJcbiAgIHRlbXBsYXRlVXJsOiBcIi4vbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlczogW1wiLi9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICAgQElucHV0KCkgYnJhbmNoOiBCcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBWaWV3Q2hpbGQoXCJob3N0XCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwcml2YXRlIGhvc3Q6XHJcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBWaWV3Q2hpbGQoXCJkcm9wWm9uZUluc2lkZVwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICAgZHJvcFpvbmVJbnNpZGU6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAT3V0cHV0KClcclxuICAgcmVhZG9ubHkgZHJvcFpvbmVJbnNpZGUkOiBCZWhhdmlvclN1YmplY3Q8Vmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZD47XHJcblxyXG4gICBwdWJsaWMgcmVhZG9ubHkgaW5kZW50O1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICApIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB0aGlzLmluZGVudCA9IHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmluZGVudDtcclxuICAgfVxyXG5cclxuICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlJC5uZXh0KHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlJC5jb21wbGV0ZSgpO1xyXG4gICAgICB0aGlzLnJlUmVuZGVyKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVSZW5kZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLmhvc3QgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZW5kZXIgbGltYmxlIHRyZWUgYnJhbmNoXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UucmVuZGVyQnJhbmNoKHRoaXMuaG9zdCwgdGhpcy5icmFuY2gpO1xyXG4gICB9XHJcbn1cclxuIiwiPGRpdiBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJpbmRlbnRcIj5cclxuICAgPG5nLXRlbXBsYXRlICNkcm9wWm9uZUluc2lkZT48L25nLXRlbXBsYXRlPlxyXG4gICA8c3BhbiBbaGlkZGVuXT1cImJyYW5jaCAmJiBicmFuY2guZGF0YS5jb2xsYXBzZWRcIiBjbGFzcz1cImxpbWJsZS1jaGlsZC1ub2Rlc1wiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2hvc3Q+PC9uZy10ZW1wbGF0ZT5cclxuICAgPC9zcGFuPlxyXG48L2Rpdj5cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvbGltYmxlLXRyZWUtYnJhbmNoL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdKLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7Ozs7OztJQ05wQiwrQkFHYTs7O0lBRFYsZ0RBQTJCOzs7QURjakMsTUFBTSxPQUFPLHlCQUF5QjtJQVluQyxZQUNvQixXQUF3QixFQUN4QixpQkFBb0M7O1FBRHBDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFckQsSUFBSSxDQUFDLE1BQU0sU0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsMENBQUUsTUFBTSxDQUFDO1FBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWU7UUFDWixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTSxRQUFRO1FBQ1osSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDOztrR0E5QlMseUJBQXlCOzhEQUF6Qix5QkFBeUI7K0JBR1IsZ0JBQWdCOzs7OztRQ3BCOUMsMkJBQW9DO1FBQ2pDLHNGQUdhO1FBQ2IsK0JBQTRFO1FBQ3pFLDJIQUFpQztRQUNwQyxpQkFBTztRQUNWLGlCQUFNOztRQVJELCtDQUE4QjtRQUU1QixlQUEwQjtRQUExQiwrQ0FBMEI7UUFHeEIsZUFBMEM7UUFBMUMsZ0VBQTBDOzt1RkRZdEMseUJBQXlCO2NBTHJDLFNBQVM7ZUFBQztnQkFDUixRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QixXQUFXLEVBQUUscUNBQXFDO2dCQUNsRCxNQUFNLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQzthQUNqRDs4RkFFVyxNQUFNO2tCQUFkLEtBQUs7WUFFaUQsSUFBSTtrQkFBMUQsU0FBUzttQkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFJcEMsY0FBYztrQkFBdEIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIEFmdGVyVmlld0luaXQsXHJcbiAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICBDb21wb25lbnQsXHJcbiAgIElucHV0LFxyXG4gICBWaWV3Q2hpbGQsXHJcbiAgIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgdHlwZSB7IEJyYW5jaCB9IGZyb20gXCIuLi9jbGFzc2VzL0JyYW5jaFwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZSB9IGZyb20gXCIuLi9jbGFzc2VzL0Ryb3Bab25lXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwibGltYmxlLXRyZWUtYnJhbmNoXCIsXHJcbiAgIHRlbXBsYXRlVXJsOiBcIi4vbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlczogW1wiLi9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICAgQElucHV0KCkgYnJhbmNoOiBCcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBWaWV3Q2hpbGQoXCJob3N0XCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwcml2YXRlIGhvc3Q6XHJcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBJbnB1dCgpIGRyb3Bab25lSW5zaWRlOiBEcm9wWm9uZSB8IHVuZGVmaW5lZDtcclxuICAgQElucHV0KCkgcmVuZGVyRHJvcFpvbmVJbnNpZGU6IGJvb2xlYW47XHJcblxyXG4gICBwdWJsaWMgcmVhZG9ubHkgaW5kZW50O1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICApIHtcclxuICAgICAgdGhpcy5pbmRlbnQgPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zPy5pbmRlbnQ7XHJcbiAgICAgIHRoaXMucmVuZGVyRHJvcFpvbmVJbnNpZGUgPSBmYWxzZTtcclxuICAgfVxyXG5cclxuICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICB0aGlzLnJlUmVuZGVyKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVSZW5kZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLmhvc3QgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZW5kZXIgbGltYmxlIHRyZWUgYnJhbmNoXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UucmVuZGVyQnJhbmNoKHRoaXMuaG9zdCwgdGhpcy5icmFuY2gpO1xyXG4gICB9XHJcbn1cclxuIiwiPGRpdiBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJpbmRlbnRcIj5cclxuICAgPGRyb3Atem9uZVxyXG4gICAgICAqbmdJZj1cInJlbmRlckRyb3Bab25lSW5zaWRlXCJcclxuICAgICAgW2Ryb3Bab25lXT1cImRyb3Bab25lSW5zaWRlXCJcclxuICAgPjwvZHJvcC16b25lPlxyXG4gICA8c3BhbiBbaGlkZGVuXT1cImJyYW5jaCAmJiBicmFuY2guZGF0YS5jb2xsYXBzZWRcIiBjbGFzcz1cImxpbWJsZS1jaGlsZC1ub2Rlc1wiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2hvc3Q+PC9uZy10ZW1wbGF0ZT5cclxuICAgPC9zcGFuPlxyXG48L2Rpdj5cclxuIl19
import { Component, ElementRef, Input, ViewChild, ViewContainerRef } from "@angular/core";
import { LimbleTreeBranchComponent } from "../limble-tree-branch/limble-tree-branch.component";
import { isDraggingAllowed, isNestingAllowed } from "../util";
import { filter, first, skipUntil, take } from "rxjs/operators";
import { DropZone } from "../classes/DropZone";
import * as i0 from "@angular/core";

@@ -11,12 +11,23 @@ import * as i1 from "../singletons/component-creator.service";

import * as i5 from "../singletons/global-events.service";
import * as i6 from "../custom-event-bindings/dragover-no-change-detect.directive";
const _c0 = ["nodeHost"];
const _c1 = ["dropZoneAbove"];
const _c2 = ["dropZoneBelow"];
const _c3 = ["children"];
const _c4 = ["draggableDiv"];
function LimbleTreeNodeComponent_ng_template_0_Template(rf, ctx) { }
function LimbleTreeNodeComponent_ng_template_5_Template(rf, ctx) { }
function LimbleTreeNodeComponent_ng_template_7_Template(rf, ctx) { }
function LimbleTreeNodeComponent_ng_template_9_Template(rf, ctx) { }
const _c1 = ["draggableDiv"];
function LimbleTreeNodeComponent_drop_zone_0_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "drop-zone", 6);
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵproperty("dropZone", ctx_r0.dropZoneAbove);
} }
function LimbleTreeNodeComponent_ng_template_4_Template(rf, ctx) { }
function LimbleTreeNodeComponent_limble_tree_branch_6_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "limble-tree-branch", 7);
} if (rf & 2) {
const ctx_r4 = i0.ɵɵnextContext();
i0.ɵɵproperty("branch", ctx_r4.branch)("dropZoneInside", ctx_r4.dropZoneInside)("renderDropZoneInside", ctx_r4.renderDropZoneInside);
} }
function LimbleTreeNodeComponent_drop_zone_7_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "drop-zone", 6);
} if (rf & 2) {
const ctx_r5 = i0.ɵɵnextContext();
i0.ɵɵproperty("dropZone", ctx_r5.dropZoneBelow);
} }
export class LimbleTreeNodeComponent {

@@ -30,7 +41,19 @@ constructor(componentCreatorService, changeDetectorRef, dragStateService, dropZoneService, treeService, globalEventsService) {

this.globalEventsService = globalEventsService;
if (this.treeService.treeOptions !== undefined &&
this.treeService.treeOptions.listMode !== true &&
this.treeService.getPlaceholder() !== true) {
this.renderInnerBranch = true;
}
else {
this.renderInnerBranch = false;
}
this.renderDropZoneBelow = false;
this.renderDropZoneAbove = false;
this.renderDropZoneInside = false;
}
ngOnInit() {
this.registerDropZones();
}
ngAfterViewInit() {
this.registerDropZones();
this.renderSelf();
this.renderChildren();
this.renderNode();
this.checkForHandle();

@@ -48,2 +71,3 @@ this.changeDetectorRef.detectChanges();

//Don't drag stuff that isn't part of the tree
event.preventDefault();
return;

@@ -68,3 +92,3 @@ }

if (this.dropZoneAbove !== undefined && parentNestingAllowed) {
this.dropZoneService.showDropZoneFamily(this.branch.getCoordinates(), {
this.dropZoneService.showDropZoneFamily(this.dropZoneAbove, {
joinFamilies: true

@@ -84,5 +108,2 @@ });

draggedElement.classList.remove("dragging");
if (this.branch === undefined) {
throw new Error("failed to get current branch in dragendHandler");
}
if (this.dragStateService.getState() !== "captured") {

@@ -105,3 +126,2 @@ //Wasn't dropped into a valid tree, so reset for next drag and

dragoverHandler(event) {
var _a, _b, _c;
if (this.globalEventsService.scrolling === true) {

@@ -127,3 +147,3 @@ return;

//and skip the rest of the logic in this function
this.dropZoneService.showDropZoneFamily([0]);
this.dropZoneService.showDropZoneFamily(this.dropZoneAbove);
return;

@@ -141,9 +161,13 @@ }

}
const activeDropZone = this.dropZoneService.getActiveDropZone();
if (event.offsetY < topLine &&
this.dropZoneAbove !== undefined &&
((_a = this.dropZoneService.getActiveDropZone()) === null || _a === void 0 ? void 0 : _a.data.container) !==
this.dropZoneAbove &&
(activeDropZone === null ||
!DropZone.dropZoneLocationsAreEqual(activeDropZone, this.dropZoneAbove)) &&
parentNestingAllowed) {
const dropCoordinates = [...this.branch.getCoordinates()];
this.dropZoneService.showDropZoneFamily(dropCoordinates, {
const index = this.branch.getIndex();
if (index === undefined || index === null) {
throw new Error("can't get branch index");
}
this.dropZoneService.showDropZoneFamily(this.dropZoneAbove, {
activateLowestInsteadOfFounder: true

@@ -154,20 +178,20 @@ });

this.dropZoneInside !== undefined &&
((_b = this.dropZoneService.getActiveDropZone()) === null || _b === void 0 ? void 0 : _b.data.container) !==
this.dropZoneInside) {
const dropCoordinates = [...this.branch.getCoordinates()];
dropCoordinates.push(0);
this.dropZoneService.showDropZoneFamily(dropCoordinates);
(activeDropZone === null ||
!DropZone.dropZoneLocationsAreEqual(activeDropZone, this.dropZoneInside))) {
this.dropZoneService.showDropZoneFamily(this.dropZoneInside);
}
else if (event.offsetY >= bottomLine &&
this.dropZoneBelow !== undefined &&
((_c = this.dropZoneService.getActiveDropZone()) === null || _c === void 0 ? void 0 : _c.data.container) !==
this.dropZoneBelow &&
(activeDropZone === null ||
!DropZone.dropZoneLocationsAreEqual(activeDropZone, this.dropZoneBelow)) &&
this.branch.getChildren().length === 0 &&
parentNestingAllowed) {
const dropCoordinates = [...this.branch.getCoordinates()];
dropCoordinates[dropCoordinates.length - 1]++;
this.dropZoneService.showDropZoneFamily(dropCoordinates);
const index = this.branch.getIndex();
if (index === undefined || index === null) {
throw new Error("can't get branch index");
}
this.dropZoneService.showDropZoneFamily(this.dropZoneBelow);
}
}
renderSelf() {
renderNode() {
var _a;

@@ -190,29 +214,2 @@ if (this.nodeHost === undefined || this.branch === undefined) {

}
renderChildren() {
var _a;
if (this.children !== undefined &&
((_a = this.treeService.treeOptions) === null || _a === void 0 ? void 0 : _a.listMode) !== true &&
this.treeService.getPlaceholder() !== true) {
if (this.branch === undefined) {
throw new Error("branch is undefined");
}
const newBranchComponent = this.componentCreatorService.appendComponent(LimbleTreeBranchComponent, this.children);
newBranchComponent.instance.branch = this.branch;
if (isNestingAllowed(this.treeService.treeOptions, this.branch.data)) {
newBranchComponent.instance.dropZoneInside$.subscribe((dropZone) => {
var _a;
if (dropZone !== undefined &&
((_a = this.treeService.treeOptions) === null || _a === void 0 ? void 0 : _a.allowDragging) !== false) {
this.dropZoneInside = dropZone;
if (this.branch === undefined) {
throw new Error("failed to register inner drop zone");
}
const dropCoordinatesInside = this.branch.getCoordinates();
dropCoordinatesInside.push(0);
this.dropZoneService.addDropZone(dropCoordinatesInside, this.dropZoneInside);
}
});
}
}
}
registerDropZones() {

@@ -223,5 +220,3 @@ var _a;

}
if (this.dropZoneAbove === undefined ||
this.dropZoneBelow === undefined ||
this.branch === undefined) {
if (this.branch === undefined) {
throw new Error("failed to register drop zones");

@@ -237,5 +232,3 @@ }

}
const currentCoordinates = this.branch.getCoordinates();
const dropCoordinatesAbove = [...currentCoordinates];
this.dropZoneService.addDropZone(dropCoordinatesAbove, this.dropZoneAbove);
this.addDropZoneAbove();
if (this.treeService.getPlaceholder() === true) {

@@ -245,6 +238,54 @@ //Only register one drop zone if the placeholder system is active

}
const dropCoordinatesBelow = [...currentCoordinates];
dropCoordinatesBelow[dropCoordinatesBelow.length - 1]++;
this.dropZoneService.addDropZone(dropCoordinatesBelow, this.dropZoneBelow);
this.addDropZoneBelow();
if (isNestingAllowed(this.treeService.treeOptions, this.branch.data)) {
this.addDropZoneInside();
}
}
addDropZoneAbove() {
var _a;
if (this.branch === undefined) {
throw new Error("failed to register drop zone above");
}
const parent = this.branch.getParent();
const currentCoordinates = this.branch.getCoordinates();
const index = currentCoordinates[currentCoordinates.length - 1];
this.dropZoneAbove = new DropZone([...((_a = parent === null || parent === void 0 ? void 0 : parent.getCoordinates()) !== null && _a !== void 0 ? _a : [])], index);
const addedAbove = this.dropZoneService.addDropZone(this.dropZoneAbove);
if (addedAbove === true) {
this.renderDropZoneAbove = true;
}
else {
this.renderDropZoneAbove = false;
}
}
addDropZoneBelow() {
var _a;
if (this.branch === undefined) {
throw new Error("failed to register drop zone above");
}
const parent = this.branch.getParent();
const currentCoordinates = this.branch.getCoordinates();
const index = currentCoordinates[currentCoordinates.length - 1];
this.dropZoneBelow = new DropZone([...((_a = parent === null || parent === void 0 ? void 0 : parent.getCoordinates()) !== null && _a !== void 0 ? _a : [])], index + 1);
const addedBelow = this.dropZoneService.addDropZone(this.dropZoneBelow);
if (addedBelow === true) {
this.renderDropZoneBelow = true;
}
else {
this.renderDropZoneBelow = false;
}
}
addDropZoneInside() {
if (this.branch === undefined) {
throw new Error("failed to register drop zone above");
}
this.dropZoneInside = new DropZone([...this.branch.getCoordinates()], 0);
const addedInside = this.dropZoneService.addDropZone(this.dropZoneInside);
if (addedInside === true) {
this.renderDropZoneInside = true;
}
else {
this.renderDropZoneInside = false;
}
}
checkForHandle() {

@@ -280,28 +321,27 @@ var _a;

i0.ɵɵviewQuery(_c0, 1, ViewContainerRef);
i0.ɵɵviewQuery(_c1, 1, ViewContainerRef);
i0.ɵɵviewQuery(_c2, 1, ViewContainerRef);
i0.ɵɵviewQuery(_c3, 1, ViewContainerRef);
i0.ɵɵviewQuery(_c4, 1, ElementRef);
i0.ɵɵviewQuery(_c1, 1, ElementRef);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nodeHost = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropZoneAbove = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropZoneBelow = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.children = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.draggableDiv = _t.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 LimbleTreeNodeComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, LimbleTreeNodeComponent_ng_template_0_Template, 0, 0, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementStart(2, "div", 1, 2);
i0.ɵɵlistener("dragstart", function LimbleTreeNodeComponent_Template_div_dragstart_2_listener($event) { return ctx.dragstartHandler($event); })("dragend", function LimbleTreeNodeComponent_Template_div_dragend_2_listener($event) { return ctx.dragendHandler($event); });
i0.ɵɵelementStart(4, "div", 3);
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);
} }, inputs: { branch: "branch" }, decls: 8, vars: 4, consts: [[3, "dropZone", 4, "ngIf"], [1, "limble-parent-container", 3, "dragstart", "dragend"], ["draggableDiv", ""], [3, "dragoverEventThrottle", "dragoverNoChangeDetect"], ["nodeHost", ""], [3, "branch", "dropZoneInside", "renderDropZoneInside", 4, "ngIf"], [3, "dropZone"], [3, "branch", "dropZoneInside", "renderDropZoneInside"]], template: function LimbleTreeNodeComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, LimbleTreeNodeComponent_drop_zone_0_Template, 1, 1, "drop-zone", 0);
i0.ɵɵelementStart(1, "div", 1, 2);
i0.ɵɵlistener("dragstart", function LimbleTreeNodeComponent_Template_div_dragstart_1_listener($event) { return ctx.dragstartHandler($event); })("dragend", function LimbleTreeNodeComponent_Template_div_dragend_1_listener($event) { return ctx.dragendHandler($event); });
i0.ɵɵelementStart(3, "div", 3);
i0.ɵɵlistener("dragoverNoChangeDetect", function LimbleTreeNodeComponent_Template_div_dragoverNoChangeDetect_3_listener($event) { return ctx.dragoverHandler($event); });
i0.ɵɵtemplate(4, LimbleTreeNodeComponent_ng_template_4_Template, 0, 0, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementEnd();
i0.ɵɵtemplate(7, LimbleTreeNodeComponent_ng_template_7_Template, 0, 0, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(6, LimbleTreeNodeComponent_limble_tree_branch_6_Template, 1, 3, "limble-tree-branch", 5);
i0.ɵɵelementEnd();
i0.ɵɵtemplate(9, LimbleTreeNodeComponent_ng_template_9_Template, 0, 0, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
i0.ɵɵtemplate(7, LimbleTreeNodeComponent_drop_zone_7_Template, 1, 1, "drop-zone", 0);
} if (rf & 2) {
i0.ɵɵadvance(4);
i0.ɵɵproperty("ngIf", ctx.renderDropZoneAbove === true);
i0.ɵɵadvance(3);
i0.ɵɵproperty("dragoverEventThrottle", 10);
} }, directives: [i6.DragoverNoChangeDetectDirective], styles: [".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"] });
i0.ɵɵadvance(3);
i0.ɵɵproperty("ngIf", ctx.branch !== undefined && ctx.renderInnerBranch === true);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.renderDropZoneBelow === true);
} }, styles: [".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"] });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeNodeComponent, [{

@@ -319,11 +359,2 @@ type: Component,

args: ["nodeHost", { read: ViewContainerRef }]
}], dropZoneAbove: [{
type: ViewChild,
args: ["dropZoneAbove", { read: ViewContainerRef }]
}], dropZoneBelow: [{
type: ViewChild,
args: ["dropZoneBelow", { read: ViewContainerRef }]
}], children: [{
type: ViewChild,
args: ["children", { read: ViewContainerRef }]
}], draggableDiv: [{

@@ -333,2 +364,2 @@ type: ViewChild,

}] }); })();
//# 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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0osU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztJQ2xCL0MsK0JBR2E7OztJQURWLCtDQUEwQjs7OztJQWMxQix3Q0FLc0I7OztJQUhuQixzQ0FBaUIseUNBQUEscURBQUE7OztJQUt2QiwrQkFHYTs7O0lBRFYsK0NBQTBCOztBREE3QixNQUFNLE9BQU8sdUJBQXVCO0lBZ0JqQyxZQUNvQix1QkFBZ0QsRUFDaEQsaUJBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxXQUF3QixFQUN4QixtQkFBd0M7UUFMeEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgs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OzhGQXhVUyx1QkFBdUI7NERBQXZCLHVCQUF1QjsrQkFFRixnQkFBZ0I7K0JBVVosVUFBVTs7Ozs7O1FDckNoRCxvRkFHYTtRQUNiLGlDQUtDO1FBSkUsK0dBQWEsNEJBQXdCLElBQUMsOEZBQzNCLDBCQUFzQixJQURLO1FBS3RDLDhCQUdDO1FBRkUseUlBQTBCLDJCQUF1QixJQUFDO1FBR2xELHlIQUFxQztRQUN4QyxpQkFBTTtRQUNOLHNHQUtzQjtRQUN6QixpQkFBTTtRQUNOLG9GQUdhOztRQXpCVCx1REFBa0M7UUFXaEMsZUFBNEI7UUFBNUIsMENBQTRCO1FBSzNCLGVBQXdEO1FBQXhELGlGQUF3RDtRQU8zRCxlQUFrQztRQUFsQyx1REFBa0M7O3VGREN6Qix1QkFBdUI7Y0FMbkMsU0FBUztlQUFDO2dCQUNSLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLFdBQVcsRUFBRSxtQ0FBbUM7Z0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2FBQ2xEO21PQUVXLE1BQU07a0JBQWQsS0FBSztZQUNxRCxRQUFRO2tCQUFsRSxTQUFTO21CQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQVVRLFlBQVk7a0JBQXBFLFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIEFmdGVyVmlld0luaXQsXHJcbiAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICBDb21wb25lbnQsXHJcbiAgIEVsZW1lbnRSZWYsXHJcbiAgIElucHV0LFxyXG4gICBPbkluaXQsXHJcbiAgIFZpZXdDaGlsZCxcclxuICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcm9vdC9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZHJhZy1zdGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlLCBUcmVlU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCcmFuY2ggfSBmcm9tIFwiLi4vY2xhc3Nlcy9CcmFuY2hcIjtcclxuaW1wb3J0IHsgaXNEcmFnZ2luZ0FsbG93ZWQsIGlzTmVzdGluZ0FsbG93ZWQgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBza2lwVW50aWwsIHRha2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgR2xvYmFsRXZlbnRzU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2dsb2JhbC1ldmVudHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZSB9IGZyb20gXCIuLi9jbGFzc2VzL0Ryb3Bab25lXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwibGltYmxlLXRyZWUtbm9kZVwiLFxyXG4gICB0ZW1wbGF0ZVVybDogXCIuL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgc3R5bGVVcmxzOiBbXCIuL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICAgQElucHV0KCkgYnJhbmNoOiBCcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcIm5vZGVIb3N0XCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwcml2YXRlIG5vZGVIb3N0OlxyXG4gICAgICB8IFZpZXdDb250YWluZXJSZWZcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyBkcm9wWm9uZUFib3ZlOiBEcm9wWm9uZSB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHJlbmRlckRyb3Bab25lQWJvdmU6IGJvb2xlYW47XHJcbiAgIHB1YmxpYyBkcm9wWm9uZUJlbG93OiBEcm9wWm9uZSB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHJlbmRlckRyb3Bab25lQmVsb3c6IGJvb2xlYW47XHJcbiAgIHB1YmxpYyBkcm9wWm9uZUluc2lkZTogRHJvcFpvbmUgfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyByZW5kZXJEcm9wWm9uZUluc2lkZTogYm9vbGVhbjtcclxuICAgcHVibGljIHJlYWRvbmx5IHJlbmRlcklubmVyQnJhbmNoOiBCb29sZWFuO1xyXG4gICBAVmlld0NoaWxkKFwiZHJhZ2dhYmxlRGl2XCIsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIGRyYWdnYWJsZURpdjpcclxuICAgICAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudENyZWF0b3JTZXJ2aWNlOiBDb21wb25lbnRDcmVhdG9yU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXRlU2VydmljZTogRHJhZ1N0YXRlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmVlU2VydmljZTogVHJlZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsRXZlbnRzU2VydmljZTogR2xvYmFsRXZlbnRzU2VydmljZVxyXG4gICApIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgdGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucy5saXN0TW9kZSAhPT0gdHJ1ZSAmJlxyXG4gICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKCkgIT09IHRydWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRoaXMucmVuZGVySW5uZXJCcmFuY2ggPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLnJlbmRlcklubmVyQnJhbmNoID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXJEcm9wWm9uZUJlbG93ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVuZGVyRHJvcFpvbmVBYm92ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlbmRlckRyb3Bab25lSW5zaWRlID0gZmFsc2U7XHJcbiAgIH1cclxuXHJcbiAgIG5nT25Jbml0KCkge1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyRHJvcFpvbmVzKCk7XHJcbiAgIH1cclxuXHJcbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgdGhpcy5yZW5kZXJOb2RlKCk7XHJcbiAgICAgIHRoaXMuY2hlY2tGb3JIYW5kbGUoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnc3RhcnRIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIgPT09IG51bGwgfHwgdGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcnVuIGRyYWdzdGFydEhhbmRsZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmIChkcmFnZ2VkRWxlbWVudC5wYXJlbnRFbGVtZW50Py50YWdOYW1lICE9PSBcIkxJTUJMRS1UUkVFLU5PREVcIikge1xyXG4gICAgICAgICAvL0Rvbid0IGRyYWcgc3R1ZmYgdGhhdCBpc24ndCBwYXJ0IG9mIHRoZSB0cmVlXHJcbiAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IFwibW92ZVwiO1xyXG4gICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZHJhZ2dpbmcodGhpcy5icmFuY2gpO1xyXG4gICAgICAvL1dlIGhhdmUgdG8gdXNlIGEgc2V0VGltZW91dCBkdWUgdG8gYSBidWcgaW4gY2hyb21lOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjA3MzM4NzAvODc5NjY1MVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgZHJhZ2dlZEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImRyYWdnaW5nXCIpO1xyXG4gICAgICAgICBpZiAodGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3Qgc2hvdyBzdXJyb3VuZGluZyBkcm9wIHpvbmVzXCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuYnJhbmNoLmdldFBhcmVudCgpO1xyXG4gICAgICAgICBsZXQgcGFyZW50RGF0YTogTGltYmxlVHJlZU5vZGU7XHJcbiAgICAgICAgIGxldCBwYXJlbnROZXN0aW5nQWxsb3dlZCA9IHRydWU7XHJcbiAgICAgICAgIGlmIChwYXJlbnQ/LmRhdGEgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcGFyZW50RGF0YSA9IHBhcmVudD8uZGF0YSBhcyBMaW1ibGVUcmVlTm9kZTtcclxuICAgICAgICAgICAgcGFyZW50TmVzdGluZ0FsbG93ZWQgPSBpc05lc3RpbmdBbGxvd2VkKFxyXG4gICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLFxyXG4gICAgICAgICAgICAgICBwYXJlbnREYXRhXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgaWYgKHRoaXMuZHJvcFpvbmVBYm92ZSAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE5lc3RpbmdBbGxvd2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnNob3dEcm9wWm9uZUZhbWlseSh0aGlzLmRyb3Bab25lQWJvdmUsIHtcclxuICAgICAgICAgICAgICAgam9pbkZhbWlsaWVzOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZURhdGE/Lmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICAgICAgICAgICB0aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgLy9XZSBhcmUgZHJhZ2dpbmcgdGhlIG9ubHkgZWxlbWVudCBpbiB0aGUgdHJlZSwgc28gd2UgaGF2ZSB0byB1c2UgdGhlIHBsYWNlaG9sZGVyIHN5c3RlbVxyXG4gICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnVzZVBsYWNlaG9sZGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyYWdlbmRIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBkcmFnZ2VkRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHJhZ2dpbmdcIik7XHJcbiAgICAgIGlmICh0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0U3RhdGUoKSAhPT0gXCJjYXB0dXJlZFwiKSB7XHJcbiAgICAgICAgIC8vV2Fzbid0IGRyb3BwZWQgaW50byBhIHZhbGlkIHRyZWUsIHNvIHJlc2V0IGZvciBuZXh0IGRyYWcgYW5kXHJcbiAgICAgICAgIC8vZG9uJ3QgZG8gYW55dGhpbmcgZWxzZS5cclxuICAgICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLnJlbGVhc2UoKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UucmVzdG9yZUZhbWlsaWVzKCk7XHJcbiAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UucmVtb3ZlUGxhY2Vob2xkZXIoKTtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5zdGF0ZSQucGlwZSh0YWtlKDIpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgIGlmIChzdGF0ZSA9PT0gXCJjYXB0dXJlZFwiICYmIHRoaXMuYnJhbmNoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmUodGhpcy5icmFuY2gpO1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UucmVsZWFzZSgpO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ292ZXJIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsRXZlbnRzU2VydmljZS5zY3JvbGxpbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGdldCBjdXJyZW50IGJyYW5jaCBkdXJpbmcgZHJhZ292ZXIgZXZlbnRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc291cmNlQnJhbmNoID0gdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldERhdGEoKTtcclxuICAgICAgaWYgKHNvdXJjZUJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIC8vVGhleSBtaWdodCBiZSBkcmFnZ2luZyBzb21ldGhpbmcgdGhhdCBpc24ndCBhIG5vZGUuIEp1c3QgaWdub3JlIGl0LlxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy9JZiB0cnlpbmcgdG8gZHJvcCBvbiBzZWxmLCByZXR1cm4uXHJcbiAgICAgIGlmIChcclxuICAgICAgICAgc291cmNlQnJhbmNoID09PSB0aGlzLmJyYW5jaCB8fFxyXG4gICAgICAgICB0aGlzLmJyYW5jaC5nZXRBbmNlc3RvcnMoKS5pbmNsdWRlcyhzb3VyY2VCcmFuY2gpXHJcbiAgICAgICkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKCkgPT09IHRydWUgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIC8vSWYgcGxhY2Vob2xkZXIgc3lzdGVtIGlzIGFjdGl2ZSwgdGhlbiBhY3RpdmF0ZSB0aGUgb25seSBleGlzdGluZyBkcm9wIHpvbmVcclxuICAgICAgICAgLy9hbmQgc2tpcCB0aGUgcmVzdCBvZiB0aGUgbG9naWMgaW4gdGhpcyBmdW5jdGlvblxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5zaG93RHJvcFpvbmVGYW1pbHkodGhpcy5kcm9wWm9uZUFib3ZlKTtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHRvcExpbmUgPSB0YXJnZXQub2Zmc2V0SGVpZ2h0IC8gMzsgLy9hbiBpbWFnaW5hcnkgbGluZSAxLzMgb2YgdGhlIHdheSBkb3duIGZyb20gdGhlIHRvcCBvZiB0aGUgZWxlbWVudDtcclxuICAgICAgY29uc3QgYm90dG9tTGluZSA9IHRvcExpbmUgKiAyOyAvL2FuIGltYWdpbmFyeSBsaW5lIDEvMyBvZiB0aGUgd2F5IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgZWxlbWVudDtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5icmFuY2guZ2V0UGFyZW50KCk7XHJcbiAgICAgIGxldCBwYXJlbnREYXRhOiBMaW1ibGVUcmVlTm9kZTtcclxuICAgICAgbGV0IHBhcmVudE5lc3RpbmdBbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgaWYgKHBhcmVudD8uZGF0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgICBwYXJlbnREYXRhID0gcGFyZW50Py5kYXRhIGFzIExpbWJsZVRyZWVOb2RlO1xyXG4gICAgICAgICBwYXJlbnROZXN0aW5nQWxsb3dlZCA9IGlzTmVzdGluZ0FsbG93ZWQoXHJcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsXHJcbiAgICAgICAgICAgIHBhcmVudERhdGFcclxuICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhY3RpdmVEcm9wWm9uZSA9IHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmdldEFjdGl2ZURyb3Bab25lKCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgZXZlbnQub2Zmc2V0WSA8IHRvcExpbmUgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgKGFjdGl2ZURyb3Bab25lID09PSBudWxsIHx8XHJcbiAgICAgICAgICAgICFEcm9wWm9uZS5kcm9wWm9uZUxvY2F0aW9uc0FyZUVxdWFsKFxyXG4gICAgICAgICAgICAgICBhY3RpdmVEcm9wWm9uZSxcclxuICAgICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlXHJcbiAgICAgICAgICAgICkpICYmXHJcbiAgICAgICAgIHBhcmVudE5lc3RpbmdBbGxvd2VkXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYnJhbmNoLmdldEluZGV4KCk7XHJcbiAgICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkIHx8IGluZGV4ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbid0IGdldCBicmFuY2ggaW5kZXhcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc2hvd0Ryb3Bab25lRmFtaWx5KHRoaXMuZHJvcFpvbmVBYm92ZSwge1xyXG4gICAgICAgICAgICBhY3RpdmF0ZUxvd2VzdEluc3RlYWRPZkZvdW5kZXI6IHRydWVcclxuICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIGV2ZW50Lm9mZnNldFkgPCBib3R0b21MaW5lICYmXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAoYWN0aXZlRHJvcFpvbmUgPT09IG51bGwgfHxcclxuICAgICAgICAgICAgIURyb3Bab25lLmRyb3Bab25lTG9jYXRpb25zQXJlRXF1YWwoXHJcbiAgICAgICAgICAgICAgIGFjdGl2ZURyb3Bab25lLFxyXG4gICAgICAgICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5zaG93RHJvcFpvbmVGYW1pbHkodGhpcy5kcm9wWm9uZUluc2lkZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIGV2ZW50Lm9mZnNldFkgPj0gYm90dG9tTGluZSAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQmVsb3cgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAoYWN0aXZlRHJvcFpvbmUgPT09IG51bGwgfHxcclxuICAgICAgICAgICAgIURyb3Bab25lLmRyb3Bab25lTG9jYXRpb25zQXJlRXF1YWwoXHJcbiAgICAgICAgICAgICAgIGFjdGl2ZURyb3Bab25lLFxyXG4gICAgICAgICAgICAgICB0aGlzLmRyb3Bab25lQmVsb3dcclxuICAgICAgICAgICAgKSkgJiZcclxuICAgICAgICAgdGhpcy5icmFuY2guZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICAgcGFyZW50TmVzdGluZ0FsbG93ZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5icmFuY2guZ2V0SW5kZXgoKTtcclxuICAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3QgZ2V0IGJyYW5jaCBpbmRleFwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5zaG93RHJvcFpvbmVGYW1pbHkodGhpcy5kcm9wWm9uZUJlbG93KTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlbmRlck5vZGUoKSB7XHJcbiAgICAgIGlmICh0aGlzLm5vZGVIb3N0ID09PSB1bmRlZmluZWQgfHwgdGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVuZGVyIHRyZWUgbm9kZVwiKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5icmFuY2guZGF0YS5jb21wb25lbnQ7XHJcbiAgICAgIGlmIChjb21wb25lbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICBjb21wb25lbnQgPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zPy5kZWZhdWx0Q29tcG9uZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb21wb25lbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsaW1ibGVUcmVlIHJlcXVpcmVzIGEgY29tcG9uZW50IHRvIHJlbmRlclwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxhbnk+KFxyXG4gICAgICAgICBjb21wb25lbnQuY2xhc3MsXHJcbiAgICAgICAgIHRoaXMubm9kZUhvc3RcclxuICAgICAgKTtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm5vZGVEYXRhID0gdGhpcy5icmFuY2guZGF0YTtcclxuICAgICAgZm9yIChjb25zdCBiaW5kaW5nIGluIGNvbXBvbmVudC5iaW5kaW5ncykge1xyXG4gICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2VbYmluZGluZ10gPSBjb21wb25lbnQuYmluZGluZ3NbYmluZGluZ107XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSByZWdpc3RlckRyb3Bab25lcygpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmFsbG93RHJhZ2dpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcmVnaXN0ZXIgZHJvcCB6b25lc1wiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmJyYW5jaC5nZXRQYXJlbnQoKTtcclxuICAgICAgbGV0IHBhcmVudERhdGE6IExpbWJsZVRyZWVOb2RlO1xyXG4gICAgICBpZiAocGFyZW50Py5kYXRhICE9PSBudWxsKSB7XHJcbiAgICAgICAgIHBhcmVudERhdGEgPSBwYXJlbnQ/LmRhdGEgYXMgTGltYmxlVHJlZU5vZGU7XHJcbiAgICAgICAgIGlmICghaXNOZXN0aW5nQWxsb3dlZCh0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLCBwYXJlbnREYXRhKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFkZERyb3Bab25lQWJvdmUoKTtcclxuICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UuZ2V0UGxhY2Vob2xkZXIoKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAvL09ubHkgcmVnaXN0ZXIgb25lIGRyb3Agem9uZSBpZiB0aGUgcGxhY2Vob2xkZXIgc3lzdGVtIGlzIGFjdGl2ZVxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hZGREcm9wWm9uZUJlbG93KCk7XHJcbiAgICAgIGlmIChpc05lc3RpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHRoaXMuYnJhbmNoLmRhdGEpKSB7XHJcbiAgICAgICAgIHRoaXMuYWRkRHJvcFpvbmVJbnNpZGUoKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGFkZERyb3Bab25lQWJvdmUoKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byByZWdpc3RlciBkcm9wIHpvbmUgYWJvdmVcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5icmFuY2guZ2V0UGFyZW50KCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudENvb3JkaW5hdGVzW2N1cnJlbnRDb29yZGluYXRlcy5sZW5ndGggLSAxXTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlID0gbmV3IERyb3Bab25lKFxyXG4gICAgICAgICBbLi4uKHBhcmVudD8uZ2V0Q29vcmRpbmF0ZXMoKSA/PyBbXSldLFxyXG4gICAgICAgICBpbmRleFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBhZGRlZEFib3ZlID0gdGhpcy5kcm9wWm9uZVNlcnZpY2UuYWRkRHJvcFpvbmUodGhpcy5kcm9wWm9uZUFib3ZlKTtcclxuICAgICAgaWYgKGFkZGVkQWJvdmUgPT09IHRydWUpIHtcclxuICAgICAgICAgdGhpcy5yZW5kZXJEcm9wWm9uZUFib3ZlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgdGhpcy5yZW5kZXJEcm9wWm9uZUFib3ZlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBhZGREcm9wWm9uZUJlbG93KCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcmVnaXN0ZXIgZHJvcCB6b25lIGFib3ZlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuYnJhbmNoLmdldFBhcmVudCgpO1xyXG4gICAgICBjb25zdCBjdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnRDb29yZGluYXRlc1tjdXJyZW50Q29vcmRpbmF0ZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVCZWxvdyA9IG5ldyBEcm9wWm9uZShcclxuICAgICAgICAgWy4uLihwYXJlbnQ/LmdldENvb3JkaW5hdGVzKCkgPz8gW10pXSxcclxuICAgICAgICAgaW5kZXggKyAxXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGFkZGVkQmVsb3cgPSB0aGlzLmRyb3Bab25lU2VydmljZS5hZGREcm9wWm9uZSh0aGlzLmRyb3Bab25lQmVsb3cpO1xyXG4gICAgICBpZiAoYWRkZWRCZWxvdyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICB0aGlzLnJlbmRlckRyb3Bab25lQmVsb3cgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLnJlbmRlckRyb3Bab25lQmVsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGFkZERyb3Bab25lSW5zaWRlKCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcmVnaXN0ZXIgZHJvcCB6b25lIGFib3ZlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUgPSBuZXcgRHJvcFpvbmUoWy4uLnRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCldLCAwKTtcclxuICAgICAgY29uc3QgYWRkZWRJbnNpZGUgPSB0aGlzLmRyb3Bab25lU2VydmljZS5hZGREcm9wWm9uZSh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgICAgaWYgKGFkZGVkSW5zaWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgIHRoaXMucmVuZGVyRHJvcFpvbmVJbnNpZGUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLnJlbmRlckRyb3Bab25lSW5zaWRlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBjaGVja0ZvckhhbmRsZSgpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMuZHJhZ2dhYmxlRGl2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRyYWdnYWJsZURpdi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCBoYW5kbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubGltYmxlLXRyZWUtaGFuZGxlXCIpO1xyXG4gICAgICBpZiAoIWlzRHJhZ2dpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHRoaXMuYnJhbmNoPy5kYXRhKSkge1xyXG4gICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCBcImZhbHNlXCIpO1xyXG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCBcInRydWVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgICAgICAvL0ZvciBzb21lIHJlYXNvbiBtb3VzZXVwIGRvZXNuJ3QgZmlyZSBhZnRlciBhIGRyYWcsIHNvIHdlIHVzZSB0aGlzIG9ic2VydmFibGUgc2VxdWVuY2UgaW5zdGVhZC5cclxuICAgICAgICAgICAgY29uc3QgZHJhZ2dpbmcgPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2Uuc3RhdGUkLnBpcGUoXHJcbiAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlID09PSBcImRyYWdnaW5nXCIpLFxyXG4gICAgICAgICAgICAgICBmaXJzdCgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5zdGF0ZSRcclxuICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHNraXBVbnRpbChkcmFnZ2luZyksXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlID09PSBcImlkbGVcIiksXHJcbiAgICAgICAgICAgICAgICAgIGZpcnN0KClcclxuICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgIH1cclxufVxyXG4iLCI8ZHJvcC16b25lXHJcbiAgICpuZ0lmPVwicmVuZGVyRHJvcFpvbmVBYm92ZSA9PT0gdHJ1ZVwiXHJcbiAgIFtkcm9wWm9uZV09XCJkcm9wWm9uZUFib3ZlXCJcclxuPjwvZHJvcC16b25lPlxyXG48ZGl2XHJcbiAgIChkcmFnc3RhcnQpPVwiZHJhZ3N0YXJ0SGFuZGxlcigkZXZlbnQpXCJcclxuICAgKGRyYWdlbmQpPVwiZHJhZ2VuZEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgIGNsYXNzPVwibGltYmxlLXBhcmVudC1jb250YWluZXJcIlxyXG4gICAjZHJhZ2dhYmxlRGl2XHJcbj5cclxuICAgPGRpdlxyXG4gICAgICAoZHJhZ292ZXJOb0NoYW5nZURldGVjdCk9XCJkcmFnb3ZlckhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgIFtkcmFnb3ZlckV2ZW50VGhyb3R0bGVdPVwiMTBcIlxyXG4gICA+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9kZUhvc3Q+PC9uZy10ZW1wbGF0ZT5cclxuICAgPC9kaXY+XHJcbiAgIDxsaW1ibGUtdHJlZS1icmFuY2hcclxuICAgICAgKm5nSWY9XCJicmFuY2ggIT09IHVuZGVmaW5lZCAmJiByZW5kZXJJbm5lckJyYW5jaCA9PT0gdHJ1ZVwiXHJcbiAgICAgIFticmFuY2hdPVwiYnJhbmNoXCJcclxuICAgICAgW2Ryb3Bab25lSW5zaWRlXT1cImRyb3Bab25lSW5zaWRlXCJcclxuICAgICAgW3JlbmRlckRyb3Bab25lSW5zaWRlXT1cInJlbmRlckRyb3Bab25lSW5zaWRlXCJcclxuICAgPjwvbGltYmxlLXRyZWUtYnJhbmNoPlxyXG48L2Rpdj5cclxuPGRyb3Atem9uZVxyXG4gICAqbmdJZj1cInJlbmRlckRyb3Bab25lQmVsb3cgPT09IHRydWVcIlxyXG4gICBbZHJvcFpvbmVdPVwiZHJvcFpvbmVCZWxvd1wiXHJcbj48L2Ryb3Atem9uZT5cclxuIl19

@@ -1,11 +0,10 @@

import { Injectable, NgZone } from "@angular/core";
import { DropZoneComponent } from "../drop-zone/drop-zone.component";
import { Injectable } from "@angular/core";
import { arraysAreEqual } from "../util";
import { HiddenBranch } from "../HiddenBranch";
import { DropZone } from "../classes/DropZone";
import { DropZoneLocation } from "../classes/DropZoneLocation";
import * as i0 from "@angular/core";
import * as i1 from "../singletons/drag-state.service";
import * as i2 from "../singletons/component-creator.service";
function sortFamily(memberA, memberB) {
const aCoordinates = memberA.getCoordinates();
const bCoordinates = memberB.getCoordinates();
const aCoordinates = memberA.getFullInsertCoordinates();
const bCoordinates = memberB.getFullInsertCoordinates();
if (aCoordinates.length > bCoordinates.length) {

@@ -20,6 +19,4 @@ return -1;

export class DropZoneService {
constructor(dragStateService, componentCreatorService) {
constructor(dragStateService) {
this.dragStateService = dragStateService;
this.componentCreatorService = componentCreatorService;
this.dropZoneStack = [];
this.dropZoneInventory = [];

@@ -32,14 +29,14 @@ this.dropZoneFamilies = [];

}
addDropZone(coordinates, container) {
if (this.dropZoneStack.find((registeredZone) => arraysAreEqual(registeredZone.coordinates, coordinates)) !== undefined) {
return;
addDropZone(newDropZone) {
if (this.dropZoneInventory.find((registeredZone) => DropZone.dropZoneLocationsAreEqual(registeredZone, newDropZone)) !== undefined) {
return false;
}
const dropZone = new HiddenBranch({ container: container });
this.dropZoneStack.push({ dropZone: dropZone, coordinates: coordinates });
this.dropZoneInventory.push(newDropZone);
return true;
}
/** Clears the view of drop zones, but keeps all the drop zone information */
/** hides all drop zones */
clear() {
if (this.visibleFamily !== null) {
for (const member of this.visibleFamily.members) {
member.data.container.clear();
member.isVisible(false);
}

@@ -58,29 +55,16 @@ this.visibleFamily = null;

this.reset();
if (this.dropZoneStack.length === 0) {
//No need to continue
return;
}
for (const dropZoneInfo of this.dropZoneStack) {
this.dropZoneInventory.push(dropZoneInfo.dropZone);
this.addToTree(dropZoneInfo.dropZone, dropZoneInfo.coordinates);
}
this.dropZoneStack.length = 0;
this.assignFamilies();
}
/** clears the view of drop zones and deletes all the drop zone information
* EXCEPT for the dropZoneStack */
/** hides all drop zones and deletes all the family assignments */
reset() {
this.clear();
this.dropZoneFamilies.length = 0;
this.dropZoneInventory.length = 0;
if (this.tree) {
this.treeWithDropZones = HiddenBranch.fromBranch(this.tree);
}
}
/** Sets the service back to the initial state: clears the view of drop zones,
* deletes all the drop zone information, and empties the dropZoneStack.
/**
* Restores the service to its initial state: hides all drop zones,
* deletes all the family assignments, and empties the dropZoneInventory.
*/
restart() {
this.reset();
this.dropZoneStack.length = 0;
this.dropZoneInventory.length = 0;
}

@@ -92,3 +76,3 @@ restoreFamilies() {

for (const member of this.tempFamilies[0].members) {
member.data.family = this.tempFamilies[0];
member.setFamily(this.tempFamilies[0]);
}

@@ -98,3 +82,3 @@ if (this.tempFamilies[1] !== null) {

for (const member of this.tempFamilies[1].members) {
member.data.family = this.tempFamilies[1];
member.setFamily(this.tempFamilies[1]);
}

@@ -108,5 +92,7 @@ }

*/
showDropZoneFamily(coordinates, options = { joinFamilies: false, activateLowestInsteadOfFounder: false }) {
showDropZoneFamily(
/** Note: this drop zone may not exist in the dropZoneInventory; we have to search the inventory based on its location */
dropZone, options = { joinFamilies: false, activateLowestInsteadOfFounder: false }) {
if (this.activeDropZone !== null &&
arraysAreEqual(this.activeDropZone.getCoordinates(), coordinates)) {
DropZone.dropZoneLocationsAreEqual(this.activeDropZone, dropZone)) {
//Already showing the family with the appropriate active drop zone

@@ -118,18 +104,15 @@ return;

}
if (this.treeWithDropZones === undefined) {
throw new Error("dropZoneService not initialized");
}
const target = this.treeWithDropZones.findByCoordinates(coordinates, true);
const target = this.dropZoneInventory.find((zone) => DropZone.dropZoneLocationsAreEqual(zone, dropZone));
if (target === undefined) {
throw new Error(`Could not find drop zone to show. Coordinates: ${JSON.stringify(coordinates)}`);
throw new Error(`Could not find drop zone to show. location: ${JSON.stringify(dropZone.getLocation())}`);
}
const family = target.data.family;
const family = target.getFamily();
if (options.joinFamilies === true) {
const coordinates2 = [...coordinates];
coordinates2[coordinates2.length - 1]++;
const target2 = this.treeWithDropZones.findByCoordinates(coordinates2, true);
const location1 = dropZone.getLocation();
const location2 = new DropZoneLocation([...location1.parentCoordinates], location1.insertIndex + 1);
const target2 = this.dropZoneInventory.find((zone) => DropZone.dropZoneLocationsAreEqual(zone, location2));
if (target2 === undefined) {
throw new Error("Could not find drop zone to show");
}
const family2 = target2.data.family;
const family2 = target2.getFamily();
if (family === undefined || family2 === undefined) {

@@ -144,3 +127,3 @@ throw new Error("No family");

for (const member of family.members.sort(sortFamily)) {
member.data.family = newFamily;
member.setFamily(newFamily);
if (member !== family.founder) {

@@ -157,4 +140,5 @@ if (this.activeDropZone === null) {

for (const member of family2.members) {
member.data.family = newFamily;
if (member.getCoordinates().length < target2.getCoordinates().length) {
member.setFamily(newFamily);
if (member.getLocation().parentCoordinates.length <
target2.getLocation().parentCoordinates.length) {
newFamily.members.push(member);

@@ -200,36 +184,15 @@ this.showDropZone(member);

}
this.swapActiveDropZone(lowestMember.getCoordinates());
this.swapActiveDropZone(lowestMember);
}
}
swapActiveDropZone(newActiveDropZoneCoordinates) {
swapActiveDropZone(newActiveDropZone) {
if (this.visibleFamily === null) {
throw new Error("No visible family available for swapping");
}
if (this.treeWithDropZones === undefined) {
throw new Error("dropZoneService not initialized");
}
const index = this.visibleFamily.members.findIndex((dropZone) => {
return arraysAreEqual(dropZone.getCoordinates(), newActiveDropZoneCoordinates);
});
const index = this.visibleFamily.members.findIndex((dropZone) => dropZone === newActiveDropZone);
if (index === -1) {
throw new Error("failed to swap active drop zone");
}
const newActiveDropZone = this.treeWithDropZones.findByCoordinates(newActiveDropZoneCoordinates, true);
if (newActiveDropZone === undefined) {
throw new Error("Failed to get new drop zone");
}
this.setActiveDropZone(newActiveDropZone);
}
addToTree(dropZone, coordinates) {
if (this.treeWithDropZones === undefined) {
throw new Error("dropZoneService not initialized");
}
const parentCoordinates = [...coordinates];
parentCoordinates.pop();
const parent = this.treeWithDropZones.findByCoordinates(parentCoordinates);
if (parent === undefined) {
throw new Error("could not get parent");
}
parent.addHiddenChild(dropZone, coordinates[coordinates.length - 1]);
}
assignFamilies() {

@@ -239,10 +202,10 @@ const orphanZones = [...this.dropZoneInventory];

.filter((zone) => {
const coordinates = zone.getCoordinates();
return (coordinates[coordinates.length - 1] === 0 &&
coordinates.length > 1);
const location = zone.getLocation();
return (location.insertIndex === 0 &&
location.parentCoordinates.length > 0);
})
.sort((valueA, valueB) => {
var _a, _b, _c, _d;
const aCoordinates = valueA.getCoordinates();
const bCoordinates = valueB.getCoordinates();
const aCoordinates = valueA.getFullInsertCoordinates();
const bCoordinates = valueB.getFullInsertCoordinates();
const length = Math.max(aCoordinates.length, bCoordinates.length);

@@ -267,11 +230,11 @@ for (let index = 0; index < length; index++) {

};
dropZone.data.family = family;
dropZone.setFamily(family);
//See if there are any orphans that belong to this family and claim them.
const cursor = [...dropZone.getCoordinates()];
const cursor = [...dropZone.getFullInsertCoordinates()];
while (cursor.length > 0) {
const familyMemberIndex = orphanZones.findIndex((zone) => arraysAreEqual(zone.getCoordinates(), cursor));
const familyMemberIndex = orphanZones.findIndex((zone) => arraysAreEqual(zone.getFullInsertCoordinates(), cursor));
if (familyMemberIndex !== -1) {
const familyMember = orphanZones.splice(familyMemberIndex, 1)[0];
family.members.push(familyMember);
familyMember.data.family = family;
familyMember.setFamily(family);
}

@@ -283,3 +246,3 @@ cursor.pop();

}
for (const dropZone of orphanZones.filter((zone) => zone.getCoordinates().length === 1)) {
for (const dropZone of orphanZones.filter((zone) => zone.getFullInsertCoordinates().length === 1)) {
const family = {

@@ -289,3 +252,3 @@ founder: dropZone,

};
dropZone.data.family = family;
dropZone.setFamily(family);
this.dropZoneFamilies.push(family);

@@ -297,15 +260,11 @@ orphanZones.splice(orphanZones.indexOf(dropZone), 1);

for (const zone of orphanZones) {
orphans += `${JSON.stringify(zone.getCoordinates())}, `;
orphans += `${JSON.stringify(zone.getLocation())}, `;
}
orphans = orphans.slice(0, orphans.length - 2);
throw new Error(`Some zones were not assigned to a family. The orphan zones have the following coordinates: ${orphans}`);
throw new Error(`Some zones were not assigned to a family. The orphan zones have the following locations: ${orphans}`);
}
}
setActiveDropZone(dropZone) {
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();
}
if (this.activeDropZone !== null) {
this.activeDropZone.isActive(false);
}

@@ -321,10 +280,10 @@ this.activeDropZone = dropZone;

}
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();
}
if (this.activeDropZone !== null) {
this.activeDropZone.isActive(true);
}
}
showDropZone(dropZone, active = false) {
if (this.tree === undefined) {
throw new Error("DropZoneService not initialized");
}
if (!this.zoneIsAllowed(dropZone)) {

@@ -334,23 +293,14 @@ //User settings indicate to skip this drop zone

}
const parent = dropZone.getParent();
if (parent === null) {
const parent = this.tree.findByCoordinates(dropZone.getLocation().parentCoordinates);
if (parent === undefined) {
throw new Error("Bad family member");
}
const componentRef = this.componentCreatorService.appendComponent(DropZoneComponent, dropZone.data.container);
componentRef.instance.active = active;
componentRef.instance.coordinates = dropZone.getCoordinates();
dropZone.isVisible(true);
if (active === true) {
this.setActiveDropZone(dropZone);
}
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;
}
zoneIsAllowed(dropZone) {
if (this.treeOptions === undefined) {
if (this.treeOptions === undefined || this.tree === undefined) {
throw new Error("dropZoneService not initialized");

@@ -362,7 +312,7 @@ }

}
const dropZoneParent = dropZone.getParent();
if (dropZoneParent === null) {
const dropZoneParent = this.tree.findByCoordinates(dropZone.getLocation().parentCoordinates);
if (dropZoneParent === undefined) {
throw new Error("Could not get drop zone parent");
}
const dropZoneIndex = dropZone.getIndex();
const dropZoneIndex = dropZone.getLocation().insertIndex;
if (dropZoneIndex === undefined) {

@@ -377,7 +327,7 @@ throw new Error("Could not get drop zone index");

}
DropZoneService.ɵfac = function DropZoneService_Factory(t) { return new (t || DropZoneService)(i0.ɵɵinject(i1.DragStateService), i0.ɵɵinject(i2.ComponentCreatorService)); };
DropZoneService.ɵfac = function DropZoneService_Factory(t) { return new (t || DropZoneService)(i0.ɵɵinject(i1.DragStateService)); };
DropZoneService.ɵprov = i0.ɵɵdefineInjectable({ token: DropZoneService, factory: DropZoneService.ɵfac });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DropZoneService, [{
type: Injectable
}], function () { return [{ type: i1.DragStateService }, { type: i2.ComponentCreatorService }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVKLFVBQVUsRUFDVixNQUFNLEVBRVIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFnQi9DLFNBQVMsVUFBVSxDQUFDLE9BQWlCLEVBQUUsT0FBaUI7SUFDckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUM1QyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ1o7SUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUM1QyxPQUFPLENBQUMsQ0FBQztLQUNYO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWixDQUFDO0FBR0QsTUFBTSxPQUFPLGVBQWU7SUFnQnpCLFlBQ29CLGdCQUFrQyxFQUNsQyx1QkFBZ0Q7UUFEaEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBRWpFLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVB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QUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDNUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFrQyxDQUFDO1FBQzVFLElBQUksY0FBYyxLQUFLLElBQUksRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQ0csSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ3ZCLFdBQVcsQ0FBQyxJQUFJLEVBQ2hCLGNBQWMsQ0FBQyxJQUFJLEVBQ25CLGFBQWEsQ0FDZixFQUNGO1lBQ0MsT0FBTyxJQUFJLENBQUM7U0FDZDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2hCLENBQUM7OzhFQXJhUyxlQUFlO3VEQUFmLGVBQWUsV0FBZixlQUFlO3VGQUFmLGVBQWU7Y0FEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIENvbXBvbmVudFJlZixcclxuICAgSW5qZWN0YWJsZSxcclxuICAgTmdab25lLFxyXG4gICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQnJhbmNoLCBCcmFuY2hDb29yZGluYXRlcyB9IGZyb20gXCIuLi9CcmFuY2hcIjtcclxuaW1wb3J0IHsgRHJhZ1N0YXRlU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgdHlwZSB7IExpbWJsZVRyZWVOb2RlLCBQcm9jZXNzZWRPcHRpb25zIH0gZnJvbSBcIi4vdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuLi9kcm9wLXpvbmUvZHJvcC16b25lLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBhcnJheXNBcmVFcXVhbCB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IEhpZGRlbkJyYW5jaCB9IGZyb20gXCIuLi9IaWRkZW5CcmFuY2hcIjtcclxuXHJcbmludGVyZmFjZSBEcm9wWm9uZURhdGEge1xyXG4gICBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgIGZhbWlseT86IERyb3Bab25lRmFtaWx5O1xyXG4gICBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8RHJvcFpvbmVDb21wb25lbnQ+O1xyXG59XHJcblxyXG50eXBlIERyb3Bab25lID0gSGlkZGVuQnJhbmNoPERyb3Bab25lRGF0YT47XHJcblxyXG5pbnRlcmZhY2UgRHJvcFpvbmVGYW1pbHkge1xyXG4gICAvKiogVGhlIGRlZXBlc3QgbWVtYmVyIG9mIHRoZSBmYW1pbHkgKi9cclxuICAgZm91bmRlcjogRHJvcFpvbmU7XHJcbiAgIG1lbWJlcnM6IEFycmF5PERyb3Bab25lPjtcclxufVxyXG5cclxuZnVuY3Rpb24gc29ydEZhbWlseShtZW1iZXJBOiBEcm9wWm9uZSwgbWVtYmVyQjogRHJvcFpvbmUpIHtcclxuICAgY29uc3QgYUNvb3JkaW5hdGVzID0gbWVtYmVyQS5nZXRDb29yZGluYXRlcygpO1xyXG4gICBjb25zdCBiQ29vcmRpbmF0ZXMgPSBtZW1iZXJCLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgIGlmIChhQ29vcmRpbmF0ZXMubGVuZ3RoID4gYkNvb3JkaW5hdGVzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgIH1cclxuICAgaWYgKGFDb29yZGluYXRlcy5sZW5ndGggPCBiQ29vcmRpbmF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICB9XHJcbiAgIHJldHVybiAwO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEcm9wWm9uZVNlcnZpY2Uge1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU3RhY2s6IEFycmF5PHtcclxuICAgICAgZHJvcFpvbmU6IERyb3Bab25lO1xyXG4gICAgICBjb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXM7XHJcbiAgIH0+O1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lSW52ZW50b3J5OiBBcnJheTxEcm9wWm9uZT47XHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVGYW1pbGllczogQXJyYXk8RHJvcFpvbmVGYW1pbHk+O1xyXG4gICBwcml2YXRlIHZpc2libGVGYW1pbHk6IERyb3Bab25lRmFtaWx5IHwgbnVsbDtcclxuICAgcHJpdmF0ZSBhY3RpdmVEcm9wWm9uZTogRHJvcFpvbmUgfCBudWxsO1xyXG4gICBwcml2YXRlIHRyZWU6IEJyYW5jaDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICBwcml2YXRlIHRyZWVXaXRoRHJvcFpvbmVzOiBIaWRkZW5CcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSB0cmVlT3B0aW9uczogUHJvY2Vzc2VkT3B0aW9ucyB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSB0ZW1wRmFtaWxpZXM6XHJcbiAgICAgIHwgcmVhZG9ubHkgW0Ryb3Bab25lRmFtaWx5LCBEcm9wWm9uZUZhbWlseSB8IG51bGxdXHJcbiAgICAgIHwgcmVhZG9ubHkgW107XHJcblxyXG4gICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcmFnU3RhdGVTZXJ2aWNlOiBEcmFnU3RhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudENyZWF0b3JTZXJ2aWNlOiBDb21wb25lbnRDcmVhdG9yU2VydmljZVxyXG4gICApIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZVN0YWNrID0gW107XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkgPSBbXTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzID0gW107XHJcbiAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IG51bGw7XHJcbiAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPSBudWxsO1xyXG4gICAgICB0aGlzLnRlbXBGYW1pbGllcyA9IFtdO1xyXG4gICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKG51bGwpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgYWRkRHJvcFpvbmUoXHJcbiAgICAgIGNvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcyxcclxuICAgICAgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXHJcbiAgICk6IHZvaWQge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTdGFjay5maW5kKChyZWdpc3RlcmVkWm9uZSkgPT5cclxuICAgICAgICAgICAgYXJyYXlzQXJlRXF1YWwocmVnaXN0ZXJlZFpvbmUuY29vcmRpbmF0ZXMsIGNvb3JkaW5hdGVzKVxyXG4gICAgICAgICApICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkcm9wWm9uZSA9IG5ldyBIaWRkZW5CcmFuY2goeyBjb250YWluZXI6IGNvbnRhaW5lciB9KTtcclxuICAgICAgdGhpcy5kcm9wWm9uZVN0YWNrLnB1c2goeyBkcm9wWm9uZTogZHJvcFpvbmUsIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyB9KTtcclxuICAgfVxyXG5cclxuICAgLyoqIENsZWFycyB0aGUgdmlldyBvZiBkcm9wIHpvbmVzLCBidXQga2VlcHMgYWxsIHRoZSBkcm9wIHpvbmUgaW5mb3JtYXRpb24gKi9cclxuICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy52aXNpYmxlRmFtaWx5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHRoaXMudmlzaWJsZUZhbWlseS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIG1lbWJlci5kYXRhLmNvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN0b3JlRmFtaWxpZXMoKTtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVEcm9wWm9uZShudWxsKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldEFjdGl2ZURyb3Bab25lKCk6IERyb3Bab25lU2VydmljZVtcImFjdGl2ZURyb3Bab25lXCJdIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRHJvcFpvbmU7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBpbml0KHRyZWU6IEJyYW5jaDxhbnk+LCB0cmVlT3B0aW9uczogUHJvY2Vzc2VkT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICB0aGlzLnRyZWUgPSB0cmVlO1xyXG4gICAgICB0aGlzLnRyZWVPcHRpb25zID0gdHJlZU9wdGlvbnM7XHJcbiAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgaWYgKHRoaXMuZHJvcFpvbmVTdGFjay5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgLy9ObyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IGRyb3Bab25lSW5mbyBvZiB0aGlzLmRyb3Bab25lU3RhY2spIHtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUludmVudG9yeS5wdXNoKGRyb3Bab25lSW5mby5kcm9wWm9uZSk7XHJcbiAgICAgICAgIHRoaXMuYWRkVG9UcmVlKGRyb3Bab25lSW5mby5kcm9wWm9uZSwgZHJvcFpvbmVJbmZvLmNvb3JkaW5hdGVzKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRyb3Bab25lU3RhY2subGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5hc3NpZ25GYW1pbGllcygpO1xyXG4gICB9XHJcblxyXG4gICAvKiogY2xlYXJzIHRoZSB2aWV3IG9mIGRyb3Agem9uZXMgYW5kIGRlbGV0ZXMgYWxsIHRoZSBkcm9wIHpvbmUgaW5mb3JtYXRpb25cclxuICAgICogRVhDRVBUIGZvciB0aGUgZHJvcFpvbmVTdGFjayAqL1xyXG4gICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmxlbmd0aCA9IDA7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkubGVuZ3RoID0gMDtcclxuICAgICAgaWYgKHRoaXMudHJlZSkge1xyXG4gICAgICAgICB0aGlzLnRyZWVXaXRoRHJvcFpvbmVzID0gSGlkZGVuQnJhbmNoLmZyb21CcmFuY2godGhpcy50cmVlKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICAvKiogU2V0cyB0aGUgc2VydmljZSBiYWNrIHRvIHRoZSBpbml0aWFsIHN0YXRlOiBjbGVhcnMgdGhlIHZpZXcgb2YgZHJvcCB6b25lcyxcclxuICAgICogZGVsZXRlcyBhbGwgdGhlIGRyb3Agem9uZSBpbmZvcm1hdGlvbiwgYW5kIGVtcHRpZXMgdGhlIGRyb3Bab25lU3RhY2suXHJcbiAgICAqL1xyXG4gICBwdWJsaWMgcmVzdGFydCgpOiB2b2lkIHtcclxuICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU3RhY2subGVuZ3RoID0gMDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlc3RvcmVGYW1pbGllcygpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMudGVtcEZhbWlsaWVzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucG9wKCk7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKHRoaXMudGVtcEZhbWlsaWVzWzBdKTtcclxuICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgdGhpcy50ZW1wRmFtaWxpZXNbMF0ubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuZGF0YS5mYW1pbHkgPSB0aGlzLnRlbXBGYW1pbGllc1swXTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAodGhpcy50ZW1wRmFtaWxpZXNbMV0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2godGhpcy50ZW1wRmFtaWxpZXNbMV0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiB0aGlzLnRlbXBGYW1pbGllc1sxXS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgICAgIG1lbWJlci5kYXRhLmZhbWlseSA9IHRoaXMudGVtcEZhbWlsaWVzWzFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy50ZW1wRmFtaWxpZXMgPSBbXTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICAvKipcclxuICAgICogU2hvd3MgdGhlIGRyb3Agem9uZSBmYW1pbHkgb2YgdGhlIGRyb3Agem9uZSBpbmRpY2F0ZWQgYnkgYGNvb3JkaW5hdGVzYC5cclxuICAgICovXHJcbiAgIHB1YmxpYyBzaG93RHJvcFpvbmVGYW1pbHkoXHJcbiAgICAgIGNvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcyxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICBqb2luRmFtaWxpZXM/OiBib29sZWFuO1xyXG4gICAgICAgICBhY3RpdmF0ZUxvd2VzdEluc3RlYWRPZkZvdW5kZXI/OiBib29sZWFuO1xyXG4gICAgICB9ID0geyBqb2luRmFtaWxpZXM6IGZhbHNlLCBhY3RpdmF0ZUxvd2VzdEluc3RlYWRPZkZvdW5kZXI6IGZhbHNlIH1cclxuICAgKTogdm9pZCB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICBhcnJheXNBcmVFcXVhbCh0aGlzLmFjdGl2ZURyb3Bab25lLmdldENvb3JkaW5hdGVzKCksIGNvb3JkaW5hdGVzKVxyXG4gICAgICApIHtcclxuICAgICAgICAgLy9BbHJlYWR5IHNob3dpbmcgdGhlIGZhbWlseSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhY3RpdmUgZHJvcCB6b25lXHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy52aXNpYmxlRmFtaWx5ICE9PSBudWxsIHx8IHRoaXMuYWN0aXZlRHJvcFpvbmUgIT09IG51bGwpIHtcclxuICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRyZWVXaXRoRHJvcFpvbmVzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcFpvbmVTZXJ2aWNlIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRyZWVXaXRoRHJvcFpvbmVzLmZpbmRCeUNvb3JkaW5hdGVzKFxyXG4gICAgICAgICBjb29yZGluYXRlcyxcclxuICAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgZHJvcCB6b25lIHRvIHNob3cuIENvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgICAgICAgICBjb29yZGluYXRlc1xyXG4gICAgICAgICAgICApfWBcclxuICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmYW1pbHkgPSAodGFyZ2V0LmRhdGEgYXMgRHJvcFpvbmVEYXRhKS5mYW1pbHk7XHJcbiAgICAgIGlmIChvcHRpb25zLmpvaW5GYW1pbGllcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICBjb25zdCBjb29yZGluYXRlczIgPSBbLi4uY29vcmRpbmF0ZXNdO1xyXG4gICAgICAgICBjb29yZGluYXRlczJbY29vcmRpbmF0ZXMyLmxlbmd0aCAtIDFdKys7XHJcbiAgICAgICAgIGNvbnN0IHRhcmdldDIgPSB0aGlzLnRyZWVXaXRoRHJvcFpvbmVzLmZpbmRCeUNvb3JkaW5hdGVzKFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczIsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgKTtcclxuICAgICAgICAgaWYgKHRhcmdldDIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBkcm9wIHpvbmUgdG8gc2hvd1wiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBmYW1pbHkyID0gKHRhcmdldDIuZGF0YSBhcyBEcm9wWm9uZURhdGEpLmZhbWlseTtcclxuICAgICAgICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkIHx8IGZhbWlseTIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBmYW1pbHlcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgbmV3RmFtaWx5ID0ge1xyXG4gICAgICAgICAgICBmb3VuZGVyOiBmYW1pbHkuZm91bmRlcixcclxuICAgICAgICAgICAgbWVtYmVyczogWy4uLmZhbWlseS5tZW1iZXJzXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShmYW1pbHkuZm91bmRlciwgdHJ1ZSk7XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseS5tZW1iZXJzLnNvcnQoc29ydEZhbWlseSkpIHtcclxuICAgICAgICAgICAgbWVtYmVyLmRhdGEuZmFtaWx5ID0gbmV3RmFtaWx5O1xyXG4gICAgICAgICAgICBpZiAobWVtYmVyICE9PSBmYW1pbHkuZm91bmRlcikge1xyXG4gICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAvL0ZhaWxlZCB0byBhY3RpdmF0ZSBhIHpvbmUgc28gZmFyLCBzbyBhY3RpdmF0ZSB0aGlzIG9uZSBpbnN0ZWFkXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlcik7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseTIubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuZGF0YS5mYW1pbHkgPSBuZXdGYW1pbHk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgbWVtYmVyLmdldENvb3JkaW5hdGVzKCkubGVuZ3RoIDwgdGFyZ2V0Mi5nZXRDb29yZGluYXRlcygpLmxlbmd0aFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgbmV3RmFtaWx5Lm1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShtZW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgLy9UZW1wb3JhcmlseSBzdG9yZSB0aGUgb2xkIGZhbWlsaWVzXHJcbiAgICAgICAgIHRoaXMudGVtcEZhbWlsaWVzID0gW2ZhbWlseSwgZmFtaWx5Ml07XHJcbiAgICAgICAgIC8vUmVtb3ZlIHRoZSBvbGQgZmFtaWxpZXNcclxuICAgICAgICAgY29uc3QgZmFtaWx5SW5kZXggPSB0aGlzLmRyb3Bab25lRmFtaWxpZXMuaW5kZXhPZihmYW1pbHkpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMuc3BsaWNlKGZhbWlseUluZGV4LCAxKTtcclxuICAgICAgICAgY29uc3QgZmFtaWx5MkluZGV4ID0gdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmluZGV4T2YoZmFtaWx5Mik7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5zcGxpY2UoZmFtaWx5MkluZGV4LCAxKTtcclxuICAgICAgICAgLy9BZGQgdGhlIG5ldyBmYW1pbHlcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2gobmV3RmFtaWx5KTtcclxuICAgICAgICAgdGhpcy52aXNpYmxlRmFtaWx5ID0gbmV3RmFtaWx5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZmFtaWx5XCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IGZhbWlseTtcclxuICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUoZmFtaWx5LmZvdW5kZXIsIHRydWUpO1xyXG4gICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBmYW1pbHkubWVtYmVycy5zb3J0KHNvcnRGYW1pbHkpKSB7XHJcbiAgICAgICAgICAgIGlmIChtZW1iZXIgIT09IGZhbWlseS5mb3VuZGVyKSB7XHJcbiAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bab25lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vRmFpbGVkIHRvIGFjdGl2YXRlIGEgem9uZSBzbyBmYXIsIHNvIGFjdGl2YXRlIHRoaXMgb25lIGluc3RlYWRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5hY3RpdmF0ZUxvd2VzdEluc3RlYWRPZkZvdW5kZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgY29uc3QgbG93ZXN0TWVtYmVyID0gWy4uLnRoaXMudmlzaWJsZUZhbWlseS5tZW1iZXJzXVxyXG4gICAgICAgICAgICAuc29ydChzb3J0RmFtaWx5KVxyXG4gICAgICAgICAgICAucG9wKCk7XHJcbiAgICAgICAgIGlmIChsb3dlc3RNZW1iZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGxvd2VzdCBtZW1iZXJcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5zd2FwQWN0aXZlRHJvcFpvbmUobG93ZXN0TWVtYmVyLmdldENvb3JkaW5hdGVzKCkpO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBzd2FwQWN0aXZlRHJvcFpvbmUoXHJcbiAgICAgIG5ld0FjdGl2ZURyb3Bab25lQ29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzXHJcbiAgICk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy52aXNpYmxlRmFtaWx5ID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZpc2libGUgZmFtaWx5IGF2YWlsYWJsZSBmb3Igc3dhcHBpbmdcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZVdpdGhEcm9wWm9uZXMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcm9wWm9uZVNlcnZpY2Ugbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52aXNpYmxlRmFtaWx5Lm1lbWJlcnMuZmluZEluZGV4KChkcm9wWm9uZSkgPT4ge1xyXG4gICAgICAgICByZXR1cm4gYXJyYXlzQXJlRXF1YWwoXHJcbiAgICAgICAgICAgIGRyb3Bab25lLmdldENvb3JkaW5hdGVzKCksXHJcbiAgICAgICAgICAgIG5ld0FjdGl2ZURyb3Bab25lQ29vcmRpbmF0ZXNcclxuICAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHN3YXAgYWN0aXZlIGRyb3Agem9uZVwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdBY3RpdmVEcm9wWm9uZSA9IHRoaXMudHJlZVdpdGhEcm9wWm9uZXMuZmluZEJ5Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgIG5ld0FjdGl2ZURyb3Bab25lQ29vcmRpbmF0ZXMsXHJcbiAgICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKG5ld0FjdGl2ZURyb3Bab25lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBuZXcgZHJvcCB6b25lXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUobmV3QWN0aXZlRHJvcFpvbmUpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGFkZFRvVHJlZShkcm9wWm9uZTogRHJvcFpvbmUsIGNvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcyk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy50cmVlV2l0aERyb3Bab25lcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50Q29vcmRpbmF0ZXMgPSBbLi4uY29vcmRpbmF0ZXNdO1xyXG4gICAgICBwYXJlbnRDb29yZGluYXRlcy5wb3AoKTtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy50cmVlV2l0aERyb3Bab25lcy5maW5kQnlDb29yZGluYXRlcyhcclxuICAgICAgICAgcGFyZW50Q29vcmRpbmF0ZXNcclxuICAgICAgKTtcclxuICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCBnZXQgcGFyZW50XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcmVudC5hZGRIaWRkZW5DaGlsZChkcm9wWm9uZSwgY29vcmRpbmF0ZXNbY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV0pO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGFzc2lnbkZhbWlsaWVzKCk6IHZvaWQge1xyXG4gICAgICBjb25zdCBvcnBoYW5ab25lcyA9IFsuLi50aGlzLmRyb3Bab25lSW52ZW50b3J5XTtcclxuICAgICAgY29uc3QgZGVlcGVzdE1lbWJlcnMgPSBvcnBoYW5ab25lc1xyXG4gICAgICAgICAuZmlsdGVyKCh6b25lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gem9uZS5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICBjb29yZGluYXRlc1tjb29yZGluYXRlcy5sZW5ndGggLSAxXSA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgICBjb29yZGluYXRlcy5sZW5ndGggPiAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgIH0pXHJcbiAgICAgICAgIC5zb3J0KCh2YWx1ZUEsIHZhbHVlQikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhQ29vcmRpbmF0ZXMgPSB2YWx1ZUEuZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgICAgICAgY29uc3QgYkNvb3JkaW5hdGVzID0gdmFsdWVCLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KGFDb29yZGluYXRlcy5sZW5ndGgsIGJDb29yZGluYXRlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgIGlmICgoYUNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkgPiAoYkNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAoYUNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkgPCAoYkNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSlcclxuICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgICBmb3IgKGNvbnN0IGRyb3Bab25lIG9mIGRlZXBlc3RNZW1iZXJzKSB7XHJcbiAgICAgICAgIGlmICghb3JwaGFuWm9uZXMuaW5jbHVkZXMoZHJvcFpvbmUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNvbnN0IGZhbWlseTogRHJvcFpvbmVGYW1pbHkgPSB7XHJcbiAgICAgICAgICAgIGZvdW5kZXI6IGRyb3Bab25lLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBbXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICBkcm9wWm9uZS5kYXRhLmZhbWlseSA9IGZhbWlseTtcclxuICAgICAgICAgLy9TZWUgaWYgdGhlcmUgYXJlIGFueSBvcnBoYW5zIHRoYXQgYmVsb25nIHRvIHRoaXMgZmFtaWx5IGFuZCBjbGFpbSB0aGVtLlxyXG4gICAgICAgICBjb25zdCBjdXJzb3IgPSBbLi4uZHJvcFpvbmUuZ2V0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIHdoaWxlIChjdXJzb3IubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmYW1pbHlNZW1iZXJJbmRleCA9IG9ycGhhblpvbmVzLmZpbmRJbmRleCgoem9uZSkgPT5cclxuICAgICAgICAgICAgICAgYXJyYXlzQXJlRXF1YWwoem9uZS5nZXRDb29yZGluYXRlcygpLCBjdXJzb3IpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmYW1pbHlNZW1iZXJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgY29uc3QgZmFtaWx5TWVtYmVyID0gb3JwaGFuWm9uZXMuc3BsaWNlKGZhbWlseU1lbWJlckluZGV4LCAxKVswXTtcclxuICAgICAgICAgICAgICAgZmFtaWx5Lm1lbWJlcnMucHVzaChmYW1pbHlNZW1iZXIpO1xyXG4gICAgICAgICAgICAgICBmYW1pbHlNZW1iZXIuZGF0YS5mYW1pbHkgPSBmYW1pbHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3Vyc29yLnBvcCgpO1xyXG4gICAgICAgICAgICBjdXJzb3JbY3Vyc29yLmxlbmd0aCAtIDFdKys7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2goZmFtaWx5KTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IGRyb3Bab25lIG9mIG9ycGhhblpvbmVzLmZpbHRlcihcclxuICAgICAgICAgKHpvbmUpID0+IHpvbmUuZ2V0Q29vcmRpbmF0ZXMoKS5sZW5ndGggPT09IDFcclxuICAgICAgKSkge1xyXG4gICAgICAgICBjb25zdCBmYW1pbHk6IERyb3Bab25lRmFtaWx5ID0ge1xyXG4gICAgICAgICAgICBmb3VuZGVyOiBkcm9wWm9uZSxcclxuICAgICAgICAgICAgbWVtYmVyczogW2Ryb3Bab25lXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICBkcm9wWm9uZS5kYXRhLmZhbWlseSA9IGZhbWlseTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2goZmFtaWx5KTtcclxuICAgICAgICAgb3JwaGFuWm9uZXMuc3BsaWNlKG9ycGhhblpvbmVzLmluZGV4T2YoZHJvcFpvbmUpLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3JwaGFuWm9uZXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgIGxldCBvcnBoYW5zID0gXCJcIjtcclxuICAgICAgICAgZm9yIChjb25zdCB6b25lIG9mIG9ycGhhblpvbmVzKSB7XHJcbiAgICAgICAgICAgIG9ycGhhbnMgKz0gYCR7SlNPTi5zdHJpbmdpZnkoem9uZS5nZXRDb29yZGluYXRlcygpKX0sIGA7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgb3JwaGFucyA9IG9ycGhhbnMuc2xpY2UoMCwgb3JwaGFucy5sZW5ndGggLSAyKTtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgU29tZSB6b25lcyB3ZXJlIG5vdCBhc3NpZ25lZCB0byBhIGZhbWlseS4gVGhlIG9ycGhhbiB6b25lcyBoYXZlIHRoZSBmb2xsb3dpbmcgY29vcmRpbmF0ZXM6ICR7b3JwaGFuc31gXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBzZXRBY3RpdmVEcm9wWm9uZShkcm9wWm9uZTogRHJvcFpvbmUgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bab25lPy5kYXRhLmNvbXBvbmVudFJlZikge1xyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lLmRhdGEuY29tcG9uZW50UmVmLmluc3RhbmNlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICBpZiAoIU5nWm9uZS5pc0luQW5ndWxhclpvbmUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lLmRhdGEuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPSBkcm9wWm9uZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsICYmXHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpICE9PSBcImRyb3BwYWJsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZHJvcHBhYmxlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPT09IG51bGwgJiZcclxuICAgICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCkgPT09IFwiZHJvcHBhYmxlXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5ub3REcm9wcGFibGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZT8uZGF0YS5jb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZS5kYXRhLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICBpZiAoIU5nWm9uZS5pc0luQW5ndWxhclpvbmUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lLmRhdGEuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgc2hvd0Ryb3Bab25lKGRyb3Bab25lOiBEcm9wWm9uZSwgYWN0aXZlID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgICAgaWYgKCF0aGlzLnpvbmVJc0FsbG93ZWQoZHJvcFpvbmUpKSB7XHJcbiAgICAgICAgIC8vVXNlciBzZXR0aW5ncyBpbmRpY2F0ZSB0byBza2lwIHRoaXMgZHJvcCB6b25lXHJcbiAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYXJlbnQgPSBkcm9wWm9uZS5nZXRQYXJlbnQoKTtcclxuICAgICAgaWYgKHBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgZmFtaWx5IG1lbWJlclwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxEcm9wWm9uZUNvbXBvbmVudD4oXHJcbiAgICAgICAgIERyb3Bab25lQ29tcG9uZW50LFxyXG4gICAgICAgICBkcm9wWm9uZS5kYXRhLmNvbnRhaW5lclxyXG4gICAgICApO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYWN0aXZlID0gYWN0aXZlO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29vcmRpbmF0ZXMgPSBkcm9wWm9uZS5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICBpZiAoYWN0aXZlID09PSB0cnVlKSB7XHJcbiAgICAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUoZHJvcFpvbmUpO1xyXG4gICAgICB9XHJcbiAgICAgIGRyb3Bab25lLmRhdGEuY29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xyXG4gICAgICAvL1dlIHVzZSB0aGlzIHpvbmUgY2hlY2sgaW4gY2FzZSB3ZSBhcmUgcnVubmluZyBvdXRzaWRlIG9mIGFuZ3VsYXIsIHdoaWNoIGhhcHBlbnNcclxuICAgICAgLy9vZnRlbiBkdWUgdG8gdGhlIHdheSB3ZSBjYXRjaCBkcmFnb3ZlciBldmVudHMgdXNpbmcgdGhlIERyYWdvdmVyTm9DaGFuZ2VEZXRlY3RcclxuICAgICAgLy9kaXJlY3RpdmVcclxuICAgICAgaWYgKCFOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpIHtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSB6b25lSXNBbGxvd2VkKGRyb3Bab25lOiBEcm9wWm9uZSk6IGJvb2xlYW4ge1xyXG4gICAgICBpZiAodGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJhZ2dlZE5vZGUgPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0RGF0YSgpO1xyXG4gICAgICBpZiAoZHJhZ2dlZE5vZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBnZXQgZHJhZ2dlZCBub2RlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyb3Bab25lUGFyZW50ID0gZHJvcFpvbmUuZ2V0UGFyZW50KCkgYXMgSGlkZGVuQnJhbmNoPExpbWJsZVRyZWVOb2RlPjtcclxuICAgICAgaWYgKGRyb3Bab25lUGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgZHJvcCB6b25lIHBhcmVudFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkcm9wWm9uZUluZGV4ID0gZHJvcFpvbmUuZ2V0SW5kZXgoKTtcclxuICAgICAgaWYgKGRyb3Bab25lSW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGRyb3Agem9uZSBpbmRleFwiKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMuYWxsb3dEcm9wKFxyXG4gICAgICAgICAgICBkcmFnZ2VkTm9kZS5kYXRhLFxyXG4gICAgICAgICAgICBkcm9wWm9uZVBhcmVudC5kYXRhLFxyXG4gICAgICAgICAgICBkcm9wWm9uZUluZGV4XHJcbiAgICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgfVxyXG59XHJcbiJdfQ==
}], function () { return [{ type: i1.DragStateService }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBUS9ELFNBQVMsVUFBVSxDQUFDLE9BQWlCLEVBQUUsT0FBaUI7SUFDckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDeEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDeEQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNaO0lBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDNUMsT0FBTyxDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUdELE1BQU0sT0FBTyxlQUFlO0lBV3pCLFlBQTZCLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxXQUFxQjtRQUNyQyxJQUNHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUM1QyxRQUFRLENBQUMseUJBQXlCLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUNqRSxLQUFLLFNBQVMsRUFDaEI7WUFDQyxPQUFPLEtBQUssQ0FBQztTQUNmO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNmLENBQUM7SUFFRCwyQkFBMkI7SUFDcEIsS0FBSztRQUNULElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDOUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtnQkFDOUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0saUJBQWlCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM5QixDQUFDO0lBRU0sSUFBSSxDQUFDLElBQWlCLEVBQUUsV0FBNkI7UUFDekQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrRUFBa0U7SUFDM0QsS0FBSztRQUNULElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPO1FBQ1gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLGVBQWU7UUFDbkIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pDO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7b0JBQ2hELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QzthQUNIO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7U0FDekI7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7SUFDdEIseUhBQXlIO0lBQ3pILFFBQWtCLEVBQ2xCLFVBR0ksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLDhCQUE4QixFQUFFLEtBQUssRUFBRTtRQUVsRSxJQUNHLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSTtZQUM1QixRQUFRLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsRUFDbEU7WUFDQyxrRUFBa0U7WUFDbEUsT0FBTztTQUNUO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUM5RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZjtRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNqRCxRQUFRLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUNwRCxDQUFDO1FBQ0YsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ1osK0NBQStDLElBQUksQ0FBQyxTQUFTLENBQzFELFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FDeEIsRUFBRSxDQUNMLENBQUM7U0FDSjtRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQ2hDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUNuQyxDQUFDLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQ2hDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUMzQixDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2xELFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQ3JELENBQUM7WUFDRixJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQzthQUN0RDtZQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtnQkFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMvQjtZQUNELE1BQU0sU0FBUyxHQUFHO2dCQUNmLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztnQkFDdkIsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQzlCLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTt3QkFDL0IsZ0VBQWdFO3dCQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDbEM7eUJBQU07d0JBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDNUI7aUJBQ0g7YUFDSDtZQUNELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDbkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsSUFDRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsaUJBQWlCLENBQUMsTUFBTTtvQkFDN0MsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFDL0M7b0JBQ0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzVCO2FBQ0g7WUFDRCxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0Qyx5QkFBeUI7WUFDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlDLG9CQUFvQjtZQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1NBQ2pDO2FBQU07WUFDSixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDL0I7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbkQsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTt3QkFDL0IsZ0VBQWdFO3dCQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDbEM7eUJBQU07d0JBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDNUI7aUJBQ0g7YUFDSDtTQUNIO1FBQ0QsSUFBSSxPQUFPLENBQUMsOEJBQThCLEtBQUssSUFBSSxFQUFFO1lBQ2xELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztpQkFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDaEIsR0FBRyxFQUFFLENBQUM7WUFDVixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQzthQUNqRDtZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN4QztJQUNKLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxpQkFBMkI7UUFDbEQsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQy9DLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssaUJBQWlCLENBQzlDLENBQUM7UUFDRixJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxjQUFjO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRCxNQUFNLGNBQWMsR0FBRyxXQUFXO2FBQzlCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sQ0FDSixRQUFRLENBQUMsV0FBVyxLQUFLLENBQUM7Z0JBQzFCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUN2QyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFOztZQUN0QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUN2RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksT0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1DQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1DQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzVELE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ1o7cUJBQU0sSUFDSixPQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsbUNBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsbUNBQUksQ0FBQyxDQUFDLENBQUMsRUFDMUQ7b0JBQ0MsT0FBTyxDQUFDLENBQUM7aUJBQ1g7YUFDSDtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7UUFDTixLQUFLLE1BQU0sUUFBUSxJQUFJLGNBQWMsRUFBRTtZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbEMsU0FBUzthQUNYO1lBQ0QsTUFBTSxNQUFNLEdBQW1CO2dCQUM1QixPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLEVBQUU7YUFDYixDQUFDO1lBQ0YsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQix5RUFBeUU7WUFDekUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDdEQsY0FBYyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUN6RCxDQUFDO2dCQUNGLElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQzNCLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNsQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNqQztnQkFDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM5QjtZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7UUFDRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQ3RDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUN4RCxFQUFFO1lBQ0EsTUFBTSxNQUFNLEdBQW1CO2dCQUM1QixPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQ3JCLENBQUM7WUFDRixRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLEVBQUU7Z0JBQzdCLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQzthQUN2RDtZQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxLQUFLLENBQ1osNEZBQTRGLE9BQU8sRUFBRSxDQUN2RyxDQUFDO1NBQ0o7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBeUI7UUFDaEQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQy9CLElBQ0csSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxXQUFXLEVBQ2pEO1lBQ0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BDO2FBQU0sSUFDSixJQUFJLENBQUMsY0FBYyxLQUFLLElBQUk7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLFdBQVcsRUFDakQ7WUFDQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkM7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFO1lBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JDO0lBQ0osQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUFrQixFQUFFLE1BQU0sR0FBRyxLQUFLO1FBQ3BELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEMsK0NBQStDO1lBQy9DLE9BQU8sS0FBSyxDQUFDO1NBQ2Y7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUN2QyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsaUJBQWlCLENBQzFDLENBQUM7UUFDRixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZixDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQWtCO1FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDNUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUMvQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsaUJBQWlCLENBQzFDLENBQUM7UUFDRixJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN6RCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFDRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDdkIsV0FBVyxDQUFDLElBQUksRUFDaEIsY0FBYyxDQUFDLElBQXNCLEVBQ3JDLGFBQWEsQ0FDZixFQUNGO1lBQ0MsT0FBTyxJQUFJLENBQUM7U0FDZDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2hCLENBQUM7OzhFQW5XUyxlQUFlO3VEQUFmLGVBQWUsV0FBZixlQUFlO3VGQUFmLGVBQWU7Y0FEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCcmFuY2ggfSBmcm9tIFwiLi4vY2xhc3Nlcy9CcmFuY2hcIjtcclxuaW1wb3J0IHsgRHJhZ1N0YXRlU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgdHlwZSB7IExpbWJsZVRyZWVOb2RlLCBQcm9jZXNzZWRPcHRpb25zIH0gZnJvbSBcIi4vdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGFycmF5c0FyZUVxdWFsIH0gZnJvbSBcIi4uL3V0aWxcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmUgfSBmcm9tIFwiLi4vY2xhc3Nlcy9Ecm9wWm9uZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUxvY2F0aW9uIH0gZnJvbSBcIi4uL2NsYXNzZXMvRHJvcFpvbmVMb2NhdGlvblwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcm9wWm9uZUZhbWlseSB7XHJcbiAgIC8qKiBUaGUgZGVlcGVzdCBtZW1iZXIgb2YgdGhlIGZhbWlseSAqL1xyXG4gICBmb3VuZGVyOiBEcm9wWm9uZTtcclxuICAgbWVtYmVyczogQXJyYXk8RHJvcFpvbmU+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzb3J0RmFtaWx5KG1lbWJlckE6IERyb3Bab25lLCBtZW1iZXJCOiBEcm9wWm9uZSkge1xyXG4gICBjb25zdCBhQ29vcmRpbmF0ZXMgPSBtZW1iZXJBLmdldEZ1bGxJbnNlcnRDb29yZGluYXRlcygpO1xyXG4gICBjb25zdCBiQ29vcmRpbmF0ZXMgPSBtZW1iZXJCLmdldEZ1bGxJbnNlcnRDb29yZGluYXRlcygpO1xyXG4gICBpZiAoYUNvb3JkaW5hdGVzLmxlbmd0aCA+IGJDb29yZGluYXRlcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICB9XHJcbiAgIGlmIChhQ29vcmRpbmF0ZXMubGVuZ3RoIDwgYkNvb3JkaW5hdGVzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgfVxyXG4gICByZXR1cm4gMDtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRHJvcFpvbmVTZXJ2aWNlIHtcclxuICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZUludmVudG9yeTogQXJyYXk8RHJvcFpvbmU+O1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lRmFtaWxpZXM6IEFycmF5PERyb3Bab25lRmFtaWx5PjtcclxuICAgcHJpdmF0ZSB2aXNpYmxlRmFtaWx5OiBEcm9wWm9uZUZhbWlseSB8IG51bGw7XHJcbiAgIHByaXZhdGUgYWN0aXZlRHJvcFpvbmU6IERyb3Bab25lIHwgbnVsbDtcclxuICAgcHJpdmF0ZSB0cmVlOiBCcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSB0cmVlT3B0aW9uczogUHJvY2Vzc2VkT3B0aW9ucyB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSB0ZW1wRmFtaWxpZXM6XHJcbiAgICAgIHwgcmVhZG9ubHkgW0Ryb3Bab25lRmFtaWx5LCBEcm9wWm9uZUZhbWlseSB8IG51bGxdXHJcbiAgICAgIHwgcmVhZG9ubHkgW107XHJcblxyXG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRyYWdTdGF0ZVNlcnZpY2U6IERyYWdTdGF0ZVNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUludmVudG9yeSA9IFtdO1xyXG4gICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMgPSBbXTtcclxuICAgICAgdGhpcy52aXNpYmxlRmFtaWx5ID0gbnVsbDtcclxuICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZSA9IG51bGw7XHJcbiAgICAgIHRoaXMudGVtcEZhbWlsaWVzID0gW107XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUobnVsbCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBhZGREcm9wWm9uZShuZXdEcm9wWm9uZTogRHJvcFpvbmUpOiBib29sZWFuIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lSW52ZW50b3J5LmZpbmQoKHJlZ2lzdGVyZWRab25lKSA9PlxyXG4gICAgICAgICAgICBEcm9wWm9uZS5kcm9wWm9uZUxvY2F0aW9uc0FyZUVxdWFsKHJlZ2lzdGVyZWRab25lLCBuZXdEcm9wWm9uZSlcclxuICAgICAgICAgKSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZUludmVudG9yeS5wdXNoKG5ld0Ryb3Bab25lKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBoaWRlcyBhbGwgZHJvcCB6b25lcyAqL1xyXG4gICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLnZpc2libGVGYW1pbHkgIT09IG51bGwpIHtcclxuICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgdGhpcy52aXNpYmxlRmFtaWx5Lm1lbWJlcnMpIHtcclxuICAgICAgICAgICAgbWVtYmVyLmlzVmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy52aXNpYmxlRmFtaWx5ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3RvcmVGYW1pbGllcygpO1xyXG4gICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKG51bGwpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZ2V0QWN0aXZlRHJvcFpvbmUoKTogRHJvcFpvbmVTZXJ2aWNlW1wiYWN0aXZlRHJvcFpvbmVcIl0ge1xyXG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEcm9wWm9uZTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGluaXQodHJlZTogQnJhbmNoPGFueT4sIHRyZWVPcHRpb25zOiBQcm9jZXNzZWRPcHRpb25zKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudHJlZSA9IHRyZWU7XHJcbiAgICAgIHRoaXMudHJlZU9wdGlvbnMgPSB0cmVlT3B0aW9ucztcclxuICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICB0aGlzLmFzc2lnbkZhbWlsaWVzKCk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBoaWRlcyBhbGwgZHJvcCB6b25lcyBhbmQgZGVsZXRlcyBhbGwgdGhlIGZhbWlseSBhc3NpZ25tZW50cyAqL1xyXG4gICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmxlbmd0aCA9IDA7XHJcbiAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAgKiBSZXN0b3JlcyB0aGUgc2VydmljZSB0byBpdHMgaW5pdGlhbCBzdGF0ZTogaGlkZXMgYWxsIGRyb3Agem9uZXMsXHJcbiAgICAqIGRlbGV0ZXMgYWxsIHRoZSBmYW1pbHkgYXNzaWdubWVudHMsIGFuZCBlbXB0aWVzIHRoZSBkcm9wWm9uZUludmVudG9yeS5cclxuICAgICovXHJcbiAgIHB1YmxpYyByZXN0YXJ0KCk6IHZvaWQge1xyXG4gICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkubGVuZ3RoID0gMDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlc3RvcmVGYW1pbGllcygpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMudGVtcEZhbWlsaWVzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucG9wKCk7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKHRoaXMudGVtcEZhbWlsaWVzWzBdKTtcclxuICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgdGhpcy50ZW1wRmFtaWxpZXNbMF0ubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuc2V0RmFtaWx5KHRoaXMudGVtcEZhbWlsaWVzWzBdKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAodGhpcy50ZW1wRmFtaWxpZXNbMV0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2godGhpcy50ZW1wRmFtaWxpZXNbMV0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiB0aGlzLnRlbXBGYW1pbGllc1sxXS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgICAgIG1lbWJlci5zZXRGYW1pbHkodGhpcy50ZW1wRmFtaWxpZXNbMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy50ZW1wRmFtaWxpZXMgPSBbXTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICAvKipcclxuICAgICogU2hvd3MgdGhlIGRyb3Agem9uZSBmYW1pbHkgb2YgdGhlIGRyb3Agem9uZSBpbmRpY2F0ZWQgYnkgYGNvb3JkaW5hdGVzYC5cclxuICAgICovXHJcbiAgIHB1YmxpYyBzaG93RHJvcFpvbmVGYW1pbHkoXHJcbiAgICAgIC8qKiBOb3RlOiB0aGlzIGRyb3Agem9uZSBtYXkgbm90IGV4aXN0IGluIHRoZSBkcm9wWm9uZUludmVudG9yeTsgd2UgaGF2ZSB0byBzZWFyY2ggdGhlIGludmVudG9yeSBiYXNlZCBvbiBpdHMgbG9jYXRpb24gKi9cclxuICAgICAgZHJvcFpvbmU6IERyb3Bab25lLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgIGpvaW5GYW1pbGllcz86IGJvb2xlYW47XHJcbiAgICAgICAgIGFjdGl2YXRlTG93ZXN0SW5zdGVhZE9mRm91bmRlcj86IGJvb2xlYW47XHJcbiAgICAgIH0gPSB7IGpvaW5GYW1pbGllczogZmFsc2UsIGFjdGl2YXRlTG93ZXN0SW5zdGVhZE9mRm91bmRlcjogZmFsc2UgfVxyXG4gICApOiB2b2lkIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsICYmXHJcbiAgICAgICAgIERyb3Bab25lLmRyb3Bab25lTG9jYXRpb25zQXJlRXF1YWwodGhpcy5hY3RpdmVEcm9wWm9uZSwgZHJvcFpvbmUpXHJcbiAgICAgICkge1xyXG4gICAgICAgICAvL0FscmVhZHkgc2hvd2luZyB0aGUgZmFtaWx5IHdpdGggdGhlIGFwcHJvcHJpYXRlIGFjdGl2ZSBkcm9wIHpvbmVcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZpc2libGVGYW1pbHkgIT09IG51bGwgfHwgdGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5kcm9wWm9uZUludmVudG9yeS5maW5kKCh6b25lKSA9PlxyXG4gICAgICAgICBEcm9wWm9uZS5kcm9wWm9uZUxvY2F0aW9uc0FyZUVxdWFsKHpvbmUsIGRyb3Bab25lKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgZHJvcCB6b25lIHRvIHNob3cuIGxvY2F0aW9uOiAke0pTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgICAgICAgICBkcm9wWm9uZS5nZXRMb2NhdGlvbigpXHJcbiAgICAgICAgICAgICl9YFxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGZhbWlseSA9IHRhcmdldC5nZXRGYW1pbHkoKTtcclxuICAgICAgaWYgKG9wdGlvbnMuam9pbkZhbWlsaWVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgIGNvbnN0IGxvY2F0aW9uMSA9IGRyb3Bab25lLmdldExvY2F0aW9uKCk7XHJcbiAgICAgICAgIGNvbnN0IGxvY2F0aW9uMiA9IG5ldyBEcm9wWm9uZUxvY2F0aW9uKFxyXG4gICAgICAgICAgICBbLi4ubG9jYXRpb24xLnBhcmVudENvb3JkaW5hdGVzXSxcclxuICAgICAgICAgICAgbG9jYXRpb24xLmluc2VydEluZGV4ICsgMVxyXG4gICAgICAgICApO1xyXG4gICAgICAgICBjb25zdCB0YXJnZXQyID0gdGhpcy5kcm9wWm9uZUludmVudG9yeS5maW5kKCh6b25lKSA9PlxyXG4gICAgICAgICAgICBEcm9wWm9uZS5kcm9wWm9uZUxvY2F0aW9uc0FyZUVxdWFsKHpvbmUsIGxvY2F0aW9uMilcclxuICAgICAgICAgKTtcclxuICAgICAgICAgaWYgKHRhcmdldDIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBkcm9wIHpvbmUgdG8gc2hvd1wiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBmYW1pbHkyID0gdGFyZ2V0Mi5nZXRGYW1pbHkoKTtcclxuICAgICAgICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkIHx8IGZhbWlseTIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBmYW1pbHlcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgbmV3RmFtaWx5ID0ge1xyXG4gICAgICAgICAgICBmb3VuZGVyOiBmYW1pbHkuZm91bmRlcixcclxuICAgICAgICAgICAgbWVtYmVyczogWy4uLmZhbWlseS5tZW1iZXJzXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShmYW1pbHkuZm91bmRlciwgdHJ1ZSk7XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseS5tZW1iZXJzLnNvcnQoc29ydEZhbWlseSkpIHtcclxuICAgICAgICAgICAgbWVtYmVyLnNldEZhbWlseShuZXdGYW1pbHkpO1xyXG4gICAgICAgICAgICBpZiAobWVtYmVyICE9PSBmYW1pbHkuZm91bmRlcikge1xyXG4gICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAvL0ZhaWxlZCB0byBhY3RpdmF0ZSBhIHpvbmUgc28gZmFyLCBzbyBhY3RpdmF0ZSB0aGlzIG9uZSBpbnN0ZWFkXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlcik7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseTIubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuc2V0RmFtaWx5KG5ld0ZhbWlseSk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgbWVtYmVyLmdldExvY2F0aW9uKCkucGFyZW50Q29vcmRpbmF0ZXMubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgdGFyZ2V0Mi5nZXRMb2NhdGlvbigpLnBhcmVudENvb3JkaW5hdGVzLmxlbmd0aFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgbmV3RmFtaWx5Lm1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShtZW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgLy9UZW1wb3JhcmlseSBzdG9yZSB0aGUgb2xkIGZhbWlsaWVzXHJcbiAgICAgICAgIHRoaXMudGVtcEZhbWlsaWVzID0gW2ZhbWlseSwgZmFtaWx5Ml07XHJcbiAgICAgICAgIC8vUmVtb3ZlIHRoZSBvbGQgZmFtaWxpZXNcclxuICAgICAgICAgY29uc3QgZmFtaWx5SW5kZXggPSB0aGlzLmRyb3Bab25lRmFtaWxpZXMuaW5kZXhPZihmYW1pbHkpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMuc3BsaWNlKGZhbWlseUluZGV4LCAxKTtcclxuICAgICAgICAgY29uc3QgZmFtaWx5MkluZGV4ID0gdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmluZGV4T2YoZmFtaWx5Mik7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5zcGxpY2UoZmFtaWx5MkluZGV4LCAxKTtcclxuICAgICAgICAgLy9BZGQgdGhlIG5ldyBmYW1pbHlcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2gobmV3RmFtaWx5KTtcclxuICAgICAgICAgdGhpcy52aXNpYmxlRmFtaWx5ID0gbmV3RmFtaWx5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZmFtaWx5XCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IGZhbWlseTtcclxuICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUoZmFtaWx5LmZvdW5kZXIsIHRydWUpO1xyXG4gICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBmYW1pbHkubWVtYmVycy5zb3J0KHNvcnRGYW1pbHkpKSB7XHJcbiAgICAgICAgICAgIGlmIChtZW1iZXIgIT09IGZhbWlseS5mb3VuZGVyKSB7XHJcbiAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bab25lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vRmFpbGVkIHRvIGFjdGl2YXRlIGEgem9uZSBzbyBmYXIsIHNvIGFjdGl2YXRlIHRoaXMgb25lIGluc3RlYWRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5hY3RpdmF0ZUxvd2VzdEluc3RlYWRPZkZvdW5kZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgY29uc3QgbG93ZXN0TWVtYmVyID0gWy4uLnRoaXMudmlzaWJsZUZhbWlseS5tZW1iZXJzXVxyXG4gICAgICAgICAgICAuc29ydChzb3J0RmFtaWx5KVxyXG4gICAgICAgICAgICAucG9wKCk7XHJcbiAgICAgICAgIGlmIChsb3dlc3RNZW1iZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGxvd2VzdCBtZW1iZXJcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5zd2FwQWN0aXZlRHJvcFpvbmUobG93ZXN0TWVtYmVyKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgc3dhcEFjdGl2ZURyb3Bab25lKG5ld0FjdGl2ZURyb3Bab25lOiBEcm9wWm9uZSk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy52aXNpYmxlRmFtaWx5ID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZpc2libGUgZmFtaWx5IGF2YWlsYWJsZSBmb3Igc3dhcHBpbmdcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZpc2libGVGYW1pbHkubWVtYmVycy5maW5kSW5kZXgoXHJcbiAgICAgICAgIChkcm9wWm9uZSkgPT4gZHJvcFpvbmUgPT09IG5ld0FjdGl2ZURyb3Bab25lXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHN3YXAgYWN0aXZlIGRyb3Agem9uZVwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKG5ld0FjdGl2ZURyb3Bab25lKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGFzc2lnbkZhbWlsaWVzKCk6IHZvaWQge1xyXG4gICAgICBjb25zdCBvcnBoYW5ab25lcyA9IFsuLi50aGlzLmRyb3Bab25lSW52ZW50b3J5XTtcclxuICAgICAgY29uc3QgZGVlcGVzdE1lbWJlcnMgPSBvcnBoYW5ab25lc1xyXG4gICAgICAgICAuZmlsdGVyKCh6b25lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gem9uZS5nZXRMb2NhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICBsb2NhdGlvbi5pbnNlcnRJbmRleCA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgICBsb2NhdGlvbi5wYXJlbnRDb29yZGluYXRlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgIH0pXHJcbiAgICAgICAgIC5zb3J0KCh2YWx1ZUEsIHZhbHVlQikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhQ29vcmRpbmF0ZXMgPSB2YWx1ZUEuZ2V0RnVsbEluc2VydENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJDb29yZGluYXRlcyA9IHZhbHVlQi5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoYUNvb3JkaW5hdGVzLmxlbmd0aCwgYkNvb3JkaW5hdGVzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgaWYgKChhQ29vcmRpbmF0ZXNbaW5kZXhdID8/IC0xKSA+IChiQ29vcmRpbmF0ZXNbaW5kZXhdID8/IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIChhQ29vcmRpbmF0ZXNbaW5kZXhdID8/IC0xKSA8IChiQ29vcmRpbmF0ZXNbaW5kZXhdID8/IC0xKVxyXG4gICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgfSk7XHJcbiAgICAgIGZvciAoY29uc3QgZHJvcFpvbmUgb2YgZGVlcGVzdE1lbWJlcnMpIHtcclxuICAgICAgICAgaWYgKCFvcnBoYW5ab25lcy5pbmNsdWRlcyhkcm9wWm9uZSkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgZmFtaWx5OiBEcm9wWm9uZUZhbWlseSA9IHtcclxuICAgICAgICAgICAgZm91bmRlcjogZHJvcFpvbmUsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFtdXHJcbiAgICAgICAgIH07XHJcbiAgICAgICAgIGRyb3Bab25lLnNldEZhbWlseShmYW1pbHkpO1xyXG4gICAgICAgICAvL1NlZSBpZiB0aGVyZSBhcmUgYW55IG9ycGhhbnMgdGhhdCBiZWxvbmcgdG8gdGhpcyBmYW1pbHkgYW5kIGNsYWltIHRoZW0uXHJcbiAgICAgICAgIGNvbnN0IGN1cnNvciA9IFsuLi5kcm9wWm9uZS5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIHdoaWxlIChjdXJzb3IubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmYW1pbHlNZW1iZXJJbmRleCA9IG9ycGhhblpvbmVzLmZpbmRJbmRleCgoem9uZSkgPT5cclxuICAgICAgICAgICAgICAgYXJyYXlzQXJlRXF1YWwoem9uZS5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKSwgY3Vyc29yKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZmFtaWx5TWVtYmVySW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGZhbWlseU1lbWJlciA9IG9ycGhhblpvbmVzLnNwbGljZShmYW1pbHlNZW1iZXJJbmRleCwgMSlbMF07XHJcbiAgICAgICAgICAgICAgIGZhbWlseS5tZW1iZXJzLnB1c2goZmFtaWx5TWVtYmVyKTtcclxuICAgICAgICAgICAgICAgZmFtaWx5TWVtYmVyLnNldEZhbWlseShmYW1pbHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnNvci5wb3AoKTtcclxuICAgICAgICAgICAgY3Vyc29yW2N1cnNvci5sZW5ndGggLSAxXSsrO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKGZhbWlseSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChjb25zdCBkcm9wWm9uZSBvZiBvcnBoYW5ab25lcy5maWx0ZXIoXHJcbiAgICAgICAgICh6b25lKSA9PiB6b25lLmdldEZ1bGxJbnNlcnRDb29yZGluYXRlcygpLmxlbmd0aCA9PT0gMVxyXG4gICAgICApKSB7XHJcbiAgICAgICAgIGNvbnN0IGZhbWlseTogRHJvcFpvbmVGYW1pbHkgPSB7XHJcbiAgICAgICAgICAgIGZvdW5kZXI6IGRyb3Bab25lLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBbZHJvcFpvbmVdXHJcbiAgICAgICAgIH07XHJcbiAgICAgICAgIGRyb3Bab25lLnNldEZhbWlseShmYW1pbHkpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucHVzaChmYW1pbHkpO1xyXG4gICAgICAgICBvcnBoYW5ab25lcy5zcGxpY2Uob3JwaGFuWm9uZXMuaW5kZXhPZihkcm9wWm9uZSksIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcnBoYW5ab25lcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgbGV0IG9ycGhhbnMgPSBcIlwiO1xyXG4gICAgICAgICBmb3IgKGNvbnN0IHpvbmUgb2Ygb3JwaGFuWm9uZXMpIHtcclxuICAgICAgICAgICAgb3JwaGFucyArPSBgJHtKU09OLnN0cmluZ2lmeSh6b25lLmdldExvY2F0aW9uKCkpfSwgYDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBvcnBoYW5zID0gb3JwaGFucy5zbGljZSgwLCBvcnBoYW5zLmxlbmd0aCAtIDIpO1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBTb21lIHpvbmVzIHdlcmUgbm90IGFzc2lnbmVkIHRvIGEgZmFtaWx5LiBUaGUgb3JwaGFuIHpvbmVzIGhhdmUgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6ICR7b3JwaGFuc31gXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBzZXRBY3RpdmVEcm9wWm9uZShkcm9wWm9uZTogRHJvcFpvbmUgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsKSB7XHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUuaXNBY3RpdmUoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPSBkcm9wWm9uZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsICYmXHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpICE9PSBcImRyb3BwYWJsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZHJvcHBhYmxlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPT09IG51bGwgJiZcclxuICAgICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCkgPT09IFwiZHJvcHBhYmxlXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5ub3REcm9wcGFibGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lLmlzQWN0aXZlKHRydWUpO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgc2hvd0Ryb3Bab25lKGRyb3Bab25lOiBEcm9wWm9uZSwgYWN0aXZlID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgICAgaWYgKHRoaXMudHJlZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnpvbmVJc0FsbG93ZWQoZHJvcFpvbmUpKSB7XHJcbiAgICAgICAgIC8vVXNlciBzZXR0aW5ncyBpbmRpY2F0ZSB0byBza2lwIHRoaXMgZHJvcCB6b25lXHJcbiAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnRyZWUuZmluZEJ5Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgIGRyb3Bab25lLmdldExvY2F0aW9uKCkucGFyZW50Q29vcmRpbmF0ZXNcclxuICAgICAgKTtcclxuICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBmYW1pbHkgbWVtYmVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGRyb3Bab25lLmlzVmlzaWJsZSh0cnVlKTtcclxuICAgICAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKGRyb3Bab25lKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSB6b25lSXNBbGxvd2VkKGRyb3Bab25lOiBEcm9wWm9uZSk6IGJvb2xlYW4ge1xyXG4gICAgICBpZiAodGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudHJlZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJhZ2dlZE5vZGUgPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0RGF0YSgpO1xyXG4gICAgICBpZiAoZHJhZ2dlZE5vZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBnZXQgZHJhZ2dlZCBub2RlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyb3Bab25lUGFyZW50ID0gdGhpcy50cmVlLmZpbmRCeUNvb3JkaW5hdGVzKFxyXG4gICAgICAgICBkcm9wWm9uZS5nZXRMb2NhdGlvbigpLnBhcmVudENvb3JkaW5hdGVzXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChkcm9wWm9uZVBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgZHJvcCB6b25lIHBhcmVudFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkcm9wWm9uZUluZGV4ID0gZHJvcFpvbmUuZ2V0TG9jYXRpb24oKS5pbnNlcnRJbmRleDtcclxuICAgICAgaWYgKGRyb3Bab25lSW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGRyb3Agem9uZSBpbmRleFwiKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMuYWxsb3dEcm9wKFxyXG4gICAgICAgICAgICBkcmFnZ2VkTm9kZS5kYXRhLFxyXG4gICAgICAgICAgICBkcm9wWm9uZVBhcmVudC5kYXRhIGFzIExpbWJsZVRyZWVOb2RlLFxyXG4gICAgICAgICAgICBkcm9wWm9uZUluZGV4XHJcbiAgICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgfVxyXG59XHJcbiJdfQ==

@@ -96,3 +96,3 @@ import { Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef } from "@angular/core";

this.dropZoneService.clear();
this.treeService.drop(sourceBranch, dropZone.getCoordinates());
this.treeService.drop(sourceBranch, dropZone.getFullInsertCoordinates());
}

@@ -148,2 +148,2 @@ ngOnDestroy() {

}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7OztBQVU5QyxNQUFNLE9BQU8sdUJBQXVCO0lBd0JqQyxZQUNvQixXQUF3QixFQUN4QixlQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUpwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFackMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFZeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlOztRQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQ0csT0FBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxRQUFRLE1BQUssSUFBSTtZQUMvQixDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEVBQzdEO1lBQ0MsT0FBTyxDQUFDLElBQUksQ0FDVCwwRkFBMEYsQ0FDNUYsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxXQUFXO1FBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDaEI7SUFDSixDQUFDO0lBRUQsdUJBQXVCO0lBQ2hCLE1BQU07UUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQ1oseURBQXlELENBQzNELENBQUM7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxJQUFJLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQWdCO1FBQ3BDLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFDOUIsT0FBTztTQUNUO1FBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDMUMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWdCO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUNHLENBQUMsQ0FBQyxhQUFhLFlBQVksSUFBSSxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxhQUFhLFlBQVksSUFBSSxDQUFDO1lBQ2hDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsS0FBSyxLQUFLLEVBQzVEO1lBQ0MsZ0RBQWdEO1lBQ2hELE9BQU87U0FDVDtRQUNELGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQWdCO1FBQ2hDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssV0FBVyxFQUFFO1lBQ25ELE9BQU87U0FDVDtRQUNELElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7U0FDcEU7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztTQUNwRTtRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxXQUFXO1FBQ1IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzs4RkE5SFMsdUJBQXVCOzREQUF2Qix1QkFBdUI7K0JBT04sZ0JBQWdCOytCQUlOLGdCQUFnQjs7Ozs7cU9BYjFDLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQztRQzVCNUMsOEJBSUM7UUFIRSx5SUFBMEIsMkJBQXVCLElBQUMsOEhBQ3ZCLDRCQUF3QixJQURELHdGQUUxQyx1QkFBbUIsSUFGdUI7UUFJbEQseUhBQTJDO1FBQzNDLHlIQUFpQztRQUNwQyxpQkFBTTs7dUZEdUJPLHVCQUF1QjtjQU5uQyxTQUFTO2VBQUM7Z0JBQ1IsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsV0FBVyxFQUFFLG1DQUFtQztnQkFDaEQsU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7Z0JBQ2hELFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUM7YUFDM0M7NkxBR1csSUFBSTtrQkFBWixLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csWUFBWTtrQkFBcEIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUVpRCxJQUFJO2tCQUExRCxTQUFTO21CQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUs3QyxjQUFjO2tCQURiLFNBQVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFJOUMsZUFBZTtrQkFEdkIsTUFBTTtZQUdZLFVBQVU7a0JBQTVCLE1BQU07WUFFWSxRQUFRO2tCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgRXZlbnRFbWl0dGVyLFxyXG4gICBJbnB1dCxcclxuICAgT25DaGFuZ2VzLFxyXG4gICBPbkRlc3Ryb3ksXHJcbiAgIE91dHB1dCxcclxuICAgVmlld0NoaWxkLFxyXG4gICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICBMaW1ibGVUcmVlRGF0YSxcclxuICAgTGltYmxlVHJlZU9wdGlvbnMsXHJcbiAgIFRyZWVEcm9wXHJcbn0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4vdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGlzRWxlbWVudERlc2NlbmRhbnQgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZHJhZy1zdGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEdsb2JhbEV2ZW50c1NlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICBzZWxlY3RvcjogXCJsaW1ibGUtdHJlZS1yb290XCIsXHJcbiAgIHRlbXBsYXRlVXJsOiBcIi4vbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuaHRtbFwiLFxyXG4gICBzdHlsZVVybHM6IFtcIi4vbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgcHJvdmlkZXJzOiBbVHJlZVNlcnZpY2UsIERyb3Bab25lU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVSb290Q29tcG9uZW50XHJcbiAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gICBASW5wdXQoKSBkYXRhOiBMaW1ibGVUcmVlRGF0YSB8IHVuZGVmaW5lZDtcclxuICAgQElucHV0KCkgb3B0aW9uczogTGltYmxlVHJlZU9wdGlvbnMgfCB1bmRlZmluZWQ7XHJcbiAgIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICBASW5wdXQoKSBwYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAVmlld0NoaWxkKFwiaG9zdFwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcHJpdmF0ZSBob3N0OlxyXG4gICAgICB8IFZpZXdDb250YWluZXJSZWZcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAVmlld0NoaWxkKFwiZHJvcFpvbmVJbnNpZGVcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIGRyb3Bab25lSW5zaWRlOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQE91dHB1dCgpXHJcbiAgIHJlYWRvbmx5IGRyb3Bab25lSW5zaWRlJDogQmVoYXZpb3JTdWJqZWN0PFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ+O1xyXG5cclxuICAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bGw+KCk7XHJcblxyXG4gICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZURyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVEcm9wPigpO1xyXG5cclxuICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdTdGF0ZVNlcnZpY2U6IERyYWdTdGF0ZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsRXZlbnRzU2VydmljZTogR2xvYmFsRXZlbnRzU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgKSB7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlU2VydmljZS5jaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICB0aGlzLnRyZWVDaGFuZ2UuZW1pdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kcm9wU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlU2VydmljZS5kcm9wcyQuc3Vic2NyaWJlKChkcm9wKSA9PiB7XHJcbiAgICAgICAgIHRoaXMudHJlZURyb3AuZW1pdChkcm9wKTtcclxuICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQubmV4dCh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQuY29tcGxldGUoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLm9wdGlvbnM/Lmxpc3RNb2RlICE9PSB0cnVlICYmXHJcbiAgICAgICAgICh0aGlzLml0ZW1zUGVyUGFnZSAhPT0gdW5kZWZpbmVkIHx8IHRoaXMucGFnZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcInBhZ2luYXRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3RNb2RlOyBgaXRlbXNQZXJQYWdlYCBhbmQgYHBhZ2VgIGlucHV0cyB3aWxsIGJlIGlnbm9yZWRcIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBuZ09uQ2hhbmdlcygpIHtcclxuICAgICAgaWYgKHRoaXMuaG9zdCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgLyoqIFJlYnVpbGQgdGhlIHRyZWUgKi9cclxuICAgcHVibGljIHVwZGF0ZSgpIHtcclxuICAgICAgaWYgKHRoaXMuaG9zdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgXCJGYWlsZWQgdG8gcmVuZGVyIGxpbWJsZSB0cmVlLiBGYWlsdXJlIG9jY3VycmVkIGF0IHJvb3QuXCJcclxuICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsaW1ibGVUcmVlIHJlcXVpcmVzIGEgZGF0YSBvYmplY3RgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLmluaXQoXHJcbiAgICAgICAgIHRoaXMuaG9zdCxcclxuICAgICAgICAgdGhpcy5kYXRhLFxyXG4gICAgICAgICB0aGlzLm9wdGlvbnMsXHJcbiAgICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICB0aGlzLnBhZ2VcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5nbG9iYWxFdmVudHNTZXJ2aWNlLmFkZFNjcm9sbGluZygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ292ZXJIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2ZlciA9PT0gbnVsbCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gXCJtb3ZlXCI7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnbGVhdmVIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XHJcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgICEoY3VycmVudFRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8XHJcbiAgICAgICAgICEocmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8XHJcbiAgICAgICAgIGlzRWxlbWVudERlc2NlbmRhbnQoY3VycmVudFRhcmdldCwgcmVsYXRlZFRhcmdldCkgIT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgICAvL2V2ZW50IGNhbWUgZnJvbSBkZWVwZXIgaW4gdGhlIHRyZWUuIElnbm9yZSBpdC5cclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vTW91c2UgaGFzIGxlZnQgdGhlIHRyZWUsIHNvIGNsZWFyIHRoZSBkcm9wIHpvbmVzXHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJvcEhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgY29uc3QgZHJvcFpvbmUgPSB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZSgpO1xyXG4gICAgICBpZiAodGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCkgIT09IFwiZHJvcHBhYmxlXCIpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkcm9wWm9uZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGFjdGl2ZSBkcm9wIHpvbmUgYXQgZHJvcCBoYW5kbGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNvdXJjZUJyYW5jaCA9IHRoaXMuZHJhZ1N0YXRlU2VydmljZS5jYXB0dXJlKCk7XHJcbiAgICAgIGlmIChzb3VyY2VCcmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGN1cnJlbnQgYnJhbmNoIGluIGRyYWdlbmRIYW5kbGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UuZHJvcChzb3VyY2VCcmFuY2gsIGRyb3Bab25lLmdldENvb3JkaW5hdGVzKCkpO1xyXG4gICB9XHJcblxyXG4gICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICAoZHJhZ292ZXJOb0NoYW5nZURldGVjdCk9XCJkcmFnb3ZlckhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgIChkcmFnbGVhdmVOb0NoYW5nZURldGVjdCk9XCJkcmFnbGVhdmVIYW5kbGVyKCRldmVudClcIlxyXG4gICAoZHJvcCk9XCJkcm9wSGFuZGxlcigkZXZlbnQpXCJcclxuPlxyXG4gICA8bmctdGVtcGxhdGUgI2Ryb3Bab25lSW5zaWRlPjwvbmctdGVtcGxhdGU+XHJcbiAgIDxuZy10ZW1wbGF0ZSAjaG9zdD48L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7OztBQVU5QyxNQUFNLE9BQU8sdUJBQXVCO0lBd0JqQyxZQUNvQixXQUF3QixFQUN4QixlQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUpwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFackMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFZeEQsSUFBSSxDQUFDLGVB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LEVBQUUsa0JBQWtCO2dCQUM1QixXQUFXLEVBQUUsbUNBQW1DO2dCQUNoRCxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztnQkFDaEQsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQzthQUMzQzs2TEFHVyxJQUFJO2tCQUFaLEtBQUs7WUFDRyxPQUFPO2tCQUFmLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csSUFBSTtrQkFBWixLQUFLO1lBRWlELElBQUk7a0JBQTFELFNBQVM7bUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBSzdDLGNBQWM7a0JBRGIsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUk5QyxlQUFlO2tCQUR2QixNQUFNO1lBR1ksVUFBVTtrQkFBNUIsTUFBTTtZQUVZLFFBQVE7a0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICBBZnRlclZpZXdJbml0LFxyXG4gICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgQ29tcG9uZW50LFxyXG4gICBFdmVudEVtaXR0ZXIsXHJcbiAgIElucHV0LFxyXG4gICBPbkNoYW5nZXMsXHJcbiAgIE9uRGVzdHJveSxcclxuICAgT3V0cHV0LFxyXG4gICBWaWV3Q2hpbGQsXHJcbiAgIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IERyb3Bab25lU2VydmljZSB9IGZyb20gXCIuL2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgIExpbWJsZVRyZWVEYXRhLFxyXG4gICBMaW1ibGVUcmVlT3B0aW9ucyxcclxuICAgVHJlZURyb3BcclxufSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcm9vdC90cmVlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi90cmVlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgaXNFbGVtZW50RGVzY2VuZGFudCB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgR2xvYmFsRXZlbnRzU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2dsb2JhbC1ldmVudHMuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgIHNlbGVjdG9yOiBcImxpbWJsZS10cmVlLXJvb3RcIixcclxuICAgdGVtcGxhdGVVcmw6IFwiLi9saW1ibGUtdHJlZS1yb290LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9saW1ibGUtdHJlZS1yb290LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICBwcm92aWRlcnM6IFtUcmVlU2VydmljZSwgRHJvcFpvbmVTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGltYmxlVHJlZVJvb3RDb21wb25lbnRcclxuICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgIEBJbnB1dCgpIGRhdGE6IExpbWJsZVRyZWVEYXRhIHwgdW5kZWZpbmVkO1xyXG4gICBASW5wdXQoKSBvcHRpb25zOiBMaW1ibGVUcmVlT3B0aW9ucyB8IHVuZGVmaW5lZDtcclxuICAgQElucHV0KCkgaXRlbXNQZXJQYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgIEBJbnB1dCgpIHBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBWaWV3Q2hpbGQoXCJob3N0XCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwcml2YXRlIGhvc3Q6XHJcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBWaWV3Q2hpbGQoXCJkcm9wWm9uZUluc2lkZVwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICAgZHJvcFpvbmVJbnNpZGU6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAT3V0cHV0KClcclxuICAgcmVhZG9ubHkgZHJvcFpvbmVJbnNpZGUkOiBCZWhhdmlvclN1YmplY3Q8Vmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZD47XHJcblxyXG4gICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcclxuXHJcbiAgIEBPdXRwdXQoKSByZWFkb25seSB0cmVlRHJvcCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZURyb3A+KCk7XHJcblxyXG4gICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAgcHJpdmF0ZSByZWFkb25seSBkcm9wU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmVlU2VydmljZTogVHJlZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVTZXJ2aWNlOiBEcm9wWm9uZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXRlU2VydmljZTogRHJhZ1N0YXRlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxFdmVudHNTZXJ2aWNlOiBHbG9iYWxFdmVudHNTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICApIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB0aGlzLmNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVTZXJ2aWNlLmNoYW5nZXMkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgIHRoaXMudHJlZUNoYW5nZS5lbWl0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRyb3BTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVTZXJ2aWNlLmRyb3BzJC5zdWJzY3JpYmUoKGRyb3ApID0+IHtcclxuICAgICAgICAgdGhpcy50cmVlRHJvcC5lbWl0KGRyb3ApO1xyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlJC5uZXh0KHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlJC5jb21wbGV0ZSgpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMub3B0aW9ucz8ubGlzdE1vZGUgIT09IHRydWUgJiZcclxuICAgICAgICAgKHRoaXMuaXRlbXNQZXJQYWdlICE9PSB1bmRlZmluZWQgfHwgdGhpcy5wYWdlICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIFwicGFnaW5hdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gbGlzdE1vZGU7IGBpdGVtc1BlclBhZ2VgIGFuZCBgcGFnZWAgaW5wdXRzIHdpbGwgYmUgaWdub3JlZFwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgIH1cclxuXHJcbiAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICBpZiAodGhpcy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICAvKiogUmVidWlsZCB0aGUgdHJlZSAqL1xyXG4gICBwdWJsaWMgdXBkYXRlKCkge1xyXG4gICAgICBpZiAodGhpcy5ob3N0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBcIkZhaWxlZCB0byByZW5kZXIgbGltYmxlIHRyZWUuIEZhaWx1cmUgb2NjdXJyZWQgYXQgcm9vdC5cIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGEgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGxpbWJsZVRyZWUgcmVxdWlyZXMgYSBkYXRhIG9iamVjdGApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UuaW5pdChcclxuICAgICAgICAgdGhpcy5ob3N0LFxyXG4gICAgICAgICB0aGlzLmRhdGEsXHJcbiAgICAgICAgIHRoaXMub3B0aW9ucyxcclxuICAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgIHRoaXMucGFnZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmdsb2JhbEV2ZW50c1NlcnZpY2UuYWRkU2Nyb2xsaW5nKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnb3ZlckhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyID09PSBudWxsKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBcIm1vdmVcIjtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyYWdsZWF2ZUhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcclxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgIShjdXJyZW50VGFyZ2V0IGluc3RhbmNlb2YgTm9kZSkgfHxcclxuICAgICAgICAgIShyZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSkgfHxcclxuICAgICAgICAgaXNFbGVtZW50RGVzY2VuZGFudChjdXJyZW50VGFyZ2V0LCByZWxhdGVkVGFyZ2V0KSAhPT0gZmFsc2VcclxuICAgICAgKSB7XHJcbiAgICAgICAgIC8vZXZlbnQgY2FtZSBmcm9tIGRlZXBlciBpbiB0aGUgdHJlZS4gSWdub3JlIGl0LlxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy9Nb3VzZSBoYXMgbGVmdCB0aGUgdHJlZSwgc28gY2xlYXIgdGhlIGRyb3Agem9uZXNcclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcm9wSGFuZGxlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBjb25zdCBkcm9wWm9uZSA9IHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmdldEFjdGl2ZURyb3Bab25lKCk7XHJcbiAgICAgIGlmICh0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0U3RhdGUoKSAhPT0gXCJkcm9wcGFibGVcIikge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRyb3Bab25lID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBnZXQgYWN0aXZlIGRyb3Agem9uZSBhdCBkcm9wIGhhbmRsZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc291cmNlQnJhbmNoID0gdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmNhcHR1cmUoKTtcclxuICAgICAgaWYgKHNvdXJjZUJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBnZXQgY3VycmVudCBicmFuY2ggaW4gZHJhZ2VuZEhhbmRsZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgdGhpcy50cmVlU2VydmljZS5kcm9wKHNvdXJjZUJyYW5jaCwgZHJvcFpvbmUuZ2V0RnVsbEluc2VydENvb3JkaW5hdGVzKCkpO1xyXG4gICB9XHJcblxyXG4gICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICAoZHJhZ292ZXJOb0NoYW5nZURldGVjdCk9XCJkcmFnb3ZlckhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgIChkcmFnbGVhdmVOb0NoYW5nZURldGVjdCk9XCJkcmFnbGVhdmVIYW5kbGVyKCRldmVudClcIlxyXG4gICAoZHJvcCk9XCJkcm9wSGFuZGxlcigkZXZlbnQpXCJcclxuPlxyXG4gICA8bmctdGVtcGxhdGUgI2Ryb3Bab25lSW5zaWRlPjwvbmctdGVtcGxhdGU+XHJcbiAgIDxuZy10ZW1wbGF0ZSAjaG9zdD48L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuIl19
import { Injectable } from "@angular/core";
import { ReplaySubject } from "rxjs";
import { Branch } from "../Branch";
import { Branch } from "../classes/Branch";
import { LimbleTreeNodeComponent } from "../limble-tree-node/limble-tree-node.component";

@@ -107,5 +107,5 @@ import { LimbleTreePlaceholderComponent } from "../limble-tree-placeholder/limble-tree-placeholder.component";

//The tree service has been reinitialized since this timeout was called.
//To avoid race conditions, we should skip initializing the dropZoneService.
//Even without a race condition, the new tree data will just overwrite the
//drop zone data anyway, so pulling out early will also be more efficient.
//The new tree data will just overwrite the drop zone data anyway, so
//we can skip the drop zone initialization on this round for efficiency
//and also to avoid some possible (?) race conditions
return;

@@ -118,3 +118,3 @@ }

renderBranch(host, branch) {
var _a;
var _a, _b;
if (this.treeModel === undefined) {

@@ -124,3 +124,4 @@ throw new Error("TreeModel not initialized");

host.clear();
for (const node of (_a = branch.data.nodes) !== null && _a !== void 0 ? _a : []) {
branch.clearChildren();
for (const node of (_b = (_a = branch.data) === null || _a === void 0 ? void 0 : _a.nodes) !== null && _b !== void 0 ? _b : []) {
const newBranch = new Branch(node);

@@ -156,3 +157,3 @@ branch.appendChild(newBranch);

const sourceIndex = source.getIndex();
if (sourceIndex === undefined) {
if (sourceIndex === undefined || sourceIndex === null) {
throw new Error("Cannot move the hidden root node");

@@ -237,2 +238,2 @@ }

}], function () { return [{ type: i1.ComponentCreatorService }, { type: i2.DropZoneService }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JDLE9BQU8sRUFBRSxNQUFNLEVBQXFCLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7O0FBOEQ5RyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQWtEekIsTUFBTSxPQUFPLFdBQVc7SUFVckIsWUFDb0IsdUJBQWdELEVBQ2hELGVBQWdDO1FBRGhDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBRWpELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLElBQUksQ0FDUixJQUFzQixFQUN0QixJQUFvQixFQUNwQixPQUEyQixFQUMzQixZQUFxQixFQUNyQixJQUFhO1FBRWIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFD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LGNBQWM7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzNCLENBQUM7O3NFQTFRUyxXQUFXO21EQUFYLFdBQVcsV0FBWCxXQUFXO3VGQUFYLFdBQVc7Y0FEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50Q3JlYXRvclNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9jb21wb25lbnQtY3JlYXRvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERyb3Bab25lU2VydmljZSB9IGZyb20gXCIuL2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJyYW5jaCwgQnJhbmNoQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vQnJhbmNoXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqIEFuIG9iamVjdCBkZXNjcmliaW5nIGEgbm9kZSBvZiB0aGUgdHJlZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExpbWJsZVRyZWVOb2RlIHtcclxuICAgLyoqIEEgbGlzdCBvZiBub2RlcyB0byBiZSByZW5kZXJlZCBcInVuZGVyXCIgdGhpcyBvbmUsIG9uZSBsZXZlbCBkZWVwZXIgaW4gdGhlIHRyZWUuICovXHJcbiAgIG5vZGVzPzogTGltYmxlVHJlZURhdGE7XHJcbiAgIC8vIC8qKiBBIGN1c3RvbSBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIGludG8gdGhlIGNvbXBvbmVudCBhcyBhbiBgSW5wdXQoKWAgYmluZGluZyBjYWxsZWQgYG5vZGVEYXRhYCAqL1xyXG4gICAvLyBkYXRhOiB1bmtub3duO1xyXG4gICAvKiogQW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBjb21wb25lbnQgd2hpY2ggd2lsbCByZXByZXNlbnQgdGhpcyBub2RlIGluIHRoZSB2aXN1YWwgdHJlZSAqL1xyXG4gICBjb21wb25lbnQ/OiBDb21wb25lbnRPYmo7XHJcbiAgIGNvbGxhcHNlZD86IGJvb2xlYW47XHJcbiAgIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcclxufVxyXG5cclxuLyoqIEFuIG9iamVjdCB0aGF0IHRoZSBsaW1ibGUtdHJlZS1yb290IGNvbXBvbmVudCB1c2VzIHRvIGJ1aWxkIHRoZSB0cmVlICovXHJcbmV4cG9ydCB0eXBlIExpbWJsZVRyZWVEYXRhID0gQXJyYXk8TGltYmxlVHJlZU5vZGU+O1xyXG5cclxuLyoqIEEgZ3JvdXAgb2Ygc2V0dGluZ3MgZm9yIGNoYW5naW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0cmVlICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGltYmxlVHJlZU9wdGlvbnMge1xyXG4gICAvKiogVGhlIGNvbXBvbmVudCBvYmplY3QgdG8gdXNlIGlmIG9uZSBpcyBub3Qgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgbm9kZSAqL1xyXG4gICBkZWZhdWx0Q29tcG9uZW50PzogQ29tcG9uZW50T2JqO1xyXG4gICAvKiogVGhlIG51bWJlciBvZiBwaXhlbHMgdG8gaW5kZW50IGVhY2ggbGV2ZWwgb2YgdGhlIHRyZWUuIERlZmF1bHRzIHRvIDQ1ICovXHJcbiAgIGluZGVudD86IG51bWJlcjtcclxuICAgLyoqXHJcbiAgICAqIFdoZXRoZXIgdG8gYWxsb3cgXCJuZXN0aW5nXCIgKHBsYWNpbmcgYSBub2RlIG9uZSBsZXZlbCBkZWVwZXIgdGhhbiBjdXJyZW50bHkgZXhpc3RzIG9uIHRoZSBicmFuY2gpLlxyXG4gICAgKiBXaGVuIHRoaXMgaXMgYSBib29sZWFuLCBpdCBhcHBsaWVzIHRvIGFsbCBub2Rlcy4gV2hlbiB0aGlzIGlzIGEgZnVuY3Rpb24sIHRoZSBub2RlIGluIHF1ZXN0aW9uXHJcbiAgICAqIGlzIHBhc3NlZCBpbi4gRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICovXHJcbiAgIGFsbG93TmVzdGluZz86IGJvb2xlYW4gfCAoKG5vZGVEYXRhOiBMaW1ibGVUcmVlTm9kZSkgPT4gYm9vbGVhbik7XHJcbiAgIC8qKlxyXG4gICAgKiBXaGV0aGVyIHRvIGFsbG93IGEgbm9kZSB0byBiZSBkcmFnZ2VkLiBXaGVuIHRoaXMgaXMgYSBib29sZWFuLCBpdCBhcHBsaWVzIHRvIGFsbCBub2Rlcy4gV2hlbiB0aGlzXHJcbiAgICAqIGlzIGEgZnVuY3Rpb24sIHRoZSBub2RlIGluIHF1ZXN0aW9uIGlzIHBhc3NlZCBpbi4gRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICovXHJcbiAgIGFsbG93RHJhZ2dpbmc/OiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gICAvKiogQSBjYWxsYmFjayB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNvdXJjZU5vZGUgY2FuIGJlIGRyb3BwZWQgYXQgYSBwYXJ0aWN1bGFyIGxvY2F0aW9uLiAqL1xyXG4gICBhbGxvd0Ryb3A/OiAoXHJcbiAgICAgIHNvdXJjZU5vZGU6IExpbWJsZVRyZWVOb2RlLFxyXG4gICAgICBwcm9wb3NlZFBhcmVudDogTGltYmxlVHJlZU5vZGUgfCBudWxsLFxyXG4gICAgICBwcm9wb3NlZEluZGV4OiBudW1iZXJcclxuICAgKSA9PiBib29sZWFuO1xyXG4gICAvKiogV2hlbiBzZXQgdG8gdHJ1ZSwgbGlzdCBtb2RlIHdpbGwgZW5mb3JjZSBhIGZsYXQgdHJlZSBzdHJ1Y3R1cmUsIG1lYW5pbmcgdGhlcmVcclxuICAgICogY2FuIG9ubHkgYmUgb25lIGxldmVsIG9mIHRoZSB0cmVlLiBgYWxsb3dOZXN0aW5nYCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byBgZmFsc2VgXHJcbiAgICAqIGFuZCBhbnkgY2hpbGRyZW4gd2lsbCBiZSBkZWxldGVkLlxyXG4gICAgKlxyXG4gICAgKiBUaGlzIG1vZGUgY2FuIGJlIHVzZWQgd2hlbiB0aGUgc2FtZSBkeW5hbWljIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eSBvZlxyXG4gICAgKiB0aGUgdHJlZSBpcyBkZXNpcmVkLCBidXQgdGhlIHRyZWUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzXHJcbiAgICAqIGFsc28gb3BlbnMgdXAgdGhlIHBhZ2luYXRpb24gQVBJIG9uIHRoZSBsaW1ibGUtdHJlZS1yb290IGNvbXBvbmVudC4gU2VlIHRoZVxyXG4gICAgKiBSRUFETUUgZm9yIGRldGFpbHMgb24gcGFnaW5hdGlvbi5cclxuICAgICovXHJcbiAgIGxpc3RNb2RlPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqIEFuIG9iamVjdCB0aGF0IHJlZmVyZW5jZXMgdGhlIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCBhbmQgaXRzIGJpbmRpbmdzICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50T2JqIHtcclxuICAgLyoqIFRoZSBjb21wb25lbnQgY2xhc3MgKi9cclxuICAgY2xhc3M6IFR5cGU8dW5rbm93bj47XHJcbiAgIC8qKiBUaGUgYmluZGluZ3MgKGlucHV0cyBhbmQgb3V0cHV0cykgb2YgdGhlIGNsYXNzICovXHJcbiAgIGJpbmRpbmdzPzoge1xyXG4gICAgICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XHJcbiAgIH07XHJcbn1cclxuXHJcbi8qKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGBpbmRlbnRgIG9wdGlvbiAqL1xyXG5leHBvcnQgY29uc3QgSU5ERU5UID0gNDU7XHJcblxyXG4vKiogQW4gb3B0aW9ucyBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcyBsb2FkZWQgd2hlcmUgYXBwbGljYWJsZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZE9wdGlvbnNCYXNlIGV4dGVuZHMgTGltYmxlVHJlZU9wdGlvbnMge1xyXG4gICBkZWZhdWx0Q29tcG9uZW50PzogQ29tcG9uZW50T2JqO1xyXG4gICBpbmRlbnQ6IG51bWJlcjtcclxuICAgYWxsb3dOZXN0aW5nOiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gICBhbGxvd0RyYWdnaW5nOiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gICBhbGxvd0Ryb3A6IChcclxuICAgICAgc291cmNlTm9kZTogTGltYmxlVHJlZU5vZGUsXHJcbiAgICAgIHByb3Bvc2VkUGFyZW50OiBMaW1ibGVUcmVlTm9kZSB8IG51bGwsXHJcbiAgICAgIHByb3Bvc2VkSW5kZXg6IG51bWJlclxyXG4gICApID0+IGJvb2xlYW47XHJcbiAgIGxpc3RNb2RlOiBib29sZWFuO1xyXG4gICBpdGVtc1BlclBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICAgcGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZE9wdGlvbnNXaXRoUGFnaW5hdGlvbiBleHRlbmRzIFByb2Nlc3NlZE9wdGlvbnNCYXNlIHtcclxuICAgbGlzdE1vZGU6IHRydWU7XHJcbiAgIGl0ZW1zUGVyUGFnZTogbnVtYmVyO1xyXG4gICBwYWdlOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc2VkT3B0aW9uc1dpdGhvdXRQYWdpbmF0aW9uXHJcbiAgIGV4dGVuZHMgUHJvY2Vzc2VkT3B0aW9uc0Jhc2Uge1xyXG4gICBsaXN0TW9kZTogZmFsc2U7XHJcbiAgIGl0ZW1zUGVyUGFnZTogdW5kZWZpbmVkO1xyXG4gICBwYWdlOiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFByb2Nlc3NlZE9wdGlvbnMgPVxyXG4gICB8IFByb2Nlc3NlZE9wdGlvbnNXaXRoUGFnaW5hdGlvblxyXG4gICB8IFByb2Nlc3NlZE9wdGlvbnNXaXRob3V0UGFnaW5hdGlvbjtcclxuXHJcbi8qKiB0aGUgdmFsdWUgZW1pdHRlZCBmcm9tIHRoZSByb290IGNvbXBvbmVudCBhZnRlciBhIG5vZGUgaXMgZHJvcHBlZCAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVEcm9wIHtcclxuICAgLyoqIFRoZSBub2RlIHRoYXQgd2FzIGRyb3BwZWQgKi9cclxuICAgdGFyZ2V0OiBMaW1ibGVUcmVlTm9kZTtcclxuICAgLyoqIHRoZSB0YXJnZXQncyBwYXJlbnQgYmVmb3JlIHRoZSBkcmFnIGFuZCBkcm9wLCBvciBudWxsIGlmIGl0IHdhcyBhIHRvcC1sZXZlbCBub2RlICovXHJcbiAgIG9sZFBhcmVudDogTGltYmxlVHJlZU5vZGUgfCBudWxsO1xyXG4gICAvKiogdGhlIGluZGV4IG9mIHRoZSBub2RlIGJlZm9yZSB0aGUgZHJhZyBhbmQgZHJvcCByZWxhdGl2ZSB0byBpdHMgb2xkIHNpYmxpbmdzICovXHJcbiAgIG9sZEluZGV4OiBudW1iZXI7XHJcbiAgIC8qKiB0aGUgdGFyZ2V0J3MgcGFyZW50IGFmdGVyIHRoZSBkcmFnIGFuZCBkcm9wLCBvciBudWxsIGlmIGl0IGlzIG5vdyBhIHRvcC1sZXZlbCBub2RlICovXHJcbiAgIG5ld1BhcmVudDogTGltYmxlVHJlZU5vZGUgfCBudWxsO1xyXG4gICAvKiogdGhlIGluZGV4IG9mIHRoZSBub2RlIGFmdGVyIHRoZSBkcmFnIGFuZCBkcm9wIHJlbGF0aXZlIHRvIGl0cyBuZXcgc2libGluZ3MgKi9cclxuICAgbmV3SW5kZXg6IG51bWJlcjtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJlZVNlcnZpY2Uge1xyXG4gICBwdWJsaWMgY2hhbmdlcyQ6IFJlcGxheVN1YmplY3Q8bnVsbD47XHJcbiAgIHB1YmxpYyBkcm9wcyQ6IFJlcGxheVN1YmplY3Q8VHJlZURyb3A+O1xyXG4gICBwcml2YXRlIGhvc3Q6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyB0cmVlRGF0YTogTGltYmxlVHJlZURhdGEgfCB1bmRlZmluZWQ7XHJcbiAgIHByaXZhdGUgdW5jdXREYXRhOiBMaW1ibGVUcmVlRGF0YSB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHRyZWVPcHRpb25zOiBQcm9jZXNzZWRPcHRpb25zIHwgdW5kZWZpbmVkO1xyXG4gICBwdWJsaWMgdHJlZU1vZGVsOiBCcmFuY2g8YW55PjtcclxuICAgcHJpdmF0ZSBwbGFjZWhvbGRlcjogYm9vbGVhbjtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudENyZWF0b3JTZXJ2aWNlOiBDb21wb25lbnRDcmVhdG9yU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZVxyXG4gICApIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gICAgICB0aGlzLmRyb3BzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gICAgICB0aGlzLnRyZWVNb2RlbCA9IG5ldyBCcmFuY2gobnVsbCk7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcclxuICAgfVxyXG5cclxuICAgLyoqIEluaXRpYWxpemVzIHRoZSBzZXJ2aWNlIGFuZCByZW5kZXJzIHRoZSB0cmVlLlxyXG4gICAgKiBAcGFyYW0gaG9zdCAtIFRoZSBWaWV3Q29udGFpbmVyUmVmIGludG8gd2hpY2ggdGhlIHRyZWUgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSBhcnJheSB0aGF0IHdhcyBwYXNzZWQgaW4gdG8gTGltYmxlVHJlZVJvb3QsIHdoaWNoIGlzXHJcbiAgICAqIHRoZSB1c2VycycgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWVcclxuICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIGluIHRvIExpbWJsZVRyZWVSb290XHJcbiAgICAqL1xyXG4gICBwdWJsaWMgaW5pdChcclxuICAgICAgaG9zdDogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgZGF0YTogTGltYmxlVHJlZURhdGEsXHJcbiAgICAgIG9wdGlvbnM/OiBMaW1ibGVUcmVlT3B0aW9ucyxcclxuICAgICAgaXRlbXNQZXJQYWdlPzogbnVtYmVyLFxyXG4gICAgICBwYWdlPzogbnVtYmVyXHJcbiAgICk6IHZvaWQge1xyXG4gICAgICB0aGlzLmhvc3QgPSBob3N0O1xyXG4gICAgICB0aGlzLnVuY3V0RGF0YSA9IGRhdGE7XHJcbiAgICAgIHRoaXMudHJlZU9wdGlvbnMgPSB0aGlzLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgcGFnZSk7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVPcHRpb25zLmxpc3RNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgIGxldCBzdGFydCA9XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlICogKHRoaXMudHJlZU9wdGlvbnMucGFnZSAtIDEpO1xyXG4gICAgICAgICBpZiAoaXNOYU4oc3RhcnQpKSB7XHJcbiAgICAgICAgICAgIC8vVGhpcyBjYXRjaGVzIHRoZSBjYXNlIHdoZXJlIGl0ZW1zUGVyUGFnZSB3YXMgbm90IHBhc3NlZCBieSB0aGUgdXNlcixcclxuICAgICAgICAgICAgLy9jYXVzaW5nIGBzdGFydGAgdG8gZXF1YWwgaW5maW5pdHkqMCwgd2hpY2ggaXMgTmFOLlxyXG4gICAgICAgICAgICBzdGFydCA9IDA7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnRyZWVPcHRpb25zLml0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMudW5jdXREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy51bmN1dERhdGE7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHVzZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaG9zdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyTm9kZTogTGltYmxlVHJlZU5vZGUgPSB7XHJcbiAgICAgICAgIGNvbXBvbmVudDogeyBjbGFzczogTGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50IH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3QgYnJhbmNoID0gbmV3IEJyYW5jaChwbGFjZWhvbGRlck5vZGUpO1xyXG4gICAgICB0aGlzLnRyZWVNb2RlbC5hcHBlbmRDaGlsZChicmFuY2gpO1xyXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXHJcbiAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICB0aGlzLmhvc3RcclxuICAgICAgKTtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IGJyYW5jaDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlbW92ZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVySW5kZXggPSB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpLmxlbmd0aCAtIDE7XHJcbiAgICAgIGlmIChwbGFjZWhvbGRlckluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICB0aGlzLnRyZWVNb2RlbC5yZW1vdmVDaGlsZChwbGFjZWhvbGRlckluZGV4KTsgLy9yZW1vdmUgdGhlIHBsYWNlaG9sZGVyXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xyXG4gICB9XHJcblxyXG4gICAvKiogUmVuZGVycyB0aGUgZW50aXJlIHRyZWUgZnJvbSByb290IHRvIGxlYXZlcyAqL1xyXG4gICBwcml2YXRlIHJlbmRlcigpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmhvc3QgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgdGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmVlTW9kZWwgbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaG9zdC5jbGVhcigpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5yZXN0YXJ0KCk7XHJcbiAgICAgIC8vV2UgZG9uJ3QgbmVlZCB0byBjYWxsIHJlbW92ZVBsYWNlaG9sZGVyIGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IGNsZWFyZWQgaXQgYXdheSBpbiB0aGUgcHJlY2VkaW5nIGxpbmVzLiBXZSBqdXN0IGhhdmUgdG8gdGVsbCB0aGUgc2VydmljZSB0aGF0IGl0IGlzIGRvbmUuXHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy50cmVlTW9kZWwgPSBuZXcgQnJhbmNoKG51bGwpO1xyXG4gICAgICBpZiAodGhpcy50cmVlRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgLy9UcmVlIGlzIGVtcHR5LCBidXQgd2UgaGF2ZSB0byB0byBoYXZlIHNvbWV0aGluZyB0aGVyZSBzbyBvdGhlciB0cmVlcycgaXRlbXMgY2FuIGJlIGRyb3BwZWQgaW50byBpdFxyXG4gICAgICAgICB0aGlzLnVzZVBsYWNlaG9sZGVyKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnRyZWVEYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IG5ldyBCcmFuY2gobm9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLmFwcGVuZENoaWxkKGJyYW5jaCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgdGhpcy50cmVlTW9kZWwuZ2V0Q2hpbGRyZW4oKSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICB0aGlzLmhvc3RcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IGJyYW5jaDtcclxuICAgICAgICAgICAgLy9UaGUgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgd2lsbCAoaW5kaXJlY3RseSkgY2FsbCB0aGUgYHJlbmRlckJyYW5jaGAgbWV0aG9kIG9mIHRoaXMgc2VydmljZSB0byByZW5kZXJcclxuICAgICAgICAgICAgLy9pdHMgb3duIGNoaWxkcmVuXHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0cmVlRGF0YSA9IHRoaXMudHJlZURhdGE7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICBpZiAodGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5jaGFuZ2VzJC5uZXh0KG51bGwpO1xyXG4gICAgICAgICBpZiAodGhpcy50cmVlRGF0YSAhPT0gdHJlZURhdGEpIHtcclxuICAgICAgICAgICAgLy9UaGUgdHJlZSBzZXJ2aWNlIGhhcyBiZWVuIHJlaW5pdGlhbGl6ZWQgc2luY2UgdGhpcyB0aW1lb3V0IHdhcyBjYWxsZWQuXHJcbiAgICAgICAgICAgIC8vVG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLCB3ZSBzaG91bGQgc2tpcCBpbml0aWFsaXppbmcgdGhlIGRyb3Bab25lU2VydmljZS5cclxuICAgICAgICAgICAgLy9FdmVuIHdpdGhvdXQgYSByYWNlIGNvbmRpdGlvbiwgdGhlIG5ldyB0cmVlIGRhdGEgd2lsbCBqdXN0IG92ZXJ3cml0ZSB0aGVcclxuICAgICAgICAgICAgLy9kcm9wIHpvbmUgZGF0YSBhbnl3YXksIHNvIHB1bGxpbmcgb3V0IGVhcmx5IHdpbGwgYWxzbyBiZSBtb3JlIGVmZmljaWVudC5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmluaXQodGhpcy50cmVlTW9kZWwsIHRoaXMudHJlZU9wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgLyoqIFJlbmRlcnMgYSBicmFuY2ggb2YgdGhlIHRyZWUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgKi9cclxuICAgcHVibGljIHJlbmRlckJyYW5jaChob3N0OiBWaWV3Q29udGFpbmVyUmVmLCBicmFuY2g6IEJyYW5jaDxhbnk+KSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVNb2RlbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgaG9zdC5jbGVhcigpO1xyXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYnJhbmNoLmRhdGEubm9kZXMgPz8gW10pIHtcclxuICAgICAgICAgY29uc3QgbmV3QnJhbmNoID0gbmV3IEJyYW5jaChub2RlKTtcclxuICAgICAgICAgYnJhbmNoLmFwcGVuZENoaWxkKG5ld0JyYW5jaCk7XHJcbiAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PExpbWJsZVRyZWVOb2RlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGhvc3RcclxuICAgICAgICAgKTtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IG5ld0JyYW5jaDtcclxuICAgICAgICAgLy9UaGUgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgd2lsbCAoaW5kaXJlY3RseSkgY2FsbCB0aGUgYHJlbmRlckJyYW5jaGAgbWV0aG9kIG9mIHRoaXMgc2VydmljZSB0byByZW5kZXJcclxuICAgICAgICAgLy9pdHMgb3duIGNoaWxkcmVuXHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBwcm9jZXNzT3B0aW9ucyhcclxuICAgICAgb3B0aW9uczogTGltYmxlVHJlZU9wdGlvbnMgPSB7fSxcclxuICAgICAgaXRlbXNQZXJQYWdlOiBudW1iZXIgPSBJbmZpbml0eSxcclxuICAgICAgcGFnZTogbnVtYmVyID0gMVxyXG4gICApOiBQcm9jZXNzZWRPcHRpb25zIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICBvcHRpb25zLmxpc3RNb2RlID09PSB0cnVlICYmXHJcbiAgICAgICAgIG9wdGlvbnMuYWxsb3dOZXN0aW5nICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgb3B0aW9ucy5hbGxvd05lc3RpbmcgIT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIFwiVGhlIHZhbHVlIG9mIGBhbGxvd05lc3RpbmdgIHdpbGwgYmUgaWdub3JlZDsgaXQgbXVzdCBiZSBmYWxzZSB3aGVuIGBsaXN0TW9kZWAgaXMgdHJ1ZVwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVzdWx0OiBQcm9jZXNzZWRPcHRpb25zQmFzZSA9IHtcclxuICAgICAgICAgZGVmYXVsdENvbXBvbmVudDogb3B0aW9ucy5kZWZhdWx0Q29tcG9uZW50LFxyXG4gICAgICAgICBpbmRlbnQ6IG9wdGlvbnMuaW5kZW50ID8/IElOREVOVCxcclxuICAgICAgICAgYWxsb3dOZXN0aW5nOlxyXG4gICAgICAgICAgICBvcHRpb25zLmxpc3RNb2RlICE9PSB0cnVlICYmIChvcHRpb25zLmFsbG93TmVzdGluZyA/PyB0cnVlKSxcclxuICAgICAgICAgYWxsb3dEcmFnZ2luZzogb3B0aW9ucy5hbGxvd0RyYWdnaW5nID8/IHRydWUsXHJcbiAgICAgICAgIGFsbG93RHJvcDogb3B0aW9ucy5hbGxvd0Ryb3AgPz8gKCgpID0+IHRydWUpLFxyXG4gICAgICAgICBsaXN0TW9kZTogb3B0aW9ucy5saXN0TW9kZSA/PyBmYWxzZSxcclxuICAgICAgICAgaXRlbXNQZXJQYWdlOiBvcHRpb25zLmxpc3RNb2RlID8gaXRlbXNQZXJQYWdlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICBwYWdlOiBvcHRpb25zLmxpc3RNb2RlID8gcGFnZSA6IHVuZGVmaW5lZFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFByb2Nlc3NlZE9wdGlvbnM7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcm9wKHNvdXJjZTogQnJhbmNoPGFueT4sIHRhcmdldENvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcykge1xyXG4gICAgICBjb25zdCBzb3VyY2VQYXJlbnQgPSBzb3VyY2UuZ2V0UGFyZW50KCk7XHJcbiAgICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gc291cmNlLmdldEluZGV4KCk7XHJcbiAgICAgIGlmIChzb3VyY2VJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBtb3ZlIHRoZSBoaWRkZW4gcm9vdCBub2RlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB0YXJnZXRQYXJlbnRDb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXM7XHJcbiAgICAgIGxldCBpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICB0YXJnZXRQYXJlbnRDb29yZGluYXRlcyA9IFtdO1xyXG4gICAgICAgICBpbmRleCA9IDA7XHJcbiAgICAgICAgIHRoaXMucmVtb3ZlUGxhY2Vob2xkZXIoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXMgPSBbLi4udGFyZ2V0Q29vcmRpbmF0ZXNdO1xyXG4gICAgICAgICBpbmRleCA9IHRhcmdldFBhcmVudENvb3JkaW5hdGVzLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhcmdldCBjb29yZGluYXRlcyBhcmUgZW1wdHlcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFyZ2V0UGFyZW50ID0gdGhpcy50cmVlTW9kZWwuZ2V0RGVzY2VuZGFudChcclxuICAgICAgICAgdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXNcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRhcmdldFBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCBnZXQgdG8gdGFyZ2V0XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRhcmdldFBhcmVudC5pbnNlcnRDaGlsZChzb3VyY2UsIGluZGV4KTtcclxuICAgICAgdGhpcy5yZWJ1aWxkVHJlZURhdGEoKTtcclxuICAgICAgdGhpcy5kcm9wcyQubmV4dCh7XHJcbiAgICAgICAgIHRhcmdldDogc291cmNlLmRhdGEsXHJcbiAgICAgICAgIG9sZFBhcmVudDogc291cmNlUGFyZW50Py5kYXRhIGFzIExpbWJsZVRyZWVOb2RlLFxyXG4gICAgICAgICBvbGRJbmRleDogc291cmNlSW5kZXgsXHJcbiAgICAgICAgIG5ld1BhcmVudDogdGFyZ2V0UGFyZW50LmRhdGEsXHJcbiAgICAgICAgIG5ld0luZGV4OiBpbmRleFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlbW92ZSh0YXJnZXQ6IEJyYW5jaDxhbnk+KSB7XHJcbiAgICAgIHRhcmdldC5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5yZW1vdmVQbGFjZWhvbGRlcigpO1xyXG4gICAgICB0aGlzLnJlYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRUcmVlRGF0YSgpOiB2b2lkIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnVuY3V0RGF0YSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMudHJlZURhdGEgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLnRyZWVPcHRpb25zID09PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWUgZGF0YSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmVlRGF0YS5sZW5ndGggPSAwO1xyXG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRoaXMudHJlZURhdGEucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goYnJhbmNoKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZU9wdGlvbnMubGlzdE1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgbGV0IHN0YXJ0ID1cclxuICAgICAgICAgICAgdGhpcy50cmVlT3B0aW9ucy5pdGVtc1BlclBhZ2UgKiAodGhpcy50cmVlT3B0aW9ucy5wYWdlIC0gMSk7XHJcbiAgICAgICAgIGlmIChpc05hTihzdGFydCkpIHtcclxuICAgICAgICAgICAgLy9UaGlzIGNhdGNoZXMgdGhlIGNhc2Ugd2hlcmUgaXRlbXNQZXJQYWdlIHdhcyBub3QgcGFzc2VkIGJ5IHRoZSB1c2VyLFxyXG4gICAgICAgICAgICAvL2NhdXNpbmcgYHN0YXJ0YCB0byBlcXVhbCBpbmZpbml0eSowLCB3aGljaCBpcyBOYU4uXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlO1xyXG4gICAgICAgICB0aGlzLnVuY3V0RGF0YS5zcGxpY2UoXHJcbiAgICAgICAgICAgIHN0YXJ0LFxyXG4gICAgICAgICAgICB0aGlzLnRyZWVPcHRpb25zLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgLi4udGhpcy50cmVlRGF0YVxyXG4gICAgICAgICApO1xyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy51bmN1dERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHRoaXMudW5jdXREYXRhID0gdGhpcy50cmVlRGF0YTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRCcmFuY2goYnJhbmNoOiBCcmFuY2g8YW55Pik6IExpbWJsZVRyZWVOb2RlIHtcclxuICAgICAgY29uc3QgdGVtcDogTGltYmxlVHJlZU5vZGUgPSBicmFuY2guZGF0YTtcclxuICAgICAgdGVtcC5ub2RlcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJyYW5jaC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRlbXAubm9kZXMucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldFBsYWNlaG9sZGVyKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcclxuICAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JDLE9BQU8sRUFBRSxNQUFNLEVBQXFCLE1BQU0sbUJBQW1CLENBQUM7QUFDOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOERBQThELENBQUM7Ozs7QUE4RDlHLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBa0R6QixNQUFNLE9BQU8sV0FBVztJQVVyQixZQUNvQix1QkFBZ0QsRUFDaEQsZUFBZ0M7UUFEaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFFakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksSUFBSSxDQUNSLElBQXNCLEVBQ3RCLElBQW9CLEVBQ3BCLE9BQTJCLEVBQzNCLFlBQXFCLEVBQ3JCLElBQWE7UUFFYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENB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Q0FBQyxDQUFDLENBQUM7U0FDN0M7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMzQixDQUFDOztzRUEzUVMsV0FBVzttREFBWCxXQUFXLFdBQVgsV0FBVzt1RkFBWCxXQUFXO2NBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCcmFuY2gsIEJyYW5jaENvb3JkaW5hdGVzIH0gZnJvbSBcIi4uL2NsYXNzZXMvQnJhbmNoXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqIEFuIG9iamVjdCBkZXNjcmliaW5nIGEgbm9kZSBvZiB0aGUgdHJlZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExpbWJsZVRyZWVOb2RlIHtcclxuICAgLyoqIEEgbGlzdCBvZiBub2RlcyB0byBiZSByZW5kZXJlZCBcInVuZGVyXCIgdGhpcyBvbmUsIG9uZSBsZXZlbCBkZWVwZXIgaW4gdGhlIHRyZWUuICovXHJcbiAgIG5vZGVzPzogTGltYmxlVHJlZURhdGE7XHJcbiAgIC8vIC8qKiBBIGN1c3RvbSBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIGludG8gdGhlIGNvbXBvbmVudCBhcyBhbiBgSW5wdXQoKWAgYmluZGluZyBjYWxsZWQgYG5vZGVEYXRhYCAqL1xyXG4gICAvLyBkYXRhOiB1bmtub3duO1xyXG4gICAvKiogQW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBjb21wb25lbnQgd2hpY2ggd2lsbCByZXByZXNlbnQgdGhpcyBub2RlIGluIHRoZSB2aXN1YWwgdHJlZSAqL1xyXG4gICBjb21wb25lbnQ/OiBDb21wb25lbnRPYmo7XHJcbiAgIGNvbGxhcHNlZD86IGJvb2xlYW47XHJcbiAgIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcclxufVxyXG5cclxuLyoqIEFuIG9iamVjdCB0aGF0IHRoZSBsaW1ibGUtdHJlZS1yb290IGNvbXBvbmVudCB1c2VzIHRvIGJ1aWxkIHRoZSB0cmVlICovXHJcbmV4cG9ydCB0eXBlIExpbWJsZVRyZWVEYXRhID0gQXJyYXk8TGltYmxlVHJlZU5vZGU+O1xyXG5cclxuLyoqIEEgZ3JvdXAgb2Ygc2V0dGluZ3MgZm9yIGNoYW5naW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0cmVlICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGltYmxlVHJlZU9wdGlvbnMge1xyXG4gICAvKiogVGhlIGNvbXBvbmVudCBvYmplY3QgdG8gdXNlIGlmIG9uZSBpcyBub3Qgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgbm9kZSAqL1xyXG4gICBkZWZhdWx0Q29tcG9uZW50PzogQ29tcG9uZW50T2JqO1xyXG4gICAvKiogVGhlIG51bWJlciBvZiBwaXhlbHMgdG8gaW5kZW50IGVhY2ggbGV2ZWwgb2YgdGhlIHRyZWUuIERlZmF1bHRzIHRvIDQ1ICovXHJcbiAgIGluZGVudD86IG51bWJlcjtcclxuICAgLyoqXHJcbiAgICAqIFdoZXRoZXIgdG8gYWxsb3cgXCJuZXN0aW5nXCIgKHBsYWNpbmcgYSBub2RlIG9uZSBsZXZlbCBkZWVwZXIgdGhhbiBjdXJyZW50bHkgZXhpc3RzIG9uIHRoZSBicmFuY2gpLlxyXG4gICAgKiBXaGVuIHRoaXMgaXMgYSBib29sZWFuLCBpdCBhcHBsaWVzIHRvIGFsbCBub2Rlcy4gV2hlbiB0aGlzIGlzIGEgZnVuY3Rpb24sIHRoZSBub2RlIGluIHF1ZXN0aW9uXHJcbiAgICAqIGlzIHBhc3NlZCBpbi4gRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICovXHJcbiAgIGFsbG93TmVzdGluZz86IGJvb2xlYW4gfCAoKG5vZGVEYXRhOiBMaW1ibGVUcmVlTm9kZSkgPT4gYm9vbGVhbik7XHJcbiAgIC8qKlxyXG4gICAgKiBXaGV0aGVyIHRvIGFsbG93IGEgbm9kZSB0byBiZSBkcmFnZ2VkLiBXaGVuIHRoaXMgaXMgYSBib29sZWFuLCBpdCBhcHBsaWVzIHRvIGFsbCBub2Rlcy4gV2hlbiB0aGlzXHJcbiAgICAqIGlzIGEgZnVuY3Rpb24sIHRoZSBub2RlIGluIHF1ZXN0aW9uIGlzIHBhc3NlZCBpbi4gRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICovXHJcbiAgIGFsbG93RHJhZ2dpbmc/OiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gICAvKiogQSBjYWxsYmFjayB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNvdXJjZU5vZGUgY2FuIGJlIGRyb3BwZWQgYXQgYSBwYXJ0aWN1bGFyIGxvY2F0aW9uLiAqL1xyXG4gICBhbGxvd0Ryb3A/OiAoXHJcbiAgICAgIHNvdXJjZU5vZGU6IExpbWJsZVRyZWVOb2RlLFxyXG4gICAgICBwcm9wb3NlZFBhcmVudDogTGltYmxlVHJlZU5vZGUgfCBudWxsLFxyXG4gICAgICBwcm9wb3NlZEluZGV4OiBudW1iZXJcclxuICAgKSA9PiBib29sZWFuO1xyXG4gICAvKiogV2hlbiBzZXQgdG8gdHJ1ZSwgbGlzdCBtb2RlIHdpbGwgZW5mb3JjZSBhIGZsYXQgdHJlZSBzdHJ1Y3R1cmUsIG1lYW5pbmcgdGhlcmVcclxuICAgICogY2FuIG9ubHkgYmUgb25lIGxldmVsIG9mIHRoZSB0cmVlLiBgYWxsb3dOZXN0aW5nYCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byBgZmFsc2VgXHJcbiAgICAqIGFuZCBhbnkgY2hpbGRyZW4gd2lsbCBiZSBkZWxldGVkLlxyXG4gICAgKlxyXG4gICAgKiBUaGlzIG1vZGUgY2FuIGJlIHVzZWQgd2hlbiB0aGUgc2FtZSBkeW5hbWljIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eSBvZlxyXG4gICAgKiB0aGUgdHJlZSBpcyBkZXNpcmVkLCBidXQgdGhlIHRyZWUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzXHJcbiAgICAqIGFsc28gb3BlbnMgdXAgdGhlIHBhZ2luYXRpb24gQVBJIG9uIHRoZSBsaW1ibGUtdHJlZS1yb290IGNvbXBvbmVudC4gU2VlIHRoZVxyXG4gICAgKiBSRUFETUUgZm9yIGRldGFpbHMgb24gcGFnaW5hdGlvbi5cclxuICAgICovXHJcbiAgIGxpc3RNb2RlPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqIEFuIG9iamVjdCB0aGF0IHJlZmVyZW5jZXMgdGhlIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCBhbmQgaXRzIGJpbmRpbmdzICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50T2JqIHtcclxuICAgLyoqIFRoZSBjb21wb25lbnQgY2xhc3MgKi9cclxuICAgY2xhc3M6IFR5cGU8dW5rbm93bj47XHJcbiAgIC8qKiBUaGUgYmluZGluZ3MgKGlucHV0cyBhbmQgb3V0cHV0cykgb2YgdGhlIGNsYXNzICovXHJcbiAgIGJpbmRpbmdzPzoge1xyXG4gICAgICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XHJcbiAgIH07XHJcbn1cclxuXHJcbi8qKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGBpbmRlbnRgIG9wdGlvbiAqL1xyXG5leHBvcnQgY29uc3QgSU5ERU5UID0gNDU7XHJcblxyXG4vKiogQW4gb3B0aW9ucyBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlcyBsb2FkZWQgd2hlcmUgYXBwbGljYWJsZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZE9wdGlvbnNCYXNlIGV4dGVuZHMgTGltYmxlVHJlZU9wdGlvbnMge1xyXG4gICBkZWZhdWx0Q29tcG9uZW50PzogQ29tcG9uZW50T2JqO1xyXG4gICBpbmRlbnQ6IG51bWJlcjtcclxuICAgYWxsb3dOZXN0aW5nOiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gICBhbGxvd0RyYWdnaW5nOiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gICBhbGxvd0Ryb3A6IChcclxuICAgICAgc291cmNlTm9kZTogTGltYmxlVHJlZU5vZGUsXHJcbiAgICAgIHByb3Bvc2VkUGFyZW50OiBMaW1ibGVUcmVlTm9kZSB8IG51bGwsXHJcbiAgICAgIHByb3Bvc2VkSW5kZXg6IG51bWJlclxyXG4gICApID0+IGJvb2xlYW47XHJcbiAgIGxpc3RNb2RlOiBib29sZWFuO1xyXG4gICBpdGVtc1BlclBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICAgcGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZE9wdGlvbnNXaXRoUGFnaW5hdGlvbiBleHRlbmRzIFByb2Nlc3NlZE9wdGlvbnNCYXNlIHtcclxuICAgbGlzdE1vZGU6IHRydWU7XHJcbiAgIGl0ZW1zUGVyUGFnZTogbnVtYmVyO1xyXG4gICBwYWdlOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc2VkT3B0aW9uc1dpdGhvdXRQYWdpbmF0aW9uXHJcbiAgIGV4dGVuZHMgUHJvY2Vzc2VkT3B0aW9uc0Jhc2Uge1xyXG4gICBsaXN0TW9kZTogZmFsc2U7XHJcbiAgIGl0ZW1zUGVyUGFnZTogdW5kZWZpbmVkO1xyXG4gICBwYWdlOiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFByb2Nlc3NlZE9wdGlvbnMgPVxyXG4gICB8IFByb2Nlc3NlZE9wdGlvbnNXaXRoUGFnaW5hdGlvblxyXG4gICB8IFByb2Nlc3NlZE9wdGlvbnNXaXRob3V0UGFnaW5hdGlvbjtcclxuXHJcbi8qKiB0aGUgdmFsdWUgZW1pdHRlZCBmcm9tIHRoZSByb290IGNvbXBvbmVudCBhZnRlciBhIG5vZGUgaXMgZHJvcHBlZCAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVEcm9wIHtcclxuICAgLyoqIFRoZSBub2RlIHRoYXQgd2FzIGRyb3BwZWQgKi9cclxuICAgdGFyZ2V0OiBMaW1ibGVUcmVlTm9kZTtcclxuICAgLyoqIHRoZSB0YXJnZXQncyBwYXJlbnQgYmVmb3JlIHRoZSBkcmFnIGFuZCBkcm9wLCBvciBudWxsIGlmIGl0IHdhcyBhIHRvcC1sZXZlbCBub2RlICovXHJcbiAgIG9sZFBhcmVudDogTGltYmxlVHJlZU5vZGUgfCBudWxsO1xyXG4gICAvKiogdGhlIGluZGV4IG9mIHRoZSBub2RlIGJlZm9yZSB0aGUgZHJhZyBhbmQgZHJvcCByZWxhdGl2ZSB0byBpdHMgb2xkIHNpYmxpbmdzICovXHJcbiAgIG9sZEluZGV4OiBudW1iZXI7XHJcbiAgIC8qKiB0aGUgdGFyZ2V0J3MgcGFyZW50IGFmdGVyIHRoZSBkcmFnIGFuZCBkcm9wLCBvciBudWxsIGlmIGl0IGlzIG5vdyBhIHRvcC1sZXZlbCBub2RlICovXHJcbiAgIG5ld1BhcmVudDogTGltYmxlVHJlZU5vZGUgfCBudWxsO1xyXG4gICAvKiogdGhlIGluZGV4IG9mIHRoZSBub2RlIGFmdGVyIHRoZSBkcmFnIGFuZCBkcm9wIHJlbGF0aXZlIHRvIGl0cyBuZXcgc2libGluZ3MgKi9cclxuICAgbmV3SW5kZXg6IG51bWJlcjtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJlZVNlcnZpY2Uge1xyXG4gICBwdWJsaWMgY2hhbmdlcyQ6IFJlcGxheVN1YmplY3Q8bnVsbD47XHJcbiAgIHB1YmxpYyBkcm9wcyQ6IFJlcGxheVN1YmplY3Q8VHJlZURyb3A+O1xyXG4gICBwcml2YXRlIGhvc3Q6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyB0cmVlRGF0YTogTGltYmxlVHJlZURhdGEgfCB1bmRlZmluZWQ7XHJcbiAgIHByaXZhdGUgdW5jdXREYXRhOiBMaW1ibGVUcmVlRGF0YSB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHRyZWVPcHRpb25zOiBQcm9jZXNzZWRPcHRpb25zIHwgdW5kZWZpbmVkO1xyXG4gICBwdWJsaWMgdHJlZU1vZGVsOiBCcmFuY2g8YW55PjtcclxuICAgcHJpdmF0ZSBwbGFjZWhvbGRlcjogYm9vbGVhbjtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudENyZWF0b3JTZXJ2aWNlOiBDb21wb25lbnRDcmVhdG9yU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZVxyXG4gICApIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gICAgICB0aGlzLmRyb3BzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gICAgICB0aGlzLnRyZWVNb2RlbCA9IG5ldyBCcmFuY2gobnVsbCk7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcclxuICAgfVxyXG5cclxuICAgLyoqIEluaXRpYWxpemVzIHRoZSBzZXJ2aWNlIGFuZCByZW5kZXJzIHRoZSB0cmVlLlxyXG4gICAgKiBAcGFyYW0gaG9zdCAtIFRoZSBWaWV3Q29udGFpbmVyUmVmIGludG8gd2hpY2ggdGhlIHRyZWUgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSBhcnJheSB0aGF0IHdhcyBwYXNzZWQgaW4gdG8gTGltYmxlVHJlZVJvb3QsIHdoaWNoIGlzXHJcbiAgICAqIHRoZSB1c2VycycgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWVcclxuICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIGluIHRvIExpbWJsZVRyZWVSb290XHJcbiAgICAqL1xyXG4gICBwdWJsaWMgaW5pdChcclxuICAgICAgaG9zdDogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgZGF0YTogTGltYmxlVHJlZURhdGEsXHJcbiAgICAgIG9wdGlvbnM/OiBMaW1ibGVUcmVlT3B0aW9ucyxcclxuICAgICAgaXRlbXNQZXJQYWdlPzogbnVtYmVyLFxyXG4gICAgICBwYWdlPzogbnVtYmVyXHJcbiAgICk6IHZvaWQge1xyXG4gICAgICB0aGlzLmhvc3QgPSBob3N0O1xyXG4gICAgICB0aGlzLnVuY3V0RGF0YSA9IGRhdGE7XHJcbiAgICAgIHRoaXMudHJlZU9wdGlvbnMgPSB0aGlzLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgcGFnZSk7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVPcHRpb25zLmxpc3RNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgIGxldCBzdGFydCA9XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlICogKHRoaXMudHJlZU9wdGlvbnMucGFnZSAtIDEpO1xyXG4gICAgICAgICBpZiAoaXNOYU4oc3RhcnQpKSB7XHJcbiAgICAgICAgICAgIC8vVGhpcyBjYXRjaGVzIHRoZSBjYXNlIHdoZXJlIGl0ZW1zUGVyUGFnZSB3YXMgbm90IHBhc3NlZCBieSB0aGUgdXNlcixcclxuICAgICAgICAgICAgLy9jYXVzaW5nIGBzdGFydGAgdG8gZXF1YWwgaW5maW5pdHkqMCwgd2hpY2ggaXMgTmFOLlxyXG4gICAgICAgICAgICBzdGFydCA9IDA7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnRyZWVPcHRpb25zLml0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMudW5jdXREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy51bmN1dERhdGE7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHVzZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaG9zdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyTm9kZTogTGltYmxlVHJlZU5vZGUgPSB7XHJcbiAgICAgICAgIGNvbXBvbmVudDogeyBjbGFzczogTGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50IH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3QgYnJhbmNoID0gbmV3IEJyYW5jaChwbGFjZWhvbGRlck5vZGUpO1xyXG4gICAgICB0aGlzLnRyZWVNb2RlbC5hcHBlbmRDaGlsZChicmFuY2gpO1xyXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXHJcbiAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICB0aGlzLmhvc3RcclxuICAgICAgKTtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IGJyYW5jaDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlbW92ZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVySW5kZXggPSB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpLmxlbmd0aCAtIDE7XHJcbiAgICAgIGlmIChwbGFjZWhvbGRlckluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICB0aGlzLnRyZWVNb2RlbC5yZW1vdmVDaGlsZChwbGFjZWhvbGRlckluZGV4KTsgLy9yZW1vdmUgdGhlIHBsYWNlaG9sZGVyXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xyXG4gICB9XHJcblxyXG4gICAvKiogUmVuZGVycyB0aGUgZW50aXJlIHRyZWUgZnJvbSByb290IHRvIGxlYXZlcyAqL1xyXG4gICBwcml2YXRlIHJlbmRlcigpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmhvc3QgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgdGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmVlTW9kZWwgbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaG9zdC5jbGVhcigpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5yZXN0YXJ0KCk7XHJcbiAgICAgIC8vV2UgZG9uJ3QgbmVlZCB0byBjYWxsIHJlbW92ZVBsYWNlaG9sZGVyIGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IGNsZWFyZWQgaXQgYXdheSBpbiB0aGUgcHJlY2VkaW5nIGxpbmVzLiBXZSBqdXN0IGhhdmUgdG8gdGVsbCB0aGUgc2VydmljZSB0aGF0IGl0IGlzIGRvbmUuXHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy50cmVlTW9kZWwgPSBuZXcgQnJhbmNoKG51bGwpO1xyXG4gICAgICBpZiAodGhpcy50cmVlRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgLy9UcmVlIGlzIGVtcHR5LCBidXQgd2UgaGF2ZSB0byB0byBoYXZlIHNvbWV0aGluZyB0aGVyZSBzbyBvdGhlciB0cmVlcycgaXRlbXMgY2FuIGJlIGRyb3BwZWQgaW50byBpdFxyXG4gICAgICAgICB0aGlzLnVzZVBsYWNlaG9sZGVyKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnRyZWVEYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IG5ldyBCcmFuY2gobm9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLmFwcGVuZENoaWxkKGJyYW5jaCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgdGhpcy50cmVlTW9kZWwuZ2V0Q2hpbGRyZW4oKSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICB0aGlzLmhvc3RcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IGJyYW5jaDtcclxuICAgICAgICAgICAgLy9UaGUgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgd2lsbCAoaW5kaXJlY3RseSkgY2FsbCB0aGUgYHJlbmRlckJyYW5jaGAgbWV0aG9kIG9mIHRoaXMgc2VydmljZSB0byByZW5kZXJcclxuICAgICAgICAgICAgLy9pdHMgb3duIGNoaWxkcmVuXHJcbiAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0cmVlRGF0YSA9IHRoaXMudHJlZURhdGE7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICBpZiAodGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5jaGFuZ2VzJC5uZXh0KG51bGwpO1xyXG4gICAgICAgICBpZiAodGhpcy50cmVlRGF0YSAhPT0gdHJlZURhdGEpIHtcclxuICAgICAgICAgICAgLy9UaGUgdHJlZSBzZXJ2aWNlIGhhcyBiZWVuIHJlaW5pdGlhbGl6ZWQgc2luY2UgdGhpcyB0aW1lb3V0IHdhcyBjYWxsZWQuXHJcbiAgICAgICAgICAgIC8vVGhlIG5ldyB0cmVlIGRhdGEgd2lsbCBqdXN0IG92ZXJ3cml0ZSB0aGUgZHJvcCB6b25lIGRhdGEgYW55d2F5LCBzb1xyXG4gICAgICAgICAgICAvL3dlIGNhbiBza2lwIHRoZSBkcm9wIHpvbmUgaW5pdGlhbGl6YXRpb24gb24gdGhpcyByb3VuZCBmb3IgZWZmaWNpZW5jeVxyXG4gICAgICAgICAgICAvL2FuZCBhbHNvIHRvIGF2b2lkIHNvbWUgcG9zc2libGUgKD8pIHJhY2UgY29uZGl0aW9uc1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuaW5pdCh0aGlzLnRyZWVNb2RlbCwgdGhpcy50cmVlT3B0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICB9XHJcblxyXG4gICAvKiogUmVuZGVycyBhIGJyYW5jaCBvZiB0aGUgdHJlZSBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyAqL1xyXG4gICBwdWJsaWMgcmVuZGVyQnJhbmNoKGhvc3Q6IFZpZXdDb250YWluZXJSZWYsIGJyYW5jaDogQnJhbmNoPGFueT4pIHtcclxuICAgICAgaWYgKHRoaXMudHJlZU1vZGVsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZU1vZGVsIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICBob3N0LmNsZWFyKCk7XHJcbiAgICAgIGJyYW5jaC5jbGVhckNoaWxkcmVuKCk7XHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBicmFuY2guZGF0YT8ubm9kZXMgPz8gW10pIHtcclxuICAgICAgICAgY29uc3QgbmV3QnJhbmNoID0gbmV3IEJyYW5jaChub2RlKTtcclxuICAgICAgICAgYnJhbmNoLmFwcGVuZENoaWxkKG5ld0JyYW5jaCk7XHJcbiAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PExpbWJsZVRyZWVOb2RlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGhvc3RcclxuICAgICAgICAgKTtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IG5ld0JyYW5jaDtcclxuICAgICAgICAgLy9UaGUgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgd2lsbCAoaW5kaXJlY3RseSkgY2FsbCB0aGUgYHJlbmRlckJyYW5jaGAgbWV0aG9kIG9mIHRoaXMgc2VydmljZSB0byByZW5kZXJcclxuICAgICAgICAgLy9pdHMgb3duIGNoaWxkcmVuXHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBwcm9jZXNzT3B0aW9ucyhcclxuICAgICAgb3B0aW9uczogTGltYmxlVHJlZU9wdGlvbnMgPSB7fSxcclxuICAgICAgaXRlbXNQZXJQYWdlOiBudW1iZXIgPSBJbmZpbml0eSxcclxuICAgICAgcGFnZTogbnVtYmVyID0gMVxyXG4gICApOiBQcm9jZXNzZWRPcHRpb25zIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICBvcHRpb25zLmxpc3RNb2RlID09PSB0cnVlICYmXHJcbiAgICAgICAgIG9wdGlvbnMuYWxsb3dOZXN0aW5nICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgb3B0aW9ucy5hbGxvd05lc3RpbmcgIT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIFwiVGhlIHZhbHVlIG9mIGBhbGxvd05lc3RpbmdgIHdpbGwgYmUgaWdub3JlZDsgaXQgbXVzdCBiZSBmYWxzZSB3aGVuIGBsaXN0TW9kZWAgaXMgdHJ1ZVwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVzdWx0OiBQcm9jZXNzZWRPcHRpb25zQmFzZSA9IHtcclxuICAgICAgICAgZGVmYXVsdENvbXBvbmVudDogb3B0aW9ucy5kZWZhdWx0Q29tcG9uZW50LFxyXG4gICAgICAgICBpbmRlbnQ6IG9wdGlvbnMuaW5kZW50ID8/IElOREVOVCxcclxuICAgICAgICAgYWxsb3dOZXN0aW5nOlxyXG4gICAgICAgICAgICBvcHRpb25zLmxpc3RNb2RlICE9PSB0cnVlICYmIChvcHRpb25zLmFsbG93TmVzdGluZyA/PyB0cnVlKSxcclxuICAgICAgICAgYWxsb3dEcmFnZ2luZzogb3B0aW9ucy5hbGxvd0RyYWdnaW5nID8/IHRydWUsXHJcbiAgICAgICAgIGFsbG93RHJvcDogb3B0aW9ucy5hbGxvd0Ryb3AgPz8gKCgpID0+IHRydWUpLFxyXG4gICAgICAgICBsaXN0TW9kZTogb3B0aW9ucy5saXN0TW9kZSA/PyBmYWxzZSxcclxuICAgICAgICAgaXRlbXNQZXJQYWdlOiBvcHRpb25zLmxpc3RNb2RlID8gaXRlbXNQZXJQYWdlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICBwYWdlOiBvcHRpb25zLmxpc3RNb2RlID8gcGFnZSA6IHVuZGVmaW5lZFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFByb2Nlc3NlZE9wdGlvbnM7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcm9wKHNvdXJjZTogQnJhbmNoPGFueT4sIHRhcmdldENvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcykge1xyXG4gICAgICBjb25zdCBzb3VyY2VQYXJlbnQgPSBzb3VyY2UuZ2V0UGFyZW50KCk7XHJcbiAgICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gc291cmNlLmdldEluZGV4KCk7XHJcbiAgICAgIGlmIChzb3VyY2VJbmRleCA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZUluZGV4ID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBtb3ZlIHRoZSBoaWRkZW4gcm9vdCBub2RlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB0YXJnZXRQYXJlbnRDb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXM7XHJcbiAgICAgIGxldCBpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICB0YXJnZXRQYXJlbnRDb29yZGluYXRlcyA9IFtdO1xyXG4gICAgICAgICBpbmRleCA9IDA7XHJcbiAgICAgICAgIHRoaXMucmVtb3ZlUGxhY2Vob2xkZXIoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXMgPSBbLi4udGFyZ2V0Q29vcmRpbmF0ZXNdO1xyXG4gICAgICAgICBpbmRleCA9IHRhcmdldFBhcmVudENvb3JkaW5hdGVzLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhcmdldCBjb29yZGluYXRlcyBhcmUgZW1wdHlcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFyZ2V0UGFyZW50ID0gdGhpcy50cmVlTW9kZWwuZ2V0RGVzY2VuZGFudChcclxuICAgICAgICAgdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXNcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRhcmdldFBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCBnZXQgdG8gdGFyZ2V0XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRhcmdldFBhcmVudC5pbnNlcnRDaGlsZChzb3VyY2UsIGluZGV4KTtcclxuICAgICAgdGhpcy5yZWJ1aWxkVHJlZURhdGEoKTtcclxuICAgICAgdGhpcy5kcm9wcyQubmV4dCh7XHJcbiAgICAgICAgIHRhcmdldDogc291cmNlLmRhdGEsXHJcbiAgICAgICAgIG9sZFBhcmVudDogc291cmNlUGFyZW50Py5kYXRhIGFzIExpbWJsZVRyZWVOb2RlLFxyXG4gICAgICAgICBvbGRJbmRleDogc291cmNlSW5kZXgsXHJcbiAgICAgICAgIG5ld1BhcmVudDogdGFyZ2V0UGFyZW50LmRhdGEsXHJcbiAgICAgICAgIG5ld0luZGV4OiBpbmRleFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlbW92ZSh0YXJnZXQ6IEJyYW5jaDxhbnk+KSB7XHJcbiAgICAgIHRhcmdldC5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5yZW1vdmVQbGFjZWhvbGRlcigpO1xyXG4gICAgICB0aGlzLnJlYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRUcmVlRGF0YSgpOiB2b2lkIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnVuY3V0RGF0YSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMudHJlZURhdGEgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLnRyZWVPcHRpb25zID09PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWUgZGF0YSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmVlRGF0YS5sZW5ndGggPSAwO1xyXG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRoaXMudHJlZURhdGEucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goYnJhbmNoKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZU9wdGlvbnMubGlzdE1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgbGV0IHN0YXJ0ID1cclxuICAgICAgICAgICAgdGhpcy50cmVlT3B0aW9ucy5pdGVtc1BlclBhZ2UgKiAodGhpcy50cmVlT3B0aW9ucy5wYWdlIC0gMSk7XHJcbiAgICAgICAgIGlmIChpc05hTihzdGFydCkpIHtcclxuICAgICAgICAgICAgLy9UaGlzIGNhdGNoZXMgdGhlIGNhc2Ugd2hlcmUgaXRlbXNQZXJQYWdlIHdhcyBub3QgcGFzc2VkIGJ5IHRoZSB1c2VyLFxyXG4gICAgICAgICAgICAvL2NhdXNpbmcgYHN0YXJ0YCB0byBlcXVhbCBpbmZpbml0eSowLCB3aGljaCBpcyBOYU4uXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlO1xyXG4gICAgICAgICB0aGlzLnVuY3V0RGF0YS5zcGxpY2UoXHJcbiAgICAgICAgICAgIHN0YXJ0LFxyXG4gICAgICAgICAgICB0aGlzLnRyZWVPcHRpb25zLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgLi4udGhpcy50cmVlRGF0YVxyXG4gICAgICAgICApO1xyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy51bmN1dERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHRoaXMudW5jdXREYXRhID0gdGhpcy50cmVlRGF0YTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRCcmFuY2goYnJhbmNoOiBCcmFuY2g8YW55Pik6IExpbWJsZVRyZWVOb2RlIHtcclxuICAgICAgY29uc3QgdGVtcDogTGltYmxlVHJlZU5vZGUgPSBicmFuY2guZGF0YTtcclxuICAgICAgdGVtcC5ub2RlcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJyYW5jaC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRlbXAubm9kZXMucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldFBsYWNlaG9sZGVyKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcclxuICAgfVxyXG59XHJcbiJdfQ==

@@ -14,2 +14,3 @@ import { NgModule } from "@angular/core";

import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class LimbleTreeModule {

@@ -43,2 +44,5 @@ }

}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOERBQThELENBQUM7O0FBZ0JoSCxNQUFNLE9BQU8sZ0JBQWdCOztvREFBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsbUJBRmYsQ0FBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxZQUZsRSxDQUFDLFlBQVksQ0FBQzt3RkFJYixnQkFBZ0IsbUJBWnZCLHlCQUF5QjtRQUN6QixpQkFBaUI7UUFDakIsdUJBQXVCO1FBQ3ZCLHVCQUF1QjtRQUN2Qiw4QkFBOEI7UUFDOUIsK0JBQStCO1FBQy9CLGdDQUFnQyxhQUV6QixZQUFZLGFBQ1osdUJBQXVCO3VGQUd2QixnQkFBZ0I7Y0FkNUIsUUFBUTtlQUFDO2dCQUNQLFlBQVksRUFBRTtvQkFDWCx5QkFBeUI7b0JBQ3pCLGlCQUFpQjtvQkFDakIsdUJBQXVCO29CQUN2Qix1QkFBdUI7b0JBQ3ZCLDhCQUE4QjtvQkFDOUIsK0JBQStCO29CQUMvQixnQ0FBZ0M7aUJBQ2xDO2dCQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDdkIsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO2FBQzdFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVJvb3RDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJhZ292ZXJOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnb3Zlci1uby1jaGFuZ2UtZGV0ZWN0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBEcmFnbGVhdmVOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnbGVhdmUtbm8tY2hhbmdlLWRldGVjdC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50LFxyXG4gICAgICBEcm9wWm9uZUNvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVSb290Q29tcG9uZW50LFxyXG4gICAgICBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQsXHJcbiAgICAgIERyYWdvdmVyTm9DaGFuZ2VEZXRlY3REaXJlY3RpdmUsXHJcbiAgICAgIERyYWdsZWF2ZU5vQ2hhbmdlRGV0ZWN0RGlyZWN0aXZlXHJcbiAgIF0sXHJcbiAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxyXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgRHJhZ1N0YXRlU2VydmljZSwgR2xvYmFsRXZlbnRzU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVNb2R1bGUge31cclxuIl19
i0.ɵɵsetComponentScope(LimbleTreeNodeComponent, [i1.NgIf, DropZoneComponent,
DragoverNoChangeDetectDirective,
LimbleTreeBranchComponent], []);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOERBQThELENBQUM7OztBQWdCaEgsTUFBTSxPQUFPLGdCQUFnQjs7b0RBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLG1CQUZmLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsWUFGbEUsQ0FBQyxZQUFZLENBQUM7d0ZBSWIsZ0JBQWdCLG1CQVp2Qix5QkFBeUI7UUFDekIsaUJBQWlCO1FBQ2pCLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQixnQ0FBZ0MsYUFFekIsWUFBWSxhQUNaLHVCQUF1Qjt1RkFHdkIsZ0JBQWdCO2NBZDVCLFFBQVE7ZUFBQztnQkFDUCxZQUFZLEVBQUU7b0JBQ1gseUJBQXlCO29CQUN6QixpQkFBaUI7b0JBQ2pCLHVCQUF1QjtvQkFDdkIsdUJBQXVCO29CQUN2Qiw4QkFBOEI7b0JBQzlCLCtCQUErQjtvQkFDL0IsZ0NBQWdDO2lCQUNsQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUNsQyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQzthQUM3RTs7dUJBVEssdUJBQXVCLFlBRHZCLGlCQUFpQjtJQUlqQiwrQkFBK0I7SUFML0IseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVJvb3RDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJhZ292ZXJOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnb3Zlci1uby1jaGFuZ2UtZGV0ZWN0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBEcmFnbGVhdmVOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnbGVhdmUtbm8tY2hhbmdlLWRldGVjdC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50LFxyXG4gICAgICBEcm9wWm9uZUNvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVSb290Q29tcG9uZW50LFxyXG4gICAgICBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQsXHJcbiAgICAgIERyYWdvdmVyTm9DaGFuZ2VEZXRlY3REaXJlY3RpdmUsXHJcbiAgICAgIERyYWdsZWF2ZU5vQ2hhbmdlRGV0ZWN0RGlyZWN0aXZlXHJcbiAgIF0sXHJcbiAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxyXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgRHJhZ1N0YXRlU2VydmljZSwgR2xvYmFsRXZlbnRzU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVNb2R1bGUge31cclxuIl19

@@ -60,2 +60,2 @@ import { Injectable } from "@angular/core";

}], function () { return []; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTXZDLE1BQU0sT0FBTyxnQkFBZ0I7SUFVMUI7UUFDRyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsMkZBQTJGO0lBQ3BGLFFBQVEsQ0FBQyxLQUFrQjtRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELHVGQUF1RjtJQUNoRixTQUFTO1FBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDeEU7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELHVHQUF1RztJQUNoRyxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDWix3REFBd0QsQ0FDMUQsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCw4R0FBOEc7SUFDdkcsT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDWiwwREFBMEQsQ0FDNUQsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN6QixDQUFDO0lBRUQsbURBQW1EO0lBQzVDLE9BQU87UUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELG9EQUFvRDtJQUM3QyxPQUFPO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3pCLENBQUM7SUFFRCw2QkFBNkI7SUFDdEIsUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDOztnRkFyRVMsZ0JBQWdCO3dEQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCO3VGQUFoQixnQkFBZ0I7Y0FENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgdHlwZSB7IEJyYW5jaCB9IGZyb20gXCIuLi9CcmFuY2hcIjtcclxuXHJcbmV4cG9ydCB0eXBlIERyYWdTdGF0ZSA9IFwiaWRsZVwiIHwgXCJkcmFnZ2luZ1wiIHwgXCJkcm9wcGFibGVcIiB8IFwiY2FwdHVyZWRcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERyYWdTdGF0ZVNlcnZpY2Uge1xyXG4gICAvKiogcHVzaGVzIHRoZSBuZXcgc3RhdGUgd2hlbmV2ZXIgdGhlIHN0YXRlIGNoYW5nZXMgKi9cclxuICAgcHVibGljIHN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PERyYWdTdGF0ZT47XHJcblxyXG4gICAvKiogaG9sZHMgdGhlIHRoaW5nIGJlaW5nIGRyYWdnZWQsIGlmIGFueSAqL1xyXG4gICBwcml2YXRlIF90ZW1wRGF0YTogQnJhbmNoPGFueT4gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAvKiogdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRyYWcgcHJvY2VzcyAqL1xyXG4gICBwcml2YXRlIHN0YXRlOiBEcmFnU3RhdGU7XHJcblxyXG4gICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiaWRsZVwiO1xyXG4gICAgICB0aGlzLnN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RHJhZ1N0YXRlPih0aGlzLnN0YXRlKTtcclxuICAgfVxyXG5cclxuICAgLyoqIENhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IHNvbWV0aGluZyBpcyBiZWluZyBkcmFnZ2VkLiBTdG9yZXMgdGhhdCBzb21ldGhpbmcgZm9yIGxhdGVyLiAqL1xyXG4gICBwdWJsaWMgZHJhZ2dpbmcodmFsdWU6IEJyYW5jaDxhbnk+KSB7XHJcbiAgICAgIHRoaXMuX3RlbXBEYXRhID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImRyYWdnaW5nXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBhIHZhbGlkIGFjdGl2ZSBkcm9wIHpvbmUuIERyb3AgaXMgbm93IHBvc3NpYmxlLiAqL1xyXG4gICBwdWJsaWMgZHJvcHBhYmxlKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gXCJkcmFnZ2luZ1wiKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbiBvbmx5IGNhbGwgYGRyb3BwYWJsZWAgd2hlbiBzdGF0ZSBpcyBgZHJhZ2dpbmdgXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImRyb3BwYWJsZVwiO1xyXG4gICAgICB0aGlzLnN0YXRlJC5uZXh0KHRoaXMuc3RhdGUpO1xyXG4gICB9XHJcblxyXG4gICAvKiogQ2FsbGVkIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8gbG9uZ2VyIGEgdmFsaWQgYWN0aXZlIGRyb3Agem9uZS4gRHJvcCBpcyBubyBsb25nZXIgcG9zc2libGUuICovXHJcbiAgIHB1YmxpYyBub3REcm9wcGFibGUoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBcImRyb3BwYWJsZVwiKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgXCJDYW4gb25seSBjYWxsIGBub3REcm9wcGFibGVgIHdoZW4gc3RhdGUgaXMgYGRyb3BwYWJsZWBcIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImRyYWdnaW5nXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCBhIGRyb3AgaW50byBhIHZhbGlkIGRyb3Agem9uZSBoYXMgb2NjdXJyZWQuIFJldHVybnMgdGhlIGl0ZW0gdGhhdCB3YXMgZHJvcHBlZC4gICovXHJcbiAgIHB1YmxpYyBjYXB0dXJlKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gXCJkcm9wcGFibGVcIikge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIFwiQ2FuIG9ubHkgbW92ZSB0byBgY2FwdHVyZWRgIHN0YXRlIGZyb20gYGRyb3BwYWJsZWAgc3RhdGVcIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImNhcHR1cmVkXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl90ZW1wRGF0YTtcclxuICAgfVxyXG5cclxuICAgLyoqIENhbGxlZCB0byByZXNldCB0aGUgc2VydmljZSBmb3IgZnV0dXJlIGRyYWdzICovXHJcbiAgIHB1YmxpYyByZWxlYXNlKCkge1xyXG4gICAgICB0aGlzLl90ZW1wRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiaWRsZVwiO1xyXG4gICAgICB0aGlzLnN0YXRlJC5uZXh0KHRoaXMuc3RhdGUpO1xyXG4gICB9XHJcblxyXG4gICAvKiogZ2V0cyB0aGUgY3VycmVudCB0aGluZyBiZWluZyBkcmFnZ2VkLCBpZiBhbnkuICovXHJcbiAgIHB1YmxpYyBnZXREYXRhKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fdGVtcERhdGE7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBnZXRzIHRoZSBjdXJyZW50IHN0YXRlICovXHJcbiAgIHB1YmxpYyBnZXRTdGF0ZSgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7XHJcbiAgIH1cclxufVxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTXZDLE1BQU0sT0FBTyxnQkFBZ0I7SUFVMUI7UUFDRyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsMkZBQTJGO0lBQ3BGLFFBQVEsQ0FBQyxLQUFrQjtRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELHVGQUF1RjtJQUNoRixTQUFTO1FBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDeEU7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELHVHQUF1RztJQUNoRyxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDWix3REFBd0QsQ0FDMUQsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCw4R0FBOEc7SUFDdkcsT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDWiwwREFBMEQsQ0FDNUQsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN6QixDQUFDO0lBRUQsbURBQW1EO0lBQzVDLE9BQU87UUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELG9EQUFvRDtJQUM3QyxPQUFPO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3pCLENBQUM7SUFFRCw2QkFBNkI7SUFDdEIsUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDOztnRkFyRVMsZ0JBQWdCO3dEQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCO3VGQUFoQixnQkFBZ0I7Y0FENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgdHlwZSB7IEJyYW5jaCB9IGZyb20gXCIuLi9jbGFzc2VzL0JyYW5jaFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgRHJhZ1N0YXRlID0gXCJpZGxlXCIgfCBcImRyYWdnaW5nXCIgfCBcImRyb3BwYWJsZVwiIHwgXCJjYXB0dXJlZFwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRHJhZ1N0YXRlU2VydmljZSB7XHJcbiAgIC8qKiBwdXNoZXMgdGhlIG5ldyBzdGF0ZSB3aGVuZXZlciB0aGUgc3RhdGUgY2hhbmdlcyAqL1xyXG4gICBwdWJsaWMgc3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8RHJhZ1N0YXRlPjtcclxuXHJcbiAgIC8qKiBob2xkcyB0aGUgdGhpbmcgYmVpbmcgZHJhZ2dlZCwgaWYgYW55ICovXHJcbiAgIHByaXZhdGUgX3RlbXBEYXRhOiBCcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIC8qKiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZHJhZyBwcm9jZXNzICovXHJcbiAgIHByaXZhdGUgc3RhdGU6IERyYWdTdGF0ZTtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJpZGxlXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEcmFnU3RhdGU+KHRoaXMuc3RhdGUpO1xyXG4gICB9XHJcblxyXG4gICAvKiogQ2FsbGVkIHRvIGluZGljYXRlIHRoYXQgc29tZXRoaW5nIGlzIGJlaW5nIGRyYWdnZWQuIFN0b3JlcyB0aGF0IHNvbWV0aGluZyBmb3IgbGF0ZXIuICovXHJcbiAgIHB1YmxpYyBkcmFnZ2luZyh2YWx1ZTogQnJhbmNoPGFueT4pIHtcclxuICAgICAgdGhpcy5fdGVtcERhdGEgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZHJhZ2dpbmdcIjtcclxuICAgICAgdGhpcy5zdGF0ZSQubmV4dCh0aGlzLnN0YXRlKTtcclxuICAgfVxyXG5cclxuICAgLyoqIENhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIGEgdmFsaWQgYWN0aXZlIGRyb3Agem9uZS4gRHJvcCBpcyBub3cgcG9zc2libGUuICovXHJcbiAgIHB1YmxpYyBkcm9wcGFibGUoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBcImRyYWdnaW5nXCIpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG9ubHkgY2FsbCBgZHJvcHBhYmxlYCB3aGVuIHN0YXRlIGlzIGBkcmFnZ2luZ2BcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZHJvcHBhYmxlXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyBsb25nZXIgYSB2YWxpZCBhY3RpdmUgZHJvcCB6b25lLiBEcm9wIGlzIG5vIGxvbmdlciBwb3NzaWJsZS4gKi9cclxuICAgcHVibGljIG5vdERyb3BwYWJsZSgpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFwiZHJvcHBhYmxlXCIpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBcIkNhbiBvbmx5IGNhbGwgYG5vdERyb3BwYWJsZWAgd2hlbiBzdGF0ZSBpcyBgZHJvcHBhYmxlYFwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZHJhZ2dpbmdcIjtcclxuICAgICAgdGhpcy5zdGF0ZSQubmV4dCh0aGlzLnN0YXRlKTtcclxuICAgfVxyXG5cclxuICAgLyoqIENhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IGEgZHJvcCBpbnRvIGEgdmFsaWQgZHJvcCB6b25lIGhhcyBvY2N1cnJlZC4gUmV0dXJucyB0aGUgaXRlbSB0aGF0IHdhcyBkcm9wcGVkLiAgKi9cclxuICAgcHVibGljIGNhcHR1cmUoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBcImRyb3BwYWJsZVwiKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgXCJDYW4gb25seSBtb3ZlIHRvIGBjYXB0dXJlZGAgc3RhdGUgZnJvbSBgZHJvcHBhYmxlYCBzdGF0ZVwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiY2FwdHVyZWRcIjtcclxuICAgICAgdGhpcy5zdGF0ZSQubmV4dCh0aGlzLnN0YXRlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3RlbXBEYXRhO1xyXG4gICB9XHJcblxyXG4gICAvKiogQ2FsbGVkIHRvIHJlc2V0IHRoZSBzZXJ2aWNlIGZvciBmdXR1cmUgZHJhZ3MgKi9cclxuICAgcHVibGljIHJlbGVhc2UoKSB7XHJcbiAgICAgIHRoaXMuX3RlbXBEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJpZGxlXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUkLm5leHQodGhpcy5zdGF0ZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBnZXRzIHRoZSBjdXJyZW50IHRoaW5nIGJlaW5nIGRyYWdnZWQsIGlmIGFueS4gKi9cclxuICAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90ZW1wRGF0YTtcclxuICAgfVxyXG5cclxuICAgLyoqIGdldHMgdGhlIGN1cnJlbnQgc3RhdGUgKi9cclxuICAgcHVibGljIGdldFN0YXRlKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZTtcclxuICAgfVxyXG59XHJcbiJdfQ==

@@ -1,12 +0,18 @@

import { BranchCoordinates } from "../Branch";
import { ChangeDetectorRef, OnDestroy, OnInit } from "@angular/core";
import { DropZone } from "../classes/DropZone";
import { DropZoneService } from "../limble-tree-root/drop-zone.service";
import * as i0 from "@angular/core";
export declare class DropZoneComponent {
export declare class DropZoneComponent implements OnInit, OnDestroy {
private readonly dropZoneService;
private readonly changeDetectorRef;
dropZone: DropZone | undefined;
private commSubscription;
visible: boolean;
active: boolean;
coordinates: BranchCoordinates | undefined;
constructor(dropZoneService: DropZoneService);
constructor(dropZoneService: DropZoneService, changeDetectorRef: ChangeDetectorRef);
dragenterHandler(): void;
ngOnInit(): void;
ngOnDestroy(): void;
static ɵfac: i0.ɵɵFactoryDef<DropZoneComponent, never>;
static ɵcmp: i0.ɵɵComponentDefWithMeta<DropZoneComponent, "drop-zone", never, { "active": "active"; "coordinates": "coordinates"; }, {}, never, never>;
static ɵcmp: i0.ɵɵComponentDefWithMeta<DropZoneComponent, "drop-zone", never, { "dropZone": "dropZone"; }, {}, never, never>;
}

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

import { AfterViewInit, ChangeDetectorRef, ViewContainerRef } from "@angular/core";
import { BehaviorSubject } from "rxjs";
import { AfterViewInit, ChangeDetectorRef } from "@angular/core";
import { TreeService } from "../limble-tree-root/tree.service";
import type { Branch } from "../Branch";
import type { Branch } from "../classes/Branch";
import { DropZone } from "../classes/DropZone";
import * as i0 from "@angular/core";

@@ -11,4 +11,4 @@ export declare class LimbleTreeBranchComponent implements AfterViewInit {

private host;
dropZoneInside: ViewContainerRef | undefined;
readonly dropZoneInside$: BehaviorSubject<ViewContainerRef | undefined>;
dropZoneInside: DropZone | undefined;
renderDropZoneInside: boolean;
readonly indent: number | undefined;

@@ -19,3 +19,3 @@ constructor(treeService: TreeService, changeDetectorRef: ChangeDetectorRef);

static ɵfac: i0.ɵɵFactoryDef<LimbleTreeBranchComponent, never>;
static ɵcmp: i0.ɵɵComponentDefWithMeta<LimbleTreeBranchComponent, "limble-tree-branch", never, { "branch": "branch"; }, { "dropZoneInside$": "dropZoneInside$"; }, never, never>;
static ɵcmp: i0.ɵɵComponentDefWithMeta<LimbleTreeBranchComponent, "limble-tree-branch", never, { "branch": "branch"; "dropZoneInside": "dropZoneInside"; "renderDropZoneInside": "renderDropZoneInside"; }, {}, never, never>;
}

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

import { AfterViewInit, ChangeDetectorRef } from "@angular/core";
import { AfterViewInit, ChangeDetectorRef, OnInit } from "@angular/core";
import { ComponentCreatorService } from "../singletons/component-creator.service";

@@ -6,6 +6,7 @@ import { DropZoneService } from "../limble-tree-root/drop-zone.service";

import { TreeService } from "../limble-tree-root/tree.service";
import { Branch } from "../Branch";
import { Branch } from "../classes/Branch";
import { GlobalEventsService } from "../singletons/global-events.service";
import { DropZone } from "../classes/DropZone";
import * as i0 from "@angular/core";
export declare class LimbleTreeNodeComponent implements AfterViewInit {
export declare class LimbleTreeNodeComponent implements OnInit, AfterViewInit {
private readonly componentCreatorService;

@@ -19,8 +20,12 @@ private readonly changeDetectorRef;

private nodeHost;
private dropZoneAbove;
private dropZoneBelow;
private dropZoneInside;
private children;
dropZoneAbove: DropZone | undefined;
renderDropZoneAbove: boolean;
dropZoneBelow: DropZone | undefined;
renderDropZoneBelow: boolean;
dropZoneInside: DropZone | undefined;
renderDropZoneInside: boolean;
readonly renderInnerBranch: Boolean;
private draggableDiv;
constructor(componentCreatorService: ComponentCreatorService, changeDetectorRef: ChangeDetectorRef, dragStateService: DragStateService, dropZoneService: DropZoneService, treeService: TreeService, globalEventsService: GlobalEventsService);
ngOnInit(): void;
ngAfterViewInit(): void;

@@ -30,5 +35,7 @@ dragstartHandler(event: DragEvent): void;

dragoverHandler(event: DragEvent): void;
private renderSelf;
private renderChildren;
private renderNode;
private registerDropZones;
private addDropZoneAbove;
private addDropZoneBelow;
private addDropZoneInside;
private checkForHandle;

@@ -35,0 +42,0 @@ static ɵfac: i0.ɵɵFactoryDef<LimbleTreeNodeComponent, never>;

@@ -1,11 +0,13 @@

import { ViewContainerRef } from "@angular/core";
import { Branch, BranchCoordinates } from "../Branch";
import { Branch } from "../classes/Branch";
import { DragStateService } from "../singletons/drag-state.service";
import type { ProcessedOptions } from "./tree.service";
import { ComponentCreatorService } from "../singletons/component-creator.service";
import { DropZone } from "../classes/DropZone";
import * as i0 from "@angular/core";
export interface DropZoneFamily {
/** The deepest member of the family */
founder: DropZone;
members: Array<DropZone>;
}
export declare class DropZoneService {
private readonly dragStateService;
private readonly componentCreatorService;
private readonly dropZoneStack;
private readonly dropZoneInventory;

@@ -16,16 +18,15 @@ private readonly dropZoneFamilies;

private tree;
private treeWithDropZones;
private treeOptions;
private tempFamilies;
constructor(dragStateService: DragStateService, componentCreatorService: ComponentCreatorService);
addDropZone(coordinates: BranchCoordinates, container: ViewContainerRef): void;
/** Clears the view of drop zones, but keeps all the drop zone information */
constructor(dragStateService: DragStateService);
addDropZone(newDropZone: DropZone): boolean;
/** hides all drop zones */
clear(): void;
getActiveDropZone(): DropZoneService["activeDropZone"];
init(tree: Branch<any>, treeOptions: ProcessedOptions): void;
/** clears the view of drop zones and deletes all the drop zone information
* EXCEPT for the dropZoneStack */
/** hides all drop zones and deletes all the family assignments */
reset(): void;
/** Sets the service back to the initial state: clears the view of drop zones,
* deletes all the drop zone information, and empties the dropZoneStack.
/**
* Restores the service to its initial state: hides all drop zones,
* deletes all the family assignments, and empties the dropZoneInventory.
*/

@@ -37,9 +38,10 @@ restart(): void;

*/
showDropZoneFamily(coordinates: BranchCoordinates, options?: {
showDropZoneFamily(
/** Note: this drop zone may not exist in the dropZoneInventory; we have to search the inventory based on its location */
dropZone: DropZone, options?: {
joinFamilies?: boolean;
activateLowestInsteadOfFounder?: boolean;
}): void;
swapActiveDropZone(newActiveDropZoneCoordinates: BranchCoordinates): void;
private addToTree;
private assignFamilies;
swapActiveDropZone(newActiveDropZone: DropZone): void;
assignFamilies(): void;
private setActiveDropZone;

@@ -46,0 +48,0 @@ private showDropZone;

@@ -5,3 +5,3 @@ import { Type, ViewContainerRef } from "@angular/core";

import { DropZoneService } from "./drop-zone.service";
import { Branch, BranchCoordinates } from "../Branch";
import { Branch, BranchCoordinates } from "../classes/Branch";
import * as i0 from "@angular/core";

@@ -8,0 +8,0 @@ /** An object describing a node of the tree */

import { BehaviorSubject } from "rxjs";
import type { Branch } from "../Branch";
import type { Branch } from "../classes/Branch";
import * as i0 from "@angular/core";

@@ -4,0 +4,0 @@ export declare type DragState = "idle" | "dragging" | "droppable" | "captured";

{
"name": "@limble/limble-tree",
"version": "0.9.2",
"version": "0.10.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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc