ggn-layout 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/LICENSE +15 -0
  3. package/README.md +17 -5
  4. package/THIRD_PARTY_NOTICES.md +35 -3
  5. package/dist/{algorithms-CNhihjzf.js → algorithms-JOaPA3B9.js} +11 -0
  6. package/dist/{algorithms-DXUI06fi.cjs → algorithms-X6GKNYEw.cjs} +11 -0
  7. package/dist/api/index.cjs +12 -1
  8. package/dist/api/index.d.cts +14 -3
  9. package/dist/api/index.d.ts +14 -3
  10. package/dist/api/index.js +12 -1
  11. package/dist/api/layered.cjs +12 -1
  12. package/dist/api/layered.d.cts +13 -2
  13. package/dist/api/layered.d.ts +13 -2
  14. package/dist/api/layered.js +12 -1
  15. package/dist/{api-BRaDa6RG.js → api-D4FVITVw.js} +12 -1
  16. package/dist/{api-DWBi7ngO.cjs → api-DTHTxaol.cjs} +12 -1
  17. package/dist/{internal-BOuvVTiR.d.cts → core-DWo6Sbh9.d.ts} +13 -2
  18. package/dist/{internal-Coxrnk9C.d.ts → core-Or66h-Jn.d.cts} +13 -2
  19. package/dist/{internal.cjs → core.cjs} +12 -1
  20. package/dist/{internal.d.ts → core.d.cts} +14 -3
  21. package/dist/{internal.d.cts → core.d.ts} +14 -3
  22. package/dist/{internal.js → core.js} +12 -1
  23. package/dist/{elk-json-ibWtLFj2.d.cts → elk-json-BiUIDEHd.d.cts} +11 -0
  24. package/dist/{elk-json-ibWtLFj2.d.ts → elk-json-BiUIDEHd.d.ts} +11 -0
  25. package/dist/{elk-json-BtGnwuQE.cjs → elk-json-BqpJCr7A.cjs} +12 -1
  26. package/dist/{elk-json-B9eLYtu6.js → elk-json-Dm4r-Nqy.js} +12 -1
  27. package/dist/{index-C_0jvfEV.d.ts → index-DprqHh4K.d.ts} +13 -2
  28. package/dist/{index-Dl2hrLFA.d.cts → index-DwemPNSn.d.cts} +13 -2
  29. package/dist/index.cjs +12 -1
  30. package/dist/index.d.cts +16 -5
  31. package/dist/index.d.ts +16 -5
  32. package/dist/index.js +12 -1
  33. package/dist/layered-options-CWVVspE4.d.cts +17 -0
  34. package/dist/layered-options-vH0HCu1n.d.ts +17 -0
  35. package/dist/layout-worker.cjs +12 -1
  36. package/dist/layout-worker.d.cts +12 -1
  37. package/dist/layout-worker.d.ts +12 -1
  38. package/dist/layout-worker.js +12 -1
  39. package/dist/options.cjs +12 -1
  40. package/dist/options.d.cts +13 -2
  41. package/dist/options.d.ts +13 -2
  42. package/dist/options.js +12 -1
  43. package/dist/{validate-B9vX3T2G.d.ts → validate-YGFYSdxd.d.cts} +11 -0
  44. package/dist/{validate-B9vX3T2G.d.cts → validate-YGFYSdxd.d.ts} +11 -0
  45. package/docs/API.md +1 -1
  46. package/docs/reference/elk-algorithm-catalog.md +2 -2
  47. package/docs/reference/elk-algorithm-guide.md +4 -4
  48. package/docs/reference/elk-edge-routing-investigation.md +10 -13
  49. package/docs/reference/elk-json-format.md +1 -1
  50. package/docs/reference/elk-layout-options-mechanism.md +1 -1
  51. package/docs/reference/elk-layout-options.md +4 -4
  52. package/docs/reference/elk-node-labels.md +11 -8
  53. package/docs/reference/elk-spacing-options.md +1 -1
  54. package/docs/reference/elkjs-feature-coverage.md +2 -3
  55. package/package.json +18 -9
  56. package/dist/layered-options-COPhjoOB.d.ts +0 -6
  57. package/dist/layered-options-Dm7nJC1R.d.cts +0 -6
  58. /package/{src/api → schema}/layout-input.schema.json +0 -0
@@ -1 +1,12 @@
1
- import{$ as e,$n as t,$t as n,A as r,An as i,Ar as a,At as o,B as s,Bn as c,Bt as l,C as u,Cn as d,Cr as f,Ct as p,D as m,Dn as h,Dr as g,Dt as _,E as v,En as y,Er as b,Et as x,F as S,Fn as ee,Fr as C,Ft as te,G as ne,Gn as w,Gt as T,H as re,Hn as ie,Ht as ae,I as oe,In as se,Ir as ce,It as E,J as le,Jn as ue,Jt as de,K as fe,Kn as pe,Kt as me,L as he,Ln as ge,Lr as D,Lt as O,M as _e,Mn as ve,Mt as ye,N as be,Nn as xe,Nt as Se,O as Ce,On as we,Or as Te,Ot as Ee,P as De,Pn as Oe,Pt as ke,Q as Ae,Qn as k,Qt as je,R as Me,Rn as Ne,Rr as Pe,Rt as Fe,S as Ie,Sn as Le,Sr as A,St as Re,T as ze,Tn as Be,Tr as Ve,Tt as He,U as Ue,Un as j,Ur as We,Ut as Ge,V as Ke,Vn as qe,Vt as Je,W as Ye,Wn as Xe,Wt as Ze,X as Qe,Xn as $e,Xt as et,Y as tt,Yn as nt,Yt as rt,Z as it,Zn as at,Zt as ot,_ as st,_n as ct,_r as M,_t as N,a as lt,ai as ut,an as dt,ar as ft,at as pt,b as mt,bn as ht,br as P,bt as gt,c as _t,cn as vt,cr as F,ct as yt,d as bt,dn as xt,dr as St,dt as Ct,en as wt,er as Tt,et as Et,f as Dt,fn as Ot,ft as kt,g as At,gn as jt,gr as Mt,gt as Nt,h as Pt,hn as Ft,hr as It,ht as Lt,i as Rt,ii as zt,in as Bt,ir as I,it as Vt,j as Ht,jn as Ut,jr as Wt,jt as Gt,k as Kt,kn as qt,kr as Jt,kt as Yt,l as Xt,ln as Zt,lr as L,lt as Qt,m as $t,mn as en,mr as tn,mt as nn,n as rn,nn as an,nr as on,nt as R,o as sn,on as cn,or as ln,ot as un,p as z,pn as dn,pr as fn,pt as pn,q as mn,qt as hn,r as gn,rn as _n,rr as B,rt as vn,s as yn,sn as bn,sr as xn,st as Sn,t as Cn,ti as wn,tn as Tn,tr as En,tt as Dn,u as On,un as kn,ur as An,ut as jn,v as Mn,vn as Nn,vr as Pn,vt as Fn,w as In,wn as Ln,wr as Rn,wt as zn,x as Bn,xn as Vn,xr as Hn,xt as Un,y as Wn,yn as Gn,yr as Kn,yt as qn,z as Jn,zt as Yn}from"./algorithms-CNhihjzf.js";const Xn=25214903917n,Zn=(1n<<48n)-1n,Qn=15525485;var $n=class{seed;constructor(e){this.seed=Number(e==null?(BigInt(Date.now()^Math.random()*4294967295)^Xn)&Zn:(BigInt(e)^Xn)&Zn)}next(e){let t=this.seed,n=t&16777215,r=Math.floor(t/16777216),i=n*Qn+11,a=Math.floor(i/16777216),o=r*Qn+n*1502+a;return this.seed=(o&16777215)*16777216+(i&16777215),Math.floor(this.seed/2**(48-e))}nextInt(e){if((e&-e)===e)return Math.floor(e*this.next(31)/2147483648);let t,n;do t=this.next(31),n=t%e;while(t-n+(e-1)<0);return n}nextBoolean(){return this.next(1)!==0}nextFloat(){return this.next(24)/16777216}nextLong(){let e=this.next(32),t=this.next(32),n=t>=2147483648?1n:0n,r=(BigInt(e)-n<<32n)+BigInt(t);return Number(r&281474976710655n)}nextDouble(){return(this.next(26)*134217728+this.next(27))/9007199254740992}setSeed(e){this.seed=Number((BigInt(e)^Xn)&Zn)}next31(){return this.next(31)}};const er=/* @__PURE__ */ new Map;function tr(e,t){er.set(e,t)}function nr(e){return er.get(e)}var rr=class extends zt{constructor(){super(),this.setProperty(w,/* @__PURE__ */ new Set)}id=0;size={x:0,y:0};padding={left:12,top:12,right:12,bottom:12};offset={x:0,y:0};layerlessNodes=[];layers=[];parentNode=null;direction=`UNDEFINED`;getSize(){return this.size}getPadding(){return this.padding}setPadding(e){this.padding={...this.padding,...e}}getActualSize(){return{x:this.size.x+this.padding.left+this.padding.right,y:this.size.y+this.padding.top+this.padding.bottom}}getOffset(){return this.offset}getLayerlessNodes(){return this.layerlessNodes}getLayers(){return this.layers}getParentNode(){return this.parentNode}setParentNode(e){this.parentNode=e}getDirection(){return this.direction}setDirection(e){this.direction=e}toNodeArray(){return this.layers.map(e=>[...e.getNodes()])}getAllNodes(){let e=this.layerlessNodes.length;for(let t of this.layers)e+=t.getNodes().length;let t=Array(e),n=0;for(let e of this.layers)for(let r of e.getNodes())t[n++]=r;for(let e of this.layerlessNodes)t[n++]=e;return t}};let ir=0;var ar=class extends zt{id=ir++;getId(){return this.id}},or=class extends ar{position={x:0,y:0};size={x:0,y:0};getPosition(){return this.position}getSize(){return this.size}},V=class extends or{graph=null;layer=null;type=`NORMAL`;ports=[];labels=[];nestedGraph=null;margin={left:0,top:0,right:0,bottom:0};padding={left:0,top:0,right:0,bottom:0};layerConstraint=null;inLayerConstraint=null;edgeConstraint=null;portConstraints=null;constructor(e=null){super(),this.graph=e,e&&e.getLayerlessNodes().push(this)}getGraph(){return this.graph===null&&this.layer!==null?this.layer.getGraph():this.graph}setGraph(e){this.graph=e}getLayer(){return this.layer}setLayer(e){if(this.layer!==null){let e=this.layer.getNodes(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.layer=e,this.layer!==null&&this.layer.getNodes().push(this)}setLayerAt(e,t){if(this.layer!==null){let e=this.layer.getNodes(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.layer=t,t.getNodes().splice(e,0,this)}getType(){return this.type}setType(e){this.type=e}getPorts(e){if(e===void 0)return this.ports;if(typeof e==`string`&&(e===`NORTH`||e===`EAST`||e===`SOUTH`||e===`WEST`))return this.ports.filter(t=>t.getSide()===e);let t=e;return t===`INPUT`?this.ports.filter(e=>e.getIncomingEdges().length>0):t===`OUTPUT`?this.ports.filter(e=>e.getOutgoingEdges().length>0):[]}getPortSideView(e){return this.ports.filter(t=>t.getSide()===e)}setPorts(e){this.ports=e}getLabels(){return this.labels}setLabels(e){this.labels=e}getNestedGraph(){return this.nestedGraph}setNestedGraph(e){this.nestedGraph=e}getMargin(){return this.margin}getPadding(){return this.padding}getLayerConstraint(){if(this.layerConstraint!==null)return this.layerConstraint;let e=this.getProperty(`org.eclipse.elk.layered.layering.layerConstraint`);if(typeof e==`string`){let t=C[e];if(t!==void 0)return t}return null}setLayerConstraint(e){this.layerConstraint=e,this.setProperty(`org.eclipse.elk.layered.layering.layerConstraint`,e)}getInLayerConstraint(){return this.inLayerConstraint}setInLayerConstraint(e){this.inLayerConstraint=e}getEdgeConstraint(){return this.edgeConstraint}setEdgeConstraint(e){this.edgeConstraint=e}getPortConstraints(){return this.portConstraints}setPortConstraints(e){this.portConstraints=e}getIndex(){return this.layer===null?-1:this.layer.getNodes().indexOf(this)}getOutgoingEdges(){let e=0;for(let t of this.ports)e+=t.getOutgoingEdges().length;let t=Array(e),n=0;for(let e of this.ports)for(let r of e.getOutgoingEdges())t[n++]=r;return t}getIncomingEdges(){let e=0;for(let t of this.ports)e+=t.getIncomingEdges().length;let t=Array(e),n=0;for(let e of this.ports)for(let r of e.getIncomingEdges())t[n++]=r;return t}getConnectedEdges(){let e=[];for(let t of this.ports)e.push(...t.getIncomingEdges(),...t.getOutgoingEdges());return e}},H=class extends or{owner=null;side=`UNDEFINED`;explicitSide=!1;anchor={x:0,y:0};explicitlySuppliedPortAnchor=!1;incomingEdges=[];outgoingEdges=[];margin={left:0,top:0,right:0,bottom:0};labels=[];getNode(){return this.owner}setNode(e){if(this.owner!==null){let e=this.owner.getPorts(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.owner=e,this.owner!==null&&this.owner.getPorts().push(this)}getSide(){return this.side}setSide(e){this.applySideAndAnchor(e),this.explicitSide=!0}setSideInferred(e){this.applySideAndAnchor(e)}isExplicitSide(){return this.explicitSide}applySideAndAnchor(e){if(this.side=e,!this.explicitlySuppliedPortAnchor)switch(this.side){case`NORTH`:this.anchor.x=this.size.x/2,this.anchor.y=0;break;case`EAST`:this.anchor.x=this.size.x,this.anchor.y=this.size.y/2;break;case`SOUTH`:this.anchor.x=this.size.x/2,this.anchor.y=this.size.y;break;case`WEST`:this.anchor.x=0,this.anchor.y=this.size.y/2}}getAnchor(){return this.anchor}setAnchor(e){this.anchor.x=e.x,this.anchor.y=e.y}isExplicitlySuppliedPortAnchor(){return this.explicitlySuppliedPortAnchor}setExplicitlySuppliedPortAnchor(e){this.explicitlySuppliedPortAnchor=e}getAbsoluteAnchor(){let e=this.owner;return{x:e.position.x+this.position.x+this.anchor.x,y:e.position.y+this.position.y+this.anchor.y}}getIncomingEdges(){return this.incomingEdges}getOutgoingEdges(){return this.outgoingEdges}getConnectedEdges(){return[...this.incomingEdges,...this.outgoingEdges]}getConnectedPorts(){let e=[];for(let t of this.getConnectedEdges())e.push(this.otherEnd(t));return e}getPredecessorPorts(){return this.incomingEdges.map(e=>e.getSource()).filter(Boolean)}getSuccessorPorts(){return this.outgoingEdges.map(e=>e.getTarget()).filter(Boolean)}otherEnd(e){return e.getSource()===this?e.getTarget():e.getSource()}getDegree(){return this.incomingEdges.length+this.outgoingEdges.length}getNetFlow(){return this.incomingEdges.length-this.outgoingEdges.length}getMargin(){return this.margin}getLabels(){return this.labels}setLabels(e){this.labels=e}getIndex(){return this.owner===null?-1:this.owner.getPorts().indexOf(this)}},U=class extends ar{source=null;target=null;bendPoints=[];labels=[];getSource(){return this.source}setSource(e){if(this.source!==null){let e=this.source.getOutgoingEdges(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.source=e,this.source!==null&&this.source.getOutgoingEdges().push(this)}getTarget(){return this.target}setTarget(e){if(this.target!==null){let e=this.target.getIncomingEdges(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.target=e,this.target!==null&&this.target.getIncomingEdges().push(this)}setTargetAndInsertAtIndex(e,t){if(this.target!==null){let e=this.target.getIncomingEdges(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.target=e,this.target!==null&&this.target.getIncomingEdges().splice(t,0,this)}getBendPoints(){return this.bendPoints}getLabels(){return this.labels}isSelfLoop(){return this.source!==null&&this.target!==null&&this.source.getNode()!==null&&this.source.getNode()===this.target.getNode()}isInLayerEdge(){return this.source!==null&&this.target!==null&&!this.isSelfLoop()&&this.source.getNode().getLayer()===this.target.getNode().getLayer()}getOther(e){return this.source===e?this.target:this.target===e?this.source:null}getOtherNode(e){return this.source!==null&&this.source.getNode()===e?this.target?.getNode()??null:this.target!==null&&this.target.getNode()===e?this.source?.getNode()??null:null}reverse(e,t){this.setProperty(A,!this.getProperty(A));let n=this.source,r=this.target;this.setSource(r),this.setTarget(n),this.bendPoints.reverse();for(let e of this.labels)e.placement===`HEAD`?e.placement=`TAIL`:e.placement===`TAIL`&&(e.placement=`HEAD`)}},sr=class{indeg=[];outdeg=[];mark=[];sources=[];sinks=[];random=null;process(e,t){t.begin(`Greedy cycle removal`,1);let n=e.getLayerlessNodes(),r=n.length;this.indeg=Array(r).fill(0),this.outdeg=Array(r).fill(0),this.mark=Array(r).fill(0);let i=0;for(let t of n){t.setGraph(e),t.id=i;for(let e of t.getPorts()){for(let n of e.getIncomingEdges()){if(n.getSource()!==null&&n.getSource().getNode()===t)continue;let e=n.getProperty(Ge);this.indeg[i]+=e>0?e+1:1}for(let n of e.getOutgoingEdges()){if(n.getTarget()!==null&&n.getTarget().getNode()===t)continue;let e=n.getProperty(Ge);this.outdeg[i]+=e>0?e+1:1}}this.outdeg[i]===0?this.sinks.push(t):this.indeg[i]===0&&this.sources.push(t),i++}let a=-1,o=1,s=[];for(this.random=e.getProperty(P);r>0;){for(;this.sinks.length>0;){let e=this.sinks.shift();this.mark[n.indexOf(e)]=a--,this.updateNeighbors(e,n),r--}for(;this.sources.length>0;){let e=this.sources.shift();this.mark[n.indexOf(e)]=o++,this.updateNeighbors(e,n),r--}if(r>0){let e=-(2**53-1);for(let t=0;t<n.length;t++)if(this.mark[t]===0){let r=this.outdeg[t]-this.indeg[t];r>=e&&(r>e&&(s.length=0,e=r),s.push(n[t]))}let t=this.chooseNodeWithMaxOutflow(s);this.mark[n.indexOf(t)]=o++,this.updateNeighbors(t,n),r--}}let c=n.length+1;for(let e=0;e<n.length;e++)this.mark[e]<0&&(this.mark[e]+=c);for(let t of n)for(let r of[...t.getPorts()])for(let i of[...r.getOutgoingEdges()]){let r=n.indexOf(i.getTarget().getNode());this.mark[n.indexOf(t)]>this.mark[r]&&(i.reverse(e,!0),e.setProperty(ge,!0))}this.dispose(),t.done()}chooseNodeWithMaxOutflow(e){return e[this.random.nextInt(e.length)]}updateNeighbors(e,t){for(let n of e.getPorts())for(let r of n.getConnectedEdges()){let i=r.getSource()===n?r.getTarget():r.getSource();if(i===null)continue;let a=i.getNode();if(a===null||e===a)continue;let o=r.getProperty(Ge),s=o<0?0:o,c=t.indexOf(a);this.mark[c]===0&&(r.getTarget()===i?(this.indeg[c]-=s+1,this.indeg[c]<=0&&this.outdeg[c]>0&&this.sources.push(a)):(this.outdeg[c]-=s+1,this.outdeg[c]<=0&&this.indeg[c]>0&&this.sinks.push(a)))}}dispose(){this.indeg=[],this.outdeg=[],this.mark=[],this.sources=[],this.sinks=[]}};function cr(e){let t=e.getGraph()?.getProperty(Dn),n=e.getPosition();return t===`TOP_LEFT`?{x:n.x,y:n.y}:{x:n.x+e.getSize().x/2,y:n.y+e.getSize().y/2}}function lr(e){let t=[];for(let n of e.getLayerlessNodes()){n.id=1;let e=cr(n).x;for(let r of n.getPorts(`OUTPUT`))for(let i of r.getOutgoingEdges()){let r=i.getTarget()?.getNode();r!=null&&r!==n&&cr(r).x<e&&t.push(i)}}for(let n of t)n.reverse(e,!0);t.length=0;for(let n of e.getLayerlessNodes())n.id>0&&ur(n,t,e);for(let n of t)n.reverse(e,!0)}function ur(e,t,n){e.id=-1;for(let r of e.getPorts(`OUTPUT`))for(let i of r.getOutgoingEdges()){let r=i.getTarget()?.getNode();r!=null&&e!==r&&(r.id<0?t.push(i):r.id>0&&ur(r,t,n))}e.id=0}var dr=class{firstSeparateNodes=0;lastSeparateNodes=0;computeConstraintModelOrder(e,t){let n=0;switch(e.getProperty(Vt)){case`FIRST_SEPARATE`:n=2*-t+this.firstSeparateNodes,this.firstSeparateNodes++;break;case`FIRST`:n=-t;break;case`LAST`:n=t;break;case`LAST_SEPARATE`:n=2*t+this.lastSeparateNodes,this.lastSeparateNodes++}return e.hasProperty(F)&&(n+=e.getProperty(F)),n}computeConstraintGroupModelOrder(e,t,n){let r=0;switch(e.getProperty(Vt)){case`FIRST_SEPARATE`:r=2*-t+this.firstSeparateNodes,this.firstSeparateNodes++;break;case`FIRST`:r=-t;break;case`LAST`:r=t;break;case`LAST_SEPARATE`:r=2*t+this.lastSeparateNodes,this.lastSeparateNodes++}if(e.hasProperty(F)){let t=e.getProperty(In);if(t==null)throw TypeError(`Cannot invoke "java.lang.Integer.intValue()" because the return value of "org.eclipse.elk.alg.layered.graph.LGraph.getProperty(org.eclipse.elk.graph.properties.IProperty)" is null`);r+=t*n+e.getProperty(F)}return r}resetInternalCounters(){this.firstSeparateNodes=0,this.lastSeparateNodes=0}};function fr(e,t){t.begin(`Model order cycle breaking`,1);let n=[];if(!e.hasProperty(xn))throw TypeError(`NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "org.eclipse.elk.alg.layered.graph.LGraph.getProperty(org.eclipse.elk.graph.properties.IProperty)" is null`);let r=Math.max(e.getLayerlessNodes().length,e.getProperty(xn)),i=r*e.getProperty(Ut),a=e.getProperty(mt)===`ENFORCED`;for(let t of e.getLayerlessNodes()){let e=new dr,o=a?e.computeConstraintGroupModelOrder(t,i,r):e.computeConstraintModelOrder(t,r);for(let s of t.getPorts(`OUTPUT`))for(let t of s.getOutgoingEdges()){let s=t.getTarget().getNode();(a?e.computeConstraintGroupModelOrder(s,i,r):e.computeConstraintModelOrder(s,r))<o&&n.push(t)}}for(let t of n)t.reverse(e,!0),e.setProperty(ge,!0);t.done()}var pr=class extends sr{layeredGraph;process(e,t){this.layeredGraph=e,super.process(e,t)}chooseNodeWithMaxOutflow(e){let t=null,n=2**53-1,r=Math.max(this.layeredGraph.getLayerlessNodes().length,this.layeredGraph.getProperty(xn)),i=r*this.layeredGraph.getProperty(Ut),a=new dr,o=this.layeredGraph.getProperty(mt)===`ENFORCED`;for(let s of e)if(s.hasProperty(F)){let e=o?a.computeConstraintGroupModelOrder(s,i,r):a.computeConstraintModelOrder(s,r);n>e&&(n=e,t=s)}return t===null?e[this.layeredGraph.getProperty(P).nextInt(e.length)]:t}},mr=class{process(e){let t=this.handleOuterNodes(e);this.handleInnerNodes(e,t)}handleOuterNodes(e){let t=[];for(let n of e.getLayerlessNodes())this.handleLayerConstraintNode(e,n)||t.push(n);return t}handleInnerNodes(e,t){for(let n of t)if(this.handleLayerConstraintNode(e,n),D.isSideFixed(n.getProperty(O))&&n.getPorts().length>0){let t=!0;for(let e of n.getPorts()){let n=e.getSide(),r=e.getNetFlow();if(!(n===`EAST`&&r>0||n===`WEST`&&r<0)){t=!1;break}for(let n of e.getOutgoingEdges()){let e=n.getTarget()?.getNode()?.getLayerConstraint();if(e===`LAST`||e===`LAST_SEPARATE`){t=!1;break}}if(!t)break;for(let n of e.getIncomingEdges()){let e=n.getSource()?.getNode()?.getLayerConstraint();if(e===`FIRST`||e===`FIRST_SEPARATE`){t=!1;break}}if(!t)break}t&&this.reverseEdges(e,n,`NONE`,`UNDEFINED`)}}handleLayerConstraintNode(e,t){let n=t.getLayerConstraint(),r=null;switch(n){case`FIRST`:case`FIRST_SEPARATE`:r=`OUTGOING_ONLY`;break;case`LAST`:case`LAST_SEPARATE`:r=`INCOMING_ONLY`}return r!==null&&(t.setProperty(he,`OUTGOING_ONLY`),r===`INCOMING_ONLY`?this.reverseEdges(e,t,n,`INPUT`):this.reverseEdges(e,t,n,`OUTPUT`),!0)}reverseEdges(e,t,n,r){for(let i of[...t.getPorts()]){if(r===`INPUT`||r===`UNDEFINED`)for(let t of[...i.getOutgoingEdges()])this.canReverseOutgoingEdge(n,t)&&t.reverse(e,!0);if(r===`OUTPUT`||r===`UNDEFINED`)for(let t of[...i.getIncomingEdges()])this.canReverseIncomingEdge(n,t)&&t.reverse(e,!0)}}canReverseOutgoingEdge(e,t){if(t.getProperty(A))return!1;let n=t.getTarget()?.getNode();return!(n==null||e===`LAST`&&n.getType()===`LABEL`||n.getLayerConstraint()===`LAST_SEPARATE`)}canReverseIncomingEdge(e,t){if(t.getProperty(A))return!1;let n=t.getSource()?.getNode();return!(n==null||e===`FIRST`&&n.getType()===`LABEL`||n.getLayerConstraint()===`FIRST_SEPARATE`)}},hr=class{process(e){this.identifyHyperedges(e);for(let t of e.getLayers()){let e=t.getNodes();if(e.length===0)continue;let n=null,r=null;for(let t=0;t<e.length;t++){let i=e[t],a=i.getType();if(a===`LONG_EDGE`&&r===`LONG_EDGE`&&n!==null){let r=this.checkMergeAllowed(i,n);if(r.allowMerge){this.mergeNodes(i,n,r.sameSource,r.sameTarget),e.splice(t,1),t--;continue}}n=i,r=a}}}checkMergeAllowed(e,t){let n=e.getProperty(on),r=t.getProperty(on),i=e.getProperty(B),a=t.getProperty(B),o=e.getProperty(I),s=t.getProperty(I),c=i!=null&&i===a,l=o!=null&&o===s;if(!n&&!r)return{allowMerge:e.getPorts()[0]?.id===t.getPorts()[0]?.id,sameSource:c,sameTarget:l};let u=(!n||e.getProperty(En))&&(!r||t.getProperty(En)),d=(!n||!e.getProperty(En))&&(!r||!t.getProperty(En));return{allowMerge:c&&u||l&&d,sameSource:c,sameTarget:l}}mergeNodes(e,t,n,r){let i=t.getPorts(`WEST`)[0],a=t.getPorts(`EAST`)[0];for(let t of e.getPorts()){for(;t.getIncomingEdges().length>0;)t.getIncomingEdges()[0].setTarget(i);for(;t.getOutgoingEdges().length>0;)t.getOutgoingEdges()[0].setSource(a)}n||t.setProperty(B,null),r||t.setProperty(I,null)}identifyHyperedges(e){let t=[];for(let n of e.getLayers())for(let e of n.getNodes())t.push(...e.getPorts());for(let e of t)e.id=-1;let n=0;for(let e of t)e.id===-1&&this.dfs(e,n++)}dfs(e,t){e.id=t;for(let n of e.getConnectedPorts())n.id===-1&&this.dfs(n,t);if(e.getNode().getType()===`LONG_EDGE`)for(let n of e.getNode().getPorts())n!==e&&n.id===-1&&this.dfs(n,t)}},W=class{id=0;owner=null;size={x:0,y:0};nodes=[];constructor(e=null){this.owner=e}getGraph(){return this.owner}getSize(){return this.size}getNodes(){return this.nodes}getIndex(){return this.owner===null?-1:this.owner.getLayers().indexOf(this)}},gr=class{id=0;internalId=0;origin=null;type=``;layer=0;outgoingEdges=[];incomingEdges=[];allEdgesCache=null;treeNode=!1;unknownCutvalues=[];getOutgoingEdges(){return this.outgoingEdges}getIncomingEdges(){return this.incomingEdges}getConnectedEdges(){return this.allEdgesCache===null&&(this.allEdgesCache=[...this.incomingEdges,...this.outgoingEdges]),this.allEdgesCache}invalidateConnectedEdges(){this.allEdgesCache=null}},_r=class{node;constructor(){this.node=new gr}id(e){return this.node.id=e,this}origin(e){return this.node.origin=e,this}type(e){return this.node.type=e,this}create(e){return e.nodes.push(this.node),this.node}};function vr(){return new _r}var yr=class{id=0;internalId=0;origin=null;source;target;weight=0;delta=1;treeEdge=!1;getSource(){return this.source}getTarget(){return this.target}getOther(e){if(e===this.source)return this.target;if(e===this.target)return this.source;throw Error(`Node not part of edge`)}reverse(){let e=this.source;this.source=this.target,this.target=e;let t=this.target.getOutgoingEdges(),n=t.indexOf(this);n!==-1&&t.splice(n,1),this.target.getIncomingEdges().push(this);let r=this.source.getIncomingEdges(),i=r.indexOf(this);return i!==-1&&r.splice(i,1),this.source.getOutgoingEdges().push(this),this.source.invalidateConnectedEdges(),this.target.invalidateConnectedEdges(),this}},br=class{edge;constructor(){this.edge=new yr}id(e){return this.edge.id=e,this}origin(e){return this.edge.origin=e,this}weight(e){return this.edge.weight=e,this}delta(e){return this.edge.delta=e,this}source(e){return this.edge.source=e,this}target(e){return this.edge.target=e,this}create(){if(this.edge.source===void 0||this.edge.target===void 0)throw Error(`NEdge must have a source and target NNode specified.`);if(this.edge.source===this.edge.target)throw Error(`Network simplex does not support self-loops`);return this.edge.source.getOutgoingEdges().push(this.edge),this.edge.target.getIncomingEdges().push(this.edge),this.edge.source.invalidateConnectedEdges(),this.edge.target.invalidateConnectedEdges(),this.edge}};function G(){return new br}var xr=class{nodes=[];addNode(e){let t=new gr;return t.origin=e,this.nodes.push(t),t}addEdge(e,t,n,r,i){if(r===i)throw Error(`Network simplex does not support self-loops`);let a=new yr;return a.origin=e,a.weight=t,a.delta=n,a.source=r,a.target=i,a.source.getOutgoingEdges().push(a),a.target.getIncomingEdges().push(a),a.source.invalidateConnectedEdges(),a.target.invalidateConnectedEdges(),a}createArtificialRootAndConnect(e){let t=vr().create(this);for(let n of e)G().delta(0).weight(0).source(t).target(n).create();return t}findConCompRepresentatives(){let e=[],t=Array(this.nodes.length).fill(!1);for(let n of this.nodes)t[n.internalId]||(e.push(n),this.dfs(n,t));return e}dfs(e,t){if(!t[e.internalId]){t[e.internalId]=!0;for(let n of e.getConnectedEdges())this.dfs(n.getOther(e),t)}}makeConnected(){let e=0;for(let t of this.nodes)t.internalId=e++;let t=this.findConCompRepresentatives(),n=null;return t.length>1&&(n=this.createArtificialRootAndConnect(t)),n}isAcyclic(){let e=0;for(let t of this.nodes)t.internalId=e++;let t=Array(this.nodes.length).fill(0),n=Array(this.nodes.length).fill(0);for(let e of this.nodes)t[e.internalId]+=e.getIncomingEdges().length;let r=[];for(let e of this.nodes)e.getIncomingEdges().length===0&&r.push(e);if(r.length===0&&this.nodes.length>0)return!1;for(;r.length>0;){let e=r.shift();for(let i of e.getOutgoingEdges()){let a=i.getTarget();n[a.internalId]=Math.max(n[a.internalId],n[e.internalId]+1),t[a.internalId]--,t[a.internalId]===0&&r.push(a)}}for(let e of this.nodes)for(let t of e.getOutgoingEdges())if(n[t.target.internalId]<=n[t.source.internalId])return!1;return!0}},Sr=class e{graph;edges=[];treeEdges=/* @__PURE__ */ new Set;sources=[];edgeVisited=/* @__PURE__ */ new Uint8Array;postOrder=0;poID=[];lowestPoID=[];cutvalue=[];cutvalueLeafs=[];subtreeNodes=[];subtreeEdges=[];incidentCounts=[];topologicalRoots=[];spanIn=0;spanOut=0;previousLayeringNodeCounts=null;doBalance=!1;iterationLimit=2**53-1;constructor(){}static forGraph(t){let n=new e;return n.graph=t,n}prepare(e){return this.graph=e,this}withBalancing(e){return this.doBalance=e,this}withPreviousLayering(e){return this.previousLayeringNodeCounts=e,this}withIterationLimit(e){return this.iterationLimit=e,this}execute(){this.executeInternal(null)}executeWithMonitor(e){e.begin(`Network simplex`,1),this.executeInternal(e),e.done()}executeInternal(e){if(this.graph.nodes.length<1)return;for(let e of this.graph.nodes)e.layer=0;let t=this.graph.nodes.length>=40;t&&this.removeSubtrees(),this.initialize(),this.feasibleTree();let n=this.leaveEdge(),r=0;for(;n!==null&&r<this.iterationLimit;)this.exchange(n,this.enterEdge(n)),n=this.leaveEdge(),r++;t&&this.reattachSubtrees(),this.doBalance?this.balance(this.normalize()):this.normalize()}removeSubtrees(){this.subtreeNodes.length=0,this.subtreeEdges.length=0;let e=[];for(let t of this.graph.nodes)t.getConnectedEdges().length===1&&e.push(t);let t=0;for(;t<e.length;){let n=e[t++];if(n.getConnectedEdges().length===0)continue;let r=n.getConnectedEdges()[0],i=n.getOutgoingEdges().length>0,a=r.getOther(n);if(i){let e=a.getIncomingEdges().indexOf(r);e!==-1&&a.getIncomingEdges().splice(e,1)}else{let e=a.getOutgoingEdges().indexOf(r);e!==-1&&a.getOutgoingEdges().splice(e,1)}a.invalidateConnectedEdges(),a.getConnectedEdges().length===1&&e.push(a),this.subtreeNodes.push(n),this.subtreeEdges.push(r);let o=this.graph.nodes.indexOf(n);o!==-1&&this.graph.nodes.splice(o,1)}}reattachSubtrees(){for(;this.subtreeNodes.length>0;){let e=this.subtreeNodes.pop(),t=this.subtreeEdges.pop(),n=t.getOther(e);t.target===e?(n.getOutgoingEdges().push(t),e.layer=n.layer+t.delta):(n.getIncomingEdges().push(t),e.layer=n.layer-t.delta),n.invalidateConnectedEdges(),this.graph.nodes.push(e)}}initialize(){let e=this.graph.nodes.length;for(let e of this.graph.nodes)e.treeNode=!1;this.poID.length<e?this.poID=Array(e).fill(0):this.poID.fill(0),this.lowestPoID.length<e?this.lowestPoID=Array(e).fill(0):this.lowestPoID.fill(0),this.sources.length=0;let t=0;this.edges.length=0;for(let e of this.graph.nodes){e.internalId=t++,e.getIncomingEdges().length===0&&this.sources.push(e);let n=e.getOutgoingEdges();for(let e=0;e<n.length;e++)this.edges.push(n[e])}let n=0;for(let e of this.edges)e.internalId=n++,e.treeEdge=!1;let r=this.edges.length;this.cutvalue.length<r&&(this.cutvalue=Array(r).fill(0)),this.edgeVisited.length<r&&(this.edgeVisited=new Uint8Array(r)),this.edgeVisited.fill(0),this.treeEdges=/* @__PURE__ */ new Set,this.postOrder=1}feasibleTree(){if(this.layeringTopologicalNumbering(this.sources),this.edges.length>0){for(this.edgeVisited.fill(0);this.tightTreeDFS(this.graph.nodes[0])<this.graph.nodes.length;){let e=this.minimalSlack(),t=e.getTarget().layer-e.getSource().layer-e.delta;e.getTarget().treeNode&&(t=-t);for(let e of this.graph.nodes)e.treeNode&&(e.layer+=t);this.edgeVisited.fill(0)}this.edgeVisited.fill(0),this.postorderTraversal(this.graph.nodes[0]),this.cutvalues()}}layeringTopologicalNumbering(e){let t=this.graph.nodes.length;this.incidentCounts.length<t?this.incidentCounts=Array(t).fill(0):this.incidentCounts.fill(0);let n=this.incidentCounts;for(let e of this.graph.nodes)n[e.internalId]+=e.getIncomingEdges().length;this.topologicalRoots.length=0;let r=this.topologicalRoots;for(let t=0;t<e.length;t++)r.push(e[t]);let i=0;for(;i<r.length;){let e=r[i++];for(let t of e.getOutgoingEdges()){let i=t.getTarget();i.layer=Math.max(i.layer,e.layer+t.delta),n[i.internalId]--,n[i.internalId]===0&&r.push(i)}}}minimalSpan(e){let t=2**53-1,n=2**53-1,r,i=e.getIncomingEdges();for(let a=0;a<i.length;a++){let o=i[a];r=o.getTarget().layer-o.getSource().layer,o.getTarget()===e&&r<n?n=r:r<t&&(t=r)}let a=e.getOutgoingEdges();for(let i=0;i<a.length;i++){let o=a[i];r=o.getTarget().layer-o.getSource().layer,o.getTarget()===e&&r<n?n=r:r<t&&(t=r)}this.spanIn=n===2**53-1?-1:n,this.spanOut=t===2**53-1?-1:t}tightTreeDFS(e){let t=1;e.treeNode=!0;let n=e.getIncomingEdges();for(let r=0;r<n.length;r++){let i=n[r];if(!this.edgeVisited[i.internalId]){this.edgeVisited[i.internalId]=1;let n=i.getOther(e);i.treeEdge?t+=this.tightTreeDFS(n):!n.treeNode&&i.delta===i.getTarget().layer-i.getSource().layer&&(i.treeEdge=!0,this.treeEdges.add(i),t+=this.tightTreeDFS(n))}}let r=e.getOutgoingEdges();for(let n=0;n<r.length;n++){let i=r[n];if(!this.edgeVisited[i.internalId]){this.edgeVisited[i.internalId]=1;let n=i.getOther(e);i.treeEdge?t+=this.tightTreeDFS(n):!n.treeNode&&i.delta===i.getTarget().layer-i.getSource().layer&&(i.treeEdge=!0,this.treeEdges.add(i),t+=this.tightTreeDFS(n))}}return t}minimalSlack(){let e=2**53-1,t=null,n;for(let r of this.edges)r.getSource().treeNode!==r.getTarget().treeNode&&(n=r.getTarget().layer-r.getSource().layer-r.delta,n<e&&(e=n,t=r));return t}postorderTraversal(e){let t=2**53-1,n=e.getIncomingEdges();for(let r=0;r<n.length;r++){let i=n[r];if(i.treeEdge&&!this.edgeVisited[i.internalId]){this.edgeVisited[i.internalId]=1;let n=this.postorderTraversal(i.getOther(e));n<t&&(t=n)}}let r=e.getOutgoingEdges();for(let n=0;n<r.length;n++){let i=r[n];if(i.treeEdge&&!this.edgeVisited[i.internalId]){this.edgeVisited[i.internalId]=1;let n=this.postorderTraversal(i.getOther(e));n<t&&(t=n)}}this.poID[e.internalId]=this.postOrder;let i=this.postOrder;return this.lowestPoID[e.internalId]=t<i?t:i,this.postOrder=i+1,this.lowestPoID[e.internalId]}isInHead(e,t){let n=t.getSource(),r=t.getTarget();return this.lowestPoID[n.internalId]<=this.poID[e.internalId]&&this.poID[e.internalId]<=this.poID[n.internalId]&&this.lowestPoID[r.internalId]<=this.poID[e.internalId]&&this.poID[e.internalId]<=this.poID[r.internalId]?!(this.poID[n.internalId]<this.poID[r.internalId]):this.poID[n.internalId]<this.poID[r.internalId]}cutvalues(){let e=this.cutvalueLeafs;e.length=0;let t;for(let n of this.graph.nodes){t=0;let r=n.unknownCutvalues;r.length=0;let i=n.getIncomingEdges();for(let e=0;e<i.length;e++){let n=i[e];n.treeEdge&&(r.push(n),t++)}let a=n.getOutgoingEdges();for(let e=0;e<a.length;e++){let n=a[e];n.treeEdge&&(r.push(n),t++)}t===1&&e.push(n)}let n,r,i;for(let t=0;t<e.length;t++){let a=e[t];for(;a.unknownCutvalues.length===1;){n=a.unknownCutvalues[0],this.cutvalue[n.internalId]=n.weight,r=n.getSource(),i=n.getTarget();let e=a.getIncomingEdges(),t=a.getOutgoingEdges();for(let t=0;t<e.length;t++){let o=e[t];o!==n&&(o.treeEdge?r===o.getSource()||i===o.getTarget()?this.cutvalue[n.internalId]-=this.cutvalue[o.internalId]-o.weight:this.cutvalue[n.internalId]+=this.cutvalue[o.internalId]-o.weight:a===r?o.getSource()===a?this.cutvalue[n.internalId]+=o.weight:this.cutvalue[n.internalId]-=o.weight:o.getSource()===a?this.cutvalue[n.internalId]-=o.weight:this.cutvalue[n.internalId]+=o.weight)}for(let e=0;e<t.length;e++){let o=t[e];o!==n&&(o.treeEdge?r===o.getSource()||i===o.getTarget()?this.cutvalue[n.internalId]-=this.cutvalue[o.internalId]-o.weight:this.cutvalue[n.internalId]+=this.cutvalue[o.internalId]-o.weight:a===r?o.getSource()===a?this.cutvalue[n.internalId]+=o.weight:this.cutvalue[n.internalId]-=o.weight:o.getSource()===a?this.cutvalue[n.internalId]-=o.weight:this.cutvalue[n.internalId]+=o.weight)}let o=r.unknownCutvalues,s=o.indexOf(n);s!==-1&&(o[s]=o[o.length-1],o.pop());let c=i.unknownCutvalues,l=c.indexOf(n);l!==-1&&(c[l]=c[c.length-1],c.pop()),a=r===a?n.getTarget():n.getSource()}}}leaveEdge(){for(let e of this.treeEdges)if(e.treeEdge&&this.cutvalue[e.internalId]<-1e-10)return e;return null}enterEdge(e){if(!e.treeEdge)throw Error(`The input edge is not a tree edge.`);let t=null,n=2**53-1,r;for(let i of this.edges){let a=i.getSource(),o=i.getTarget();this.isInHead(a,e)&&!this.isInHead(o,e)&&(r=o.layer-a.layer-i.delta,r<n&&(n=r,t=i))}return t}exchange(e,t){if(!e.treeEdge)throw Error(`Given leave edge is no tree edge.`);if(t.treeEdge)throw Error(`Given enter edge is a tree edge already.`);e.treeEdge=!1,this.treeEdges.delete(e),t.treeEdge=!0,this.treeEdges.add(t);let n=t.getTarget().layer-t.getSource().layer-t.delta;this.isInHead(t.getTarget(),e)||(n=-n);for(let t of this.graph.nodes)this.isInHead(t,e)||(t.layer+=n);this.postOrder=1,this.edgeVisited.fill(0),this.postorderTraversal(this.graph.nodes[0]),this.cutvalues()}normalize(){let e=-(2**53-1),t=2**53-1;for(let n of this.graph.nodes)t=Math.min(t,n.layer),e=Math.max(e,n.layer);let n=Array(e-t+1).fill(0);for(let e of this.graph.nodes)e.layer-=t,n[e.layer]++;let r=0;if(this.previousLayeringNodeCounts!==null){for(let e of this.previousLayeringNodeCounts)if(n[r]+=e,r++,n.length===r)break}return n}balance(e){let t;for(let n of this.graph.nodes)if(n.getIncomingEdges().length===n.getOutgoingEdges().length){t=n.layer,this.minimalSpan(n);for(let r=n.layer-this.spanIn+1;r<n.layer+this.spanOut;r++)e[r]<e[t]&&(t=r);e[t]<e[n.layer]&&(e[n.layer]--,e[t]++,n.layer=t)}}},Cr=class e{layeredGraph=null;componentNodes=[];nodeVisited=[];componentIndex=null;static ITER_LIMIT_FACTOR=4;process(t,n){n.begin(`Network simplex layering`,1),this.layeredGraph=t;let r=t.getProperty(en)*e.ITER_LIMIT_FACTOR,i=t.getLayerlessNodes();if(i.length<1){n.done();return}let a=this.connectedComponents(i),o=null,s=null;for(let e of a){if(e.length===1&&e[0].getConnectedEdges().length===0){let n=t.getLayers();for(;n.length<=0;)n.push(new W(t));e[0].setLayer(n[0]);continue}let i=r*Math.floor(Math.sqrt(e.length)),c=this.initialize(e);s=s===null?Sr.forGraph(c):s.prepare(c),s.withIterationLimit(i).withPreviousLayering(o).withBalancing(!0).executeWithMonitor(n);let l=t.getLayers();for(let e of c.nodes){for(;l.length<=e.layer;)l.push(new W(t));e.origin.setLayer(l[e.layer])}if(a.length>1){o=Array(t.getLayers().length).fill(0);let e=0;for(let n of t.getLayers())o[e++]=n.getNodes().length}}i.length=0,this.dispose(),n.done()}connectedComponents(e){let t=[];this.nodeVisited=Array(e.length).fill(!1),this.componentNodes=[];let n=/* @__PURE__ */ new Map;for(let t=0;t<e.length;t++)n.set(e[t],t);this.componentIndex=n;for(let n of e)this.componentNodes=[],this.connectedComponentsDFS(n),this.componentNodes.length>0&&(t.length===0||t[0].length<this.componentNodes.length?t.unshift(this.componentNodes):t.push(this.componentNodes));return t}connectedComponentsDFS(e){let t=this.componentIndex.get(e);if(!(t===void 0||this.nodeVisited[t])){this.nodeVisited[t]=!0,this.componentNodes.push(e);for(let t of e.getPorts()){for(let e of t.getIncomingEdges())this.connectedComponentsDFS(this.getOpposite(t,e).getNode());for(let e of t.getOutgoingEdges())this.connectedComponentsDFS(this.getOpposite(t,e).getNode())}}}initialize(e){let t=/* @__PURE__ */ new Map,n=new xr;for(let r of e){let e=n.addNode(r);t.set(r,e)}for(let r of e)for(let e of r.getPorts())for(let r of e.getOutgoingEdges())r.isSelfLoop()||r.getSource()!==null&&r.getTarget()!==null&&n.addEdge(r,1*Math.max(1,r.getProperty(Ze)),1,t.get(r.getSource().getNode()),t.get(r.getTarget().getNode()));return n}dispose(){this.componentNodes=[],this.layeredGraph=null,this.nodeVisited=[],this.componentIndex=null}getOpposite(e,t){if(t.getSource()===e)return t.getTarget();if(t.getTarget()===e)return t.getSource();throw Error(`Input edge is not connected to the input port.`)}},wr=class{layeredGraph;nodeHeights=/* @__PURE__ */ new Map;process(e,t){t.begin(`Longest path layering`,1),this.layeredGraph=e;let n=e.getLayerlessNodes();this.nodeHeights=/* @__PURE__ */ new Map;for(let e of n)this.nodeHeights.set(e,-1);for(let e of n)this.visit(e);n.length=0,this.layeredGraph=null,this.nodeHeights=/* @__PURE__ */ new Map,t.done()}visit(e){let t=this.nodeHeights.get(e);if(t>=0)return t;let n=1;for(let t of e.getPorts())for(let r of t.getOutgoingEdges()){let t=r.getTarget().getNode();if(e!==t){let e=this.visit(t);n=Math.max(n,e+1)}}return this.putNode(e,n),n}putNode(e,t){let n=this.layeredGraph.getLayers();for(let e=n.length;e<t;e++)n.unshift(new W(this.layeredGraph));e.setLayer(n[n.length-t]),this.nodeHeights.set(e,t)}},Tr=class{layeredGraph;nodeHeights=/* @__PURE__ */ new Map;process(e,t){t.begin(`Longest path to source layering`,1),this.layeredGraph=e;let n=e.getLayerlessNodes();this.nodeHeights=/* @__PURE__ */ new Map;for(let e of n)this.nodeHeights.set(e,-1);for(let e of n)this.visit(e);n.length=0,this.layeredGraph=null,this.nodeHeights=/* @__PURE__ */ new Map,t.done()}visit(e){let t=this.nodeHeights.get(e);if(t!==void 0&&t>=0)return t;if(t===void 0)return 0;let n=1;for(let t of e.getPorts())for(let r of t.getIncomingEdges()){let t=r.getSource().getNode();if(e!==t){let e=this.visit(t);n=Math.max(n,e+1)}}return this.putNode(e,n),n}putNode(e,t){let n=this.layeredGraph.getLayers();for(let e=n.length;e<t;e++)n.push(new W(this.layeredGraph));e.setLayer(n[t-1]),this.nodeHeights.set(e,t)}};function Er(e){if(e.getLayers().length<=2)return;let t=e.getLayers();for(let n=0;n<t.length-1;n++){let r=t[n],i=t[n+1];for(let t of r.getNodes())for(let r of t.getPorts())for(let t of[...r.getOutgoingEdges()]){let r=t.getTarget().getNode().getLayer();r!==null&&r.getIndex()-n>1&&Or(t,Dr(e,i,t))}}}function Dr(e,t,n){let r=new V(e);return r.setType(`LONG_EDGE`),r.setProperty(L,n),r.setProperty(O,`FIXED_POS`),r.setLayer(t),r}function Or(e,t){let n=e.getTarget(),r=e.getProperty(Ye);r<0&&(r=0,e.setProperty(Ye,r)),t.size.y=r;let i=Math.floor(r/2),a=new H;a.setSide(`WEST`),a.setNode(t),a.getPosition().y=i;let o=new H;o.setSide(`EAST`),o.setNode(t),o.getPosition().y=i,e.setTarget(a);let s=new U;return s.copyProperties(e),s.setProperty(R,null),s.setSource(o),s.setTarget(n),kr(t,e,s),Ar(e,s),s}function kr(e,t,n){let r=t.getSource().getNode(),i=n.getTarget().getNode();r.getType()===`LONG_EDGE`?(e.setProperty(B,r.getProperty(B)),e.setProperty(I,r.getProperty(I)),e.setProperty(on,r.getProperty(on))):r.getType()===`LABEL`?(e.setProperty(B,r.getProperty(B)),e.setProperty(I,r.getProperty(I)),e.setProperty(on,!0)):i.getType()===`LABEL`?(e.setProperty(B,i.getProperty(B)),e.setProperty(I,i.getProperty(I)),e.setProperty(on,!0)):(e.setProperty(B,t.getSource()),e.setProperty(I,n.getTarget()))}function Ar(e,t){let n=[...e.getLabels()];for(let r of n)if(r.placement===`HEAD`){let n=e.getLabels().indexOf(r);n!==-1&&e.getLabels().splice(n,1),t.getLabels().push(r)}}function jr(e){return e.placement===void 0||e.placement===`CENTER`||e.placement===`UNDEFINED`}function Mr(e){let t=e.getProperty(Tn),n=e.getProperty(dt),r=e.getProperty(S)===`DOWN`||e.getProperty(S)===`UP`;for(let i of e.getLayerlessNodes())for(let a of[...i.getOutgoingEdges()]){if(!Nr(a))continue;let i=Pr(a),o=[],s=Fr(e,a,i,o).size,c=a.getLabels();for(let e=0;e<c.length;){let t=c[e];jr(t)?(r?(s.x+=t.size.x+n,s.y=Math.max(s.y,t.size.y)):(s.x=Math.max(s.x,t.size.x),s.y+=t.size.y+n),o.push(t),c.splice(e,1)):e++}r?(s.x-=n,s.y+=t+i):s.y+=t-n+i}}function Nr(e){return e.getSource().getNode()!==e.getTarget().getNode()&&e.getLabels().some(jr)}function Pr(e){let t=e.getProperty(Ye);return t<0&&(t=0,e.setProperty(Ye,t)),t}function Fr(e,t,n,r){let i=new V(e);return i.setType(`LABEL`),i.setProperty(L,t),i.setProperty(Hn,r),i.setProperty(O,`FIXED_POS`),i.setProperty(B,t.getSource()),i.setProperty(I,t.getTarget()),Or(t,i),i}const Ir=[`MEDIAN_LAYER`,`TAIL_LAYER`,`HEAD_LAYER`,`SPACE_EFFICIENT_LAYER`,`WIDEST_LAYER`,`CENTER_LAYER`];function Lr(e){return e===`WIDEST_LAYER`||e===`CENTER_LAYER`||e===`SPACE_EFFICIENT_LAYER`}function Rr(e){let t=e.getProperty(Me);zr(e);let n=Br(e,t),r=Array(e.getLayers().length).fill(0);for(let t of Ir)if(Lr(t)&&n.get(t).length>0){r=Vr(e);break}for(let e of Ir)Lr(e)||Ur(n.get(e),r);for(let e of Ir)Lr(e)&&Ur(n.get(e),r)}function zr(e){let t=0;for(let n of e.getLayers())n.id=t,t++}function Br(e,t){let n=/* @__PURE__ */ new Map;for(let e of Ir)n.set(e,[]);for(let r of e.getLayers())for(let e of r.getNodes())if(e.getType()===`LABEL`){let r=new ai(e,t);n.get(r.placementStrategy).push(r)}return n}function Vr(e){let t=Array(e.getLayers().length).fill(0);for(let n of e.getLayers())t[n.id]=Hr(n);return t}function Hr(e){let t=e.getGraph();if(t!==null&&(t.getProperty(S)===`DOWN`||t.getProperty(S)===`UP`))return 0;let n=0;for(let t of e.getNodes())t.getType()===`NORMAL`&&(n=Math.max(n,t.getSize().x));return n}function Ur(e,t){if(e.length!==0){if(e[0].placementStrategy===`SPACE_EFFICIENT_LAYER`)Zr(e,t);else for(let n of e){switch(n.placementStrategy){case`CENTER_LAYER`:ti(n,Gr(n,t),t);break;case`MEDIAN_LAYER`:ti(n,qr(n),t);break;case`WIDEST_LAYER`:ti(n,Wr(n,t),t);break;case`HEAD_LAYER`:Yr(n),ti(n,Jr(n,!0),t);break;case`TAIL_LAYER`:Yr(n),ti(n,Jr(n,!1),t)}ri(n)}}}function Wr(e,t){let n=e.leftmostLayerId;for(let r=n+1;r<=e.rightmostLayerId;r++)t[r]>t[n]&&(n=r);return n}function Gr(e,t){let n=Kr(e,t),r=n[n.length-1]/2;for(let t=0;t<n.length;t++)if(n[t]>=r)return e.leftmostLayerId+t;return e.leftmostLayerId+e.leftLongEdgeDummies.length}function Kr(e,t){let n=e.labelDummy.getGraph(),r=n.getProperty(_n)*2,i=n.getProperty(kn),a=Math.max(r,i),o=Array(e.totalDummyCount()),s=-a,c=0;for(let n of e.leftLongEdgeDummies)s+=t[n.getLayer().id]+a,o[c++]=s;s+=t[e.labelDummy.getLayer().id]+a,o[c++]=s;for(let n of e.rightLongEdgeDummies)s+=t[n.getLayer().id]+a,o[c++]=s;return o}function qr(e){let t=e.totalDummyCount(),n=Math.floor((t-1)/2);return e.leftmostLayerId+n}function Jr(e,t){let n=Xr(e);return t&&!n||!t&&n?e.rightmostLayerId:e.leftmostLayerId}function Yr(e){let t=e.placementStrategy===`HEAD_LAYER`,n=Xr(e);t&&!n||!t&&n?e.labelDummy.setProperty(z,`RIGHT`):e.labelDummy.setProperty(z,`LEFT`)}function Xr(e){let t=e.labelDummy.getIncomingEdges()[0],n=e.labelDummy.getOutgoingEdges()[0];return t.getProperty(A)||n.getProperty(A)}function Zr(e,t){let n=Qr(e,t);if(n.length===0)return;n.sort((e,t)=>t.labelDummy.getSize().x-e.labelDummy.getSize().x);let r=n.length;for(let e=0;e<r;e++)ti(n[e],ei(n,e,t),t)}function Qr(e,t){let n=[];for(let r of e)r.leftmostLayerId===r.rightmostLayerId?ti(r,r.leftmostLayerId,t):$r(r,t)||n.push(r);return n}function $r(e,t){let n=e.labelDummy.getSize().x,r=e.labelDummy.getGraph().getLayers().slice(e.leftmostLayerId,e.rightmostLayerId+1);for(let i of r)if(i.getSize().x>=n)return ti(e,i.id,t),!0;return!1}function ei(e,t,n){let r=e.length,i=e[t],a=i.labelDummy.getSize().x,o=i.leftmostLayerId,s=0;for(let c=i.leftmostLayerId;c<=i.rightmostLayerId;c++){if(a<=n[c])return c;let i=n[c],l=null;for(let n=t+1;n<r;n++){let t=e[n];t.leftmostLayerId<=c&&t.rightmostLayerId>=c&&(l=t)}l!==null&&(i=Math.max(i,l.labelDummy.getSize().x)),i>s&&(o=c,s=i)}return o}function ti(e,t,n){t!==e.leftmostLayerId+e.leftLongEdgeDummies.length&&ni(e.labelDummy,e.ithDummyNode(t-e.leftmostLayerId));let r=e.labelDummy.getLayer().id;n[r]=Math.max(n[r],e.labelDummy.getSize().x)}function ni(e,t){let n=e.getLayer(),r=t.getLayer(),i=n.getNodes().indexOf(e),a=r.getNodes().indexOf(t),o=e.getPorts(`INPUT`)[0],s=e.getPorts(`OUTPUT`)[0],c=t.getPorts(`INPUT`)[0],l=t.getPorts(`OUTPUT`)[0],u=[...o.getIncomingEdges()],d=[...s.getOutgoingEdges()],f=[...c.getIncomingEdges()],p=[...l.getOutgoingEdges()];e.setLayerAt(a,r);for(let e of f)e.setTarget(o);for(let e of p)e.setSource(s);t.setLayerAt(i,n);for(let e of u)e.setTarget(c);for(let e of d)e.setSource(l)}function ri(e){ii(e.labelDummy)}function ii(e){let t=e.getIncomingEdges()[0].getSource().getNode();for(;t.getType()===`LONG_EDGE`;)t.setProperty(En,!0),t=t.getIncomingEdges()[0].getSource().getNode()}var ai=class{labelDummy;placementStrategy;leftLongEdgeDummies=[];rightLongEdgeDummies=[];leftmostLayerId;rightmostLayerId;constructor(e,t){this.labelDummy=e,this.placementStrategy=t,this.gatherLeftLongEdgeDummies(),this.gatherRightLongEdgeDummies(),this.leftmostLayerId=this.leftLongEdgeDummies.length===0?e.getLayer().id:this.leftLongEdgeDummies[0].getLayer().id,this.rightmostLayerId=this.rightLongEdgeDummies.length===0?e.getLayer().id:this.rightLongEdgeDummies[this.rightLongEdgeDummies.length-1].getLayer().id;for(let t of e.getProperty(Hn)){let e=t.centerLabelPlacementStrategy;if(e!=null){this.placementStrategy=e;break}}}gatherLeftLongEdgeDummies(){let e=this.labelDummy;do e=e.getIncomingEdges()[0].getSource().getNode(),e.getType()===`LONG_EDGE`&&this.leftLongEdgeDummies.push(e);while(e.getType()===`LONG_EDGE`);this.leftLongEdgeDummies.reverse()}gatherRightLongEdgeDummies(){let e=this.labelDummy;do e=e.getOutgoingEdges()[0].getTarget().getNode(),e.getType()===`LONG_EDGE`&&this.rightLongEdgeDummies.push(e);while(e.getType()===`LONG_EDGE`)}totalDummyCount(){return this.rightmostLayerId-this.leftmostLayerId+1}ithDummyNode(e){return e<this.leftLongEdgeDummies.length?this.leftLongEdgeDummies[e]:e===this.leftLongEdgeDummies.length?this.labelDummy:this.rightLongEdgeDummies[e-this.leftLongEdgeDummies.length-1]}};function oi(e){let t=e.getProperty(Ft);for(let n of e.getLayers()){let e=n.getNodes();for(let n=e.length-1;n>=0;n--){let r=e[n];r.getType()===`LONG_EDGE`&&(si(r,t),e.splice(n,1))}}}function si(e,t){let n=e.getPorts(`WEST`)[0],r=e.getPorts(`EAST`)[0],i=n.getIncomingEdges(),a=r.getOutgoingEdges(),o=i.length,s=e.getPorts()[0].getAbsoluteAnchor();for(;o-->0;){let e=i[0],n=a[0],r=n.getTarget().getIncomingEdges().indexOf(n);e.setTargetAndInsertAtIndex(n.getTarget(),r),n.setSource(null),n.setTarget(null);let o=e.getBendPoints();t&&o.push({...s});for(let e of n.getBendPoints())o.push({...e});for(let t of n.getLabels())e.getLabels().push(t);let c=e.getProperty(R),l=n.getProperty(R);l!=null&&(c==null?e.setProperty(R,[...l]):c.push(...l))}}function ci(e){let t=e.getProperty(Tn),n=e.getProperty(dt),r=e.getProperty(S),i=r===`DOWN`||r===`UP`;for(let a of e.getLayers())for(let e=a.getNodes().length-1;e>=0;e--){let o=a.getNodes()[e];if(o.getType()!==`LABEL`)continue;let s=o.getProperty(L),c=s.getProperty(Ye),l=o.getProperty(Tt)===`BELOW`,u={...o.getPosition()};l&&(u.y+=c+t);let d={x:o.size.x,y:o.size.y-c-t},f=o.getProperty(Hn);if(i)li(f,u,n,d,l,r);else{let e=u.y;for(let t of f)t.position.x=u.x+(d.x-t.size.x)/2,t.position.y=e,e+=t.size.y+n}s.getLabels().push(...f),si(o,!1),a.getNodes().splice(e,1)}}function li(e,t,n,r,i,a){let o=a===`UP`?[...e].reverse():e;for(let e of o)e.position.x=t.x,i?e.position.y=t.y:e.position.y=t.y+r.y-e.size.y,t.x+=e.size.x+n}var ui=class{layerToNodes=/* @__PURE__ */ new Map;nodeToLayer=/* @__PURE__ */ new Map;put(e,t){let n=this.nodeToLayer.get(t);if(n!==void 0&&n!==e){let e=this.layerToNodes.get(n);if(e){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}}this.nodeToLayer.set(t,e);let r=this.layerToNodes.get(e);r||(r=[],this.layerToNodes.set(e,r)),r.includes(t)||r.push(t)}putAll(e,t){for(let n of t)this.put(e,n)}getValues(e){return this.layerToNodes.get(e)??[]}getKey(e){return this.nodeToLayer.get(e)}keys(){return[...this.layerToNodes.keys()]}isMaximalKey(e){return e===Math.max(...this.keys())}isMinimalKey(e){return e===Math.min(...this.keys())}},di=class{masterGraph;promotionStrategy=`NONE`;biLayerMap=new ui;process(e,t){switch(t.begin(`Node promotion heuristic`,1),this.masterGraph=e,this.promotionStrategy=e.getProperty(yt),this.promotionStrategy){case`MODEL_ORDER_LEFT_TO_RIGHT`:this.precalculateAndSetInformationModelOrder(),this.modelOrderNodePromotion(!0);break;case`MODEL_ORDER_RIGHT_TO_LEFT`:this.precalculateAndSetInformationModelOrder(),this.modelOrderNodePromotion(!1)}(this.promotionStrategy===`MODEL_ORDER_LEFT_TO_RIGHT`||this.promotionStrategy===`MODEL_ORDER_RIGHT_TO_LEFT`)&&this.setNewLayeringModelOrder(e),t.done()}precalculateAndSetInformationModelOrder(){this.biLayerMap=new ui;let e=0;for(let t of this.masterGraph.getLayers())t.id=e,e++;let t=this.promotionStrategy===`MODEL_ORDER_LEFT_TO_RIGHT`,n=(e,n)=>{if(!e.hasProperty(F)||!n.hasProperty(F))return 0;let r=e.getProperty(F),i=n.getProperty(F);return t?i-r:r-i};for(let e of this.masterGraph.getLayers())e.getNodes().sort(n),this.biLayerMap.putAll(e.id,e.getNodes())}modelOrderNodePromotion(e){let t;do{t=!1;let n=this.biLayerMap.keys();for(let r=e?n.length-2:1;e?r>=0:r<n.length;r+=e?-1:1){let n=this.biLayerMap.getValues(r);for(let i=0;i<n.length;i++){let a=n[i];if(!a.hasProperty(F)||this.biLayerMap.isMaximalKey(r)&&e||this.biLayerMap.isMinimalKey(r)&&!e)continue;let o=!0;for(let t of n)if(t.hasProperty(F)){let n=a.getProperty(F),r=t.getProperty(F);(e&&n<r||!e&&n>r)&&(o=!1)}if(!o)continue;let s=e?r+1:r-1,c=this.biLayerMap.getValues(s),l=!1,u=!0,d=!1;for(let t of c)if(t.hasProperty(F)){if(t!==a){let n=a.getProperty(F),r=t.getProperty(F);l||=e?r<n:r>n,u=!1}}else if(!l&&u&&t.getType()===`LABEL`){d=!0;let n=e?t.getIncomingEdges()[0].getSource().getNode():t.getOutgoingEdges()[0].getTarget().getNode();if(n===a){let r=e?t.getOutgoingEdges()[0].getTarget().getNode():t.getIncomingEdges()[0].getSource().getNode();(e?this.biLayerMap.getKey(r)-this.biLayerMap.getKey(n):this.biLayerMap.getKey(n)-this.biLayerMap.getKey(r))<=2&&(u=!1)}}if(d&&u){let t=e?a.getOutgoingEdges()[0].getTarget().getNode():a.getIncomingEdges()[0].getSource().getNode();(e?this.biLayerMap.getKey(t)-this.biLayerMap.getKey(a):this.biLayerMap.getKey(a)-this.biLayerMap.getKey(t))<=2&&t.getType()===`NORMAL`&&(u=!1)}if(l||u){let n=this.promoteNodeByModelOrder(a,e),r=new Set(n);for(;r.size>0;){let t=r.values().next().value;r.delete(t);for(let n of this.promoteNodeByModelOrder(t,e))r.add(n)}i--,t=!0}}}}while(t)}promoteNodeByModelOrder(e,t){let n=this.biLayerMap.getKey(e);this.biLayerMap.put(t?n+1:n-1,e);let r=/* @__PURE__ */ new Set;for(let n of t?e.getOutgoingEdges():e.getIncomingEdges()){let i=t?n.getTarget().getNode():n.getSource().getNode();this.biLayerMap.getKey(i)===this.biLayerMap.getKey(e)&&r.add(i)}return r}setNewLayeringModelOrder(e){let t=[];e.getLayers().length=0;let n=this.biLayerMap.keys().sort((e,t)=>e-t);for(let r of n){let n=this.biLayerMap.getValues(r);if(n.length>0){let i=new W(e);t.push(i),i.id=r;for(let e of n)e.setLayer(i)}}e.getLayers().push(...t)}},fi=class{binarySums;numsPerIndex;count=0;maxNum;constructor(e){this.maxNum=e,this.binarySums=new Int32Array(e+1),this.numsPerIndex=new Int32Array(e)}add(e){if(!Number.isInteger(e)||e<0||e>=this.numsPerIndex.length)throw RangeError(`BinaryIndexedTree.add(${e})`);this.count++,this.numsPerIndex[e]++;let t=e+1;for(;t<this.binarySums.length;)this.binarySums[t]++,t+=t&-t}rank(e){let t=e,n=0;for(;t>0;)n+=this.binarySums[t],t-=t&-t;return n}size(){return this.count}removeAll(e){if(!Number.isInteger(e)||e<0||e>=this.numsPerIndex.length)throw RangeError(`BinaryIndexedTree.removeAll(${e})`);let t=this.numsPerIndex[e];if(t===0)return;this.numsPerIndex[e]=0,this.count-=t;let n=e+1;for(;n<this.binarySums.length;)this.binarySums[n]-=t,n+=n&-n}reset(e){e===this.maxNum?(this.binarySums.fill(0),this.numsPerIndex.fill(0)):(this.maxNum=e,this.binarySums=new Int32Array(e+1),this.numsPerIndex=new Int32Array(e)),this.count=0}clear(){this.binarySums.fill(0),this.numsPerIndex.fill(0),this.count=0}isEmpty(){return this.count===0}};function pi(e,t){switch(t){case`EAST`:case`NORTH`:return e.getPortSideView(t);case`SOUTH`:case`WEST`:return[...e.getPortSideView(t)].reverse();default:return[]}}function mi(e,t){return{first:e,second:t}}var hi=class e{portPositions;indexTree=null;ends=[];nodeCardinalities=[];includedSet=/* @__PURE__ */ new Set;includedStamp=null;includedStampValue=0;scratchPortsCCW=[];scratchPortsInLayer=[];scratchPortsNS=[];scratchStackNS=[];nsTargets=[];nsDegrees=[];othersByPort=[];inLayerOthersByPort=[];betweenLayerDegreeByPort=[];static INDEXING_SIDE=`WEST`;static STACK_SIDE=`EAST`;constructor(e){this.portPositions=e}countCrossingsBetweenLayers(e,t){let n=this.initPortPositionsCounterClockwise(e,t);this.indexTree??=new fi(n.length),this.indexTree.reset(n.length);let r=this.includedSet;this.includedStamp??=new Uint32Array(this.portPositions.length);let i=++this.includedStampValue;i>=4294967296&&(this.includedStamp.fill(0),this.includedStampValue=1,i=1);for(let e of n)this.includedStamp[e.id]=i;return this.countCrossingsOnPorts(n,r)}countInLayerCrossingsOnSide(e,t){let n=this.initPortPositionsForInLayerCrossings(e,t);return this.countInLayerCrossingsOnPorts(n)}countNorthSouthPortCrossingsInLayer(e){let t=this.initPositionsForNorthSouthCounting(e);return this.indexTree??=new fi(t.length),this.indexTree.reset(t.length),this.countNorthSouthCrossingsOnPorts(t)}countCrossingsBetweenPortsInBothOrders(e,t){let n=this.connectedPortsSortedByPosition(e,t),r=this.countCrossingsOnPorts(n);this.indexTree.clear(),this.switchPorts(e,t),n.sort((e,t)=>this.positionOf(e)-this.positionOf(t));let i=this.countCrossingsOnPorts(n);return this.indexTree.clear(),this.switchPorts(t,e),mi(r,i)}countInLayerCrossingsBetweenNodesInBothOrders(e,t,n){let r=this.connectedInLayerPortsSortedByPosition(e,t,n),i=this.countInLayerCrossingsOnPorts(r);this.switchNodes(e,t,n),this.indexTree.clear(),r.sort((e,t)=>this.positionOf(e)-this.positionOf(t));let a=this.countInLayerCrossingsOnPorts(r);return this.switchNodes(t,e,n),this.indexTree.clear(),mi(i,a)}initForCountingBetween(e,t){let n=this.initPortPositionsCounterClockwise(e,t);this.indexTree??=new fi(n.length),this.indexTree.reset(n.length)}initPortPositionsForInLayerCrossings(e,t){let n=this.scratchPortsInLayer;return n.length=0,this.initPositions(e,n,t,!0,!0),this.indexTree??=new fi(n.length),this.indexTree.reset(n.length),n}switchPorts(e,t){let n=this.portPositions[e.id];this.portPositions[e.id]=this.portPositions[t.id],this.portPositions[t.id]=n}switchNodes(e,t,n){let r=pi(e,n);for(let e of r)this.portPositions[e.id]=this.positionOf(e)+this.nodeCardinalities[t.id];r=pi(t,n);for(let t of r)this.portPositions[t.id]=this.positionOf(t)-this.nodeCardinalities[e.id]}connectedPortsSortedByPosition(e,t){let n=/* @__PURE__ */ new Set;for(let r of[e,t]){n.add(r);for(let e of r.getIncomingEdges())this.isPortSelfLoop(e)||n.add(this.otherEndOf(e,r));for(let e of r.getOutgoingEdges())this.isPortSelfLoop(e)||n.add(this.otherEndOf(e,r))}return[...n].sort((e,t)=>this.positionOf(e)-this.positionOf(t))}connectedInLayerPortsSortedByPosition(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of[e,t])for(let e of pi(i,n)){for(let t of e.getIncomingEdges())t.isSelfLoop()||(r.add(e),this.isInLayer(t)&&r.add(this.otherEndOf(t,e)));for(let t of e.getOutgoingEdges())t.isSelfLoop()||(r.add(e),this.isInLayer(t)&&r.add(this.otherEndOf(t,e)))}return[...r].sort((e,t)=>this.positionOf(e)-this.positionOf(t))}getOthers(e){let t=this.othersByPort[e.id];if(t!==void 0)return t;let n=[],r=e.getIncomingEdges();for(let t=0;t<r.length;t++){let i=r[t];n.push(e===i.getSource()?i.getTarget():i.getSource())}let i=e.getOutgoingEdges();for(let t=0;t<i.length;t++){let r=i[t];n.push(e===r.getSource()?r.getTarget():r.getSource())}return this.othersByPort[e.id]=n,n}countCrossingsOnPorts(e,t){let n=0,r=this.indexTree,i=this.ends,a=this.portPositions,o=t===void 0?null:this.includedStamp,s=this.includedStampValue;for(let t of e){let e=a[t.id]??0;r.removeAll(e);let c=this.getOthers(t);for(let t=0;t<c.length;t++){let l=c[t];if(o!==null&&o[l.id]!==s)continue;let u=a[l.id]??0;u>e&&(n+=r.rank(u),i.push(u))}for(;i.length>0;)r.add(i.pop())}return n}getInLayerOthers(e){let t=this.inLayerOthersByPort[e.id];if(t!==void 0)return t;let n=[],r=0,i=e.getIncomingEdges();for(let t=0;t<i.length;t++){let a=i[t];a.getSource().getNode().getLayer()===a.getTarget().getNode().getLayer()?n.push(e===a.getSource()?a.getTarget():a.getSource()):r++}let a=e.getOutgoingEdges();for(let t=0;t<a.length;t++){let i=a[t];i.getSource().getNode().getLayer()===i.getTarget().getNode().getLayer()?n.push(e===i.getSource()?i.getTarget():i.getSource()):r++}return this.inLayerOthersByPort[e.id]=n,this.betweenLayerDegreeByPort[e.id]=r,n}countInLayerCrossingsOnPorts(e){let t=0,n=this.indexTree,r=this.ends,i=this.portPositions,a=n.numsPerIndex.length;for(let o of e){let e=i[o.id]??0;n.removeAll(e);let s=this.getInLayerOthers(o);for(let o=0;o<s.length;o++){let c=i[s[o].id]??0;c>e&&c<a&&(t+=n.rank(c),r.push(c))}for(t+=n.size()*this.betweenLayerDegreeByPort[o.id];r.length>0;)n.add(r.pop())}return t}countNorthSouthCrossingsOnPorts(e){let t=0,n=this.indexTree,r=this.ends,i=this.portPositions,a=this.nsTargets,o=this.nsDegrees;for(let s of e){let e=i[s.id]??0;switch(n.removeAll(e),a.length=0,o.length=0,s.getNode().getType()){case`NORMAL`:{let e=s.getProperty(M);if(e)for(let t of e.getPorts())a.push(t),o.push(t.getDegree());break}case`LONG_EDGE`:{let e=s.getNode().getPorts().find(e=>e!==s);e&&(a.push(e),o.push(e.getDegree()));break}case`NORTH_SOUTH_PORT`:{let e=s.getProperty(L);e&&(a.push(e),o.push(s.getDegree()));break}}for(let s=0;s<a.length;s++){let c=i[a[s].id]??0;c>e&&(t+=n.rank(c)*o[s],r.push(c))}for(;r.length>0;)n.add(r.pop())}return t}initPositions(e,t,n,r,i){let a=t.length;i&&this.nodeCardinalities.length<e.length&&(this.nodeCardinalities=Array(e.length));let o=n===`EAST`?r:!r;if(r)for(let r=0;r<e.length;r++){let s=e[r],c=s.getPorts(),l=0;if(o)for(let e=0;e<c.length;e++){let r=c[e];r.getSide()===n&&(this.portPositions[r.id]=a++,t.push(r),l++)}else for(let e=c.length-1;e>=0;e--){let r=c[e];r.getSide()===n&&(this.portPositions[r.id]=a++,t.push(r),l++)}i&&(this.nodeCardinalities[s.id]=l)}else for(let r=e.length-1;r>=0;r--){let s=e[r],c=s.getPorts(),l=0;if(o)for(let e=0;e<c.length;e++){let r=c[e];r.getSide()===n&&(this.portPositions[r.id]=a++,t.push(r),l++)}else for(let e=c.length-1;e>=0;e--){let r=c[e];r.getSide()===n&&(this.portPositions[r.id]=a++,t.push(r),l++)}i&&(this.nodeCardinalities[s.id]=l)}}initPortPositionsCounterClockwise(e,t){let n=this.scratchPortsCCW;return n.length=0,this.initPositions(e,n,`EAST`,!0,!1),this.initPositions(t,n,`WEST`,!1,!1),n}initPositionsForNorthSouthCounting(t){let n=this.scratchPortsNS;n.length=0;let r=this.scratchStackNS;r.length=0;let i=null,a=0;for(let o=0;o<t.length;++o){let s=t[o];switch(this.isLayoutUnitChanged(i,s)&&(a=this.emptyStack(r,n,e.STACK_SIDE,a)),s.hasProperty(at)&&(i=s.getProperty(at)),s.getType()){case`NORMAL`:for(let e of s.getPorts())e.getSide()===`NORTH`&&e.hasProperty(M)&&(this.portPositions[e.id]=a++,n.push(e));a=this.emptyStack(r,n,e.STACK_SIDE,a);for(let e of s.getPorts())e.getSide()===`SOUTH`&&e.hasProperty(M)&&(this.portPositions[e.id]=a++,n.push(e));break;case`NORTH_SOUTH_PORT`:{let t=this.firstPortOnSide(s,e.INDEXING_SIDE);t!==null&&(this.portPositions[t.id]=a++,n.push(t)),this.countPortsOnSide(s,e.STACK_SIDE)>0&&r.push(s);break}case`LONG_EDGE`:for(let e of s.getPorts())e.getSide()===`WEST`&&(this.portPositions[e.id]=a++,n.push(e));for(let e=0,t=this.countPortsOnSide(s,`EAST`);e<t;e++)r.push(s)}}return this.emptyStack(r,n,e.STACK_SIDE,a),n}emptyStack(e,t,n,r){let i=r;for(;e.length>0;){let r=e.pop(),a=this.firstPortOnSide(r,n);this.portPositions[a.id]=i++,t.push(a)}return i}getPorts(e,t,n){return t===`EAST`?n?e.getPortSideView(t):[...e.getPortSideView(t)].reverse():n?[...e.getPortSideView(t)].reverse():e.getPortSideView(t)}firstPortOnSide(e,t){let n=e.getPorts();for(let e=0;e<n.length;e++)if(n[e].getSide()===t)return n[e];return null}countPortsOnSide(e,t){let n=e.getPorts(),r=0;for(let e=0;e<n.length;e++)n[e].getSide()===t&&r++;return r}start(e,t){return t?0:e.length-1}end(e,t,n){return t?e<n.length:e>=0}step(e){return e?1:-1}isInLayer(e){return e.getSource().getNode().getLayer()===e.getTarget().getNode().getLayer()}positionOf(e){return this.portPositions[e.id]??0}otherEndOf(e,t){return t===e.getSource()?e.getTarget():e.getSource()}isPortSelfLoop(e){return e.getSource()===e.getTarget()}isLayoutUnitChanged(e,t){return e===null||e===t||!t.hasProperty(at)?!1:t.getProperty(at)!==e}};function gi(e,t){return e.getPortSideView(t).some(e=>e.hasProperty(M)||e.getConnectedEdges().length>0)}var _i=class{isCrossingMatrixFilled;crossingMatrix;inBetweenLayerCrossingCounter;direction;oneSided;constructor(e,t,n,r){this.direction=r,this.oneSided=e===1;let i=t[n];this.isCrossingMatrixFilled=Array.from({length:i.length},()=>Array(i.length).fill(!1)),this.crossingMatrix=Array.from({length:i.length},()=>Array(i.length).fill(0)),this.inBetweenLayerCrossingCounter=new yi(t,n)}getCrossingMatrixEntry(e,t){return this.isCrossingMatrixFilled[e.id][t.id]||(this.fillCrossingMatrix(e,t),this.isCrossingMatrixFilled[e.id][t.id]=!0,this.isCrossingMatrixFilled[t.id][e.id]=!0),this.crossingMatrix[e.id][t.id]}fillCrossingMatrix(e,t){this.oneSided?this.direction===1?this.inBetweenLayerCrossingCounter.countEasternEdgeCrossings(e,t):this.inBetweenLayerCrossingCounter.countWesternEdgeCrossings(e,t):this.inBetweenLayerCrossingCounter.countBothSideCrossings(e,t),this.crossingMatrix[e.id][t.id]=this.inBetweenLayerCrossingCounter.getUpperLowerCrossings(),this.crossingMatrix[t.id][e.id]=this.inBetweenLayerCrossingCounter.getLowerUpperCrossings()}},vi=class{upperLowerCrossings=0;lowerUpperCrossings=0;portPositions=/* @__PURE__ */ new Map;layer;constructor(e){this.layer=e,this.initializePortPositions()}initializePortPositions(){for(let e of this.layer)this.setPortIdsOn(e,`SOUTH`),this.setPortIdsOn(e,`NORTH`)}setPortIdsOn(e,t){let n=0;for(let r of pi(e,t))this.portPositions.set(r,n++)}countCrossings(e,t){this.upperLowerCrossings=0,this.lowerUpperCrossings=0,this.processIfTwoNorthSouthNodes(e,t),this.processIfNorthSouthLongEdgeDummyCrossing(e,t),this.processIfNormalNodeWithNSPortsAndLongEdgeDummy(e,t)}processIfTwoNorthSouthNodes(e,t){this.isNorthSouth(e)&&this.isNorthSouth(t)&&!this.haveDifferentOrigins(e,t)&&(this.isNorthOfNormalNode(e)?this.countCrossingsOfTwoNorthSouthDummies(e,t):this.countCrossingsOfTwoNorthSouthDummies(t,e))}countCrossingsOfTwoNorthSouthDummies(e,t){if(this.originPortPositionOf(e)>this.originPortPositionOf(t)){let n=t.getPortSideView(`EAST`);this.upperLowerCrossings=n.length===0?0:n[0].getDegree();let r=e.getPortSideView(`WEST`);this.lowerUpperCrossings=r.length===0?0:r[0].getDegree()}else{let n=t.getPortSideView(`WEST`);this.upperLowerCrossings=n.length===0?0:n[0].getDegree();let r=e.getPortSideView(`EAST`);this.lowerUpperCrossings=r.length===0?0:r[0].getDegree()}}processIfNorthSouthLongEdgeDummyCrossing(e,t){this.isNorthSouth(e)&&this.isLongEdgeDummy(t)?this.isNorthOfNormalNode(e)?this.upperLowerCrossings=1:this.lowerUpperCrossings=1:this.isNorthSouth(t)&&this.isLongEdgeDummy(e)&&(this.isNorthOfNormalNode(t)?this.lowerUpperCrossings=1:this.upperLowerCrossings=1)}processIfNormalNodeWithNSPortsAndLongEdgeDummy(e,t){this.isNormal(e)&&this.isLongEdgeDummy(t)&&(this.upperLowerCrossings=this.numberOfNorthSouthEdges(e,`SOUTH`),this.lowerUpperCrossings=this.numberOfNorthSouthEdges(e,`NORTH`)),this.isNormal(t)&&this.isLongEdgeDummy(e)&&(this.upperLowerCrossings=this.numberOfNorthSouthEdges(t,`NORTH`),this.lowerUpperCrossings=this.numberOfNorthSouthEdges(t,`SOUTH`))}numberOfNorthSouthEdges(e,t){let n=0;for(let r of e.getPortSideView(t))n+=+!!this.hasConnectedNorthSouthEdge(r);return n}hasConnectedNorthSouthEdge(e){return e.getProperty(M)!==null&&e.getProperty(M)!==void 0}haveDifferentOrigins(e,t){return this.originOf(e)!==this.originOf(t)}originPortPositionOf(e){return this.portPositions.get(this.originPortOf(e))}originPortOf(e){return e.getPorts()[0].getProperty(L)}isNorthOfNormalNode(e){return this.originPortOf(e).getSide()===`NORTH`}originOf(e){return e.getProperty(L)}isLongEdgeDummy(e){return e.getType()===`LONG_EDGE`}isNorthSouth(e){return e.getType()===`NORTH_SOUTH_PORT`}isNormal(e){return e.getType()===`NORMAL`}getUpperLowerCrossings(){return this.upperLowerCrossings}getLowerUpperCrossings(){return this.lowerUpperCrossings}},yi=class{currentNodeOrder;freeLayerIndex;upperLowerCrossings=0;lowerUpperCrossings=0;upperAdjacencies;lowerAdjacencies;portPositions=/* @__PURE__ */ new Map;easternAdjacencies=/* @__PURE__ */ new Map;westernAdjacencies=/* @__PURE__ */ new Map;constructor(e,t){this.currentNodeOrder=e,this.freeLayerIndex=t,this.setPortPositionsForNeighbouringLayers()}setPortPositionsForNeighbouringLayers(){this.freeLayerIndex>0&&this.setPortPositionsForLayer(this.freeLayerIndex-1,`EAST`),this.freeLayerIndex<this.currentNodeOrder.length-1&&this.setPortPositionsForLayer(this.freeLayerIndex+1,`WEST`)}setPortPositionsForLayer(e,t){let n=0;for(let r of this.currentNodeOrder[e])for(let e of pi(r,t))this.portPositions.set(e,n++)}countEasternEdgeCrossings(e,t){this.resetCrossingCount(),e!==t&&this.addEasternCrossings(e,t)}countWesternEdgeCrossings(e,t){this.resetCrossingCount(),e!==t&&this.addWesternCrossings(e,t)}countBothSideCrossings(e,t){this.resetCrossingCount(),e!==t&&(this.addWesternCrossings(e,t),this.addEasternCrossings(e,t))}resetCrossingCount(){this.upperLowerCrossings=0,this.lowerUpperCrossings=0}addEasternCrossings(e,t){this.upperAdjacencies=this.getAdjacencyFor(e,`EAST`,this.easternAdjacencies),this.lowerAdjacencies=this.getAdjacencyFor(t,`EAST`,this.easternAdjacencies),this.upperAdjacencies.size()!==0&&this.lowerAdjacencies.size()!==0&&this.countCrossingsByMergingAdjacencyLists()}getAdjacencyFor(e,t,n){if(n.size===0)for(let e of this.currentNodeOrder[this.freeLayerIndex])n.set(e,new bi(e,t,this.portPositions));let r=n.get(e);return r.reset(),r}addWesternCrossings(e,t){this.upperAdjacencies=this.getAdjacencyFor(e,`WEST`,this.westernAdjacencies),this.lowerAdjacencies=this.getAdjacencyFor(t,`WEST`,this.westernAdjacencies),this.upperAdjacencies.size()!==0&&this.lowerAdjacencies.size()!==0&&this.countCrossingsByMergingAdjacencyLists()}countCrossingsByMergingAdjacencyLists(){for(;!this.upperAdjacencies.isEmpty()&&!this.lowerAdjacencies.isEmpty();)this.isBelow(this.upperAdjacencies.first(),this.lowerAdjacencies.first())?(this.upperLowerCrossings+=this.upperAdjacencies.size(),this.lowerAdjacencies.removeFirst()):this.isBelow(this.lowerAdjacencies.first(),this.upperAdjacencies.first())?(this.lowerUpperCrossings+=this.lowerAdjacencies.size(),this.upperAdjacencies.removeFirst()):(this.upperLowerCrossings+=this.upperAdjacencies.countAdjacenciesBelowNodeOfFirstPort(),this.lowerUpperCrossings+=this.lowerAdjacencies.countAdjacenciesBelowNodeOfFirstPort(),this.upperAdjacencies.removeFirst(),this.lowerAdjacencies.removeFirst())}isBelow(e,t){return e>t}getUpperLowerCrossings(){return this.upperLowerCrossings}getLowerUpperCrossings(){return this.lowerUpperCrossings}},bi=class{node;side;portPositions;adjacencyList=[];totalSize=0;currentSize=0;currentIndex=0;constructor(e,t,n){this.node=e,this.side=t,this.portPositions=n,this.getAdjacenciesSortedByPosition()}getAdjacenciesSortedByPosition(){this.iterateThroughEdgesCollectingAdjacencies(),this.adjacencyList.sort((e,t)=>e.position-t.position)}iterateThroughEdgesCollectingAdjacencies(){for(let e of pi(this.node,this.side)){let t=this.side===`WEST`?e.getIncomingEdges():e.getOutgoingEdges();for(let e of t)!e.isSelfLoop()&&!this.isInLayer(e)&&(this.addAdjacencyOf(e),this.totalSize++,this.currentSize++)}}isInLayer(e){return e.getSource().getNode().getLayer()===e.getTarget().getNode().getLayer()}addAdjacencyOf(e){let t=this.side===`WEST`?e.getSource():e.getTarget(),n=this.portPositions.get(t),r=this.adjacencyList.length-1;this.adjacencyList.length>0&&this.adjacencyList[r].position===n?(this.adjacencyList[r].cardinality++,this.adjacencyList[r].currentCardinality++):this.adjacencyList.push(new xi(n))}reset(){this.currentIndex=0,this.currentSize=this.totalSize,this.isEmpty()||this.currentAdjacency().reset()}countAdjacenciesBelowNodeOfFirstPort(){return this.currentSize-this.currentAdjacency().currentCardinality}removeFirst(){if(this.isEmpty())return;let e=this.currentAdjacency();e.currentCardinality===1?this.incrementCurrentIndex():e.currentCardinality--,this.currentSize--}incrementCurrentIndex(){this.currentIndex++,this.currentIndex<this.adjacencyList.length&&this.currentAdjacency().reset()}isEmpty(){return this.currentSize===0}first(){return this.currentAdjacency().position}size(){return this.currentSize}currentAdjacency(){return this.adjacencyList[this.currentIndex]}},xi=class{position;cardinality=1;currentCardinality=1;constructor(e){this.position=e}reset(){this.currentCardinality=this.cardinality}},Si=class{freeLayer;leftInLayerCounter;rightInLayerCounter;northSouthCounter;crossingMatrixFiller;graphData;parentCrossCounter=null;countCrossingsCausedByPortSwitch;constructor(e,t,n,r,i,a){if(this.crossingMatrixFiller=n,this.graphData=i,e>=t.length)throw Error(`Greedy SwitchDecider: Free layer not in graph.`);this.freeLayer=t[e],this.leftInLayerCounter=new hi(r),this.leftInLayerCounter.initPortPositionsForInLayerCrossings(this.freeLayer,`WEST`),this.rightInLayerCounter=new hi(r),this.rightInLayerCounter.initPortPositionsForInLayerCrossings(this.freeLayer,`EAST`),this.northSouthCounter=new vi(this.freeLayer),this.countCrossingsCausedByPortSwitch=!a&&i.hasParent&&!i.dontSweepInto()&&this.freeLayer[0].getType()===`EXTERNAL_PORT`,this.countCrossingsCausedByPortSwitch&&this.initParentCrossingsCounters(e,t.length)}initParentCrossingsCounters(e,t){let n=this.graphData.parentGraphData,r=n.currentNodeOrder,i=n.portPositions;this.parentCrossCounter=new hi(i);let a=this.graphData.parent.getLayer().id,o=a>0?r[a-1]:[],s=r[a],c=a<r.length-1?r[a+1]:[];e===t-1?this.parentCrossCounter.initForCountingBetween(s,c):this.parentCrossCounter.initForCountingBetween(o,s)}notifyOfSwitch(e,t){if(this.leftInLayerCounter.switchNodes(e,t,`WEST`),this.rightInLayerCounter.switchNodes(e,t,`EAST`),this.countCrossingsCausedByPortSwitch){let n=e.getProperty(L),r=t.getProperty(L);this.parentCrossCounter.switchPorts(n,r)}}doesSwitchReduceCrossings(e,t){if(this.constraintsPreventSwitch(e,t))return!1;let n=this.freeLayer[e],r=this.freeLayer[t],i=this.leftInLayerCounter.countInLayerCrossingsBetweenNodesInBothOrders(n,r,`WEST`),a=this.rightInLayerCounter.countInLayerCrossingsBetweenNodesInBothOrders(n,r,`EAST`);this.northSouthCounter.countCrossings(n,r);let o=this.crossingMatrixFiller.getCrossingMatrixEntry(n,r),s=this.crossingMatrixFiller.getCrossingMatrixEntry(r,n),c=o+i.first+a.first+this.northSouthCounter.getUpperLowerCrossings(),l=s+i.second+a.second+this.northSouthCounter.getLowerUpperCrossings();if(this.countCrossingsCausedByPortSwitch){let e=n.getProperty(L),t=r.getProperty(L),i=this.parentCrossCounter.countCrossingsBetweenPortsInBothOrders(e,t);c+=i.first,l+=i.second}return c>l}constraintsPreventSwitch(e,t){let n=this.freeLayer[e],r=this.freeLayer[t];return this.haveSuccessorConstraints(n,r)||this.haveLayoutUnitConstraints(n,r)||this.areNormalAndNorthSouthPortDummy(n,r)}haveSuccessorConstraints(e,t){let n=e.getProperty(k);return n!=null&&n.length!==0&&n.includes(t)}haveLayoutUnitConstraints(e,t){let n=e.getType()!==`LONG_EDGE`&&t.getType()!==`LONG_EDGE`,r=e.getProperty(at),i=t.getProperty(at),a=r!==i,o=this.partOfMultiNodeLayoutUnit(e,r)||this.partOfMultiNodeLayoutUnit(t,i),s=gi(e,`NORTH`),c=gi(t,`SOUTH`);return o=o||gi(e,`SOUTH`)||gi(t,`NORTH`),n&&(o&&a||s||c)}partOfMultiNodeLayoutUnit(e,t){return t!=null&&t!==e}areNormalAndNorthSouthPortDummy(e,t){return this.isNorthSouthPortNode(e)&&this.isNormalNode(t)||this.isNorthSouthPortNode(t)&&this.isNormalNode(e)}isNormalNode(e){return e.getType()===`NORMAL`}isNorthSouthPortNode(e){return e.getType()===`NORTH_SOUTH_PORT`}},Ci=class{greedySwitchType;graphData;currentNodeOrder;switchDecider;nPorts=0;portPositions=[];constructor(e,t){this.greedySwitchType=e,this.graphData=t}minimizeCrossings(e,t,n,r){return this.setUp(e,t,n),this.continueSwitchingUntilNoImprovementInLayer(t)}setFirstLayerOrder(e,t){let n=t?0:e.length-1;return this.setUp(e,n,t),this.sweepDownwardInLayer(n)}alwaysImproves(){return this.greedySwitchType!==1}isDeterministic(){return!0}initAtLayerLevel(){}initAtNodeLevel(e,t,n){n[e][t].id=t}initAtPortLevel(){this.nPorts++}initAtEdgeLevel(){}initAfterTraversal(){this.portPositions=Array(this.nPorts)}setUp(e,t,n){this.currentNodeOrder=e;let r=+!n,i=new _i(this.greedySwitchType,e,t,r);this.switchDecider=new Si(t,e,i,this.portPositions,this.graphData,this.greedySwitchType===1)}continueSwitchingUntilNoImprovementInLayer(e){let t=!1,n;do n=this.sweepDownwardInLayer(e),t||=n;while(n);return t}sweepDownwardInLayer(e){let t=this.currentNodeOrder[e],n=!1;for(let e=0;e<t.length-1;e++){if(!this.switchDecider.doesSwitchReduceCrossings(e,e+1))continue;this.switchDecider.notifyOfSwitch(t[e],t[e+1]);let r=t[e];t[e]=t[e+1],t[e+1]=r,n=!0}return n}},wi=class{skipInitAtLayerLevel=!0;skipInitAtPortLevel=!0;skipInitAtEdgeLevel=!0;crossingsCounter;hierarchicalCrossingsCounter;nPorts=0;portPositions=[];distributePortsWhileSweeping(e,t,n){let r=n?`WEST`:`EAST`;n&&t>0?this.crossingsCounter.initForCountingBetween(e[t-1],e[t]):!n&&t<e.length-1?this.crossingsCounter.initForCountingBetween(e[t],e[t+1]):this.crossingsCounter.initPortPositionsForInLayerCrossings(e[t],r);let i=!1;for(let a of e[t]){let e=a.getProperty(O);if(D.isOrderFixed(e))continue;let t=a.getNestedGraph(),o=a.getPortSideView(r).length>0&&t!==null;if(o){let e=t.toNodeArray();this.hierarchicalCrossingsCounter=new yi(e,n?0:e.length-1)}i=this.distributePortsOnNode(a,r,o)||i}return i}initAtLayerLevel(){}initAtNodeLevel(e,t,n){this.nPorts+=n[e][t].getPorts().length}initAtPortLevel(){}initAtEdgeLevel(){}initAfterTraversal(){this.portPositions=Array(this.nPorts),this.crossingsCounter=new hi(this.portPositions)}distributePortsOnNode(e,t,n){let r=e.getPortSideView(t);(t===`SOUTH`||t===`WEST`)&&(r=[...r].reverse());let i=!1,a;do{a=!1;for(let t=0;t<r.length-1;t++){let o=r[t],s=r[t+1];if(this.switchingDecreasesCrossings(o,s,n)){this.crossingsCounter.switchPorts(o,s),r[t]=s,r[t+1]=o;let n=e.getPorts(),c=n.indexOf(o),l=n.indexOf(s);c>=0&&l>=0&&(n[c]=s,n[l]=o),i=!0,a=!0}}}while(a);return i}switchingDecreasesCrossings(e,t,n){let r=this.crossingsCounter.countCrossingsBetweenPortsInBothOrders(e,t),i=r.first,a=r.second;if(n){let n=e.getProperty(M),r=t.getProperty(M);n!=null&&r!=null&&(this.hierarchicalCrossingsCounter.countBothSideCrossings(n,r),i+=this.hierarchicalCrossingsCounter.getUpperLowerCrossings(),a+=this.hierarchicalCrossingsCounter.getLowerUpperCrossings())}return i>a}};const Ti={NORTH:0,EAST:1,SOUTH:2,WEST:3};var Ei=class{skipInitAtEdgeLevel=!0;portRanks;minBarycenter=0;maxBarycenter=0;nodePositions;portBarycenter;inLayerPorts=[];nPorts=0;nodeLayerIndex=/* @__PURE__ */ new WeakMap;scratchPorts=[];portHasIncoming=[];portHasOutgoing=[];portDegrees=[];debugSortPorts=!1;debugPortRanks=!1;constructor(e){this.nodePositions=Array(e)}getPortRanks(){return this.portRanks}distributePortsWhileSweeping(e,t,n){this.debugSortPorts=!1,this.updateNodePositions(e,t);let r=e[t],i=n?`WEST`:`EAST`;if(this.isNotFirstLayer(e.length,t,n)){let a=e[n?t-1:t+1];this.calculatePortRanksForLayer(a,this.portTypeFor(n));for(let e of r)this.distributePorts(e,i);this.calculatePortRanksForLayer(r,this.portTypeFor(!n));for(let e of a)this.hasNestedGraph(e)||this.distributePorts(e,Pe.opposed(i))}else for(let e of r)this.distributePorts(e,i);return!1}calculatePortRanksForLayer(e,t){this.debugPortRanks=!1;let n=0,r=e.length;for(let i=0;i<r;i++){let r=e[i];n+=this.calculatePortRanks(r,r.getPorts(),n,t)}}distributePorts(e,t){if(typeof t==`string`){let n=t;D.isOrderFixed(e.getProperty(O))||(this.distributePorts(e,this.collectPortsOnSide(e,n)),this.distributePorts(e,this.collectPortsOnSide(e,`SOUTH`)),this.distributePorts(e,this.collectPortsOnSide(e,`NORTH`)),this.sortPorts(e));return}let n=t;this.inLayerPorts.length=0,this.iteratePortsAndCollectInLayerPorts(e,n),this.inLayerPorts.length>0&&this.calculateInLayerPortsBarycenterValues(e)}collectPortsOnSide(e,t){this.scratchPorts.length=0;let n=e.getPorts();for(let e=0;e<n.length;e++)n[e].getSide()===t&&this.scratchPorts.push(n[e]);return this.scratchPorts}iteratePortsAndCollectInLayerPorts(e,t){this.minBarycenter=0,this.maxBarycenter=0;let n=e.getLayer(),r=2*n.getNodes().length+1;for(let e=0;e<t.length;e++){let i=t[e],a=i.getSide()===`NORTH`||i.getSide()===`SOUTH`,o=0;if(a){let e=i.getProperty(M);if(e==null)continue;o+=this.dealWithNorthSouthPorts(r,i,e)}else{for(let e of i.getOutgoingEdges()){let t=e.getTarget();t.getNode().getLayer()===n?this.inLayerPorts.push(i):o+=this.portRanks[t.id]}for(let e of i.getIncomingEdges()){let t=e.getSource();t.getNode().getLayer()===n?this.inLayerPorts.push(i):o-=this.portRanks[t.id]}}let s=this.portDegrees[i.id]??i.getDegree();s>0?(this.portBarycenter[i.id]=o/s,this.minBarycenter=Math.min(this.minBarycenter,this.portBarycenter[i.id]),this.maxBarycenter=Math.max(this.maxBarycenter,this.portBarycenter[i.id])):a&&(this.portBarycenter[i.id]=o)}}calculateInLayerPortsBarycenterValues(e){let t=this.positionOf(e)+1,n=e.getLayer(),r=n.getNodes().length+1;for(let e of this.inLayerPorts){let i=0,a=0;for(let t of e.getIncomingEdges()){let e=t.getSource();e.getNode().getLayer()===n&&(i+=this.positionOf(e.getNode())+1,a++)}for(let t of e.getOutgoingEdges()){let e=t.getTarget();e.getNode().getLayer()===n&&(i+=this.positionOf(e.getNode())+1,a++)}let o=i/a,s=e.getSide();s===`EAST`?this.portBarycenter[e.id]=o<t?this.minBarycenter-o:this.maxBarycenter+(r-o):s===`WEST`&&(this.portBarycenter[e.id]=o<t?this.maxBarycenter+o:this.minBarycenter-(r-o))}}dealWithNorthSouthPorts(e,t,n){let r=!1,i=!1;for(let e of n.getPorts())e.getProperty(L)===t&&(e.getOutgoingEdges().length>0?i=!0:e.getIncomingEdges().length>0&&(r=!0));let a=0;return r&&!(r&&i)?a=t.getSide()===`NORTH`?-this.positionOf(n):e-this.positionOf(n):i&&!(r&&i)?a=this.positionOf(n)+1:r&&i&&(a=t.getSide()===`NORTH`?0:e/2),a}positionOf(e){return this.nodePositions[this.nodeLayerIndex.get(e)][e.id]}updateNodePositions(e,t){let n=e[t];if(n.length===0)return;let r=this.nodePositions[this.nodeLayerIndex.get(n[0])];for(let e=0;e<n.length;e++){let t=n[e];r[t.id]=e}}hasNestedGraph(e){return e.getNestedGraph()!==null}isNotFirstLayer(e,t,n){return n?t!==0:t!==e-1}portTypeFor(e){return e?`OUTPUT`:`INPUT`}sortPorts(e){if(this.debugSortPorts){let t=e.getPorts().map(e=>`${e.id}:${e.getSide()}(${this.portBarycenter[e.id]})`).join(` `);console.error(`GGN sortPorts L${e.getLayer().getIndex()} node=${e.id} before=[${t}]`)}e.getPorts().sort(this.portComparator),this.debugSortPorts&&console.error(`GGN sortPorts node=${e.id} after=[${e.getPorts().map(e=>e.id).join(` `)}]`)}portComparator=(e,t)=>{let n=Ti[e.getSide()]??0,r=Ti[t.getSide()]??0;if(n!==r)return n-r;let i=this.portBarycenter[e.id],a=this.portBarycenter[t.id];return i===0&&a===0?0:i===0?-1:a===0?1:i-a};initAtLayerLevel(e,t){this.nodePositions[e]=Array(t[e].length);let n=t[e];for(let t=0;t<n.length;t++)this.nodeLayerIndex.set(n[t],e)}initAtNodeLevel(e,t,n){let r=n[e][t];r.id=t,this.nodePositions[e][t]=t}initAtPortLevel(e,t,n,r){let i=r[e][t].getPorts()[n];i.id=this.nPorts++;let a=i.getIncomingEdges(),o=i.getOutgoingEdges();this.portHasIncoming[i.id]=+(a.length>0),this.portHasOutgoing[i.id]=+(o.length>0),this.portDegrees[i.id]=a.length+o.length}initAtEdgeLevel(){}initAfterTraversal(){this.portRanks=Array(this.nPorts).fill(0),this.portBarycenter=Array(this.nPorts).fill(0)}},Di=class extends Ei{constructor(e){super(e)}calculatePortRanks(e,t,n,r){let i=this.portRanks;if(r===`INPUT`){let r=0,a=0;for(let e=0;e<t.length;e++){let n=t[e],i=this.portHasIncoming[n.id];(i===1||i===void 0&&n.getIncomingEdges().length>0)&&(r++,n.getSide()===`NORTH`&&a++)}let o=n+a,s=n+r;for(let n=0;n<t.length;n++){let r=t[n],a=this.portHasIncoming[r.id];if(!(a===0||a===void 0&&r.getIncomingEdges().length===0)&&(r.getSide()===`NORTH`?(i[r.id]=o,o--):(i[r.id]=s,s--),this.debugPortRanks)){let t=r.getIncomingEdges(),n=t.length>0?`<-${t[0].getSource().getNode().id}`:``;console.error(`GGN rank INPUT node=${e.id} L${e.getLayer().getIndex()} port=${r.id} rank=${i[r.id]} conn=${n}`)}}return r}if(r===`OUTPUT`){let e=0;for(let r=0;r<t.length;r++){let a=t[r],o=this.portHasOutgoing[a.id];o===0||o===void 0&&a.getOutgoingEdges().length===0||(e++,i[a.id]=n+e)}return e}throw Error(`IllegalArgumentException`)}},Oi=class extends Ei{constructor(e){super(e)}calculatePortRanks(e,t,n,r){let i=this.portRanks;if(r===`INPUT`){let e=0,r=0;for(let n=0;n<t.length;n++){let i=t[n],a=this.portHasIncoming[i.id];(a===1||a===void 0&&i.getIncomingEdges().length>0)&&(e++,i.getSide()===`NORTH`&&r++)}let a=1/(e+1),o=n+r*a,s=n+1-a;for(let e=0;e<t.length;e++){let n=t[e],r=this.portHasIncoming[n.id];r===0||r===void 0&&n.getIncomingEdges().length===0||(n.getSide()===`NORTH`?(i[n.id]=o,o-=a):(i[n.id]=s,s-=a))}}else if(r===`OUTPUT`){let e=0;for(let n=0;n<t.length;n++){let r=t[n],i=this.portHasOutgoing[r.id];(i===1||i===void 0&&r.getOutgoingEdges().length>0)&&e++}let r=1/(e+1),a=n+r;for(let e=0;e<t.length;e++){let n=t[e],o=this.portHasOutgoing[n.id];o===0||o===void 0&&n.getOutgoingEdges().length===0||(i[n.id]=a,a+=r)}}else throw Error(`Port type is undefined`);return 1}};function ki(e,t,n){return e===2?new wi:t.nextBoolean()?new Oi(n.length):new Di(n.length)}var Ai=class{portPos;inInterlayerCache=null;outInterlayerEdges=null;hyperedgeGroupsByLayer=/* @__PURE__ */ new WeakMap;bounds=/* @__PURE__ */ new Int32Array;constructor(e,t,n){this.portPos=n}getOutInterlayerEdges(e,t){let n=this.outInterlayerEdges??=[],r=n[e.id];if(r===void 0){r=[];let i=e.getOutgoingEdges();for(let e=0;e<i.length;e++){let n=i[e];t!==n.getTarget().getNode().getLayer()&&r.push(n)}n[e.id]=r}return r}getIncomingInterlayerFlag(e,t){let n=this.inInterlayerCache??=new Uint8Array(this.portPos.length).fill(2),r=n[e.id];if(r!==2)return r;r=0;let i=e.getIncomingEdges();for(let e=0;e<i.length;e++)if(t!==i[e].getSource().getNode().getLayer()){r=1;break}return n[e.id]=r,r}buildHyperedgeGroups(e){let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Map,r=e=>{let n=e;for(;t.get(n)!==n;)n=t.get(n);let r=e;for(;t.get(r)!==r;){let e=t.get(r);t.set(r,n),r=e}return n},i=(e,n)=>{let i=r(e),a=r(n);i!==a&&t.set(a,i)};for(let r=0;r<e.length;r++){let a=e[r],o=a.getLayer(),s=a.getPorts();for(let e=0;e<s.length;e++){let r=s[e],a=this.getOutInterlayerEdges(r,o);if(a.length!==0){t.has(r.id)||(t.set(r.id,r.id),n.set(r.id,r));for(let e=0;e<a.length;e++){let o=a[e].getTarget();t.has(o.id)||(t.set(o.id,o.id),n.set(o.id,o)),i(r.id,o.id)}}}}let a=/* @__PURE__ */ new Map;for(let[e]of t){let t=r(e),i=a.get(t);i===void 0&&(i=[],a.set(t,i)),i.push(n.get(e))}return[...a.values()]}getHyperedgeGroups(e){let t=e[0].getLayer(),n=this.hyperedgeGroupsByLayer.get(t);return n===void 0&&(n=this.buildHyperedgeGroups(e),this.hyperedgeGroupsByLayer.set(t,n)),n}countCrossings(e,t){let n=this.getHyperedgeGroups(e),r=0;for(let t=0;t<e.length;t++){let n=e[t],i=n.getLayer(),a=n.getPorts();for(let e=0;e<a.length;e++){let t=a[e];this.getOutInterlayerEdges(t,i).length>0&&(this.portPos[t.id]=r++)}}let i=0;for(let e=0;e<t.length;e++){let n=t[e],r=n.getLayer(),a=0,o=n.getPorts();for(let e=0;e<o.length;e++){let t=o[e];if(t.getSide()!==`NORTH`)break;this.getIncomingInterlayerFlag(t,r)===1&&a++}let s=0;for(let e=o.length-1;e>=0;e--){let t=o[e];this.getIncomingInterlayerFlag(t,r)===1&&(t.getSide()===`NORTH`?(this.portPos[t.id]=i,i++):(this.portPos[t.id]=i+a+s,s++))}i+=s}let a=n.length;this.bounds.length<a*4&&(this.bounds=new Int32Array(a*4));let o=this.bounds,s=e[0].getLayer(),c=t[0].getLayer();for(let e=0;e<a;e++){let t=n[e],a=r,l=0,u=i,d=0;for(let e=0;e<t.length;e++){let n=t[e],r=this.portPos[n.id],i=n.getNode().getLayer();i===s?(r<a&&(a=r),r>l&&(l=r)):i===c&&(r<u&&(u=r),r>d&&(d=r))}let f=e*4;o[f]=a,o[f+1]=l,o[f+2]=u,o[f+3]=d}let l=0;for(let e=0;e<a;e++){let t=e*4,n=o[t],r=o[t+1],i=o[t+2],s=o[t+3];for(let t=e+1;t<a;t++){let e=t*4,a=o[e],c=o[e+1],u=o[e+2],d=o[e+3];(n<a&&i>u||a<n&&u>i)&&l++,((n>a?n:a)<(r<c?r:c)||n===r&&a<n&&n<c||a===c&&n<a&&a<r)&&l++,((i>u?i:u)<(s<d?s:d)||i===s&&u<i&&i<d||u===d&&i<u&&u<s)&&l++}}return l}};function ji(e,t){let n=[],r=[],i=[],a=[],o=[];for(let t=0;t<e.length;t++){let s=e[t];s.skipInitAtLayerLevel!==!0&&n.push(s),s.skipInitAtNodeLevel!==!0&&r.push(s),s.skipInitAtPortLevel!==!0&&i.push(s),s.skipInitAtEdgeLevel!==!0&&a.push(s),s.skipInitAfterTraversal!==!0&&o.push(s)}for(let e=0;e<t.length;e++){for(let r=0;r<n.length;r++)n[r].initAtLayerLevel(e,t);for(let n=0;n<t[e].length;n++){for(let i=0;i<r.length;i++)r[i].initAtNodeLevel(e,n,t);let o=t[e][n].getPorts();for(let r=0;r<o.length;r++){for(let a=0;a<i.length;a++)i[a].initAtPortLevel(e,n,r,t);let s=o[r],c=0,l=s.getIncomingEdges();for(let i=0;i<l.length;i++){let o=l[i];for(let i=0;i<a.length;i++)a[i].initAtEdgeLevel(e,n,r,c++,o,t)}let u=s.getOutgoingEdges();for(let i=0;i<u.length;i++){let o=u[i];for(let i=0;i<a.length;i++)a[i].initAtEdgeLevel(e,n,r,c++,o,t)}}}}for(let e=0;e<o.length;e++)o[e].initAfterTraversal()}var Mi=class{skipInitAtLayerLevel=!0;crossingCounter;hyperedgeCrossingsCounter;hasHyperEdgesEastOfIndex;inLayerEdgeCounts;hasNorthSouthPorts;nPorts=0;constructor(e){this.inLayerEdgeCounts=Array(e.length).fill(0),this.hasNorthSouthPorts=Array(e.length).fill(!1),this.hasHyperEdgesEastOfIndex=Array(e.length).fill(!1)}countAllCrossings(e){if(e.length===0)return 0;let t=this.crossingCounter.countInLayerCrossingsOnSide(e[0],`WEST`);t+=this.crossingCounter.countInLayerCrossingsOnSide(e[e.length-1],`EAST`);for(let n=0;n<e.length;n++)t+=this.countCrossingsAt(n,e);return t}countCrossingsAt(e,t){let n=0,r=t[e];if(e<t.length-1){let i=t[e+1];this.hasHyperEdgesEastOfIndex[e]?(n=this.hyperedgeCrossingsCounter.countCrossings(r,i),n+=this.crossingCounter.countInLayerCrossingsOnSide(r,`EAST`),n+=this.crossingCounter.countInLayerCrossingsOnSide(i,`WEST`)):n=this.crossingCounter.countCrossingsBetweenLayers(r,i)}return this.hasNorthSouthPorts[e]&&(n+=this.crossingCounter.countNorthSouthPortCrossingsInLayer(r)),n}initAtNodeLevel(e,t,n){let r=n[e][t];this.hasNorthSouthPorts[e]=this.hasNorthSouthPorts[e]||r.getType()===`NORTH_SOUTH_PORT`}initAtPortLevel(e,t,n,r){let i=r[e][t].getPorts()[n];i.id=this.nPorts++,i.getOutgoingEdges().length+i.getIncomingEdges().length>1&&(i.getSide()===`EAST`?this.hasHyperEdgesEastOfIndex[e]=!0:i.getSide()===`WEST`&&e>0&&(this.hasHyperEdgesEastOfIndex[e-1]=!0))}initAtEdgeLevel(e,t,n,r,i,a){let o=a[e][t].getPorts()[n];i.getSource()===o&&i.getSource().getNode().getLayer()===i.getTarget().getNode().getLayer()&&this.inLayerEdgeCounts[e]++}initAtLayerLevel(){}initAfterTraversal(){let e=Array(this.nPorts);this.hyperedgeCrossingsCounter=new Ai(this.inLayerEdgeCounts,this.hasNorthSouthPorts,e),this.crossingCounter=new hi(e)}};const Ni=()=>({connectedEdges:0,hierarchicalInfluence:0,randomInfluence:0});function Pi(e,t){e.hierarchicalInfluence+=t.hierarchicalInfluence,e.randomInfluence+=t.randomInfluence,e.connectedEdges+=t.connectedEdges}function Fi(e){let t=e.lGraph.getProperty(ee);if(zi(t)||!e.hasParent||Li(e)||Ri(e))return!0;if(e.crossMinDeterministic)return!1;let n=e.currentNodeOrder.map(e=>e.map(()=>Ni())),r=e=>n[e.getLayer().getIndex()][e.id],i=0,a=0,o=[];for(let t of e.currentNodeOrder){for(let e of t){if(e.getType()===`NORTH_SOUTH_PORT`){o.push(e);continue}let t=r(e);e.getType()===`EXTERNAL_PORT`?(t.hierarchicalInfluence=1,Hi(e)&&(a+=t.connectedEdges)):Vi(e)?t.randomInfluence=1:Bi(e)&&(i+=t.connectedEdges);for(let n of e.getOutgoingEdges())i+=t.randomInfluence,a+=t.hierarchicalInfluence,Ii(r,t,n);for(let n of[...e.getPortSideView(`NORTH`),...e.getPortSideView(`SOUTH`)]){let e=n.getProperty(M);if(e!=null){i+=t.randomInfluence,a+=t.hierarchicalInfluence;let n=r(e);Pi(n,t),n.connectedEdges++}}}for(let e of o){let t=r(e);for(let n of e.getOutgoingEdges())i+=t.randomInfluence,a+=t.hierarchicalInfluence,Ii(r,t,n)}o.length=0}let s=i+a;return(s===0?1/0:(i-a)/s)>=t}function Ii(e,t,n){let r=e(n.getTarget().getNode());Pi(r,t),r.connectedEdges++}function Li(e){return D.isOrderFixed(e.parent.getProperty(O))}function Ri(e){return e.parent.getPortSideView(`EAST`).length<2&&e.parent.getPortSideView(`WEST`).length<2}function zi(e){return e<-1}function Bi(e){let t=e.getPortSideView(`EAST`);return t.length===0||!t.some(e=>e.getConnectedEdges().length>0)}function Vi(e){let t=e.getPortSideView(`WEST`);return t.length===0||!t.some(e=>e.getConnectedEdges().length>0)}function Hi(e){return e.getProperty(L).getSide()===`EAST`}const Ui=[];var Wi=class{nodes;index=-1;barycenter=null;outgoing=null;incoming=null;incomingCount=0;summedWeight;degree;constructor(e,t){if(t!==void 0){let n=e,r=t;this.nodes=Array(n.nodes.length+r.nodes.length);let i=0;for(let e=0;e<n.nodes.length;e++)this.nodes[i++]=n.nodes[e];for(let e=0;e<r.nodes.length;e++)this.nodes[i++]=r.nodes[e];if(n.outgoing!==null){let e=[];for(let t=0;t<n.outgoing.length;t++){let i=n.outgoing[t];i!==r&&e.push(i)}if(r.outgoing!==null)for(let t=0;t<r.outgoing.length;t++){let i=r.outgoing[t];i!==n&&(e.includes(i)?i.incomingCount--:e.push(i))}this.outgoing=e}else if(r.outgoing!==null){let e=[];for(let t=0;t<r.outgoing.length;t++){let i=r.outgoing[t];i!==n&&e.push(i)}this.outgoing=e}this.summedWeight=n.summedWeight+r.summedWeight,this.degree=n.degree+r.degree}else this.nodes=[e],this.summedWeight=0,this.degree=0}getSummedWeight(){return this.summedWeight}getDegree(){return this.degree}getOutgoing(){return this.outgoing??=[],this.outgoing}getIncoming(){return this.incoming??=[],this.incoming}resetOutgoing(){this.outgoing=null}resetIncoming(){this.incoming=null}hasOutgoing(){return this.outgoing!==null&&this.outgoing.length>0}hasIncoming(){return this.incoming!==null&&this.incoming.length>0}getBarycenter(e){return e(this.nodes[0]).barycenter}},Gi=class{skipInitAtLayerLevel=!0;skipInitAtPortLevel=!0;skipInitAtEdgeLevel=!0;skipInitAfterTraversal=!0;barycenterStates;nodeState=/* @__PURE__ */ new WeakMap;groups=/* @__PURE__ */ new Map;layoutUnits=/* @__PURE__ */ new Map;constraintsBetweenNonDummies;scratchGroups=[];constructor(e){this.barycenterStates=e.map(e=>e.map(e=>{let t=new Ki(e);return this.nodeState.set(e,t),t})),this.constraintsBetweenNonDummies=e.length>0&&e[0].length>0&&e[0][0].getGraph().getProperty(t)}getBarycenterStates(){return this.barycenterStates}registerNodeState(e,t){this.nodeState.set(e,t)}initAtLayerLevel(e,t){}initAtNodeLevel(e,t,n){this.initNode(n[e][t],!0)}initNode(e,t){if(this.groups.set(e,new Wi(e)),t){let t=e.getProperty(at);if(t!==null){let n=this.layoutUnits.get(t);n===void 0?this.layoutUnits.set(t,[e]):n.push(e)}}}initAtPortLevel(){}initAtEdgeLevel(){}initAfterTraversal(){}stateOf(e){return this.nodeState.get(e)}processConstraints(e){if(this.constraintsBetweenNonDummies){this.processConstraintsStage(e,!0);for(let t of e)this.initNode(t,!1)}this.processConstraintsStage(e,!1)}processConstraintsStage(e,t){let n=this.scratchGroups;n.length=0;for(let t=0;t<e.length;t++)n.push(this.groups.get(e[t]));this.buildConstraintsGraph(n,t);let r=this.findViolatedConstraint(n);for(;r!==null;)this.handleViolatedConstraint(r[0],r[1],n),r=this.findViolatedConstraint(n);e.length=0;for(let t of n){let n=t.barycenter;for(let r of t.nodes)e.push(r),this.stateOf(r).barycenter=n}}buildConstraintsGraph(e,t){for(let t of e)t.resetOutgoing(),t.incomingCount=0;let n=null;for(let r of e){let e=r.nodes[0];if(!(t&&e.getType()!==`NORMAL`)){for(let n of e.getProperty(k)??Ui)if(!t||n.getType()===`NORMAL`){let t=this.groups.get(n);if(t===void 0){let t=n.getLayer(),r=e.getLayer();console.error(`GGN_FORSTER BUG: successor id=${n.id} label=${n.getLabels()[0]?.text??`?`} type=${n.getType()} layer=${t?.getIndex()??`UNDEF`} graphParent=${n.getGraph()?.getParentNode()?`nested`:`root`} | node id=${e.id} label=${e.getLabels()[0]?.text??`?`} type=${e.getType()} layer=${r?.getIndex()??`UNDEF`} graphParent=${e.getGraph()?.getParentNode()?`nested`:`root`} | graphNodeCount=${n.getGraph()?.getAllNodes().length}`);continue}r.getOutgoing().push(t),t.incomingCount++}if(!t&&e.getType()===`NORMAL`){if(n!==null){let t=this.layoutUnits.get(n)??Ui,r=this.layoutUnits.get(e)??Ui;for(let e of t)for(let t of r){let n=this.groups.get(e),r=this.groups.get(t);n.getOutgoing().push(r),r.incomingCount++}}n=e}}}}findViolatedConstraint(e){let t=e=>this.stateOf(e);for(let n=0;n<e.length;n++){let r=e[n];r.index=n,r.barycenter=t(r.nodes[0]).barycenter}let n=[];for(let t of e)t.resetIncoming(),t.hasOutgoing()&&t.incomingCount===0&&n.push(t);let r=0;for(;r<n.length;){let e=n[r++];if(e.hasIncoming()){let t=e.barycenter;for(let n of e.getIncoming()){let r=n.barycenter;if(r===t){if(n.index>e.index)return[n,e]}else if(r>t)return[n,e]}}for(let t of e.getOutgoing())t.getIncoming().unshift(e),t.incomingCount===t.getIncoming().length&&n.push(t)}return null}handleViolatedConstraint(e,t,n){let r=e=>this.stateOf(e),i=new Wi(e,t),a=e.barycenter,o=t.barycenter,s=null,c=e.getSummedWeight()+t.getSummedWeight(),l=e.getDegree()+t.getDegree();if(l>0?s=c/l:a!==null&&o!==null?s=(a+o)/2:a===null?o!==null&&(s=o):s=a,s!==null)for(let e of i.nodes)this.stateOf(e).barycenter=s;i.barycenter=s;let u=!1;for(let a=0;a<n.length;a++){let o=n[a];if(o===e||o===t)n.splice(a,1),a--;else if(!u&&(o.getBarycenter(r)??0)>(i.getBarycenter(r)??0))n.splice(a,0,i),u=!0;else if(o.hasOutgoing()){let n=o.getOutgoing(),r=!0,a=!0,s=!1;for(let i=0;i<n.length;){let o=n[i];r&&o===e?(n.splice(i,1),r=!1,s=!0):a&&o===t?(n.splice(i,1),a=!1,s=!0):i++}s&&(n.push(i),i.incomingCount++)}}u||n.push(i)}},Ki=class{node;summedWeight=0;degree=0;barycenter=null;visited=!1;visitedGeneration=-1;forwardAdjacency=[];backwardAdjacency=[];constructor(e){this.node=e}};const qi=.07;function Ji(e){return e.getAllProperties().get(`org.eclipse.elk.hierarchyHandling`)===`SEPARATE_CHILDREN`}function Yi(e){let t=e.getPorts();for(let e=0;e<t.length;e++){let n=t[e];if(n.getIncomingEdges().length>0||n.getOutgoingEdges().length>0)return!1}return!0}var Xi=class{skipInitAtPortLevel=!0;skipInitAtEdgeLevel=!0;portRanks;random;constraintResolver;barycenterState;portDistributor;barycenterSortStates=null;layerStates=/* @__PURE__ */ new WeakMap;debugBarycenter=!1;barycenterVisitGeneration=0;nextBarycenterScratch=[];barycenterAssociates=/* @__PURE__ */ new WeakMap;hasBarycenterAssociates=!1;separateBlackBoxes=/* @__PURE__ */ new WeakSet;hasSeparateBlackBoxes=!1;constructor(e,t,n,r){this.constraintResolver=e,this.random=t,this.portDistributor=n,this.barycenterState=e.getBarycenterStates();for(let e=0;e<r.length;e++){let t=r[e];for(let e=0;e<t.length;e++){let n=t[e],r=n.getProperty(we);r!=null&&r.length>0&&(this.barycenterAssociates.set(n,r),this.hasBarycenterAssociates=!0),Ji(n)&&(this.separateBlackBoxes.add(n),this.hasSeparateBlackBoxes=!0)}}}minimizeLayer(e,t,n,r){this.debugBarycenter=!1,n?this.randomizeBarycenters(e):(this.calculateBarycenters(e,r),this.fillInUnknownBarycenters(e,t)),e.length>1&&(this.barycenterSortStates=this.statesForLayer(e),e.sort(this.barycenterIndexStateComparator),this.barycenterSortStates=null,this.constraintResolver.processConstraints(e))}randomizeBarycenters(e){for(let t=0;t<e.length;t++){let n=e[t],r=this.hasSeparateBlackBoxes&&this.separateBlackBoxes.has(n)&&Yi(n)?Number.MAX_VALUE:this.random.nextDouble(),i=this.stateOf(n);i.barycenter=r,i.summedWeight=r,i.degree=1}}fillInUnknownBarycenters(e,t){if(e.length===0)return;let n=this.statesForLayer(e);if(this.hasSeparateBlackBoxes)for(let t=0;t<e.length;t++){let r=e[t],i=n[r.id];i.barycenter===null&&this.separateBlackBoxes.has(r)&&Yi(r)&&(i.barycenter=Number.MAX_VALUE,i.summedWeight=Number.MAX_VALUE,i.degree=1)}if(t){let t=this.nextBarycenterScratch;t.length=e.length;let r=null;for(let i=e.length-1;i>=0;i--){t[i]=r;let a=n[e[i].id].barycenter;a!==null&&(r=a)}let i=-1;for(let r=0;r<e.length;r++){let a=n[e[r].id],o=a.barycenter;if(o===null){let e=i+1,n=t[r];n!==null&&(e=n),o=(i+e)/2,a.barycenter=o,a.summedWeight=o,a.degree=1}i=o}}else{let t=0;for(let r=0;r<e.length;r++){let i=n[e[r].id].barycenter;i!==null&&(t=Math.max(t,i))}t+=2;for(let r=0;r<e.length;r++){let i=n[e[r].id];if(i.barycenter===null){let e=this.random.nextFloat()*t-1;i.barycenter=e,i.summedWeight=e,i.degree=1}}}}calculateBarycenters(e,t){if(e.length===0)return;let n=++this.barycenterVisitGeneration,r=this.statesForLayer(e);for(let i=0;i<e.length;i++)this.calculateBarycenter(e[i],t,n,r)}calculateBarycenter(e,t,n,r){let i=r[e.id];if(i.visitedGeneration===n)return;i.visitedGeneration=n,i.degree=0,i.summedWeight=0,i.barycenter=null;let a=e.getLayer(),o=t?i.forwardAdjacency:i.backwardAdjacency;for(let e=0;e<o.length;e++){let a=o[e];if(a>=0){let e=r[a].node,o=r[a];this.calculateBarycenter(e,t,n,r),i.degree+=o.degree,i.summedWeight+=o.summedWeight}else i.summedWeight+=this.portRanks[-a-1],i.degree++}if(this.hasBarycenterAssociates){let o=this.barycenterAssociates.get(e);if(o!==void 0)for(let e=0;e<o.length;e++){let s=o[e];if(s.getLayer()===a){let e=r[s.id];this.calculateBarycenter(s,t,n,r),i.degree+=e.degree,i.summedWeight+=e.summedWeight}}}if(i.degree>0){let t=this.random.nextFloat();if(i.summedWeight+=t*qi-qi/2,i.barycenter=i.summedWeight/i.degree,this.debugBarycenter){let t=e.getType().toString()===`NORMAL`?e.getLabels()[0]?.text??e.id:e.id,n=[];for(let t of e.getPorts()){for(let e of t.getSuccessorPorts()){let r=e.getNode(),i=r?.getType().toString()===`NORMAL`?r?.getLabels()[0]?.text??r?.id:r?.id;n.push(t.id+`->`+i+`:`+(this.portRanks[e.id]??`?`))}for(let e of t.getPredecessorPorts()){let r=e.getNode(),i=r?.getType().toString()===`NORMAL`?r?.getLabels()[0]?.text??r?.id:r?.id;n.push(i+`->`+t.id+`:`+(this.portRanks[e.id]??`?`))}}console.error(`GGN_BD ${t} L${e.getLayer()?.getIndex()} degree=${this.stateOf(e).degree} sw=${this.stateOf(e).summedWeight.toFixed(4)} bc=${this.stateOf(e).barycenter.toFixed(4)} [${n.join(` `)}]`)}}}statesForLayer(e){let t=e[0].getLayer();return this.layerStates.get(t)??this.barycenterState[t.getIndex()]}stateOf(e){return this.constraintResolver.stateOf(e)}barycenterIndexStateComparator=(e,t)=>{let n=this.barycenterSortStates,r=n[e.id],i=n[t.id];return r.barycenter!==null&&i.barycenter!==null?r.barycenter-i.barycenter:r.barycenter===null?i.barycenter===null?0:1:-1};barycenterStateComparator=(e,t)=>{let n=this.stateOf(e),r=this.stateOf(t);return n.barycenter!==null&&r.barycenter!==null?n.barycenter-r.barycenter:n.barycenter===null?r.barycenter===null?0:1:-1};minimizeCrossings(e,t,n,r){if(!this.isFirstLayer(e,t,n)){let r=e[t-this.changeIndex(n)];this.portDistributor.calculatePortRanksForLayer(r,this.portTypeFor(n))}let i=e[t][0],a=!r||this.isExternalPortDummy(i);return this.minimizeLayer(e[t],a,!1,n),!1}setFirstLayerOrder(e,t){let n=this.startIndex(t,e.length);return this.minimizeLayer(e[n],!1,!0,t),!1}isFirstLayer(e,t,n){return n?t===0:t===e.length-1}changeIndex(e){return e?1:-1}startIndex(e,t){return e?0:t-1}isExternalPortDummy(e){return e.getType()===`EXTERNAL_PORT`}portTypeFor(e){return e?`OUTPUT`:`INPUT`}alwaysImproves(){return!1}isDeterministic(){return!1}initAtLayerLevel(e,t){this.barycenterState[e]=Array(t[e].length)}initAtNodeLevel(e,t,n){let r=new Ki(n[e][t]);this.barycenterState[e][t]=r,this.constraintResolver.registerNodeState(n[e][t],r)}initAtPortLevel(){}initAtEdgeLevel(){}initAfterTraversal(){this.portRanks=this.portDistributor.getPortRanks();for(let e=0;e<this.barycenterState.length;e++){let t=this.barycenterState[e];if(t.length>0){let e=t[0].node.getLayer();e!==null&&this.layerStates.set(e,t)}}this.buildBarycenterAdjacency()}buildBarycenterAdjacency(){for(let e=0;e<this.barycenterState.length;e++){let t=this.barycenterState[e];for(let e=0;e<t.length;e++){let n=t[e].node,r=n.getLayer(),i=[],a=[],o=n.getPorts();for(let e=0;e<o.length;e++){let t=o[e];for(let e of t.getIncomingEdges()){let t=e.getSource();if(t===null)continue;let a=t.getNode();a.getLayer()===r?a!==n&&i.push(a.id):i.push(-(t.id+1))}for(let e of t.getOutgoingEdges()){let t=e.getTarget();if(t===null)continue;let i=t.getNode();i.getLayer()===r?i!==n&&a.push(i.id):a.push(-(t.id+1))}}t[e].forwardAdjacency=i,t[e].backwardAdjacency=a}}}};function Zi(e,t,n,r){let i=n.getProperty(Ie)===`ENFORCED`,a=n.getProperty(Bn);if(!e.hasProperty(F))return-1;if(i){if(a.includes(e.getProperty(u))&&a.includes(t.getProperty(u)))return r*(e.getProperty(u)??0)+e.getProperty(F)}else return e.getProperty(F);return e.getProperty(F)}const Qi=new ut(`medianHeuristic.weight`),$i=Number.MIN_VALUE,ea=Number.MAX_VALUE;function ta(e){return e.getAllProperties().get(`org.eclipse.elk.hierarchyHandling`)===`SEPARATE_CHILDREN`}function na(e){return e.getIncomingEdges().length===0&&e.getOutgoingEdges().length===0}var ra=class{skipInitAtLayerLevel=!0;skipInitAtNodeLevel=!0;skipInitAtPortLevel=!0;skipInitAtEdgeLevel=!0;skipInitAfterTraversal=!0;random;constructor(e){this.random=e}alwaysImproves(){return!1}isDeterministic(){return!0}setFirstLayerOrder(e,t){let n=t?0:Math.max(0,e.length-1),r=[...e[n]];for(let e of r)e.setProperty(Qi,ta(e)&&na(e)?ea:this.random.nextDouble());r.sort(this.weightComparator);let i=0;for(let t of r)e[n][i++]=t,t.setProperty(Qi,i);return!1}minimizeCrossings(e,t,n,r){let i=[...e[t]];this.calculateMedians(i,n?t-1:t+1),i.sort(this.weightComparator);let a=0;for(let n of i)e[t][a++]=n;return!1}calculateMedians(e,t){let n=$i,r=ea,i=[];for(let a of e){let e=[];for(let n of a.getIncomingEdges())this.addAdjacentNodeInReferenceLayer(n,t,e);for(let n of a.getOutgoingEdges())this.addAdjacentNodeInReferenceLayer(n,t,e);if(e.length===0)i.push(a);else{e.sort(this.weightComparator);let t=e[Math.floor(e.length/2)].getProperty(Qi);a.setProperty(Qi,t),n=Math.min(n,t),r=Math.max(r,t)}}let a=(r+n)/2;for(let e of i)e.setProperty(Qi,a)}addAdjacentNodeInReferenceLayer(e,t,n){let r=e.getTarget().getNode(),i=e.getSource().getNode();r.getLayer().getIndex()===t&&n.push(r),i.getLayer().getIndex()===t&&n.push(i)}weightComparator=(e,t)=>e.hasProperty(Qi)?t.hasProperty(Qi)?ia(e.getProperty(Qi),t.getProperty(Qi)):-1:1;initAtLayerLevel(e,t){}initAtNodeLevel(e,t,n){}initAtPortLevel(e,t,n,r){}initAtEdgeLevel(e,t,n,r,i,a){}initAfterTraversal(){}};function ia(e,t){return e<t?-1:e>t?1:e===t?e===0?Object.is(e,-0)===Object.is(t,-0)?0:Object.is(e,-0)?-1:1:0:Number.isNaN(e)?+!Number.isNaN(t):-1}var aa=class e extends Xi{biggerThan=/* @__PURE__ */ new Map;smallerThan=/* @__PURE__ */ new Map;constructor(e,t,n,r){super(e,t,n,r),this.barycenterStateComparator=(e,t)=>{if(e.getLayerConstraint()===`FIRST_SEPARATE`||e.getLayerConstraint()===`LAST_SEPARATE`||t.getLayerConstraint()===`FIRST_SEPARATE`||t.getLayerConstraint()===`LAST_SEPARATE`)return 0;let n=e.getGraph(),r=this.compareBasedOnTansitiveDependencies(e,t);if(r!==0)return r;if(e.hasProperty(F)&&t.hasProperty(F)){let r=Math.sign(Zi(e,t,n,n.getProperty(xn))-Zi(t,e,n,n.getProperty(xn)));if(n.getProperty(Ie)===`ONLY_WITHIN_GROUP`&&e.getProperty(u)!==t.getProperty(u)&&(r=0),r<0)return this.updateBiggerAndSmallerAssociations(t,e),r;if(r>0)return this.updateBiggerAndSmallerAssociations(e,t),r}return this.compareBasedOnBarycenter(e,t)}}minimizeLayer(t,n,r,i){if(r?this.randomizeBarycenters(t):(this.calculateBarycenters(t,i),this.fillInUnknownBarycenters(t,n)),t.length>1){let n=t[0].getGraph().getProperty(Oe);n?e.insertionSort(t,this.barycenterStateComparator,this):t.sort(this.barycenterStateComparator),n||this.constraintResolver.processConstraints(t)}}compareBasedOnTansitiveDependencies(e,t){if(!this.biggerThan.has(e))this.biggerThan.set(e,/* @__PURE__ */ new Set);else if(this.biggerThan.get(e).has(t))return 1;if(!this.biggerThan.has(t))this.biggerThan.set(t,/* @__PURE__ */ new Set);else if(this.biggerThan.get(t).has(e))return-1;if(!this.smallerThan.has(e))this.smallerThan.set(e,/* @__PURE__ */ new Set);else if(this.smallerThan.get(e).has(t))return-1;if(!this.smallerThan.has(t))this.smallerThan.set(t,/* @__PURE__ */ new Set);else if(this.smallerThan.get(t).has(e))return 1;return 0}compareBasedOnBarycenter(e,t){let n=this.stateOf(e),r=this.stateOf(t);if(n.barycenter!==null&&r.barycenter!==null){let i=ia(n.barycenter,r.barycenter);return i<0?this.updateBiggerAndSmallerAssociations(t,e):i>0&&this.updateBiggerAndSmallerAssociations(e,t),i}return n.barycenter===null?r.barycenter===null?0:(this.updateBiggerAndSmallerAssociations(e,t),1):(this.updateBiggerAndSmallerAssociations(t,e),-1)}updateBiggerAndSmallerAssociations(e,t){let n=this.biggerThan.get(e),r=this.biggerThan.get(t),i=this.smallerThan.get(e),a=this.smallerThan.get(t);n.add(t),a.add(e);for(let t of r){n.add(t);let r=this.smallerThan.get(t);r.add(e);for(let e of i)r.add(e)}for(let e of i){a.add(e);let n=this.biggerThan.get(e);n.add(t);for(let e of r)n.add(e)}}static insertionSort(e,t,n){for(let n=1;n<e.length;n++){let r=e[n],i=n;for(;i>0&&t(e[i-1],r)>0;)e[i]=e[i-1],i--;e[i]=r}n.clearTransitiveOrdering()}clearTransitiveOrdering(){this.biggerThan=/* @__PURE__ */ new Map,this.smallerThan=/* @__PURE__ */ new Map}},oa=class{skipInitAtLayerLevel=!0;skipInitAtEdgeLevel=!0;_lGraph;_currentNodeOrder;_currentlyBestNodeAndPortOrder=null;_bestNodeAndPortOrder=null;_portPositions=[];_useBottomUp=!1;_childGraphs=[];_hasExternalPorts=!1;_hasParent=!1;_parentGraphData=null;_parent=null;_crossMinimizer;_portDistributor;_crossingsCounter;_nPorts=0;constructor(e,t,n){this._lGraph=e,this._currentNodeOrder=e.toNodeArray(),this._parent=this._lGraph.getParentNode(),this._hasParent=this._parent!==null,this._parentGraphData=this._hasParent?n[this._parent.getGraph().id]:null;let r=this._lGraph.getProperty(w);this._hasExternalPorts=r.has(`EXTERNAL_PORTS`),this._crossingsCounter=new Mi(this._currentNodeOrder);let i=this._lGraph.getProperty(P);this._portDistributor=ki(t,i,this._currentNodeOrder);let a=[this,this._crossingsCounter,this._portDistributor],o=e.getProperty(Oe);if(t===0&&!o){let e=new Gi(this._currentNodeOrder);a.push(e),this._crossMinimizer=new Xi(e,i,this._portDistributor,this._currentNodeOrder)}else if(t===0&&o){let e=new Gi(this._currentNodeOrder);a.push(e),this._crossMinimizer=new aa(e,i,this._portDistributor,this._currentNodeOrder)}else if(t===3)this._crossMinimizer=new ra(i);else if(t===1||t===2)this._crossMinimizer=new Ci(t,this);else throw Error(`CrossMinType ${t} 未实现`);a.push(this._crossMinimizer),ji(a,this._currentNodeOrder),this._useBottomUp=Fi(this)}dontSweepInto(){return this._useBottomUp}get lGraph(){return this._lGraph}get currentNodeOrder(){return this._currentNodeOrder}get currentlyBestNodeAndPortOrder(){return this._currentlyBestNodeAndPortOrder}setCurrentlyBestNodeAndPortOrder(e){this._currentlyBestNodeAndPortOrder=e}get bestNodeNPortOrder(){return this._bestNodeAndPortOrder}setBestNodeNPortOrder(e){this._bestNodeAndPortOrder=e}get crossCounter(){return this._crossingsCounter}get crossMinimizer(){return this._crossMinimizer}get portDistributor(){return this._portDistributor}get parent(){return this._parent}get hasParent(){return this._hasParent}get childGraphs(){return this._childGraphs}get hasExternalPorts(){return this._hasExternalPorts}get parentGraphData(){return this._parentGraphData}get crossMinDeterministic(){return this._crossMinimizer.isDeterministic()}get crossMinAlwaysImproves(){return this._crossMinimizer.alwaysImproves()}get getBestSweep(){return this._crossMinimizer.isDeterministic()?this._currentlyBestNodeAndPortOrder:this._bestNodeAndPortOrder}get portPositions(){return this._portPositions}initAtLayerLevel(){}initAtNodeLevel(e,t,n){let r=n[e][t].getNestedGraph();r!==null&&this._childGraphs.push(r)}initAtPortLevel(){this._nPorts++}initAtEdgeLevel(){}initAfterTraversal(){this._portPositions=Array(this._nPorts)}};function sa(e,t){let n={NORTH:0,EAST:1,SOUTH:2,WEST:3},r=n[e.getSide()]??0,i=n[t.getSide()]??0;if(r!==i)return r-i;let a=e.getNode().getProperty(O);if(!D.isOrderFixed(a))return 0;if(a===`FIXED_ORDER`){let n=e.getProperty(Fe),r=t.getProperty(Fe);if(n!==null&&r!==null&&n-r!==0)return n-r}switch(e.getSide()){case`NORTH`:return e.getPosition().x-t.getPosition().x;case`EAST`:return e.getPosition().y-t.getPosition().y;case`SOUTH`:return t.getPosition().x-e.getPosition().x;case`WEST`:return t.getPosition().y-e.getPosition().y;default:return 0}}var ca=class e{nodeOrder;portOrders;constructor(t){if(t instanceof e){let n=t;this.nodeOrder=e.deepCopy(n.nodeOrder),this.portOrders=[...n.portOrders]}else{this.nodeOrder=e.deepCopy(t);let n=Array(t.length);this.portOrders=n;for(let e=0;e<t.length;e++){let r=t[e],i=Array(r.length);n[e]=i;for(let e=0;e<r.length;e++)i[e]=r[e].getPorts().slice()}}}static deepCopy(e){if(e===null)return null;let t=Array(e.length);for(let n=0;n<e.length;n++)t[n]=e[n].slice();return t}nodes(){return this.nodeOrder}transferNodeAndPortOrdersToGraph(e,t){let n=[],r=/* @__PURE__ */ new Set,i=e.getLayers();for(let e=0;e<i.length;e++){let a=i[e].getNodes();n.length=0;for(let r=0;r<a.length;r++){let a=this.nodeOrder[e][r];if(a.id=r,a.getType()===`NORTH_SOUTH_PORT`&&n.push(a),i[e].getNodes()[r]=a,a.getPorts().length=0,a.getPorts().push(...this.portOrders[e][r]),t){let e=a.getProperty(O);D.isOrderFixed(e)||a.setProperty(O,`FIXED_ORDER`)}}for(let e of n){let t=this.assertCorrectPortSides(e);r.add(t),r.add(e)}}for(let e of r)e.getPorts().sort(sa)}assertCorrectPortSides(e){let t=e.getProperty(at),n=e.getPorts()[0];for(let r of t.getPorts())if(r===n.getProperty(L)){if(r.getSide()===`NORTH`&&e.id>t.id){if(r.setSide(`SOUTH`),r.isExplicitlySuppliedPortAnchor()){let e=r.getSize().y,t=r.getAnchor().y;r.getAnchor().y=e-t}}else if(r.getSide()===`SOUTH`&&t.id>e.id&&(r.setSide(`NORTH`),r.isExplicitlySuppliedPortAnchor())){let e=r.getSize().y,t=r.getAnchor().y;r.getAnchor().y=-(e-t)}break}return t}},la=class{graphInfoHolders=[];graphsWhoseNodeOrderChanged=/* @__PURE__ */ new Set;random;randomSeed=1;crossMinType;constructor(e){this.crossMinType=e}process(e,t){t.begin(`Minimize Crossings ${this.crossMinType}`,1);let n=e.getLayers().length===0||e.getLayers().every(e=>e.getNodes().length===0),r=e.getLayers().length===1&&e.getLayers()[0].getNodes().length===1,i=e.getProperty(mn)===`INCLUDE_CHILDREN`;if(n||r&&!i){t.done();return}let a=this.initialize(e),o=this.chooseMinimizingMethod(a);for(let e of a)e.currentNodeOrder.length>0&&(o(e),e.hasParent&&this.setPortOrderOnParentGraph(e));this.transferNodeAndPortOrdersToGraph(),t.done()}chooseMinimizingMethod(e){if(e.length===0)return()=>{};let t=e[0];return t.crossMinDeterministic?t.crossMinAlwaysImproves?e=>this.minimizeCrossingsNoCounter(e):e=>this.minimizeCrossingsWithCounter(e):e=>this.compareDifferentRandomizedLayouts(e)}minimizeCrossingsNoCounter(e){let t=this.random.nextBoolean(),n=!0;for(;n;)n=!1,n=e.crossMinimizer.setFirstLayerOrder(e.currentNodeOrder,t),n=this.sweepReducingCrossings(e,t,!1)||n,t=!t;this.setCurrentlyBestNodeOrders()}compareDifferentRandomizedLayouts(e){this.random.setSeed(this.randomSeed),this.graphsWhoseNodeOrderChanged.clear();let t=2**53-1,n=e.lGraph.getProperty(en);for(let r=0;r<n;r++){let n=this.minimizeCrossingsWithCounter(e);if(n<t&&(t=n,this.saveAllNodeOrdersOfChangedGraphs(),t===0))break}}minimizeCrossingsWithCounter(e){let t=this.random.nextBoolean();this.countCurrentNumberOfCrossings(e),e.crossMinimizer.setFirstLayerOrder(e.currentNodeOrder,t),this.sweepReducingCrossings(e,t,!0);let n=this.countCurrentNumberOfCrossings(e),r,i=2;do{if(i++,this.setCurrentlyBestNodeOrders(),n===0)return 0;t=!t,r=n,this.sweepReducingCrossings(e,t,!1),n=this.countCurrentNumberOfCrossings(e)}while(r>n);return r}countCurrentNumberOfCrossings(e){let t=0,n=[e];for(;n.length>0;){let e=n.pop();t+=e.crossCounter.countAllCrossings(e.currentNodeOrder);for(let n of e.childGraphs){let e=this.graphInfoHolders[n.id];e&&!e.dontSweepInto()&&(t+=this.countCurrentNumberOfCrossings(e))}}return t}sweepReducingCrossings(e,t,n){let r=e.currentNodeOrder,i=r.length,a=e.portDistributor.distributePortsWhileSweeping(r,this.firstIndex(t,i),t),o=r[this.firstIndex(t,i)];a=this.sweepInHierarchicalNodes(o,t,n)||a;for(let o=this.firstFree(t,i);this.isNotEnd(i,o,t);o+=this.next(t))a=e.crossMinimizer.minimizeCrossings(r,o,t,n)||a,a=e.portDistributor.distributePortsWhileSweeping(r,o,t)||a,a=this.sweepInHierarchicalNodes(r[o],t,n)||a;return this.graphsWhoseNodeOrderChanged.add(e),a}sweepInHierarchicalNodes(e,t,n){let r=!1;for(let i of e)this.hasNestedGraph(i)&&!this.graphInfoHolders[i.getNestedGraph().id].dontSweepInto()&&(r=this.sweepInHierarchicalNode(t,i,n)||r);return r}sweepInHierarchicalNode(e,t,n){let r=t.getNestedGraph(),i=this.graphInfoHolders[r.id],a=i.currentNodeOrder,o=this.firstIndex(e,a.length),s=a[o][0];this.isExternalPortDummy(s)?a[o]=this.sortPortDummiesByPortPositions(t,a[o],this.sideOpposedSweepDirection(e)):i.crossMinimizer.setFirstLayerOrder(a,e);let c=this.sweepReducingCrossings(i,e,n);return this.sortPortsByDummyPositionsInLastLayer(i.currentNodeOrder,i.parent,e),c}sortPortsByDummyPositionsInLastLayer(e,t,n){let r=e[this.endIndex(n,e.length)],i=this.firstIndex(n,r.length);if(!this.isExternalPortDummy(r[i]))return;let a=[];for(let e=0;e<r.length;e++){let t=r[e];if(this.isExternalPortDummy(t)){let e=this.originPort(t);e!=null&&typeof e.getSide==`function`&&a.push(t)}}let o=t.getPorts(),s=n?0:a.length-1,c=n?1:-1;for(let e=0;e<o.length;e++){let t=o[e];this.isOnEndOfSweepSide(t,n)&&this.isHierarchical(t)&&s>=0&&s<a.length&&(o[e]=this.originPort(a[s]),s+=c)}}sortPortDummiesByPortPositions(e,t,n){let r=e.getPortSideView(n),i=Array(t.length),a=0;if(n===`EAST`||n===`NORTH`)for(let e=0;e<r.length;e++){let t=r[e];this.isHierarchical(t)&&(i[a++]=this.dummyNodeFor(t))}else for(let e=r.length-1;e>=0;e--){let t=r[e];this.isHierarchical(t)&&(i[a++]=this.dummyNodeFor(t))}if(a<t.length)throw Error(`IllegalStateException: Expected ${t.length} hierarchical ports, but found only ${a}.`);return i}setPortOrderOnParentGraph(e){if(e.hasExternalPorts&&e.getBestSweep!==null){let t=e.getBestSweep;this.sortPortsByDummyPositionsInLastLayer(t.nodes(),e.parent,!0),this.sortPortsByDummyPositionsInLastLayer(t.nodes(),e.parent,!1),e.parent.setProperty(O,`FIXED_ORDER`)}}saveAllNodeOrdersOfChangedGraphs(){for(let e of this.graphsWhoseNodeOrderChanged)e.setBestNodeNPortOrder(new ca(e.currentlyBestNodeAndPortOrder))}setCurrentlyBestNodeOrders(){for(let e of this.graphsWhoseNodeOrderChanged)e.setCurrentlyBestNodeAndPortOrder(new ca(e.currentNodeOrder))}firstIndex(e,t){return e?0:t-1}endIndex(e,t){return e?t-1:0}firstFree(e,t){return e?1:t-2}next(e){return e?1:-1}isNotEnd(e,t,n){return n?t<e:t>=0}hasNestedGraph(e){return e.getNestedGraph()!==null}sideOpposedSweepDirection(e){return e?`WEST`:`EAST`}isExternalPortDummy(e){return e.getType()===`EXTERNAL_PORT`}originPort(e){return e.getProperty(L)}isHierarchical(e){return e.getProperty($e)}dummyNodeFor(e){return e.getProperty(M)}isOnEndOfSweepSide(e,t){return t?e.getSide()===`EAST`:e.getSide()===`WEST`}initialize(e){this.graphInfoHolders=[];let t=e.getProperty(P);t===void 0&&(t=new $n(e.getProperty(me)),e.setProperty(P,t)),this.random=t,this.randomSeed=this.random.nextLong();let n=[],r=[e],i=0;for(;i<r.length;){let e=r[i];e.id=i++,e.getProperty(P)===void 0&&e.setProperty(P,t);let a=new oa(e,this.crossMinType,this.graphInfoHolders);r.push(...a.childGraphs),this.graphInfoHolders.push(a),a.dontSweepInto()&&n.unshift(a)}return this.graphsWhoseNodeOrderChanged=/* @__PURE__ */ new Set,n}transferNodeAndPortOrdersToGraph(){for(let e of this.graphInfoHolders){let t=e.getBestSweep;t!==null&&t.transferNodeAndPortOrdersToGraph(e.lGraph,!0)}}getGraphData(){return this.graphInfoHolders}},ua=class{process(e){let t=0;for(let n of e.getLayers())n.id=t++;let n=e.toNodeArray(),r=new Oi(n.length);ji([r],n);let i=0;t=0;for(let a of e.getLayers()){let e=0,o=0;for(let t of a.getNodes()){t.getPosition().x>0&&(e+=t.getPosition().x+t.getSize().x/2,o++);for(let e of t.getPorts())e.id=i++}o>0&&(e/=o);let s=Array(a.getNodes().length),c=0;for(let t of a.getNodes())t.id=c++,s[t.id]=da(t,e),t.getType()===`LONG_EDGE`&&t.setProperty(St,s[t.id]);a.getNodes().sort((e,t)=>{let n=s[e.id]-s[t.id];if(n===0){let n=e.getProperty(k)??[],r=t.getProperty(k)??[];if(n.includes(t))return-1;if(r.includes(e))return 1}return n}),r.distributePortsWhileSweeping(n,t,!0),t++}}};function da(e,t){switch(e.getType()){case`LONG_EDGE`:{let n=e.getProperty(L),r=(n?.getProperty(An)??[]).slice();n?.getProperty(A)&&r.reverse();let i=e.getProperty(B);if(i){let e=i.getAbsoluteAnchor();if(t<=e.x)return e.y;r.unshift(e)}let a=e.getProperty(I);if(a){let e=a.getAbsoluteAnchor();if(e.x<=t)return e.y;r.push(e)}if(r.length>=2){let e=r[0],n=r[1],i=2;for(;n.x<t&&i<r.length;)e=n,n=r[i++];return e.y+(t-e.x)/(n.x-e.x)*(n.y-e.y)}break}case`NORTH_SOUTH_PORT`:{let t=e.getPorts()[0]?.getProperty(L),n=t?.getNode();if(n&&t){if(t.getSide()===`NORTH`)return n.getPosition().y;if(t.getSide()===`SOUTH`)return n.getPosition().y+n.getSize().y}break}}return e.getGraph()?.getProperty(Dn)===`TOP_LEFT`?e.getPosition().y:e.getPosition().y+e.getSize().y/2}function fa(e,t){return{first:e,second:t}}var pa=class e{nodeCount=0;layerIndex=[];nodeIndex=[];leftNeighbors=[];rightNeighbors=[];static buildFor(t){let n=new e;n.nodeCount=0;for(let e of t.getLayers())n.nodeCount+=e.getNodes().length;let r=0,i=0;n.layerIndex=Array(t.getLayers().length);let a=0;n.nodeIndex=Array(n.nodeCount);for(let e of t.getLayers()){e.id=r++,n.layerIndex[e.id]=i++;let t=0;for(let r of e.getNodes())r.id=a++,n.nodeIndex[r.id]=t++}return n.leftNeighbors=[],e.determineAllLeftNeighbors(n,t),n.rightNeighbors=[],e.determineAllRightNeighbors(n,t),n}static determineAllLeftNeighbors(e,t){for(let n of t.getLayers())for(let t of n.getNodes()){let n=[],r=0;for(let e of t.getIncomingEdges()){if(e.isSelfLoop()||e.isInLayerEdge())continue;let t=e.getProperty(T);t>r&&(r=t,n.length=0),t===r&&n.push(fa(e.getSource().getNode(),e))}n.sort((t,n)=>Math.sign(e.nodeIndex[t.first.id]-e.nodeIndex[n.first.id])),e.leftNeighbors[t.id]=n}}static determineAllRightNeighbors(e,t){for(let n of t.getLayers())for(let t of n.getNodes()){let n=[],r=0;for(let e of t.getOutgoingEdges()){if(e.isSelfLoop()||e.isInLayerEdge())continue;let t=e.getProperty(T);t>r&&(r=t,n.length=0),t===r&&n.push(fa(e.getTarget().getNode(),e))}n.sort((t,n)=>Math.sign(e.nodeIndex[t.first.id]-e.nodeIndex[n.first.id])),e.rightNeighbors[t.id]=n}}cleanup(){this.leftNeighbors=[],this.rightNeighbors=[]}},ma=class{root=[];blockSize=/* @__PURE__ */ new Float64Array;align=[];innerShift=/* @__PURE__ */ new Float64Array;sink=[];shift=/* @__PURE__ */ new Float64Array;y=/* @__PURE__ */ new Float64Array;vdir;hdir;su=/* @__PURE__ */ new Uint8Array;od=/* @__PURE__ */ new Uint8Array;layeredGraph;spacings;constructor(e,t,n,r){this.layeredGraph=e,this.spacings=e.getProperty(Rn),this.root=Array(t),this.blockSize=new Float64Array(t),this.align=Array(t),this.innerShift=new Float64Array(t),this.sink=Array(t),this.shift=new Float64Array(t),this.y=new Float64Array(t),this.su=new Uint8Array(t),this.od=new Uint8Array(t),this.od.fill(1),this.vdir=n,this.hdir=r}cleanup(){this.root=[],this.blockSize=/* @__PURE__ */ new Float64Array,this.align=[],this.innerShift=/* @__PURE__ */ new Float64Array,this.sink=[],this.shift=/* @__PURE__ */ new Float64Array,this.y=/* @__PURE__ */ new Float64Array}layoutSize(){let e=1/0,t=-1/0;for(let n of this.layeredGraph.getLayers())for(let r of n.getNodes()){let n=this.y[r.id],i=n+this.blockSize[this.root[r.id].id];e=Math.min(e,n),t=Math.max(t,i)}return t-e}calculateDelta(e,t){let n=this.y[e.getNode().id]+this.innerShift[e.getNode().id]+e.getPosition().y+e.getAnchor().y;return this.y[t.getNode().id]+this.innerShift[t.getNode().id]+t.getPosition().y+t.getAnchor().y-n}shiftBlock(e,t){let n=e;do this.y[n.id]+=t,n=this.align[n.id];while(n!==e)}checkSpaceAbove(e,t,n){let r=t,i=e,a=i;do{a=this.align[a.id];let e=this.getMinY(a),t=this.getUpperNeighbor(a,n);if(t!==null){let n=this.getMaxY(t);r=Math.min(r,e-(n+this.spacings.getVerticalSpacing(a,t)))}}while(i!==a);return r}checkSpaceBelow(e,t,n){let r=t,i=e,a=i;do{a=this.align[a.id];let e=this.getMaxY(a),t=this.getLowerNeighbor(a,n);if(t!==null){let n=this.getMinY(t);r=Math.min(r,n-(e+this.spacings.getVerticalSpacing(a,t)))}}while(i!==a);return r}getMinY(e){let t=this.root[e.id];return this.y[t.id]+this.innerShift[e.id]-e.getMargin().top}getMaxY(e){let t=this.root[e.id];return this.y[t.id]+this.innerShift[e.id]+e.size.y+e.getMargin().bottom}getLowerNeighbor(e,t){let n=e.getLayer(),r=t.nodeIndex[e.id];return r<n.getNodes().length-1?n.getNodes()[r+1]:null}getUpperNeighbor(e,t){let n=e.getLayer(),r=t.nodeIndex[e.id];return r>0?n.getNodes()[r-1]:null}};const ha=/* @__PURE__ */ new WeakMap;var ga=class e{layeredGraph;ni;constructor(e,t){this.layeredGraph=e,this.ni=t}verticalAlignment(e,t){for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes())e.root[n.id]=n,e.align[n.id]=n,e.innerShift[n.id]=0;let n=this.layeredGraph.getLayers(),r=n.length,i=e.hdir===1,a=e.vdir===1;for(let o=0;o<r;o++){let s=n[i?r-1-o:o],c=-1,l=s.getNodes(),u=l.length;a&&(c=2**53-1);for(let n=0;n<u;n++){let r=l[a?u-1-n:n],o=i?this.ni.rightNeighbors[r.id]:this.ni.leftNeighbors[r.id];if(o.length>0){let n=o.length,i=Math.floor((n+1)/2)-1,s=Math.ceil((n+1)/2)-1;if(a){for(let n=s;n>=i;n--)if(e.align[r.id]===r){let i=o[n].first;!t.has(o[n].second.id)&&c>this.ni.nodeIndex[i.id]&&(e.align[i.id]=r,e.root[r.id]=e.root[i.id],e.align[r.id]=e.root[r.id],e.od[e.root[r.id].id]=+(e.od[e.root[r.id].id]!==0&&r.getType()===`LONG_EDGE`),c=this.ni.nodeIndex[i.id])}}else for(let n=i;n<=s;n++)if(e.align[r.id]===r){let i=o[n].first;!t.has(o[n].second.id)&&c<this.ni.nodeIndex[i.id]&&(e.align[i.id]=r,e.root[r.id]=e.root[i.id],e.align[r.id]=e.root[r.id],e.od[e.root[r.id].id]=+(e.od[e.root[r.id].id]!==0&&r.getType()===`LONG_EDGE`),c=this.ni.nodeIndex[i.id])}}}}}insideBlockShift(e){for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes())e.root[n.id]===n&&this.shiftBlock(e,n)}shiftBlock(e,t){let n=0,r=0;n=t.getMargin().top,r=t.size.y+t.getMargin().bottom,e.innerShift[t.id]=0;let i=t,a;for(;(a=e.align[i.id])!==t;){let t=this.getEdge(i,a),o=0;o=e.hdir===1?t.getTarget().getPosition().y+t.getTarget().getAnchor().y-t.getSource().getPosition().y-t.getSource().getAnchor().y:t.getSource().getPosition().y+t.getSource().getAnchor().y-t.getTarget().getPosition().y-t.getTarget().getAnchor().y;let s=e.innerShift[i.id]+o;e.innerShift[a.id]=s,n=Math.max(n,a.getMargin().top-s),r=Math.max(r,s+a.size.y+a.getMargin().bottom),i=a}i=t;do e.innerShift[i.id]=e.innerShift[i.id]+n,i=e.align[i.id];while(i!==t);e.blockSize[t.id]=n+r}getBlocks(e){let t=/* @__PURE__ */ new Map;for(let n of this.layeredGraph.getLayers())for(let r of n.getNodes()){let n=e.root[r.id],i=t.get(n);i||(i=[],t.set(n,i)),i.push(r)}return t}static getEdge(e,t){if(e===t){for(let n of e.getPorts()){for(let e of n.getIncomingEdges())if(e.getTarget().getNode()===t||e.getSource().getNode()===t)return e;for(let e of n.getOutgoingEdges())if(e.getTarget().getNode()===t||e.getSource().getNode()===t)return e}return null}let n=ha.get(e);n===void 0&&(n=/* @__PURE__ */ new Map,ha.set(e,n));let r=n.get(t);if(r!==void 0)return r;for(let r of e.getPorts()){for(let e of r.getIncomingEdges())if(e.getSource().getNode()===t)return n.set(t,e),e;for(let e of r.getOutgoingEdges())if(e.getTarget().getNode()===t)return n.set(t,e),e}return null}getEdge(t,n){return e.getEdge(t,n)}},_a=class{static THRESHOLD=Number.MAX_VALUE;static EPSILON=1e-4;bal;ni;blockFinished=/* @__PURE__ */ new Set;postProcessablesQueue=[];postProcessablesStack=[];init(e,t){this.bal=e,this.ni=t,this.blockFinished.clear(),this.postProcessablesQueue=[],this.postProcessablesStack=[]}finishBlock(e){this.blockFinished.add(e)}getOther(e,t){if(e.getSource().getNode()===t)return e.getTarget().getNode();if(e.getTarget().getNode()===t)return e.getSource().getNode();throw Error(`Node neither source nor target of edge`)}},va=class extends _a{calculateThreshold(e,t,n){return this.bal.vdir===1?1/0:-1/0}postProcess(){}},ya=class extends _a{scratchPostprocessable=null;calculateThreshold(e,t,n){let r=t===n,i=this.bal.align[n.id]===t;if(!(r||i))return e;let a=e;return r&&(a=this.getBound(t,!0)),!Number.isFinite(a)&&i&&(a=this.getBound(n,!1)),a}pickEdge(e){let t=e.isRoot?this.bal.hdir===0?e.free.getIncomingEdges():e.free.getOutgoingEdges():this.bal.hdir===1?e.free.getIncomingEdges():e.free.getOutgoingEdges(),n=!1;for(let r of t)if((this.bal.od[this.bal.root[e.free.id].id]||!r.isInLayerEdge())&&!(this.bal.su[this.bal.root[e.free.id].id]||this.bal.su[this.bal.root[e.free.id].id])&&(n=!0,this.blockFinished.has(this.bal.root[this.getOther(r,e.free).id])))return e.hasEdges=!0,e.edge=r,e;return e.hasEdges=n,e.edge=null,e}getBound(e,t){let n=this.bal.vdir===1?1/0:-1/0,r=this.scratchPostprocessable;r===null?(r=new ba(e,t),this.scratchPostprocessable=r):(r.free=e,r.isRoot=t,r.hasEdges=!1,r.edge=null);let i=this.pickEdge(r);if(i.edge===null&&i.hasEdges){let r=new ba(e,t);return r.hasEdges=i.hasEdges,this.postProcessablesQueue.push(r),n}if(i.edge!==null){let e,n=i.edge.getSource(),r=i.edge.getTarget();if(t){let t=this.bal.hdir===0?r:n,i=this.bal.hdir===0?n:r,a=this.bal.root[i.getNode().id];e=this.bal.y[a.id]+this.bal.innerShift[i.getNode().id]+i.getPosition().y+i.getAnchor().y-this.bal.innerShift[t.getNode().id]-t.getPosition().y-t.getAnchor().y}else{let t=this.bal.hdir===1?r:n,i=this.bal.hdir===1?n:r;e=this.bal.y[this.bal.root[i.getNode().id].id]+this.bal.innerShift[i.getNode().id]+i.getPosition().y+i.getAnchor().y-this.bal.innerShift[t.getNode().id]-t.getPosition().y-t.getAnchor().y}return this.bal.su[this.bal.root[n.getNode().id].id]=1,this.bal.su[this.bal.root[r.getNode().id].id]=1,e}return n}postProcess(){for(;this.postProcessablesQueue.length>0;){let e=this.postProcessablesQueue.shift(),t=this.pickEdge(e);if(t.edge===null)continue;let n=t.edge;(this.bal.od[this.bal.root[e.free.id].id]||!n.isInLayerEdge())&&(this.process(e)||this.postProcessablesStack.push(e))}for(;this.postProcessablesStack.length>0;)this.process(this.postProcessablesStack.pop())}process(e){let t=e.edge,n,r;t.getSource().getNode()===e.free?(n=t.getTarget(),r=t.getSource()):(n=t.getSource(),r=t.getTarget());let i=this.bal.calculateDelta(n,r);if(i>0&&i<_a.THRESHOLD){let e=this.bal.checkSpaceAbove(r.getNode(),i,this.ni);return this.bal.shiftBlock(r.getNode(),-e),e>0}if(i<0&&-i<_a.THRESHOLD){let e=this.bal.checkSpaceBelow(r.getNode(),-i,this.ni);return this.bal.shiftBlock(r.getNode(),e),e>0}return!1}},ba=class{free;isRoot;hasEdges=!1;edge=null;constructor(e,t){this.free=e,this.isRoot=t}},xa=class{classShift=null;node;outgoing=[];indegree=0},Sa=class{separation=0;target},Ca=class{layeredGraph;threshStrategy;ni;spacings;sinkNodes=/* @__PURE__ */ new Map;classNodePool=[];classEdgePool=[];constructor(e,t){this.layeredGraph=e,this.ni=t,this.spacings=e.getProperty(Rn),this.threshStrategy=e.getProperty(Fn)===`IMPROVE_STRAIGHTNESS`?new ya:new va}horizontalCompaction(e){for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes())e.sink[n.id]=n,e.shift[n.id]=e.vdir===1?-1/0:1/0;for(let e of this.sinkNodes.values()){for(let t of e.outgoing)this.classEdgePool.push(t);e.outgoing.length=0,this.classNodePool.push(e)}this.sinkNodes.clear();let t=this.layeredGraph.getLayers(),n=t.length,r=e.hdir===1,i=e.vdir===1;this.threshStrategy.init(e,this.ni),e.y.fill(NaN);for(let a=0;a<n;a++){let o=t[r?n-1-a:a].getNodes(),s=o.length;for(let t=0;t<s;t++){let n=o[i?s-1-t:t];e.root[n.id]===n&&this.placeBlock(n,e)}}this.placeClasses(e);for(let i=0;i<n;i++){let a=t[r?n-1-i:i];for(let t of a.getNodes())if(e.y[t.id]=e.y[e.root[t.id].id],t===e.root[t.id]){let n=e.shift[e.sink[t.id].id];(e.vdir===1&&n>-1/0||e.vdir===0&&n<1/0)&&(e.y[t.id]=e.y[t.id]+n)}}this.threshStrategy.postProcess()}placeBlock(e,t){if(!Number.isNaN(t.y[e.id]))return;let n=!0;t.y[e.id]=0;let r=e,i=t.vdir===0?-1/0:1/0;do{let a=this.ni.nodeIndex[r.id],o=r.getLayer().getNodes().length;if(t.vdir===0&&a>0||t.vdir===1&&a<o-1){let o;o=t.vdir===1?r.getLayer().getNodes()[a+1]:r.getLayer().getNodes()[a-1];let s=t.root[o.id];if(this.placeBlock(s,t),i=this.threshStrategy.calculateThreshold(i,e,r),t.sink[e.id]===e&&(t.sink[e.id]=t.sink[s.id]),t.sink[e.id]===t.sink[s.id]){let a=this.spacings.getVerticalSpacing(r,o);if(t.vdir===1){let c=t.y[e.id],l=t.y[s.id]+t.innerShift[o.id]-o.getMargin().top-a-r.getMargin().bottom-r.size.y-t.innerShift[r.id];n?(n=!1,t.y[e.id]=Math.min(l,i)):t.y[e.id]=Math.min(c,Math.min(l,i))}else{let c=t.y[e.id],l=t.y[s.id]+t.innerShift[o.id]+o.size.y+o.getMargin().bottom+a+r.getMargin().top-t.innerShift[r.id];n?(n=!1,t.y[e.id]=Math.max(l,i)):t.y[e.id]=Math.max(c,Math.max(l,i))}}else{let n=this.layeredGraph.getProperty(Zt),i=this.getOrCreateClassNode(t.sink[e.id],t),a=this.getOrCreateClassNode(t.sink[s.id],t);if(t.vdir===1){let c=t.y[e.id]+t.innerShift[r.id]+r.size.y+r.getMargin().bottom+n-(t.y[s.id]+t.innerShift[o.id]-o.getMargin().top);this.addClassEdge(i,a,c)}else{let c=t.y[e.id]+t.innerShift[r.id]-r.getMargin().top-t.y[s.id]-t.innerShift[o.id]-o.size.y-o.getMargin().bottom-n;this.addClassEdge(i,a,c)}}}else i=this.threshStrategy.calculateThreshold(i,e,r);r=t.align[r.id]}while(r!==e);this.threshStrategy.finishBlock(e)}placeClasses(e){let t=[];for(let e of this.sinkNodes.values())e.indegree===0&&t.push(e);for(;t.length>0;){let n=t.shift();n.classShift===null&&(n.classShift=0);for(let r of n.outgoing)r.target.classShift===null?r.target.classShift=n.classShift+r.separation:e.vdir===0?r.target.classShift=Math.min(r.target.classShift,n.classShift+r.separation):r.target.classShift=Math.max(r.target.classShift,n.classShift+r.separation),r.target.indegree--,r.target.indegree===0&&t.push(r.target)}for(let t of this.sinkNodes.values())e.shift[t.node.id]=t.classShift}addClassEdge(e,t,n){let r=this.classEdgePool.pop()??new Sa;r.target=t,r.separation=n,t.indegree++,e.outgoing.push(r)}getOrCreateClassNode(e,t){let n=this.sinkNodes.get(e);return n===void 0&&(n=this.classNodePool.pop()??new xa,n.classShift=null,n.indegree=0,n.outgoing.length=0,n.node=e,this.sinkNodes.set(n.node,n)),n}},wa=class e{lGraph;markedEdges=/* @__PURE__ */ new Set;ni;produceBalancedLayout=!1;static MIN_LAYERS_FOR_CONFLICTS=3;process(e){this.lGraph=e,this.ni=pa.buildFor(e);let t=e.getProperty(qn),n=e.getProperty(gt);this.produceBalancedLayout=t===`NONE`&&!n||t===`BALANCED`,this.markConflicts(e);let r=this.ni.nodeCount,i=[];switch(t){case`LEFTDOWN`:i.push([0,1]);break;case`LEFTUP`:i.push([1,1]);break;case`RIGHTDOWN`:i.push([0,0]);break;case`RIGHTUP`:i.push([1,0]);break;default:i.push([0,0],[1,0],[0,1],[1,1])}let a=i.length,o=new Float64Array(a*r),s=new Float64Array(a*r),c=Array(a),l=new ma(e,r,null,null),u=new ga(e,this.ni),d=new Ca(e,this.ni),f=[];for(let e=0;e<a;e++)l.vdir=i[e][0],l.hdir=i[e][1],l.y=o.subarray(e*r,(e+1)*r),l.innerShift=s.subarray(e*r,(e+1)*r),l.su.fill(0),l.od.fill(1),u.verticalAlignment(l,this.markedEdges),u.insideBlockShift(l),d.horizontalCompaction(l),c[e]=l.layoutSize(),f.push({vdir:i[e][0],hdir:i[e][1],y:l.y,innerShift:l.innerShift,size:c[e]});let p=null,m=null,h=0,g=null;if(p===null&&this.produceBalancedLayout&&(g=this.createBalancedLayout(this.lGraph,r,f),this.checkOrderConstraint(e,g.y,g.innerShift)&&(p=g.y,m=g.innerShift,h=0)),p===null)for(let t of f)this.checkOrderConstraint(e,t.y,t.innerShift)&&(p===null||h>t.size+1e-6)&&(p=t.y,m=t.innerShift,h=t.size,`${t.vdir}${t.hdir}`);p===null&&(p=f[0].y,m=f[0].innerShift,h=f[0].size,`${f[0].vdir}${f[0].hdir}`);for(let t of e.getLayers())for(let e of t.getNodes())e.position.y=p[e.id]+m[e.id];l.cleanup(),this.ni.cleanup(),this.markedEdges.clear()}markConflicts(t){let n=t.getLayers().length;if(n<e.MIN_LAYERS_FOR_CONFLICTS)return;let r=t.getLayers().map(e=>e.getNodes().length);for(let e=1;e<n-1;e++){let n=t.getLayers()[e+1],i=0,a=0;for(let t=0;t<r[e+1];t++){let o=n.getNodes()[t],s=this.incidentToInnerSegment(o,e+1,e);if(t===r[e+1]-1||s){let c=r[e]-1;for(s&&(c=this.ni.nodeIndex[this.ni.leftNeighbors[o.id][0].first.id]);a<=t;){let t=n.getNodes()[a];if(!this.incidentToInnerSegment(t,e+1,e))for(let e of this.ni.leftNeighbors[t.id]){let t=this.ni.nodeIndex[e.first.id];(t<i||t>c)&&this.markedEdges.add(e.second.id)}a++}i=c}}}}incidentToInnerSegment(e,t,n){if(e.getType()===`LONG_EDGE`){for(let r of e.getPorts())for(let i of r.getIncomingEdges())if(i.getSource().getNode().getType()===`LONG_EDGE`&&this.ni.layerIndex[i.getSource().getNode().getLayer().getIndex()]===n&&this.ni.layerIndex[e.getLayer().getIndex()]===t)return!0}return!1}createBalancedLayout(e,t,n){let r=n.length,i=new ma(e,t,null,null),a=Array(r),o=Array(r),s=Array(r),c=0;for(let e=0;e<r;e++)o[e]=2**53-1,s[e]=-(2**53-1);for(let t=0;t<r;t++){let r=n[t];a[t]=r.size,a[c]>a[t]&&(c=t);for(let n of e.getLayers())for(let e of n.getNodes()){let n=r.y[e.id]+r.innerShift[e.id];o[t]=Math.min(o[t],n),s[t]=Math.max(s[t],n+e.size.y)}}let l=Array(r);for(let e=0;e<r;e++)n[e].vdir===0?l[e]=o[c]-o[e]:l[e]=s[c]-s[e];let u=Array(r);for(let t of e.getLayers())for(let e of t.getNodes()){for(let t=0;t<r;t++){let r=n[t];u[t]=r.y[e.id]+r.innerShift[e.id]+l[t]}u.sort((e,t)=>e-t),i.y[e.id]=(u[1]+u[2])/2,i.innerShift[e.id]=0}return i}checkOrderConstraint(e,t,n){let r=!0;for(let i of e.getLayers()){let e=-1/0;for(let a of i.getNodes()){let i=t[a.id]+n[a.id]-a.getMargin().top,o=t[a.id]+n[a.id]+a.size.y+a.getMargin().bottom;if(i>e&&o>e)e=o;else{r=!1;break}}if(!r)break}return r}};function Ta(e){let t=e.getProperty(Rn),n=0;for(let r of e.getLayers()){let e=r.getSize();e.y=0;let i=null;for(let n of r.getNodes())i!==null&&(e.y+=t.getVerticalSpacing(n,i)),e.y+=n.getMargin().top+n.getSize().y+n.getMargin().bottom,i=n;n=Math.max(n,e.y)}for(let r of e.getLayers()){let e=r.getSize(),i=(n-e.y)/2,a=null;for(let e of r.getNodes())a!==null&&(i+=t.getVerticalSpacing(e,a)),i+=e.getMargin().top,e.getPosition().y=i,i+=e.getSize().y+e.getMargin().bottom,a=e}}function Ea(e){let t=e.getProperty(Rn);for(let n of e.getLayers())Da(n,t)}function Da(e,t){let n=-1/0,r=`NORMAL`;for(let i of e.getNodes()){let e=i.getType();if(e!==`NORMAL`){let a=i.getProperty(St);a==null?(n=Math.max(n,0),i.getPosition().y=n+t.getVerticalSpacingByType(e,r)):i.getPosition().y=a}let a=t.getVerticalSpacingByType(e,r);i.getPosition().y<n+a+i.getMargin().top&&(i.getPosition().y=n+a+i.getMargin().top),n=i.getPosition().y+i.getSize().y+i.getMargin().bottom,r=e}}const Oa=Object.values(ce);var ka=class{graph;nodeTypeSpacingOptionsHorizontal;nodeTypeSpacingOptionsVertical;cachedDefaults=/* @__PURE__ */ new Map;constructor(e){this.graph=e,this.nodeTypeSpacingOptionsHorizontal=this.emptyTable(),this.nodeTypeSpacingOptionsVertical=this.emptyTable(),this.precalculateNodeTypeSpacings()}emptyTable(){let e={};for(let t of Oa)e[t]={};return e}diagV(e,t){this.nodeTypeSpacingOptionsVertical[e][e]=t}diagVH(e,t,n){this.nodeTypeSpacingOptionsVertical[e][e]=t,this.nodeTypeSpacingOptionsHorizontal[e][e]=n}pairV(e,t,n){this.nodeTypeSpacingOptionsVertical[e][t]=n,this.nodeTypeSpacingOptionsVertical[t][e]=n}pairVH(e,t,n,r){this.nodeTypeSpacingOptionsVertical[e][t]=n,this.nodeTypeSpacingOptionsVertical[t][e]=n,this.nodeTypeSpacingOptionsHorizontal[e][t]=r,this.nodeTypeSpacingOptionsHorizontal[t][e]=r}precalculateNodeTypeSpacings(){let{NORMAL:e,LONG_EDGE:t,NORTH_SOUTH_PORT:r,EXTERNAL_PORT:i,LABEL:a,BREAKING_POINT:o}=ce;this.diagVH(e,Zt,kn),this.pairVH(e,t,an,_n),this.pairV(e,r,an),this.pairV(e,i,an),this.pairVH(e,a,Zt,kn),this.diagVH(t,n,wt),this.pairV(t,r,n),this.pairV(t,i,n),this.pairVH(t,a,an,_n),this.diagV(r,n),this.pairV(r,i,n),this.pairV(r,a,cn),this.diagV(i,dn),this.pairVH(i,a,vt,bn),this.diagVH(a,n,n),this.diagVH(o,n,wt),this.pairVH(o,e,an,_n),this.pairVH(o,a,an,_n),this.pairVH(o,t,an,_n)}getVerticalSpacing(e,t){return this.getLocalSpacing(e,t,this.nodeTypeSpacingOptionsVertical)}getHorizontalSpacing(e,t){return this.getLocalSpacing(e,t,this.nodeTypeSpacingOptionsHorizontal)}getVerticalSpacingByType(e,t){return this.getTypeSpacing(e,t,this.nodeTypeSpacingOptionsVertical)}getHorizontalSpacingByType(e,t){return this.getTypeSpacing(e,t,this.nodeTypeSpacingOptionsHorizontal)}getLocalSpacing(e,t,n){let r=e.getType(),i=t.getType(),a=n[r]?.[i],o=this.getIndividualOrDefault(e,a),s=this.getIndividualOrDefault(t,a);return Math.max(o,s)}getTypeSpacing(e,t,n){let r=n[e]?.[t];return r===void 0?this.graph.getProperty(Zt):this.graph.getProperty(r)}getIndividualOrDefault(e,t){if(t===void 0)return this.graph.getProperty(Zt);if(!e.hasProperty(Bt)){let e=this.cachedDefaults.get(t);return e===void 0&&(e=this.graph.getProperty(t),this.cachedDefaults.set(t,e)),e}return Aa(e,t)}};function Aa(e,t){let n=null;if(e.hasProperty(Bt)){let r=e.getProperty(Bt);r&&r.hasProperty(t)&&(n=r.getProperty(t))}return n===null&&(n=e.getGraph()?.getProperty(t)??t.getDefault()),n}const ja=.1,Ma=1e4;function Na(e){return e.hasProperty(Un)?e.getProperty(Un):e.getGraph().getProperty(Re)}function Pa(e){if(e.getType()!==`NORMAL`||e.getPorts().length<=1)return!1;let t=e.getProperty(`org.eclipse.elk.portConstraints`);if(D.isPosFixed(t))return!1;let n=Na(e);if(n===`NONE`)return!1;if(!Fa(n)){let t=Aa(e,dn),n=e.getProperty(Ot),r=n.top,i=n.bottom,a=e.getPortSideView(`WEST`);if(r+i+(a.length-1)*t>e.getSize().y)return!1;let o=e.getPortSideView(`EAST`);if(r+i+(o.length-1)*t>e.getSize().y)return!1}return!0}function Fa(e){return e===`NODE_SIZE_WHERE_SPACE_PERMITS`||e===`NODE_SIZE`}var Ia=class{origin;head;tail;isFlexible;constructor(e,t,n,r){this.origin=e,this.isFlexible=t,this.head=n,this.tail=r}},La=class{origin;left;right;constructor(e,t,n){this.origin=e,this.left=t,this.right=n}isStraight(){return this.notStraightBy()===0}notStraightBy(){return this.left.target.layer-this.left.delta-(this.right.target.layer-this.right.delta)}},Ra=class extends Array{containsLongEdgeDummy(){return this.length===0?!1:this[0].getSource().getNode().getType()===`LONG_EDGE`||this.some(e=>e.getTarget().getNode().getType()===`LONG_EDGE`)}containsFlexibleNode(e){return this.length===0?!1:e(Na(this[0].getSource().getNode()))?!0:this.some(t=>e(Na(t.getTarget().getNode())))}orderTwoPath(){if(this.length!==2)throw Error(`Order only allowed for two paths.`);let e=this[0],t=this[1];e.getTarget().getNode()!==t.getSource().getNode()&&(this.length=0,this.push(t,e))}isTwoPathCenterNodeFlexible(){return Pa(this[0].getTarget().getNode())}},za=class e{lGraph;spacings;nGraph;nodeReps=[];edgeReps=[];portMap=/* @__PURE__ */ new Map;nodeCount=0;edgeCount=0;nodeState=[];crossing=[];twoPaths=[];flexibleWhereSpacePermitsEdges=[];process(e){this.lGraph=e,this.spacings=e.getProperty(Rn),this.prepare(),this.buildInitialAuxiliaryGraph(),this.insertNorthSouthAuxiliaryEdges(),this.insertInLayerEdgeAuxiliaryEdges(),this.lGraph.getProperty(gt)&&this.preferStraightEdges(),this.nGraph.makeConnected();let t=e.getProperty(en)*this.nGraph.nodes.length;if(Sr.forGraph(this.nGraph).withIterationLimit(t).withBalancing(!1).execute(),this.flexibleWhereSpacePermitsEdges.length>0){this.insertFlexibleWhereSpaceAuxiliaryEdges();for(let e of this.flexibleWhereSpacePermitsEdges)e.weight=1;Sr.forGraph(this.nGraph).withIterationLimit(t).withBalancing(!1).execute()}this.lGraph.getProperty(gt)&&this.postProcessTwoPaths(),this.applyPositions(),this.cleanup()}prepare(){this.nGraph=new xr;let e=0,t=0;for(let n of this.lGraph.getLayers())for(let r of n.getNodes()){r.id=e++;for(let e of r.getOutgoingEdges())e.id=t++;let n=Pa(r);for(let e of r.getPorts()){if(n){let t=e.getAnchor().y;if(t!==Math.floor(t)){let n=t-Math.round(t);e.getAnchor().y-=n}}let t=e.getPosition().y+e.getAnchor().y;if(t!==Math.floor(t)){let n=t-Math.round(t);e.getPosition().y-=n}}}this.nodeReps=Array(e),this.edgeReps=Array(t),this.nodeCount=e,this.edgeCount=t,this.flexibleWhereSpacePermitsEdges=[]}cleanup(){this.nodeReps=[],this.edgeReps=[],this.portMap.clear(),this.flexibleWhereSpacePermitsEdges=[]}buildInitialAuxiliaryGraph(){for(let e of this.lGraph.getLayers())this.transformLayer(e);this.transformEdges()}transformLayer(e){let t=null;for(let n of e.getNodes()){let e=Pa(n)?this.transformFixedOrderNode(n):this.transformFixedPosNode(n);if(this.nodeReps[n.id]=e,t!==null){let r=t.origin.getMargin().bottom+this.spacings.getVerticalSpacing(t.origin,n)+n.getMargin().top;t.isFlexible||(r+=t.origin.getSize().y),G().delta(Math.ceil(r)).weight(0).source(t.tail).target(e.head).create()}t=e}}transformFixedPosNode(e){let t=vr().origin(e).type(`non-flexible`).create(this.nGraph);for(let n of e.getPorts())We.includes(n.getSide())&&this.portMap.set(n,t);return new Ia(e,!1,t,t)}transformFixedOrderNode(e){let t=vr().origin(e).type(`flexible-head`).create(this.nGraph),n=vr().origin(e).type(`flexible-tail`).create(this.nGraph),r=new Ia(e,!0,t,n),i=e.getSize().y,a=Na(e),o=a===`NODE_SIZE`?1:Ma,s=G().weight(o).delta(Math.ceil(i)).source(t).target(n).create();return a===`NODE_SIZE_WHERE_SPACE_PERMITS`&&this.flexibleWhereSpacePermitsEdges.push(s),this.transformPorts([...e.getPortSideView(`WEST`)].reverse(),r),this.transformPorts(e.getPortSideView(`EAST`),r),r}transformPorts(e,t){if(e.length===0)return;let n=Aa(t.origin,dn),r=Aa(t.origin,Ot),i=t.head,a=null;for(let t of e){let e=0;e=a===null?r.top:n+a.getSize().y;let o=vr().origin(t).type(`port`).create(this.nGraph);this.portMap.set(t,o),G().weight(0).delta(Math.ceil(e)).source(i).target(o).create(),a=t,i=o}G().weight(0).delta(Math.ceil(r.bottom+a.getSize().y)).source(i).target(t.tail).create()}transformEdges(){for(let e of this.lGraph.getLayers())for(let t of e.getNodes())for(let e of t.getOutgoingEdges())this.isHandledEdge(e)&&this.transformEdge(e)}transformEdge(e){let t=vr().type(`edge`).create(this.nGraph),n=this.nodeReps[e.getSource().getNode().id],r=this.nodeReps[e.getTarget().getNode().id],i=e.getSource(),a=e.getTarget(),o=i.getAnchor().y,s=a.getAnchor().y;n.isFlexible||(o+=i.getPosition().y),r.isFlexible||(s+=a.getPosition().y);let c=Math.max(0,o-s),l=Math.max(0,s-o),u=this.getEdgeWeight(e),d=G().origin(e).weight(u).delta(l).source(t).target(this.portMap.get(i)).create(),f=G().origin(e).weight(u).delta(c).source(t).target(this.portMap.get(a)).create();this.edgeReps[e.id]=new La(e,d,f)}insertInLayerEdgeAuxiliaryEdges(){for(let e of this.lGraph.getLayers())for(let t of e.getNodes())if(t.getType()===`NORMAL`)for(let e of t.getConnectedEdges()){if(!e.isInLayerEdge())continue;let t=e.getSource().getNode().getType()===`NORMAL`?e.getSource():e.getTarget(),n=e.getOther(t).getNode(),r=this.portMap.get(t),i=this.nodeReps[n.id].head,a=t.getNode().getIndex()<n.getIndex()?r:i,o=t.getNode().getIndex()<n.getIndex()?i:r;G().delta(0).weight(4).source(a).target(o).create()}}insertNorthSouthAuxiliaryEdges(){for(let e of this.lGraph.getLayers())for(let t of e.getNodes()){for(let e of t.getPortSideView(`SOUTH`)){let n=e.getProperty(M),r=n==null?void 0:this.nodeReps[n.id];n!=null&&r!==void 0&&this.nodeReps[t.id]!==void 0&&G().delta(0).weight(ja).source(this.nodeReps[t.id].tail).target(r.head).create()}for(let e of t.getPortSideView(`NORTH`)){let n=e.getProperty(M),r=n==null?void 0:this.nodeReps[n.id];n!=null&&r!==void 0&&this.nodeReps[t.id]!==void 0&&G().delta(0).weight(ja).source(r.tail).target(this.nodeReps[t.id].head).create()}}}static length(e){return Math.abs(e.source.layer-e.target.layer)-e.delta}getEdgeWeightByType(e,t){return e===`NORMAL`&&t===`NORMAL`?4:e===`NORMAL`||t===`NORMAL`?8:32}preferStraightEdges(){this.nodeState=Array(this.nodeCount),this.twoPaths=[];for(let t of this.lGraph.getLayers())for(let n of t.getNodes())this.nodeState[n.id]=e.getNodeState(n);this.markEdgeCrossings();let t=this.identifyPaths();for(let e of t){if(e.length<=1)continue;if(e.length===2){e.orderTwoPath(),e.isTwoPathCenterNodeFlexible()||this.twoPaths.push(e);continue}if(e.containsLongEdgeDummy()||e.containsFlexibleNode(e=>Fa(e)))continue;let t=null;for(let n=0;n<e.length;n++){let r=e[n],i=this.edgeReps[r.id],a=(t===null||n===e.length-1?this.getEdgeWeightByType(`NORMAL`,`LONG_EDGE`):this.getEdgeWeightByType(`LONG_EDGE`,`LONG_EDGE`))*2,o=i.left.weight;i.left.weight=Math.max(o,o+(a-o));let s=i.right.weight;i.right.weight=Math.max(s,s+(a-s)),t=r}}}postProcessTwoPaths(){let e=[...this.twoPaths],t=[];for(;e.length>0;){let n=e.shift();this.improveTwoPath(n,!0)&&t.push(n)}for(;t.length>0;)this.improveTwoPath(t.pop(),!1)}improveTwoPath(t,n){let r=this.edgeReps[t[0].id],i=this.edgeReps[t[1].id];if(r.isStraight()&&i.isStraight())return!1;let a=r.right.target.origin;if(a===null||typeof a.getPorts!=`function`)return!1;let o=a,s=this.nodeReps[o.id],c=o.getIndex(),l=1/0;if(c>0){let e=o.getLayer().getNodes()[c-1],t=this.nodeReps[e.id],n=Math.ceil(this.spacings.getVerticalSpacing(e,o));l=s.head.layer-o.getMargin().top-(t.head.layer+e.getSize().y+e.getMargin().bottom)-n}let u=1/0;if(c<o.getLayer().getNodes().length-1){let e=o.getLayer().getNodes()[c+1],t=this.nodeReps[e.id],n=Math.ceil(this.spacings.getVerticalSpacing(e,o));u=t.head.layer-e.getMargin().top-(s.head.layer+o.getSize().y+o.getMargin().bottom)-n}if(n&&Math.abs(l-u)<=1e-5)return!0;let d=+e.length(r.left),f=-e.length(r.right),p=-e.length(i.left),m=+e.length(i.right),h=r.notStraightBy()>0&&i.notStraightBy()<0,g=r.notStraightBy()<0&&i.notStraightBy()>0,_=r.left.target.layer+r.right.delta<i.right.target.layer+i.left.delta,v=r.left.target.layer+r.right.delta>i.right.target.layer+i.left.delta,y=0;return!h&&!g&&(v?l+p>0?y=p:u-d>0&&(y=d):_&&(l+f>0?y=f:u-m>0&&(y=m))),s.head.layer+=y,s.isFlexible&&(s.tail.layer+=y),!1}identifyPaths(){let e=[];for(let t of this.lGraph.getLayers())for(let n of t.getNodes())if(this.nodeState[n.id]===2)for(let t of n.getConnectedEdges()){if(!this.isHandledEdge(t))continue;let r=this.follow(t,n,new Ra);r.length>1&&e.push(r)}return e}follow(e,t,n){let r=e.getOtherNode(t);if(n.push(e),this.nodeState[r.id]===-1||this.nodeState[r.id]===2||this.crossing[e.id])return n;this.nodeState[r.id]=-1;for(let t of r.getConnectedEdges())if(this.isHandledEdge(t)&&t!==e)return this.follow(t,r,n);return n}static getNodeState(e){let t=0,n=0;for(let r of e.getPorts()){for(let e of r.getIncomingEdges())e.isSelfLoop()||t++;for(let e of r.getOutgoingEdges())e.isSelfLoop()||n++;if(t>1||n>1)return 2}return t+n===1?2:0}markEdgeCrossings(){this.crossing=Array(this.edgeCount).fill(!1);let e=this.lGraph.getLayers();for(let t=0;t+1<e.length;t++)this.markCrossingEdges(e[t],e[t+1])}markCrossingEdges(e,t){let n=[];for(let r of e.getNodes())for(let e of r.getPortSideView(`EAST`))for(let r of e.getOutgoingEdges())r.isInLayerEdge()||r.isSelfLoop()||r.getTarget().getNode().getLayer()!==t||n.push(r);for(let r=t.getNodes().length-1;r>=0;r--){let i=t.getNodes()[r];for(let t of i.getPortSideView(`WEST`))for(let r of t.getIncomingEdges())if(!(r.isInLayerEdge()||r.isSelfLoop()||r.getSource().getNode().getLayer()!==e)&&n.length>0){let e=n.length-1,t=n[e];for(;t!==r&&e>0;)this.crossing[t.id]=!0,this.crossing[r.id]=!0,e--,t=n[e];t===r&&e>0&&n.splice(e,1)}}}insertFlexibleWhereSpaceAuxiliaryEdges(){let e=1/0,t=-1/0;for(let n of this.nGraph.nodes)n.layer<e&&(e=n.layer),n.layer>t&&(t=n.layer);let n=t-e,r=vr().create(this.nGraph),i=vr().create(this.nGraph);G().weight(Ma*2).delta(n).source(r).target(i).create();for(let t of this.nodeReps)t!==void 0&&t.origin.getType()===`NORMAL`&&(t.origin.getPorts().length<=1||(G().weight(0).delta(t.tail.layer-e).source(r).target(t.tail).create(),G().weight(0).delta(n-t.head.layer).source(t.head).target(i).create()))}applyPositions(){for(let e of this.lGraph.getLayers())for(let t of e.getNodes()){let e=this.nodeReps[t.id],n=e.head.layer,r=e.tail.layer;t.getPosition().y=n;let i=r-n-t.getSize().y,a=Pa(t),o=Na(t);if(a&&Fa(o)&&(t.getSize().y+=i),a&&(o===`PORT_POSITION`||Fa(o))){for(let e of t.getPorts())if(We.includes(e.getSide())){let t=this.portMap.get(e);e.getPosition().y=t.layer-n}}}}getEdgeWeight(e){let t=Math.max(1,e.getProperty(T)),n=e.getSource().getNode().getType(),r=e.getTarget().getNode().getType(),i;return i=n===`NORMAL`&&r===`NORMAL`?4:n===`NORMAL`||r===`NORMAL`?8:32,t*i}isHandledEdge(e){return!e.isSelfLoop()&&!e.isInLayerEdge()}},Ba=class{process(e){let t=1/0,n=-1/0,r=!1;for(let i of e.getLayers()){let a=i.getSize();if(a.x=0,a.y=0,i.getNodes().length===0)continue;r=!0;for(let e of i.getNodes())a.x=Math.max(a.x,e.size.x+e.getMargin().left+e.getMargin().right);let o=i.getNodes()[0],s=e.getProperty(Ot),c=o.getPosition().y-o.getMargin().top;o.getType()===`EXTERNAL_PORT`&&(c-=s.top);let l=i.getNodes()[i.getNodes().length-1],u=l.getPosition().y+l.size.y+l.getMargin().bottom;l.getType()===`EXTERNAL_PORT`&&(u+=s.bottom),a.y=u-c,t=Math.min(t,c),n=Math.max(n,u)}r||(t=0,n=0),e.getSize().y=n-t,e.getOffset().y-=t}};function Va(e,t){let n=0,r=0;for(let t of e.getNodes())n=Math.max(n,t.getMargin().left),r=Math.max(r,t.getMargin().right);for(let i of e.getNodes()){let a=i.getProperty(z),o;if(a===`LEFT`)o=0;else if(a===`RIGHT`)o=1;else if(a===`CENTER`)o=.5;else{let e=0,t=0;for(let n of i.getPorts())n.getIncomingEdges().length>0&&e++,n.getOutgoingEdges().length>0&&t++;o=e+t===0?.5:t/(e+t)}let s=e.getSize(),c=i.size.x,l=(s.x-c)*o;o>.5?l-=r*2*(o-.5):o<.5&&(l+=n*2*(.5-o));let u=i.getMargin().left;l<u&&(l=u);let d=i.getMargin().right;l>s.x-d-c&&(l=s.x-d-c),i.position.x=t+l}}var K=class e{static CRITICAL_DEPENDENCY_WEIGHT=1;type;source=null;target=null;weight;constructor(e,t,n,r){this.type=e,this.weight=r,this.setSource(t),this.setTarget(n)}static createAndAddRegular(t,n,r){return new e(0,t,n,r)}static createAndAddCritical(t,n){return new e(1,t,n,e.CRITICAL_DEPENDENCY_WEIGHT)}remove(){this.setSource(null),this.setTarget(null)}reverse(){let e=this.source,t=this.target;this.setSource(t),this.setTarget(e)}getType(){return this.type}getSource(){return this.source}getTarget(){return this.target}getWeight(){return this.weight}setSource(e){if(this.source!==null){let e=this.source.getOutgoingSegmentDependencies(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.source=e,this.source!==null&&this.source.getOutgoingSegmentDependencies().push(this)}setTarget(e){if(this.target!==null){let e=this.target.getIncomingSegmentDependencies(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.target=e,this.target!==null&&this.target.getIncomingSegmentDependencies().push(this)}},Ha=class{static detectCycles(e,t,n){let r=[],i=[],a=[];Ua(e,i,a,t),Wa(e,i,a,t,n);for(let n of e)for(let e of n.getOutgoingSegmentDependencies())(!t||e.getType()===1)&&n.mark>e.getTarget().mark&&r.push(e);return r}};function Ua(e,t,n,r){let i=-1;for(let a of e){a.mark=i--;let e=0;for(let t of a.getIncomingSegmentDependencies())t.getType()===1&&(e+=t.getWeight());let o=0;for(let e of a.getOutgoingSegmentDependencies())e.getType()===1&&(o+=e.getWeight());let s=e,c=o;if(!r){s=0;for(let e of a.getIncomingSegmentDependencies())s+=e.getWeight();c=0;for(let e of a.getOutgoingSegmentDependencies())c+=e.getWeight()}a.setInWeight(s),a.setCriticalInWeight(e),a.setOutWeight(c),a.setCriticalOutWeight(o),c===0?n.push(a):s===0&&t.push(a)}}function Wa(e,t,n,r,i){let a=[],o=[],s=e.length,c=s-1,l=s+1;for(;;){let s=0;for(;s<n.length;){let e=n[s++];e.mark=c--,Ga(e,t,n,r)}n.length=0;let u=0;for(;u<t.length;){let e=t[u++];e.mark=l++,Ga(e,t,n,r)}t.length=0,a.length=0;for(let t=e.length-1;t>=0;t--){let n=e[t];n.mark<0&&a.push(n)}if(a.length===0)break;let d=-(2**53-1);o.length=0;for(let e of a){if(!r&&e.getCriticalOutWeight()>0&&e.getCriticalInWeight()<=0){o.length=0,o.push(e);break}let t=e.getOutWeight()-e.getInWeight();t>=d&&(t>d&&(o.length=0,d=t),o.push(e))}if(o.length>0){let e=o[i.nextInt(o.length)];e.mark=l++,Ga(e,t,n,r)}}let u=e.length+1;for(let t of e)t.mark<s&&(t.mark+=u)}function Ga(e,t,n,r){for(let n of e.getOutgoingSegmentDependencies())if(!r||n.getType()===1){let e=n.getTarget();e.mark<0&&n.getWeight()>0&&(e.setInWeight(e.getInWeight()-n.getWeight()),n.getType()===1&&e.setCriticalInWeight(e.getCriticalInWeight()-n.getWeight()),e.getInWeight()<=0&&e.getOutWeight()>0&&t.push(e))}for(let t of e.getIncomingSegmentDependencies())if(!r||t.getType()===1){let e=t.getSource();e.mark<0&&t.getWeight()>0&&(e.setOutWeight(e.getOutWeight()-t.getWeight()),t.getType()===1&&e.setCriticalOutWeight(e.getCriticalOutWeight()-t.getWeight()),e.getOutWeight()<=0&&e.getInWeight()>0&&n.push(e))}}const Ka=`EAST`;function qa(e){return e.getNode().position.y+e.getPosition().y+e.getAnchor().y}var Ja=class e{mark=0;positionFn;srcSide;splitPartner=null;splitBy=null;constructor(e=qa,t=Ka){this.positionFn=e,this.srcSide=t}routingSlot=0;ports=[];startPosition=NaN;endPosition=NaN;incomingConnectionCoordinates=[];outgoingConnectionCoordinates=[];incomingSegmentDependencies=[];outgoingSegmentDependencies=[];inWeight=0;outWeight=0;criticalInWeight=0;criticalOutWeight=0;addPortPositions(e,t,n=!0){t.set(e,this),this.ports.push(e);let r=this.positionFn(e);e.getSide()===this.srcSide?Ya(this.incomingConnectionCoordinates,r):Ya(this.outgoingConnectionCoordinates,r);let i=e.getIncomingEdges?.();if(i!==void 0){for(let n of i){let r=n.getSource()===e?n.getTarget():n.getSource();t.has(r)||this.addPortPositions(r,t,!1)}for(let n of e.getOutgoingEdges()){let r=n.getSource()===e?n.getTarget():n.getSource();t.has(r)||this.addPortPositions(r,t,!1)}}else for(let n of e.getConnectedPorts())t.has(n)||this.addPortPositions(n,t,!1);n&&this.recomputeExtent()}getPorts(){return this.ports}getSplitPartner(){return this.splitPartner}setSplitPartner(e){this.splitPartner=e}getSplitBy(){return this.splitBy}setSplitBy(e){this.splitBy=e}isDummy(){return this.splitPartner!==null&&this.splitBy===null}getLength(){return this.endPosition-this.startPosition}representsHyperedge(){return this.ports.length>2}getRoutingSlot(){return this.routingSlot}setRoutingSlot(e){this.routingSlot=e}getStartCoordinate(){return this.startPosition}getEndCoordinate(){return this.endPosition}getIncomingConnectionCoordinates(){return this.incomingConnectionCoordinates}getOutgoingConnectionCoordinates(){return this.outgoingConnectionCoordinates}getIncomingSegmentDependencies(){return this.incomingSegmentDependencies}getOutgoingSegmentDependencies(){return this.outgoingSegmentDependencies}getInWeight(){return this.inWeight}setInWeight(e){this.inWeight=e}getOutWeight(){return this.outWeight}setOutWeight(e){this.outWeight=e}getCriticalInWeight(){return this.criticalInWeight}setCriticalInWeight(e){this.criticalInWeight=e}getCriticalOutWeight(){return this.criticalOutWeight}setCriticalOutWeight(e){this.criticalOutWeight=e}splitAt(t){for(this.splitPartner=new e(this.positionFn,this.srcSide),this.splitPartner.setSplitPartner(this),this.splitPartner.outgoingConnectionCoordinates.push(...this.outgoingConnectionCoordinates),this.outgoingConnectionCoordinates.length=0,this.outgoingConnectionCoordinates.push(t),this.splitPartner.incomingConnectionCoordinates.push(t),this.recomputeExtent(),this.splitPartner.recomputeExtent();this.incomingSegmentDependencies.length>0;)this.incomingSegmentDependencies[0].remove();for(;this.outgoingSegmentDependencies.length>0;)this.outgoingSegmentDependencies[0].remove();return this.splitPartner}simulateSplit(){let t=new e(this.positionFn,this.srcSide),n=new e(this.positionFn,this.srcSide);return t.splitBy=this.splitBy,t.splitPartner=n,n.splitPartner=t,t.incomingConnectionCoordinates.push(...this.incomingConnectionCoordinates),t.recomputeExtent(),n.outgoingConnectionCoordinates.push(...this.outgoingConnectionCoordinates),n.recomputeExtent(),[t,n]}recomputeExtent(){this.startPosition=NaN,this.endPosition=NaN,this.recomputeExtentList(this.incomingConnectionCoordinates),this.recomputeExtentList(this.outgoingConnectionCoordinates)}recomputeExtentList(e){e.length!==0&&(this.startPosition=Number.isNaN(this.startPosition)?e[0]:Math.min(this.startPosition,e[0]),this.endPosition=Number.isNaN(this.endPosition)?e[e.length-1]:Math.max(this.endPosition,e[e.length-1]))}};function Ya(e,t){let n=0,r=e.length;for(;n<r;){let i=n+r>>1,a=e[i];if(a===t)return;a>t?r=i:n=i+1}e.splice(n,0,t)}var Xa=class{startPosition;endPosition;size;constructor(e,t){this.startPosition=e,this.endPosition=t,this.size=t-e}},Za=class{dependencies=0;crossings=0};function Qa(e,t){let n=[];for(let t of e)n.push(...t.getIncomingConnectionCoordinates(),...t.getOutgoingConnectionCoordinates());n.sort((e,t)=>e-t);let r=[];for(let e=1;e<n.length;e++)n[e]-n[e-1]>=2*t&&r.push(new Xa(n[e-1]+t,n[e]-t));return r}function $a(e){let t=/* @__PURE__ */ new Set;for(let n of e){let e=n.getSource(),r=n.getTarget();if(e===null||r===null||t.has(e)||t.has(r))continue;let i=e,a=r;e.representsHyperedge()&&!r.representsHyperedge()&&(i=r,a=e),t.add(i),i.setSplitBy(a)}return t}function eo(e,t,n,r){let i=ro(e,n,r);t.push(e.splitAt(i)),to(e,t)}function to(e,t){let n=e.getSplitBy(),r=e.getSplitPartner();if(n!==null&&r!==null){K.createAndAddCritical(e,n),K.createAndAddCritical(n,r);for(let i of t)i!==n&&i!==e&&i!==r&&(no(i,e),no(i,r))}}function no(e,t){if(Math.abs(e.getStartCoordinate()-e.getEndCoordinate())<.001||Math.abs(t.getStartCoordinate()-t.getEndCoordinate())<.001)return;let n=xo(e.getOutgoingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate())+xo(t.getIncomingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate()),r=xo(t.getOutgoingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate())+xo(e.getIncomingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate());(n>0||r>0)&&(n<=r?K.createAndAddCritical(e,t):K.createAndAddCritical(t,e))}function ro(e,t,n){let r=-1,i=-1;for(let n=0;n<t.length;n++){let a=t[n];if(a.startPosition>e.getEndCoordinate())break;a.endPosition>=e.getStartCoordinate()&&(r<0&&(r=n),i=n)}let a=fo(e);if(r>=0){let o=io(e,t,r,i);a=po(t[o]),lo(t,o,n)}return a}function io(e,t,n,r){let i=n;if(n<r){let[a,o]=e.simulateSplit(),s=t[i],c=ao(e,a,o,s);for(let l=n+1;l<=r;l++){let n=t[l],r=ao(e,a,o,n);co(n,r,s,c)&&(s=n,c=r,i=l)}}return i}function ao(e,t,n,r){let i=po(r);t.getOutgoingConnectionCoordinates().length=0,t.getOutgoingConnectionCoordinates().push(i),n.getIncomingConnectionCoordinates().length=0,n.getIncomingConnectionCoordinates().push(i);let a=new Za;for(let r of e.getIncomingSegmentDependencies()){let e=r.getSource();e!==null&&(oo(a,t,e),oo(a,n,e))}for(let r of e.getOutgoingSegmentDependencies()){let e=r.getTarget();e!==null&&(oo(a,t,e),oo(a,n,e))}a.dependencies+=2;let o=e.getSplitBy();return o!==null&&(a.crossings+=so(t,o),a.crossings+=so(o,n)),a}function oo(e,t,n){let r=so(t,n),i=so(n,t);r===i?r>0&&(e.dependencies+=2,e.crossings+=r):(e.dependencies+=1,e.crossings+=Math.min(r,i))}function so(e,t){return xo(e.getOutgoingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate())+xo(t.getIncomingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate())}function co(e,t,n,r){return t.crossings<r.crossings||t.crossings===r.crossings&&(t.dependencies<r.dependencies||t.dependencies===r.dependencies&&e.size>n.size)}function lo(e,t,n){let r=e[t];if(e.splice(t,1),r.size/2>=n){let i=t,a=po(r),o=a-n;r.startPosition<=o&&e.splice(i++,0,new Xa(r.startPosition,o));let s=a+n;s<=r.endPosition&&e.splice(i,0,new Xa(s,r.endPosition))}}function uo(e,t){return(e+t)/2}function fo(e){return uo(e.getStartCoordinate(),e.getEndCoordinate())}function po(e){return uo(e.startPosition,e.endPosition)}function mo(e,t,n){if(e.length===0)return;let r=Qa(t,n),i=[...$a(e)].sort((e,t)=>e.getLength()-t.getLength());for(let e of i)eo(e,t,r,n)}const ho={sourceSide:`NORTH`,targetSide:`SOUTH`,positionFn:_o},go={sourceSide:`SOUTH`,targetSide:`NORTH`,positionFn:_o};function _o(e){return e.getNode().position.x+e.getPosition().x+e.getAnchor().x}const vo=.2;var yo=class{criticalConflictThreshold=0;edgeSpacing;conflictThreshold;constructor(e){this.edgeSpacing=e,this.conflictThreshold=.5*e}edgeSegmentsScratch=[];portToEdgeSegmentMapScratch=/* @__PURE__ */ new Map;incomingCoordsScratch=[];outgoingCoordsScratch=[];routeEdgesSlotCount(e,t,n){return this.routeEdgesInternal(e,t,n,NaN)}routeEdges(e,t,n,r){return this.routeEdgesInternal(e,t,r,n)}routeEdgesInternal(e,t,n,r){let i=this.edgeSegmentsScratch;i.length=0;let a=this.portToEdgeSegmentMapScratch;if(a.clear(),this.createHyperEdgeSegments(e,`EAST`,i,a),this.createHyperEdgeSegments(t,`WEST`,i,a),i.length===0)return 0;this.criticalConflictThreshold=vo*this.minimumHorizontalSegmentDistance(i);let o=0,s=!1;for(let e=0;e<i.length-1;e++){let t=i[e];for(let n=e+1;n<i.length;n++)o+=this.createDependencyIfNecessary(t,i[n]),!s&&(t.getOutgoingSegmentDependencies().length>0||i[n].getOutgoingSegmentDependencies().length>0)&&(s=!0)}s&&(o>=2&&mo(Ha.detectCycles(i,!0,n),i,this.criticalConflictThreshold),Co(i,n)),So(i);let c=-1;for(let e of i)Math.abs(e.getStartCoordinate()-e.getEndCoordinate())<.001||(c=Math.max(c,e.getRoutingSlot()),Number.isNaN(r)||this.calculateBendPoints(e,r,this.edgeSpacing));return c+1}calculateBendPoints(e,t,n){if(e.isDummy())return;let r=t+e.getRoutingSlot()*n;for(let i of e.getPorts()){let a=i.getNode().position.y+i.getPosition().y+i.getAnchor().y;for(let o of i.getOutgoingEdges()){if(o.isSelfLoop())continue;let i=o.getTarget(),s=i.getNode().position.y+i.getPosition().y+i.getAnchor().y;if(Math.abs(a-s)>.001){let i=r;o.getBendPoints().push({x:i,y:a});let c=e.getSplitPartner();if(c!==null){let e=c.getIncomingConnectionCoordinates()[0];o.getBendPoints().push({x:i,y:e}),i=t+c.getRoutingSlot()*n,o.getBendPoints().push({x:i,y:e})}o.getBendPoints().push({x:i,y:s})}}}}createHyperEdgeSegments(e,t,n,r,i=qa,a=Ka){if(e!=null)for(let o of e)for(let e of o.getPorts()){if(e.getSide()!==t||e.getOutgoingEdges().length===0)continue;let o=r.get(e);o===void 0&&(o=new Ja(i,a),n.push(o),o.addPortPositions(e,r))}}routeEdgesForDirection(e,t,n,r,i,a,o=NaN){let s=this.edgeSegmentsScratch;s.length=0;let c=this.portToEdgeSegmentMapScratch;if(c.clear(),this.createHyperEdgeSegments(e??[],r,s,c,a,r),this.createHyperEdgeSegments(t??[],i,s,c,a,r),s.length===0)return 0;this.criticalConflictThreshold=vo*this.minimumHorizontalSegmentDistance(s);let l=0,u=!1;for(let e=0;e<s.length-1;e++){let t=s[e];for(let n=e+1;n<s.length;n++)l+=this.createDependencyIfNecessary(t,s[n]),!u&&(t.getOutgoingSegmentDependencies().length>0||s[n].getOutgoingSegmentDependencies().length>0)&&(u=!0)}u&&(l>=2&&mo(Ha.detectCycles(s,!0,n),s,this.criticalConflictThreshold),Co(s,n)),So(s);let d=-1;for(let e of s)Math.abs(e.getStartCoordinate()-e.getEndCoordinate())<.001||(d=Math.max(d,e.getRoutingSlot()),Number.isNaN(o)||this.calculateBendPointsForDirection(e,o,this.edgeSpacing,r));return d+1}calculateBendPointsForDirection(e,t,n,r){if(e.isDummy())return;let i=r===`NORTH`,a=t+(i?-1:1)*e.getRoutingSlot()*n;for(let r of e.getPorts()){let o=_o(r);for(let s of r.getOutgoingEdges()){if(s.isSelfLoop())continue;let r=s.getTarget();if(r==null)continue;let c=_o(r);if(Math.abs(o-c)<=.001)continue;let l=a;s.getBendPoints().push({x:o,y:l});let u=e.getSplitPartner();if(u!==null){let e=u.getIncomingConnectionCoordinates()[0];e!==void 0&&(s.getBendPoints().push({x:e,y:l}),l=t+(i?-1:1)*u.getRoutingSlot()*n,s.getBendPoints().push({x:e,y:l}))}s.getBendPoints().push({x:c,y:l})}}}createDependencyIfNecessary(e,t){if(Math.abs(e.getStartCoordinate()-e.getEndCoordinate())<.001||Math.abs(t.getStartCoordinate()-t.getEndCoordinate())<.001)return 0;let n=this.countConflicts(e.getOutgoingConnectionCoordinates(),t.getIncomingConnectionCoordinates()),r=this.countConflicts(t.getOutgoingConnectionCoordinates(),e.getIncomingConnectionCoordinates());if(n===-1||r===-1){let i=0;return n===-1&&(K.createAndAddCritical(t,e),i++),r===-1&&(K.createAndAddCritical(e,t),i++),i}{let i=xo(e.getOutgoingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate())+xo(t.getIncomingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate()),a=xo(t.getOutgoingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate())+xo(e.getIncomingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate()),o=1*n+16*i,s=1*r+16*a;return o<s?K.createAndAddRegular(e,t,s-o):o>s?K.createAndAddRegular(t,e,o-s):o>0&&s>0&&(K.createAndAddRegular(e,t,0),K.createAndAddRegular(t,e,0)),0}}countConflicts(e,t){let n=0;if(e.length>0&&t.length>0){let r=0,i=0,a=e[0],o=t[0],s=!0;do{if(a>o-this.criticalConflictThreshold&&a<o+this.criticalConflictThreshold)return-1;a>o-this.conflictThreshold&&a<o+this.conflictThreshold&&n++,a<=o&&r+1<e.length?a=e[++r]:o<=a&&i+1<t.length?o=t[++i]:s=!1}while(s)}return n}minimumHorizontalSegmentDistance(e){let t=this.incomingCoordsScratch,n=this.outgoingCoordsScratch;t.length=0,n.length=0;for(let r of e)t.push(...r.getIncomingConnectionCoordinates()),n.push(...r.getOutgoingConnectionCoordinates());return Math.min(bo(t),bo(n))}};function bo(e){e.sort((e,t)=>e-t);let t=Number.MAX_VALUE;if(e.length>=2)for(let n=1;n<e.length;n++)e[n]!==e[n-1]&&(t=Math.min(t,e[n]-e[n-1]));return t}function xo(e,t,n){let r=0;for(let i=0;i<e.length;i++){let a=e[i];if(a>n)break;a>=t&&r++}return r}function So(e){let t=[],n=[];for(let r of e)r.setInWeight(r.getIncomingSegmentDependencies().length),r.setOutWeight(r.getOutgoingSegmentDependencies().length),r.getInWeight()===0&&t.push(r),r.getOutWeight()===0&&r.getIncomingConnectionCoordinates().length===0&&n.push(r);let r=-1,i=0;for(;i<t.length;){let e=t[i++];r=Math.max(r,e.getRoutingSlot());for(let n of e.getOutgoingSegmentDependencies()){let i=n.getTarget();i.setRoutingSlot(Math.max(i.getRoutingSlot(),e.getRoutingSlot()+1)),r=Math.max(r,i.getRoutingSlot()),i.setInWeight(i.getInWeight()-1),i.getInWeight()===0&&t.push(i)}}if(r>-1){for(let e of n)e.setRoutingSlot(r);let e=0;for(;e<n.length;){let t=n[e++];for(let e of t.getIncomingSegmentDependencies()){let r=e.getSource();r.getIncomingConnectionCoordinates().length>0||(r.setRoutingSlot(Math.min(r.getRoutingSlot(),t.getRoutingSlot()-1)),r.setOutWeight(r.getOutWeight()-1),r.getOutWeight()===0&&n.push(r))}}}return r+1}function Co(e,t){let n=Ha.detectCycles(e,!1,t);for(let e of n)e.getWeight()===0?e.remove():e.reverse()}var wo=class{process(e){let t=e.getProperty(kn),n=e.getProperty(wt),r=e.getProperty(_n),i=new yo(n),a=0,o=e.getLayers(),s=e=>e.length>0&&e.every(e=>e.getType().toString()===`EXTERNAL_PORT`&&(e.getProperty(j)===`WEST`||e.getProperty(j)===`EAST`)),c=null;for(let l=0;l<=o.length;l++){let u=l<o.length?o[l].getNodes():null;c!==null&&(Va(o[l-1],a),a+=o[l-1].getSize().x);let d=c===null?a:a+r,f=e.getProperty(P),p=i.routeEdges(c,u,d,f),m=c===null||s(c),h=u===null||s(u);if(p>0){let e=(p-1)*n;c!==null&&(e+=r),u!==null&&(e+=r),e<t&&!m&&!h&&(e=t),a+=e}else!m&&!h&&(a+=t);c=u}let l=a;for(let e of o)for(let t of e.getNodes())l=Math.max(l,t.position.x+t.size.x);e.getSize().x=l}},To=class{startPos=-1/0;delta=0;deltaNormalized=0;cNodes;incomingConstraints;outDegree=0;reference=null;id=0;reposition=!0;constructor(...e){this.cNodes=/* @__PURE__ */ new Set,this.incomingConstraints=/* @__PURE__ */ new Set,this.outDegree=0;for(let t of e)this.reference===null&&(this.reference=t),this.addCNode(t)}addCNode(e){if(e.cGroup!==null)throw Error(`CNode belongs to another CGroup.`);this.cNodes.add(e),e.cGroup=this}removeCNode(e){let t=this.cNodes.delete(e);return t&&(e.cGroup=null),t}},Eo=class{cNodes=[];cGroups=[];predefinedHorizontalConstraints=[];supportedDirections;constructor(e){this.supportedDirections=new Set(e)}supports(e){return this.supportedDirections.has(e)}};const Do={getHorizontalSpacing(e,t){return Math.max(e.getHorizontalSpacing(),t.getHorizontalSpacing())},getVerticalSpacing(e,t){return Math.max(e.getVerticalSpacing(),t.getVerticalSpacing())}};function Oo(e,t){return Math.abs(e-t)<=1e-4?0:e<t?-1:1}const ko={eq(e,t){return Oo(e,t)===0},gt(e,t){return Oo(e,t)>0},lt(e,t){return Oo(e,t)<0},ge(e,t){return Oo(e,t)>=0},le(e,t){return Oo(e,t)<=0}};function Ao(e,t,n){let r=[...e];r.sort(t);for(let e of r)n.handle(e)}var jo=class{compact(e){let t=1/0;for(let n of e.cGraph.cNodes)t=Math.min(t,n.cGroup.reference.hitbox.x+n.cGroupOffset.x);let n=[];for(let r of e.cGraph.cGroups)r.startPos=t,r.outDegree===0&&n.push(r);for(;n.length>0;){let t=n.shift(),r=t.reference.hitbox.x;for(let e of t.cNodes){let n=t.startPos+e.cGroupOffset.x;e.startPos=e.cGroup.reposition||e.getPosition()<n?n:e.hitbox.x}r-=t.reference.startPos,t.delta+=r,e.direction===`RIGHT`||e.direction===`DOWN`?t.deltaNormalized+=r:t.deltaNormalized-=r;for(let r of t.cNodes)for(let t of r.constraints){let i=e.direction===`LEFT`||e.direction===`RIGHT`?e.spacingsHandler.getHorizontalSpacing(r,t):e.spacingsHandler.getVerticalSpacing(r,t);t.cGroup.startPos=Math.max(t.cGroup.startPos,r.startPos+r.hitbox.width+i-t.cGroupOffset.x),t.reposition||(t.cGroup.startPos=Math.max(t.cGroup.startPos,t.getPosition()-t.cGroupOffset.x)),t.cGroup.outDegree--,t.cGroup.outDegree===0&&n.push(t.cGroup)}}for(let t of e.cGraph.cNodes)t.applyPosition()}},Mo=class{calculateConstraints(e){for(let t of e.cGraph.cNodes)t.constraints.length=0;for(let t of e.cGraph.cNodes)for(let n of e.cGraph.cNodes){if(t===n||t.cGroup!==null&&t.cGroup===n.cGroup)continue;let r=e.direction===`LEFT`||e.direction===`RIGHT`?e.spacingsHandler.getVerticalSpacing(t,n):e.spacingsHandler.getHorizontalSpacing(t,n);t!==n.parentNode&&(n.hitbox.x>t.hitbox.x||t.hitbox.x===n.hitbox.x&&t.hitbox.width<n.hitbox.width)&&ko.gt(n.hitbox.y+n.hitbox.height+r,t.hitbox.y)&&ko.lt(n.hitbox.y,t.hitbox.y+t.hitbox.height+r)&&t.constraints.push(n)}}},No=class e{static EPSILON=.5;compactor;calculateConstraints(e){this.compactor=e,this.sweep(()=>!0,()=>0)}sweep(e,t){this.blowUpHitboxes(e,t);let n=[];for(let t of this.compactor.cGraph.cNodes)e(t)&&(n.push(new Po(t,!0)),n.push(new Po(t,!1)));let r=0;for(let t of this.compactor.cGraph.cNodes)e(t)&&(t.id=r++);this.handler.reset(this.compactor.cGraph.cNodes.length),Ao(n,Io,this.handler),this.normalizeHitboxes(e,t)}blowUpHitboxes(t,n){for(let r of this.compactor.cGraph.cNodes){if(!t(r))continue;let i=n(r);i>0&&((this.compactor.direction===`LEFT`||this.compactor.direction===`RIGHT`?r.spacingIgnore.up:r.spacingIgnore.left)||(r.hitbox.y-=Math.max(0,i/2-e.EPSILON)),(this.compactor.direction===`LEFT`||this.compactor.direction===`RIGHT`?r.spacingIgnore.down:r.spacingIgnore.right)||(r.hitbox.height+=Math.max(0,i-2*e.EPSILON)))}}normalizeHitboxes(t,n){for(let r of this.compactor.cGraph.cNodes){if(!t(r))continue;let i=n(r);i>0&&((this.compactor.direction===`LEFT`||this.compactor.direction===`RIGHT`?r.spacingIgnore.up:r.spacingIgnore.left)||(r.hitbox.y+=Math.max(0,i/2-e.EPSILON)),(this.compactor.direction===`LEFT`||this.compactor.direction===`RIGHT`?r.spacingIgnore.down:r.spacingIgnore.right)||(r.hitbox.height-=i-2*e.EPSILON))}}handler=new Lo},Po=class{node;low;constructor(e,t){this.node=e,this.low=t}};function Fo(e){return e.low?e.node.hitbox.y:e.node.hitbox.y+e.node.hitbox.height}const Io=(e,t)=>{let n=Fo(e)-Fo(t);if(n===0){if(!e.low&&t.low)return-1;if(!t.low&&e.low)return 1}return n};var Lo=class{intervals=[];cand=[];reset(e){this.intervals=[],this.cand=Array(e)}handle(e){e.low?this.insert(e):this.delete(e)}insert(e){this.intervals.push(e.node),this.intervals.sort((e,t)=>e.hitbox.x+e.hitbox.width/2-(t.hitbox.x+t.hitbox.width/2)),this.cand[e.node.id]=this.lower(e.node);let t=this.higher(e.node);t!==null&&(this.cand[t.id]=e.node)}delete(e){let t=this.lower(e.node);t!==null&&t===this.cand[e.node.id]&&t.cGroup!==null&&t.cGroup!==e.node.cGroup&&t.constraints.push(e.node);let n=this.higher(e.node);n!==null&&this.cand[n.id]===e.node&&n.cGroup!==null&&n.cGroup!==e.node.cGroup&&e.node.constraints.push(n),this.intervals.splice(this.intervals.indexOf(e.node),1)}lower(e){let t=e.hitbox.x+e.hitbox.width/2,n=null;for(let r of this.intervals){let i=r.hitbox.x+r.hitbox.width/2;if(i<t)n=r;else if((i!==t||r===e||n!==null)&&i>t)break}return n}higher(e){let t=e.hitbox.x+e.hitbox.width/2;for(let e of this.intervals)if(e.hitbox.x+e.hitbox.width/2>t)return e;return null}},Ro=class e{static LONGEST_PATH_COMPACTION=new jo;static SCANLINE_CONSTRAINTS=new No;static QUADRATIC_CONSTRAINTS=new Mo;compactionAlgorithm=e.LONGEST_PATH_COMPACTION;constraintAlgorithm=e.SCANLINE_CONSTRAINTS;cGraph;direction=`UNDEFINED`;lockingStrategy;finished=!1;spacingsHandler=Do;constructor(e){this.cGraph=e,this.lockingStrategy=e=>e.first.cGroup.outDegree!==0,this.calculateGroupOffsets();for(let t of e.cNodes)if(t.cGroup===null){let n=new To(t);e.cGroups.push(n)}}setSpacingsHandler(e){return this.spacingsHandler=e,this}setCompactionAlgorithm(e){return this.compactionAlgorithm=e,this}setConstraintAlgorithm(e){return this.constraintAlgorithm=e,this}compact(){if(this.finished)throw Error(`The OneDimensionalCompactor instance has been finished already.`);this.direction===`UNDEFINED`&&this.changeDirection(`LEFT`);for(let e of this.cGraph.cNodes)e.hitboxPreCompaction={...e.hitbox};for(let e of this.cGraph.cGroups)e.outDegree=0;for(let e of this.cGraph.cNodes){e.startPos=-1/0;for(let t of e.constraints)t.cGroup.outDegree++}this.compactionAlgorithm.compact(this);for(let e of this.cGraph.cNodes)e.reposition=!0;return this}finish(){return this.changeDirection(`LEFT`),this.finished=!0,this}changeDirection(e){if(this.finished)throw Error(`The OneDimensionalCompactor instance has been finished already.`);if(!this.cGraph.supports(e))throw Error(`The direction ${e} is not supported by the CGraph instance.`);if(e===this.direction)return this;let t=this.direction;switch(this.direction=e,t){case`UNDEFINED`:e===`LEFT`?this.calculateConstraints():e===`RIGHT`?(this.mirrorHitboxes(),this.calculateConstraints()):e===`UP`?(this.transposeHitboxes(),this.calculateConstraints()):e===`DOWN`&&(this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints());break;case`LEFT`:e===`RIGHT`?(this.mirrorHitboxes(),this.reverseConstraints()):e===`UP`?(this.transposeHitboxes(),this.calculateConstraints()):e===`DOWN`&&(this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints());break;case`RIGHT`:e===`LEFT`?(this.mirrorHitboxes(),this.reverseConstraints()):e===`UP`?(this.mirrorHitboxes(),this.transposeHitboxes(),this.calculateConstraints()):e===`DOWN`&&(this.mirrorHitboxes(),this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints());break;case`UP`:e===`LEFT`?(this.transposeHitboxes(),this.calculateConstraints()):e===`RIGHT`?(this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints()):e===`DOWN`&&(this.mirrorHitboxes(),this.reverseConstraints());break;case`DOWN`:e===`LEFT`?(this.mirrorHitboxes(),this.transposeHitboxes(),this.calculateConstraints()):e===`RIGHT`?(this.mirrorHitboxes(),this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints()):e===`UP`&&(this.mirrorHitboxes(),this.reverseConstraints())}return this}setLockingStrategy(e){return this.lockingStrategy=e,this}applyLockingStrategy(e){let t=e??this.direction;for(let e of this.cGraph.cGroups)e.reposition=!0;for(let e of this.cGraph.cNodes)e.reposition=this.lockingStrategy({first:e,second:t}),e.cGroup.reposition=e.cGroup.reposition&&e.reposition;return this}forceConstraintsRecalculation(){return this.calculateConstraints(),this}calculateGroupOffsets(){for(let e of this.cGraph.cGroups){e.reference=null;for(let t of e.cNodes)t.cGroupOffset.x=0,t.cGroupOffset.y=0,(e.reference===null||t.hitbox.x<e.reference.hitbox.x)&&(e.reference=t);for(let t of e.cNodes)t.cGroupOffset.x=t.hitbox.x-e.reference.hitbox.x,t.cGroupOffset.y=t.hitbox.y-e.reference.hitbox.y}return this}mirrorHitboxes(){for(let e of this.cGraph.cNodes)e.hitbox.x=-e.hitbox.x-e.hitbox.width,e.parentNode!==null&&(e.cGroupOffset.x=-e.cGroupOffset.x+e.parentNode.hitbox.width);this.calculateGroupOffsets()}transposeHitboxes(){for(let e of this.cGraph.cNodes){let t=e.hitbox.x;e.hitbox.x=e.hitbox.y,e.hitbox.y=t,t=e.hitbox.width,e.hitbox.width=e.hitbox.height,e.hitbox.height=t,t=e.cGroupOffset.x,e.cGroupOffset.x=e.cGroupOffset.y,e.cGroupOffset.y=t}this.calculateGroupOffsets()}calculateConstraints(){for(let e of this.cGraph.cNodes)e.constraints.length=0;let e=this.cGraph.predefinedHorizontalConstraints;for(let[t,n]of e)this.direction===`LEFT`||this.direction===`UP`?t.constraints.push(n):n.constraints.push(t);this.constraintAlgorithm.calculateConstraints(this),this.calculateConstraintsForCGroups()}calculateConstraintsForCGroups(){for(let e of this.cGraph.cGroups)e.outDegree=0,e.incomingConstraints.clear();for(let e of this.cGraph.cGroups)for(let t of e.cNodes)for(let n of t.constraints)n.cGroup!==e&&(e.incomingConstraints.add(n),n.cGroup.outDegree++)}reverseConstraints(){let e=/* @__PURE__ */ new Map;for(let t of this.cGraph.cNodes)e.set(t,[]);for(let t of this.cGraph.cNodes){t.startPos=-1/0;for(let n of t.constraints)e.get(n).push(t)}for(let t of this.cGraph.cNodes)t.constraints=e.get(t);this.calculateConstraintsForCGroups()}},zo=class{left=!1;right=!1;up=!1;down=!1;constructor(e=!1,t=!1,n=!1,r=!1){this.set(e,t,n,r)}set(e,t,n,r){typeof t==`boolean`?(this.left=e,this.right=t,this.up=n??!1,this.down=r??!1):this.setDirection(e,t)}setDirection(e,t){switch(t){case`LEFT`:this.left=e;break;case`RIGHT`:this.right=e;break;case`UP`:this.up=e;break;case`DOWN`:this.down=e}}applyOr(e){this.left=this.left||e.left,this.right=this.right||e.right,this.up=this.up||e.up,this.down=this.down||e.down}get(e){switch(e){case`LEFT`:return this.left;case`RIGHT`:return this.right;case`UP`:return this.up;case`DOWN`:return this.down;default:return!1}}},Bo=class{cGroup=null;parentNode=null;constraints=[];hitbox={x:0,y:0,width:0,height:0};hitboxPreCompaction=null;cGroupOffset=wn(0,0);startPos=-1/0;reposition=!0;lock=new zo;spacingIgnore=new zo;id=0;getPosition(){return this.hitbox.x}applyPosition(){this.hitbox.x=this.startPos}},q=class extends Bo{lNode;constructor(e){super(),this.lNode=e;let t=e.getMargin(),n=e.getPosition(),r=e.getSize();this.hitbox={x:n.x-t.left,y:n.y-t.top,width:r.x+t.left+t.right,height:r.y+t.top+t.bottom}}getHorizontalSpacing(){return 0}getVerticalSpacing(){return 0}applyElementPosition(){this.lNode.getPosition().x=this.hitbox.x+this.lNode.getMargin().left}getElementPosition(){return this.hitbox.x}},J=class extends Bo{vs;constructor(e){super(),this.vs=e,this.hitbox={...e.hitbox}}getHorizontalSpacing(){return 0}getVerticalSpacing(){return 0}applyElementPosition(){let e=this.hitboxPreCompaction,t=e===null?0:this.hitbox.x-e.x;for(let e of this.vs.affectedBends)e.x+=t;for(let e of this.vs.affectedBoundingBoxes)e.x+=t;for(let e of this.vs.junctionPoints)e.x+=t}getElementPosition(){return this.hitbox.x}};const Vo=.01;var Ho=class extends No{graph;verticalEdgeEdgeSpacing;edgeRouting;constructor(e){super(),this.graph=e,this.verticalEdgeEdgeSpacing=e.getProperty(n),this.edgeRouting=e.getProperty(s)}calculateConstraints(e){this.compactor=e,this.edgeRouting===`SPLINES`?this.calculateForSpline():this.calculateForOrthogonal()}alterHitbox(e,t,n){let r=t*n;if(e instanceof J){let t=e.vs;t.ignoreSpacing.up?t.ignoreSpacing.down||(e.hitbox.height+=r+Vo):(e.hitbox.y-=r+Vo,e.hitbox.height+=r+Vo)}else e instanceof q&&(e.hitbox.y-=r,e.hitbox.height+=2*r)}alterGroupedHitboxOrthogonal(e,t,n){let r=null;for(let t of e.cNodes)if(t instanceof q){r=t;break}if(r===null&&(r=e.cNodes.values().next().value??null),r===null||(this.alterHitbox(r,t,n),e.cNodes.size===1))return;let i=t*n;for(let t of e.cNodes){if(t===r||!(t instanceof J))continue;let e=t.vs;e.ignoreSpacing.up?(t.hitbox.y+=i+Vo,t.hitbox.height-=i+Vo):e.ignoreSpacing.down&&(t.hitbox.height-=i+Vo)}}calculateForSpline(){this.sweep(e=>e instanceof J,()=>0);let e=1/0;for(let t of this.compactor.cGraph.cNodes)if(!(t instanceof q&&t.lNode.getType()===`EXTERNAL_PORT`)){if(t instanceof J)e=Math.min(e,Math.max(0,this.verticalEdgeEdgeSpacing/2-No.EPSILON));else if(t instanceof q){let t=this.graph.getProperty(Zt);e=Math.min(e,Math.max(0,t/2-No.EPSILON))}}Number.isFinite(e)||(e=0);let t=[];for(let n of this.compactor.cGraph.cNodes)n instanceof q&&(this.alterHitbox(n,e,1),t.push([n,e]));this.sweep(e=>!0,()=>0);for(let[e,n]of t)this.alterHitbox(e,n,-1)}calculateForOrthogonal(){let e=[];for(let t of this.compactor.cGraph.cNodes)if(t instanceof J){let n=Math.max(0,this.verticalEdgeEdgeSpacing/2-No.EPSILON);this.alterHitbox(t,n,1),e.push([t,n])}this.sweep(e=>e instanceof J,()=>0);for(let[t,n]of e)this.alterHitbox(t,n,-1);let t=[];for(let e of this.compactor.cGraph.cNodes)if(e instanceof q){let r=Math.max(0,this.graph.getProperty(n)/2-No.EPSILON);this.alterHitbox(e,r,1),t.push([e,r])}this.sweep(e=>e instanceof q,()=>0);for(let[e,n]of t)this.alterHitbox(e,n,-1);let r=1/0;for(let e of this.compactor.cGraph.cNodes)e instanceof q&&e.lNode.getType()===`EXTERNAL_PORT`||(e instanceof J?r=Math.min(r,Math.max(0,this.verticalEdgeEdgeSpacing/2-No.EPSILON)):e instanceof q&&(r=Math.min(r,Math.max(0,this.graph.getProperty(Zt)/2-No.EPSILON))));Number.isFinite(r)||(r=0);let i=[];for(let e of this.compactor.cGraph.cGroups)this.alterGroupedHitboxOrthogonal(e,r,1),i.push([e,r]);this.sweep(e=>!0,()=>0);for(let[e,t]of i)this.alterGroupedHitboxOrthogonal(e,t,-1)}},Uo=class{potentialGroupParents=[];representedLEdges=[];affectedBends=[];affectedBoundingBoxes=[];hitbox={x:0,y:0,width:0,height:0};junctionPoints=[];ignoreSpacing=new zo;constraints=[];aPort=null;joined=[];constructor(e,t,n,r){this.affectedBends.push(e),this.affectedBends.push(t),this.hitbox.x=Math.min(e.x,t.x),this.hitbox.y=Math.min(e.y,t.y),this.hitbox.width=Math.abs(e.x-t.x),this.hitbox.height=Math.abs(e.y-t.y),n!==null&&this.potentialGroupParents.push(n),this.representedLEdges.push(r)}joinWith(e){this.representedLEdges.push(...e.representedLEdges),this.affectedBends.push(...e.affectedBends),this.affectedBoundingBoxes.push(...e.affectedBoundingBoxes),this.junctionPoints.push(...e.junctionPoints),this.constraints.push(...e.constraints),this.potentialGroupParents.push(...e.potentialGroupParents);let t=Math.min(this.hitbox.x,e.hitbox.x),n=Math.min(this.hitbox.y,e.hitbox.y),r=Math.max(this.hitbox.x+this.hitbox.width,e.hitbox.x+e.hitbox.width),i=Math.max(this.hitbox.y+this.hitbox.height,e.hitbox.y+e.hitbox.height);return this.hitbox={x:t,y:n,width:r-t,height:i-n},this.ignoreSpacing.applyOr(e.ignoreSpacing),this.aPort===null&&(this.aPort=e.aPort),this.joined.push(...e.joined),this.joined.push(e),this}intersects(e){return ko.eq(this.hitbox.x,e.hitbox.x)&&!(ko.lt(this.hitbox.y+this.hitbox.height,e.hitbox.y)||ko.lt(e.hitbox.y+e.hitbox.height,this.hitbox.y))}compareTo(e){let t=ko.eq(this.hitbox.x,e.hitbox.x)?0:this.hitbox.x<e.hitbox.x?-1:1;return t===0?this.hitbox.y-e.hitbox.y:t}},Wo=class{cGraph;layeredGraph;edgeRouting;nodesMap=/* @__PURE__ */ new Map;verticalSegmentsMap=/* @__PURE__ */ new Map;lockMap=/* @__PURE__ */ new Map;transform(e){return this.layeredGraph=e,this.edgeRouting=e.getProperty(s),this.cGraph=new Eo([`LEFT`,`RIGHT`]),this.nodesMap=/* @__PURE__ */ new Map,this.verticalSegmentsMap=/* @__PURE__ */ new Map,this.lockMap=/* @__PURE__ */ new Map,this.transformNodes(),this.transformEdges(),this.cGraph}getLockMap(){return this.lockMap}transformNodes(){let e=0;for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes()){let t=new q(n);t.id=e++,this.cGraph.cNodes.push(t);let r=new To(t);this.cGraph.cGroups.push(r);let i=new zo;this.lockMap.set(t,i);let a=n.getIncomingEdges().length-n.getOutgoingEdges().length;a<0?i.set(!0,`LEFT`):a>0&&i.set(!0,`RIGHT`),n.getType()===`EXTERNAL_PORT`&&i.set(!1,!1,!1,!1),this.nodesMap.set(n,t)}}transformEdges(){let e;e=this.edgeRouting===`ORTHOGONAL`?this.collectVerticalSegmentsOrthogonal():this.edgeRouting===`SPLINES`?this.collectVerticalSegmentsSplines():[],this.mergeVerticalSegments(e);for(let[e,t]of this.verticalSegmentsMap)for(let n of e.constraints){let e=this.verticalSegmentsMap.get(n);e&&this.cGraph.predefinedHorizontalConstraints.push([t,e])}}collectVerticalSegmentsOrthogonal(){let e=[];for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes()){let t=this.nodesMap.get(n);if(t){for(let r of n.getOutgoingEdges()){let n=r.getBendPoints();if(n.length===0)continue;let i=!0,a=null,o=n[0],s=null,c=r.getSource();if(c.getSide()===`NORTH`){let n=new Uo(o,{x:o.x,y:t.hitbox.y},t,r);n.ignoreSpacing.down=!0,n.aPort=c,e.push(n)}if(c.getSide()===`SOUTH`){let n=new Uo(o,{x:o.x,y:t.hitbox.y+t.hitbox.height},t,r);n.ignoreSpacing.up=!0,n.aPort=c,e.push(n)}for(let c=1;c<n.length;c++)s=n[c],ko.eq(o.y,s.y)||(a=new Uo(o,s,null,r),e.push(a),i&&(i=!1,s.y<t.hitbox.y?a.ignoreSpacing.down=!0:s.y>t.hitbox.y+t.hitbox.height?a.ignoreSpacing.up=!0:(a.ignoreSpacing.up=!0,a.ignoreSpacing.down=!0))),c+1<n.length&&(o=s);if(a!==null){let e=this.nodesMap.get(r.getTarget().getNode());e&&(o.y<e.hitbox.y?a.ignoreSpacing.down=!0:o.y>e.hitbox.y+e.hitbox.height?a.ignoreSpacing.up=!0:(a.ignoreSpacing.up=!0,a.ignoreSpacing.down=!0))}}for(let r of n.getIncomingEdges()){let n=r.getBendPoints();if(n.length===0)continue;let i=n[n.length-1],a=r.getTarget();if(a.getSide()===`NORTH`){let n=new Uo(i,{x:i.x,y:t.hitbox.y},t,r);n.ignoreSpacing.down=!0,n.aPort=a,e.push(n)}if(a.getSide()===`SOUTH`){let n=new Uo(i,{x:i.x,y:t.hitbox.y+t.hitbox.height},t,r);n.ignoreSpacing.up=!0,n.aPort=a,e.push(n)}}}}return e}collectVerticalSegmentsSplines(){let e=[];this.cGraph.cNodes.length;for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes())for(let t of n.getOutgoingEdges()){let n=t.getProperty(g);if(!n||n.length===0)continue;let r=null;for(let t of n){if(t.isStraight)continue;let n=new Uo({x:t.boundingBox.x,y:t.boundingBox.y},{x:t.boundingBox.x+t.boundingBox.width,y:t.boundingBox.y+t.boundingBox.height},null,t.edges[0]);n.affectedBoundingBoxes.push(t.boundingBox),e.push(n),r!==null&&r.constraints.push(n),r=n}}return e}mergeVerticalSegments(e){if(e.length===0)return;e.sort((e,t)=>e.compareTo(t));let t=e[0];for(let n=1;n<e.length;n++){let r=e[n];t.intersects(r)?t.joinWith(r):(this.verticalSegmentToCNode(t),t=r)}this.verticalSegmentToCNode(t)}verticalSegmentToCNode(e){let t=new J(e);if(t.id=this.cGraph.cNodes.length,this.cGraph.cNodes.push(t),e.potentialGroupParents.length>0){let n=e.potentialGroupParents[0].cGroup;n&&n.addCNode(t)}else{let e=new To(t);this.cGraph.cGroups.push(e)}let n=new zo;this.lockMap.set(t,n);let r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set;for(let t of e.representedLEdges)t.getSource()&&r.add(t.getSource().id),t.getTarget()&&i.add(t.getTarget().id);let a=r.size-i.size;a<0?(n.set(!0,`LEFT`),n.set(!1,`RIGHT`)):a>0&&(n.set(!1,`LEFT`),n.set(!0,`RIGHT`));for(let n of e.joined)this.verticalSegmentsMap.set(n,t);this.verticalSegmentsMap.set(e,t)}applyLayout(){for(let e of this.cGraph.cNodes)e instanceof q&&e.applyElementPosition();for(let e of this.cGraph.cNodes)e instanceof J&&e.applyElementPosition();if(this.edgeRouting===`SPLINES`){for(let e of this.layeredGraph.getLayers())for(let t of e.getNodes())for(let e of t.getOutgoingEdges()){if(!e.isSelfLoop())continue;let t=e.getSource().getNode(),n=this.nodesMap.get(t);if(n===void 0||n.hitboxPreCompaction===null)continue;let r=n.hitbox.x-n.hitboxPreCompaction.x;for(let t of e.getBendPoints())t.x+=r}for(let e of this.layeredGraph.getLayers())for(let t of e.getNodes())for(let e of t.getOutgoingEdges()){let t=e.getProperty(g);t!=null&&t.length>0&&this.adjustSplineControlPoints(t)}}let e=1/0,t=1/0,n=-1/0,r=-1/0;for(let i of this.cGraph.cNodes)e=Math.min(e,i.hitbox.x),t=Math.min(t,i.hitbox.y),n=Math.max(n,i.hitbox.x+i.hitbox.width),r=Math.max(r,i.hitbox.y+i.hitbox.height);Number.isFinite(e)&&(this.layeredGraph.getOffset().x=-e,this.layeredGraph.getOffset().y=-t,this.layeredGraph.getSize().x=n-e,this.layeredGraph.getSize().y=r-t)}adjustSplineControlPoints(e){if(e.length===0)return;let t=e[0];if(e.length===1){this.adjustControlPointBetweenSegments(t,t,1,0,e);return}let n=1;for(;n<e.length;)if(t.initialSegment||!t.isStraight){let r=this.firstNonStraightSegment(e,n);if(r!==null){let i=r.index,a=r.segment;this.adjustControlPointBetweenSegments(t,a,n,i,e),n=i+1,t=a}}}firstNonStraightSegment(e,t){if(t<0||t>=e.length)return null;for(let n=t;n<e.length;n++){let t=e[n];if(n===e.length-1||!t.isStraight)return{index:n,segment:t}}return null}adjustControlPointBetweenSegments(e,t,n,r,i){let a,o=n;if(e.initialSegment&&e.isStraight){let t=this.nodesMap.get(e.sourceNode);a=t.hitbox.x+t.hitbox.width,o--}else a=e.boundingBox.x+e.boundingBox.width;let s,c=r;t.lastSegment&&t.isStraight?(s=this.nodesMap.get(t.targetNode).hitbox.x,c++):s=t.boundingBox.x;let l=(s-a)/Math.max(2,c-o),u=a+l;for(let e=o;e<c;e++){let t=i[e],n=t.boundingBox.width;t.boundingBox.x=u-n/2,u+=l}}};function Go(e){return e.getOutgoingEdges().length>0}function Ko(e){return e.getIncomingEdges().length>0}function qo(e){return e===`NORTH`||e===`SOUTH`}function Jo(e){return e===`LEFT`||e===`RIGHT`}function Yo(e){return Math.trunc(Math.ceil(e))}var Xo=class{compactor;networkSimplexGraph;nNodes=[];index=0;compact(e){this.compactor=e,this.networkSimplexGraph=new xr,this.nNodes=Array(this.compactor.cGraph.cGroups.length),this.index=0;for(let e of this.compactor.cGraph.cGroups){e.id=this.index;let t=vr().id(this.index).origin(e).create(this.networkSimplexGraph);this.nNodes[this.index]=t,this.index++}this.addSeparationConstraints(),this.addEdgeConstraints(),this.addArtificialSourceNode(),Sr.forGraph(this.networkSimplexGraph).execute();for(let e of this.compactor.cGraph.cNodes)e.hitbox.x=this.nNodes[e.cGroup.id].layer+e.cGroupOffset.x}addSeparationConstraints(){for(let e of this.compactor.cGraph.cNodes)for(let t of e.constraints){if(e.cGroup===t.cGroup)continue;let n=Jo(this.compactor.direction)?this.compactor.spacingsHandler.getHorizontalSpacing(e,t):this.compactor.spacingsHandler.getVerticalSpacing(e,t),r=e.cGroupOffset.x+e.hitbox.width+n-t.cGroupOffset.x;if(r=Math.ceil(r),r=Math.max(0,r),Zo(e,t)){let n=vr().create(this.networkSimplexGraph),r=Yo(t.cGroupOffset.x-e.cGroupOffset.x),i=r-(t.cGroupOffset.x-e.cGroupOffset.x),a=$o(e)?.aPort??null,o=e;a===null&&(a=$o(t)?.aPort??null,i=-i,o=t),a!==null&&(o.cGroupOffset.x-=i,a.getPosition().x-=i),G().delta(Math.max(0,r)).weight(1).source(n).target(this.nNodes[e.cGroup.id]).create(),G().delta(Math.max(0,-r)).weight(1).source(n).target(this.nNodes[t.cGroup.id]).create()}else{let n=1;(e instanceof J&&t instanceof q||t instanceof J&&e instanceof q)&&(n=2),G().delta(r).weight(n).source(this.nNodes[e.cGroup.id]).target(this.nNodes[t.cGroup.id]).create()}}}addEdgeConstraints(){let e=/* @__PURE__ */ new Map,t=/* @__PURE__ */ new Map;for(let n of this.compactor.cGraph.cNodes){let r=Qo(n);if(r!==null)e.set(r,n);else{let e=$o(n);if(e!==null)for(let r of e.representedLEdges){let e=t.get(r);e===void 0?t.set(r,[n]):e.push(n)}}}for(let n of this.compactor.cGraph.cNodes){let r=Qo(n);if(r!==null)for(let i of r.getOutgoingEdges()){if(i.isSelfLoop())continue;let r=i.getSource(),a=i.getTarget();if(r===null||a===null||qo(r.getSide())&&qo(a.getSide()))continue;let o=e.get(a.getNode());if(o!==void 0){if(G().delta(0).weight(100).source(this.nNodes[n.cGroup.id]).target(this.nNodes[o.cGroup.id]).create(),r.getSide()===`WEST`&&Go(r)){for(let e of t.get(i)??[])if(e.hitbox.x<n.hitbox.x){let t=this.nNodes[e.cGroup.id],r=this.nNodes[n.cGroup.id];if(t===r)continue;G().delta(1).weight(100).source(t).target(r).create()}}if(a.getSide()===`EAST`&&Ko(a)){for(let e of t.get(i)??[])if(e.hitbox.x>n.hitbox.x){let t=this.nNodes[n.cGroup.id],r=this.nNodes[e.cGroup.id];if(t===r)continue;G().delta(1).weight(100).source(t).target(r).create()}}}}}}addArtificialSourceNode(){let e=[];for(let t of this.networkSimplexGraph.nodes)t.getIncomingEdges().length===0&&e.push(t);if(e.length>1){let t=vr().id(this.index++).create(this.networkSimplexGraph);for(let n of e)G().delta(1).weight(0).source(t).target(n).create()}}};function Zo(e,t){let n=e instanceof J?e.vs:null,r=t instanceof J?t.vs:null;return n===null||r===null?!1:n.representedLEdges.some(e=>r.representedLEdges.includes(e))}function Qo(e){return e instanceof q?e.lNode:null}function $o(e){return e instanceof J?e.vs:null}var es=class{lGraph;process(e){let t=e.getProperty(Mn);if(t===`NONE`)return;this.lGraph=e;let n=new Wo,r=new Ro(n.transform(e));switch(r.setSpacingsHandler(this.specialSpacingsHandler),e.getProperty(st)===`SCANLINE`?r.setConstraintAlgorithm(new Ho(e)):r.setConstraintAlgorithm(Ro.QUADRATIC_CONSTRAINTS),t){case`LEFT`:r.compact();break;case`RIGHT`:r.changeDirection(`RIGHT`).compact();break;case`LEFT_RIGHT_CONSTRAINT_LOCKING`:r.compact().changeDirection(`RIGHT`).setLockingStrategy(e=>e.first.cGroup.outDegree===0).applyLockingStrategy().compact();break;case`LEFT_RIGHT_CONNECTION_LOCKING`:r.compact().changeDirection(`RIGHT`).setLockingStrategy(e=>n.getLockMap().get(e.first)?.get(e.second)??!1).applyLockingStrategy().compact();break;case`EDGE_LENGTH`:r.setCompactionAlgorithm(new Xo).compact()}r.finish(),n.applyLayout()}specialSpacingsHandler={getHorizontalSpacing:(e,t)=>{if(Zo(e,t))return 0;let n=Qo(e),r=Qo(t);if(n!==null&&n.getType()===`EXTERNAL_PORT`||r!==null&&r.getType()===`EXTERNAL_PORT`)return 0;let i=this.lGraph.getProperty(Rn);return i?i.getHorizontalSpacingByType(n===null?`LONG_EDGE`:n.getType(),r===null?`LONG_EDGE`:r.getType()):0},getVerticalSpacing:(e,t)=>{if(Zo(e,t))return 1;let n=Qo(e),r=Qo(t),i=this.lGraph.getProperty(Rn);return i?i.getVerticalSpacingByType(n===null?`LONG_EDGE`:n.getType(),r===null?`LONG_EDGE`:r.getType()):0}}};const ts=.4;function ns(e,t){return e.x===t.x&&e.y===t.y}var rs=class{createdJunctionPoints=/* @__PURE__ */ new Set;process(e){let t=e.getProperty(Ke),n=e.getProperty(kn),r=e.getProperty(wt),i=Math.min(1,r/n),a=0,o=0,s=e.getLayers();if(s.length>0){let e=this.calculateWestInLayerEdgeYDiff(s[0]);a=ts*i*e}for(let e=0;e<s.length;e++){let r=s[e],c=r.getNodes().length>0&&r.getNodes().every(e=>e.getType()===`EXTERNAL_PORT`),l=e+1<s.length;c&&a>0&&(a-=n),is(r,a);let u=0;for(let e of r.getNodes()){let n=0;for(let t of e.getOutgoingEdges()){let e=t.getSource(),o=t.getTarget();if(!e||!o)continue;let s=e.getAbsoluteAnchor().y,c=o.getAbsoluteAnchor().y;o.getNode()?.getLayer()===r&&!t.isSelfLoop()&&(this.processInLayerEdge(t,a,ts*i*Math.abs(s-c)),e.getSide()===`WEST`&&(s=0,c=0)),n=Math.max(n,Math.abs(c-s))}switch(e.getType()){case`NORMAL`:case`LABEL`:case`LONG_EDGE`:case`NORTH_SOUTH_PORT`:case`BREAKING_POINT`:this.processNode(e,a,t)}u=Math.max(u,n)}if(l){let t=this.calculateWestInLayerEdgeYDiff(s[e+1]);u=Math.max(u,t)}o=ts*i*u,!c&&l&&(o+=n),a+=r.getSize().x+o}this.createdJunctionPoints.clear(),e.getSize().x=a}processNode(e,t,n){let r=t+e.getLayer().getSize().x;for(let i of e.getPorts()){let a={...i.getAbsoluteAnchor()};if(e.getType()===`NORTH_SOUTH_PORT`){let t=i.getProperty(L);t&&(a.x=t.getAbsoluteAnchor().x,e.getPosition().x=a.x)}let o={x:0,y:a.y};if(i.getSide()===`EAST`)o.x=r;else if(i.getSide()===`WEST`)o.x=t;else continue;if(Math.abs(a.x-o.x)<=n&&!this.isInLayerDummy(e))continue;let s=i.getOutgoingEdges().length+i.getIncomingEdges().length>1;for(let e of i.getConnectedEdges()){let t=e.getSource()===i?e.getTarget():e.getSource();Math.abs(t.getAbsoluteAnchor().y-o.y)>1&&this.addBendPoint(e,o,s,i)}}}processInLayerEdge(e,t,n){let r=e.getSource(),i=e.getTarget(),a=(r.getAbsoluteAnchor().y+i.getAbsoluteAnchor().y)/2,o=r.getSide()===`EAST`?{x:t+r.getNode().getLayer().getSize().x+n,y:a}:{x:t-n,y:a};e.getBendPoints().unshift(o)}addBendPoint(e,t,n,r){if((e.isInLayerEdge()||!ns(r.getAbsoluteAnchor(),t))&&!e.isSelfLoop()){e.getSource()===r?e.getBendPoints().unshift({...t}):e.getBendPoints().push({...t});let i=`${t.x},${t.y}`;if(n&&!this.createdJunctionPoints.has(i)){let n=e.getProperty(R);n??(n=[],e.setProperty(R,n));let r={...t};n.push(r),this.createdJunctionPoints.add(i)}}}isInLayerDummy(e){if(e.getType()===`LONG_EDGE`){for(let t of e.getConnectedEdges())if(t.isInLayerEdge())return!0}return!1}calculateWestInLayerEdgeYDiff(e){let t=0;for(let n of e.getNodes())for(let r of n.getOutgoingEdges()){let n=r.getSource(),i=r.getTarget();if(n&&i&&i.getNode()?.getLayer()===e&&n.getSide()===`WEST`){let e=n.getAbsoluteAnchor().y,r=i.getAbsoluteAnchor().y;t=Math.max(t,Math.abs(r-e))}}return t}};function is(e,t){let n=0,r=0;for(let t of e.getNodes())n=Math.max(n,t.getMargin().left),r=Math.max(r,t.getMargin().right);for(let i of e.getNodes()){let a=i.getProperty(z),o;if(a===`LEFT`)o=0;else if(a===`RIGHT`)o=1;else if(a===`CENTER`)o=.5;else{let e=0,t=0;for(let n of i.getPorts())n.getIncomingEdges().length>0&&e++,n.getOutgoingEdges().length>0&&t++;o=e+t===0?.5:t/(e+t)}let s=e.getSize(),c=i.getSize().x,l=(s.x-c)*o;o>.5?l-=r*2*(o-.5):o<.5&&(l+=n*2*(.5-o));let u=i.getMargin().left;l<u&&(l=u);let d=i.getMargin().right;l>s.x-d-c&&(l=s.x-d-c),i.getPosition().x=t+l}}var as=class{source;target;weight;constructor(e,t,n){this.source=e,this.target=t,this.weight=n,e.outgoing.push(this),t.incoming.push(this)}};const os=.9,ss=.09999999999999998,cs=.5;var ls=class e{mark=0;inweight=0;outweight=0;rank=0;outgoing=[];incoming=[];leftPorts=[];rightPorts=[];edges=[];boundingBox={x:0,y:0,width:0,height:0};xDelta=0;isWestOfInitialLayer=!1;isStraight=!1;centerControlPointY=0;hyperEdgeTopYPos=0;hyperEdgeBottomYPos=0;handled=!1;sourcePort=null;targetPort=null;initialSegment=!1;lastSegment=!1;sourceNode=null;targetNode=null;inverseOrder=!1;edgeInformation=/* @__PURE__ */ new Map;constructor(){}addEdge(t){this.edges.push(t);let n=t.getSource(),r=t.getTarget();this.edgeInformation.set(t,{startY:e.anchorY(n),endY:e.anchorY(r),normalSourceNode:us(n.getNode()),normalTargetNode:us(r.getNode()),invertedLeft:n.getSide()===`WEST`,invertedRight:r.getSide()===`EAST`})}isHyperEdge(){return this.edges.length>1}static anchorY(e){return e.getAbsoluteAnchor().y}static fromSingleEdge(t,n,r,i){let a=new e,o=t.getSource(),s=t.getTarget();n===`LEFT`?a.leftPorts.push(o):a.rightPorts.push(o),r===`LEFT`?a.leftPorts.push(s):a.rightPorts.push(s),a.addEdge(t);let c=e.anchorY(o),l=e.anchorY(s);return a.setRelevantPositions(c,l,l),a.isStraight=i(c,l),a}static fromHyperEdge(t,n,r){let i=new e;r===`LEFT`?i.leftPorts.push(t):i.rightPorts.push(t);let a=1/0,o=-1/0;for(let{side:r,edge:s}of n){let n=s.getSource(),c=s.getTarget(),l=n;l===t&&(l=c),r===`LEFT`?i.leftPorts.push(l):i.rightPorts.push(l);let u=e.anchorY(l);a=Math.min(a,u),o=Math.max(o,u)}let s=e.anchorY(t);i.setRelevantPositions(s,a,o);for(let{edge:e}of n)i.addEdge(e);return i.isStraight=!1,i}setRelevantPositions(e,t,n){this.boundingBox.y=Math.min(e,t),this.boundingBox.height=Math.max(e,n)-this.boundingBox.y,e<t?(this.centerControlPointY=cs*(e+t),this.hyperEdgeTopYPos=ss*this.centerControlPointY+os*e,this.hyperEdgeBottomYPos=ss*this.centerControlPointY+os*t):(this.centerControlPointY=cs*(e+n),this.hyperEdgeTopYPos=ss*this.centerControlPointY+os*n,this.hyperEdgeBottomYPos=ss*this.centerControlPointY+os*e)}};function us(e){let t=e.getType();return t===`NORMAL`||t===`BIG_NODE`||t===`BREAKING_POINT`}const ds=Math.PI/2,fs=1e-5;function ps(e){switch(e){case`NORTH`:return 3*ds;case`EAST`:return 0;case`SOUTH`:return ds;case`WEST`:return Math.PI;default:return 0}}function ms(e,t,n){return Math.abs(e-t)<=n}function hs(e,t,n){return e<t-n?-1:+(e>t+n)}function gs(e,t){let n=e.x,r=e.x+e.width,i=e.y,a=e.y+e.height;return t.x>n&&t.x<r&&t.y>i&&t.y<a}function _s(e,t,n){return gs(e,t)&&gs(e,n)}function vs(e,t,n,r){let i=e,a={x:t.x-e.x,y:t.y-e.y},o=n,s={x:r.x-n.x,y:r.y-n.y},c=i.x,l=i.y,u=o.x,d=o.y,f=a.x,p=a.y,m=s.x,h=s.y,g=m*p-f*h;if(ms(0,g,fs))return!1;let _=1/g*((c-u)*p-(l-d)*f),v=1/g*-(-(c-u)*h+(l-d)*m);return hs(0,_,fs)<0&&hs(_,1,fs)<0&&hs(0,v,fs)<0&&hs(v,1,fs)<0}function ys(e,t,n){if(_s(e,t,n))return!1;let r={x:e.x,y:e.y},i={x:e.x+e.width,y:e.y},a={x:e.x+e.width,y:e.y+e.height},o={x:e.x,y:e.y+e.height};return vs(r,i,t,n)||vs(i,a,t,n)||vs(a,o,t,n)||vs(o,r,t,n)}function bs(e,t){let n=t.length-1,r=0,i=0;for(let a=0;a<=n;a++){let o=t[a],s=xs(n,a)*(1-e)**(n-a)*e**+a;r+=o.x*s,i+=o.y*s}return{x:r,y:i}}function xs(e,t){if(t<0||t>e)return 0;let n=1;for(let r=1;r<=t;r++)n=n*(e-t+r)/r;return n}function Ss(e,t){if(e<=0)return[];let n=[],r=1/e,i=0;for(let a=0;a<e;a++)i+=r,n.push(bs(i,t));return n}const Cs=1e-6;var ws=class e{cp;polarCoordinate;constructor(t,n,r){if(t instanceof e&&n instanceof e&&r!==void 0){let e=t.polarCoordinate[0],i=n.polarCoordinate[n.polarCoordinate.length-1],a={x:t.cp.x*(i-r),y:t.cp.y*(i-r)},o={x:n.cp.x*(r-e),y:n.cp.y*(r-e)},s={x:a.x+o.x,y:a.y+o.y},c=1/(i-e);this.cp={x:s.x*c,y:s.y*c},this.polarCoordinate=[];let l=!0;for(let e=1;e<t.polarCoordinate.length;e++){let n=t.polarCoordinate[e];l&&n-r>Cs&&(this.polarCoordinate.push(r),l=!1),this.polarCoordinate.push(n)}l&&this.polarCoordinate.push(r)}else this.cp={x:t.x,y:t.y},this.polarCoordinate=[...n]}getCp(){return this.cp}},Ts=class{knotVector=[];controlPoints=[];dimNUBS=0;isClamped=!1;isUniform=!1;isBezier=!1;minKnot=0;maxKnot=0;constructor(e,t,n){if(t<1)throw Error(`The dimension must be at least 1!`);for(;n.length<t+1;)n.unshift({...n[0]});this.dimNUBS=t,this.isClamped=e,this.isUniform=!0,this.isBezier=!1,this.createUniformKnotVector(e,n.length+this.dimNUBS-1);let r=[],i=0;for(let e=0;e<this.dimNUBS-1;e++)r.push(this.knotVector[i++]);for(let e of n)r.push(this.knotVector[i++]),this.controlPoints.push(new ws(e,r)),r.shift()}createUniformKnotVector(e,t){if(t<2*this.dimNUBS)throw Error(`The knot vector must have at least two time the dimension elements.`);let n;if(e){this.minKnot=0,this.maxKnot=1;for(let e=0;e<this.dimNUBS;e++)this.knotVector.push(0);n=t+1-2*this.dimNUBS}else{n=t+1;let e=this.dimNUBS;this.minKnot=e/(n+1),this.maxKnot=(n-e)/n}let r=n;for(let e=1;e<n;e++)this.knotVector.push(e/r);if(e)for(let e=0;e<this.dimNUBS;e++)this.knotVector.push(1)}getMultiplicity(e){let t=0;for(let n of this.knotVector)Math.abs(n-e)<Cs&&t++;return t}insertKnotAtCurrentPosition(e,t,n,r){let i=this.getMultiplicity(t);for(let a=0;a<e;a++){r.add(t);let o=[],s=n.next();for(let e=i+a;e<this.dimNUBS;e++){let e=s;s=n.next(),o.push(new ws(e,s,t))}for(let e=i+a;e<this.dimNUBS;e++)n.previous(),e>i+a&&n.remove();for(let e of o)n.add(e);if(a<e-1)for(let e=i+a;e<this.dimNUBS;e++)n.previous()}}toBezier(){let e=new Es(this.knotVector),t=new Es(this.controlPoints);if(this.isClamped)for(let t=0;t<this.dimNUBS;t++)e.next();else for(let t=0;t<this.dimNUBS-1;t++)e.next(),e.remove();let n=e.next();for(;this.maxKnot-n>Cs;){let r=n,i=0;for(;Math.abs(n-r)<Cs;)i++,n=e.next(),t.next();i<this.dimNUBS&&(e.previous(),this.insertKnotAtCurrentPosition(this.dimNUBS-i,r,t,e),e.next()),t.previous()}if(!this.isClamped)for(let t=0;t<this.dimNUBS-1;t++)e.next(),e.remove();this.isClamped=!0,this.isBezier=!0}getControlPoints(){return this.controlPoints.map(e=>({x:e.getCp().x,y:e.getCp().y}))}getBezierCP(){this.isBezier||this.toBezier();let e=[];for(let t=1;t<this.controlPoints.length-1;t++)e.push({x:this.controlPoints[t].getCp().x,y:this.controlPoints[t].getCp().y});return e}},Es=class{items;cursor=0;lastRet=-1;constructor(e){this.items=e}next(){let e=this.items[this.cursor];return this.lastRet=this.cursor,this.cursor++,e}previous(){return this.cursor--,this.lastRet=this.cursor,this.items[this.cursor]}remove(){if(this.lastRet===-1)throw Error(`no last returned`);this.lastRet<this.cursor?(this.items.splice(this.lastRet,1),this.cursor--):this.items.splice(this.lastRet,1),this.lastRet=-1}add(e){this.items.splice(this.cursor,0,e),this.cursor++,this.lastRet=-1}};const Ds=1.3,Os=.5;function ks(e,t){return{x:e.x+t.x,y:e.y+t.y}}function As(e,t){return{x:e.x-t.x,y:e.y-t.y}}function js(e,t){return{x:e.x*t,y:e.y*t}}function Ms(e){return Math.hypot(e.x,e.y)}function Ns(e){return{x:Math.cos(e),y:Math.sin(e)}}function Ps(e){let t=e.getPosition(),n=e.getAnchor();return{x:t.x+n.x,y:t.y+n.y}}var Fs=class e extends Ts{firstLabelPosition={x:0,y:0};constructor(e,t,n){typeof e==`boolean`?super(e,t,n):super(!0,e,t)}getFirstLabelPosition(){return this.firstLabelPosition}setFirstLabelPosition(e){this.firstLabelPosition=e}static createSideSelfLoop(t,n,r){let i=ps(t.getSide()),a=Ps(t),o=Ps(n),s=ks(a,js(Ns(i),r)),c=ks(o,js(Ns(i),r)),l=js(As(s,c),1/2),u=ks(ks(c,l),js(Ns(i),Ms(l)));return new e(3,[a,s,u,c,o])}static createCornerSelfLoop(t,n,r,i){let a=ps(t.getSide()),o=ps(n.getSide()),s=Ps(t),c=Ps(n),l=ks(s,js(Ns(a),Ds*r)),u=ks(c,js(Ns(o),Ds*i)),d=0,f=0;switch(t.getSide()){case`WEST`:d=2*(s.x-r)-Os*(l.x+u.x);break;case`EAST`:d=2*(s.x+r)-Os*(l.x+u.x);break;case`NORTH`:f=2*(s.y-r)-Os*(l.y+u.y);break;case`SOUTH`:f=2*(s.y+r)-Os*(l.y+u.y)}switch(n.getSide()){case`WEST`:d=2*(c.x-i)-Os*(u.x+l.x);break;case`EAST`:d=2*(c.x+i)-Os*(u.x+l.x);break;case`NORTH`:f=2*(c.y-i)-Os*(u.y+l.y);break;case`SOUTH`:f=2*(c.y+i)-Os*(u.y+l.y)}return new e(3,[s,l,{x:d,y:f},u,c])}static createAcrossSelfLoop(t,n,r,i,a){let o=Ps(t),s=Ps(n);if(i.length!==2)throw Error(`AssertionError: cornerBendPoints.size() == 2`);let c=i[0],l=i[1],u=js(ks(l,c),Os);return new e(3,[o,r,c,u,l,a,s])}static createThreeSideSelfLoop(t,n,r,i,a){let o=Ps(t),s=Ps(n);if(i.length!==3)throw Error(`AssertionError: cornerBendPoints.size() == 3`);let c=i[0],l=i[1],u=i[2];return new e(3,[o,r,c,l,u,a,s])}static createFourSideSelfLoop(t,n,r,i,a){let o=Ps(t),s=Ps(n);if(i.length!==4)throw Error(`AssertionError: cornerBendPoints.size() == 4`);let c=i[0],l=i[1],u=i[2],d=i[3];return new e(3,[o,r,c,l,u,d,a,s])}};const Is=1e-8;function Ls(e,t,n){return Math.abs(t-e)<Is||Math.abs(n-e)<Is?!0:t-e>Is?e-n>Is:n-e>Is}function Rs(e,t){return e!==t&&(e===`WEST`||e===`EAST`)!=(t===`WEST`||t===`EAST`)}function zs(e){return e.getType()===`EXTERNAL_PORT`&&(e.getProperty(j)===`WEST`||e.getProperty(j)===`EAST`)}var Bs=class{edgesRemainingLayer=[];splineSegmentsLayer=[];leftPortsLayer=[];rightPortsLayer=[];selfLoopsLayer=/* @__PURE__ */ new Set;startEdges=[];allSplineSegments=[];edgeToSegmentMap=/* @__PURE__ */ new Map;successingEdge=/* @__PURE__ */ new Map;process(e){if(e.getLayers().length===0){e.getSize().x=0;return}let t=e.getProperty(kn),n=e.getProperty(_n),r=e.getProperty(wt),i=e.getProperty(re)===`SLOPPY`,a=e.getProperty(Ue);this.startEdges=[],this.allSplineSegments=[],this.successingEdge=/* @__PURE__ */ new Map;let o=e.getLayers(),s=o[0],c=o[o.length-1],l=s.getNodes().length>0&&s.getNodes().every(e=>zs(e)),u=c.getNodes().length>0&&c.getNodes().every(e=>zs(e)),d=0,f=null;for(let p=0;p<=o.length;p++){let m=p<o.length?o[p]:null;this.clearThenFillMappings(f,m),this.createSegmentsAndComputeRanking(e);let h=0;for(let e of this.splineSegmentsLayer)e.isStraight||(h=Math.max(h,e.rank+1));let g=0,_=d,v=f===null||l&&f===s,y=m===null||u&&m===c;if(h>0){let e=0;f!==null&&(e+=n),e+=(h-1)*r,m!==null&&(e+=n),i&&m!==null&&(e=Math.max(e,this.computeSloppySpacing(m,r,t,a))),e<t&&!v&&!y&&(g=(t-e)/2,e=t),_+=e}else!v&&!y&&(_+=t);m!==null&&Va(m,_),this.routeSelfLoops(n);for(let e of this.splineSegmentsLayer)e.boundingBox.x=d,e.boundingBox.width=_-d,e.xDelta=g,e.isWestOfInitialLayer=f===null;this.allSplineSegments.push(...this.splineSegmentsLayer),d=_,m!==null&&(d+=m.getSize().x),f=m}e.getSize().x=d;for(let e of this.startEdges){let t=this.getEdgeChain(e);t.length>0&&e.setProperty(Ve,t);let n=this.getSplinePath(e);n.length>0&&e.setProperty(g,n)}}getEdgeChain(e){let t=[],n=e;for(;n!==null;)t.push(n),n=this.successingEdge.get(n)??null;return t}getSplinePath(e){let t=[],n=e;for(;n!==null;){let e=this.edgeToSegmentMap.get(n);if(!e)break;e.sourcePort=n.getSource(),e.targetPort=n.getTarget(),t.push(e),n=this.successingEdge.get(n)??null}if(t.length>0){let e=t[0];e.initialSegment=!0,e.sourceNode=e.edges[0].getSource().getNode();let n=t[t.length-1];n.lastSegment=!0,n.targetNode=n.edges[0].getTarget().getNode()}return t}clearThenFillMappings(e,t){if(this.leftPortsLayer=[],this.rightPortsLayer=[],this.edgesRemainingLayer=[],this.splineSegmentsLayer=[],this.selfLoopsLayer=/* @__PURE__ */ new Set,e!==null)for(let n of e.getNodes())for(let r of n.getPorts(`EAST`)){this.leftPortsLayer.push(r);for(let n of r.getOutgoingEdges()){if(n.isSelfLoop())continue;this.edgesRemainingLayer.push(n),this.findAndAddSuccessor(n),Us(n.getSource().getNode())&&this.startEdges.push(n);let r=n.getTarget(),i=r.getNode().getLayer();if(i===t)this.rightPortsLayer.push(r);else if(i===e)this.leftPortsLayer.push(r);else{let e=this.edgesRemainingLayer.indexOf(n);e!==-1&&this.edgesRemainingLayer.splice(e,1)}}}if(t!==null)for(let n of t.getNodes()){for(let e of n.getPorts())for(let t of e.getOutgoingEdges())t.isSelfLoop()&&this.selfLoopsLayer.add(t);for(let r of n.getPorts(`WEST`)){this.rightPortsLayer.push(r);for(let n of r.getOutgoingEdges()){if(n.isSelfLoop())continue;this.edgesRemainingLayer.push(n),this.findAndAddSuccessor(n),Us(n.getSource().getNode())&&this.startEdges.push(n);let r=n.getTarget(),i=r.getNode().getLayer();if(i===t)this.rightPortsLayer.push(r);else if(i===e)this.leftPortsLayer.push(r);else{let e=this.edgesRemainingLayer.indexOf(n);e!==-1&&this.edgesRemainingLayer.splice(e,1)}}}}}routeSelfLoops(e){if(this.selfLoopsLayer.size===0)return;let t=e>0?e:20;for(let e of this.selfLoopsLayer){let n=e.getSource(),r=e.getTarget();if(n===null||r===null||e.getBendPoints().length>0)continue;let i=n.getSide(),a=r.getSide();if(i===`UNDEFINED`||a===`UNDEFINED`)continue;let o=null;if(i===a?o=Fs.createSideSelfLoop(n,r,t):Rs(i,a)&&(o=Fs.createCornerSelfLoop(n,r,t,t)),o===null)continue;let s=n.getNode(),c=s===null?{x:0,y:0}:s.getPosition();for(let t of o.getBezierCP())e.getBendPoints().push({x:t.x+c.x,y:t.y+c.y})}}createSegmentsAndComputeRanking(e){this.createSplineSegmentsForHyperEdges(`LEFT`,!0),this.createSplineSegmentsForHyperEdges(`LEFT`,!1),this.createSplineSegmentsForHyperEdges(`RIGHT`,!0),this.createSplineSegmentsForHyperEdges(`RIGHT`,!1),this.createSplineSegments();for(let e=0;e<this.splineSegmentsLayer.length;e++){let t=this.splineSegmentsLayer[e];for(let n=e+1;n<this.splineSegmentsLayer.length;n++)this.createDependency(t,this.splineSegmentsLayer[n])}this.breakCycles(this.splineSegmentsLayer,e.getProperty(P)),this.topologicalNumbering(this.splineSegmentsLayer)}createSplineSegments(){for(let e of this.edgesRemainingLayer){let t=e.getSource(),n;if(this.leftPortsLayer.includes(t))n=`LEFT`;else if(this.rightPortsLayer.includes(t))n=`RIGHT`;else throw Error(`Source port must be in one of the port sets.`);let r=e.getTarget(),i;if(this.leftPortsLayer.includes(r))i=`LEFT`;else if(this.rightPortsLayer.includes(r))i=`RIGHT`;else throw Error(`Target port must be in one of the port sets.`);let a=ls.fromSingleEdge(e,n,i,(e,t)=>Vs(e,t));this.edgeToSegmentMap.set(e,a),this.splineSegmentsLayer.push(a)}}createSplineSegmentsForHyperEdges(e,t){let n=e===`LEFT`?this.leftPortsLayer:this.rightPortsLayer;for(let r of n){let n=r.getAbsoluteAnchor().y,i=[],a=[];for(let e of r.getConnectedEdges())if(e.getProperty(A)===t&&this.edgesRemainingLayer.includes(e)){let t;t=e.getTarget()===r?e.getSource():e.getTarget();let o=t.getAbsoluteAnchor().y;if(Vs(o,n))continue;o<n?i.push({side:this.leftPortsLayer.includes(t)?`LEFT`:`RIGHT`,edge:e}):a.push({side:this.leftPortsLayer.includes(t)?`LEFT`:`RIGHT`,edge:e})}if(i.length>1){let t=ls.fromHyperEdge(r,i,e);for(let{edge:e}of i)this.edgeToSegmentMap.set(e,t);this.splineSegmentsLayer.push(t);for(let{edge:e}of i){let t=this.edgesRemainingLayer.indexOf(e);t!==-1&&this.edgesRemainingLayer.splice(t,1)}}if(a.length>1){let t=ls.fromHyperEdge(r,a,e);for(let{edge:e}of a)this.edgeToSegmentMap.set(e,t);this.splineSegmentsLayer.push(t);for(let{edge:e}of a){let t=this.edgesRemainingLayer.indexOf(e);t!==-1&&this.edgesRemainingLayer.splice(t,1)}}}}createDependency(e,t){if(e.hyperEdgeTopYPos>t.hyperEdgeBottomYPos||t.hyperEdgeTopYPos>e.hyperEdgeBottomYPos)return;let n=0,r=0;for(let r of e.rightPorts)Ls(r.getAbsoluteAnchor().y,t.hyperEdgeTopYPos,t.hyperEdgeBottomYPos)&&n++;for(let r of e.leftPorts)Ls(r.getAbsoluteAnchor().y,t.hyperEdgeTopYPos,t.hyperEdgeBottomYPos)&&n--;for(let n of t.rightPorts)Ls(n.getAbsoluteAnchor().y,e.hyperEdgeTopYPos,e.hyperEdgeBottomYPos)&&r++;for(let n of t.leftPorts)Ls(n.getAbsoluteAnchor().y,e.hyperEdgeTopYPos,e.hyperEdgeBottomYPos)&&r--;n<r?new as(e,t,r-n):r<n?new as(t,e,n-r):(new as(t,e,0),new as(e,t,0))}breakCycles(e,t){let n=[],r=[],i=-1;for(let t of e){t.mark=i--;let e=0,a=0;for(let e of t.outgoing)a+=e.weight;for(let n of t.incoming)e+=n.weight;t.inweight=e,t.outweight=a,a===0?r.push(t):e===0&&n.push(t)}let a=new Set(e),o=e.length,s=o+1,c=o-1,l=[];for(;a.size>0;){for(;r.length>0;){let e=r.shift();a.delete(e),e.mark=c--,this.updateNeighbors(e,n,r)}for(;n.length>0;){let e=n.shift();a.delete(e),e.mark=s++,this.updateNeighbors(e,n,r)}let e=-(2**53-1);for(let t of a){let n=t.outweight-t.inweight;n>=e&&(n>e&&(l.length=0,e=n),l.push(t))}if(l.length>0){let e=t===void 0?l[0]:l[t.nextInt(l.length)];a.delete(e),e.mark=s++,this.updateNeighbors(e,n,r),l.length=0}}let u=e.length+1;for(let t of e)t.mark<o&&(t.mark+=u);for(let t of e){let e=t.outgoing;for(let n=e.length-1;n>=0;n--){let r=e[n],i=r.target;if(t.mark>i.mark){e.splice(n,1);let a=i.incoming.indexOf(r);a!==-1&&i.incoming.splice(a,1),r.weight>0&&(r.source=i,i.outgoing.push(r),r.target=t,t.incoming.push(r))}}}}updateNeighbors(e,t,n){for(let n of e.outgoing)n.target.mark<0&&n.weight>0&&(n.target.inweight-=n.weight,n.target.inweight<=0&&n.target.outweight>0&&t.push(n.target));for(let t of e.incoming)t.source.mark<0&&t.weight>0&&(t.source.outweight-=t.weight,t.source.outweight<=0&&t.source.inweight>0&&n.push(t.source))}topologicalNumbering(e){let t=[],n=[];for(let r of e)r.rank=0,r.inweight=r.incoming.length,r.outweight=r.outgoing.length,r.inweight===0&&t.push(r),r.outweight===0&&r.leftPorts.length===0&&n.push(r);let r=-1;for(;t.length>0;){let e=t.shift();for(let n of e.outgoing){let i=n.target;i.rank=Math.max(i.rank,e.rank+1),r=Math.max(r,i.rank),i.inweight--,i.inweight===0&&t.push(i)}}if(r>-1){for(let e of n)e.rank=r;for(;n.length>0;){let e=n.shift();for(let t of e.incoming){let r=t.source;r.leftPorts.length>0||(r.rank=Math.min(r.rank,e.rank-1),r.outweight--,r.outweight===0&&n.push(r))}}}}computeSloppySpacing(e,t,n,r){let i=0;for(let t of e.getNodes()){let e=0;for(let n of t.getIncomingEdges()){let t=n.getSource().getAbsoluteAnchor().y,r=n.getTarget().getAbsoluteAnchor().y;e=Math.max(e,Math.abs(r-t))}i=Math.max(i,e)}return r*Math.min(1,t/n)*i}findAndAddSuccessor(e){let t=e.getTarget().getNode();if(Hs(t))return;let n=t.getOutgoingEdges();n.length>0&&this.successingEdge.set(e,n[0])}};function Vs(e,t){return Math.abs(e-t)<.2}function Hs(e){let t=e.getType();return t===`NORMAL`||t===`BREAKING_POINT`}function Us(e){let t=e.getType();return t===`NORMAL`||t===`NORTH_SOUTH_PORT`||t===`EXTERNAL_PORT`||t===`BREAKING_POINT`}function Ws(e){let t=e.getProperty(wt),n=e.getProperty(_n),r=e.getProperty(re),i=e.getProperty(Mn);for(let t of e.getLayers()){let e=0;for(let n of t.getNodes())n.id=e++}let a=[];for(let t of e.getLayers())for(let e of t.getNodes())for(let t of e.getPorts())for(let e of t.getOutgoingEdges())e.isSelfLoop()||e.hasProperty(g)&&a.push(e);for(let e of a){let a=e.getProperty(g);if(a!=null){for(let e of a)Gs(e,t,n,r,i);e.setProperty(g,null)}}for(let e of a)Qs(e.getProperty(Ve)??[],e,r),e.setProperty(Ve,null)}function Gs(e,t,n,r,i){if(!e.handled){e.handled=!0;for(let a of e.edges){if(e.isStraight&&!e.isHyperEdge()){Ks(e);continue}let o=e.edgeInformation.get(a);o.invertedLeft||o.invertedRight?qs(a,e,n,t):r===`SLOPPY`&&(o.normalSourceNode||o.normalTargetNode)&&tc(e,i)&&!e.isHyperEdge()?Ys(a,e):Js(a,e,n,t)}if(e.inverseOrder)for(let t of e.edges)t.getBendPoints().reverse()}}function Ks(e){let t=e.boundingBox.x,n={x:t+(e.boundingBox.x+e.boundingBox.width-t)/2,y:e.centerControlPointY};e.edges[0].getBendPoints().push(n)}function qs(e,t,n,r){let i=t.boundingBox.x,a=t.boundingBox.x+t.boundingBox.width,o=t.edgeInformation.get(e),s=o.startY,c=o.endY,l=o.invertedLeft?{x:a,y:s}:{x:i,y:s},u=o.invertedRight?{x:i,y:c}:{x:a,y:c},d=i;t.isWestOfInitialLayer||(d+=n),d+=t.xDelta+t.rank*r;let f={x:d,y:s},p={x:d,y:c};e.getBendPoints().push(l,f),t.edges.length>1&&e.getBendPoints().push({x:d,y:t.centerControlPointY}),e.getBendPoints().push(p,u)}function Js(e,t,n,r){let i=t.boundingBox.x,a=t.boundingBox.x+t.boundingBox.width,o=t.edgeInformation.get(e),s=o.startY,c=o.endY,l={x:i,y:s},u={x:a,y:c},d=i;t.isWestOfInitialLayer||(d+=n),d+=t.xDelta+t.rank*r;let f={x:d,y:s},p={x:d,y:c};e.getBendPoints().push(l,f),t.edges.length>1&&e.getBendPoints().push({x:d,y:t.centerControlPointY}),e.getBendPoints().push(p,u)}function Ys(e,t){let n=t.edgeInformation.get(e),r=t.boundingBox.x,i=t.boundingBox.x+t.boundingBox.width,a=n.startY,o=n.endY,s=a<o,c={x:r,y:a},l={x:i,y:o},u=(r+i)/2,d={x:u,y:a},f={x:u,y:o},p=Zs(e,a,o),m=t.sourcePort.getAbsoluteAnchor(),h={x:u,y:p},g=t.targetPort.getAbsoluteAnchor(),_=Ss(2,[m,h,g]),v=!1,y=t.sourcePort.getNode();if(y!==null&&y.getLayer()!==null&&n.normalSourceNode){let e=y.getLayer();if(!(s&&y.id<e.getNodes().length-1||!s&&y.id>0))v=!0;else{let t=s?y.id+1:y.id-1,n=e.getNodes()[t],r=Xs(n);v=!(ys(r,m,_[0])||_s(r,m,_[0]))}}let b=!1,x=t.targetPort.getNode();if(x!==null&&x.getLayer()!==null&&n.normalTargetNode){let e=x.getLayer();if(!(s&&x.id>0||!s&&x.id<e.getNodes().length-1))b=!0;else{let t=s?x.id-1:x.id+1,n=e.getNodes()[t],r=Xs(n);b=!(ys(r,_[0],g)||_s(r,_[0],g))}}v&&b&&e.getBendPoints().push(h),v||e.getBendPoints().push(c,d),b||e.getBendPoints().push(f,l)}function Xs(e){let t=e.getPosition(),n=e.getSize(),r=e.getMargin();return{x:t.x-r.left,y:t.y-r.top,width:n.x+r.left+r.right,height:n.y+r.top+r.bottom}}function Zs(e,t,n){let r=0,i=0;if(e.getTarget()!==null)for(let t of e.getTarget().getNode().getPorts())r+=t.getIncomingEdges().length;else r=1;if(e.getSource()!==null)for(let t of e.getSource().getNode().getPorts())i+=t.getOutgoingEdges().length;else i=1;let a=Math.sign(i-r);return(n+t)/2+(n-t)*(.4*a)}function Qs(e,t,n){if(e.length===0)return;let r=t===null?e[0]:t,i=r.getSource();if(!Us(i.getNode()))throw Error(`The target node of the edge must be a normal node or a northSouthPort.`);let a=[i.getAbsoluteAnchor()];if(rc(i.getSide())){let e=i.getProperty(b);a.push({x:i.getAbsoluteAnchor().x,y:e??i.getAbsoluteAnchor().y})}let o=null,s=!1;for(let t of e){let e=t.getBendPoints();if(e.length>0){if(s){let t={x:(o.x+e[0].x)/2,y:(o.y+e[0].y)/2};a.push(t),s=!1}else s=!0;o={...e[e.length-1]},a.push(...e.map(e=>({x:e.x,y:e.y}))),e.length=0}}let c=r.getTarget();if(rc(c.getSide())){let e=c.getProperty(b);a.push({x:c.getAbsoluteAnchor().x,y:e??c.getAbsoluteAnchor().y})}a.push(c.getAbsoluteAnchor()),n===`CONSERVATIVE`&&$s(a,i,c);let l=new Ts(!0,3,a).getBezierCP();r.getBendPoints().push(...l)}function $s(e,t,n){let r=e[0],i=e[1],a=ps(t.getSide()),o={x:Math.cos(a)*5,y:Math.sin(a)*5},s={x:i.x-r.x,y:i.y-r.y},c={x:ec(o.x,s.x),y:ec(o.y,s.y)};c.x+=r.x,c.y+=r.y,e.splice(1,0,c);let l=e[e.length-1],u=e[e.length-2],d=ps(n.getSide()),f={x:Math.cos(d)*5,y:Math.sin(d)*5},p={x:u.x-l.x,y:u.y-l.y},m={x:ec(f.x,p.x),y:ec(f.y,p.y)};m.x+=l.x,m.y+=l.y,e.splice(e.length-1,0,m)}function ec(e,t){return Math.abs(e)<Math.abs(t)?e:t}function tc(e,t){if(t===`NONE`)return!0;let n=e.boundingBox.x,r=e.boundingBox.x+e.boundingBox.width;if(e.initialSegment&&e.sourceNode!==null){let t=e.sourceNode,r=nc(t);if(n-(t.getPosition().x+t.getSize().x)>r)return!1}if(e.lastSegment&&e.targetNode!==null){let t=e.targetNode,n=nc(t);if(t.getPosition().x-r>n)return!1}return!0}function nc(e){return e.getLayer().getSize().x-e.getSize().x/2}function rc(e){return e===`NORTH`||e===`SOUTH`}function ic(e,t=!1){let n;switch(e){case`RIGHT`:n=`EAST`;break;case`LEFT`:n=`WEST`;break;case`DOWN`:n=`SOUTH`;break;case`UP`:n=`NORTH`;break;default:n=`EAST`}return t?ac(n):n}function ac(e){switch(e){case`NORTH`:return`SOUTH`;case`SOUTH`:return`NORTH`;case`EAST`:return`WEST`;case`WEST`:return`EAST`;default:return`UNDEFINED`}}function oc(e){let t=e.getProperty(S);return t===`UNDEFINED`?e.getProperty(Pt)>=1?`RIGHT`:`DOWN`:t}function sc(e,t){let n=e.getGraph()?.getParentNode()??null;for(;n!==null;){if(n===t)return!0;n=n.getGraph()?.getParentNode()??null}return!1}function cc(e,t){let n=e.getPosition().x+e.getAnchor().x,r=e.getPosition().y+e.getAnchor().y,i=e.getNode();for(;i!==null&&i!==t;)n+=i.position.x,r+=i.position.y,i=i.getGraph()?.getParentNode()??null;return{x:n,y:r}}function lc(e,t){let n=/* @__PURE__ */ new Set,r=e;for(;r!==null;)n.add(r),r=r.getGraph()?.getParentNode()??null;for(r=t;r!==null;){if(n.has(r))return r;r=r.getGraph()?.getParentNode()??null}return null}function uc(t){let n=t.getSource(),r=t.getTarget(),i=n.getNode(),o=r.getNode(),s,c;if(i===o&&t.getProperty(e)){let e=i,t=e.getGraph(),a=!1;for(;t!==null;){if(t.getProperty(mn)===`INCLUDE_CHILDREN`){a=!0;break}t=t.getParentNode()?.getGraph()??null}if(a)s=n.getAbsoluteAnchor(),c=r.getAbsoluteAnchor();else{let t=(t,n)=>{switch(t){case`WEST`:return{x:e.position.x+n.getPosition().x+n.getSize().x,y:e.position.y+n.getPosition().y+n.getSize().y/2};case`EAST`:return{x:e.position.x+n.getPosition().x,y:e.position.y+n.getPosition().y+n.getSize().y/2};case`NORTH`:return{x:e.position.x+n.getPosition().x+n.getSize().x/2,y:e.position.y+n.getPosition().y+n.getSize().y};case`SOUTH`:return{x:e.position.x+n.getPosition().x+n.getSize().x/2,y:e.position.y+n.getPosition().y};default:return n.getAbsoluteAnchor()}};s=t(n.getSide(),n),c=t(r.getSide(),r)}}else if(sc(o,i)){s={x:n.getPosition().x+n.getAnchor().x,y:n.getPosition().y+n.getAnchor().y};let e=r.getAbsoluteAnchor(),i=t.getProperty(a);c=i?{x:e.x+i.x,y:e.y+i.y}:e}else if(sc(i,o))s=cc(n,o),c=cc(r,o);else if(i===o){s=n.getAbsoluteAnchor();let e=r.getAbsoluteAnchor(),i=t.getProperty(a);c=i?{x:e.x+i.x,y:e.y+i.y}:e}else{let e=lc(i,o);s=cc(n,e),c=cc(r,e)}return{source:s,target:c}}function dc(e,t,n){if(t===n)return e;let r=t,i=null;do{let t=r.getOffset();if(e.x+=t.x,e.y+=t.y,i=r.getParentNode(),i!==null){let t=r.getPadding();e.x+=t.left,e.y+=t.top,e.x+=i.getPosition().x,e.y+=i.getPosition().y,r=i.getGraph()}}while(i!==null);r=n;do{let t=r.getOffset();if(e.x-=t.x,e.y-=t.y,i=r.getParentNode(),i!==null){let t=r.getPadding();e.x-=t.left,e.y-=t.top,e.x-=i.getPosition().x,e.y-=i.getPosition().y,r=i.getGraph()}}while(i!==null);return e}function fc(e,t){return dc({x:0,y:0},e,t)}function pc(e,t,n,r,i,a,o,s,c){let u=n,d=new V(c);d.setType(`EXTERNAL_PORT`),d.setProperty(j,u),d.setProperty(Xe,o),d.setProperty(O,`FIXED_POS`);let f=e.getProperty(E);d.setProperty(E,f);let p=new H;if(p.setNode(d),D.isSideFixed(t)||(u=r>=0?ic(s):ac(ic(s)),e.setProperty(l,u),e instanceof H&&e.setSide(u)),D.isRatioFixed(t)||D.isPosFixed(t)){let e=0;switch(u){case`WEST`:case`EAST`:e=a?.y??0,D.isRatioFixed(t)&&(e/=i?.y??1);break;case`NORTH`:case`SOUTH`:e=a?.x??0,D.isRatioFixed(t)&&(e/=i?.x??1)}d.setProperty(Kn,e)}let m={x:o.x/2,y:o.y/2},h=!1;if(e.getProperty(te)!==void 0){let t=e.getProperty(te);t!=null&&(m.x=t.x,m.y=t.y,h=!0)}switch(u){case`WEST`:d.setLayerConstraint(`FIRST_SEPARATE`),d.setEdgeConstraint(`OUTGOING_ONLY`),d.size.y=o.y,f<0&&(d.size.x=-f),p.setSide(`EAST`),h||(m.x=o.x),m.x-=o.x;break;case`EAST`:d.setLayerConstraint(`LAST_SEPARATE`),d.setEdgeConstraint(`INCOMING_ONLY`),d.size.y=o.y,f<0&&(d.size.x=-f),p.setSide(`WEST`),h||(m.x=0);break;case`NORTH`:d.setInLayerConstraint(`TOP`),d.size.x=o.x,f<0&&(d.size.y=-f),p.setSide(`SOUTH`),h||(m.y=o.y),m.y-=o.y;break;case`SOUTH`:d.setInLayerConstraint(`BOTTOM`),d.size.x=o.x,f<0&&(d.size.y=-f),p.setSide(`NORTH`),h||(m.y=0)}return p.getPosition().x=m.x,p.getPosition().y=m.y,d.setProperty(te,{x:m.x,y:m.y}),a!=null&&(d.getPosition().x=a.x,d.getPosition().y=a.y),d.setProperty(j,u),d}function mc(e,t){let n=e.getNode(),r=n.size.x,i=n.size.y;if(r<=0&&i<=0)return`UNDEFINED`;let a=e.getPosition().x,o=e.getPosition().y,s=e.size.x,c=e.size.y;switch(t){case`LEFT`:case`RIGHT`:if(a<0)return`WEST`;if(a+s>r)return`EAST`;break;case`UP`:case`DOWN`:if(o<0)return`NORTH`;if(o+c>i)return`SOUTH`}let l=(a+s/2)/r,u=(o+c/2)/i;return l+u<=1&&l-u<=0?`WEST`:l+u>=1&&l-u>=0?`EAST`:u<.5?`NORTH`:`SOUTH`}function hc(e,t){let n=e.getNode(),r=e.getPosition();switch(t){case`NORTH`:return-(r.y+e.size.y);case`EAST`:return r.x-(n?.size.x??0);case`SOUTH`:return r.y-(n?.size.y??0);case`WEST`:return-(r.x+e.size.x)}return 0}function gc(e,t,n){let r=e.getSide(),i=D.isSideFixed(t);r===`UNDEFINED`&&i&&(r=mc(e,n),e.setSideInferred(r),!e.hasProperty(E)&&r!==`UNDEFINED`&&(e.getPosition().x!==0||e.getPosition().y!==0)&&e.setProperty(E,hc(e,r)));let a=e.size,o=e.getAnchor();if(r!==`UNDEFINED`)switch(r){case`NORTH`:o.x=a.x/2;break;case`EAST`:o.x=a.x,o.y=a.y/2;break;case`SOUTH`:o.x=a.x/2,o.y=a.y;break;case`WEST`:o.y=a.y/2}else o.x=a.x/2,o.y=a.y/2}function _c(e){let t=e.getProperty(ne);for(let n of e.getLayerlessNodes())vc(n,t);for(let n of e.getLayers())for(let e of n.getNodes())vc(e,t)}function vc(e,t){if(D.isSideFixed(e.getProperty(O)))for(let n of e.getPorts())n.getSide()===`UNDEFINED`&&yc(n,t);else{for(let n of e.getPorts())yc(n,t);e.setProperty(O,`FIXED_SIDE`)}}function yc(e,t=!1,n=`RIGHT`){let r=e.getProperty(M);if(r!=null){e.setSideInferred(r.getProperty(j));return}let i=0;if(t){for(let t of e.getIncomingEdges())i+=t.getProperty(A)?-1:1;for(let t of e.getOutgoingEdges())i-=t.getProperty(A)?-1:1}else i=e.getNetFlow();let a=ic(n),o=i<0?a:ac(a);e.setSideInferred(o)}const bc={top:0,left:0,right:0,bottom:0};function xc(e,t){let n=e.placement??t.getProperty(N);return Array.isArray(n)?n:String(n??``).split(/[\s,]+/).filter(Boolean)}function Sc(e){let t=e.includes(`H_LEFT`)||e.includes(`H_RIGHT`);return e.includes(`H_PRIORITY`)&&t||!e.includes(`H_PRIORITY`)&&e.includes(`V_CENTER`)&&t}function Cc(e,t,n,r){let i=n.includes(`H_RIGHT`)?`right`:n.includes(`H_LEFT`)?`left`:`center`,a=n.includes(`V_BOTTOM`)?`bottom`:n.includes(`V_CENTER`)?`center`:`top`;Sc(n)?(e.position.x=i===`right`?t.x+r:-e.size.x-r,e.position.y=a===`bottom`?t.y-e.size.y:a===`center`?(t.y-e.size.y)/2:0):(e.position.y=a===`bottom`?t.y+r:-e.size.y-r,e.position.x=i===`right`?t.x-e.size.x:i===`center`?(t.x-e.size.x)/2:0)}function wc(e,t,n){if(Sc(t)){let r={...bc};return t.includes(`H_LEFT`)&&(r.left=n+e.x),t.includes(`H_RIGHT`)&&(r.right=n+e.x),r}let r={...bc};return t.includes(`V_TOP`)&&(r.top=n+e.y),t.includes(`V_BOTTOM`)&&(r.bottom=n+e.y),r}function Tc(e){return e.hasProperty(cn)?e.getProperty(cn):e.getGraph()?.getProperty(cn)??5}function Ec(e){let t=e.getLayers();for(let e of t)for(let t of e.getNodes())Dc(t)}function Dc(e){let t=e.getSize(),n=0,r=0,i=t.x,a=t.y;for(let t of e.getPorts()){let e=t.getPosition(),o=t.getSize();n=Math.min(n,e.x),r=Math.min(r,e.y),i=Math.max(i,e.x+o.x),a=Math.max(a,e.y+o.y);for(let o of t.getLabels()){let t=o.position,s=o.size;n=Math.min(n,e.x+t.x),r=Math.min(r,e.y+t.y),i=Math.max(i,e.x+t.x+s.x),a=Math.max(a,e.y+t.y+s.y)}}for(let o of e.getLabels()){let s=o.position,c=o.size;n=Math.min(n,s.x),r=Math.min(r,s.y),i=Math.max(i,s.x+c.x),a=Math.max(a,s.y+c.y);let l=xc(o,e);if(l.includes(`OUTSIDE`)){let o=wc(c,l,Tc(e));n=Math.min(n,-o.left),r=Math.min(r,-o.top),i=Math.max(i,t.x+o.right),a=Math.max(a,t.y+o.bottom)}}let o=e.getMargin();o.left=-n,o.top=-r,o.right=i-t.x,o.bottom=a-t.y}var Oc=class{newEdge;graph;type;constructor(e,t,n){this.newEdge=e,this.graph=t,this.type=n}getNewEdge(){return this.newEdge}getGraph(){return this.graph}getType(){return this.type}getActualSource(){let e=this.newEdge.getSource();return e!==null&&e.getNode().getType().toString()===`EXTERNAL_PORT`?e.getNode().getProperty(L):e}getActualTarget(){let e=this.newEdge.getTarget();return e!==null&&e.getNode().getType().toString()===`EXTERNAL_PORT`?e.getNode().getProperty(L):e}};function kc(e,t){let n=0,r=e;for(;r!==t;){let e=r.getParentNode();if(e===null)break;let t=e.getGraph();if(t===null)break;r=t,n++}return n}function Ac(e,t,n){let r=e.getType(),i=t.getType();return r===`OUTPUT`&&i===`INPUT`?-1:r===`INPUT`&&i===`OUTPUT`?1:r===`OUTPUT`?kc(t.getGraph(),n)-kc(e.getGraph(),n):kc(e.getGraph(),n)-kc(t.getGraph(),n)}var jc=class{origEdges=[];newEdge;dummyNode;dummyPort;type;exported;constructor(e,t,n,r,i,a){this.origEdges.push(e),this.newEdge=t,this.dummyNode=n,this.dummyPort=r,this.type=i,this.exported=a}},Mc=class{crossHierarchyMap=/* @__PURE__ */ new Map;dummyNodeMap=/* @__PURE__ */ new Map;topGraph=null;process(e){this.crossHierarchyMap=/* @__PURE__ */ new Map,this.topGraph=e,e.getProperty(mn)===`INCLUDE_CHILDREN`?(this.transformHierarchyEdges(e,null),this.removeOriginalEdges(),this.setSidesOfPortsToSidesOfDummyNodes(),e.setProperty(se,this.crossHierarchyMap),this.dummyNodeMap.clear()):(this.separateTransformHierarchyEdges(e),this.setContainerPortSidesByNetFlow(e),this.setSidesOfPortsToSidesOfDummyNodes(),this.removeOriginalEdges(),e.setProperty(se,this.crossHierarchyMap),this.dummyNodeMap.clear())}separateTransformHierarchyEdges(e){for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();e!==null&&(this.separateTransformHierarchyEdges(e),this.separateTransformNestedEdges(e,t),this.processInsideSelfLoops(e,t,t.getProperty(O),!0))}}separateTransformNestedEdges(e,t){let n=[],r=/* @__PURE__ */ new Set;for(let i of[...e.getLayerlessNodes()])if(i.getType()!==`EXTERNAL_PORT`)for(let a of i.getPorts()){for(let i of[...a.getOutgoingEdges()])if(!r.has(i)&&i.getTarget().getNode().getGraph()!==e){r.add(i);let o=this.introduceSeparateExternalPort(e,t,i,a,`OUTPUT`);o!==null&&n.push(o)}for(let i of[...a.getIncomingEdges()])if(!r.has(i)&&i.getSource().getNode().getGraph()!==e){r.add(i);let o=this.introduceSeparateExternalPort(e,t,i,a,`INPUT`);o!==null&&n.push(o)}}for(let t of n)e.getLayerlessNodes().includes(t.dummyNode)||e.getLayerlessNodes().push(t.dummyNode);n.length>0&&e.getProperty(w).add(`EXTERNAL_PORTS`)}introduceSeparateExternalPort(e,t,n,r,i){let a=i===`INPUT`?n.getSource():n.getTarget();if(a.getNode()!==t)return null;let o=a.getSide();if(o===`UNDEFINED`){let t=oc(e);o=i===`INPUT`?ac(ic(t)):ic(t)}let s=pc(a,t.getProperty(O),o,this.calculateNetFlow(a),null,a.getPosition(),a.getSize(),oc(e),e);s.setProperty(L,a),this.dummyNodeMap.has(a)||this.dummyNodeMap.set(a,s);let c=this.createDummyEdge(e,n),l=s.getPorts()[0];i===`INPUT`?(c.setSource(l),c.setTarget(r)):(c.setSource(r),c.setTarget(l));let u=new jc(n,c,s,l,i,!0);return this.addToMap(n,new Oc(c,e,i)),u}setContainerPortSidesByNetFlow(e){for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();if(e===null)continue;let n=t.getProperty(O);if(!D.isSideFixed(n))for(let n of t.getPorts()){if(n.getSide()!==`UNDEFINED`)continue;let t=ic(oc(e));n.setSideInferred(n.getNetFlow()>0?t:ac(t))}this.setContainerPortSidesByNetFlow(e)}}removeOriginalEdges(){for(let e of[...this.crossHierarchyMap.keys()]){let t=this.crossHierarchyMap.get(e)??[];if(e.getLabels().length>0&&t.length>0){let n=[...t].sort((e,t)=>Ac(e,t,this.topGraph));for(let t of[...e.getLabels()]){let r=-1;switch(t.placement===void 0?`CENTER`:t.placement){case`HEAD`:r=n.length-1;break;case`CENTER`:r=this.shallowestEdgeSegment(n);break;case`TAIL`:r=0}r!==-1&&(n[r].getNewEdge().getLabels().push(t),e.getLabels().splice(e.getLabels().indexOf(t),1))}}e.setSource(null),e.setTarget(null)}}shallowestEdgeSegment(e){let t=-1;for(let n=0;n<e.length;n++)if(e[n].getType()===`INPUT`){t=n===0?0:n-1;break}else n===e.length-1&&(t=n);return t}setSidesOfPortsToSidesOfDummyNodes(){for(let[e,t]of this.dummyNodeMap){t.setProperty(L,e),e.setProperty(M,t),e.setProperty($e,!0);let n=t.getProperty(j);e.setSide(n===`UNDEFINED`?`UNDEFINED`:n),e.getNode().setProperty(O,`FIXED_SIDE`),e.getNode().getGraph().getProperty(w).add(`NON_FREE_PORTS`)}}processInsideSelfLoops(t,n,r,i){if(n.getProperty(Ae)){for(let i of n.getPorts())for(let a of[...i.getOutgoingEdges()]){if(!(a.getTarget().getNode()===n&&a.getProperty(e)))continue;let i=a.getSource(),o=this.dummyNodeMap.get(i);o===void 0&&(o=pc(i,r,i.getSide(),-1,null,null,i.getSize(),oc(t),t),o.setProperty(L,i),this.dummyNodeMap.set(i,o),t.getLayerlessNodes().includes(o)||t.getLayerlessNodes().push(o));let s=a.getTarget(),c=this.dummyNodeMap.get(s);c===void 0&&(c=pc(s,r,s.getSide(),1,null,null,s.getSize(),oc(t),t),c.setProperty(L,s),this.dummyNodeMap.set(s,c),t.getLayerlessNodes().includes(c)||t.getLayerlessNodes().push(c));let l=this.createDummyEdge(t,a);l.setSource(o.getPorts()[0]),l.setTarget(c.getPorts()[0]),this.addToMap(a,new Oc(l,t,`OUTPUT`)),t.getProperty(w).add(`EXTERNAL_PORTS`)}if(i){let e=/* @__PURE__ */ new Map;n.getPorts().forEach((t,n)=>e.set(t,n));let r=t.getLayerlessNodes(),i=[...r].sort((t,n)=>{let r=t.getProperty(L),i=n.getProperty(L);if(r instanceof H&&i instanceof H){let t=e.get(r),n=e.get(i);if(t!==void 0&&n!==void 0)return t-n}return 0});i.some((e,t)=>e!==r[t])&&(r.length=0,r.push(...i))}}}calculateNetFlow(t){let n=t.getNode(),r=n.getProperty(Ae),i=0,a=0;for(let o of t.getOutgoingEdges()){let t=o.isSelfLoop(),s=t&&r&&o.getProperty(e),c=o.getTarget().getNode();t&&s?a++:t&&!s?i++:c.getGraph().getParentNode()===n?a++:i++}for(let o of t.getIncomingEdges()){let t=o.isSelfLoop(),s=t&&r&&o.getProperty(e),c=o.getSource().getNode();t&&s?i++:t&&!s?a++:c.getGraph().getParentNode()===n?i++:a++}return i-a}transformHierarchyEdges(e,t){let n=[];for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();if(e!==null){let r=this.transformHierarchyEdges(e,t);if(n.push(...r),this.processInsideSelfLoops(e,t,`FREE`,!1),e.getProperty(w).has(`EXTERNAL_PORTS`)){let n=t.getProperty(O);for(let r of t.getPorts()){let i=this.dummyNodeMap.get(r);i===void 0&&(i=pc(r,n,r.getSide(),-r.getNetFlow(),null,{x:0,y:0},r.getSize(),oc(e),e),i.setProperty(L,r),this.dummyNodeMap.set(r,i),e.getLayerlessNodes().includes(i)||e.getLayerlessNodes().push(i));let a=(t.getProperty(Yn)??[]).includes(`INSIDE`),o=i.getPorts()[0],s=t.getProperty(Yn)??[],c=!s.includes(`INSIDE`)&&!s.includes(`OUTSIDE`);for(let e of r.getLabels()){let t={text:``,position:{x:0,y:0},size:{x:e.size.x,y:e.size.y}};if(!a){let n=r.getSide(),i=0;if(c)switch(n){case`EAST`:i=Math.max(0,-e.position.x);break;case`WEST`:i=Math.max(0,e.size.x+e.position.x-r.getSize().x);break;case`NORTH`:i=Math.max(0,e.size.y+e.position.y-r.getSize().y);break;case`SOUTH`:i=Math.max(0,-e.position.y)}n===`EAST`||n===`WEST`?t.size.x=i:t.size.y=i}o.getLabels().push(t)}}}}}let r=[];return this.processInnerHierarchicalEdgeSegments(e,t,n,r),t!==null&&this.processOuterHierarchicalEdgeSegments(e,t,r),r}processInnerHierarchicalEdgeSegments(e,t,n,r){let i=[];for(let r of n){let a=null;if(r.type===`OUTPUT`)for(let o of[...r.origEdges]){let s=o.getTarget().getNode();if(s.getGraph()===e)this.connectChild(e,r,o,r.dummyPort,o.getTarget());else if(t===null||sc(s,t))this.connectSiblings(e,r,n,o);else{let n=this.introduceHierarchicalEdgeSegment(e,t,o,r.dummyPort,`OUTPUT`,a);n!==a&&i.push(n),n.exported&&(a=n)}}else for(let n of[...r.origEdges]){let o=n.getSource().getNode();if(o.getGraph()===e)this.connectChild(e,r,n,n.getSource(),r.dummyPort);else if(t===null||sc(o,t))continue;else{let o=this.introduceHierarchicalEdgeSegment(e,t,n,r.dummyPort,`INPUT`,a);o!==a&&i.push(o),o.exported&&(a=o)}}}for(let t of i)e.getLayerlessNodes().includes(t.dummyNode)||e.getLayerlessNodes().push(t.dummyNode),t.exported&&r.push(t)}processOuterHierarchicalEdgeSegments(e,t,n){let r=[];for(let n of e.getLayerlessNodes())for(let i of n.getPorts()){let n=null;for(let a of[...i.getOutgoingEdges()])if(!sc(a.getTarget().getNode(),t)){let i=this.introduceHierarchicalEdgeSegment(e,t,a,a.getSource(),`OUTPUT`,n);i!==n&&r.push(i),i.exported&&(n=i)}let a=null;for(let n of[...i.getIncomingEdges()])if(!sc(n.getSource().getNode(),t)){let i=this.introduceHierarchicalEdgeSegment(e,t,n,n.getTarget(),`INPUT`,a);i!==a&&r.push(i),i.exported&&(a=i)}}for(let t of r)e.getLayerlessNodes().includes(t.dummyNode)||e.getLayerlessNodes().push(t.dummyNode),t.exported&&n.push(t)}connectChild(e,t,n,r,i){let a=this.createDummyEdge(e,n);a.setSource(r),a.setTarget(i),this.addToMap(n,new Oc(a,e,t.type))}connectSiblings(e,t,n,r){let i=null;for(let e of n)if(e!==t&&e.origEdges.includes(r)){i=e;break}if(i===null)return;let a=this.createDummyEdge(e,r);a.setSource(t.dummyPort),a.setTarget(i.dummyPort),this.addToMap(r,new Oc(a,e,t.type))}introduceHierarchicalEdgeSegment(e,t,n,r,i,a){let o=e.getProperty(Lt),s=null;i===`INPUT`&&n.getSource().getNode()===t?s=n.getSource():i===`OUTPUT`&&n.getTarget().getNode()===t&&(s=n.getTarget());let c=a;if(c===null||!o||s!==null){let a=`UNDEFINED`;s===null?t!==null&&D.isSideFixed(t.getProperty(O))&&(a=i===`INPUT`?`WEST`:`EAST`):a=s.getSide();let o=this.createExternalPortDummy(e,t,i,a,n),l=this.createDummyEdge(t.getGraph(),n);i===`INPUT`?(l.setSource(o.getPorts()[0]),l.setTarget(r)):(l.setSource(r),l.setTarget(o.getPorts()[0])),c=new jc(n,l,o,o.getProperty(L),i,s===null)}else c.origEdges.push(n);return this.addToMap(n,new Oc(c.newEdge,e,i)),c}createExternalPortDummy(e,t,r,i,a){let o=null,s=r===`INPUT`?a.getSource():a.getTarget(),c=oc(e);if(s.getNode()===t)o=this.dummyNodeMap.get(s)??null,o===null&&(o=pc(s,t.getProperty(O),i,this.calculateNetFlow(s),null,s.getPosition(),s.getSize(),c,e),o.setProperty(L,s),this.dummyNodeMap.set(s,o));else{let a=e.getProperty(n)/2;o=pc({getProperty(e){if(e===E)return a},setProperty(){}},t.getProperty(O),i,r===`INPUT`?-1:1,null,{x:0,y:0},{x:0,y:0},c,e);let s=this.createPortForDummy(o,t,r);o.setProperty(L,s),this.dummyNodeMap.set(s,o)}e.getProperty(w).add(`EXTERNAL_PORTS`);let l=e.getProperty(O);return D.isSideFixed(l)?e.setProperty(O,`FIXED_SIDE`):e.setProperty(O,`FREE`),o}createPortForDummy(e,t,n){let r=oc(t.getGraph()),i=new H;return i.setNode(t),n===`INPUT`?i.setSide(ac(ic(r))):i.setSide(ic(r)),i.setProperty(E,e.getProperty(E)),i}createDummyEdge(e,t){let n=new U;return n.copyProperties(t),n.setProperty(R,null),n}addToMap(e,t){let n=this.crossHierarchyMap.get(e);n===void 0?this.crossHierarchyMap.set(e,[t]):n.push(t)}},Nc=class{moveGraphs(e,t,n,r){for(let i of t)this.moveGraph(e,i,n,r)}moveGraph(e,t,n,r){let i=n+t.getOffset().x,a=r+t.getOffset().y,o=/* @__PURE__ */ new Set;for(let n of t.getLayerlessNodes()){n.position.x+=i,n.position.y+=a;for(let e of n.getPorts())for(let t of e.getOutgoingEdges()){if(o.has(t))continue;o.add(t);for(let e of t.getBendPoints())e.x+=i,e.y+=a;let e=t.getProperty(R);if(e!==null)for(let t of e)t.x+=i,t.y+=a;for(let e of t.getLabels())e.position.x+=i,e.position.y+=a}e.getLayerlessNodes().push(n),n.setGraph(e)}}offsetGraphs(e,t,n){for(let r of e)this.offsetGraph(r,t,n)}offsetGraph(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e.getLayerlessNodes()){i.position.x+=t,i.position.y+=n;for(let e of i.getPorts())for(let i of e.getOutgoingEdges()){if(r.has(i))continue;r.add(i);for(let e of i.getBendPoints())e.x+=t,e.y+=n;let e=i.getProperty(R);if(e!==null)for(let r of e)r.x+=t,r.y+=n;for(let e of i.getLabels())e.position.x+=t,e.position.y+=n}}}};let Pc=/* @__PURE__ */ function(e){return e.Q1=`Q1`,e.Q4=`Q4`,e.Q2=`Q2`,e.Q3=`Q3`,e}({});(function(e){function t(e){return e===`Q1`||e===`Q2`}e.isUpper=t;function n(e){return e===`Q1`||e===`Q4`}e.isLeft=n;function r(e,t){return e===`Q1`&&t===`Q4`||e===`Q4`&&t===`Q1`||e===`Q3`&&t===`Q2`||e===`Q2`&&t===`Q3`}e.isBothLeftOrBothRight=r;function i(e,t){return e===`Q1`&&(t===`Q2`||t===`Q3`)||e===`Q4`&&(t===`Q3`||t===`Q2`)}e.isOneLeftOneRight=i})(Pc||={});var Fc=class{x;y;quadrant=null;convex=!0;constructor(e,t,n){this.x=e,this.y=t,n!==void 0&&(this.quadrant=n)}equals(e){return this.x===e.x&&this.y===e.y}};const Ic=(e,t)=>e.x===t.x?e.y-t.y:e.x-t.x,Lc=(e,t)=>e.x===t.x?t.y-e.y:e.x-t.x,Rc=(e,t)=>e.x===t.x?e.y-t.y:t.x-e.x,zc=(e,t)=>e.x===t.x?t.y-e.y:t.x-e.x,Bc=(e,t)=>{if(e.x===t.x){if(e.quadrant===t.quadrant||Pc.isBothLeftOrBothRight(e.quadrant,t.quadrant)){let n=Pc.isLeft(e.quadrant)?1:-1;if(e.convex&&!t.convex)return n;if(!e.convex&&t.convex)return-n}return Vc[e.quadrant]-Vc[t.quadrant]}return e.x-t.x},Vc={Q1:0,Q4:1,Q2:2,Q3:3};var Hc=class{quadrant;points=[];maximalY;compare;constructor(e){this.quadrant=e,e===`Q1`||e===`Q2`?(this.compare=(e,t)=>t-e,this.maximalY=1/0):(this.compare=(e,t)=>e-t,this.maximalY=-1/0)}handle(e){this.compare(e.y,this.maximalY)>0&&(this.points.push(new Fc(e.x,e.y,this.quadrant)),this.maximalY=e.y)}},Uc=class{rects=[];minY=null;maxY=null;lastX;queued=null;queuedPnt=null;constructor(e,t){this.lastX=Math.min(e?.x??0,t?.x??0)}handle(e){if(this.queued!==null&&(e.x!==this.queuedPnt.x||Pc.isOneLeftOneRight(this.queuedPnt.quadrant,e.quadrant))&&(this.rects.push(this.queued),this.lastX=this.queued.x+this.queued.width,this.queued=null,this.queuedPnt=null),Pc.isUpper(e.quadrant)?this.minY=e:this.maxY=e,(e.quadrant===`Q1`&&!e.convex||e.quadrant===`Q2`&&e.convex||e.quadrant===`Q3`&&e.convex||e.quadrant===`Q4`&&!e.convex)&&this.minY!==null&&this.maxY!==null){let t={x:this.lastX,y:this.minY.y,width:e.x-this.lastX,height:this.maxY.y-this.minY.y};this.queued=t,this.queuedPnt=e}}},Wc=class e{hull=[];xMax1=null;xMax2=null;xMin1=null;xMin2=null;yMax1=null;yMax2=null;yMin1=null;yMin2=null;static of(t){let n=new e;for(let e of t)(n.xMax1===null||e.x>=n.xMax1.x)&&(n.xMax2=n.xMax1,n.xMax1=e),(n.xMin1===null||e.x<=n.xMin1.x)&&(n.xMin2=n.xMin1,n.xMin1=e),(n.yMax1===null||e.y>=n.yMax1.y)&&(n.yMax2=n.yMax1,n.yMax1=e),(n.yMin1===null||e.y<=n.yMin1.y)&&(n.yMin2=n.yMin1,n.yMin1=e);let r=new Hc(`Q1`);Ao(t,Ic,r);let i=new Hc(`Q4`);Ao(t,Lc,i);let a=new Hc(`Q2`);Ao(t,Rc,a);let o=new Hc(`Q3`);return Ao(t,zc,o),Gc(r.points,`Q1`),Gc(a.points,`Q2`),Gc(o.points,`Q3`),Gc(i.points,`Q4`),n.hull.length=0,n.hull.push(...r.points,...[...a.points].reverse(),...o.points,...[...i.points].reverse()),n}getHull(){return this.hull}splitIntoRectangles(){let e=new Uc(this.xMin1,this.xMin2);return Ao(this.hull,Bc,e),e.queued!==null&&e.rects.push(e.queued),e.rects}};function Gc(e,t){let n=[],r=e[0];n.push(r);for(let i=1;i<e.length;i++){let a=e[i],o=new Fc(a.x,r.y,t);o.convex=!1,n.push(o,a),r=a}e.length=0,e.push(...n)}function Kc(e){return e===`LEFT`||e===`RIGHT`}function qc(e){switch(e){case`LEFT`:return`RIGHT`;case`RIGHT`:return`LEFT`;case`UP`:return`DOWN`;case`DOWN`:return`UP`;default:return`UNDEFINED`}}const Jc={getHorizontalSpacing(e,t){return Math.min(e.getHorizontalSpacing(),t.getHorizontalSpacing())},getVerticalSpacing(e,t){return Math.min(e.getVerticalSpacing(),t.getVerticalSpacing())}};function Yc(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}const Xc=`NORTH`,Zc=`EAST`,Qc=`SOUTH`,$c=`WEST`,el=/* @__PURE__ */ new Set([Xc]),tl=/* @__PURE__ */ new Set([Zc]),nl=/* @__PURE__ */ new Set([Qc]),rl=/* @__PURE__ */ new Set([$c]),il=/* @__PURE__ */ new Set([Xc,Zc]),al=/* @__PURE__ */ new Set([Zc,Qc]),ol=/* @__PURE__ */ new Set([Qc,$c]),sl=/* @__PURE__ */ new Set([Xc,$c]),cl=/* @__PURE__ */ new Set([Xc,Qc]),ll=/* @__PURE__ */ new Set([Zc,$c]),ul=/* @__PURE__ */ new Set([Xc,Zc,$c]),dl=/* @__PURE__ */ new Set([Xc,Qc,$c]),fl=/* @__PURE__ */ new Set([Zc,Qc,$c]),pl=/* @__PURE__ */ new Set([Xc,Zc,Qc,$c]);var ml=class{cGraph;spacing;oldPosition=/* @__PURE__ */ new Map;offsets=/* @__PURE__ */ new Map;globalOffset={x:0,y:0};graphSize={x:0,y:0};externalExtensions=/* @__PURE__ */ new Map;externalPlaceholder=/* @__PURE__ */ new Map;constructor(e){this.spacing=e,this.cGraph=new Eo([])}getOffset(e){let t=this.oldPosition.get(e),n=this.offsets.get(e).rect;return{x:t.x-n.x,y:t.y-n.y}}getGlobalOffset(){return this.globalOffset}getGraphSize(){return this.graphSize}getExternalExtensions(){return this.externalExtensions}getExternalPlaceholder(){return this.externalPlaceholder}transform(e){this.cGraph=new Eo([`LEFT`,`RIGHT`,`UP`,`DOWN`]);for(let t of e.getComponents()){let e=new To;this.cGraph.cGroups.push(e);for(let n of t.getHull()){let r=new hl(n,this.spacing);this.setLock(r,t.getExternalExtensionSides()),this.oldPosition.has(t)||(this.oldPosition.set(t,{x:n.x,y:n.y}),this.offsets.set(t,r)),this.cGraph.cNodes.push(r),e.addCNode(r)}for(let n of t.getExternalExtensions()){let r=new hl(n.getRepresentor(),this.spacing);this.externalExtensions.set(n,{first:e,second:r}),this.setLock(r,t.getExternalExtensionSides());let i=n.getPlaceholder();if(i!==null){let r=new hl(i,this.spacing,1);this.setLock(r,t.getExternalExtensionSides()),new To().addCNode(r);let a=this.externalPlaceholder.get(n.getDirection())??[];a.push({first:e,second:r}),this.externalPlaceholder.set(n.getDirection(),a)}}}return this.cGraph}setLock(e,t){t.size===0&&e.lock.set(!0,!0,!0,!0),Yc(t,el)&&e.lock.set(!0,!0,!0,!1),Yc(t,tl)&&e.lock.set(!1,!0,!0,!0),Yc(t,nl)&&e.lock.set(!0,!0,!1,!0),Yc(t,rl)&&e.lock.set(!0,!1,!0,!0),Yc(t,il)&&e.lock.set(!1,!0,!0,!1),Yc(t,al)&&e.lock.set(!1,!0,!1,!0),Yc(t,ol)&&e.lock.set(!0,!1,!1,!0),Yc(t,sl)&&e.lock.set(!0,!1,!0,!1),Yc(t,cl)&&e.lock.set(!0,!0,!0,!0),Yc(t,ll)&&e.lock.set(!0,!0,!0,!0),Yc(t,fl)&&e.lock.set(!0,!0,!0,!0),Yc(t,dl)&&e.lock.set(!0,!0,!0,!0),Yc(t,ul)&&e.lock.set(!0,!0,!0,!0),Yc(t,pl)&&e.lock.set(!0,!0,!0,!0)}applyLayout(){for(let e of this.cGraph.cNodes)e.applyElementPosition();let e={x:1/0,y:1/0},t={x:-1/0,y:-1/0};for(let n of this.cGraph.cNodes)e.x=Math.min(e.x,n.hitbox.x),e.y=Math.min(e.y,n.hitbox.y),t.x=Math.max(t.x,n.hitbox.x+n.hitbox.width),t.y=Math.max(t.y,n.hitbox.y+n.hitbox.height);for(let n of this.externalPlaceholder.values())for(let r of n){let n=r.second;e.x=Math.min(e.x,n.hitbox.x),e.y=Math.min(e.y,n.hitbox.y),t.x=Math.max(t.x,n.hitbox.x+n.hitbox.width),t.y=Math.max(t.y,n.hitbox.y+n.hitbox.height)}this.globalOffset={x:-e.x,y:-e.y},this.graphSize={x:t.x-e.x,y:t.y-e.y},this.cGraph.cGroups.length=0,this.cGraph.cNodes.length=0}},hl=class extends Bo{rect;spacing;individualSpacing;constructor(e,t,n=null){super(),this.rect=e,this.spacing=t,this.hitbox={x:e.x,y:e.y,width:e.width,height:e.height},this.individualSpacing=n}getHorizontalSpacing(){return this.individualSpacing??this.spacing}getVerticalSpacing(){return this.individualSpacing??this.spacing}applyElementPosition(){this.rect.x=this.hitbox.x,this.rect.y=this.hitbox.y}getElementPosition(){return this.rect.x}toString(){return``}};const gl=/* @__PURE__ */ new Set([`LEFT`,`RIGHT`]),_l=/* @__PURE__ */ new Set([`UP`,`DOWN`]);var vl=class e{compactionGraph=new Eo([]);transformer=new ml(0);verticalExternalExtensions=[];horizontalExternalExtensions=[];compactor=null;topLeft={x:0,y:0};bottomRight={x:0,y:0};constructor(){}static init(t,n){let r=new e;return r.transformer=new ml(n),r.compactionGraph=r.transformer.transform(t),r}compact(){let e=[];this.verticalExternalExtensions=[],this.horizontalExternalExtensions=[];for(let[t,n]of this.transformer.getExternalExtensions())e.push(n.second),Kc(t.getDirection())?this.horizontalExternalExtensions.push(n):this.verticalExternalExtensions.push(n);this.addExternalEdgeRepresentations(this.horizontalExternalExtensions),this.addExternalEdgeRepresentations(this.verticalExternalExtensions),this.compactor=new Ro(this.compactionGraph),this.compactor.setSpacingsHandler(Jc),this.removeExternalEdgeRepresentations(this.horizontalExternalExtensions),this.removeExternalEdgeRepresentations(this.verticalExternalExtensions),e.push(...this.compactor.cGraph.cNodes),this.topLeft={x:1/0,y:1/0},this.bottomRight={x:-1/0,y:-1/0};for(let t of e)this.topLeft.x=Math.min(this.topLeft.x,t.hitbox.x),this.topLeft.y=Math.min(this.topLeft.y,t.hitbox.y),this.bottomRight.x=Math.max(this.bottomRight.x,t.hitbox.x+t.hitbox.width),this.bottomRight.y=Math.max(this.bottomRight.y,t.hitbox.y+t.hitbox.height);this.compactor.setLockingStrategy(e=>e.first.cGroup.outDegree!==0);let t=0,n;do n=this.compactRun(t),t++;while((t<2||n>1e-4)&&t<10);this.compactor.setLockingStrategy(e=>e.first.lock.get(e.second)||e.first.cGroup.outDegree!==0&&e.first.lock.get(e.second)),this.compactRun(0),this.compactor.finish(),this.transformer.applyLayout()}getGraphSize(){return this.transformer.getGraphSize()}getOffset(e){let t=this.transformer.getOffset(e),n=this.transformer.getGlobalOffset();return{x:-t.x+n.x,y:-t.y+n.y}}compactRun(e){let t=0;for(let e of this.compactionGraph.cGroups)e.delta=0,e.deltaNormalized=0;this.addPlaceholders(`HORZ`),this.addExternalEdgeRepresentations(this.verticalExternalExtensions),this.compactor.calculateGroupOffsets(),this.compactor.forceConstraintsRecalculation();let n=`LEFT`;this.compactor.changeDirection(n).compact().changeDirection(qc(n)).applyLockingStrategy().compact().changeDirection(n).applyLockingStrategy().compact(),this.compactor.changeDirection(`LEFT`),this.removeExternalEdgeRepresentations(this.verticalExternalExtensions),this.removePlaceholders(`HORZ`),this.updateExternalExtensionDimensions(`HORZ`),this.updatePlaceholders(`VERT`),this.addPlaceholders(`VERT`),this.addExternalEdgeRepresentations(this.horizontalExternalExtensions),this.compactor.calculateGroupOffsets();for(let e of this.compactionGraph.cGroups)t+=Math.abs(e.deltaNormalized);for(let e of this.compactionGraph.cGroups)e.delta=0,e.deltaNormalized=0;n=`UP`,this.compactor.changeDirection(n).forceConstraintsRecalculation().compact().changeDirection(qc(n)).applyLockingStrategy().compact().changeDirection(n).applyLockingStrategy().compact(),this.compactor.changeDirection(`LEFT`),this.removeExternalEdgeRepresentations(this.horizontalExternalExtensions),this.removePlaceholders(`VERT`),this.updateExternalExtensionDimensions(`VERT`),this.updatePlaceholders(`HORZ`),this.compactor.forceConstraintsRecalculation();for(let e of this.compactionGraph.cGroups)t+=Math.abs(e.deltaNormalized);return t}addExternalEdgeRepresentations(e){for(let t of e)this.compactionGraph.cNodes.push(t.second),t.first.addCNode(t.second)}removeExternalEdgeRepresentations(e){for(let t of e){let e=this.compactionGraph.cNodes.indexOf(t.second);e!==-1&&this.compactionGraph.cNodes.splice(e,1),t.first.removeCNode(t.second)}}addPlaceholders(e){let t=e===`VERT`?_l:gl;for(let e of t)for(let t of this.transformer.getExternalPlaceholder().get(e)??[])this.compactionGraph.cNodes.push(t.second),this.compactionGraph.cGroups.push(t.second.cGroup)}removePlaceholders(e){let t=e===`VERT`?_l:gl;for(let e of t)for(let t of this.transformer.getExternalPlaceholder().get(e)??[]){let e=this.compactionGraph.cNodes.indexOf(t.second);e!==-1&&this.compactionGraph.cNodes.splice(e,1);let n=this.compactionGraph.cGroups.indexOf(t.second.cGroup);n!==-1&&this.compactionGraph.cGroups.splice(n,1)}}updatePlaceholders(e){let t=e===`VERT`?_l:gl;for(let e of t)for(let t of this.transformer.getExternalPlaceholder().get(e)??[]){let n=t.second,r=t.first.deltaNormalized;switch(e){case`LEFT`:case`RIGHT`:n.hitbox.y+=r;break;case`UP`:case`DOWN`:n.hitbox.x+=r}}}updateExternalExtensionDimensions(e){for(let[t,n]of this.transformer.getExternalExtensions()){if(e===`VERT`){if(t.getDirection()!==`UP`&&t.getDirection()!==`DOWN`)continue}else if(t.getDirection()!==`LEFT`&&t.getDirection()!==`RIGHT`)continue;let r=n.second,i=n.first.deltaNormalized;switch(t.getDirection()){case`LEFT`:r.hitbox.x=this.topLeft.x,r.hitbox.width=Math.max(1,r.hitbox.width+i);break;case`RIGHT`:r.hitbox.x=r.hitbox.x+i,r.hitbox.width=Math.max(1,r.hitbox.width-i);break;case`UP`:r.hitbox.y=this.topLeft.y,r.hitbox.height=Math.max(1,r.hitbox.height+i);break;case`DOWN`:r.hitbox.y=r.hitbox.y+i,r.hitbox.height=Math.max(1,r.hitbox.height-i)}}}};const yl=new ut(`org.eclipse.elk.layered.compaction.connectedComponents`,!1),bl=1e-4;function xl(e){switch(e){case`NORTH`:return`UP`;case`WEST`:return`LEFT`;case`EAST`:return`RIGHT`;case`SOUTH`:return`DOWN`;default:return`UNDEFINED`}}function Sl(e,t,n){return Math.abs(e-t)<=n}function Cl(e,t,n,r){return{x:e,y:t,width:n,height:r}}function wl(e){return{x:e.x+e.width,y:e.y}}function Tl(e){return{x:e.x+e.width,y:e.y+e.height}}function El(e){return{x:e.x,y:e.y+e.height}}function Dl(e){return{x:e.x,y:e.y}}var Ol=class{compactor=null;yetAnotherOffset={x:0,y:0};compactedGraphSize={x:0,y:0};graphTopLeft={x:0,y:0};graphBottomRight={x:0,y:0};compact(e,t,n){this.graphTopLeft={x:1/0,y:1/0},this.graphBottomRight={x:-1/0,y:-1/0};for(let t of e)for(let e of t.getLayerlessNodes())this.graphTopLeft.x=Math.min(this.graphTopLeft.x,e.position.x-e.getMargin().left),this.graphTopLeft.y=Math.min(this.graphTopLeft.y,e.position.y-e.getMargin().top),this.graphBottomRight.x=Math.max(this.graphBottomRight.x,e.position.x+e.size.x+e.getMargin().right),this.graphBottomRight.y=Math.max(this.graphBottomRight.y,e.position.y+e.size.y+e.getMargin().bottom);let r=new kl;for(let t of e){let e=this.transformLGraph(t);r.getComponents().push(e),e.containsRegularNodes=e.containsRegularNodes||e.getExternalExtensionSides().size>0}this.compactor=vl.init(r,n),this.compactor.compact(),this.yetAnotherOffset={x:0,y:0},this.compactedGraphSize=this.compactor.getGraphSize();for(let e of r.getComponents()){let t=this.compactor.getOffset(e);Rl(e.graph,t.x,t.y);for(let t of e.getNodes())if(t.getType()===`EXTERNAL_PORT`){let e=this.getExternalPortPosition(t.getPosition(),t.getProperty(j));t.position.x=e.x,t.position.y=e.y}}for(let e of r.getComponents())for(let t of e.getExternalEdges()){let e=[];e.push(t.getSource().getAbsoluteAnchor()),e.push(...t.getBendPoints()),e.push(t.getTarget().getAbsoluteAnchor());let n=null;for(let t of e)n===null||(Sl(n.x,t.x,bl)?(this.yetAnotherOffset.x=Math.min(this.yetAnotherOffset.x,n.x),this.compactedGraphSize.x=Math.max(this.compactedGraphSize.x,n.x)):Sl(n.y,t.y,bl)&&(this.yetAnotherOffset.y=Math.min(this.yetAnotherOffset.y,n.y),this.compactedGraphSize.y=Math.max(this.compactedGraphSize.y,n.y))),n=t}this.yetAnotherOffset.x=-this.yetAnotherOffset.x,this.yetAnotherOffset.y=-this.yetAnotherOffset.y,this.compactedGraphSize.x+=this.yetAnotherOffset.x,this.compactedGraphSize.y+=this.yetAnotherOffset.y}getOffset(){return this.yetAnotherOffset}getGraphSize(){return this.compactedGraphSize}transformLGraph(e){let t=new Al(e);t.containsRegularNodes||this.createDummyNode(e);let n=this.componentHullPoints(e),r=/* @__PURE__ */ new Map,i=new Fl;for(let t of e.getLayerlessNodes())for(let e of t.getOutgoingEdges())if(this.isExternalEdge(e)){let t=this.transformLEdge(e,n,i),a=r.get(t.getDirection())??[];a.push(t.edge),r.set(t.getDirection(),a)}let a=[];for(let e of t.getExternalExtensionSides()){let t=i.min[e],o=i.max[e],s=i.extent[e],c=null,l=null;switch(e){case`WEST`:c=Cl(this.graphTopLeft.x,t,n.topLeft.x-this.graphTopLeft.x,o-t),l=Cl(this.graphTopLeft.x,t,s,o-t),n.addVector(wl(c)),n.addVector(Tl(c));break;case`EAST`:c=Cl(n.bottomRight.x,t,this.graphBottomRight.x-n.bottomRight.x,o-t),l=Cl(this.graphBottomRight.x-s,t,s,o-t),n.addVector(Dl(c)),n.addVector(El(c));break;case`NORTH`:c=Cl(t,this.graphTopLeft.y,o-t,n.topLeft.y-this.graphTopLeft.y),l=Cl(t,this.graphTopLeft.y,o-t,s),n.addVector(El(c)),n.addVector(Tl(c));break;case`SOUTH`:c=Cl(t,n.bottomRight.y,o-t,this.graphBottomRight.y-n.bottomRight.y),l=Cl(t,this.graphBottomRight.y-s,o-t,s),n.addVector(Dl(c)),n.addVector(wl(c))}if(c!==null){let t=new jl;t.side=e,t.extension=c,t.placeholder=l,t.edges=new Set(r.get(xl(e))??[]),a.push(t)}}return t.externalExtensions=a,t.rectilinearConvexHull=Wc.of(n.points).splitIntoRectangles(),t}createDummyNode(e){let t=e.getLayerlessNodes()[0],n=new V(e);switch(n.size.x=Math.max(1,t.size.x),n.size.y=Math.max(1,t.size.y),n.position.x=t.position.x,n.position.y=t.position.y,t.getProperty(j)){case`WEST`:n.position.x+=2;break;case`NORTH`:n.position.y+=2;break;case`EAST`:n.position.x-=2;break;case`SOUTH`:n.position.y-=2}let r=new H;r.setNode(n);let i=new U,a=t.getPorts()[0];i.setSource(a),i.setTarget(r),r.position.x=a.position.x,r.position.y=a.position.y;let o=a.getAnchor(),s=r.getAnchor();s.x=o.x,s.y=o.y}componentHullPoints(e){let t=new Nl;for(let n of e.getLayerlessNodes())if(n.getType()!==`EXTERNAL_PORT`){Il(t,n);for(let e of n.getOutgoingEdges())if(!this.isExternalEdge(e))for(let n of e.getBendPoints())t.add(new Fc(n.x,n.y))}return t}isExternalEdge(e){return e.getSource().getNode().getType()===`EXTERNAL_PORT`||e.getTarget().getNode().getType()===`EXTERNAL_PORT`}transformLEdge(e,t,n){let r=new Ml(e),i=this.edgeToSegments(e,r),a=Math.max(e.getProperty(Ye),1);for(let e of i.innerSegments){let n=this.segmentToRectangle(e.first,e.second,a);t.addRect(n)}let o=r.externalPortSide,s=this.segmentToRectangle(i.outerSegment.first,i.outerSegment.second,a);o===`WEST`||o===`EAST`?(n.min[o]=Math.min(n.min[o],s.y),n.max[o]=Math.max(n.max[o],s.y+s.height)):(n.min[o]=Math.min(n.min[o],s.x),n.max[o]=Math.max(n.max[o],s.x+s.width));let c=-1/0,l=r.externalPort.getNode().getMargin();switch(o){case`WEST`:c=l.right;break;case`EAST`:c=l.left;break;case`NORTH`:c=l.bottom;break;case`SOUTH`:c=l.top}return n.extent[o]=Math.max(n.extent[o],c),r}segmentToRectangle(e,t,n){return Cl(Math.min(e.x,t.x)-n/2,Math.min(e.y,t.y)-n/2,Math.abs(e.x-t.x)+n,Math.abs(e.y-t.y)+n)}edgeToSegments(e,t){let n=t.externalPort,r=t.externalPortSide,i=e.getSource().getAbsoluteAnchor(),a=e.getTarget().getAbsoluteAnchor();n===e.getSource()?(i=this.getExternalPortPosition(i,r),a=Ll(e.getTarget())):(i=Ll(e.getSource()),a=this.getExternalPortPosition(a,r));let o=[];o.push(i),o.push(...e.getBendPoints()),o.push(a);let s=e.getSource()===n,c=new Pl;for(let e=0;e<o.length-1;++e){let t={first:o[e],second:o[e+1]};s&&e===0||!s&&e===o.length-2?c.outerSegment=t:c.innerSegments.push(t)}return c}getExternalPortPosition(e,t){switch(t){case`NORTH`:return{x:e.x,y:Math.min(this.graphTopLeft.y,e.y)};case`EAST`:return{x:Math.max(this.graphBottomRight.x,e.x),y:e.y};case`SOUTH`:return{x:e.x,y:Math.max(this.graphBottomRight.y,e.y)};case`WEST`:return{x:Math.min(e.x,this.graphTopLeft.x),y:e.y};default:return{x:e.x,y:e.y}}}},kl=class{components=[];containsExternalPorts=!1;getComponents(){return this.components}isContainsExternalExtensions(){return this.containsExternalPorts}},Al=class{graph;containsRegularNodes;rectilinearConvexHull=[];externalExtensions=[];constructor(e){this.graph=e,this.containsRegularNodes=e.getLayerlessNodes().some(e=>e.getType()===`NORMAL`)}getExternalExtensionSides(){return this.graph.getProperty(c)??/* @__PURE__ */ new Set}getHull(){return this.rectilinearConvexHull}getExternalExtensions(){return this.externalExtensions}getNodes(){return this.graph.getLayerlessNodes()}getExternalEdges(){let e=[];for(let t of this.externalExtensions)e.push(...t.getRepresentative());return e}},jl=class{edges=/* @__PURE__ */ new Set;side=`UNDEFINED`;extension=Cl(0,0,0,0);placeholder=Cl(0,0,0,0);getRepresentative(){return this.edges}getRepresentor(){return this.extension}getParent(){throw Error(`UnsupportedOperationException`)}getDirection(){return xl(this.side)}getPlaceholder(){return this.placeholder}},Ml=class{edge;externalPort;externalPortSide;constructor(e){if(this.edge=e,e.getSource().getNode().getType()===`EXTERNAL_PORT`)this.externalPort=e.getSource(),this.externalPortSide=e.getSource().getNode().getProperty(j);else if(e.getTarget().getNode().getType()===`EXTERNAL_PORT`)this.externalPort=e.getTarget(),this.externalPortSide=e.getTarget().getNode().getProperty(j);else throw Error(`Edge ${e} is not an external edge.`)}getDirection(){return xl(this.externalPortSide)}getRepresentative(){return this.edge}},Nl=class{points=[];topLeft={x:1/0,y:1/0};bottomRight={x:-1/0,y:-1/0};add(e){this.topLeft.x=Math.min(this.topLeft.x,e.x),this.topLeft.y=Math.min(this.topLeft.y,e.y),this.bottomRight.x=Math.max(this.bottomRight.x,e.x),this.bottomRight.y=Math.max(this.bottomRight.y,e.y),this.points.push(e)}addVector(e){this.add(new Fc(e.x,e.y))}addRect(e){this.addVector({x:e.x,y:e.y}),this.addVector({x:e.x+e.width,y:e.y}),this.addVector({x:e.x,y:e.y+e.height}),this.addVector({x:e.x+e.width,y:e.y+e.height})}},Pl=class{innerSegments=[];outerSegment=null},Fl=class{min;max;extent;constructor(){this.min={NORTH:1/0,EAST:1/0,SOUTH:1/0,WEST:1/0,UNDEFINED:1/0},this.max={NORTH:-1/0,EAST:-1/0,SOUTH:-1/0,WEST:-1/0,UNDEFINED:-1/0},this.extent={NORTH:-1/0,EAST:-1/0,SOUTH:-1/0,WEST:-1/0,UNDEFINED:-1/0}}};function Il(e,t){let n=t.getMargin();e.addVector({x:t.position.x-n.left,y:t.position.y-n.top}),e.addVector({x:t.position.x-n.left,y:t.position.y+t.size.y+n.bottom}),e.addVector({x:t.position.x+t.size.x+n.right,y:t.position.y-n.top}),e.addVector({x:t.position.x+t.size.x+n.right,y:t.position.y+t.size.y+n.bottom})}function Ll(e){let t=e.getAbsoluteAnchor(),n=e.getNode().getMargin();switch(e.getSide()){case`NORTH`:t.y-=n.top;break;case`EAST`:t.x+=n.right;break;case`SOUTH`:t.y+=n.bottom;break;case`WEST`:t.x-=n.left}return t}function Rl(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e.getLayerlessNodes()){i.position.x+=t,i.position.y+=n;for(let e of i.getPorts())for(let i of e.getOutgoingEdges())if(!r.has(i)){r.add(i);for(let e of i.getBendPoints())e.x+=t,e.y+=n}}}function zl(e){return e.getProperty(c)??/* @__PURE__ */ new Set}var Bl=class extends Nc{combine(e,t){if(e.length===1){let n=e[0];n!==t&&(t.getLayerlessNodes().length=0,this.moveGraph(t,n,0,0),t.copyProperties(n),t.getSize().x=n.getSize().x,t.getSize().y=n.getSize().y);return}if(e.length===0){t.getLayerlessNodes().length=0,t.getSize().x=0,t.getSize().y=0;return}this.sortComponents(e,t);let n=e[0];t.getLayerlessNodes().length=0,t.copyProperties(n);let r=0,i=0;for(let t of e){let e=t.getSize();r=Math.max(r,e.x),i+=e.x*e.y}r=Math.max(r,Math.sqrt(i)*t.getProperty(Pt));let a=t.getProperty(je);if(this.placeComponents(e,t,r,a),n.getProperty(yl)){let n=new Ol;n.compact(e,t.getSize(),a);for(let t of e){let e=t.getOffset();e.x=n.getOffset().x,e.y=n.getOffset().y}let r=t.getSize();r.x=n.getGraphSize().x,r.y=n.getGraphSize().y}this.moveGraphs(t,e,0,0)}sortComponents(e,t){}placeComponents(e,t,n,r){let i=0,a=0,o=0,s=r,c=null,l=0;for(let t of e){let e=t.getSize(),u=zl(t);(i+e.x>n&&!u.has(`NORTH`)||c!==null&&zl(c).has(`EAST`)||u.has(`WEST`))&&(i=l,a+=o+r,o=0);let d=t.getOffset();u.has(`NORTH`)&&(i=s+r),this.offsetGraph(t,i+d.x,a+d.y),s=Math.max(s,i+e.x),u.has(`SOUTH`)&&(l=Math.max(l,i+e.x+r)),d.x=0,d.y=0,o=Math.max(o,e.y),i+=e.x+r,c=t}t.getSize().x=s,t.getSize().y=a+o}};function Vl(e){return[...e].sort().join(`,`)}const Y={NONE:/* @__PURE__ */ new Set,WEST:/* @__PURE__ */ new Set([`WEST`]),EAST:/* @__PURE__ */ new Set([`EAST`]),NORTH:/* @__PURE__ */ new Set([`NORTH`]),SOUTH:/* @__PURE__ */ new Set([`SOUTH`]),NORTH_SOUTH:/* @__PURE__ */ new Set([`NORTH`,`SOUTH`]),EAST_WEST:/* @__PURE__ */ new Set([`EAST`,`WEST`]),NORTH_WEST:/* @__PURE__ */ new Set([`NORTH`,`WEST`]),NORTH_EAST:/* @__PURE__ */ new Set([`NORTH`,`EAST`]),SOUTH_WEST:/* @__PURE__ */ new Set([`SOUTH`,`WEST`]),EAST_SOUTH:/* @__PURE__ */ new Set([`EAST`,`SOUTH`]),NORTH_EAST_WEST:/* @__PURE__ */ new Set([`NORTH`,`EAST`,`WEST`]),NORTH_SOUTH_WEST:/* @__PURE__ */ new Set([`NORTH`,`SOUTH`,`WEST`]),EAST_SOUTH_WEST:/* @__PURE__ */ new Set([`EAST`,`SOUTH`,`WEST`]),NORTH_EAST_SOUTH:/* @__PURE__ */ new Set([`NORTH`,`EAST`,`SOUTH`]),NORTH_EAST_SOUTH_WEST:/* @__PURE__ */ new Set([`NORTH`,`EAST`,`SOUTH`,`WEST`])},Hl=/* @__PURE__ */ new Map;function X(e,...t){let n=Vl(e),r=Hl.get(n);r===void 0&&(r=/* @__PURE__ */ new Set,Hl.set(n,r));for(let e of t)r.add(Vl(e))}X(Y.NONE,Y.NORTH_EAST_SOUTH_WEST),X(Y.WEST,Y.NORTH_EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST),X(Y.EAST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH,Y.NORTH_EAST_SOUTH_WEST,Y.NORTH_EAST_WEST),X(Y.SOUTH,Y.EAST_SOUTH_WEST,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_SOUTH,Y.EAST_WEST,Y.NORTH_EAST_SOUTH_WEST,Y.NORTH_EAST_WEST,Y.EAST_SOUTH_WEST),X(Y.EAST_WEST,Y.NORTH_SOUTH,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_WEST,Y.NORTH_WEST,Y.NORTH_EAST_WEST,Y.NORTH_SOUTH_WEST),X(Y.NORTH_EAST,Y.NORTH_EAST,Y.NORTH_EAST_WEST,Y.NORTH_EAST_SOUTH),X(Y.SOUTH_WEST,Y.SOUTH_WEST,Y.EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST),X(Y.EAST_SOUTH,Y.EAST_SOUTH,Y.EAST_SOUTH_WEST,Y.NORTH_EAST_SOUTH),X(Y.NORTH_EAST_WEST,Y.NORTH,Y.NORTH_SOUTH,Y.NORTH_WEST,Y.NORTH_EAST,Y.NORTH_EAST_SOUTH_WEST,Y.NORTH_EAST_WEST,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH),X(Y.EAST_SOUTH_WEST,Y.SOUTH,Y.NORTH_SOUTH,Y.SOUTH_WEST,Y.EAST_SOUTH,Y.EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_SOUTH_WEST,Y.WEST,Y.EAST_WEST,Y.NORTH_WEST,Y.SOUTH_WEST,Y.NORTH_EAST_WEST,Y.EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_EAST_SOUTH,Y.EAST,Y.EAST_WEST,Y.NORTH_EAST,Y.EAST_SOUTH,Y.NORTH_EAST_WEST,Y.EAST_SOUTH_WEST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_EAST_SOUTH_WEST,Y.NONE,Y.WEST,Y.EAST,Y.NORTH,Y.SOUTH,Y.NORTH_SOUTH,Y.EAST_WEST,Y.NORTH_EAST_WEST,Y.EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST);var Ul=class{components=/* @__PURE__ */ new Map;constructor(e){e!==void 0&&this.add(e)}add(e){if(this.canAdd(e)){let t=Vl(e.getProperty(c)??/* @__PURE__ */ new Set),n=this.components.get(t);return n===void 0?this.components.set(t,[e]):n.push(e),!0}return!1}canAdd(e){let t=e.getProperty(c)??/* @__PURE__ */ new Set,n=Hl.get(Vl(t));if(n!==void 0)for(let e of n){let t=this.components.get(e);if(t!==void 0&&t.length>0)return!1}return!0}getPortSides(){return[...this.components.keys()]}getComponents(){return[...this.components.values()].flat()}getComponentsFor(e){return this.components.get(Vl(e))??[]}},Wl=class extends Nc{componentGroups=[];combine(e,t){if(this.componentGroups=[],t.getLayerlessNodes().length=0,e.length===0){t.getSize().x=0,t.getSize().y=0;return}let n=e[0];t.copyProperties(n);for(let t of e)this.addComponent(t);let r=0,i=0,a=n.getProperty(je);for(let e of this.componentGroups){let t=this.placeComponents(e,a);this.offsetGraphs(e.getComponents(),r,i),r+=t.x,i+=t.y}if(t.getSize().x=r-a,t.getSize().y=i-a,n.getProperty(yl)&&n.getProperty(s)===`ORTHOGONAL`){for(let t of e)this.offsetGraph(t,t.getOffset().x,t.getOffset().y);let n=new Ol;n.compact(e,t.getSize(),a);for(let t of e)t.getOffset().x=n.getOffset().x,t.getOffset().y=n.getOffset().y;t.getSize().x=n.getGraphSize().x,t.getSize().y=n.getGraphSize().y}for(let e of this.componentGroups)this.moveGraphs(t,e.getComponents(),0,0)}addComponent(e){for(let t of this.componentGroups)if(t.add(e))return;this.componentGroups.push(new Ul(e))}placeComponents(e,t){let n=this.placeComponentsInRows(e.getComponentsFor(Y.NONE),t),r=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH),t),i=this.placeComponentsHorizontally(e.getComponentsFor(Y.SOUTH),t),a=this.placeComponentsVertically(e.getComponentsFor(Y.WEST),t),o=this.placeComponentsVertically(e.getComponentsFor(Y.EAST),t),s=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_WEST),t),c=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_EAST),t),l=this.placeComponentsHorizontally(e.getComponentsFor(Y.SOUTH_WEST),t),u=this.placeComponentsHorizontally(e.getComponentsFor(Y.EAST_SOUTH),t),d=this.placeComponentsVertically(e.getComponentsFor(Y.EAST_WEST),t),f=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_SOUTH),t),p=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_EAST_WEST),t),m=this.placeComponentsHorizontally(e.getComponentsFor(Y.EAST_SOUTH_WEST),t),h=this.placeComponentsVertically(e.getComponentsFor(Y.NORTH_SOUTH_WEST),t),g=this.placeComponentsVertically(e.getComponentsFor(Y.NORTH_EAST_SOUTH),t),_=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_EAST_SOUTH_WEST),t),v=Math.max(s.x,a.x,l.x,h.x),y=Math.max(r.x,n.x,i.x,_.x),b=f.x,x=Math.max(c.x,o.x,u.x,g.x),S=Math.max(s.y,r.y,c.y,p.y),ee=Math.max(a.y,n.y,o.y,_.y),C=d.y,te=Math.max(l.y,i.y,u.y,m.y);this.offsetGraphs(e.getComponentsFor(Y.NONE),v+b,S+C),this.offsetGraphs(e.getComponentsFor(Y.NORTH_EAST_SOUTH_WEST),v+b,S+C),this.offsetGraphs(e.getComponentsFor(Y.NORTH),v+b,0),this.offsetGraphs(e.getComponentsFor(Y.SOUTH),v+b,S+C+ee),this.offsetGraphs(e.getComponentsFor(Y.WEST),0,S+C),this.offsetGraphs(e.getComponentsFor(Y.EAST),v+b+y,S+C),this.offsetGraphs(e.getComponentsFor(Y.NORTH_EAST),v+b+y,0),this.offsetGraphs(e.getComponentsFor(Y.SOUTH_WEST),0,S+C+ee),this.offsetGraphs(e.getComponentsFor(Y.EAST_SOUTH),v+b+y,S+C+ee),this.offsetGraphs(e.getComponentsFor(Y.EAST_WEST),0,S),this.offsetGraphs(e.getComponentsFor(Y.NORTH_SOUTH),v,0),this.offsetGraphs(e.getComponentsFor(Y.EAST_SOUTH_WEST),0,S+C+ee),this.offsetGraphs(e.getComponentsFor(Y.NORTH_EAST_SOUTH),v+b+y,0);let ne={x:0,y:0};return ne.x=Math.max(v+y+b+x,d.x,p.x,m.x),ne.y=Math.max(S+ee+C+te,f.y,h.y,g.y),ne}placeComponentsHorizontally(e,t){let n={x:0,y:0};for(let r of e)this.offsetGraph(r,n.x,0),n.x+=r.getSize().x+t,n.y=Math.max(n.y,r.getSize().y);return n.y>0&&(n.y+=t),n}placeComponentsVertically(e,t){let n={x:0,y:0};for(let r of e)this.offsetGraph(r,0,n.y),n.y+=r.getSize().y+t,n.x=Math.max(n.x,r.getSize().x);return n.x>0&&(n.x+=t),n}placeComponentsInRows(e,t){if(e.length===0)return{x:0,y:0};let n=0,r=0;for(let t of e){let e=t.getSize();n=Math.max(n,e.x),r+=e.x*e.y}n=Math.max(n,Math.sqrt(r));let i=0,a=0,o=0,s=t;for(let r of e){let e=r.getSize();i+e.x>n&&(i=0,a+=o+t,o=0),this.offsetGraph(r,i,a),s=Math.max(s,i+e.x),o=Math.max(o,e.y),i+=e.x+t}return{x:s+t,y:a+o+t}}},Gl=class{split(e){if(e.getProperty(mn)===`INCLUDE_CHILDREN`)return[e];let t=e.getProperty(rt)!==!1,n=e.getProperty(w).has(`EXTERNAL_PORTS`),r=e.getProperty(O),i=!D.isOrderFixed(r);if(!t||n&&!i)return[e];let a=this.splitInner(e);return e.getProperty(Wn)!==h.NONE&&a.sort((e,t)=>Kl(e)-Kl(t)),a}splitInner(e){let t=/* @__PURE__ */ new Set,n=[];for(let r of e.getLayerlessNodes()){if(t.has(r))continue;let i=[];if(this.dfs(r,i,t),i.length>0){let t=new rr;t.copyProperties(e),t.getPadding().left=e.getPadding().left,t.getPadding().top=e.getPadding().top,t.getPadding().right=e.getPadding().right,t.getPadding().bottom=e.getPadding().bottom;for(let e of i)t.getLayerlessNodes().push(e),e.setGraph(t);n.push(t)}}return n.length>0?n:[e]}dfs(e,t,n){if(!n.has(e)){n.add(e),t.push(e);for(let r of e.getPorts())for(let e of r.getConnectedPorts()){let r=e.getNode();r!==null&&this.dfs(r,t,n)}}}combine(e,t){if(t.getProperty(w).has(`EXTERNAL_PORTS`)){let n=t.getProperty(Wn);if(n===h.MODEL_ORDER){new Bl().combine(e,t);return}if(n!==h.GROUP_MODEL_ORDER){new Wl().combine(e,t);return}}if(t.getLayerlessNodes().length=0,e.length===1){let n=e[0];n!==t&&this.moveGraph(t,n,0,0);return}if(e.length===0)return;let n=t.getProperty(je),r=t.getProperty(Wn)===h.NONE?[...e].sort((e,t)=>e.getSize().x*e.getSize().y-t.getSize().x*t.getSize().y):[...e],i=0,a=0;for(let e of r){let t=e.getSize();i=Math.max(i,t.x),a+=t.x*t.y}let o=t.getProperty(Pt);i=Math.max(i,Math.sqrt(a)*o);let s=0,c=0,l=0,u=n;for(let e of r){let t=e.getSize();s+t.x>i&&(s=0,c+=l+n,l=0);let r=e.getOffset();this.offsetGraph(e,s+r.x,c+r.y),r.x=0,r.y=0,u=Math.max(u,s+t.x),l=Math.max(l,t.y),s+=t.x+n}if(t.getSize().x=u,t.getSize().y=c+l,e[0].getProperty(yl)){let r=new Ol;r.compact(e,t.getSize(),n);for(let t of e){let e=t.getOffset();e.x=r.getOffset().x,e.y=r.getOffset().y}let i=t.getSize();i.x=r.getGraphSize().x,i.y=r.getGraphSize().y}for(let e of r)this.moveGraph(t,e,0,0)}moveGraph(e,t,n,r){let i=n+t.getOffset().x,a=r+t.getOffset().y,o=/* @__PURE__ */ new Set;for(let n of t.getLayerlessNodes()){n.position.x+=i,n.position.y+=a;for(let e of n.getPorts())for(let t of e.getConnectedEdges())if(!o.has(t)){o.add(t);for(let e of t.getBendPoints())e.x+=i,e.y+=a}e.getLayerlessNodes().push(n),n.setGraph(e)}t.getOffset().x=0,t.getOffset().y=0}offsetGraph(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e.getLayerlessNodes()){i.position.x+=t,i.position.y+=n;for(let e of i.getPorts())for(let i of e.getConnectedEdges())if(!r.has(i)){r.add(i);for(let e of i.getBendPoints())e.x+=t,e.y+=n}}}};function Kl(e){let t=2**53-1;for(let n of e.getLayerlessNodes())n.hasProperty(F)&&(t=Math.min(t,n.getProperty(F)));return t}function ql(e){let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e.getLayerlessNodes()){let e=a.getMargin(),o=a.position.x-e.left,s=a.position.y-e.top,c=a.position.x+a.size.x+e.right,l=a.position.y+a.size.y+e.bottom;for(let e of a.getPorts()){let t=e.getPosition(),n=e.getSize();o=Math.min(o,a.position.x+t.x),s=Math.min(s,a.position.y+t.y),c=Math.max(c,a.position.x+t.x+n.x),l=Math.max(l,a.position.y+t.y+n.y)}t=Math.min(t,o),n=Math.min(n,s),r=Math.max(r,c),i=Math.max(i,l)}Number.isFinite(t)&&(e.getSize().x=Math.max(e.getSize().x,r-t),e.getSize().y=Math.max(e.getSize().y,i-n))}const Jl=.001;function Yl(e){let t=e.getProperty(Ft),n=e.getProperty(se);if(n==null)return;let r=/* @__PURE__ */ new Set;for(let[i,o]of n){let n=[...o].sort((t,n)=>Ac(t,n,e));if(n.length===0)continue;let s=n[0].getActualSource(),c=n[n.length-1].getActualTarget();if(s===null||c===null)continue;let l=s.getNode(),u;u=l===c.getNode()?l.getGraph()?.getParentNode()??null:lc(l,c.getNode());let d;if(u!==null)d=u.getNestedGraph();else for(d=l.getGraph();d.getParentNode()!==null;)d=d.getParentNode().getGraph();let f=Xl(i,n);i.getBendPoints().length=0;let p=null;for(let o of n){let n=o.getGraph().getAllNodes().some(e=>e.getType()===`NORMAL`)?Zl(o.getGraph(),d):fc(o.getGraph(),d),s=o.getNewEdge(),l=s.getBendPoints().map(e=>({x:e.x+n.x,y:e.y+n.y})),u=o.getGraph(),m=Zl(u,d),h=fc(u,d),g=s.getSource().getNode(),_=s.getTarget().getNode(),v=e.getProperty(mn)===`INCLUDE_CHILDREN`,y=e.getProperty(S),b=e=>{if(e===null||e.getType()!==`EXTERNAL_PORT`)return!1;let t=e.getProperty(j);return y===`DOWN`||y===`UP`?t===`NORTH`||t===`SOUTH`:t===`WEST`||t===`EAST`},x=e=>e!==null&&e.getType()===`EXTERNAL_PORT`?v&&b(e)?m:h:m,ee=x(g),C=x(_),te=s.getSource().getAbsoluteAnchor(),ne=s.getTarget().getAbsoluteAnchor(),w={x:te.x+ee.x,y:te.y+ee.y},T={x:ne.x+C.x,y:ne.y+C.y};if(p!==null){let e=l.length>0?l[0]:T,n=Math.abs(p.x-e.x)>Jl,r=Math.abs(p.y-e.y)>Jl;(!t&&n&&r||t&&(n||r))&&i.getBendPoints().push({...w})}if(i.getBendPoints().push(...l),p=l.length>0?l[l.length-1]:w,f!==null){let e=s.getProperty(R);if(e!=null)for(let t of e)f.push({x:t.x+n.x,y:t.y+n.y})}if(o.getActualTarget()===c){let e=c.getNode(),t=e.getGraph(),n=e.getType()===`EXTERNAL_PORT`?fc(t,d):Zl(t,d);i.setProperty(a,n)}for(let e of[...s.getLabels()])e.position.x+=n.x,e.position.y+=n.y,i.getLabels().push(e);s.getLabels().length=0,r.add(s)}i.setSource(s),i.setTarget(c)}for(let e of r)e.setSource(null),e.setTarget(null)}function Xl(e,t){let n=t.some(e=>{let t=e.getNewEdge().getProperty(R);return t!=null&&t.length>0}),r=e.getProperty(R);return n?r==null?(r=[],e.setProperty(R,r)):r.length=0:r!=null&&(e.setProperty(R,null),r=null),r}function Zl(e,t){let n={x:0,y:0},r=e;for(;r!==null&&r!==t;){let e=r.getParentNode();if(e===null)break;n.x+=e.position.x,n.y+=e.position.y,r=e.getGraph()}return n}const Ql=/* @__PURE__ */ new WeakMap;var $l=class{process(e){let t=[],n=[...e.getLayerlessNodes()];for(let r of n)if(this.isRelevantNode(r)){this.hide(r),t.push(r);let n=e.getLayerlessNodes().indexOf(r);n!==-1&&e.getLayerlessNodes().splice(n,1)}t.length>0&&e.setProperty(ue,t)}isRelevantNode(e){let t=e.getLayerConstraint();return t===`FIRST_SEPARATE`||t===`LAST_SEPARATE`}hide(e){this.ensureNoInacceptableEdges(e);for(let t of[...e.getConnectedEdges()])this.hideEdge(e,t)}hideEdge(e,t){let n=t.getSource().getNode()===e,r=n?t.getTarget():t.getSource();n?t.setTarget(null):t.setSource(null),t.setProperty(fn,r),this.updateOppositeNodeLayerConstraints(e,r.getNode())}updateOppositeNodeLayerConstraints(e,t){if(t.getLayerConstraint()!==null)return;let n=Ql.get(t)??`NONE`,r=e.getLayerConstraint()??`NONE`,i=this.combine(n,r);if(Ql.set(t,i),!(t.getConnectedEdges().length>0))switch(i){case`FIRST_SEPARATE`:t.setLayerConstraint(`FIRST`);break;case`LAST_SEPARATE`:t.setLayerConstraint(`LAST`)}}combine(e,t){return e===`NONE`?t===`FIRST_SEPARATE`?`FIRST_SEPARATE`:`LAST_SEPARATE`:e===`FIRST_SEPARATE`?t===`FIRST_SEPARATE`?`FIRST_SEPARATE`:`BOTH`:e===`LAST_SEPARATE`?t===`FIRST_SEPARATE`?`BOTH`:`LAST_SEPARATE`:`BOTH`}ensureNoInacceptableEdges(e){let t=e.getLayerConstraint();if(t===`FIRST_SEPARATE`){for(let t of e.getIncomingEdges())if(!this.isAcceptableIncidentEdge(t))throw Error(`FIRST_SEPARATE node must not have incoming edges`)}else if(t===`LAST_SEPARATE`){for(let t of e.getOutgoingEdges())if(!this.isAcceptableIncidentEdge(t))throw Error(`LAST_SEPARATE node must not have outgoing edges`)}}isAcceptableIncidentEdge(e){let t=e.getSource().getNode(),n=e.getTarget().getNode();return t!==null&&n!==null&&t.getType()===`EXTERNAL_PORT`&&n.getType()===`EXTERNAL_PORT`}};function eu(e){let t=e.getLayers();if(t.length>0){let n=t[0],r=t[t.length-1];tu(e,n,r)}let n=e.getProperty(ue);if(n!==void 0&&n.length>0){let r=new W(e),i=new W(e);nu(n,r,i),r.getNodes().length>0&&t.unshift(r),i.getNodes().length>0&&t.push(i)}for(let e=t.length-1;e>=0;e--)t[e].getNodes().length===0&&t.splice(e,1)}function tu(e,t,n){for(let r of[...e.getLayers()])for(let e of[...r.getNodes()]){let r=e.getLayerConstraint();r===`FIRST`?e.setLayer(t):r===`LAST`&&e.setLayer(n)}let r=e.getLayers();for(let e=r.length-1;e>=0;e--)r[e].getNodes().length===0&&r.splice(e,1)}function nu(e,t,n){for(let r of e){let e=r.getLayerConstraint();e===`FIRST_SEPARATE`?r.setLayer(t):e===`LAST_SEPARATE`&&r.setLayer(n);for(let e of r.getConnectedEdges()){if(e.getSource()!==null&&e.getTarget()!==null)continue;let t=e.getTarget()===null,n=e.getProperty(fn);t?e.setTarget(n):e.setSource(n)}}}var ru=class{start=0;end=0;nodes=[]};function iu(e,t){let n=[];for(let t of e.getLayerlessNodes()){let e=t.getPosition().x,r=Math.max(e+1,t.getPosition().x+t.size.x),i=null,a=0;for(;a<n.length;a++){let o=n[a];if(o.start>=r)break;o.end>e&&(i===null?(o.nodes.push(t),o.start=Math.min(o.start,e),o.end=Math.max(o.end,r),i=o):(i.nodes.push(...o.nodes),i.end=Math.max(i.end,o.end),n.splice(a,1),a--))}if(i===null){let i=new ru;i.start=e,i.end=r,i.nodes.push(t),n.splice(a,0,i)}}let r=e.getLayers(),i=0;for(let t of n){let n=new W(e);n.id=i++,r.push(n);for(let e of t.nodes)e.setLayer(n),e.id=0}for(let t of e.getLayerlessNodes()){if(t.id!==0)continue;let n=au(t,e);for(;n.size>0;){let t=n.values().next().value;n.delete(t);for(let r of au(t,e))n.add(r)}}for(let e=r.length-1;e>=0;e--)r[e].getNodes().length===0&&r.splice(e,1);e.getLayerlessNodes().length=0}function au(e,t){e.id=1;let n=e.getLayer(),r=/* @__PURE__ */ new Set;for(let i of e.getPorts(`OUTPUT`))for(let a of i.getOutgoingEdges()){let i=a.getTarget().getNode();if(i===e)continue;let o=i.getLayer();if(o!==null&&n!==null&&o.id<=n.id){let e=n.id+1,a;e===t.getLayers().length?(a=new W(t),a.id=e,t.getLayers().push(a)):a=t.getLayers()[e],i.setLayer(a),r.add(i)}}return r}var ou=class{sources=[];visited=[];active=[];edgesToBeReversed=[];process(e,t){t.begin(`Depth-first cycle removal`,1);let n=e.getLayerlessNodes(),r=n.length;this.sources=[],this.visited=Array(r).fill(!1),this.active=Array(r).fill(!1),this.edgesToBeReversed=[];let i=0;for(let e of n)e.id=i,e.getIncomingEdges().length===0&&this.sources.push(e),i++;for(let e of this.sources)this.dfs(e);for(let e=0;e<r;e++)this.visited[e]||this.dfs(n[e]);for(let t of this.edgesToBeReversed)t.reverse(e,!0),e.setProperty(ge,!0);this.sources=[],this.visited=[],this.active=[],this.edgesToBeReversed=[],t.done()}dfs(e){if(!this.visited[e.id]){this.visited[e.id]=!0,this.active[e.id]=!0;for(let t of e.getOutgoingEdges()){if(t.isSelfLoop())continue;let e=t.getTarget().getNode();this.active[e.id]?this.edgesToBeReversed.push(t):this.dfs(e)}this.active[e.id]=!1}}},su=class{sources=/* @__PURE__ */ new Set;sinks=/* @__PURE__ */ new Set;visited=[];bfsQueue=[];edgesToBeReversed=[];graph=null;process(e,t){t.begin(`Breadth-first cycle removal`,1),this.graph=e;let n=e.getLayerlessNodes();this.bfsQueue=[],this.sources=/* @__PURE__ */ new Set,this.sinks=/* @__PURE__ */ new Set,this.visited=Array(n.length).fill(!1),this.edgesToBeReversed=[];let r=0;for(let e of n)e.id=r,e.getIncomingEdges().length===0&&this.sources.add(e),e.getOutgoingEdges().length===0&&this.sinks.add(e),r++;for(let e of this.sources)this.bfsQueue.push(e),this.bfsLoop();this.bfsLoop();let i=!0;for(;i;){i=!1;for(let e=0;e<n.length;e++)if(!this.visited[e]){this.bfsQueue.push(n[e]),i=!0;break}this.bfsLoop()}for(let t of this.edgesToBeReversed)t.reverse(e,!0),e.setProperty(ge,!0);this.sources=/* @__PURE__ */ new Set,this.visited=[],this.bfsQueue=[],this.edgesToBeReversed=[],t.done()}bfsLoop(){for(;this.bfsQueue.length>0;)this.bfs(this.bfsQueue.shift())}bfs(e){if(this.visited[e.id])return;this.visited[e.id]=!0;let t=/* @__PURE__ */ new Map,n=this.graph.getProperty(mt)===`ENFORCED`;for(let r of e.getOutgoingEdges()){let e=r.getTarget().getNode();if(!e.hasProperty(F))t.set(2147483647-t.size,[r]);else{let i=0;i=n?this.graph.getProperty(xn)*e.getProperty(In)+e.getProperty(F):e.getProperty(F);let a=t.get(i);a===void 0?t.set(i,[r]):a.push(r)}}let r=[...t.keys()].sort((e,t)=>e-t);for(let n of r){let r=t.get(n),i=r[0];if(i.isSelfLoop())continue;let a=i.getTarget().getNode();this.visited[a.id]&&!this.sources.has(e)&&!this.sinks.has(a)?this.edgesToBeReversed.push(...r):this.bfsQueue.push(a)}}},cu=class{sources=[];visited=[];active=[];edgesToBeReversed=[];graph=null;process(e,t){t.begin(`Depth-first cycle removal`,1),this.graph=e;let n=e.getLayerlessNodes(),r=n.length;this.sources=[],this.visited=Array(r).fill(!1),this.active=Array(r).fill(!1),this.edgesToBeReversed=[];let i=0;for(let e of n)e.id=i,e.getIncomingEdges().length===0&&this.sources.push(e),i++;for(let e of this.sources)this.dfs(e);for(let e=0;e<r;e++)this.visited[e]||this.dfs(n[e]);for(let t of this.edgesToBeReversed)t.reverse(e,!0),e.setProperty(ge,!0);this.sources=[],this.visited=[],this.active=[],this.edgesToBeReversed=[],t.done()}dfs(e){if(this.visited[e.id])return;this.visited[e.id]=!0,this.active[e.id]=!0;let t=/* @__PURE__ */ new Map,n=this.graph.getProperty(mt)===`ENFORCED`;for(let r of e.getOutgoingEdges()){let e=r.getTarget().getNode();if(!e.hasProperty(F))t.set(2147483647-t.size,[r]);else{let i=0;i=n?this.graph.getProperty(xn)*e.getProperty(In)+e.getProperty(F):e.getProperty(F);let a=t.get(i);a===void 0?t.set(i,[r]):a.push(r)}}let r=[...t.keys()].sort((e,t)=>e-t);for(let e of r){let n=t.get(e),r=n[0];if(r.isSelfLoop())continue;let i=r.getTarget().getNode();this.active[i.id]?this.edgesToBeReversed.push(...n):this.dfs(i)}this.active[e.id]=!1}},lu=class{edgesToBeReversed;stronglyConnectedComponents;nodeToSCCID;index=0;stack=[];tarjanId=/* @__PURE__ */ new Map;tarjanLowlink=/* @__PURE__ */ new Map;tarjanOnStack=/* @__PURE__ */ new Map;constructor(e,t,n){this.edgesToBeReversed=e,this.stronglyConnectedComponents=t,this.nodeToSCCID=n}tarjan(e){this.index=0,this.stack=[];for(let t of e.getLayerlessNodes())(this.tarjanId.get(t)??-1)===-1&&(this.stronglyConnected(t),this.stack.length=0)}stronglyConnected(e){this.tarjanId.set(e,this.index),this.tarjanLowlink.set(e,this.index),this.index++,this.stack.push(e),this.tarjanOnStack.set(e,!0);for(let t of e.getConnectedEdges()){if(t.getSource().getNode()!==e&&!this.edgesToBeReversed.includes(t)||t.getSource().getNode()===e&&this.edgesToBeReversed.includes(t))continue;let n=t.getTarget().getNode()===e?t.getSource().getNode():t.getTarget().getNode();(this.tarjanId.get(n)??-1)===-1?(this.stronglyConnected(n),this.tarjanLowlink.set(e,Math.min(this.tarjanLowlink.get(e),this.tarjanLowlink.get(n)))):this.tarjanOnStack.get(n)&&this.tarjanLowlink.set(e,Math.min(this.tarjanLowlink.get(e),this.tarjanId.get(n)))}if(this.tarjanLowlink.get(e)===this.tarjanId.get(e)){let t=/* @__PURE__ */ new Set,n;do n=this.stack.pop(),this.tarjanOnStack.set(n,!1),t.add(n);while(e!==n);if(t.size>1){let e=this.stronglyConnectedComponents.length;this.stronglyConnectedComponents.push(t);for(let n of t)this.nodeToSCCID.set(n,e)}}}resetTarjan(e){for(let t of e.getLayerlessNodes())this.tarjanOnStack.set(t,!1),this.tarjanLowlink.set(t,-1),this.tarjanId.set(t,-1),this.stack.length=0}},uu=class{stronglyConnectedComponents=[];nodeToSCCID=/* @__PURE__ */ new Map;revEdges=[];graph=null;process(e,t){if(t.begin(`Model order cycle breaking`,1),this.graph=e,this.revEdges=[],!e.hasProperty(xn))throw TypeError(`Cannot invoke "java.lang.Integer.intValue()" because the return value of "org.eclipse.elk.alg.layered.graph.LGraph.getProperty(org.eclipse.elk.graph.properties.IProperty)" is null`);let n=Math.max(e.getLayerlessNodes().length,e.getProperty(xn)),r=n*e.getProperty(Ut);for(;;){let t=new lu(this.revEdges,this.stronglyConnectedComponents,this.nodeToSCCID);if(t.resetTarjan(e),t.tarjan(e),this.stronglyConnectedComponents.length===0)break;this.findNodes(n,r);for(let t of this.revEdges)t.reverse(e,!1),e.setProperty(ge,!0);this.stronglyConnectedComponents.length=0,this.nodeToSCCID.clear(),this.revEdges.length=0}t.done()}findNodes(e,t){for(let n=0;n<this.stronglyConnectedComponents.length;n++){let r=this.stronglyConnectedComponents[n],i=null,a=new dr,o=-(2**53-1),s=this.graph.getProperty(mt)===`ENFORCED`;for(let n of r)if(i===null)i=n,o=s?a.computeConstraintGroupModelOrder(n,t,e):a.computeConstraintModelOrder(n,e);else{let r=s?a.computeConstraintGroupModelOrder(n,t,e):a.computeConstraintModelOrder(n,e);o<r&&(i=n,o=r)}for(let e of i.getOutgoingEdges())r.has(e.getTarget().getNode())&&this.revEdges.push(e)}}},du=class extends uu{findNodes(e,t){for(let n=0;n<this.stronglyConnectedComponents.length;n++){let r=this.stronglyConnectedComponents[n];if(r.size<=1)continue;let i=null,a=null,o=2**53-1,s=-(2**53-1),c=this.graph.getProperty(mt)===`ENFORCED`,l=new dr;for(let n of r)if(i===null||a===null)i=n,o=c?l.computeConstraintGroupModelOrder(n,t,e):l.computeConstraintModelOrder(n,e),a=n,s=o;else{let r=c?l.computeConstraintGroupModelOrder(n,t,e):l.computeConstraintModelOrder(n,e);o>r&&(i=n,o=r),s<r&&(a=n,s=r)}let u=i.getIncomingEdges(),d=a.getOutgoingEdges();if(u.length>d.length)for(let e of u)r.has(e.getSource().getNode())&&this.revEdges.push(e);else for(let e of d)r.has(e.getTarget().getNode())&&this.revEdges.push(e)}}};const fu=new ut(`org.eclipse.elk.layered.considerModelOrder.groupModelOrder.cbPreferredSourceId`,0),pu=new ut(`org.eclipse.elk.layered.considerModelOrder.groupModelOrder.cbPreferredTargetId`,0);var mu=class extends uu{findNodes(e,t){for(let n=0;n<this.stronglyConnectedComponents.length;n++){let r=this.stronglyConnectedComponents[n];if(r.size<=1)continue;let i=null,a=null,o=2**53-1,s=-(2**53-1),c=this.graph.getProperty(mt)===`ENFORCED`,l=new dr;for(let n of r)if(i===null||a===null)i=n,o=c?l.computeConstraintGroupModelOrder(n,t,e):l.computeConstraintModelOrder(n,e),a=n,s=o;else{let r=c?l.computeConstraintGroupModelOrder(n,t,e):l.computeConstraintModelOrder(n,e);o>r&&(i=n,o=r),s<r&&(a=n,s=r)}let u=this.graph.getProperty(fu),d=this.graph.getProperty(pu);if(i.getProperty(In)===u)for(let e of i.getIncomingEdges())r.has(e.getSource().getNode())&&this.revEdges.push(e);else if(a.getProperty(In)===d)for(let e of a.getOutgoingEdges())r.has(e.getSource().getNode())&&this.revEdges.push(e);else{let e=i.getIncomingEdges(),t=a.getOutgoingEdges();if(e.length>t.length)for(let t of e)r.has(t.getSource().getNode())&&this.revEdges.push(t);else for(let e of t)r.has(e.getTarget().getNode())&&this.revEdges.push(e)}}}},hu=class{compare;heap=[];constructor(e){this.compare=e}isEmpty(){return this.heap.length===0}push(e){this.heap.push(e),this.siftUp(this.heap.length-1)}poll(){if(this.heap.length===0)return;let e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&(this.heap[0]=t,this.siftDown(0)),e}siftUp(e){let t=this.heap[e];for(;e>0;){let n=e-1>>1,r=this.heap[n];if(this.compare(t,r)>=0)break;this.heap[e]=r,e=n}this.heap[e]=t}siftDown(e){let t=this.heap.length,n=this.heap[e];for(;;){let r=2*e+1;if(r>=t)break;let i=this.heap[r],a=r+1;if(a<t){let e=this.heap[a];this.compare(i,e)>0&&(r=a,i=e)}if(this.compare(n,i)<=0)break;this.heap[e]=i,e=r}this.heap[e]=n}},gu=class{nodeMark=[];edgeMark=[];inDeg=[];outDeg=[];topoOrd=[];inTopo=/* @__PURE__ */ new Map;process(e,t){if(t.begin(`Coffman-Graham Layering`,1),e.getLayerlessNodes().length===0){t.done();return}let n=e.getProperty(vn),r=0,i=0;for(let t of e.getLayerlessNodes()){t.id=r++;for(let e of t.getOutgoingEdges())e.id=i++}this.nodeMark=Array(r).fill(!1),this.edgeMark=Array(i).fill(!1),this.inDeg=Array(r).fill(0),this.outDeg=Array(r).fill(0),this.topoOrd=Array(r).fill(0),this.inTopo.clear(),this.transitiveReduction(e);let a=new hu((e,t)=>this.compareNodesInTopo(e,t));for(let t of e.getLayerlessNodes()){for(let e of t.getIncomingEdges())this.edgeMark[e.id]||this.inDeg[t.id]++;this.inDeg[t.id]===0&&a.push(t)}let o=0;for(;!a.isEmpty();){let e=a.poll();this.topoOrd[e.id]=o++;for(let t of e.getOutgoingEdges()){if(this.edgeMark[t.id])continue;let n=t.getTarget().getNode();this.inDeg[n.id]--;let r=this.inTopo.get(n)??[];r.push(this.topoOrd[e.id]),this.inTopo.set(n,r),this.inDeg[n.id]===0&&a.push(n)}}let s=new hu((e,t)=>{let n=this.topoOrd[e.id],r=this.topoOrd[t.id];return n>r?-1:+(n<r)});for(let t of e.getLayerlessNodes()){for(let e of t.getOutgoingEdges())this.edgeMark[e.id]||this.outDeg[t.id]++;this.outDeg[t.id]===0&&s.push(t)}let c=[],l=this.createLayer(e,c);for(;!s.isEmpty();){let t=s.poll();(this.isLayerFull(l,n)||!this.canAdd(t,l))&&(l=this.createLayer(e,c)),t.setLayer(l);for(let e of t.getIncomingEdges()){if(this.edgeMark[e.id])continue;let t=e.getSource().getNode();this.outDeg[t.id]--,this.outDeg[t.id]===0&&s.push(t)}}for(let t=c.length-1;t>=0;--t)e.getLayers().push(c[t]);e.getLayerlessNodes().length=0,t.done()}isLayerFull(e,t){return e.getNodes().length>=t}canAdd(e,t){for(let n of e.getOutgoingEdges())if(n.getTarget().getNode().getLayer()===t)return!1;return!0}createLayer(e,t){let n=new W(e);return t.push(n),n}compareNodesInTopo(e,t){let n=this.inTopo.get(e)??[],r=this.inTopo.get(t)??[],i=n.length-1,a=r.length-1;for(;i>=0&&a>=0;){let e=n[i],t=r[a];if(e!==t)return e<t?-1:1;i--,a--}return n.length===0&&r.length===0?e.id<t.id?-1:+(e.id>t.id):n.length===0?-1:1}transitiveReduction(e){for(let t of e.getLayerlessNodes()){this.nodeMark.fill(!1);for(let e of t.getOutgoingEdges())this.dfs(t,e.getTarget().getNode())}}dfs(e,t){if(!this.nodeMark[t.id]){for(let n of t.getOutgoingEdges()){let t=n.getTarget().getNode();for(let n of t.getIncomingEdges())n.getSource().getNode()===e&&(this.edgeMark[n.id]=!0);this.dfs(e,t)}this.nodeMark[t.id]=!0}}},_u=class{layeredGraph;process(e,t){t.begin(`Breadth first model order layering`,1),this.layeredGraph=e;let n=[];for(let e of this.layeredGraph.getLayerlessNodes())e.getType()===`NORMAL`&&n.push(e);n.sort((e,t)=>{if(e.hasProperty(F)&&t.hasProperty(F))return e.getProperty(F)-t.getProperty(F);throw Error(`The BF model order layer assigner requires all real nodes to have a model order.`)});let r=!0,i=new W(this.layeredGraph),a=null;this.layeredGraph.getLayers().push(i);for(let e of n)if(r)e.setLayer(i),r=!1;else{for(let t of e.getIncomingEdges())(t.getSource().getNode().getType()===`NORMAL`&&t.getSource().getNode().getLayer()===i||t.getSource().getNode().getType()===`LABEL`&&t.getSource().getNode().getIncomingEdges()[0].getSource().getNode().getLayer()===i)&&(a=new W(this.layeredGraph),this.layeredGraph.getLayers().push(a),i=new W(this.layeredGraph),this.layeredGraph.getLayers().push(i));for(let t of e.getIncomingEdges())t.getSource().getNode().getType()===`LABEL`&&t.getSource().getNode().getLayer()===null&&t.getSource().getNode().setLayer(a);e.setLayer(i)}this.layeredGraph.getLayerlessNodes().length=0;let o=[];for(let e of this.layeredGraph.getLayers())e.getNodes().length===0&&o.push(e);for(let e of o){let t=this.layeredGraph.getLayers().indexOf(e);t!==-1&&this.layeredGraph.getLayers().splice(t,1)}let s=0;for(let e of this.layeredGraph.getLayers())e.id=s,s++;t.done()}},vu=class{layeredGraph;currentLayer;currentLayerId=0;currentDummyLayer=null;nodesToPlace=[];maxToPlace=0;process(e,t){t.begin(`Depth first model order layering`,1),this.layeredGraph=e;let n=[];for(let e of this.layeredGraph.getLayerlessNodes())e.getType()===`NORMAL`&&n.push(e);n.sort((e,t)=>{if(e.hasProperty(F)&&t.hasProperty(F))return e.getProperty(F)-t.getProperty(F);throw Error(`The DF model order layer assigner requires all real nodes to have a model order.`)});let r=!0;this.currentLayer=new W(this.layeredGraph),this.currentDummyLayer=null,this.layeredGraph.getLayers().push(this.currentLayer),this.currentLayer.id=0,this.currentLayerId=0,this.nodesToPlace=[];for(let e of n)if(r)e.setLayer(this.currentLayer),r=!1;else if(this.isConnectedToCurrentLayer(e)){let t=this.currentLayerId;t=this.getMaxConnectedLayer(t,e);let n=t+2,r=t-this.currentLayerId;if(this.nodesToPlace.length>0){if(r>0){for(let e of this.nodesToPlace)e.id+=t-this.maxToPlace;this.placeNodesToPlace(),this.nodesToPlace=[],this.addNodeToLayer(n,e)}else{this.nodesToPlace.push(e),e.id=n,this.maxToPlace=Math.max(this.maxToPlace,n);for(let t of e.getIncomingEdges())t.getSource().getNode().getLayer()===null&&t.getSource().getNode().getType()===`LABEL`&&(this.nodesToPlace.push(t.getSource().getNode()),t.getSource().getNode().id=n-1);this.currentLayerId=n}}else this.addNodeToLayer(n,e)}else{this.placeNodesToPlace(),this.nodesToPlace=[];let t=0;if(e.getIncomingEdges().length===0)this.nodesToPlace.push(e),e.id=0,this.maxToPlace=Math.max(this.maxToPlace,0),this.currentLayer=this.layeredGraph.getLayers()[0],this.currentLayerId=0;else{let n=0;n=this.getMaxConnectedLayer(n,e),t=n+2,this.addNodeToLayer(t,e)}}this.nodesToPlace.length>0&&this.placeNodesToPlace(),this.layeredGraph.getLayerlessNodes().length=0;let i=[];for(let e of this.layeredGraph.getLayers())e.getNodes().length===0&&i.push(e);for(let e of i){let t=this.layeredGraph.getLayers().indexOf(e);t!==-1&&this.layeredGraph.getLayers().splice(t,1)}let a=0;for(let e of this.layeredGraph.getLayers())e.id=a,a++;t.done()}isConnectedToCurrentLayer(e){for(let t of e.getIncomingEdges()){let e,n;if(this.nodesToPlace.length===0){if(e=t.getSource().getNode().getType()===`NORMAL`&&t.getSource().getNode().getLayer()!==null&&t.getSource().getNode().getLayer().id===this.currentLayerId,t.getSource().getNode().getIncomingEdges().length>0){let e=t.getSource().getNode().getIncomingEdges()[0].getSource().getNode().getLayer();n=t.getSource().getNode().getType()===`LABEL`&&e!==null&&e.id===this.currentLayerId}else n=!1}else e=t.getSource().getNode().getType()===`NORMAL`&&t.getSource().getNode().id===this.currentLayerId,n=t.getSource().getNode().getType()===`LABEL`&&t.getSource().getNode().getIncomingEdges()[0].getSource().getNode().id===this.currentLayerId;if(e||n)return!0}return!1}addNodeToLayer(e,t){e<this.layeredGraph.getLayers().length?(this.currentLayer=this.layeredGraph.getLayers()[e],this.currentDummyLayer=this.layeredGraph.getLayers()[e-1],this.currentLayerId=e):(this.currentDummyLayer=new W(this.layeredGraph),this.currentDummyLayer.id=e-1,this.layeredGraph.getLayers().push(this.currentDummyLayer),this.currentLayer=new W(this.layeredGraph),this.currentLayer.id=e,this.layeredGraph.getLayers().push(this.currentLayer),this.currentLayerId=e),t.setLayer(this.currentLayer);for(let e of t.getIncomingEdges())e.getSource().getNode().getLayer()===null&&e.getSource().getNode().getType()===`LABEL`&&e.getSource().getNode().setLayer(this.currentDummyLayer)}getMaxConnectedLayer(e,t){let n=e;for(let e of t.getIncomingEdges())e.getSource().getNode().getLayer()!==null&&(n=Math.max(n,e.getSource().getNode().getLayer().id));return n}placeNodesToPlace(){this.maxToPlace=0;for(let e of this.nodesToPlace){if(e.id>=this.layeredGraph.getLayers().length){let t=new W(this.layeredGraph);t.id=e.id-1,this.layeredGraph.getLayers().push(t);let n=new W(this.layeredGraph);n.id=e.id,this.layeredGraph.getLayers().push(n)}e.setLayer(this.layeredGraph.getLayers()[e.id])}}},yu=class e{static UPPERBOUND_ON_WIDTH_RANGE={lower:1,upper:4};static COMPENSATOR_RANGE={lower:1,upper:2};dummySize=0;minimumNodeSize=0;normSize=[];avgSize=0;inDegree=[];outDegree=[];lastMaxWidth=0;process(t,r){r.begin(`MinWidth layering`,1);let i=t.getLayers(),a=t.getLayerlessNodes(),o=t.getProperty(un),s=t.getProperty(Sn);this.dummySize=t.getProperty(n),this.minimumNodeSize=1/0;for(let e of a){if(e.getType()!==`NORMAL`)continue;let t=e.getSize().y;this.minimumNodeSize=Math.min(this.minimumNodeSize,t)}this.minimumNodeSize=Math.max(1,this.minimumNodeSize);let c=a.length;this.inDegree=Array(c).fill(0),this.outDegree=Array(c).fill(0),this.normSize=Array(c).fill(0);let l=0;this.avgSize=0;for(let e of a)e.id=l++,this.inDegree[e.id]=this.countEdgesExceptSelfLoops(e.getIncomingEdges()),this.outDegree[e.id]=this.countEdgesExceptSelfLoops(e.getOutgoingEdges()),this.normSize[e.id]=e.getSize().y/this.minimumNodeSize,this.avgSize+=this.normSize[e.id];this.dummySize/=this.minimumNodeSize,this.avgSize/=c;let u=this.precalcSuccessors(a);a.sort((e,t)=>{let n=this.outDegree[e.id],r=this.outDegree[t.id];return n<r?1:n===r?0:-1});let d=1/0,f=2**53-1,p=null,m=o,h=o,g=s,_=s;o<0&&(m=e.UPPERBOUND_ON_WIDTH_RANGE.lower,h=e.UPPERBOUND_ON_WIDTH_RANGE.upper),s<0&&(g=e.COMPENSATOR_RANGE.lower,_=e.COMPENSATOR_RANGE.upper);for(let e=m;e<=h;e++)for(let t=g;t<=_;t++){let n=this.computeMinWidthLayering(e,t,a,u),r=n.width,i=n.layers,o=i.length;(r<d||r===d&&o<f)&&(d=r,f=o,p=i)}for(let e of p){let n=new W(t);for(let t of e)t.setLayer(n);i.push(n)}this.lastMaxWidth=d,i.reverse(),a.length=0,r.done()}precalcSuccessors(e){let t=[];for(let n of e){let e=/* @__PURE__ */ new Set;for(let t of n.getOutgoingEdges())this.isSelfLoop(t)||e.add(t.getTarget().getNode());t.push(e)}return t}computeMinWidthLayering(e,t,n,r){let i=[],a=new Set(n),o=e*this.avgSize,s=0,c=0,l=/* @__PURE__ */ new Set,u=/* @__PURE__ */ new Set,d=[],f=0,p=0,m=0,h=0,g=0,_=0;for(;a.size>0;){let e=this.selectNode(a,r,u);if(e!==null&&(a.delete(e),d.push(e),l.add(e),c=this.outDegree[e.id],f+=this.normSize[e.id]-c*this.dummySize,s=this.inDegree[e.id],p+=s*this.dummySize,_+=c*this.dummySize,h+=this.normSize[e.id]),e===null||a.size===0||f>=o&&this.normSize[e.id]>c*this.dummySize||p>=t*o){i.push(d),d=[];for(let e of l)u.add(e);l.clear(),g-=_,m=Math.max(m,g*this.dummySize+h),g+=p,f=p,p=0,_=0,h=0}}return{width:m,layers:i}}selectNode(e,t,n){for(let r of e)if(this.containsAll(n,t[r.id]))return r;return null}containsAll(e,t){for(let n of t)if(!e.has(n))return!1;return!0}countEdgesExceptSelfLoops(e){let t=0;for(let n of e)this.isSelfLoop(n)||t++;return t}isSelfLoop(e){return e.getSource().getNode()===e.getTarget().getNode()}},bu=class{widthCurrent=0;widthUp=0;maxWidth=0;currentGraph;upperLayerInfluence=0;sortedLayerlessNodes=[];alreadyPlacedNodes=/* @__PURE__ */ new Set;alreadyPlacedInOtherLayers=/* @__PURE__ */ new Set;tempLayerlessNodes=[];successors=[];outDegree=[];remainingOutGoing=[];inDegree=[];selectedNode=null;minimumNodeSize=0;maximumNodeSize=0;normSize=[];dummySize=0;process(e,t){if(t.begin(`StretchWidth layering`,1),e.getLayerlessNodes().length===0){t.done();return}this.currentGraph=e,this.widthCurrent=0,this.widthUp=0,this.minimumNodeSize=1/0,this.maximumNodeSize=-1/0,this.dummySize=e.getProperty(n),this.computeSortedNodes(),this.computeSuccessors(),this.computeDegrees(),this.minMaxNodeSize(),this.computeNormalizedSize(),this.minimumNodeSize=Math.max(1,this.minimumNodeSize),this.maximumNodeSize=Math.max(1,this.maximumNodeSize),this.dummySize/=this.minimumNodeSize,this.maxWidth=this.maximumNodeSize/this.minimumNodeSize,this.upperLayerInfluence=this.getAverageOutDegree();let r=new W(this.currentGraph);for(this.currentGraph.getLayers().push(r),this.tempLayerlessNodes=[...this.sortedLayerlessNodes],this.remainingOutGoing=[...this.outDegree];this.tempLayerlessNodes.length>0;)if(this.selectedNode=this.selectNode(),this.selectedNode===null||this.conditionGoUp()&&this.alreadyPlacedNodes.size>0){this.updateOutGoing(r),r=new W(this.currentGraph),this.currentGraph.getLayers().push(r);for(let e of this.alreadyPlacedNodes)this.alreadyPlacedInOtherLayers.add(e);this.alreadyPlacedNodes.clear(),this.widthCurrent=this.widthUp,this.widthUp=0}else this.conditionGoUp()?(this.currentGraph.getLayers().length=0,r=new W(this.currentGraph),this.currentGraph.getLayers().push(r),this.widthCurrent=0,this.widthUp=0,this.alreadyPlacedNodes.clear(),this.alreadyPlacedInOtherLayers.clear(),this.maxWidth++,this.tempLayerlessNodes=[...this.sortedLayerlessNodes],this.remainingOutGoing=[...this.outDegree]):(this.selectedNode.setLayer(r),this.tempLayerlessNodes.splice(this.tempLayerlessNodes.indexOf(this.selectedNode),1),this.alreadyPlacedNodes.add(this.selectedNode),this.widthCurrent=this.widthCurrent-this.outDegree[this.selectedNode.id]*this.dummySize+this.normSize[this.selectedNode.id],this.widthUp+=this.inDegree[this.selectedNode.id]*this.dummySize);e.getLayerlessNodes().length=0,e.getLayers().reverse(),t.done()}conditionGoUp(){let e=this.widthCurrent-this.outDegree[this.selectedNode.id]*this.dummySize+this.normSize[this.selectedNode.id]>this.maxWidth,t=this.widthUp+this.inDegree[this.selectedNode.id]*this.dummySize>this.maxWidth*this.upperLayerInfluence*this.dummySize;return e||t}selectNode(){for(let e of this.tempLayerlessNodes)if(this.remainingOutGoing[e.id]<=0)return e;return null}computeSortedNodes(){let e=this.currentGraph.getLayerlessNodes();this.sortedLayerlessNodes=[...e];for(let t of e)t.id=this.getRank(t);this.sortedLayerlessNodes.sort((e,t)=>e.id<t.id?1:e.id>t.id?-1:0)}getRank(e){let t=e.getOutgoingEdges().length,n;for(let r of e.getIncomingEdges())n=r.getSource().getNode().getOutgoingEdges().length,t=Math.max(t,n);return t}computeSuccessors(){let e=0;this.successors=[];let t=/* @__PURE__ */ new Set;for(let n of this.sortedLayerlessNodes){n.id=e;for(let e of n.getOutgoingEdges())t.add(e.getTarget().getNode());t.delete(n),this.successors.push(new Set(t)),t.clear(),e++}}computeDegrees(){this.inDegree=Array(this.sortedLayerlessNodes.length).fill(0),this.outDegree=Array(this.sortedLayerlessNodes.length).fill(0);for(let e of this.sortedLayerlessNodes)this.inDegree[e.id]=e.getIncomingEdges().length,this.outDegree[e.id]=e.getOutgoingEdges().length}minMaxNodeSize(){for(let e of this.sortedLayerlessNodes){if(e.getType()!==`NORMAL`)continue;let t=e.getSize().y;this.minimumNodeSize=Math.min(this.minimumNodeSize,t),this.maximumNodeSize=Math.max(this.maximumNodeSize,t)}}avereageNodeSize(){let e=0;for(let t of this.sortedLayerlessNodes)e+=this.normSize[t.id];return e/this.sortedLayerlessNodes.length}computeNormalizedSize(){this.normSize=Array(this.sortedLayerlessNodes.length).fill(0);for(let e of this.sortedLayerlessNodes)this.normSize[e.id]=e.getSize().y/this.minimumNodeSize}getAverageOutDegree(){let e=0;for(let t of this.currentGraph.getLayerlessNodes())e+=t.getOutgoingEdges().length;return e/this.currentGraph.getLayerlessNodes().length}updateOutGoing(e){for(let t of e.getNodes())for(let e of t.getIncomingEdges()){let t=e.getSource().getNode().id;this.remainingOutGoing[t]=this.remainingOutGoing[t]-1}}};const xu=new ut(`org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening`,.3);var Su=class e{nodes=[];id;indexInLastLayer=-1;lastLayer=-1;deflection=0;weight=0;refSegment=null;nodeType=`NORMAL`;constructor(e){this.id=e}region(){let e=this;for(;e.refSegment!==null;)e=e.refSegment;return e}split(t,n,r){let i=this.nodes.indexOf(t),a=new e(n),o=this.nodes.splice(i);a.nodes.push(...o);for(let e of o)r.set(e,n);return a}};function Cu(e){let t=e.getProperty(Rn),n=wu(e),r=/* @__PURE__ */ new Map,i=Tu(e,r);Ou(e,i,t),ku(e,i,t,n,r),Mu(e,i,t)}function wu(e){let t=/* @__PURE__ */ new Map;for(let n of e.getLayers())for(let e of n.getNodes()){let n=-(2**53-1),r=-(2**53-1);for(let t of e.getPorts()){for(let e of t.getIncomingEdges())n=Math.max(n,e.getProperty(T));for(let e of t.getOutgoingEdges())r=Math.max(r,e.getProperty(T))}t.set(e,{input:n,output:r})}return t}function Tu(e,t){let n=[],r=0;for(let i of e.getLayers())for(let e of i.getNodes())if(!t.has(e)){let i=new Su(r++);Eu(e,i,t),n.push(i)}let i=n.map(()=>[]),a=n.map(()=>0);Du(e,n,i,a,t);let o=[];for(let e=0;e<n.length;e++)a[e]===0&&o.push(n[e]);let s=Array(n.length),c=0;for(;o.length>0;){let e=o.shift();for(s[e.id]=c++;i[e.id].length>0;){let t=i[e.id].shift();a[t.id]--,a[t.id]===0&&o.push(t)}}let l=Array(n.length);for(let e=0;e<n.length;e++){let r=n[e],i=s[e];l[i]=r,r.id=i;for(let e of r.nodes)t.set(e,i)}return l}function Eu(e,t,n){let r=e.getType();if(n.has(e))return!1;if(n.set(e,t.id),t.nodes.push(e),t.nodeType=r,r===`LONG_EDGE`||r===`NORTH_SOUTH_PORT`)for(let r of e.getPorts())for(let i of r.getSuccessorPorts()){let r=i.getNode(),a=r.getType();if(e.getLayer()!==r.getLayer()&&(a===`LONG_EDGE`||a===`NORTH_SOUTH_PORT`)&&Eu(r,t,n))return!0}return!0}function Du(e,t,n,r,i){let a=t.length,o=0;for(let s of e.getLayers()){let e=s.getNodes();if(e.length===0)continue;let c=0,l=null,u=e[0],d=null;for(;u!==null;){if(d=t[i.get(u)],d.indexInLastLayer>=0){let o=null;for(let n=c+1;n<e.length;n++){let r=e[n],a=t[i.get(r)];if(a.lastLayer===d.lastLayer&&a.indexInLastLayer<d.indexInLastLayer){o=a;break}}if(o!==null){if(l!==null){let e=t[i.get(l)];r[d.id]--;let a=n[e.id],o=a.indexOf(d);o!==-1&&a.splice(o,1)}d=d.split(u,a++,i),t.push(d),n.push([]),l===null?r.push(0):(n[i.get(l)].push(d),r.push(1))}}let s=null;if(c+1<e.length){s=e[c+1];let a=t[i.get(s)];n[d.id].push(a),r[a.id]++}d.lastLayer=o,d.indexInLastLayer=c++,l=u,u=s}o++}}function Ou(e,t,r){let i=e.getLayers().length,a=Array(i).fill(0),o=Array(i).fill(null);for(let i of t){let t=0;for(let s of i.nodes){let i=s.getLayer().getIndex();a[i]++;let c=e.getProperty(n);a[i]>0&&o[i]!==null&&(c=r.getVerticalSpacing(o[i],s)),t=Math.max(t,s.getLayer().getSize().y+c)}for(let e of i.nodes){e.getPosition().y=t+e.getMargin().top;let n=e.getLayer();n.getSize().y=t+e.getMargin().top+e.getSize().y+e.getMargin().bottom,o[n.getIndex()]=e}}}function ku(e,t,n,r,i){let a=e.getProperty(xu),o=e.getProperty(en),s=4,c=3,l=20/o,u=!1,d=`FORW_PENDULUM`,f=2**53-1;do{let p=d!==`BACKW_PENDULUM`,m=d!==`FORW_PENDULUM`,h=0;for(let e of t)e.refSegment=null,Au(e,t,p,m,a,r,i),h+=Math.abs(e.deflection);let g;do g=ju(e,t,n,i);while(g);for(let e of t){let t=e.region().deflection;if(t!==0)for(let n of e.nodes)n.getPosition().y+=t}d===`FORW_PENDULUM`||d===`BACKW_PENDULUM`?(s--,s<=0&&(h<f||-s>o)?(d=`RUBBER`,f=2**53-1):d===`FORW_PENDULUM`?(d=`BACKW_PENDULUM`,f=h):(d=`FORW_PENDULUM`,f=h)):(u=h>=f||f-h<l,f=h,u&&c--)}while(!(u&&c<=0))}function Au(e,t,n,r,i,a,o){let s=0,c=0;for(let i of e.nodes){let l=0,u=0,d=a.get(i),f=n?d.input:-(2**53-1),p=r?d.output:-(2**53-1),m=Math.max(f,p);for(let s of i.getPorts()){let c=i.getPosition().y+s.getPosition().y+s.getAnchor().y;if(r)for(let n of s.getOutgoingEdges()){let r=n.getTarget(),i=r.getNode();if(e!==t[o.get(i)]){let e=a.get(i),t=Math.max(e.input,e.output),o=n.getProperty(T);o>=m&&o>=t&&(l+=i.getPosition().y+r.getPosition().y+r.getAnchor().y-c,u++)}}if(n)for(let n of s.getIncomingEdges()){let r=n.getSource(),i=r.getNode();if(e!==t[o.get(i)]){let e=a.get(i),t=Math.max(e.input,e.output),o=n.getProperty(T);o>=m&&o>=t&&(l+=i.getPosition().y+r.getPosition().y+r.getAnchor().y-c,u++)}}}u>0&&(s+=l/u,c++)}c>0?(e.deflection=i*s/c,e.weight=c):(e.deflection=0,e.weight=0)}function ju(e,t,n,r){let i=!1,a=1e-4*e.getProperty(Zt);for(let o of e.getLayers()){let e=o.getNodes();if(e.length===0)continue;let s=e[0],c=t[r.get(s)].region();for(let o=1;o<e.length;o++){let l=e[o],u=t[r.get(l)].region();if(c!==u){let e=n.getVerticalSpacing(s,l);if(s.getPosition().y+s.getSize().y+s.getMargin().bottom+c.deflection+e>l.getPosition().y-l.getMargin().top+u.deflection+a){let e=c.weight+u.weight;e>0&&(u.deflection=(u.weight*u.deflection+c.weight*c.deflection)/e,u.weight=e,c.refSegment=u,i=!0)}}s=l,c=u}}return i}function Mu(e,t,n){for(let e of t){let t=2**53-1,r=2**53-1;for(let i of e.nodes){let e=i.getIndex(),a=i.getLayer().getNodes(),o,s;if(e>0){let t=a[e-1],r=n.getVerticalSpacing(i,t);o=i.getPosition().y-i.getMargin().top-(t.getPosition().y+t.getSize().y+t.getMargin().bottom+r)}else o=i.getPosition().y-i.getMargin().top;if(t=Math.min(o,t),e<a.length-1){let t=a[e+1],r=n.getVerticalSpacing(i,t);s=t.getPosition().y-t.getMargin().top-(i.getPosition().y+i.getSize().y+i.getMargin().bottom+r)}else s=2*i.getPosition().y;r=Math.min(s,r)}let i=2**53-1,a=!1,o=e.nodes[0];for(let e of o.getPorts()){let n=o.getPosition().y+e.getPosition().y+e.getAnchor().y;for(let o of e.getIncomingEdges()){let e=o.getSource(),s=e.getNode().getPosition().y+e.getPosition().y+e.getAnchor().y-n;Math.abs(s)<Math.abs(i)&&Math.abs(s)<(s<0?t:r)&&(i=s,a=!0)}}let s=e.nodes[e.nodes.length-1];for(let e of s.getPorts()){let n=s.getPosition().y+e.getPosition().y+e.getAnchor().y;for(let o of e.getOutgoingEdges()){let e=o.getTarget(),s=e.getNode().getPosition().y+e.getPosition().y+e.getAnchor().y-n;Math.abs(s)<Math.abs(i)&&Math.abs(s)<(s<0?t:r)&&(i=s,a=!0)}}if(a&&i!==0)for(let t of e.nodes)t.getPosition().y+=i}}function Nu(e){let t=0;for(let n of e.getLayers()){let e=0,r=!1;for(let i of n.getNodes())i.getType()===`NORMAL`&&(r=!0,i.setProperty(pt,t),i.setProperty(Ht,e),e++);r&&t++}}function Pu(e){for(let t of e.getLayers())for(let n of t.getNodes()){if(!n.getProperty(it)||n.getPorts().length>2)continue;let t=0,r=0,i=0,a=0;for(let e of n.getPorts())switch(e.getSide()){case`NORTH`:t++;break;case`EAST`:r++;break;case`SOUTH`:i++;break;case`WEST`:a++}t===0&&i===0&&Fu(e,n,a<=r)}}function Fu(e,t,n){let r=[],i=2**53-1,a=2**53-1,o=2**53-1;if(n){i=e.getSize().x;for(let e of t.getPorts())for(let t of e.getOutgoingEdges()){let e=t.getBendPoints();if(e.length===0)continue;let n=e[0];n.x<i&&(a=i-n.x,o=2**53-1,r.length=0,i=n.x),n.x<=i&&(r.push(t),e.length>1&&(o=Math.min(o,Math.abs(e[1].y-n.y))))}}else for(let e of t.getPorts())for(let t of e.getIncomingEdges()){let e=t.getBendPoints();if(e.length===0)continue;let n=e[e.length-1];n.x>i&&(a=n.x-i,o=2**53-1,r.length=0,i=n.x),n.x>=i&&(r.push(t),e.length>1&&(o=Math.min(o,Math.abs(e[e.length-2].y-n.y))))}if(r.length===0||a<=t.size.x/2||o<=t.size.y/2)return;let s=new H;s.setNode(t),s.setSide(`NORTH`),s.position.x=t.size.x/2;let c=new H;c.setNode(t),c.setSide(`SOUTH`),c.position.x=t.size.x/2,c.position.y=t.size.y;for(let e of r){let t,r;n?(t=e.getBendPoints().shift(),r=e.getBendPoints().length===0?e.getTarget().getAbsoluteAnchor():e.getBendPoints()[0],r.y>=t.y?e.setSource(c):e.setSource(s)):(t=e.getBendPoints().pop(),r=e.getBendPoints().length===0?e.getSource().getAbsoluteAnchor():e.getBendPoints()[e.getBendPoints().length-1],r.y>=t.y?e.setTarget(c):e.setTarget(s));let i=e.getProperty(R);if(i!=null){let e=i.findIndex(e=>e.x===t.x&&e.y===t.y);e!==-1&&i.splice(e,1)}}t.position.x=i-t.size.x/2}const Iu={top:0,left:0,bottom:0,right:0},Lu=e=>({...e}),Ru=[`NORTH`,`SOUTH`,`EAST`,`WEST`];var zu=class{padding=Lu(Iu);contributesMinWidth=!1;contributesMinHeight=!1;rect={x:0,y:0,width:0,height:0}},Bu=class extends zu{content={x:0,y:0};getMinimumWidth(){return this.content.x+this.padding.left+this.padding.right}getMinimumHeight(){return this.content.y+this.padding.top+this.padding.bottom}},Vu=class extends zu{content={x:0,y:0};gap;labelRefs=[];hAlign=`CENTER`;vAlign=`CENTER`;constructor(e){super(),this.gap=e}addLabel(e,t,n){this.content.y>0&&(this.content.y+=this.gap),this.content.x=Math.max(this.content.x,e),this.content.y+=t,n&&this.labelRefs.push(n)}setHorizontalAlignment(e){this.hAlign=e}setVerticalAlignment(e){this.vAlign=e}getLabels(){return this.labelRefs}applyLabelLayout(){let e=this.rect,t=e.y;this.vAlign===`CENTER`?t+=(e.height-this.content.y)/2:this.vAlign===`BOTTOM`&&(t+=e.height-this.content.y);for(let n of this.labelRefs){let r=n.size.x;n.position.y=t,t+=n.size.y+this.gap,this.hAlign===`LEFT`?n.position.x=e.x+this.padding.left:this.hAlign===`CENTER`?n.position.x=e.x+this.padding.left+(e.width-r)/2:n.position.x=e.x+e.width-this.padding.right-r}}getMinimumWidth(){return this.content.x+this.padding.left+this.padding.right}getMinimumHeight(){return this.content.y+this.padding.top+this.padding.bottom}};function Hu(e,t){return e===null||t&&!e.contributesMinWidth||e instanceof Bu&&e.content.x===0?0:e.getMinimumWidth()}function Uu(e){return e===null||e instanceof Bu&&e.content.x===0?0:e.getMinimumWidth()}function Wu(e){return e===null||e instanceof Bu&&e.content.y===0?0:e.getMinimumHeight()}function Gu(e,t){return e===null||t&&!e.contributesMinHeight||e instanceof Bu&&e.content.y===0?0:e.getMinimumHeight()}var Ku=class extends zu{mode;symmetrical;gap;cells=[null,null,null];constructor(e,t,n){super(),this.mode=e,this.symmetrical=t,this.gap=n}getMinimumWidth(){let e;if(this.mode===`VERTICAL`)e=Math.max(0,Hu(this.cells[0],!0),Hu(this.cells[1],!0),Hu(this.cells[2],!0));else{let t=Hu(this.cells[0],!0),n=Hu(this.cells[1],!0),r=Hu(this.cells[2],!0);this.symmetrical&&(t=Math.max(t,r),r=t);let i=0,a=0;t>0&&(i+=t,a++),n>0&&(i+=n,a++),r>0&&(i+=r,a++),e=a>1?i+this.gap*(a-1):i}return e>0?e+this.padding.left+this.padding.right:0}getMinimumHeight(){let e;if(this.mode===`VERTICAL`){let t=Gu(this.cells[0],!0),n=Gu(this.cells[1],!0),r=Gu(this.cells[2],!0);this.symmetrical&&(t=Math.max(t,r),r=t);let i=0,a=0;t>0&&(i+=t,a++),n>0&&(i+=n,a++),r>0&&(i+=r,a++),e=a>1?i+this.gap*(a-1):i}else e=Math.max(0,Gu(this.cells[0],!0),Gu(this.cells[1],!0),Gu(this.cells[2],!0));return e>0?e+this.padding.top+this.padding.bottom:0}},qu=class extends zu{symmetrical;gap;cells=[[null,null,null],[null,null,null],[null,null,null]];constructor(e,t){super(),this.symmetrical=e,this.gap=t}minHeightOfRow(e,t){let n=0;for(let r=0;r<3;r++)n=Math.max(n,Gu(this.cells[e][r],t));return n}minColumnWidthSum(e,t){let n=this.cells[e],r=Hu(n[0],t),i=Hu(n[1],t),a=Hu(n[2],t),o=0,s=0;return r>0&&(o+=r,s++),i>0&&(o+=i,s++),a>0&&(o+=a,s++),s>1?o+this.gap*(s-1):o}getMinimumWidth(){let e=Math.max(this.minColumnWidthSum(0,!0),this.minColumnWidthSum(1,!0),this.minColumnWidthSum(2,!0));return e>0?e+this.padding.left+this.padding.right:0}getMinimumHeight(){let e=this.minHeightOfRow(0,!0),t=this.minHeightOfRow(1,!0),n=this.minHeightOfRow(2,!0);this.symmetrical&&(e=Math.max(e,n),n=e);let r=0,i=0;e>0&&(r+=e,i++),t>0&&(r+=t,i++),n>0&&(r+=n,i++);let a=i>1?r+this.gap*(i-1):r;return a>0?a+this.padding.top+this.padding.bottom:0}};function Ju(e,t,n,r){return e.hasProperty(n)?e.getProperty(n):t&&t.hasProperty(n)?t.getProperty(n):r}function Yu(e,t){let n=t===`NORTH`?ye:t===`SOUTH`?Se:t===`EAST`?Gt:ke,r=e.node.hasProperty(n)?e.node.getProperty(n):void 0;return r&&r!==`DISTRIBUTED`?r:Ju(e.node,e.graph,o,`DISTRIBUTED`)}function Xu(e){return!e.includes(`INSIDE`)&&!e.includes(`OUTSIDE`)}function Zu(e){let t=e.getLabels();if(t.length===0)return null;let n=1/0,r=1/0,i=-1/0,a=-1/0;for(let e of t)n=Math.min(n,e.position.x),r=Math.min(r,e.position.y),i=Math.max(i,e.position.x+e.size.x),a=Math.max(a,e.position.y+e.size.y);return{x:n,y:r,w:i-n,h:a-r}}function Qu(e,t){for(let t of Ru)e.portContexts.set(t,[]);let n=Xu(e.portLabelsPlacement),r=!n&&(!t||!e.portLabelsPlacement.includes(`INSIDE`)),i=e.portLabelsPlacement.includes(`NEXT_TO_PORT_IF_POSSIBLE`);for(let t of e.node.getPorts()){let a=t.getSide();if(a===`UNDEFINED`)continue;let o=!1;e.portLabelsPlacement.includes(`INSIDE`)?(o=!0,e.treatAsCompoundNode&&(o=i)):e.portLabelsPlacement.includes(`OUTSIDE`)&&(o=i&&t.getConnectedEdges().length===0);let s={port:t,margin:{left:0,right:0,top:0,bottom:0},labelsNextToPort:o,labelCell:null,fixedLabelBounds:n?Zu(t):null};if(r){let n=t.getLabels();if(n.length>0){let t=new Vu(e.labelCellSpacing);for(let e of n)t.addLabel(e.size.x,e.size.y,e);s.labelCell=t,e.hasPortLabelCells=!0}}e.portContexts.get(a).push(s)}}function $u(e){let t=e.insideGrid;t.padding=Lu(e.nodeLabelsPadding);let n=e.outsideNodeLabelContainers,r=e.node.getProperty(N);for(let i of e.node.getLabels()){let a=Array.isArray(i.placement)?i.placement:String(i.placement??``).split(/[\s,]+/),o=[];for(let e of a){let t=e.replace(/^\[+|\]+$/g,``).trim();t&&o.push(t)}let s=o.length>0?o:r??[],c=s.includes(`INSIDE`),l=s.includes(`V_BOTTOM`)?`bottom`:s.includes(`V_CENTER`)?`center`:`top`,u=s.includes(`H_RIGHT`)?`right`:s.includes(`H_LEFT`)?`left`:`center`,d=l===`bottom`?2:+(l===`center`),f=u===`right`?2:u===`left`?0:1;if(c){let n=t.cells[d][f];n||(n=new Vu(e.labelCellSpacing),t.cells[d][f]=n),n.addLabel(i.size.x,i.size.y)}else{let t;t=l===`bottom`?n.get(`SOUTH`):u===`left`&&(s.includes(`H_PRIORITY`)||l===`center`)?n.get(`WEST`):u===`right`&&(s.includes(`H_PRIORITY`)||l===`center`)?n.get(`EAST`):n.get(`NORTH`);let r=new Vu(e.labelCellSpacing);r.addLabel(i.size.x,i.size.y),t.mode===`HORIZONTAL`?t.cells[f]=r:t.cells[1]=r}}}function ed(e){let t=e.nodeContainer.padding;for(let[n,r]of e.portContexts)for(let i of r){let r=i.port.getProperty(E)??0;if(r<0){let e=-r;n===`NORTH`?t.top=Math.max(t.top,e):n===`SOUTH`?t.bottom=Math.max(t.bottom,e):n===`EAST`?t.right=Math.max(t.right,e):t.left=Math.max(t.left,e)}if(Xu(e.portLabelsPlacement)&&i.fixedLabelBounds){let a=i.fixedLabelBounds,o=i.port.size,s=0;s=n===`NORTH`?Math.max(0,a.h+a.y-(o.y+r)):n===`SOUTH`?Math.max(0,-a.y-r):n===`EAST`?Math.max(0,-a.x-r):Math.max(0,a.w+a.x-(o.x+r));let c=e.symmetry;if(n===`NORTH`){let e=s>t.top;t.top=Math.max(t.top,s),c&&e&&(t.top=Math.max(t.top,t.bottom),t.bottom=t.top+r)}else if(n===`SOUTH`){let e=s>t.bottom;t.bottom=Math.max(t.bottom,s),c&&e&&(t.bottom=Math.max(t.bottom,t.top),t.top=t.bottom+r)}else if(n===`EAST`){let e=s>t.right;t.right=Math.max(t.right,s),c&&e&&(t.right=Math.max(t.left,t.right),t.left=t.right+r)}else{let e=s>t.left;t.left=Math.max(t.left,s),c&&e&&(t.left=Math.max(t.left,t.right),t.right=t.left+r)}}}}function td(e){let t=e.portConstraints;if(t===`FIXED_RATIO`||String(t)===`FIXED_RATIO`||t===`FIXED_POS`||String(t)===`FIXED_POSITION`)return;let n=e.insidePortLabelCells.get(`EAST`),r=e.insidePortLabelCells.get(`WEST`),i=e.insidePortLabelCells.get(`NORTH`),a=e.insidePortLabelCells.get(`SOUTH`),o=e.nodeContainer.padding.top+i.getMinimumHeight()+e.labelCellSpacing,s=e.nodeContainer.padding.bottom+a.getMinimumHeight()+e.labelCellSpacing,c=Math.max(0,n.padding.top-o,r.padding.top-o),l=Math.max(0,n.padding.bottom-s,r.padding.bottom-s);n.padding.top=c,r.padding.top=c,n.padding.bottom=l,r.padding.bottom=l}function nd(e){for(let t of Ru){let n=e.insidePortLabelCells.get(t),r=e.portContexts.get(t);if(r.length===0){t===`NORTH`||t===`SOUTH`?(n.padding.left=0,n.padding.right=0,e.portLabelSpacingV>=0&&(t===`NORTH`?n.padding.top=e.portLabelSpacingV:n.padding.bottom=e.portLabelSpacingV)):(n.padding.top=0,n.padding.bottom=0);continue}t===`NORTH`||t===`SOUTH`?(n.padding.left=e.surrounding.left,n.padding.right=e.surrounding.right,e.portLabelSpacingV>=0&&(t===`NORTH`?n.padding.top=e.portLabelSpacingV:n.padding.bottom=e.portLabelSpacingV)):(n.padding.top=e.surrounding.top,n.padding.bottom=e.surrounding.bottom),e.constraints.includes(`PORT_LABELS`)&&rd(e,t);let i=t===`NORTH`||t===`SOUTH`,a=0;for(let t=0;t<r.length;t++){let n=r[t];a+=i?n.margin.left+n.port.size.x+n.margin.right:n.margin.top+n.port.size.y+n.margin.bottom,t<r.length-1&&(a+=e.portPort)}Yu(e,t)===`DISTRIBUTED`&&(a+=2*e.portPort),i?n.content.x=a:n.content.y=a;let o=e.portConstraints!==`FIXED_POS`&&String(e.portConstraints)!==`FIXED_POSITION`;if(i&&e.portLabelsPlacement.includes(`INSIDE`)&&e.constraints.includes(`PORT_LABELS`)&&o){let e=0;for(let t of r)t.labelCell&&(e=Math.max(e,t.labelCell.getMinimumHeight()));e>0&&(n.content.y=e)}if(!i&&e.portLabelsPlacement.includes(`INSIDE`)){let i=0;for(let e of r)e.labelCell&&(i=Math.max(i,e.labelCell.getMinimumWidth()));i>0&&(n.content.x=i,t===`EAST`?n.padding.right=e.portLabelSpacingH:n.padding.left=e.portLabelSpacingH)}}}function rd(e,t){let n=e.portContexts.get(t),r=e.portLabelsPlacement.includes(`OUTSIDE`),i=e.sizeOptions.includes(`UNIFORM_PORT_SPACING`);for(let r of n){let n=r.labelCell?r.labelCell.getMinimumWidth():0,i=r.labelCell?r.labelCell.getMinimumHeight():0;if(r.labelCell){if(t===`NORTH`||t===`SOUTH`){if(r.labelsNextToPort){let e=r.port.size.x;if(n>e){let t=(n-e)/2;r.margin.left=t,r.margin.right=t}}else r.margin.right=e.portLabelSpacingH+n}else if(r.labelsNextToPort){let e=r.port.size.y;if(i>e){let t=(i-e)/2;r.margin.top=t,r.margin.bottom=t}}else r.margin.bottom=e.portLabelSpacingV+i}else if(Xu(e.portLabelsPlacement)&&r.fixedLabelBounds){let e=r.fixedLabelBounds;t===`NORTH`||t===`SOUTH`?(e.x<0&&(r.margin.left=-e.x),e.x+e.w>r.port.size.x&&(r.margin.right=e.x+e.w-r.port.size.x)):(e.y<0&&(r.margin.top=-e.y),e.y+e.h>r.port.size.y&&(r.margin.bottom=e.y+e.h-r.port.size.y))}}if(r){let e=n[0],r=n[n.length-1];t===`NORTH`||t===`SOUTH`?(e.margin.left=0,r.margin.right=0):(e.margin.top=0,r.margin.bottom=0)}if(i){let e=0,i=0,a=0,o=0;for(let t of n)t.margin.left>e&&(e=t.margin.left),t.margin.right>i&&(i=t.margin.right),t.margin.top>a&&(a=t.margin.top),t.margin.bottom>o&&(o=t.margin.bottom);for(let t of n)t.margin.left=e,t.margin.right=i,t.margin.top=a,t.margin.bottom=o;if(r){let e=n[0],r=n[n.length-1];t===`NORTH`||t===`SOUTH`?(e.margin.left=0,r.margin.right=0):(e.margin.top=0,r.margin.bottom=0)}}}function id(e){if(e.constraints.length===0)return;let t=e.insidePortLabelCells,n=e.portConstraints!==`FIXED_RATIO`&&e.portConstraints!==`FIXED_POS`&&String(e.portConstraints)!==`FIXED_RATIO`&&String(e.portConstraints)!==`FIXED_POSITION`;if(e.constraints.includes(`PORTS`)&&(t.get(`NORTH`).contributesMinWidth=!0,t.get(`SOUTH`).contributesMinWidth=!0,t.get(`EAST`).contributesMinHeight=n,t.get(`WEST`).contributesMinHeight=n,e.middleRow.contributesMinHeight=n,e.constraints.includes(`PORT_LABELS`)&&(t.get(`NORTH`).contributesMinHeight=!0,t.get(`SOUTH`).contributesMinHeight=!0,t.get(`EAST`).contributesMinWidth=!0,t.get(`WEST`).contributesMinWidth=!0,e.middleRow.contributesMinWidth=!0)),e.constraints.includes(`NODE_LABELS`)){e.insideGrid.contributesMinHeight=!0,e.insideGrid.contributesMinWidth=!0,e.middleRow.contributesMinHeight=!0,e.middleRow.contributesMinWidth=!0;let t=e.sizeOptions.includes(`OUTSIDE_NODE_LABELS_OVERHANG`);for(let t=0;t<3;t++)for(let n=0;n<3;n++){let r=e.insideGrid.cells[t][n];r&&(r.contributesMinHeight=!0,r.contributesMinWidth=!0)}for(let n of Ru){let r=e.outsideNodeLabelContainers.get(n);r.contributesMinHeight=!t,r.contributesMinWidth=!t;for(let e of r.cells)e&&(e.contributesMinHeight=!t,e.contributesMinWidth=!t)}}e.constraints.includes(`MINIMUM_SIZE`)&&e.sizeOptions.includes(`MINIMUM_SIZE_ACCOUNTS_FOR_PADDING`)&&(e.middleRow.contributesMinHeight=!0,e.middleRow.contributesMinWidth=!0,e.insideGrid.contributesMinHeight||(e.insideGrid.contributesMinHeight=!0,e.insideGrid.contributesMinWidth=!0))}function ad(e,t,n){let r=e.hasProperty(He)?e.getProperty(He):t?.getProperty(He)??[],i=r.length===0||r.length===1&&r[0]===`PORT_LABELS`,a=e.hasProperty(_)?e.getProperty(_):t&&t.hasProperty(_)?t.getProperty(_):[],o=String(e.getProperty(O)??`UNDEFINED`),s=e.hasProperty(Yn)?e.getProperty(Yn):[`OUTSIDE`],c=e.getProperty(`org.eclipse.elk.portLabels.treatAsGroup`)===!0,l=!a.includes(`ASYMMETRICAL`),u=Ju(e,t,dn,10),d=Ju(e,t,Ot,Lu(Iu)),f=Ju(e,t,Nt,{top:5,right:5,bottom:5,left:5}),p=Ju(e,t,dt,0),m=2*p,h=Ju(e,t,cn,5),g=Ju(e,t,bn,1),v=Ju(e,t,vt,1),y=new Ku(`VERTICAL`,l,0),b=new Ku(`HORIZONTAL`,l,0);y.cells[1]=b;let x=new qu(l,m);b.cells[1]=x;let S=/* @__PURE__ */ new Map,ee=new Bu,C=new Bu,te=new Bu,ne=new Bu;S.set(`NORTH`,ee),S.set(`SOUTH`,C),S.set(`WEST`,te),S.set(`EAST`,ne),y.cells[0]=ee,y.cells[2]=C,b.cells[0]=te,b.cells[2]=ne;let w=/* @__PURE__ */ new Map;w.set(`NORTH`,new Ku(`HORIZONTAL`,l,m)),w.set(`SOUTH`,new Ku(`HORIZONTAL`,l,m)),w.set(`WEST`,new Ku(`VERTICAL`,l,m)),w.set(`EAST`,new Ku(`VERTICAL`,l,m)),w.get(`NORTH`).padding.bottom=h,w.get(`SOUTH`).padding.top=h,w.get(`WEST`).padding.right=h,w.get(`EAST`).padding.left=h;let T={node:e,graph:t,treatAsCompoundNode:e.getNestedGraph()!==null||e.getProperty(Ae),sizeFixed:i,constraints:r,sizeOptions:a,portConstraints:o,portLabelsPlacement:s,portLabelsTreatAsGroup:c,symmetry:l,portPort:u,surrounding:d,nodeLabelsPadding:f,labelLabelSpacing:p,labelCellSpacing:m,nodeLabelSpacing:h,portLabelSpacingH:g,portLabelSpacingV:v,portContexts:/* @__PURE__ */ new Map,hasPortLabelCells:!1,nodeContainer:y,middleRow:b,insideGrid:x,insidePortLabelCells:S,outsideNodeLabelContainers:w};return Qu(T,n),$u(T),ed(T),nd(T),id(T),td(T),T}function od(e){if(e.sizeFixed)return null;let{nodeContainer:t}=e,n=e.constraints,r=e.sizeOptions,i=e.outsideNodeLabelContainers,a=t.getMinimumWidth(),o=t.getMinimumHeight();return n.includes(`NODE_LABELS`)&&!r.includes(`OUTSIDE_NODE_LABELS_OVERHANG`)&&(a=Math.max(a,i.get(`NORTH`).getMinimumWidth(),i.get(`SOUTH`).getMinimumWidth()),o=Math.max(o,i.get(`EAST`).getMinimumHeight(),i.get(`WEST`).getMinimumHeight())),{x:a,y:o}}function sd(e,t,n=!1){return od(ad(e,t,n))}function cd(e,t){let n=Wu(e.cells[0]),r=Wu(e.cells[1]),i=Wu(e.cells[2]);e.symmetrical&&(n=Math.max(n,i),i=n),e.cells[0]&&(e.cells[0].rect={x:t.x,y:t.y+e.padding.top,width:t.width,height:n}),e.cells[2]&&(e.cells[2].rect={x:t.x,y:t.y+t.height-e.padding.bottom-i,width:t.width,height:i});let a=t.height-e.padding.top-e.padding.bottom;n>0&&(a-=n),i>0&&(a-=i);let o=Math.max(r,a);e.cells[1]&&(e.cells[1].rect={x:t.x,y:t.y+e.padding.top+n,width:t.width,height:o})}function ld(e,t){let n=Uu(e.cells[0]),r=Uu(e.cells[1]),i=Uu(e.cells[2]);e.symmetrical&&(n=Math.max(n,i),i=n),e.cells[0]&&(e.cells[0].rect={x:t.x+e.padding.left,y:t.y,width:n,height:t.height}),e.cells[2]&&(e.cells[2].rect={x:t.x+t.width-e.padding.right-i,y:t.y,width:i,height:t.height});let a=t.width-e.padding.left-e.padding.right;n>0&&(a-=n+e.gap,n+=e.gap),i>0&&(a-=i+e.gap);let o=Math.max(r,a);e.cells[1]&&(e.cells[1].rect={x:t.x+e.padding.left+n-(o-a)/2,y:t.y,width:o,height:t.height})}function ud(e,t,n){return t===`DISTRIBUTED`?n-2*e.portPort:n}function dd(e,t,n){let r={x:0,y:0,width:t,height:n};cd(e.nodeContainer,r),ld(e.middleRow,e.middleRow.rect);let i=e.sizeOptions.includes(`PORTS_OVERHANG`);for(let n of Ru){let r=e.portContexts.get(n);if(r.length===0)continue;let a=e.insidePortLabelCells.get(n),o=a.rect,s=a.padding,c=n===`NORTH`||n===`SOUTH`,l=Yu(e,n),u=c?a.content.x:a.content.y;(l===`DISTRIBUTED`||l===`JUSTIFIED`)&&r.length===1&&(u=ud(e,l,u),l=`CENTER`);let d=(c?o.width:o.height)-(c?s.left+s.right:s.top+s.bottom),f=c?o.x+s.left:o.y+s.top,p=e.portPort;if(d<u&&!i)l===`DISTRIBUTED`?(p+=(d-u)/(r.length+1),f+=p):p+=(d-u)/(r.length-1);else switch(d<u&&(u=ud(e,l,u),l=`CENTER`),l){case`BEGIN`:break;case`CENTER`:f+=(d-u)/2;break;case`END`:f+=d-u;break;case`DISTRIBUTED`:{let e=(d-u)/(r.length+1);p+=Math.max(0,e),f+=p;break}case`JUSTIFIED`:{let e=(d-u)/(r.length-1);p+=Math.max(0,e);break}}let m=n===`WEST`||n===`SOUTH`;for(let e=0;e<r.length;e++){let i=m?r[r.length-1-e]:r[e],a=i.port.getProperty(E)??0;c?(i.port.getPosition().x=f+i.margin.left,i.port.getPosition().y=n===`NORTH`?-i.port.size.y-a:a,f+=i.margin.left+i.port.size.x+i.margin.right+p):(i.port.getPosition().y=f+i.margin.top,i.port.getPosition().x=n===`EAST`?t+a:-i.port.size.x-a,f+=i.margin.top+i.port.size.y+i.margin.bottom+p)}}}function fd(e,t){let n=e.nodeContainer.padding;switch(t){case`NORTH`:return n.top+e.portLabelSpacingV;case`SOUTH`:return n.bottom+e.portLabelSpacingV;case`EAST`:return n.right+e.portLabelSpacingH;case`WEST`:return n.left+e.portLabelSpacingH;default:return 0}}function pd(e,t){let n=e.portContexts.get(t);if(n.length>=2){let r=t===`SOUTH`||t===`WEST`?n[n.length-1]:n[0],i=e.portLabelsPlacement.includes(`ALWAYS_SAME_SIDE`),a=e.portLabelsPlacement.includes(`SPACE_EFFICIENT`);return!r.labelsNextToPort&&!i&&(n.length===2||a)}return!1}function md(e,t){let n=0,r=fd(e,t),i=t===`NORTH`||t===`SOUTH`;for(let a of e.portContexts.get(t)){let o=a.labelCell;if(o===null||o.getLabels().length===0)continue;let s=a.port.size,c=a.port.getProperty(E)??0,l=o.rect;switch(l.width=o.getMinimumWidth(),l.height=o.getMinimumHeight(),t){case`NORTH`:l.x=a.labelsNextToPort?(s.x-l.width)/2:s.x+e.portLabelSpacingH,l.y=s.y+c+r,o.setHorizontalAlignment(`CENTER`),o.setVerticalAlignment(`TOP`);break;case`SOUTH`:l.x=a.labelsNextToPort?(s.x-l.width)/2:s.x+e.portLabelSpacingH,l.y=-c-r-l.height,o.setHorizontalAlignment(`CENTER`),o.setVerticalAlignment(`BOTTOM`);break;case`EAST`:if(l.x=-c-r-l.width,a.labelsNextToPort){let t=e.portLabelsTreatAsGroup?l.height:o.getLabels()[0].size.y;l.y=(s.y-t)/2}else l.y=s.y+e.portLabelSpacingV;o.setHorizontalAlignment(`RIGHT`),o.setVerticalAlignment(`CENTER`);break;case`WEST`:if(l.x=s.x+c+r,a.labelsNextToPort){let t=e.portLabelsTreatAsGroup?l.height:o.getLabels()[0].size.y;l.y=(s.y-t)/2}else l.y=s.y+e.portLabelSpacingV;o.setHorizontalAlignment(`LEFT`),o.setVerticalAlignment(`CENTER`)}i&&(n=Math.max(n,l.height))}n>0&&(e.insidePortLabelCells.get(t).content.y=n)}function hd(e,t){let n=pd(e,t),r=e.portLabelsPlacement.includes(`ALWAYS_OTHER_SAME_SIDE`);for(let i of e.portContexts.get(t)){let a=i.labelCell;if(a===null||a.getLabels().length===0)continue;let o=i.port.size,s=a.rect;switch(s.width=a.getMinimumWidth(),s.height=a.getMinimumHeight(),t){case`NORTH`:i.labelsNextToPort?(s.x=(o.x-s.width)/2,a.setHorizontalAlignment(`CENTER`)):n||r?(s.x=-s.width-e.portLabelSpacingH,a.setHorizontalAlignment(`RIGHT`)):(s.x=o.x+e.portLabelSpacingH,a.setHorizontalAlignment(`LEFT`)),s.y=-s.height-e.portLabelSpacingV,a.setVerticalAlignment(`BOTTOM`);break;case`SOUTH`:i.labelsNextToPort?(s.x=(o.x-s.width)/2,a.setHorizontalAlignment(`CENTER`)):n||r?(s.x=-s.width-e.portLabelSpacingH,a.setHorizontalAlignment(`RIGHT`)):(s.x=o.x+e.portLabelSpacingH,a.setHorizontalAlignment(`LEFT`)),s.y=o.y+e.portLabelSpacingV,a.setVerticalAlignment(`TOP`);break;case`EAST`:if(i.labelsNextToPort){let t=e.portLabelsTreatAsGroup?s.height:a.getLabels()[0].size.y;s.y=(o.y-t)/2,a.setVerticalAlignment(`CENTER`)}else n||r?(s.y=-s.height-e.portLabelSpacingV,a.setVerticalAlignment(`BOTTOM`)):(s.y=o.y+e.portLabelSpacingV,a.setVerticalAlignment(`TOP`));s.x=o.x+e.portLabelSpacingH,a.setHorizontalAlignment(`LEFT`);break;case`WEST`:if(i.labelsNextToPort){let t=e.portLabelsTreatAsGroup?s.height:a.getLabels()[0].size.y;s.y=(o.y-t)/2,a.setVerticalAlignment(`CENTER`)}else n||r?(s.y=-s.height-e.portLabelSpacingV,a.setVerticalAlignment(`BOTTOM`)):(s.y=o.y+e.portLabelSpacingV,a.setVerticalAlignment(`TOP`));s.x=-s.width-e.portLabelSpacingH,a.setHorizontalAlignment(`RIGHT`)}n=!1}}function gd(e){let t=e.portLabelsPlacement,n=t.includes(`INSIDE`),r=t.includes(`OUTSIDE`);if((n||r)&&e.hasPortLabelCells){for(let t of Ru)n?md(e,t):hd(e,t);for(let t of Ru)for(let n of e.portContexts.get(t))n.labelCell&&n.labelCell.applyLabelLayout()}}function _d(e){return`JUSTIFIED`}function vd(e,t,n){let r=e.getPorts(t);if(r.length===0)return;let i=e.size.y,a=r.find(e=>e.size.y>0)?.size.y??r[0].size.y,o=a+(i-r.reduce((e,t)=>e+t.size.y,0))/(r.length+1),s=t===`WEST`;for(let t=0;t<r.length;t++){let n=r[t],i=s?(r.length-t)*o-a:(t+1)*o-a,c=n.getProperty(E)??0;n.getPosition().x=s?-n.size.x-c:e.size.x+c,n.getPosition().y=i}}function yd(e,t,n){let r=e.getPorts(t);if(r.length===0)return;let i=e.size.x,a=r.reduce((e,t)=>e+t.size.x,0),o=i,s=_d(e),c=0,l=s;(s===`DISTRIBUTED`||s===`JUSTIFIED`)&&r.length===1&&(l=`CENTER`);let u=n;switch(l===`JUSTIFIED`&&(u=(o-a)/(r.length+1),c=u),l){case`CENTER`:c=(o-a)/2;break;case`END`:c=o-a}let d=c,f=t===`SOUTH`?[...r].reverse():r;for(let n of f){let r=t===`NORTH`,i=n.getProperty(E);n.getPosition().y=r?-n.size.y-(i??0):e.size.y+(i??0),n.getPosition().x=d,d+=n.size.x+u}}function bd(e){let t=e.getProperty(dn);for(let n of e.getLayers())for(let e of n.getNodes())e.getType()===`NORMAL`&&Sd(e,t);xd(e)}function xd(e){let t=e.getProperty(Yn)??[],n=t.includes(`NEXT_TO_PORT_IF_POSSIBLE`),r=e.getProperty(`org.eclipse.elk.portLabels.treatAsGroup`)===!0;for(let i of e.getLayers())for(let e of i.getNodes()){if(e.getType()!==`EXTERNAL_PORT`)continue;let i=e.getPorts()[0];if(!i||i.getLabels().length===0)continue;let a=Aa(e,bn),o=Aa(e,vt),s=Aa(e,dt),c=e.size,l=i.position,u=i.getLabels(),d=0,f=0;for(let e of u)d=Math.max(d,e.size.x),f+=e.size.y;f+=(u.length-1)*s;let p={x:0,y:0,width:d,height:f},m=e.getProperty(j),h=e=>n?e?i.getIncomingEdges().length===0&&i.getOutgoingEdges().length===0:i.getConnectedEdges().length===0:!1;if(t.includes(`INSIDE`))switch(m){case`NORTH`:p.x=(c.x-p.width)/2-l.x,p.y=o;break;case`SOUTH`:p.x=(c.x-p.width)/2-l.x,p.y=-o-p.height;break;case`EAST`:case`WEST`:if(h(!0)){let e=r?p.height:u[0].size.y;p.y=(c.y-e)/2-l.y}else p.y=c.y+o-l.y;p.x=m===`EAST`?-a-p.width:a}else if(t.includes(`OUTSIDE`))switch(m){case`NORTH`:case`SOUTH`:p.x=l.x+a;break;case`EAST`:case`WEST`:if(h(!1)){let e=r?p.height:u[0].size.y;p.y=(c.y-e)/2-l.y}else p.y=l.y+o}let g=p.y;for(let e of u)e.position.x=p.x,e.position.y=g,g+=e.size.y+s}}function Sd(e,t){let n=ad(e,e.getGraph(),!1);Cd(e,n);let r=e.getProperty(O);if(r===`FIXED_POS`||r===`FIXED_RATIO`||String(r)===`FIXED_POSITION`||String(r)===`FIXED_RATIO`){for(let t of e.getPorts(`NORTH`))t.isExplicitSide()&&(t.getPosition().y=-t.size.y-(t.getProperty(E)??0));for(let t of e.getPorts(`SOUTH`))t.isExplicitSide()&&(t.getPosition().y=e.size.y+(t.getProperty(E)??0));for(let t of e.getPorts(`WEST`))t.isExplicitSide()&&(t.getPosition().x=-t.size.x-(t.getProperty(E)??0));for(let t of e.getPorts(`EAST`))t.isExplicitSide()&&(t.getPosition().x=e.size.x+(t.getProperty(E)??0));gd(n)}else if(e.getNestedGraph()===null){dd(n,e.size.x,e.size.y);let t=e.size.y;for(let n of e.getPorts(`SOUTH`))n.getPosition().y+=t;gd(n)}else vd(e,`WEST`,t),vd(e,`EAST`,t),yd(e,`NORTH`,t),yd(e,`SOUTH`,t),gd(n)}function Cd(e,t){let n=e.getLabels(),r=e.getGraph(),i=e.hasProperty(He)?e.getProperty(He):r?.getProperty(He)??[];if(i.includes(`MINIMUM_SIZE`)){let t=e.hasProperty(x)?e.getProperty(x):{x:0,y:0};e.size.x=Math.max(e.size.x,t.x),e.size.y=Math.max(e.size.y,t.y)}if(i.includes(`PORTS`)&&e.getNestedGraph()===null){let n=od(t);if(n){let t=n.x,r=n.y;if(i.includes(`MINIMUM_SIZE`)){let n=e.hasProperty(x)?e.getProperty(x):{x:0,y:0};t=Math.max(t,n.x>0?n.x:20),r=Math.max(r,n.y>0?n.y:20)}e.size.x=t,e.size.y=r}}if(n.length===0)return;let a=i.includes(`NODE_LABELS`),o=e.hasProperty(Nt)?e.getProperty(Nt):r?.getProperty(Nt)??{top:5,right:5,bottom:5,left:5},s=0,c=0;for(let e of n)s=Math.max(s,e.size.x),c=Math.max(c,e.size.y);let l=i.includes(`PORTS`)||i.includes(`PORT_LABELS`),u=e.getProperty(mn)===`SEPARATE_CHILDREN`;if(a&&!l&&e.getNestedGraph()===null&&!u){let t=s,n=c;if(i.includes(`MINIMUM_SIZE`)){let r=e.hasProperty(x)?e.getProperty(x):{x:0,y:0};t=Math.max(t,r.x>0?r.x:20),n=Math.max(n,r.y>0?r.y:20)}i.includes(`MINIMUM_SIZE`)?(e.size.x=t,e.size.y=n):(e.size.x=t+o.left+o.right,e.size.y=n+o.top+o.bottom)}wd(e,n,o,r)}function wd(e,t,n,r){if(t.length===0)return;let i=r?.getProperty(dt)??0,a=Tc(e),o=e.getProperty(N),s=e=>{let t=e.placement??o??``;return Array.isArray(t)?t:String(t).split(/[\s,]+/).filter(Boolean)},c=e=>e.includes(`V_BOTTOM`)?`bottom`:e.includes(`V_CENTER`)?`center`:`top`,l=e=>e.includes(`H_RIGHT`)?`right`:e.includes(`H_LEFT`)?`left`:`center`,u=Array(t.length);for(let e=0;e<t.length;e++)u[e]=s(t[e]);let d=[],f=[];for(let e=0;e<t.length;e++)u[e].includes(`OUTSIDE`)?d.push(t[e]):f.push(t[e]);if(d.length>0)for(let t of d)Cc(t,e.size,xc(t,e),a);if(f.length===0)return;let p={top:{},center:{},bottom:{}};for(let e=0;e<t.length;e++){let n=u[e];if(n.includes(`OUTSIDE`))continue;let r=c(n),i=l(n);(p[r][i]??=[]).push(t[e])}let m=e=>{let t=0;for(let n of Object.values(p[e])){let e=n.reduce((e,t)=>e+t.size.y+i,0)-(n.length>0?i:0);t=Math.max(t,e)}return t},h=m(`top`),g=m(`bottom`),_=m(`center`),v=(t,r)=>{if(t===`top`)return n.top;if(t===`bottom`)return e.size.y-n.bottom-(r.reduce((e,t)=>e+t.size.y+i,0)-(r.length>0?i:0));let a=n.top+h+i;return a+(e.size.y-n.bottom-g-i-a-_)/2};for(let e of[`top`,`center`,`bottom`])for(let t of Object.keys(p[e])){let n=p[e][t],r=v(e,n);for(let e of n)e.position.y=r,r+=e.size.y+i}for(let r=0;r<t.length;r++){if(u[r].includes(`OUTSIDE`))continue;let i=t[r],a=l(u[r]);a===`right`?i.position.x=e.size.x-i.size.x-n.right:a===`left`?i.position.x=n.left:i.position.x=n.left+(e.size.x-n.left-n.right-i.size.x)/2}}function Td(e){let t=e.getProperty(p);if(t!=null){e.setProperty(Re,null);for(let t of e.getLayers())for(let e of t.getNodes())e.setProperty(Un,null),e.setProperty(He,null),e.position.y=0;bd(e),Ec(e),Ed(t,e)}}function Ed(e,t){switch(e){case`SIMPLE`:Ta(t);break;case`INTERACTIVE`:Ea(t);break;case`NETWORK_SIMPLEX`:new za().process(t);break;case`BRANDES_KOEPF`:new wa().process(t);break;default:throw Error(`未支持的节点放置策略: ${e}`)}}function Dd(e){if(!e.getProperty(w).has(`EXTERNAL_PORTS`))return;let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e.getLayerlessNodes()){if(a.getType()!==`NORMAL`)continue;let e=a.getMargin();t=Math.min(t,a.position.x-e.left),n=Math.max(n,a.position.x+a.size.x+e.right),r=Math.min(r,a.position.y-e.top),i=Math.max(i,a.position.y+a.size.y+e.bottom)}for(let a of e.getLayerlessNodes())if(a.getType()!==`NORMAL`)switch(a.getType()){case`EXTERNAL_PORT`:{let e=a.getLayerConstraint();if(e===`FIRST_SEPARATE`){a.position.x=t-10;let e=Od(a,e=>e.getTarget()?.getNode()??null);e!==null&&(a.position.y=e);break}if(e===`LAST_SEPARATE`){a.position.x=n+10;let e=Od(a,e=>e.getSource()?.getNode()??null);e!==null&&(a.position.y=e);break}let o=a.getInLayerConstraint();if(o===`TOP`){let e=kd(a);e!==null&&(a.position.x=e+10),a.position.y=r-10;break}if(o===`BOTTOM`){let e=kd(a);e!==null&&(a.position.x=e+10),a.position.y=i+10;break}break}default:throw Error(`节点类型 ${a.getType()} 不受 InteractiveExternalPortPositioner 支持`)}}function Od(e,t){for(let n of e.getConnectedEdges()){let e=t(n);if(e!==null)return e.position.y+e.size.y/2}return null}function kd(e){if(e.getPorts().length!==1)throw Error(`外部端口 dummy 必须恰好一个端口`);let t=e.getPorts()[0];if(t.getOutgoingEdges().length>0&&t.getIncomingEdges().length>0)throw Error(`交互式布局不支持同时有入边和出边的 NORTH/SOUTH 端口`);if(t.getOutgoingEdges().length>0){let e=1/0;for(let n of t.getOutgoingEdges()){let t=n.getTarget().getNode(),r=t.getMargin();e=Math.min(e,t.position.x-r.left)}return e}if(t.getIncomingEdges().length>0){let e=-1/0;for(let n of t.getIncomingEdges()){let t=n.getSource().getNode(),r=t.getMargin();e=Math.max(e,t.position.x+t.size.x+r.right)}return e}return null}var Ad=class{start;end;nodeStartEdge;startEndEdge;originalEdge;startInLayerDummy=null;startInLayerEdge=null;endInLayerDummy=null;endInLayerEdge=null;prev=null;next=null;constructor(e,t,n,r,i){this.start=e,this.end=t,this.nodeStartEdge=n,this.startEndEdge=r,this.originalEdge=i}static isStart(e){let t=e.getProperty(i);return t!==null&&t.start===e}static isEnd(e){let t=e.getProperty(i);return t!==null&&t.end===e}},jd=class{graph;spacing=0;inLayerSpacing=0;dar;longestPath;maxWidth=null;maxHeight=null;sumWidth=null;widths=null;heights=null;cutsAllowed=null;constructor(e){this.graph=e;let t=e.getProperty(S),n=e.getProperty(Pt),r=e.getProperty(ct);this.dar=t===`LEFT`||t===`RIGHT`||t===`UNDEFINED`?n*r:1/(n*r),this.spacing=e.getProperty(kn),this.inLayerSpacing=e.getProperty(Zt),this.longestPath=e.getLayers().length}getApproximateLayerWidth(e){return this.determineLayerWidth(e)}getApproximateLayeringWidth(){return this.getSumWidth()}getApproximateChunkBasedLayeringWidth(e){if(e.length===0)return this.getApproximateLayeringWidth();let t=0,n=0;for(let r of e)t=Math.max(t,this.determineChunkWidth(n,r)),n=r;return t=Math.max(t,this.determineChunkWidth(n,this.graph.getLayers().length)),t}getApproximateLayerHeight(e){return this.determineLayerHeight(e)}getApproximateLayeringHeight(){return this.getMaxHeight()}getApproximateChunkBasedLayeringHeight(e){if(e.length===0)return 0;let t=0,n=0;for(let r of e)t+=this.determineChunkHeight(n,r),n=r;return t+=this.determineChunkHeight(n,this.graph.getLayers().length),t}getMaxWidth(){return this.maxWidth===null&&(this.maxWidth=this.determineWidth((e,t)=>Math.max(e,t))),this.maxWidth}getSumWidth(){return this.sumWidth===null&&(this.sumWidth=this.determineWidth((e,t)=>e+t)),this.sumWidth}getWidths(){return this.widths===null&&this.initWidthsAndHeights(),this.widths}initWidthsAndHeights(){let e=this.longestPath,t=Array(e),n=Array(e);for(let r=0;r<e;r++){let e=this.graph.getLayers()[r];t[r]=this.determineLayerWidth(e),n[r]=this.determineLayerHeight(e)}this.widths=t,this.heights=n}determineWidth(e){let t=this.graph.getLayers(),n=this.determineLayerWidth(t[0]);for(let r=1;r<t.length;r++)n=e(n,this.determineLayerWidth(t[r]));return n}determineLayerWidth(e){let t=0;for(let n of e.getNodes()){let e=n.getSize().x+n.getMargin().right+n.getMargin().left+this.spacing;t=Math.max(t,e)}return t}determineChunkWidth(e,t){let n=0;for(let r=e;r<t;r++)n+=this.determineLayerWidth(this.graph.getLayers()[r]);return n}getMaxHeight(){return this.maxHeight===null&&(this.maxHeight=this.determineHeight((e,t)=>Math.max(e,t))),this.maxHeight}getHeights(){return this.heights===null&&this.initWidthsAndHeights(),this.heights}determineHeight(e){let t=this.graph.getLayers(),n=this.determineLayerHeight(t[0]);for(let r=1;r<t.length;r++)n=e(n,this.determineLayerHeight(t[r]));return n}determineLayerHeight(e){let t=0;for(let n of e.getNodes()){t+=n.getSize().y+n.getMargin().bottom+n.getMargin().top+this.inLayerSpacing;for(let e of n.getIncomingEdges())if(e.getSource().getNode().getType()===`NORTH_SOUTH_PORT`){let n=e.getSource().getNode().getProperty(L);t+=n.getSize().y+n.getMargin().bottom+n.getMargin().top}}return t}determineChunkHeight(e,t){let n=0;for(let r=e;r<t;r++)n=Math.max(n,this.determineLayerHeight(this.graph.getLayers()[r]));return n}isCutAllowed(e){return this.cutsAllowed===null&&this.initCutAllowed(),this.cutsAllowed[e]}initCutAllowed(){if(this.cutsAllowed!==null)return;let e=Array(this.graph.getLayers().length);if(e[0]=!1,this.graph.hasProperty(Be)){let t=this.graph.getProperty(Be);if(t!==null)for(let n of t)n>0&&n<e.length&&(e[n]=!1)}else{let t=this.graph.getLayers();for(let n=1;n<t.length;n++)e[n]=this.isCutAllowedPerLayer(t[n])}this.cutsAllowed=e}getCutsAllowed(){return this.cutsAllowed===null&&this.initCutAllowed(),this.cutsAllowed}isCutAllowedPerLayer(e){let t=!0,n=null,r=null;check:for(let i of e.getNodes())for(let e of i.getIncomingEdges()){if(n!==null&&n!==i){t=!1;break check}n=i;let a=e.getSource().getNode();if(r!==null&&r!==a){t=!1;break check}r=a}return t}},Md=class{getCutIndexes(e,t){let n=e.getProperty(Nn);return n===null?[]:n}guaranteeValid(){return!1}},Nd=class e{getCutIndexes(t,n){let r=e.getChunkCount(n),i=[],a=n.longestPath/r;for(let e=1;e<r;++e)i.push(Math.round(e*a));return i}static getChunkCount(e){let t=Math.sqrt(e.getSumWidth()/(e.dar*e.getMaxHeight())),n=Math.round(t);return n=Math.min(n,e.longestPath),n}guaranteeValid(){return!1}},Pd=class{guaranteeValid(){return!1}getCutIndexes(e,t){let n=t.getWidths(),r=t.getHeights(),i=Array(n.length);i[0]=n[0];let a=n[0];for(let e=1;e<n.length;e++)i[e]=i[e-1]+n[e],a+=n[e];let o=Nd.getChunkCount(t)-1,s=e.getProperty(Gn),c=-1/0,l=[];for(let e=Math.max(0,o-s);e<=Math.min(t.longestPath-1,o+s);e++){let n=a/(e+1),o=0,s=1,u=[],d=-1/0,f=0,p=0,m=r[0];if(e===0)d=a,p=t.getMaxHeight();else{for(;s<t.longestPath;)i[s-1]-o>=n&&(u.push(s),d=Math.max(d,i[s-1]-f),p+=m,o+=i[s-1]-o,f=i[s-1],m=r[s]),m=Math.max(m,r[s]),s++;p+=m}let h=Math.min(1/d,1/t.dar/p);h>c&&(c=h,l=u)}return l}};function Fd(e,t,n){let r=e.getProperty(an),i=e.getProperty(jt),a=new zt;a.setProperty(an,r+i);let o=t,s=o.getTarget(),c=o.getSource().getNode(),l=o.getTarget().getNode(),u=c.getLayer().getIndex(),d=l.getLayer().getIndex(),f=[];for(let t=u;t<=d;t++){let r=new V(e);r.setType(`LONG_EDGE`),r.setProperty(L,o),r.setProperty(O,`FIXED_POS`),r.setProperty(Bt,a);let i=e.getLayers()[t];t===u?r.setLayerAt(i.getNodes().length-n,i):r.setLayer(i);let c=o.getProperty(Ye);c<0&&(c=0,o.setProperty(Ye,c)),r.size.y=c;let l=Math.floor(c/2),d=new H;d.setSide(`WEST`),d.setNode(r),d.getPosition().y=l;let p=new H;p.setSide(`EAST`),p.setNode(r),p.getPosition().y=l,o.setTarget(d);let m=new U;m.copyProperties(o),m.setProperty(R,null),m.setSource(p),m.setTarget(s),Id(r,o,m),f.push(m),o=m}return f}function Id(e,t,n){let r=t.getSource().getNode();r.getType()===`LONG_EDGE`?(e.setProperty(B,r.getProperty(B)),e.setProperty(I,r.getProperty(I))):(e.setProperty(B,t.getSource()),e.setProperty(I,n.getTarget()))}function Ld(e,t){let n=[],r=0,i=0;for(;i<t.length;){let a=t[i]+r;for(;a<e.longestPath&&!e.isCutAllowed(a);)a++,r++;if(a>=e.longestPath)break;n.push(a),i++}return n}function Rd(e,t){if(t.length===0)return[];let n=[-(2**53-1)];for(let t=1;t<e.longestPath;++t)e.isCutAllowed(t)&&n.push(t);return n.length===1?[]:(n.push(2**53-1),zd(t,n))}function zd(e,t){let n=[],r=0,i=0,a=0;for(;r<t.length-1&&i<e.length;){let o=e[i]+a;for(;t[r+1]<o;)r++;let s=0;for(o-t[r]>t[r+1]-o&&s++,n.push(t[r+s]),a+=t[r+s]-o,i++;i<e.length&&e[i]+a<=t[r+s];)i++;r+=1+s}return n}function Bd(e){let t=new jd(e),n=Vd(e),r=n.getCutIndexes(e,t);if(e.getProperty(Le)&&(r=Ud(e,r)),!n.guaranteeValid()&&e.hasProperty(y))switch(e.getProperty(y)){case`LOOK_BACK`:r=Rd(t,r);break;case`GREEDY`:r=Ld(t,r)}r.length!==0&&Hd(e,r)}function Vd(e){switch(e.getProperty(ht)){case`MANUAL`:return new Md;case`ARD`:return new Nd;default:return new Pd}}function Hd(e,t){let n=e.getLayers(),r=0,a=0,o=t[0],s=0,c=/* @__PURE__ */ new Set,l=/* @__PURE__ */ new Set,u=0;for(;u<n.length;){let d=n[u];for(let e of d.getNodes()){for(let t of e.getOutgoingEdges())l.add(t);for(let t of e.getIncomingEdges())l.delete(t)}if(r+1===o){let r=new W(e);n.splice(u+1,0,r);let d=new W(e);n.splice(u+2,0,d);for(let t of l){c.has(t)||(s++,c.add(t));let n=new V(e);n.setProperty(O,`FIXED_SIDE`),n.setLayer(r),n.setType(`BREAKING_POINT`);let a=new H;a.setNode(n),a.setSide(`WEST`);let o=new H;o.setNode(n),o.setSide(`EAST`);let l=new V(e);l.setProperty(O,`FIXED_SIDE`),l.setLayer(d),l.setType(`BREAKING_POINT`);let u=new H;u.setNode(l),u.setSide(`WEST`);let f=new H;f.setNode(l),f.setSide(`EAST`);let p=new U;p.setSource(t.getSource()),p.setTarget(a),p.setProperty(F,t.getProperty(F));let m=new U;m.setSource(o),m.setTarget(u),m.setProperty(F,t.getProperty(F)),t.setSource(f);let h=new Ad(n,l,p,m,t);n.setProperty(i,h),l.setProperty(i,h);let g=p.getSource().getNode();if(g.getType()===`BREAKING_POINT`){let e=g.getProperty(i);e.next=h,h.prev=e}}if(u+=2,a++,a<t.length)o=t[a];else break}r++,u++}return s}function Ud(e,t){let n=[],r=[],i=null;for(let e of t){let t=new Kd(e);r.push(t),i!==null&&(t.prev=i,i.suc=t),i=t}let a=Gd(e);for(let t=0;t<r.length;++t){let t=null,i=r[0].selfOrNext(),o=null,s=1/0;for(let n=1;n<e.getLayers().length;++n){let r=i===null?Math.abs(n-t.index)+1:Math.abs(i.index-n),c=t===null?r+1:Math.abs(n-t.index),l,u;c<r?(l=t,u=c):(l=i,u=r);let d=Wd(e,n,a[n],u);d<s&&(s=d,o=l,o.newIndex=n),i!==null&&n===i.index&&(t=i,i=i.next())}o!==null&&(n.push(o.newIndex),o.assigned=!0,o.offset())}return n.sort((e,t)=>e-t),n}function Wd(e,t,n,r){return n+r**+e.getProperty(Vn)}function Gd(e){let t=Array(e.getLayers().length+1),n=/* @__PURE__ */ new Set,r=0;for(let i of e.getLayers()){t[r++]=n.size;for(let e of i.getNodes())for(let t of e.getOutgoingEdges())n.add(t);for(let e of i.getNodes())for(let t of e.getIncomingEdges())n.delete(t)}return t}var Kd=class{index;newIndex=0;prev=null;suc=null;assigned=!1;constructor(e){this.index=e}selfOrNext(){return this.assigned?this.suc===null?null:this.suc.selfOrNext():this}next(){return this.suc===null?null:this.suc.selfOrNext()}offset(){if(!this.assigned)throw Error(`Cannot offset an unassigned cut.`);let e=this.newIndex-this.index;this.applyOffset(e),this.offsetPrev(e),this.offsetSuc(e)}applyOffset(e){this.index+=e}offsetPrev(e){this.prev!==null&&!this.prev.assigned&&(this.prev.applyOffset(e),this.prev.offsetPrev(e))}offsetSuc(e){this.suc!==null&&!this.suc.assigned&&(this.suc.applyOffset(e),this.suc.offsetSuc(e))}};function qd(e){if(Jd(e),e.getProperty(d)){let t=/* @__PURE__ */ new Map;for(let n of e.getLayers()){let e=0;for(let r of n.getNodes())t.set(r,e++)}Yd(e,t),Xd(e,t,!0),Xd(e,t,!1)}}function Jd(e){let t=e.getLayers();t.unshift(new W(e));let n=!1,r=1,a=1;for(;a<t.length;){let o=t[a],s=t[r],c=[...o.getNodes()],l=c.length;for(let e of c)e.setLayer(s);if(n){for(let t of[...c].reverse())for(let n of[...t.getIncomingEdges()]){n.reverse(e,!0),e.setProperty(ge,!0);let r=Fd(e,n,l),a=t.getProperty(i),o=r[r.length-1];a.startInLayerDummy=o.getSource().getNode(),a.startInLayerEdge=o,a.endInLayerDummy=n.getTarget().getNode(),a.endInLayerEdge=n}n=!1}else c.length>0&&c[0].getType()===`BREAKING_POINT`&&(n=!0,r=-1);r++,a++}for(let e=t.length-1;e>=0;e--)t[e].getNodes().length===0&&t.splice(e,1)}function Yd(e,t){for(let n of e.getLayers())for(let e of[...n.getNodes()])if(Ad.isStart(e)){let n=e.getProperty(i);if(n.prev===null&&n.next!==null){let e=n,r=n.next;for(;r!==null;){Zd(t,r.start,r.startInLayerDummy,!1,!0),tf(t,e.end),tf(t,r.start),tf(t,r.startInLayerDummy),tf(t,r.endInLayerDummy),r.endInLayerEdge.setTarget(e.endInLayerEdge.getTarget()),e.endInLayerEdge.setTarget(null),e.end.setLayer(null),r.start.setLayer(null),r.startInLayerDummy.setLayer(null),r.endInLayerDummy.setLayer(null);let n=new Ad(e.start,r.end,e.nodeStartEdge,r.startEndEdge,r.originalEdge);n.startInLayerDummy=e.startInLayerDummy,n.startInLayerEdge=e.startInLayerEdge,n.endInLayerDummy=e.endInLayerDummy,n.endInLayerEdge=r.endInLayerEdge,n.prev=e.prev,n.next=r.next,e.start.setProperty(i,n),r.end.setProperty(i,n),r=r.next,e=n}}}}function Xd(e,t,n){let r=n?Ad.isEnd:Ad.isStart,a=!1;do{a=!1;let o=n?[...e.getLayers()].reverse():e.getLayers();for(let e of o){let o=[...e.getNodes()];n||o.reverse();for(let e of o)if(r(e)){let r=e,o=e.getProperty(i);a=Zd(t,r,n?o.endInLayerDummy:o.startInLayerDummy,n,!1)}}}while(a)}function Zd(e,t,n,r,i){let a=$d(t,r),o=$d(n,r),s=!1;for(;a!==null&&o!==null&&(i||Qd(e,a,o,r));){let i=$d(a,r),c=$d(o,r);tf(e,n),tf(e,t);let l=a.getLayer(),u=e.get(o),d=e.get(a);si(a,!1),si(o,!1),r?(n.setLayerAt(u,l),e.set(n,u),t.setLayerAt(d+1,l),e.set(t,d)):(t.setLayerAt(d,l),e.set(t,d),n.setLayerAt(u+1,l),e.set(n,u)),a.setLayer(null),o.setLayer(null),a=i,o=c,s=!0}return s}function Qd(e,t,n,r){let i=t.getLayer(),a=r?n:t,o=r?t:n,s=e.get(a),c=e.get(o);for(let e=s+1;e<c;++e){let t=i.getNodes()[e];if(t.getType()!==`BREAKING_POINT`&&!ef(t))return!1}return!0}function $d(e,t){let n=t?e.getOutgoingEdges():e.getIncomingEdges();for(let t of n){let n=t.getOtherNode(e);if(n!==null&&n.getType()===`LONG_EDGE`&&n.getLayer()!==e.getLayer())return n}return null}function ef(e){if(e.getType()===`LONG_EDGE`){for(let t of e.getConnectedEdges())if(!t.isSelfLoop()&&e.getLayer()===t.getOtherNode(e)?.getLayer())return!0}return!1}function tf(e,t){let n=e.get(t),r=t.getLayer().getNodes();for(let t=n+1;t<r.length;++t){let n=r[t];e.set(n,e.get(n)-1)}}function nf(e){let t=e.getProperty(s);for(let n of e.getLayers())for(let r of[...n.getNodes()])if(Ad.isEnd(r)){let n=r.getProperty(i);n.next===null&&rf(e,n,t)}}function rf(e,t,n){let r=[];switch(n){case`SPLINES`:{let e=t.nodeStartEdge.getProperty(g)??[],n=t.startEndEdge.getProperty(g)??[],r=t.originalEdge.getProperty(g)??[],i=t.nodeStartEdge.getProperty(Ve)??[],a=t.startEndEdge.getProperty(Ve)??[],o=t.originalEdge.getProperty(Ve)??[],s=[];s.push(...e);for(let e of n)e.inverseOrder=!0;s.push(...[...n].reverse()),s.push(...r);let c=[];c.push(...i),c.push(...[...a].reverse()),c.push(...o),t.originalEdge.setProperty(g,s),t.originalEdge.setProperty(Ve,c),t.originalEdge.setProperty(Te,t.originalEdge),t.nodeStartEdge.setProperty(g,null),t.nodeStartEdge.setProperty(Ve,null),t.startEndEdge.setProperty(g,null),t.startEndEdge.setProperty(Ve,null);break}case`POLYLINE`:r.push(...t.nodeStartEdge.getBendPoints()),r.push(wn(t.start.getPosition().x,t.start.getPosition().y)),r.push(...[...t.startEndEdge.getBendPoints()].reverse()),r.push(wn(t.end.getPosition().x,t.end.getPosition().y)),r.push(...t.originalEdge.getBendPoints());break;default:r.push(...t.nodeStartEdge.getBendPoints()),r.push(...[...t.startEndEdge.getBendPoints()].reverse()),r.push(...t.originalEdge.getBendPoints())}let i=t.originalEdge.getBendPoints();i.splice(0,i.length,...r),t.originalEdge.setSource(t.nodeStartEdge.getSource());let a=t.nodeStartEdge.getProperty(R),o=t.startEndEdge.getProperty(R),s=t.originalEdge.getProperty(R);if(a!==null||o!==null||s!==null){let e=[];af(e,s),af(e,o),af(e,a),t.originalEdge.setProperty(R,e)}t.startEndEdge.setSource(null),t.startEndEdge.setTarget(null),t.nodeStartEdge.setSource(null),t.nodeStartEdge.setTarget(null),t.end.setLayer(null),t.start.setLayer(null),t.prev!==null&&rf(e,t.prev,n)}function af(e,t){t!=null&&e.push(...t)}function of(e){for(let t of e.getLayers())for(let n of t.getNodes())for(let t of n.getPorts())for(let n of[...t.getOutgoingEdges()])n.getProperty(A)&&n.reverse(e,!1)}const sf={NORTH:0,EAST:1,SOUTH:2,WEST:3,UNDEFINED:4},cf=(e,t)=>sf[e.getSide()]-sf[t.getSide()],lf=(e,t)=>{let n=e.getNode().getProperty(O);if(sf[e.getSide()]-sf[t.getSide()]!==0||!D.isOrderFixed(n))return 0;if(n===`FIXED_ORDER`){let n=e.getProperty(Fe),r=t.getProperty(Fe);if(n!==null&&r!==null&&n-r!==0)return n-r}switch(e.getSide()){case`NORTH`:return e.getPosition().x-t.getPosition().x;case`EAST`:return e.getPosition().y-t.getPosition().y;case`SOUTH`:return t.getPosition().x-e.getPosition().x;case`WEST`:return t.getPosition().y-e.getPosition().y;default:return 0}},uf=(e,t)=>cf(e,t)||lf(e,t),df=(e,t)=>t(e).filter(e=>!e.getProperty(A)).length,ff=(e,t)=>{if(sf[e.getSide()]-sf[t.getSide()]!==0)return 0;switch(e.getSide()){case`EAST`:return df(t,e=>e.getOutgoingEdges())-df(e,e=>e.getOutgoingEdges());case`WEST`:return df(e,e=>e.getIncomingEdges())-df(t,e=>e.getIncomingEdges());default:return 0}};function pf(e,t,n){if(n-t<=2)return;let r=Math.floor((n-t)/2);for(let i=0;i<r;i++)[e[t+i],e[n-i-1]]=[e[n-i-1],e[t+i]]}function mf(e,t){if(e.length===0)return[0,0];let n=sf[t],r=n+1,i=0,a=sf[e[0].getSide()];for(;i<e.length-1&&a<n;)i++,a=sf[e[i].getSide()];let o=i;for(;o<e.length-1&&a<r;)o++,a=sf[e[i].getSide()];return[i,o]}function hf(e){if(e.length<=1)return;let[t,n]=mf(e,`SOUTH`);pf(e,t,n);let[r,i]=mf(e,`WEST`);pf(e,r,i)}function gf(e){let t=e.getProperty(Je);for(let n of e.getLayers())for(let e of n.getNodes()){let n=e.getProperty(O),r=e.getPorts();D.isOrderFixed(n)?r.sort(uf):D.isSideFixed(n)&&(r.sort(cf),hf(r),t===`PORT_DEGREE`&&r.sort(ff))}}function _f(e){let t=e.getPorts(),n=t.length,r=0,i=n,a=2*n,o=/* @__PURE__ */ new Map;for(let e of t)switch(e.getSide()){case`EAST`:case`WEST`:o.set(e,-1);break;case`NORTH`:case`SOUTH`:{let t=e.getIncomingEdges().length,n=e.getOutgoingEdges().length;t>0&&n>0?o.set(e,i++):t>0?o.set(e,r++):n>0?o.set(e,a++):o.set(e,r++);break}default:o.set(e,-1)}t.sort((e,t)=>{let n=e.getSide(),r=t.getSide();if(n!==r)return vf[n]-vf[r];let i=o.get(e),a=o.get(t);return i===a?0:n===`NORTH`?i-a:a-i})}const vf={UNDEFINED:0,NORTH:1,EAST:2,SOUTH:3,WEST:4};function yf(e,t,n,r){let i=new V(e);i.setType(`NORTH_SOUTH_PORT`),i.setProperty(O,`FIXED_POS`);let a=0;if(t!==null){let e=new H;e.setProperty(L,t),i.setProperty(L,t.getNode()),e.setSide(`WEST`),e.setNode(i);for(let n of[...t.getIncomingEdges()])n.setTarget(e);t.setProperty(M,i),t.setProperty(Pn,!1),a++}if(n!==null){let e=new H;i.setProperty(L,n.getNode()),e.setProperty(L,n),e.setSide(`EAST`),e.setNode(i);for(let t of[...n.getOutgoingEdges()])t.setSource(e);n.setProperty(M,i),n.setProperty(Pn,!0),a++}return i.setProperty(xe,a),r.push(i),i}function bf(e,t,n,r){let[i,a,o]=t.reduce((e,t)=>{let n=t.getIncomingEdges().length>0,r=t.getOutgoingEdges().length>0;return n&&r?e[2].push(t):n?e[0].push(t):r&&e[1].push(t),e},[[],[],[]]);for(let t of i)r.push(yf(e,t,null,n));for(let t of a)r.push(yf(e,null,t,n));for(let t of o)r.push(yf(e,t,t,n))}function xf(e){for(let t of e.getLayers()){let n=-1;for(let r of[...t.getNodes()]){if(n++,!(r.getType()===`NORMAL`&&D.isSideFixed(r.getProperty(O))))continue;!D.isOrderFixed(r.getProperty(O))&&e.getProperty(Ce)===`NONE`&&_f(r),r.setProperty(at,r);let i=[],a=[],o=[];bf(e,r.getPorts(`NORTH`),i,o);let s=n,c=r;for(let e of i)e.setLayerAt(s,t),n++,e.setProperty(at,r),e.getPorts()[0].getProperty(L)?.getProperty($t)||(e.hasProperty(k)||e.setProperty(k,[]),e.getProperty(k).push(c));bf(e,[...r.getPorts(`SOUTH`)].reverse(),a,o);let l=r;for(let e of a)e.setLayerAt(++n,t),e.setProperty(at,r),e.getPorts()[0].getProperty(L)?.getProperty($t)||(l.hasProperty(k)||l.setProperty(k,[]),l.getProperty(k).push(e));o.length>0&&r.setProperty(we,o)}}}const Sf={NORTH:0,EAST:1,SOUTH:2,WEST:3,UNDEFINED:4};function Cf(e){return Sf[e]}function wf(e){switch(e){case`NORTH`:return`EAST`;case`EAST`:return`SOUTH`;case`SOUTH`:return`WEST`;case`WEST`:return`NORTH`;default:return`UNDEFINED`}}function Tf(e){switch(e){case`NORTH`:return`WEST`;case`WEST`:return`SOUTH`;case`SOUTH`:return`EAST`;case`EAST`:return`NORTH`;default:return`UNDEFINED`}}var Ef=class{id=0;lLabels=[];size={x:0,y:0};position={x:0,y:0};layoutDirection;labelLabelSpacing;side=null;alignment=null;alignmentReferenceSLPort=null;constructor(e){let t=e.getSLHolder().getLNode();this.layoutDirection=t.getGraph().getProperty(S),this.labelLabelSpacing=t.getGraph().getProperty(dt)}addLLabels(e){for(let t of e)this.lLabels.push(t),this.updateSize(t)}getLLabels(){return this.lLabels}getSize(){return this.size}getPosition(){return this.position}getSide(){return this.side}setSide(e){this.side=e}getAlignment(){return this.alignment}setAlignment(e){this.alignment=e}getAlignmentReferenceSLPort(){return this.alignmentReferenceSLPort}setAlignmentReferenceSLPort(e){this.alignmentReferenceSLPort=e}updateSize(e){let t=e.size;this.layoutDirection===`LEFT`||this.layoutDirection===`RIGHT`?(this.size.x=Math.max(this.size.x,t.x),this.size.y+=t.y,this.lLabels.length>1&&(this.size.y+=this.labelLabelSpacing)):(this.size.x+=t.x,this.size.y=Math.max(this.size.y,t.y),this.lLabels.length>1&&(this.size.x+=this.labelLabelSpacing))}applyPlacement(e){this.layoutDirection===`LEFT`||this.layoutDirection===`RIGHT`?this.applyPlacementForHorizontalLayout(e):this.applyPlacementForVerticalLayout(e)}applyPlacementForHorizontalLayout(e){let t=this.position.x,n=this.position.y;for(let r of this.lLabels){let i=r.position;i.x=this.alignment===`LEFT`||this.side===`EAST`?t:this.alignment===`RIGHT`||this.side===`WEST`?t+this.size.x-r.size.x:t+(this.size.x-r.size.x)/2,i.y=n,i.x+=e.x,i.y+=e.y,n+=r.size.y+this.labelLabelSpacing}}applyPlacementForVerticalLayout(e){let t=this.position.x,n=this.position.y;for(let r of this.lLabels){let i=r.position;i.x=t,i.y=this.side===`NORTH`?n+this.size.y-r.size.y:n,i.x+=e.x,i.y+=e.y,t+=r.size.x+this.labelLabelSpacing}}};function Df(e){if(e.has(`UNDEFINED`))throw Error(`Port sides must not contain UNDEFINED`);switch(e.size){case 1:return`ONE_SIDE`;case 2:{let t=e.has(`EAST`)&&e.has(`WEST`),n=e.has(`NORTH`)&&e.has(`SOUTH`);return t||n?`TWO_SIDES_OPPOSING`:`TWO_SIDES_CORNER`}case 3:return`THREE_SIDES`;case 4:return`FOUR_SIDES`;default:return null}}var Of=class{slHolder;slPorts=[];slEdges=/* @__PURE__ */ new Set;slLabels=null;selfLoopType=null;slPortsBySide=null;leftmostPort=null;rightmostPort=null;occupiedPortSides=/* @__PURE__ */ new Set;routingSlot=[,,,,,].fill(0);constructor(e){this.slHolder=e}getSLHolder(){return this.slHolder}addSelfLoopEdge(e){if(this.slEdges.has(e))return;this.slEdges.add(e),e.setSLHyperLoop(this);let t=e.getSLSource();this.slPorts.includes(t)||this.slPorts.push(t);let n=e.getSLTarget();this.slPorts.includes(n)||this.slPorts.push(n);let r=e.getLEdge().getLabels();r.length>0&&(this.slLabels===null&&(this.slLabels=new Ef(this)),this.slLabels.addLLabels(r))}computePortsPerSide(){this.slPortsBySide=/* @__PURE__ */ new Map;for(let e of this.slPorts){let t=e.getLPort().getSide(),n=this.slPortsBySide.get(t)??[];n.push(e),this.slPortsBySide.set(t,n)}this.selfLoopType=Df(new Set(this.slPortsBySide.keys()))}getSLPorts(){return this.slPorts}getSLEdges(){return this.slEdges}getSLLabels(){return this.slLabels}getSelfLoopType(){return this.selfLoopType}getSLPortsBySideMap(){return this.slPortsBySide}getSLPortsBySide(e){return this.slPortsBySide.get(e)??[]}hasSLPortsOnSide(e){return this.slPortsBySide.has(e)}getLeftmostPort(){return this.leftmostPort}setLeftmostPort(e){this.leftmostPort=e}getRightmostPort(){return this.rightmostPort}setRightmostPort(e){this.rightmostPort=e}getOccupiedPortSides(){return this.occupiedPortSides}getRoutingSlot(e){return this.routingSlot[Cf(e)]}setRoutingSlot(e,t){this.routingSlot[Cf(e)]=t;let n=this.slHolder.getRoutingSlotCount(),r=Cf(e);n[r]=Math.max(n[r],t+1)}},kf=class{lEdge;slHyperLoop=null;slSource;slTarget;constructor(e,t,n){this.lEdge=e,this.slSource=t,this.slTarget=n,t.getOutgoingSLEdges().push(this),n.getIncomingSLEdges().push(this)}getLEdge(){return this.lEdge}getSLHyperLoop(){return this.slHyperLoop}setSLHyperLoop(e){this.slHyperLoop=e}getSLSource(){return this.slSource}getSLTarget(){return this.slTarget}getLabelSide(){return this.slHyperLoop.getSLLabels().getSide()}},Af=class{lPort;onlySelfLoops;incomingSLEdges=[];outgoingSLEdges=[];hidden=!1;constructor(e){this.lPort=e,this.onlySelfLoops=e.getConnectedEdges().length>0&&e.getConnectedEdges().every(e=>e.isSelfLoop())}getLPort(){return this.lPort}hadOnlySelfLoops(){return this.onlySelfLoops}isHidden(){return this.hidden}setHidden(e){this.hidden=e}getIncomingSLEdges(){return this.incomingSLEdges}getOutgoingSLEdges(){return this.outgoingSLEdges}getSLNetFlow(){return this.incomingSLEdges.length-this.outgoingSLEdges.length}},jf=class e{lNode;slHyperLoops=[];slPorts=/* @__PURE__ */ new Map;arePortsHidden=!1;routingSlotCount=[,,,,,].fill(0);constructor(e){this.lNode=e}static needsSelfLoopProcessing(e){return e.getType()===`NORMAL`&&e.getOutgoingEdges().some(e=>e.isSelfLoop())}static install(t){if(!e.needsSelfLoopProcessing(t))throw Error(`AssertionError: needsSelfLoopProcessing`);let n=new e(t);return t.setProperty(f,n),n.initialize(),n}getLNode(){return this.lNode}getSLHyperLoops(){return this.slHyperLoops}getSLPortMap(){return this.slPorts}arePortsHiddenFlag(){return this.arePortsHidden}setPortsHidden(e){this.arePortsHidden=e}getRoutingSlotCount(){return this.routingSlotCount}initialize(){let e=[];for(let t of this.lNode.getOutgoingEdges())t.isSelfLoop()&&e.push(new kf(t,this.selfLoopPortFor(t.getSource()),this.selfLoopPortFor(t.getTarget())));for(let e of this.slPorts.values())e.getLPort().id=0;for(let e of this.slPorts.values())e.getLPort().id===0&&this.slHyperLoops.push(this.initializeHyperLoop(e))}selfLoopPortFor(e){let t=this.slPorts.get(e);return t===void 0&&(t=new Af(e),this.slPorts.set(e,t)),t}initializeHyperLoop(e){let t=new Of(this),n=[e];for(;n.length>0;){let e=n.shift();e.getLPort().id=1;for(let r of e.getOutgoingSLEdges()){t.addSelfLoopEdge(r);let e=r.getSLTarget();e.getLPort().id===0&&n.push(e)}for(let r of e.getIncomingSLEdges()){t.addSelfLoopEdge(r);let e=r.getSLSource();e.getLPort().id===0&&n.push(e)}}return t}};function Mf(e){for(let t of e.getLayerlessNodes())if(jf.needsSelfLoopProcessing(t)){let e=jf.install(t);Nf(e),Ff(e)}}function Nf(e){for(let t of e.getSLHyperLoops())for(let e of t.getSLEdges())Pf(e.getLEdge())}function Pf(e){e.setSource(null),e.setTarget(null)}function Ff(e){let t=e.getLNode(),n=t.getNestedGraph(),r=D.isOrderFixed(t.getProperty(O)),i=n!==null&&n.getProperty(w).has(`EXTERNAL_PORTS`);if(!(r||i))for(let t of e.getSLPortMap().values())t.hadOnlySelfLoops()&&(t.getLPort().setNode(null),t.setHidden(!0),e.setPortsHidden(!0))}function If(e){let t=e.getProperty(wt)*2;for(let n of e.getLayers()){let{north:e,south:r}=Lf(n);Rf(e,!0,t),Rf(r,!1,t)}}function Lf(e){let t=[],n=[];for(let r of e.getNodes()){if(r.getType()!==`EXTERNAL_PORT`)continue;let e=r.getProperty(j);e===`NORTH`?t.push(r):e===`SOUTH`&&n.push(r)}return{north:t,south:n}}function Rf(e,t,n){let r=t?0:n*(e.length-1),i=t?n:-n;for(let t of e){t.setProperty(z,`CENTER`),t.size.x=r;for(let e of t.getPorts(`EAST`))e.getPosition().x=r;r+=i}}var zf=class{process(e){this.processEasternAndWesternPortDummies(e),this.processNorthernAndSouthernPortDummies(e)}processEasternAndWesternPortDummies(e){if(!D.isOrderFixed(e.getProperty(O)))return;let t=e.getLayers();t.length!==0&&(this.processEW(t[0]),this.processEW(t[t.length-1]))}processEW(e){let t=[...e.getNodes()];t.sort((e,t)=>{let n=e.getType(),r=t.getType(),i=e.getProperty(Kn),a=t.getProperty(Kn);return r===`EXTERNAL_PORT`?n===`EXTERNAL_PORT`?i===a?0:i<a?-1:1:1:-1});let n=null;for(let e of t){if(e.getType()!==`EXTERNAL_PORT`)break;let t=e.getProperty(j);if(t===`WEST`||t===`EAST`){if(n!==null){let t=n.getProperty(k);t??(t=[],n.setProperty(k,t)),t.push(e)}n=e}}}processNorthernAndSouthernPortDummies(e){if(!D.isSideFixed(e.getProperty(O)))return;let t=e.getLayers(),n=t.length,r=[/* @__PURE__ */ new Map,/* @__PURE__ */ new Map],i=[[],[]],a=[];for(let o=0;o<n;o++){let n=t[o],s=r[o],c=/* @__PURE__ */ new Map;r.push(c);let l=i[o],u=[];i.push(u);for(let t of n.getNodes())if(this.isNorthernOrSouthernDummy(t))a.push(t);else{for(let n of t.getIncomingEdges()){let t=n.getSource()?.getNode();if(t==null||!this.isNorthernOrSouthernDummy(t))continue;let r=t.getProperty(ie)??t,i=s.get(r)??null;i===null&&(i=this.createDummy(e,t),s.set(r,i),l.push(i)),n.setSource(i.getPorts()[1])}for(let n of t.getOutgoingEdges()){let t=n.getTarget()?.getNode();if(t==null||!this.isNorthernOrSouthernDummy(t))continue;let r=t.getProperty(ie)??t,i=c.get(r)??null;i===null&&(i=this.createDummy(e,t),c.set(r,i),u.push(i)),n.setTarget(i.getPorts()[0])}}}for(let n=0;n<i.length;n++){let a=i[n];if(a.length===0)continue;let o;n===0?(o=new W(e),t.unshift(o)):n===r.length-1?(o=new W(e),t.push(o)):o=t[n-1];for(let e of a)e.setLayer(o)}for(let e of a)e.setLayer(null);e.setProperty(qe,a)}isNorthernOrSouthernDummy(e){if(e.getType()!==`EXTERNAL_PORT`)return!1;let t=e.getProperty(j);return t===`NORTH`||t===`SOUTH`}createDummy(e,t){let n=new V(e);n.copyProperties(t),n.setInLayerConstraint(t.getInLayerConstraint()),n.setProperty(ie,t),n.setProperty(O,`FIXED_POS`),n.setProperty(z,`CENTER`),n.setType(`EXTERNAL_PORT`);let r=new H;r.setNode(n),r.setSide(`WEST`);let i=new H;return i.setNode(n),i.setSide(`EAST`),n}};function Bf(e){let t=e.getLayers();t.length>0&&Vf(t[0],e),t.length>1&&Vf(t[t.length-1],e)}function Vf(e,t){let n=t.getProperty(O);if(!(D.isRatioFixed(n)||D.isPosFixed(n)))return;let r=t.getActualSize().y;for(let i of e.getNodes()){if(i.getType()!==`EXTERNAL_PORT`)continue;let e=i.getProperty(j);if(e!==`EAST`&&e!==`WEST`)continue;let a=i.getProperty(Kn);n===`FIXED_RATIO`&&(a*=r),i.getPosition().y=a-(i.getProperty(te)?.y??0),i.position.y-=t.getPadding().top+t.getOffset().y}}function Hf(e){let t=Uf(e);Kf(e,t),$f(e,t),np(e),ep(e),rp(e)}function Uf(e){let t=e.getProperty(qe);if(t==null||t.length===0)return[];let n=[];for(let e of t)Wf(e),n.push(e);for(let t of e.getLayers())for(let e of t.getNodes()){if(e.getType()!==`EXTERNAL_PORT`)continue;let t=e.getProperty(ie);t!=null&&Gf(e,t)}let r=e.getLayers();for(let e of n)e.setLayer(r[r.length-1]);return n}function Wf(e){let t=e.getProperty(j),n=e.getPorts()[0];t===`NORTH`?n.setSide(`SOUTH`):t===`SOUTH`&&n.setSide(`NORTH`)}function Gf(e,t){let n=new H;n.setNode(e),n.setSide(e.getProperty(j));let r=t.getPorts()[0],i=new U;i.setSource(n),i.setTarget(r)}function Kf(e,t){let n=e.getProperty(O),r=e.getSize(),i=e.getPadding(),a=r.x+i.left+i.right,o=0-e.getOffset().y,s=r.y+i.top+i.bottom-e.getOffset().y,c=[],l=[];for(let e of t){switch(n){case`FREE`:case`FIXED_SIDE`:case`FIXED_ORDER`:qf(e);break;case`FIXED_RATIO`:Jf(e,a);break;case`FIXED_POS`:Yf(e),r.x=Math.max(r.x,e.getPosition().x+e.getSize().x/2)}switch(e.getProperty(j)){case`NORTH`:e.getPosition().y=o,c.push(e);break;case`SOUTH`:e.getPosition().y=s,l.push(e)}}n===`FREE`||n===`FIXED_SIDE`?(Xf(c,e),Xf(l,e)):n===`FIXED_ORDER`&&(Zf(c,e),Zf(l,e))}function qf(e){let t=e.getPorts()[0];if(t.getDegree()===0){e.getPosition().x=0;return}let n=0;for(let e of t.getConnectedPorts())n+=e.getNode().getPosition().x+e.getPosition().x+e.getAnchor().x;let r=e.getProperty(te),i=r==null?0:r.x;e.getPosition().x=n/t.getDegree()-i}function Jf(e,t){let n=e.getProperty(te),r=n==null?0:n.x;e.getPosition().x=t*e.getProperty(Kn)-r}function Yf(e){let t=e.getProperty(te),n=t==null?0:t.x;e.getPosition().x=e.getProperty(Kn)-n}function Xf(e,t){e.length!==0&&(e.sort((e,t)=>e.getPosition().x-t.getPosition().x),Qf(e,t))}function Zf(e,t){e.length!==0&&(e.sort((e,t)=>e.getProperty(Kn)-t.getProperty(Kn)),Qf(e,t))}function Qf(e,t){let n=t.getProperty(dn),r=e[0].getPosition().x+e[0].getSize().x+e[0].getMargin().right+n;for(let i=1;i<e.length;i++){let a=e[i].getPosition(),o=e[i].getSize(),s=e[i].getMargin(),c=a.x-s.left-r;c<0&&(a.x-=c);let l=t.getSize();l.x=Math.max(l.x,a.x+o.x),r=a.x+o.x+s.right+n}}function $f(e,t){let r=t.filter(e=>e.getProperty(j)===`NORTH`),i=t.filter(e=>e.getProperty(j)===`SOUTH`),a=e.getProperty(P),o=e.getProperty(Zt),s=e.getProperty(n),c=new yo(s),l=e=>{let t=/* @__PURE__ */ new Set;for(let n of e){let e=n.getPorts()[0];if(e!=null)for(let n of e.getIncomingEdges()){let e=n.getSource()?.getNode();e!=null&&t.add(e)}}return[...t]};if(r.length>0){let t=c.routeEdgesForDirection(l(r),r,a,ho.sourceSide,ho.targetSide,ho.positionFn,-o-e.getOffset().y);if(t>0){let n=o+(t-1)*s;e.getOffset().y+=n,e.getSize().y+=n}}if(i.length>0){let t=c.routeEdgesForDirection(l(i),i,a,go.sourceSide,go.targetSide,go.positionFn,e.getSize().y+o-e.getOffset().y);t>0&&(e.getSize().y+=o+(t-1)*s)}}function ep(e){let t=e.getLayers();t.length!==0&&(tp(t[0],e),tp(t[t.length-1],e))}function tp(e,t){let n=t.getProperty(O),r=t.getPadding(),i=t.getOffset(),a=t.getSize(),o=a.y+r.top+r.bottom,s=o;for(let t of e.getNodes()){if(t.getType()!==`EXTERNAL_PORT`)continue;let e=t.getProperty(j),o=t.getPosition(),c=t.getProperty(Xe);if(c==null){let e=t.getProperty(L);c=e instanceof H?e.getSize():{x:0,y:0}}switch(e){case`EAST`:o.x=a.x+r.right-i.x;break;case`WEST`:o.x=-i.x-r.left}let l=0;if(e===`EAST`||e===`WEST`){let e=t.getProperty(te),s=e==null?0:e.y;if(n===`FIXED_RATIO`){let e=t.getProperty(Kn)??0;o.y=a.y*e-s,l=o.y+c.y,o.y-=r.top+i.y}else n===`FIXED_POS`&&(o.y=(t.getProperty(Kn)??0)-s,l=o.y+c.y,o.y-=r.top+i.y)}s=Math.max(s,l)}a.y+=s-o;for(let t of e.getNodes()){if(t.getType()!==`EXTERNAL_PORT`)continue;let e=t.getProperty(j),n=t.getPosition();switch(e){case`NORTH`:n.y=-i.y;break;case`SOUTH`:n.y=a.y+r.top+r.bottom-i.y}}}function np(e){let t=[];for(let n of e.getLayers())for(let e of n.getNodes()){if(e.getType()!==`EXTERNAL_PORT`||!e.hasProperty(ie))continue;let n=null,r=null,i=null;for(let t of e.getPorts())switch(t.getSide()){case`WEST`:n=t;break;case`EAST`:r=t;break;default:i=t}if(n===null||r===null||i===null)continue;let a=i.getOutgoingEdges()[0];if(a===void 0)continue;let o=a.getBendPoints().map(e=>({...e})),s={x:i.getPosition().x+e.getPosition().x,y:i.getPosition().y+e.getPosition().y};o.unshift(s);let c=[...a.getBendPoints()].reverse().map(e=>({...e}));c.push({...s});let l=e.getProperty(ie).getPorts()[0];for(let e of[...n.getIncomingEdges()])e.setTarget(l),e.getBendPoints().push(...o.map(e=>({...e})));for(let e of[...r.getOutgoingEdges()])e.setSource(l),e.getBendPoints().unshift(...c.map(e=>({...e})));a.setSource(null),a.setTarget(null),t.push(e)}for(let n of t){n.setLayer(null);let t=e.getLayerlessNodes().indexOf(n);t!==-1&&e.getLayerlessNodes().splice(t,1)}}function rp(e){let t=e.getLayers();t.length!==0&&(ip(t[0]),ip(t[t.length-1]))}function ip(e){for(let t of e.getNodes()){if(t.getType()!==`EXTERNAL_PORT`)continue;let e=t.getProperty(j);if(e===`EAST`||e===`WEST`)for(let e of t.getPorts())for(let n of e.getConnectedEdges()){let e=n.getBendPoints();if(e.length===0)continue;let r=n.getSource();r!==null&&r.getNode()===t&&(e[0].y=r.getAbsoluteAnchor().y);let i=n.getTarget();i!==null&&i.getNode()===t&&(e[e.length-1].y=i.getAbsoluteAnchor().y)}}}function ap(e){for(let t of e.getLayers()){let e=-1,n=[];for(let[r,i]of[...t.getNodes()].entries()){let a=i.getInLayerConstraint();e===-1?a!==`TOP`&&(e=r):a===`TOP`&&(i.setLayer(null),i.setLayerAt(e++,t)),a===`BOTTOM`&&n.push(i)}for(let e of n)e.setLayer(null),e.setLayer(t)}}function op(e){for(let t of e.getLayers())for(let e of t.getNodes()){if(e.getType()!==`NORMAL`)continue;let t=e.getProperty(f);t!=null&&sp(e,t)}}function sp(e,t){for(let n of t.getSLHyperLoops())for(let t of n.getSLEdges())cp(e,t);for(let n of t.getSLHyperLoops())n.getSLLabels()!==null&&n.getSLLabels().applyPlacement(e.position)}function cp(e,t){let n=t.getLEdge();n.setSource(t.getSLSource().getLPort()),n.setTarget(t.getSLTarget().getLPort());for(let t of n.getBendPoints())t.x+=e.position.x,t.y+=e.position.y}var lp=class e{slLoopsByType=/* @__PURE__ */ new Map;targetAreas=/* @__PURE__ */ new Map;restorePorts(e){this.initTargetAreas(),this.slLoopsByType=this.gatherSelfLoopsByType(e);let t=e.getLNode().hasProperty(de)?e.getLNode().getProperty(de):e.getLNode().getGraph().getProperty(de);this.processOneSideLoops(t),this.processTwoSideCornerLoops(),this.processThreeSideLoops(),this.processFourSideLoops(),this.processTwoSideOpposingLoops(),this.restorePortList(e);for(let e of this.targetAreas.values())for(let t of e)t.setHidden(!1);e.setPortsHidden(!1),this.slLoopsByType=/* @__PURE__ */ new Map}initTargetAreas(){this.targetAreas=/* @__PURE__ */ new Map;for(let e of up)for(let t of[0,1,2])this.targetAreas.set(dp(e,t),[])}gatherSelfLoopsByType(e){let t=/* @__PURE__ */ new Map;for(let n of e.getSLHyperLoops()){let e=t.get(n.getSelfLoopType())??[];e.push(n),t.set(n.getSelfLoopType(),e)}return t}processOneSideLoops(e){let t=this.slLoopsByType.get(`ONE_SIDE`)??[];e===`REVERSE_STACKED`&&t.reverse();for(let n of t){let t=n.getSLPorts()[0].getLPort().getSide(),r=[...n.getSLPorts()];switch(r.sort((e,t)=>e.getSLNetFlow()-t.getSLNetFlow()),e){case`SEQUENCED`:this.addToTargetAreaPorts(r,t,1,1);break;case`REVERSE_STACKED`:case`STACKED`:{let e=this.computePortListSplitIndex(r);this.addToTargetAreaPorts(r.slice(0,e),t,1,0),this.addToTargetAreaPorts(r.slice(e),t,1,1);break}default:throw Error(`Unexpected ordering: ${e}`)}}}computePortListSplitIndex(e){let t=0;for(;t<e.length&&!(e[t].getSLNetFlow()>0);t++);if(t>0&&t<e.length-1)return t;let n=0;for(;n<e.length&&!(e[n].getSLNetFlow()>0);n++);return n>0&&t<e.length-1?n:Math.floor(e.length/2)}processTwoSideCornerLoops(){for(let t of this.slLoopsByType.get(`TWO_SIDES_CORNER`)??[]){let n=e.sortedTwoSideLoopPortSides(t);this.addToTargetArea(t,n[0],2,0),this.addToTargetArea(t,n[1],0,1)}}processTwoSideOpposingLoops(){for(let t of this.slLoopsByType.get(`TWO_SIDES_OPPOSING`)??[]){let n=e.sortedTwoSideLoopPortSides(t);this.addToTargetArea(t,n[0],2,0),this.addToTargetArea(t,n[1],0,1)}}static sortedTwoSideLoopPortSides(e){let t=[...e.getSLPortsBySideMap().keys()];return t.sort((e,t)=>fp(e)-fp(t)),t[0]===`NORTH`&&t[1]===`WEST`&&(t[0]=`WEST`,t[1]=`NORTH`),t}static NES=[`NORTH`,`EAST`,`SOUTH`];static ESW=[`EAST`,`SOUTH`,`WEST`];static SWN=[`SOUTH`,`WEST`,`NORTH`];static WNE=[`WEST`,`NORTH`,`EAST`];processThreeSideLoops(){for(let e of this.slLoopsByType.get(`THREE_SIDES`)??[]){let t=this.determineLoopConstellation(e);this.addToTargetArea(e,t[0],2,0),this.addToTargetArea(e,t[1],1,1),this.addToTargetArea(e,t[2],0,1)}}determineLoopConstellation(t){let n=t.getSLPortsBySideMap();if(!n.has(`NORTH`))return e.ESW;if(!n.has(`EAST`))return e.SWN;if(!n.has(`SOUTH`))return e.WNE;if(!n.has(`WEST`))return e.NES;throw Error(`Impossible`)}processFourSideLoops(){for(let e of this.slLoopsByType.get(`FOUR_SIDES`)??[])for(let t of e.getSLPortsBySideMap().keys())this.addToTargetArea(e,t,1,1)}addToTargetArea(e,t,n,r){this.addToTargetAreaPorts(e.getSLPortsBySide(t),t,n,r)}addToTargetAreaPorts(e,t,n,r){let i=e.filter(e=>e.isHidden());i.reverse();let a=this.targetAreas.get(dp(t,n));r===0?a.unshift(...i):a.push(...i)}restorePortList(e){let t=e.getLNode(),n=[...t.getPorts()],r=0,i=t.getPorts();i.length=0,this.addAll(this.targetAreas.get(dp(`NORTH`,0)),t),r=this.addAllThat(n,r,e=>e.getSide()===`NORTH`&&this.isNorthSouthPortWithWestOrWestEastConnections(e),i),this.addAll(this.targetAreas.get(dp(`NORTH`,1)),t),r=this.addAllThat(n,r,e=>e.getSide()===`NORTH`,i),this.addAll(this.targetAreas.get(dp(`NORTH`,2)),t),this.addAll(this.targetAreas.get(dp(`EAST`,0)),t),this.addAll(this.targetAreas.get(dp(`EAST`,1)),t),r=this.addAllThat(n,r,e=>e.getSide()===`EAST`,i),this.addAll(this.targetAreas.get(dp(`EAST`,2)),t),this.addAll(this.targetAreas.get(dp(`SOUTH`,0)),t),r=this.addAllThat(n,r,e=>e.getSide()===`SOUTH`&&this.isNorthSouthPortWithEastConnections(e),i),this.addAll(this.targetAreas.get(dp(`SOUTH`,1)),t),r=this.addAllThat(n,r,e=>e.getSide()===`SOUTH`,i),this.addAll(this.targetAreas.get(dp(`SOUTH`,2)),t),this.addAll(this.targetAreas.get(dp(`WEST`,0)),t),r=this.addAllThat(n,r,e=>e.getSide()===`WEST`,i),this.addAll(this.targetAreas.get(dp(`WEST`,1)),t),this.addAll(this.targetAreas.get(dp(`WEST`,2)),t)}addAll(e,t){for(let n of e)n.getLPort().setNode(t)}addAllThat(e,t,n,r){for(let i=t;i<e.length;i++){let t=e[i];if(n(t))r.push(t);else return i}return e.length}isNorthSouthPortWithWestOrWestEastConnections(e){return this.northSouthPortConnectionSides(e).has(`WEST`)}isNorthSouthPortWithEastConnections(e){return this.northSouthPortConnectionSides(e).has(`EAST`)}northSouthPortConnectionSides(e){let t=/* @__PURE__ */ new Set,n=e.getProperty(M);if(n!=null)for(let r of n.getPorts())r.getProperty(L)===e&&r.getConnectedEdges().length>0&&t.add(r.getSide());return t}};const up=[`NORTH`,`EAST`,`SOUTH`,`WEST`];function dp(e,t){return`${e}-${t}`}function fp(e){switch(e){case`NORTH`:return 0;case`EAST`:return 1;case`SOUTH`:return 2;case`WEST`:return 3;default:return 4}}const pp=[{name:`NORTH`,firstSide:`NORTH`,secondSide:`NORTH`},{name:`SOUTH`,firstSide:`SOUTH`,secondSide:`SOUTH`},{name:`EAST`,firstSide:`EAST`,secondSide:`EAST`},{name:`WEST`,firstSide:`WEST`,secondSide:`WEST`},{name:`NORTH_WEST_CORNER`,firstSide:`WEST`,secondSide:`NORTH`},{name:`NORTH_EAST_CORNER`,firstSide:`NORTH`,secondSide:`EAST`},{name:`SOUTH_WEST_CORNER`,firstSide:`SOUTH`,secondSide:`WEST`},{name:`SOUTH_EAST_CORNER`,firstSide:`EAST`,secondSide:`SOUTH`}],mp=e=>e.firstSide!==e.secondSide;var hp=class{assignPortSides(e){let t=e.getLNode().hasProperty(hn)?e.getLNode().getProperty(hn):e.getLNode().getGraph().getProperty(hn);switch(t){case`NORTH`:this.assignToNorthSide(e);break;case`NORTH_SOUTH`:this.assignToNorthOrSouthSide(e);break;case`EQUALLY`:this.assignToAllSides(e);break;default:throw Error(`Unexpected distribution: ${String(t)}`)}}assignToNorthSide(e){for(let t of e.getSLHyperLoops())for(let e of this.hiddenSelfLoopPortStream(t))e.getLPort().setSide(`NORTH`)}assignToNorthOrSouthSide(e){let t=0,n=0;for(let r of e.getSLHyperLoops()){let e=this.hiddenSelfLoopPortStream(r),i;t<=n?(i=`NORTH`,t+=e.length):(i=`SOUTH`,n+=e.length);for(let t of e)t.getLPort().setSide(i)}}assignToAllSides(e){let t=[...e.getSLHyperLoops()];t.sort((e,t)=>t.getSLPorts().length-e.getSLPorts().length);let n=0;for(let e of t){let t=pp[n%pp.length];this.assignToTarget(e,t),n++}}assignToTarget(e,t){let n=e.getSLPorts();mp(t)&&n.sort((e,t)=>e.getLPort().getNetFlow()-t.getLPort().getNetFlow());let r=Math.floor(n.length/2);for(let e=0;e<r;e++){let r=n[e];r.isHidden()&&r.getLPort().setSide(t.firstSide)}for(let e=r;e<n.length;e++){let r=n[e];r.isHidden()&&r.getLPort().setSide(t.secondSide)}}hiddenSelfLoopPortStream(e){return e.getSLPorts().filter(e=>e.isHidden())}},gp=class{portSideAssigner=new hp;portRestorer=new lp;process(e){for(let t of e.getLayers())for(let e of t.getNodes()){if(e.getType()!==`NORMAL`)continue;let t=e.getProperty(f);t!=null&&this.processNode(t)}}processNode(e){if(e.arePortsHiddenFlag())switch(e.getLNode().getProperty(tn)){case`UNDEFINED`:case`FREE`:this.portSideAssigner.assignPortSides(e);case`FIXED_SIDE`:this.computeSelfLoopTypes(e),this.portRestorer.restorePorts(e);break;default:throw Error(`Unexpected port constraints`)}else this.computeSelfLoopTypes(e)}computeSelfLoopTypes(e){for(let t of e.getSLHyperLoops())t.computePortsPerSide()}};function _p(e){vp(e);for(let t of e.getSLHyperLoops())t.getSLLabels()!==null&&wp(t)}function vp(e){let t=null,n=null,r=e.getLNode().hasProperty(de)?e.getLNode().getProperty(de):e.getLNode().getGraph().getProperty(de);r===`SEQUENCED`&&(t=[],n=[]);for(let i of e.getSLHyperLoops())if(i.getSLLabels()!==null)switch(i.getSelfLoopType()){case`ONE_SIDE`:{let e=i.getOccupiedPortSides().values().next().value;r===`SEQUENCED`&&e===`NORTH`?t.push(i):r===`SEQUENCED`&&e===`SOUTH`?n.push(i):yp(i,e);break}case`TWO_SIDES_CORNER`:xp(i);break;case`TWO_SIDES_OPPOSING`:case`THREE_SIDES`:Sp(i);break;case`FOUR_SIDES`:Cp(i);break;default:throw Error(`Unexpected self loop type`)}t!==null&&(t.length>0&&bp(t,`NORTH`),n.length>0&&bp(n,`SOUTH`))}function yp(e,t){switch(t){case`EAST`:case`WEST`:{let n=e.getLeftmostPort();e.getRightmostPort().getLPort().getPosition().y<n.getLPort().getPosition().y&&(n=e.getRightmostPort()),Z(e,t,`TOP`,n);break}case`NORTH`:case`SOUTH`:Z(e,t,`CENTER`,null);break;default:throw Error(`Impossible`)}}function bp(e,t){let n=0;for(let t of e[0].getSLHolder().getLNode().getPorts())t.id=n++;t===`NORTH`?e.sort((e,t)=>e.getLeftmostPort().getLPort().id-t.getLeftmostPort().getLPort().id):e.sort((e,t)=>t.getLeftmostPort().getLPort().id-e.getLeftmostPort().getLPort().id);let r=0,i=e.length-1;for(;r<i;){let n=e[r],a=e[i],o=t===`NORTH`?n.getRightmostPort():n.getLeftmostPort(),s=t===`NORTH`?a.getLeftmostPort():a.getRightmostPort();Z(n,t,`RIGHT`,o),Z(a,t,`LEFT`,s),r++,i--}r===i&&Z(e[r],t,`CENTER`,null)}function xp(e){let t=e.getLeftmostPort().getLPort().getSide(),n=e.getRightmostPort().getLPort().getSide();if(t===`NORTH`)Z(e,`NORTH`,`LEFT`,e.getLeftmostPort());else if(n===`NORTH`)Z(e,`NORTH`,`RIGHT`,e.getRightmostPort());else if(t===`SOUTH`)Z(e,`SOUTH`,`RIGHT`,e.getLeftmostPort());else if(n===`SOUTH`)Z(e,`SOUTH`,`LEFT`,e.getRightmostPort());else throw Error(`Impossible`)}function Sp(e){let t=e.getOccupiedPortSides();if(!t.has(`NORTH`))Z(e,`SOUTH`,`CENTER`,null);else if(!t.has(`SOUTH`))Z(e,`NORTH`,`CENTER`,null);else if(!t.has(`WEST`))Z(e,`NORTH`,`LEFT`,e.getLeftmostPort());else if(!t.has(`EAST`))Z(e,`NORTH`,`RIGHT`,e.getRightmostPort());else throw Error(`Impossible`)}function Cp(e){let t=e.getLeftmostPort().getLPort().getSide(),n=e.getLeftmostPort().getLPort().getSide();t===`NORTH`||n===`NORTH`?Z(e,`SOUTH`,`CENTER`,null):Z(e,`NORTH`,`CENTER`,null)}function Z(e,t,n,r){let i=e.getSLLabels();i.setSide(t),i.setAlignment(n),i.setAlignmentReferenceSLPort(r)}function wp(e){let t=e.getSLLabels(),n=t.getAlignmentReferenceSLPort(),r=t.getSize(),i=t.getPosition();switch(t.getAlignment()){case`CENTER`:i.x=(e.getSLHolder().getLNode().size.x-r.x)/2;break;case`LEFT`:i.x=n.getLPort().getPosition().x+n.getLPort().getAnchor().x;break;case`RIGHT`:i.x=n.getLPort().getPosition().x+n.getLPort().getAnchor().x-r.x;break;case`TOP`:i.y=n.getLPort().getPosition().y+n.getLPort().getAnchor().y;break;default:throw Error(`Impossible`)}}var Tp=class{routeSelfLoops(e){let t=e.getLNode(),r=t.size,i=t.getMargin(),a=t.getGraph().getProperty(n),o=t.getGraph().getProperty(Tn),s=t.getGraph().getProperty(xt),c={...i},l=this.computeRoutingSlotPositions(e,a,o,s);for(let t of e.getSLHyperLoops()){for(let e of t.getSLEdges()){let t=e.getLEdge(),n=this.computeEdgeRoutingDirection(e),i=this.computeOrthogonalBendPoints(e,n,l),a=this.modifyBendPoints(e,n,i);t.getBendPoints().length=0;for(let e of a)t.getBendPoints().push(e);for(let e of a)this.updateNewNodeMargins(r,c,e)}let e=t.getSLLabels();e!==null&&(this.placeLabels(t,e,l,o),this.updateNewNodeMarginsForLabels(r,c,e))}i.left=c.left,i.top=c.top,i.right=c.right,i.bottom=c.bottom}computeEdgeRoutingDirection(e){let t=e.getSLSource().getLPort(),n=t.getSide(),r=e.getSLTarget().getLPort(),i=r.getSide();return n===i?t.id<r.id?0:1:wf(n)===i?0:Tf(n)===i?1:+!e.getSLHyperLoop().getOccupiedPortSides().has(wf(n))}placeLabels(e,t,n,r){let i=t.getSide(),a=n[Cf(i)][e.getRoutingSlot(i)];switch(i){case`NORTH`:a-=r+t.getSize().y,t.getPosition().y=a;break;case`SOUTH`:a+=r,t.getPosition().y=a;break;case`WEST`:a-=r+t.getSize().x,t.getPosition().x=a;break;case`EAST`:a+=r,t.getPosition().x=a}}updateNewNodeMargins(e,t,n){t.left=Math.max(t.left,-n.x),t.right=Math.max(t.right,n.x-e.x),t.top=Math.max(t.top,-n.y),t.bottom=Math.max(t.bottom,n.y-e.y)}updateNewNodeMarginsForLabels(e,t,n){let r={...n.getPosition()};this.updateNewNodeMargins(e,t,r),r.x+=n.getSize().x,r.y+=n.getSize().y,this.updateNewNodeMargins(e,t,r)}computeRoutingSlotPositions(e,t,n,r){let i=[];for(let t of[`NORTH`,`EAST`,`SOUTH`,`WEST`])i[Cf(t)]=Array(e.getRoutingSlotCount()[Cf(t)]).fill(0);return this.initializeWithMaxLabelHeight(i,e,`NORTH`),this.initializeWithMaxLabelHeight(i,e,`SOUTH`),this.computePositions(i,e,`NORTH`,t,n,r),this.computePositions(i,e,`EAST`,t,n,r),this.computePositions(i,e,`SOUTH`,t,n,r),this.computePositions(i,e,`WEST`,t,n,r),i}initializeWithMaxLabelHeight(e,t,n){let r=e[Cf(n)];for(let e of t.getSLHyperLoops()){let t=e.getSLLabels();if(t!==null&&t.getSide()===n){let i=e.getRoutingSlot(n);r[i]=Math.max(r[i],t.getSize().y)}}}computePositions(e,t,n,r,i,a){let o=this.computeBaselinePosition(t,n,a),s=n===`NORTH`||n===`WEST`?-1:1,c=e[Cf(n)];for(let e=0;e<c.length;e++){let t=c[e];t>0&&(t+=i),c[e]=o,o+=s*(t+r)}}computeBaselinePosition(e,t,n){let r=e.getLNode(),i=r.getMargin();switch(t){case`NORTH`:return-i.top-n;case`EAST`:return r.size.x+i.right+n;case`SOUTH`:return r.size.y+i.bottom+n;case`WEST`:return-i.left-n;default:throw Error(`Impossible`)}}computeOrthogonalBendPoints(e,t,n){let r=[];return this.addOuterBendPoint(e,e.getSLSource(),n,r),this.addCornerBendPoints(e,t,n,r),this.addOuterBendPoint(e,e.getSLTarget(),n,r),r}modifyBendPoints(e,t,n){return n}addOuterBendPoint(e,t,n,r){let i=e.getSLHyperLoop(),a=t.getLPort(),o=a.getSide(),s=this.getBaseVector(o,i.getRoutingSlot(o),n),c={x:a.getPosition().x+a.getAnchor().x,y:a.getPosition().y+a.getAnchor().y};switch(a.getSide()){case`NORTH`:s.x+=c.x;break;case`SOUTH`:s.x+=c.x;break;case`EAST`:s.y+=c.y;break;case`WEST`:s.y+=c.y}r.push(s)}addCornerBendPoints(e,t,n,r){let i=e.getSLSource().getLPort(),a=e.getSLTarget().getLPort();if(i.getSide()===a.getSide())return;let o=e.getSLHyperLoop(),s=i.getSide();for(;s!==a.getSide();){let e=t===0?wf(s):Tf(s),i=this.getBaseVector(s,o.getRoutingSlot(s),n),a=this.getBaseVector(e,o.getRoutingSlot(e),n);r.push({x:i.x+a.x,y:i.y+a.y}),s=e}}getBaseVector(e,t,n){let r=n[Cf(e)][t];switch(e){case`NORTH`:case`SOUTH`:return{x:0,y:r};case`EAST`:case`WEST`:return{x:r,y:0};default:throw Error(`Impossible`)}}};const Ep=.01;function Dp(e){return{x:e.x>=-.01&&e.x<=Ep?0:e.x,y:e.y>=-.01&&e.y<=Ep?0:e.y}}var Op=class extends Tp{modifyBendPoints(e,t,n){let r=e.getSLSource().getLPort();n.unshift({x:r.getPosition().x+r.getAnchor().x,y:r.getPosition().y+r.getAnchor().y});let i=e.getSLTarget().getLPort();return n.push({x:i.getPosition().x+i.getAnchor().x,y:i.getPosition().y+i.getAnchor().y}),this.cutCorners(n,10)}cutCorners(e,t){if(e.length<=2)throw Error(`AssertionError: bendPoints.size() > 2`);let n=[],r=null,i=e[0],a=e[1];for(let o=2;o<e.length;o++){r=i,i=a,a=e[o];let s=Dp({x:r.x-i.x,y:r.y-i.y}),c=Dp({x:a.x-i.x,y:a.y-i.y}),l=t;l=Math.min(l,Math.abs(s.x+s.y)/2),l=Math.min(l,Math.abs(c.x+c.y)/2),s.x=Math.sign(s.x)*l,s.y=Math.sign(s.y)*l,c.x=Math.sign(c.x)*l,c.y=Math.sign(c.y)*l,n.push({x:s.x+i.x,y:s.y+i.y}),n.push({x:c.x+i.x,y:c.y+i.y})}return n}};const kp=[`WEST`,`NORTH`,`SOUTH`,`EAST`],Ap=(e,t)=>e.getLPort().id-t.getLPort().id;var jp=class{portPenalties=null;determineLoopRoutes(e){this.assignPortIds(e.getLNode().getPorts()),this.sortHyperLoopPortLists(e);for(let t of e.getSLHyperLoops()){switch(t.getSelfLoopType()){case`ONE_SIDE`:this.determineOneSideLoopRoutes(t);break;case`TWO_SIDES_CORNER`:this.determineTwoSideCornerLoopRoutes(t);break;case`TWO_SIDES_OPPOSING`:this.determineTwoSideOpposingLoopRoutes(t);break;case`THREE_SIDES`:this.determineThreeSideLoopRoutes(t);break;case`FOUR_SIDES`:this.determineFourSideLoopRoutes(t);break;default:throw Error(`Unexpected self loop type`)}this.computeOccupiedPortSides(t)}this.portPenalties=null}assignPortIds(e){for(let t=0;t<e.length;t++)e[t].id=t}sortHyperLoopPortLists(e){for(let t of e.getSLHyperLoops())t.getSLPorts().sort(Ap)}computeOccupiedPortSides(e){let t=e.getLeftmostPort().getLPort().getSide(),n=e.getRightmostPort().getLPort().getSide();for(;t!==n;)e.getOccupiedPortSides().add(t),t=wf(t);e.getOccupiedPortSides().add(t)}determineOneSideLoopRoutes(e){let t=e.getSLPorts()[0].getLPort().getSide();this.assignLeftmostRightmostPorts(e,t,t)}determineTwoSideCornerLoopRoutes(e){let t=lp.sortedTwoSideLoopPortSides(e);this.assignLeftmostRightmostPorts(e,t[0],t[1])}determineTwoSideOpposingLoopRoutes(e){let t=[...e.getSLPortsBySideMap().keys()].sort((e,t)=>kp.indexOf(e)-kp.indexOf(t)),n=e.getSLHolder(),r=this.lowestPortOnSide(e,t[0]),i=this.highestPortOnSide(e,t[1]),a=this.computeEdgePenalty(n,r,i),o=this.lowestPortOnSide(e,t[1]),s=this.highestPortOnSide(e,t[0]);a<=this.computeEdgePenalty(n,o,s)?(e.setLeftmostPort(r),e.setRightmostPort(i)):(e.setLeftmostPort(o),e.setRightmostPort(s))}determineThreeSideLoopRoutes(e){let t,n;switch(this.computeMissingPortSide(e)){case`NORTH`:t=`EAST`,n=`WEST`;break;case`EAST`:t=`SOUTH`,n=`NORTH`;break;case`SOUTH`:t=`WEST`,n=`EAST`;break;default:t=`NORTH`,n=`SOUTH`}this.assignLeftmostRightmostPorts(e,t,n)}computeMissingPortSide(e){let t=e.getSLPortsBySideMap();for(let e of[`NORTH`,`EAST`,`SOUTH`,`WEST`])if(!t.has(e))return e;throw Error(`Cannot happen`)}determineFourSideLoopRoutes(e){let t=e.getSLPorts(),n=e.getSLHolder(),r=t[t.length-1],i=t[0],a=this.computeEdgePenalty(n,r,i);for(let e=1;e<t.length;e++){let o=t[e-1],s=t[e],c=this.computeEdgePenalty(n,o,s);c>a&&(r=o,i=s,a=c)}e.setLeftmostPort(i),e.setRightmostPort(r)}assignLeftmostRightmostPorts(e,t,n){e.setLeftmostPort(this.lowestPortOnSide(e,t)),e.setRightmostPort(this.highestPortOnSide(e,n))}lowestPortOnSide(e,t){let n=e.getSLPortsBySide(t),r=n[0];for(let e of n)Ap(e,r)<0&&(r=e);return r}highestPortOnSide(e,t){let n=e.getSLPortsBySide(t),r=n[0];for(let e of n)Ap(e,r)>0&&(r=e);return r}computeEdgePenalty(e,t,n){this.portPenalties===null&&this.computePenalties(e);let r=e.getLNode().getPorts().length,i=t.getLPort().id,a=n.getLPort().id-1;a<0&&(a=r-1);let o=this.portPenalties;return i<=a?o[a]-o[i]:o[r-1]-o[i]+o[a]}computePenalties(e){let t=e.getLNode().getPorts();this.portPenalties=Array(t.length);let n=0;for(let e=0;e<t.length;e++){let r=t[e];r.getIncomingEdges().length===0&&r.getOutgoingEdges().length===0?n+=1:n+=3,this.portPenalties[e]=n}}};const Mp=1e-6;var Np=class{list;cursor=0;lastReturned=-1;constructor(e){this.list=e}next(){if(this.cursor>=this.list.length)throw Error(`NoSuchElementException`);this.lastReturned=this.cursor;let e=this.list[this.cursor];return this.cursor++,e}hasNext(){return this.cursor<this.list.length}previous(){if(this.cursor<=0)throw Error(`NoSuchElementException`);return this.cursor--,this.lastReturned=this.cursor,this.list[this.cursor]}add(e){this.list.splice(this.cursor,0,e),this.cursor++,this.lastReturned=-1}remove(){if(this.lastReturned<0)throw Error(`IllegalStateException`);this.list.splice(this.lastReturned,1),this.cursor>this.lastReturned&&this.cursor--,this.lastReturned=-1}},Pp=class e{cp;polarCoordinate;constructor(t,n,r){if(t instanceof e&&n instanceof e&&r!==void 0){let e=t.polarCoordinate[0],i=n.polarCoordinate[n.polarCoordinate.length-1],a={x:t.cp.x*(i-r),y:t.cp.y*(i-r)},o={x:n.cp.x*(r-e),y:n.cp.y*(r-e)};this.cp={x:(a.x+o.x)/(i-e),y:(a.y+o.y)/(i-e)},this.polarCoordinate=[];let s=!0;for(let e=1;e<t.polarCoordinate.length;e++){let n=t.polarCoordinate[e];s&&n-r>Mp&&(this.polarCoordinate.push(r),s=!1),this.polarCoordinate.push(n)}s&&this.polarCoordinate.push(r)}else this.cp={x:t.x,y:t.y},this.polarCoordinate=[...n]}getCp(){return this.cp}},Fp=class{knotVector=[];controlPoints=[];dim;isClamped;isBezier=!1;minKnot=0;maxKnot=0;constructor(e,t,n){if(t<1)throw Error(`The dimension must be at least 1!`);for(;n.length<=t;)n.unshift({...n[0]});if(n.length<t+1)throw Error(`At (least dimension + 1) control points are necessary!`);this.dim=t,this.isClamped=e,this.isBezier=!1,this.createUniformKnotVector(e,n.length+t-1);let r=[],i=new Np(this.knotVector);for(let e=0;e<t-1;e++)r.push(i.next());for(let e of n)r.push(i.next()),this.controlPoints.push(new Pp(e,r)),r.shift()}createUniformKnotVector(e,t){if(t<2*this.dim)throw Error(`The knot vector must have at least two time the dimension elements.`);let n;if(e){this.minKnot=0,this.maxKnot=1;for(let e=0;e<this.dim;e++)this.knotVector.push(0);n=t+1-2*this.dim}else{n=t+1;let e=this.dim;this.minKnot=e/(n+1),this.maxKnot=(n-e)/n}let r=n;for(let e=1;e<n;e++)this.knotVector.push(e/r);if(this.isClamped)for(let e=0;e<this.dim;e++)this.knotVector.push(1)}getMultiplicity(e){let t=0;for(let n of this.knotVector){let r=n-e;if(r>Mp)return t;r>-1e-6&&t++}return t}insertKnotAtCurrentPosition(e,t,n,r){let i=this.getMultiplicity(t);for(let a=0;a<e;a++){r.add(t);let o=[],s=n.next();for(let e=i+a;e<this.dim;e++){let e=s;s=n.next(),o.push(new Pp(e,s,t))}for(let e=i+a;e<this.dim;e++)n.previous(),e>i+a&&n.remove();for(let e of o)n.add(e);if(a<e-1)for(let e=i+a;e<this.dim;e++)n.previous()}}toBezier(){let e=new Np(this.knotVector),t=new Np(this.controlPoints);if(this.isClamped)for(let t=0;t<this.dim;t++)e.next();else for(let t=0;t<this.dim-1;t++)e.next(),e.remove();let n=e.next();for(;this.maxKnot-n>Mp;){let r=n,i=0;for(;Math.abs(n-r)<Mp;)i++,n=e.next(),t.next();i<this.dim&&(e.previous(),this.insertKnotAtCurrentPosition(this.dim-i,r,t,e),e.next()),t.previous()}if(!this.isClamped)for(let t=0;t<this.dim-1;t++)e.next(),e.remove();this.isClamped=!0,this.isBezier=!0}getBezierCP(e=!1,t=!1){this.isBezier||this.toBezier();let n=[],r=this.controlPoints[Symbol.iterator]();e||r.next();let i=r.next();for(;!i.done;)n.push(i.value.getCp()),i=r.next();return t||n.pop(),n}};function Ip(e){switch(e){case`NORTH`:return Math.PI*1.5;case`EAST`:return 0;case`SOUTH`:return Math.PI*.5;case`WEST`:return Math.PI;default:return 0}}function Lp(e){return{x:Math.cos(e),y:Math.sin(e)}}var Rp=class extends Tp{modifyBendPoints(e,t,n){let r=e.getSLHyperLoop().getSLHolder().getLNode().getGraph().getProperty(Tn),i=[this.relativePortAnchor(e.getSLSource())];return this.addSplineControlPoints(e,t,n,i,r),i.push(this.relativePortAnchor(e.getSLTarget())),new Fp(!0,3,i).getBezierCP()}relativePortAnchor(e){let t=e.getLPort();return{x:t.getPosition().x+t.getAnchor().x,y:t.getPosition().y+t.getAnchor().y}}addSplineControlPoints(e,t,n,r,i){if(n.length<2)throw Error(`AssertionError: orthoBendPoints.size() >= 2`);let a=e.getSLSource().getLPort().getSide(),o=n[0];for(let e=1;e<n.length;e++){let s=n[e];r.push(o);let c={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5},l=Lp(Ip(a));c.x+=l.x*i,c.y+=l.y*i,r.push(c),o=s,a=t===0?wf(a):Tf(a)}r.push(n[n.length-1])}},zp=class{hyperEdgeSegments=[];slLoopToSegmentMap=/* @__PURE__ */ new Map;slLoopActivityOverPorts=/* @__PURE__ */ new Map;assignRoutingSlots(e){let t=this.computeLabelCrossingMatrix(e);this.createCrossingGraph(e,t);let n=e.getLNode().getGraph().getProperty(P);Vp(this.hyperEdgeSegments,n),this.doAssignRoutingSlots(e,t),this.hyperEdgeSegments=[],this.slLoopToSegmentMap=/* @__PURE__ */ new Map,this.slLoopActivityOverPorts=/* @__PURE__ */ new Map}computeLabelCrossingMatrix(e){let t=0;for(let n of e.getSLHyperLoops())n.getSLLabels()!==null&&(n.getSLLabels().id=t++);let n=Array.from({length:t},()=>Array(t).fill(!1)),r=e.getSLHyperLoops();for(let e=0;e<r.length;e++){let t=r[e];if(t.getSLLabels()!==null)for(let i=e+1;i<r.length;i++){let e=r[i];if(e.getSLLabels()!==null){let r=Bp(t,e);n[t.getSLLabels().id][e.getSLLabels().id]=r,n[e.getSLLabels().id][t.getSLLabels().id]=r}}}return n}createCrossingGraph(e,t){let n=e.getSLHyperLoops();this.hyperEdgeSegments=Array(n.length),this.slLoopToSegmentMap=/* @__PURE__ */ new Map;for(let e=0;e<n.length;e++){let t=new Ja;this.hyperEdgeSegments[e]=t,this.slLoopToSegmentMap.set(n[e],t)}this.slLoopActivityOverPorts=/* @__PURE__ */ new Map,this.computeLoopActivity(e);for(let e=0;e<n.length-1;e++){let r=n[e];for(let i=e+1;i<n.length;i++)this.createDependencies(r,n[i],t)}}computeLoopActivity(e){let t=e.getSLHyperLoops(),n=e.getLNode().getPorts();for(let e of t){let t=Array(n.length).fill(!1);this.slLoopActivityOverPorts.set(e,t);let r=e.getLeftmostPort().getLPort().id-1,i=e.getRightmostPort().getLPort().id;for(;r!==i;)r=(r+1)%n.length,t[r]=!0}}createDependencies(e,t,n){let r=this.countCrossings(e,t),i=this.countCrossings(t,e),a=this.slLoopToSegmentMap.get(e),o=this.slLoopToSegmentMap.get(t);r<i?K.createAndAddRegular(a,o,i-r):i<r?K.createAndAddRegular(o,a,r-i):(r!==0||this.labelsOverlapWithMatrix(e,t,n))&&(K.createAndAddRegular(a,o,0),K.createAndAddRegular(o,a,0))}countCrossings(e,t){let n=this.slLoopActivityOverPorts.get(t),r=0;for(let t of e.getSLPorts())n[t.getLPort().id]&&r++;return r}labelsOverlapWithMatrix(e,t,n){return e.getSLLabels()===null||t.getSLLabels()===null?!1:n[e.getSLLabels().id][t.getSLLabels().id]}doAssignRoutingSlots(e,t){this.assignRawRoutingSlotsToSegments(),this.assignRawRoutingSlotsToLoops(e),this.shiftTowardsNode(e,t)}assignRawRoutingSlotsToSegments(){let e=[];for(let t of this.hyperEdgeSegments)t.setInWeight(t.getIncomingSegmentDependencies().length),t.setOutWeight(t.getOutgoingSegmentDependencies().length),t.getOutWeight()===0&&(t.setRoutingSlot(0),e.push(t));for(;e.length>0;){let t=e.shift(),n=t.getRoutingSlot()+1;for(let r of t.getIncomingSegmentDependencies()){let t=r.getSource();t.setRoutingSlot(Math.max(t.getRoutingSlot(),n)),t.setOutWeight(t.getOutWeight()-1),t.getOutWeight()===0&&e.push(t)}}}assignRawRoutingSlotsToLoops(e){for(let t of e.getSLHyperLoops()){let e=this.slLoopToSegmentMap.get(t);for(let n of t.getOccupiedPortSides())t.setRoutingSlot(n,e.getRoutingSlot())}}shiftTowardsNode(e,t){let n=Array(e.getLNode().getPorts().length).fill(0);this.shiftTowardsNodeOnSide(e,`NORTH`,n,t),this.shiftTowardsNodeOnSide(e,`EAST`,n,t),this.shiftTowardsNodeOnSide(e,`SOUTH`,n,t),this.shiftTowardsNodeOnSide(e,`WEST`,n,t)}shiftTowardsNodeOnSide(e,t,n,r){let i=e.getSLHyperLoops().filter(e=>e.getOccupiedPortSides().has(t)).sort((e,n)=>e.getRoutingSlot(t)-n.getRoutingSlot(t)),a=e.getLNode(),o=2**53-1,s=-(2**53-1);for(let e of a.getPorts())e.getSide()===t&&(o=Math.min(o,e.id),s=Math.max(s,e.id));if(o===2**53-1)for(let e=0;e<i.length;e++)i[e].setRoutingSlot(t,e);else{let e=Array(r.length).fill(-1);for(let a of i){let i=this.slLoopActivityOverPorts.get(a),c=0;for(let e=o;e<=s;e++)i[e]&&(c=Math.max(c,n[e]));if(a.getSLLabels()!==null){let t=a.getSLLabels().id,n=/* @__PURE__ */ new Set;for(let i=0;i<r.length;i++)r[t][i]&&n.add(e[i]);for(;n.has(c);)c++}a.setRoutingSlot(t,c);for(let e=o;e<=s;e++)i[e]&&(n[e]=c+1);a.getSLLabels()!==null&&(e[a.getSLLabels().id]=c)}}}};function Bp(e,t){let n=e.getSLLabels(),r=t.getSLLabels();if(n===null||r===null||n.getSide()!==r.getSide()||n.getSide()===`EAST`||n.getSide()===`WEST`)return!1;let i=n.getPosition().x,a=i+n.getSize().x,o=r.getPosition().x;return i<=o+r.getSize().x&&a>=o}function Vp(e,t){let n=Ha.detectCycles(e,!1,t);for(let e of n)e.getWeight()===0?e.remove():e.reverse()}function Hp(e){switch(e.getProperty(s)){case`POLYLINE`:return new Op;case`SPLINES`:return new Rp;default:return new Tp}}function Up(e){let t=new jp,n=new zp,r=Hp(e);for(let i of e.getLayers())for(let e of i.getNodes()){if(e.getType()!==`NORMAL`)continue;let i=e.getProperty(f);i!=null&&Wp(i,r,t,n)}}function Wp(e,t,n,r){n.determineLoopRoutes(e),_p(e),r.assignRoutingSlots(e),t.routeSelfLoops(e)}function Gp(e){for(let t of e.getLayers()){let n=[];for(let r of t.getNodes())for(let t of r.getPorts()){let r=[...t.getOutgoingEdges()];for(let t of r){if(t.getSource().getNode()!==t.getTarget().getNode())continue;let r=t.getSource(),i=t.getTarget(),a=r.getSide(),o=i.getSide();((a===`NORTH`||a===`SOUTH`)&&o===`WEST`||a===`SOUTH`&&o===`NORTH`||a===`EAST`&&o!==`EAST`)&&t.reverse(e,!1);let s=t.getSource().getSide(),c=t.getTarget().getSide();s===`EAST`&&c===`WEST`?n.push(Kp(e,t,t.getTarget(),t.getSource())):s===`WEST`&&c===`EAST`&&n.push(Kp(e,t,t.getSource(),t.getTarget()))}}for(let e of n)e.setLayer(t)}}function Kp(e,t,n,r){let i=new V(e);i.setType(`LONG_EDGE`),i.setProperty(L,t),i.setProperty(O,`FIXED_POS`),i.setProperty(B,n),i.setProperty(I,r);let a=new H;a.setSide(`WEST`),a.setNode(i);let o=new H;o.setSide(`EAST`),o.setNode(i),t.setTarget(a);let s=new U;return s.copyProperties(t),s.setProperty(R,null),s.setSource(o),s.setTarget(r),i}function qp(e,t,n){for(let r of e){let e=r.getProperty(L),i=e.getAbsoluteAnchor().x,a=r.getNode().getPosition().y,o=t?[...r.getIncomingEdges()]:[...r.getOutgoingEdges()];for(let r of o)if(t?(r.setTarget(e),r.getBendPoints().push({x:i,y:a})):(r.setSource(e),r.getBendPoints().unshift({x:i,y:a})),n){let e=r.getProperty(R);e??(e=[],r.setProperty(R,e)),e.push({x:i,y:a})}}}function Jp(e){let t=e.getProperty(L),n=e.getPorts(`WEST`)[0],r=e.getPorts(`EAST`)[0],i=n.getProperty(L),a=r.getProperty(L);t.setSource(a),t.setTarget(i);let o={...r.getNode().getPosition()};o.x=a.getAbsoluteAnchor().x,t.getBendPoints().push(o);let s={...n.getNode().getPosition()};s.x=i.getAbsoluteAnchor().x,t.getBendPoints().push(s)}function Yp(e){let t=e.getProperty(s);for(let n of e.getLayers())for(let e of[...n.getNodes()])if(e.getType()===`NORTH_SOUTH_PORT`){if(t===`SPLINES`)for(let t of e.getPorts()){let n=t.getProperty(L);if(n.setProperty(b,e.getPosition().y),t.getIncomingEdges().length>0)for(let e of[...t.getIncomingEdges()])e.setTarget(n);if(t.getOutgoingEdges().length>0)for(let e of[...t.getOutgoingEdges()])e.setSource(n)}else if(e.getProperty(L)instanceof U)Jp(e);else{let t=e.getPorts(),n=t.length>=2;for(let e=1;e<t.length;e++)if(t[e].getProperty(L)!==t[e-1].getProperty(L)){n=!1;break}t.length<2&&(n=!1);for(let e of t)e.getIncomingEdges().length>0&&qp([e],!0,n),e.getOutgoingEdges().length>0&&qp([e],!1,n)}e.setLayer(null)}}function Xp(e,t,n,r,i){if((i?n.getSource().getNode():n.getTarget().getNode())===t.getNode())return;let a=new V(e);a.setType(`LONG_EDGE`),a.setProperty(L,n),a.setProperty(O,`FIXED_POS`),r.push(a);let o=new H;o.setNode(a),o.setSide(`WEST`);let s=new H;if(s.setNode(a),s.setSide(`EAST`),i){n.setTarget(o);let e=new U;e.copyProperties(n),e.setProperty(R,null),e.setSource(s),e.setTarget(t),Qp(a,o,s,t),Zp(n,e)}else{let e=n.getTarget();n.setTarget(o);let r=new U;r.copyProperties(n),r.setProperty(R,null),r.setSource(s),r.setTarget(e),Qp(a,o,s,t),Zp(n,r)}}function Zp(e,t){let n=e.getLabels();for(let e=n.length-1;e>=0;e--)if(n[e].placement===`HEAD`){let[r]=n.splice(e,1);t.getLabels().push(r)}}function Qp(e,t,n,r){let i=t.getIncomingEdges()[0].getSource(),a=i.getNode();e.setProperty(B,a.getType()===`LONG_EDGE`?a.getProperty(B):i);let o=n.getOutgoingEdges()[0].getTarget(),s=o.getNode();e.setProperty(I,s.getType()===`LONG_EDGE`?s.getProperty(I):o)}function $p(e){let t=e.getLayers(),n=[],r=0;for(let i of t){if(r>0){for(let e of n)e.setLayer(t[r-1]);n.length=0}for(let t of i.getNodes())if(t.getType()===`NORMAL`&&D.isSideFixed(t.getProperty(O))){for(let r of t.getPorts(`INPUT`).filter(e=>e.getSide()===`EAST`))for(let t of[...r.getIncomingEdges()])Xp(e,r,t,n,!0);for(let r of t.getPorts(`OUTPUT`).filter(e=>e.getSide()===`WEST`))for(let t of[...r.getOutgoingEdges()])Xp(e,r,t,n,!1)}r++}for(let e of n)e.setLayer(t[t.length-1])}function em(e){return e.getLayerlessNodes().some(e=>e.getProperty(At))}function tm(e){for(let t of[...e.getLayerlessNodes()]){if(!t.getProperty(At))continue;let n=0,r=null,i=null;for(let e of t.getPorts())n+=e.getDegree(),e.getIncomingEdges().length===1&&(r=e.getIncomingEdges()[0],i=r.getSource()),e.getOutgoingEdges().length===1&&(r=e.getOutgoingEdges()[0],i=r.getTarget());if(n===1&&i!==null&&i.getDegree()===1&&!i.getNode().getProperty(At)){nm(t,r,i,i.getNode());let n=e.getLayerlessNodes().indexOf(t);n!==-1&&e.getLayerlessNodes().splice(n,1)}else{let n=[];for(let e of t.getPorts()){for(let t of e.getOutgoingEdges())t.getTarget().getNode().getOutgoingEdges().length>0&&n.push(t);for(let t of e.getIncomingEdges())t.getSource().getNode().getIncomingEdges().length>0&&n.push(t)}for(let t of n)t.reverse(e,!0)}}}function nm(e,t,n,r){let i=!1,a=!1,o=!1,s=r.getProperty(`org.eclipse.elk.portConstraints`);if(s!=null&&String(s).includes(`FIXED`)){let e=!1,t=!1;for(let n of r.getPorts())for(let r of n.getConnectedPorts())if(!r.getNode().getProperty(At)){if(n.getSide()===`NORTH`){e=!0;break}if(n.getSide()===`SOUTH`){t=!0;break}}a=t&&!e,o=e&&!t}if(!a&&!o&&r.getLabels().length>0){let e=0;for(let t of r.getLabels())e+=t.position.y+t.size.y/2;e/=r.getLabels().length,i=e>=r.size.y/2}else i=!o;let c=null;if(i){let e=r.getProperty(Wt);if(e==null)c=[],r.setProperty(Wt,c);else if(a)c=e;else{let t=r.getProperty(qt);t==null?(c=[],r.setProperty(qt,c)):c=e.length<=t.length?e:t}}else{let e=r.getProperty(qt);if(e==null)c=[],r.setProperty(qt,c);else if(o)c=e;else{let t=r.getProperty(Wt);t==null?(c=[],r.setProperty(Wt,c)):c=e.length<=t.length?e:t}}c.push(e),e.setProperty(ve,n),t.getTarget()===n?(t.setTarget(null),n.getDegree()===0&&n.setNode(null),rm(n)):(t.setSource(null),n.getDegree()===0&&n.setNode(null)),t.getBendPoints().length=0}function rm(e){let t=e.getProperty(M);if(t!=null){let e=t.getLayer();if(e!==null){let n=e.getNodes(),r=n.indexOf(t);if(r!==-1&&n.splice(r,1),n.length===0){let n=t.getGraph().getLayers(),r=n.indexOf(e);r!==-1&&n.splice(r,1)}}}}function im(e){for(let t of e.getLayers())for(let e of t.getNodes())om(e)}function am(e){om(e)}function om(e){let t=e.getMargin(),n=e.getProperty(Wt),r=e.getProperty(qt);if(n==null&&r==null)return;let i=e.getGraph()?.getProperty(et)??10,a=e.getGraph()?.getProperty(ot)??10,o=0;if(n!=null){let e=0;for(let t of n)e=Math.max(e,t.size.y),o+=t.size.x;o+=i*(n.length-1),t.top+=e+a}let s=0;if(r!=null){let e=0;for(let t of r)e=Math.max(e,t.size.y),s+=t.size.x;s+=i*(r.length-1),t.bottom+=e+a}let c=Math.max(o,s);if(c>e.size.x){let n=(c-e.size.x)/2;t.left=Math.max(t.left,n),t.right=Math.max(t.right,n)}}function sm(e){for(let t of e.getLayers()){let e=[];for(let n of t.getNodes()){let t=n.getProperty(Wt),r=n.getProperty(qt);(t!=null||r!=null)&&(cm(n,t??null,r??null),t!=null&&e.push(...t),r!=null&&e.push(...r))}for(let n of e)t.getNodes().includes(n)||t.getNodes().push(n)}}function cm(e,t,n){let r=e.position,i=e.size,a=e.getMargin(),o=e.getGraph()?.getProperty(et)??10;if(t!=null){let n=o*(t.length-1),s=0;for(let e of t)n+=e.size.x,s=Math.max(s,e.size.y);let c=r.x-(n-i.x)/2,l=r.y-a.top+s,u=i.x/(t.length+1),d=u;for(let n of t){n.position.x=c,n.position.y=l-n.size.y,c+=n.size.x+o;let t=lm(n);t!==null&&(t.getPosition().x=n.size.x/2-t.getAnchor().x,t.getPosition().y=n.size.y);let r=n.getProperty(ve);r!=null&&r.getDegree()===1&&(r.getPosition().x=d-r.getAnchor().x,r.getPosition().y=0,r.setNode(e)),d+=u}}if(n!=null){let t=o*(n.length-1),s=0;for(let e of n)t+=e.size.x,s=Math.max(s,e.size.y);let c=r.x-(t-i.x)/2,l=r.y+i.y+a.bottom-s,u=i.x/(n.length+1),d=u;for(let t of n){t.position.x=c,t.position.y=l,c+=t.size.x+o;let n=lm(t);n!==null&&(n.getPosition().x=t.size.x/2-n.getAnchor().x,n.getPosition().y=0);let r=t.getProperty(ve);r!=null&&r.getDegree()===1&&(r.getPosition().x=d-r.getAnchor().x,r.getPosition().y=i.y,r.setNode(e)),d+=u}}}function lm(e){let t=e.getProperty(ve);for(let n of e.getPorts()){for(let e of n.getOutgoingEdges())return t!=null&&e.setTarget(t),n;for(let e of n.getIncomingEdges())return t!=null&&e.setSource(t),n}return null}function Q(e){let t=e.x;e.x=e.y,e.y=t}function um(e,t){e.x=t-e.x}function dm(e,t){e.y=t-e.y}function fm(e){let t=e.top,n=e.bottom,r=e.left,i=e.right;e.top=r,e.bottom=i,e.left=t,e.right=n}function pm(e){let t=e.left;e.left=e.right,e.right=t}function mm(e){let t=e.top;e.top=e.bottom,e.bottom=t}function hm(e){return e===`EAST`?`WEST`:e===`WEST`?`EAST`:e}function gm(e){return e===`NORTH`?`SOUTH`:e===`SOUTH`?`NORTH`:e}function _m(e){switch(e){case`NORTH`:return`WEST`;case`WEST`:return`NORTH`;case`SOUTH`:return`EAST`;case`EAST`:return`SOUTH`;default:return`UNDEFINED`}}function vm(e){let t=e.getProperty(Fe);t!=null&&e.setProperty(Fe,-t)}function ym(e){switch(e.getLayerConstraint()){case`FIRST`:e.setLayerConstraint(`LAST`);break;case`FIRST_SEPARATE`:e.setLayerConstraint(`LAST_SEPARATE`);break;case`LAST`:e.setLayerConstraint(`FIRST`);break;case`LAST_SEPARATE`:e.setLayerConstraint(`FIRST_SEPARATE`)}}function bm(e){switch(e.getInLayerConstraint()){case`TOP`:e.setInLayerConstraint(`BOTTOM`);break;case`BOTTOM`:e.setInLayerConstraint(`TOP`)}}function xm(e){let t=e.getLayerConstraint(),n=e.getInLayerConstraint();t===`FIRST_SEPARATE`?(e.setLayerConstraint(`NONE`),e.setInLayerConstraint(`TOP`)):t===`LAST_SEPARATE`?(e.setLayerConstraint(`NONE`),e.setInLayerConstraint(`BOTTOM`)):n===`TOP`?(e.setLayerConstraint(`FIRST_SEPARATE`),e.setInLayerConstraint(`NONE`)):n===`BOTTOM`&&(e.setLayerConstraint(`LAST_SEPARATE`),e.setInLayerConstraint(`NONE`))}function Sm(e){return Array.isArray(e)?[...e]:String(e??``).replace(/[\[\]]/g,``).split(/[\s,]+/).filter(Boolean)}function Cm(e){let t=[...e],n=t.indexOf(`H_LEFT`),r=t.indexOf(`H_RIGHT`);return n>=0?t[n]=`H_RIGHT`:r>=0&&(t[r]=`H_LEFT`),t}function wm(e){let t=[...e],n=t.indexOf(`V_TOP`),r=t.indexOf(`V_BOTTOM`);return n>=0?t[n]=`V_BOTTOM`:r>=0&&(t[r]=`V_TOP`),t}function Tm(e){if(e.length===0)return e;let t=[];return e.includes(`INSIDE`)?t.push(`INSIDE`):t.push(`OUTSIDE`),e.includes(`H_PRIORITY`)||t.push(`H_PRIORITY`),e.includes(`H_LEFT`)?t.push(`V_TOP`):e.includes(`H_CENTER`)?t.push(`V_CENTER`):e.includes(`H_RIGHT`)&&t.push(`V_BOTTOM`),e.includes(`V_TOP`)?t.push(`H_LEFT`):e.includes(`V_CENTER`)?t.push(`H_CENTER`):e.includes(`V_BOTTOM`)&&t.push(`H_RIGHT`),t}function Em(e){return e.join(`, `)}var Dm=class{mode;constructor(e){this.mode=e}process(e){let t=[...e.getLayerlessNodes()];for(let n of e.getLayers())t.push(...n.getNodes());let n=e.getProperty(S),r=e.getProperty(oe)===`READING_DIRECTION`,i=this.mode===`TO_INPUT_DIRECTION`;if(r)switch(n){case`LEFT`:this.mirrorAllX(e,t);break;case`DOWN`:this.transposeAll(e,t);break;case`UP`:i?(this.mirrorAllY(e,t),this.transposeAll(e,t)):(this.transposeAll(e,t),this.mirrorAllY(e,t))}else if(i)switch(n){case`LEFT`:this.mirrorAllX(e,t),this.mirrorAllY(e,t);break;case`DOWN`:this.mirrorAllX(e,t),this.transposeAll(e,t);break;case`UP`:this.transposeAll(e,t),this.mirrorAllX(e,t)}else switch(n){case`LEFT`:this.mirrorAllX(e,t),this.mirrorAllY(e,t);break;case`DOWN`:this.transposeAll(e,t),this.mirrorAllX(e,t);break;case`UP`:this.mirrorAllX(e,t),this.transposeAll(e,t)}}mirrorAllX(e,t){e.hasProperty(Nt)&&pm(e.getProperty(Nt));let n=0;if(e.getSize().x===0)for(let e of t)n=Math.max(n,e.position.x+e.size.x+e.getMargin().right);else n=e.getSize().x-e.getOffset().x;n-=e.getOffset().x;for(let e of t){um(e.position,n-e.size.x),pm(e.getPadding()),this.mirrorLabelPlacementX(e),this.mirrorPositionX(e,n),this.mirrorAlignmentX(e);let t=e.size;for(let r of e.getPorts()){um(r.getPosition(),t.x-r.getSize().x),um(r.getAnchor(),r.getSize().x),r.setSideInferred(hm(r.getSide())),vm(r);for(let e of r.getOutgoingEdges()){for(let t of e.getBendPoints())um(t,n);let t=e.getProperty(R);if(t!=null)for(let e of t)um(e,n);for(let t of e.getLabels())um(t.position,n-t.size.x)}for(let e of r.getLabels())um(e.position,r.getSize().x-e.size.x)}e.getType()===`EXTERNAL_PORT`&&(e.setProperty(j,hm(e.getProperty(j))),ym(e));for(let n of e.getLabels())this.mirrorLabelPlacementXOn(n),um(n.position,t.x-n.size.x)}}mirrorAllY(e,t){e.hasProperty(Nt)&&mm(e.getProperty(Nt));let n=0;if(e.getSize().y===0)for(let e of t)n=Math.max(n,e.position.y+e.size.y+e.getMargin().bottom);else n=e.getSize().y-e.getOffset().y;n-=e.getOffset().y;for(let e of t){dm(e.position,n-e.size.y),mm(e.getPadding()),this.mirrorLabelPlacementY(e),this.mirrorPositionY(e,n),this.mirrorAlignmentY(e);let t=e.size;for(let r of e.getPorts()){dm(r.getPosition(),t.y-r.getSize().y),dm(r.getAnchor(),r.getSize().y),r.setSideInferred(gm(r.getSide())),vm(r);for(let e of r.getOutgoingEdges()){for(let t of e.getBendPoints())dm(t,n);let t=e.getProperty(R);if(t!=null)for(let e of t)dm(e,n);for(let t of e.getLabels())dm(t.position,n-t.size.y)}for(let e of r.getLabels())dm(e.position,r.getSize().y-e.size.y)}e.getType()===`EXTERNAL_PORT`&&(e.setProperty(j,gm(e.getProperty(j))),bm(e));for(let n of e.getLabels())this.mirrorLabelPlacementYOn(n),dm(n.position,t.y-n.size.y)}}transposeAll(e,t){Q(e.getOffset()),Q(e.getSize()),fm(e.getPadding()),e.hasProperty(Nt)&&fm(e.getProperty(Nt));for(let e of t){Q(e.position),Q(e.size),fm(e.getPadding()),this.transposeLabelPlacement(e),this.transposeProperties(e);for(let t of e.getPorts()){Q(t.getPosition()),Q(t.getAnchor()),Q(t.getSize()),t.setSideInferred(_m(t.getSide())),vm(t);for(let e of t.getOutgoingEdges()){for(let t of e.getBendPoints())Q(t);let t=e.getProperty(R);if(t!=null)for(let e of t)Q(e);for(let t of e.getLabels())Q(t.position),Q(t.size)}for(let e of t.getLabels())Q(e.position),Q(e.size)}e.getType()===`EXTERNAL_PORT`&&(e.setProperty(j,_m(e.getProperty(j))),xm(e));for(let t of e.getLabels())this.transposeLabelPlacementOn(t),Q(t.size),Q(t.position)}}mirrorLabelPlacementX(e){if(!e.hasProperty(N))return;let t=Sm(e.getProperty(N));t.length!==0&&e.setProperty(N,Cm(t))}mirrorLabelPlacementY(e){if(!e.hasProperty(N))return;let t=Sm(e.getProperty(N));t.length!==0&&e.setProperty(N,wm(t))}transposeLabelPlacement(e){if(!e.hasProperty(N))return;let t=Sm(e.getProperty(N));e.setProperty(N,Tm(t))}mirrorLabelPlacementXOn(e){if(e.placement===void 0||e.placement===``)return;let t=Sm(e.placement);t.length!==0&&(e.placement=Em(Cm(t)))}mirrorLabelPlacementYOn(e){if(e.placement===void 0||e.placement===``)return;let t=Sm(e.placement);t.length!==0&&(e.placement=Em(wm(t)))}transposeLabelPlacementOn(e){if(e.placement===void 0||e.placement===``)return;let t=Sm(e.placement);t.length!==0&&(e.placement=Em(Tm(t)))}mirrorPositionX(e,t){if(!e.hasProperty(ae))return;let n=e.getProperty(ae);n&&um(n,t-e.size.x)}mirrorPositionY(e,t){if(!e.hasProperty(ae))return;let n=e.getProperty(ae);n&&dm(n,t-e.size.y)}mirrorAlignmentX(e){switch(e.getProperty(z)){case`LEFT`:e.setProperty(z,`RIGHT`);break;case`RIGHT`:e.setProperty(z,`LEFT`)}}mirrorAlignmentY(e){switch(e.getProperty(z)){case`TOP`:e.setProperty(z,`BOTTOM`);break;case`BOTTOM`:e.setProperty(z,`TOP`)}}transposeProperties(e){let t=e.getProperty(x);e.setProperty(x,{x:t.y,y:t.x});let n=e.getProperty(`org.eclipse.elk.contentAlignment`)??[];if(n.length>0){let t=n.map(e=>e===`H_CENTER`?`V_CENTER`:e===`V_CENTER`?`H_CENTER`:e===`H_LEFT`?`V_TOP`:e===`H_RIGHT`?`V_BOTTOM`:e===`V_TOP`?`H_LEFT`:e===`V_BOTTOM`?`H_RIGHT`:e);e.setProperty(`org.eclipse.elk.contentAlignment`,t)}switch(e.getProperty(z)){case`LEFT`:e.setProperty(z,`TOP`);break;case`RIGHT`:e.setProperty(z,`BOTTOM`);break;case`TOP`:e.setProperty(z,`LEFT`);break;case`BOTTOM`:e.setProperty(z,`RIGHT`)}if(e.hasProperty(ae)){let t=e.getProperty(ae);if(t){let e=t.x;t.x=t.y,t.y=e}}}transposeEdgeLabelPlacement(e){switch(e.getProperty(Jn)){case`ALWAYS_UP`:e.setProperty(Jn,`ALWAYS_DOWN`);break;case`ALWAYS_DOWN`:e.setProperty(Jn,`ALWAYS_UP`);break;case`DIRECTION_UP`:e.setProperty(Jn,`DIRECTION_DOWN`);break;case`DIRECTION_DOWN`:e.setProperty(Jn,`DIRECTION_UP`);break;case`SMART_UP`:e.setProperty(Jn,`SMART_DOWN`);break;case`SMART_DOWN`:e.setProperty(Jn,`SMART_UP`)}}},Om=class{horizontalLayoutMode;gap;horizontalAlignment=`CENTER`;verticalAlignment=`CENTER`;entries=[];minimumContentAreaSize={x:0,y:0};cellRectangle={x:0,y:0,width:0,height:0};constructor(e,t){this.gap=e,this.horizontalLayoutMode=t}getHorizontalAlignment(){return this.horizontalAlignment}setHorizontalAlignment(e){return this.horizontalAlignment=e,this}getVerticalAlignment(){return this.verticalAlignment}setVerticalAlignment(e){return this.verticalAlignment=e,this}getEntries(){return this.entries}hasLabels(){return this.entries.length>0}addLabel(e,t){this.entries.push({label:e,edge:t});let n=e.size;this.horizontalLayoutMode?(this.minimumContentAreaSize.x=Math.max(this.minimumContentAreaSize.x,n.x),this.minimumContentAreaSize.y+=n.y,this.entries.length>1&&(this.minimumContentAreaSize.y+=this.gap)):(this.minimumContentAreaSize.x+=n.x,this.minimumContentAreaSize.y=Math.max(this.minimumContentAreaSize.y,n.y),this.entries.length>1&&(this.minimumContentAreaSize.x+=this.gap))}getMinimumWidth(){return this.minimumContentAreaSize.x}getMinimumHeight(){return this.minimumContentAreaSize.y}applyLabelLayout(){this.horizontalLayoutMode?this.applyHorizontalModeLabelLayout():this.applyVerticalModeLabelLayout()}applyHorizontalModeLabelLayout(){let e=this.cellRectangle,t=e.y;this.verticalAlignment===`CENTER`?t+=(e.height-this.minimumContentAreaSize.y)/2:this.verticalAlignment===`BOTTOM`&&(t+=e.height-this.minimumContentAreaSize.y);for(let n of this.entries){let r=n.label.size;switch(n.label.position.y=t,t+=r.y+this.gap,this.horizontalAlignment){case`LEFT`:n.label.position.x=e.x;break;case`CENTER`:n.label.position.x=e.x+(e.width-r.x)/2;break;case`RIGHT`:n.label.position.x=e.x+e.width-r.x}}}applyVerticalModeLabelLayout(){let e=this.cellRectangle,t=e.x;this.horizontalAlignment===`CENTER`?t+=(e.width-this.minimumContentAreaSize.x)/2:this.horizontalAlignment===`RIGHT`&&(t+=e.width-this.minimumContentAreaSize.x);for(let n of this.entries){let r=n.label.size;switch(n.label.position.x=t,t+=r.x+this.gap,this.verticalAlignment){case`TOP`:n.label.position.y=e.y;break;case`CENTER`:n.label.position.y=e.y+(e.height-r.y)/2;break;case`BOTTOM`:n.label.position.y=e.y+e.height-r.y}}}},km=class e{static DEFAULT_GAP=5;overlapRemovalDirection;gapVertical=e.DEFAULT_GAP;gapHorizontal=e.DEFAULT_GAP;startCoordinate=0;rectangleNodes=[];constructor(e){this.overlapRemovalDirection=e}static createForDirection(t){return new e(t)}withGap(e,t){return this.gapHorizontal=e,this.gapVertical=t,this}withStartCoordinate(e){return this.startCoordinate=e,this}getVerticalGap(){return this.gapVertical}getRectangleNodes(){return this.rectangleNodes}addRectangle(e){return this.rectangleNodes.push({originalRectangle:e,rectangle:this.importRectangle(e),overlappingNodes:[]}),this}importRectangle(e){switch(this.overlapRemovalDirection){case`UP`:case`DOWN`:return e;case`LEFT`:case`RIGHT`:return{x:e.y,y:0,width:e.height,height:e.width};default:throw Error(`unsupported direction`)}}exportRectangle(e){let t=e.rectangle,n=e.originalRectangle;switch(this.overlapRemovalDirection){case`UP`:n.y=this.startCoordinate-t.height-t.y;break;case`DOWN`:n.y+=this.startCoordinate;break;case`LEFT`:n.x=this.startCoordinate-t.height-t.y;break;case`RIGHT`:n.x=this.startCoordinate+t.y}}removeOverlaps(){this.rectangleNodes.sort((e,t)=>e.rectangle.x-t.rectangle.x),this.computeOverlaps();let e=this.greedyRemoveOverlaps();for(let e of this.rectangleNodes)this.exportRectangle(e);return e}computeOverlaps(){let e=[];for(let t of this.rectangleNodes){let n=t.rectangle.x;for(;e.length>0;){let t=e[0];if(t.rectangle.x+t.rectangle.width<n)e.shift();else break}for(let n of e)n.overlappingNodes.push(t),t.overlappingNodes.push(n);let r=t.rectangle.x+t.rectangle.width,i=e.findIndex(e=>e.rectangle.x+e.rectangle.width>r);i===-1&&(i=e.length),e.splice(i,0,t)}}greedyRemoveOverlaps(){let e=this.gapVertical,t=/* @__PURE__ */ new Set,n=0;for(let r of this.rectangleNodes){let i=0;r.overlappingNodes.sort((e,t)=>e.rectangle.y-t.rectangle.y);for(let n of r.overlappingNodes)if(t.has(n)){let t=r.rectangle,a=n.rectangle;i<a.y+a.height+e&&i+t.height+e>a.y&&(i=a.y+a.height+e)}r.rectangle.y=i,t.add(r),n=Math.max(n,r.rectangle.y+r.rectangle.height)}return n}};function Am(e){let t=e.getProperty(Tn),n=e.getProperty(dt),r=e.getProperty(S),i=r===`DOWN`||r===`UP`;for(let r of e.getLayers())for(let e of r.getNodes())jm(e,t,n,i)}function jm(e,t,n,r){let i=e.getPorts().length,a=Array(i);for(let t=0;t<i;t++){let i=e.getPorts()[t];i.id=t,a[t]=Mm(Nm(i),n,r)}Fm(e,a,n,t,r);let o=/* @__PURE__ */ new Map;for(let t=0;t<a.length;t++){let n=a[t];n!==null&&o.set(e.getPorts()[t],n)}o.size>0&&(e.setProperty(Ne,o),zm(e,a))}function Mm(e,t,n){if(e===null||e.length===0)return null;let r=new Om(t,!n);for(let t of e)r.addLabel(t.label,t.edge);return r.cellRectangle.height=r.getMinimumHeight(),r.cellRectangle.width=r.getMinimumWidth(),r}function Nm(e){let t=[],n=Pm(e,t),r=e.getProperty(M);if(r!=null)for(let i of r.getPorts())i.getProperty(L)===e&&(n=Math.max(n,Pm(i,t)));return t.length>0&&e.setProperty(ln,n),n===-1?null:t}function Pm(e,t){let n=-1,r=[];for(let i of e.getConnectedEdges()){if(n=Math.max(n,i.getProperty(Ye)),i.getSource()===e)for(let e of i.getLabels())e.placement===`TAIL`&&r.push({label:e,edge:i});else for(let e of i.getLabels())e.placement===`HEAD`&&r.push({label:e,edge:i});t.push(...r),r.length=0}return n}function Fm(e,t,n,r,i){for(let n of e.getPorts()){let e=t[n.id];e!==null&&Im(n,e,r)}i?(Lm(e,t,`EAST`,2*n,r),Lm(e,t,`WEST`,2*n,r)):(Lm(e,t,`NORTH`,2*n,r),Lm(e,t,`SOUTH`,2*n,r))}function Im(e,t,n){let r=t.cellRectangle,i=e.getNode().getSize(),a=e.getNode().getMargin(),o=e.getPosition(),s={x:o.x+e.getAnchor().x,y:o.y+e.getAnchor().y};switch(e.getSide()){case`NORTH`:t.setVerticalAlignment(`BOTTOM`),r.y=-a.top-n-r.height,Vm(t)===`ABOVE`?(t.setHorizontalAlignment(`RIGHT`),r.x=s.x-Um(e)-n-r.width):(t.setHorizontalAlignment(`LEFT`),r.x=s.x+Um(e)+n);break;case`EAST`:t.setHorizontalAlignment(`LEFT`),r.x=i.x+a.right+n,Vm(t)===`ABOVE`?(t.setVerticalAlignment(`BOTTOM`),r.y=s.y-Um(e)-n-r.height):(t.setVerticalAlignment(`TOP`),r.y=s.y+Um(e)+n);break;case`SOUTH`:t.setVerticalAlignment(`TOP`),r.y=i.y+a.bottom+n,Vm(t)===`ABOVE`?(t.setHorizontalAlignment(`RIGHT`),r.x=s.x-Um(e)-n-r.width):(t.setHorizontalAlignment(`LEFT`),r.x=s.x+Um(e)+n);break;case`WEST`:t.setHorizontalAlignment(`RIGHT`),r.x=-a.left-n-r.width,Vm(t)===`ABOVE`?(t.setVerticalAlignment(`BOTTOM`),r.y=s.y-Um(e)-n-r.height):(t.setVerticalAlignment(`TOP`),r.y=s.y+Um(e)+n)}}function Lm(e,t,n,r,i){let a=km.createForDirection(Hm(n)).withGap(r,r).withStartCoordinate(Rm(e,n,i));for(let r of e.getPorts(n)){let e=t[r.id];e!==null&&a.addRectangle(e.cellRectangle)}a.removeOverlaps()}function Rm(e,t,n){let r=e.getSize(),i=e.getMargin();switch(t){case`NORTH`:return-i.top-n;case`SOUTH`:return r.y+i.bottom+n;case`EAST`:return r.x+i.right+n;case`WEST`:return-i.left-n;default:return 0}}function zm(e,t){let n=e.getMargin(),r=e.getSize(),i={x:-n.left,y:-n.top,width:n.left+r.x+n.right,height:n.top+r.y+n.bottom};for(let e of t)e!==null&&(i=Bm(i,e.cellRectangle));n.left=-i.x,n.top=-i.y,n.right=i.width-n.left-r.x,n.bottom=i.height-n.top-r.y}function Bm(e,t){let n=Math.min(e.x,t.x),r=Math.min(e.y,t.y),i=Math.max(e.x+e.width,t.x+t.width),a=Math.max(e.y+e.height,t.y+t.height);return{x:n,y:r,width:i-n,height:a-r}}function Vm(e){return`BELOW`}function Hm(e){switch(e){case`NORTH`:return`UP`;case`SOUTH`:return`DOWN`;case`EAST`:return`RIGHT`;case`WEST`:return`LEFT`;default:return`UP`}}function Um(e){return e.getProperty(ln)}function Wm(e){switch(e.getProperty(Jn)){case`ALWAYS_UP`:Km(e,`ABOVE`);break;case`ALWAYS_DOWN`:Km(e,`BELOW`);break;case`DIRECTION_UP`:qm(e,`ABOVE`);break;case`DIRECTION_DOWN`:qm(e,`BELOW`);break;case`SMART_UP`:Jm(e,`ABOVE`),Gm(e,`ABOVE`);break;case`SMART_DOWN`:Jm(e,`BELOW`),Gm(e,`BELOW`)}}function Gm(e,t){let n=e=>{for(let n of e.getOutgoingEdges())for(let e of n.getLabels()){let n=e;(n.side===void 0||n.side===``)&&(n.side=t)}};for(let t of e.getLayers())for(let e of t.getNodes())n(e);for(let t of e.getLayerlessNodes())n(t)}function Km(e,t){for(let n of e.getLayers())for(let e of n.getNodes()){e.getType()===`LABEL`&&nh(e,t);for(let n of e.getOutgoingEdges())rh(n,t)}}function qm(e,t){let n=t===`ABOVE`?`BELOW`:`ABOVE`;for(let r of e.getLayers())for(let e of r.getNodes()){e.getType()===`LABEL`&&nh(e,ih(e)?t:n);for(let r of e.getOutgoingEdges())rh(r,ih(r)?t:n)}}function Jm(e,t){let n=[];for(let r of e.getLayers()){let e=!0,i=0;for(let a of r.getNodes())switch(a.getType()){case`LABEL`:i++,n.push(a);break;case`LONG_EDGE`:n.push(a);break;case`NORMAL`:Ym(a,t),n.length>0&&Qm(n,i,e,!1,t),e=!1,i=0;break;default:n.length>0&&Qm(n,i,e,!1,t),e=!1,i=0}n.length>0&&Qm(n,i,e,!0,t)}}function Ym(e,t){let n=[],r=null;for(let i of e.getPorts()){i.getSide()!==r&&(n.length>0&&Xm(n,r,t),n.length=0,r=i.getSide());let e=Nm(i);e!==null&&n.push(e)}n.length>0&&Xm(n,r,t)}function Xm(e,t,n){if(e.length===2)t===`NORTH`||t===`EAST`?(Zm(e[0],`ABOVE`),Zm(e[1],`BELOW`)):(Zm(e[0],`BELOW`),Zm(e[1],`ABOVE`));else for(let t of e)Zm(t,n)}function Zm(e,t){for(let n of e)n.label.side=t}function Qm(e,t,n,r,i){n&&(!r||e.length>1)&&t===1&&e[0].getType()===`LABEL`?nh(e[0],`ABOVE`):r&&(!n||e.length>1)&&t===1&&e[e.length-1].getType()===`LABEL`?nh(e[e.length-1],`BELOW`):e.length===2?(nh(e[0],`ABOVE`),nh(e[1],`BELOW`)):$m(e,t,i),e.length=0}function $m(e,t,n){let r=[],i=null,a=null;for(let t of e){let e=th(t,!0),o=th(t,!1);(i!==e||a!==o)&&(eh(r,n),i=e,a=o),r.push(t)}eh(r,n)}function eh(e,t){if(e.length!==0){if(e.length===2)nh(e[0],`ABOVE`),nh(e[1],`BELOW`);else for(let n of e)nh(n,t);e.length=0}}function th(e,t){let n=e.getProperty(t?B:I);return n==null?null:n.getNode()}function nh(e,t){if(e.getType()!==`LABEL`)return;let n=t;if(e.setProperty(Tt,n),n!==`BELOW`){let t=e.getProperty(L)?.getProperty(Ye)??0,r=0;if(n===`ABOVE`)r=e.size.y-Math.ceil(t/2);else if(n===`INLINE`){let n=e.getGraph()?.getProperty(Tn)??0;r=Math.ceil(e.size.y-n-t)/2,e.size.y-=n,e.size.y-=t}for(let t of e.getPorts())t.getPosition().y=r}}function rh(e,t){for(let n of e.getLabels())n.side=t}function ih(e){if(e instanceof V){let t=e.getIncomingEdges()[0],n=e.getOutgoingEdges()[0];return!!(t&&ih(t)||n&&ih(n))}return!e.getProperty(A)}function ah(e){for(let t of e.getLayers())for(let e of t.getNodes())e.getType()===`NORMAL`&&oh(e)}function oh(e){let t=!1,n=e.getProperty(Ne);if(n==null||!(n instanceof Map))return;let r=n;for(let n of e.getPorts())sh(n)&&(t||=(ch(e.getGraph()),!0),lh(n,r.get(n)))}function sh(e){let t=0;for(let n of e.getIncomingEdges())n.getLabels().some(e=>e.placement===`HEAD`)&&t++;for(let n of e.getOutgoingEdges())n.getLabels().some(e=>e.placement===`TAIL`)&&t++;return t>=2}function ch(e){if(e===null)return;let t=0;for(let n of e.getLayers())for(let e of n.getNodes()){e.id=t++;for(let n of e.getPorts())n.id=t++}}function lh(e,t){if(t===void 0)return;let n=uh(t);n.sort(fh);let r=t.getEntries();r.length=0;for(let e of n)r.push(...e.entries)}function uh(e){let t=/* @__PURE__ */ new Map;for(let n of e.getEntries()){let e=n.edge,r=t.get(e);r===void 0&&(r=new dh(e),t.set(e,r)),r.entries.push(n)}return[...t.values()]}var dh=class{edge;entries=[];constructor(e){this.edge=e}};const fh=(e,t)=>{let n=e.edge,r=t.edge;if(n===null||r===null)return 0;let i=n.getSource(),a=r.getSource();if(i!==null&&a!==null){let e=i.id-a.id;if(e!==0)return e}let o=n.getTarget(),s=r.getTarget();if(o!==null&&s!==null){let e=o.getNode(),t=s.getNode(),n=(e?.id??0)-(t?.id??0);return n===0?s.id-o.id:n}return 0};function ph(e){for(let t of e.getLayers())for(let e of t.getNodes())(e.getType()===`NORMAL`||e.getType()===`EXTERNAL_PORT`)&&e.hasProperty(Ne)&&mh(e)}function mh(e){let t=e.getProperty(Ne);if(t==null)return;let n=e.getPosition();for(let e of t.values()){let t=e,r=t.cellRectangle;r.x+=n.x,r.y+=n.y,t.applyLabelLayout()}e.setProperty(Ne,null)}var hh=class{targetNodeModelOrder;portModelOrder;previousLayer;graph;strategy;biggerThan=/* @__PURE__ */ new Map;smallerThan=/* @__PURE__ */ new Map;constructor(e,t,n,r,i){this.graph=e,this.previousLayer=t,this.strategy=n,this.targetNodeModelOrder=r,this.portModelOrder=i}compare(e,t){let n=e,r=t;if(!this.biggerThan.has(n))this.biggerThan.set(n,/* @__PURE__ */ new Set);else if(this.biggerThan.get(n).has(r))return 1;if(!this.biggerThan.has(r))this.biggerThan.set(r,/* @__PURE__ */ new Set);else if(this.biggerThan.get(r).has(n))return-1;if(!this.smallerThan.has(n))this.smallerThan.set(n,/* @__PURE__ */ new Set);else if(this.smallerThan.get(n).has(r))return-1;if(!this.smallerThan.has(r))this.smallerThan.set(r,/* @__PURE__ */ new Set);else if(this.biggerThan.get(r).has(n))return 1;if(n.getSide()!==r.getSide()){let e=vh(n.getSide())-vh(r.getSide());return e>0?this.updateBiggerAndSmallerAssociations(n,r,1):this.updateBiggerAndSmallerAssociations(r,n,1),e}let i=1;if(n.getIncomingEdges().length>0&&r.getIncomingEdges().length>0){(n.getSide()===`WEST`&&r.getSide()===`WEST`||n.getSide()===`NORTH`&&r.getSide()===`NORTH`||n.getSide()===`SOUTH`&&r.getSide()===`SOUTH`)&&(i=-i);let e=n.getIncomingEdges()[0].getSource(),t=r.getIncomingEdges()[0].getSource(),a=e.getNode(),o=t.getNode();if(a===o)for(let o of a.getPorts()){if(e===o)return this.updateBiggerAndSmallerAssociations(r,n,i),-i;if(t===o)return this.updateBiggerAndSmallerAssociations(n,r,i),i}if(a.getType()===`LONG_EDGE`&&o.getType()===`LONG_EDGE`&&a.getLayer().id===o.getLayer().id&&a.getLayer().id===n.getNode().getLayer().id){let e=this.checkReferenceLayer(a.getLayer().getNodes(),a,o);if(e!==0)return n.getSide()===`EAST`&&r.getSide()===`EAST`&&(i=-i),e>0?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}let s=this.checkReferenceLayer(this.previousLayer,a,o);if(s!==0)return s>0?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i);if(this.portModelOrder){let e=this.checkPortModelOrder(n,r);if(e!==0)return e>0?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}}if(n.getOutgoingEdges().length>0&&r.getOutgoingEdges().length>0){(n.getSide()===`WEST`&&r.getSide()===`WEST`||n.getSide()===`SOUTH`&&r.getSide()===`SOUTH`)&&(i=-i);let e=n.getProperty(ft),t=r.getProperty(ft);if(this.strategy===`PREFER_NODES`&&e!=null&&t!=null&&e.hasProperty(F)&&t.hasProperty(F))return Zi(e,t,this.graph,this.graph.getProperty(`org.eclipse.elk.layered.internal.maxModelOrderNodes`))>Zi(t,e,this.graph,this.graph.getProperty(`org.eclipse.elk.layered.internal.maxModelOrderNodes`))?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i);if(this.portModelOrder){let e=this.checkPortModelOrder(n,r);if(e!==0)return e>0?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}let a=0,o=0;return n.getOutgoingEdges()[0].hasProperty(F)&&(a=Zi(n.getOutgoingEdges()[0],r.getOutgoingEdges()[0],this.graph,n.getOutgoingEdges().length+n.getIncomingEdges().length)),r.getOutgoingEdges()[0].hasProperty(F)&&(o=Zi(r.getOutgoingEdges()[0],n.getOutgoingEdges()[0],this.graph,r.getOutgoingEdges().length+r.getIncomingEdges().length)),e!=null&&e===t||this.targetNodeModelOrder!=null&&(this.targetNodeModelOrder.has(e)&&(a=this.targetNodeModelOrder.get(e)),this.targetNodeModelOrder.has(t)&&(o=this.targetNodeModelOrder.get(t))),a>o?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}if(n.getIncomingEdges().length>0&&r.getOutgoingEdges().length>0)return this.updateBiggerAndSmallerAssociations(n,r,i),1;if(n.getOutgoingEdges().length>0&&r.getIncomingEdges().length>0)return this.updateBiggerAndSmallerAssociations(r,n,i),-1;if(n.hasProperty(F)&&r.hasProperty(F)){let e=n.getNode().getPorts().length,t=Zi(n,r,this.graph,e),a=Zi(r,n,this.graph,e);return(n.getSide()===`WEST`&&r.getSide()===`WEST`||n.getSide()===`SOUTH`&&r.getSide()===`SOUTH`)&&(i=-i),t>a?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}return this.updateBiggerAndSmallerAssociations(r,n,i),-i}checkPortModelOrder(e,t){let n=e.getNode().getPorts().length;return e.hasProperty(F)&&t.hasProperty(F)?Zi(e,t,this.graph,n)-Zi(t,e,this.graph,n):0}updateBiggerAndSmallerAssociations(e,t,n){let r=e,i=t;n<0&&(r=t,i=e);let a=this.biggerThan.get(r),o=this.biggerThan.get(i),s=this.smallerThan.get(r),c=this.smallerThan.get(i);a.add(i),c.add(r);for(let e of o){a.add(e),this.smallerThan.get(e).add(r);for(let t of s)this.smallerThan.get(e).add(t)}for(let e of s){c.add(e),this.biggerThan.get(e).add(i);for(let t of o)this.biggerThan.get(e).add(t)}}checkReferenceLayer(e,t,n){for(let r of e){if(r===t)return-1;if(r===n)return 1}return 0}clearTransitiveOrdering(){this.biggerThan=/* @__PURE__ */ new Map,this.smallerThan=/* @__PURE__ */ new Map}},gh=class{previousLayer;graph;orderingStrategy;groupOrderStrategy;biggerThan=/* @__PURE__ */ new Map;smallerThan=/* @__PURE__ */ new Map;longEdgeNodeOrder;beforePorts;constructor(e,t,n,r,i,a){this.graph=e,this.previousLayer=t,this.orderingStrategy=n,this.groupOrderStrategy=i,this.longEdgeNodeOrder=r,this.beforePorts=a}compare(e,t){if(!this.biggerThan.has(e))this.biggerThan.set(e,/* @__PURE__ */ new Set);else if(this.biggerThan.get(e).has(t))return 1;if(!this.biggerThan.has(t))this.biggerThan.set(t,/* @__PURE__ */ new Set);else if(this.biggerThan.get(t).has(e))return-1;if(!this.smallerThan.has(e))this.smallerThan.set(e,/* @__PURE__ */ new Set);else if(this.smallerThan.get(e).has(t))return-1;if(!this.smallerThan.has(t))this.smallerThan.set(t,/* @__PURE__ */ new Set);else if(this.biggerThan.get(t).has(e))return 1;if(this.orderingStrategy===`PREFER_EDGES`||!e.hasProperty(F)||!t.hasProperty(F)){let n=null;for(let t of e.getPorts())if(t.getIncomingEdges().length>0&&t.getIncomingEdges()[0].getSource().getNode().getLayer().id===e.getLayer().id-1){n=t.getIncomingEdges()[0].getSource();break}let r=null;for(let e of t.getPorts())if(e.getIncomingEdges()[0]?.getSource()?.getNode(),e.getIncomingEdges().length>0&&e.getIncomingEdges()[0].getSource().getNode().getLayer().id===t.getLayer().id-1){r=e.getIncomingEdges()[0].getSource();break}if(n!==null&&r!==null){let i=n.getNode(),a=r.getNode();if(i===a){for(let a of i.getPorts()){if(a===n)return this.updateBiggerAndSmallerAssociations(t,e),-1;if(a===r)return this.updateBiggerAndSmallerAssociations(e,t),1}return this.getModelOrderFromConnectedEdges(e)>this.getModelOrderFromConnectedEdges(t)?(this.updateBiggerAndSmallerAssociations(e,t),1):(this.updateBiggerAndSmallerAssociations(t,e),-1)}for(let n of this.previousLayer){if(n===i)return this.updateBiggerAndSmallerAssociations(t,e),-1;if(n===a)return this.updateBiggerAndSmallerAssociations(e,t),1}}if(n!==null&&r===null||n===null&&r!==null){let n=this.handleHelperDummyNodes(e,t);if(n!==0)return n>0?this.updateBiggerAndSmallerAssociations(e,t):this.updateBiggerAndSmallerAssociations(t,e),n;if(!e.hasProperty(F)||!t.hasProperty(F))return this.getModelOrderFromConnectedEdges(e)>this.getModelOrderFromConnectedEdges(t)?(this.updateBiggerAndSmallerAssociations(e,t),1):(this.updateBiggerAndSmallerAssociations(t,e),-1)}if(n===null&&r===null){let n=this.handleHelperDummyNodes(e,t);if(n!==0)return n>0?this.updateBiggerAndSmallerAssociations(e,t):this.updateBiggerAndSmallerAssociations(t,e),n}}return e.hasProperty(F)&&t.hasProperty(F)&&Zi(e,t,this.graph,this.graph.getProperty(xn))>Zi(t,e,this.graph,this.graph.getProperty(xn))?(this.updateBiggerAndSmallerAssociations(e,t),1):(this.updateBiggerAndSmallerAssociations(t,e),-1)}getModelOrderFromConnectedEdges(e){let t=e.getPorts().find(e=>e.getIncomingEdges().length>0);if(t!==void 0){let e=t.getIncomingEdges()[0];if(e!==void 0)return e.getProperty(F)}return _h(this.longEdgeNodeOrder)}updateBiggerAndSmallerAssociations(e,t){let n=this.biggerThan.get(e),r=this.biggerThan.get(t),i=this.smallerThan.get(e),a=this.smallerThan.get(t);n.add(t),a.add(e);for(let t of r){n.add(t),this.smallerThan.get(t).add(e);for(let e of i)this.smallerThan.get(t).add(e)}for(let e of i){a.add(e),this.biggerThan.get(e).add(t);for(let t of r)this.biggerThan.get(e).add(t)}}handleHelperDummyNodes(e,t){if(e.getType()===`LONG_EDGE`&&t.getType()===`NORMAL`){let n=this.getFirstIncomingSourcePortOfNode(e).getNode(),r=this.getFirstOutgoingTargetPortOfNode(e).getNode(),i=e.getLayer().id;return n.getLayer().id!==i&&r.getLayer().id!==i?0:n===t||r===t?(this.updateBiggerAndSmallerAssociations(e,t),1):this.compare(n,t)}if(e.getType()===`NORMAL`&&t.getType()===`LONG_EDGE`){let n=this.getFirstIncomingSourcePortOfNode(t).getNode(),r=this.getFirstOutgoingTargetPortOfNode(t).getNode(),i=e.getLayer().id;return n.getLayer().id!==i&&r.getLayer().id!==i?0:n===e||r===e?(this.updateBiggerAndSmallerAssociations(t,e),-1):this.compare(e,n)}if(e.getType()===`LONG_EDGE`&&t.getType()===`LONG_EDGE`){let n=this.getFirstIncomingSourcePortOfNode(e),r=this.getFirstOutgoingTargetPortOfNode(e),i=n.getNode(),a=r.getNode(),o=e.getLayer().id,s=!1,c=!1,l=this.getFirstIncomingSourcePortOfNode(t),u=this.getFirstOutgoingTargetPortOfNode(t),d=l.getNode(),f=u.getNode(),p=t.getLayer().id,m=!1,h=!1,g=e,_=t;if(i.getLayer().id===o?(s=!0,g=i):a.getLayer().id===o&&(c=!0,g=a),d.getLayer().id===p?(m=!0,_=d):f.getLayer().id===p&&(h=!0,_=f),g===_){if(this.beforePorts){if(s&&m)return new hh(this.graph,this.previousLayer,this.orderingStrategy,null,h).compare(n,l)>0?(this.updateBiggerAndSmallerAssociations(t,e),1):(this.updateBiggerAndSmallerAssociations(e,t),-1);if(s&&h)return this.updateBiggerAndSmallerAssociations(t,e),1;if(c&&m)return this.updateBiggerAndSmallerAssociations(e,t),-1;if(c&&h)return 0}else for(let r of g.getPorts()){if(n===r)return this.updateBiggerAndSmallerAssociations(t,e),-1;if(l===r)return this.updateBiggerAndSmallerAssociations(e,t),1}}return this.compare(g,_)}return 0}getFirstIncomingPortOfNode(e){return e.getPorts().find(e=>e.getIncomingEdges().length>0)}getFirstIncomingSourcePortOfNode(e){return this.getFirstIncomingPortOfNode(e).getIncomingEdges()[0].getSource()}getFirstOutgoingPortOfNode(e){return e.getPorts().find(e=>e.getOutgoingEdges().length>0)}getFirstOutgoingTargetPortOfNode(e){return this.getFirstOutgoingPortOfNode(e).getOutgoingEdges()[0].getTarget()}clearTransitiveOrdering(){this.biggerThan=/* @__PURE__ */ new Map,this.smallerThan=/* @__PURE__ */ new Map}};function _h(e){switch(e){case`DUMMY_NODE_OVER`:return 2**53-1;case`DUMMY_NODE_UNDER`:return-(2**53-1);default:return 0}}function vh(e){switch(e){case`UNDEFINED`:return 0;case`NORTH`:return 1;case`EAST`:return 2;case`SOUTH`:return 3;case`WEST`:return 4}}function yh(e){let t=0;for(let n of e.getLayers()){n.id=t;let r=t===0?0:t-1,i=e.getLayers()[r].getNodes(),a=new gh(e,i,e.getProperty(Ce),e.getProperty(ze),e.getProperty(Ie),!0);Sh(n.getNodes(),a);for(let t of n.getNodes()){let n=t.getProperty(O);if(n!==`FIXED_ORDER`&&n!==`FIXED_POS`){let n=new hh(e,i,e.getProperty(Ce),bh(t),e.getProperty(m));t.getPorts().sort((e,t)=>n.compare(e,t))}}a=new gh(e,i,e.getProperty(Ce),e.getProperty(ze),e.getProperty(Ie),!1),Sh(n.getNodes(),a),t++}}function bh(e){let t=/* @__PURE__ */ new Map;if(e.hasProperty(Jt))return e.getProperty(Jt);for(let n of e.getPorts()){if(n.getOutgoingEdges().length===0)continue;let e=xh(n);if(n.setProperty(ft,e),e!==null){let r=2**53-1;t.has(e)&&(r=t.get(e));let i=n.getOutgoingEdges()[0];i.getProperty(A)||t.set(e,Math.min(i.getProperty(F),r))}}return e.setProperty(Jt,t),t}function xh(e){let t=null,n=e.getOutgoingEdges()[0];for(;;){if(t=n.getTarget().getNode(),t.hasProperty(I))return t.getProperty(I).getNode();if(t.getType()!==`NORMAL`&&t.getOutgoingEdges().length>0)n=t.getOutgoingEdges()[0];else if(t.getType()!==`NORMAL`)return null;if(t.getType()===`NORMAL`)break}return t}function Sh(e,t){for(let n=1;n<e.length;n++){let r=e[n],i=n;for(;i>0&&t.compare(e[i-1],r)>0;)e[i]=e[i-1],i--;e[i]=r}t.clearTransitiveOrdering()}function Ch(e){let n=!1;for(let t of e.getLayers()){let e=t.getNodes().filter(e=>e.getType()===`NORMAL`).filter(e=>e.hasProperty(ae)&&e.getProperty(ae)!==null).sort((e,t)=>{let n=e.getProperty(ae),r=t.getProperty(ae);return(n?.y??0)-(r?.y??0)});for(let t=0;t+1<e.length;t++){let r=e[t].getProperty(k)??[];r.push(e[t+1]),e[t].setProperty(k,r),n=!0}}n&&e.setProperty(t,!0)}function wh(e){let t=e.getLayerlessNodes().filter(e=>e.hasProperty(Yt)),n=[];for(let r of e.getLayerlessNodes())if(r.hasProperty(Yt))for(let e of r.getOutgoingEdges())Th(e,t)&&n.push(e);for(let t of n){t.reverse(e,!0);let n=1e3;t.hasProperty(Ge)&&(n+=t.getProperty(Ge)),t.setProperty(Ge,n)}}function Th(e,t){let n=e.getSource()?.getNode(),r=e.getTarget()?.getNode();if(!n||!r)return!1;let i=n.getProperty(Yt);if(r.hasProperty(Yt))return i>r.getProperty(Yt);let a=t.filter(e=>e.getProperty(Yt)<i),o=[n],s=/* @__PURE__ */ new Set([n]);for(;o.length>0;){let e=o.shift();if(a.includes(e))return!0;for(let t of e.getOutgoingEdges()){let e=t.getTarget()?.getNode();e&&!s.has(e)&&(s.add(e),o.push(e))}}return!1}function Eh(e){let t=/* @__PURE__ */ new Map;for(let n of e.getLayerlessNodes())if(n.hasProperty(Yt)){let e=n.getProperty(Yt);t.has(e)||t.set(e,[]),t.get(e).push(n)}if(t.size===0)return;let n=[...t.keys()].sort((e,t)=>e-t);for(let e=0;e+1<n.length;e++)Dh(t.get(n[e]),t.get(n[e+1]))}function Dh(e,t){for(let n of e){let e=new H;e.setNode(n),e.setSide(`EAST`),e.setProperty(Mt,!0);for(let n of t){let t=new H;t.setNode(n),t.setSide(`WEST`),t.setProperty(Mt,!0);let r=new U;r.setProperty(Mt,!0),r.setSource(e),r.setTarget(t)}}}function Oh(e){for(let t of e.getLayers())for(let e of t.getNodes())e.setPorts(e.getPorts().filter(e=>!e.getProperty(Mt)))}function kh(e){e.getProperty(Ee)&&e.getProperty(w).add(`PARTITIONS`)}function Ah(e){let t=e.getProperty(le),n=e.getProperty(Qe);n===0&&(n=2**53-1);let r=e.getLayers(),i=0;for(;i<r.length;){let a=r[i],o=[],s=-1,c=-1;for(let e of[...a.getNodes()])if(Ph(e)>=t){let r=jh(e,t,n);s=Math.max(s,r.incMax),c=Math.max(c,r.outMax),o.push([e,r])}let l=[];for(let t=0;t<s;t++){let t=new W(e);r.splice(i,0,t),l.unshift(t)}l.reverse();for(let[,e]of o)if(e.incRoots!==null)for(let t of e.incRoots)Nh(t,e=>e.getIncomingEdges(),l);let u=i+Math.max(0,s),d=[];for(let t=0;t<c;t++){let n=new W(e);r.splice(u+1+t,0,n),d.push(n)}for(let[,e]of o)if(e.outRoots!==null)for(let t of e.outRoots)Nh(t,e=>e.getOutgoingEdges(),d);i+=Math.max(0,s)+1+Math.max(0,c)}for(let e=r.length-1;e>=0;e--)r[e].getNodes().length===0&&r.splice(e,1)}function jh(e,t,n){let r={incMax:-1,incRoots:null,outMax:-1,outRoots:null};for(let i of e.getIncomingEdges()){if(i.isSelfLoop())continue;let e=i.getSource().getNode();if(Fh(e,e=>e.getOutgoingEdges())){let i=Mh(e,e=>e.getOutgoingEdges(),e=>e.getIncomingEdges(),t,n);if(i===-1)continue;r.incMax=Math.max(r.incMax,i),r.incRoots===null&&(r.incRoots=[]),r.incRoots.push(e)}}for(let i of e.getOutgoingEdges()){if(i.isSelfLoop())continue;let e=i.getTarget().getNode();if(Fh(e,e=>e.getIncomingEdges())){let i=Mh(e,e=>e.getIncomingEdges(),e=>e.getOutgoingEdges(),t,n);if(i===-1)continue;r.outMax=Math.max(r.outMax,i),r.outRoots===null&&(r.outRoots=[]),r.outRoots.push(e)}}return r}function Mh(e,t,n,r,i){if(Ph(e)>=r||!Fh(e,t))return-1;let a=n(e);if(a.length===0)return 1;let o=0;for(let s of a){let a=Mh(Ih(s,e),t,n,r,i);if(a===-1||(o=Math.max(o,a),o>i-1))return-1}return o+1}function Nh(e,t,n){e.setLayer(n[0]);let r=n.slice(1);for(let n of t(e))Nh(Ih(n,e),t,r)}function Ph(e){return e.getConnectedEdges().length}function Fh(e,t){let n=null;for(let r of t(e)){let t=Ih(r,e);if(n===null)n=t;else if(t!==n)return!1}return!0}function Ih(e,t){let n=e.getSource()?.getNode(),r=e.getTarget()?.getNode();return n===t?r:n}function Lh(e){let t=1,n=[];for(let r=0;r<e.getLayers().length;r++){let i=e.getLayers()[r],a=Rh(i),o=zh(i);if(Bh(i)){let t=0,n=0;for(let e of i.getNodes())t=Math.max(t,e.size.x),n+=e.size.y;if(n/=i.getNodes().length,t+=Math.max(2*e.getProperty(_n),Math.max(i.getNodes().length*e.getProperty(wt),e.getProperty(kn))),n+=Math.max(e.getProperty(Zt),e.getProperty(an)),t/n>=i.getNodes().length/4)continue}if(i.getNodes().length>=a){let s=[i];for(let i=0;i<a-1;i++){let a=new W(e);n.push({layer:a,index:r+i+t}),s.push(a)}t+=a-1;let c=s[0].getNodes().length;for(let t=0,n=0,r=0;t<c;t++,n++,r++){let i=s[0].getNodes()[n];i.getType()===`NONSHIFTING_PLACEHOLDER`?(--t,--r):n+=Vh(e,s,r%a,n),o&&i.getType()===`LONG_EDGE`&&(r=-1)}}}for(let t of n)e.getLayers().splice(t.index,0,t.layer);for(let t of e.getLayers()){let e=t.getNodes();for(let t=e.length-1;t>=0;t--){let n=e[t];(n.getType()===`PLACEHOLDER`||n.getType()===`NONSHIFTING_PLACEHOLDER`)&&e.splice(t,1)}}}function Rh(e){let t=2**53-1,n=!0;for(let r=0;r<e.getNodes().length;r++){let i=e.getNodes()[r];if(i.hasProperty(jn)){n=!1;let e=i.getProperty(jn);t=t<e?t:e}}return n&&(t=jn.getDefault()),t}function zh(e){for(let t=0;t<e.getNodes().length;t++){let n=e.getNodes()[t];if(n.hasProperty(kt)&&!n.getProperty(kt))return!1}return!0}function Bh(e){for(let t=0;t<e.getNodes().length;t++){let n=e.getNodes()[t];if(n.hasProperty(Ct)&&n.getProperty(Ct))return!0}return!1}function Vh(e,t,n,r){let i=t[0].getNodes()[r];n>0&&i.setLayer(t[n]);let a=0,o=!0,s=[...i.getIncomingEdges()].reverse();for(let i of s){o=!1;let s=i;for(let i=0;i<n;i++){let n=Hh(e,s);r+a>t[i].getNodes().length?n.setLayer(t[i]):n.setLayerAt(r+a,t[i]),s=Or(s,n)}n>0&&(a+=1)}if(o){for(let i=0;i<n;i++){let n=new V(e);n.setType(`PLACEHOLDER`),r+a>t[i].getNodes().length?n.setLayer(t[i]):n.setLayerAt(r+a,t[i])}n>0&&(a+=1)}let c=!1;for(let o of i.getOutgoingEdges()){let i=o;for(let r=n+1;r<t.length;r++){let n=Hh(e,i);n.setLayer(t[r]),i=Or(i,n)}for(let i=0;i<=n;i++)if(c){let n=new V(e);n.setType(`NONSHIFTING_PLACEHOLDER`),r+1>t[i].getNodes().length?n.setLayer(t[i]):n.setLayerAt(r+1,t[i])}c&&(a+=1),c=!0}return a>0?a-1:0}function Hh(e,t){let n=new V(e);return n.setType(`LONG_EDGE`),n.setProperty(L,t),n.setProperty(O,`FIXED_POS`),n}function Uh(e){let t=e.getProperty(De),n=t===`MODEL_ORDER`||t===`GREEDY_MODEL_ORDER`||t===`BFS_NODE_ORDER`||t===`DFS_NODE_ORDER`||t===`SCC_CONNECTIVITY`||t===`SCC_NODE_TYPE`,r=e.getProperty(Qt),i=r===`BF_MODEL_ORDER`||r===`DF_MODEL_ORDER`||e.getProperty(yt)===`MODEL_ORDER_LEFT_TO_RIGHT`||e.getProperty(yt)===`MODEL_ORDER_RIGHT_TO_LEFT`,a=e.getProperty(Ce)!==`NONE`||e.getProperty(Oe)||e.getProperty(Wn)!==h.NONE;return n||i||a}function Wh(e){let t=[],n=[e];for(;n.length>0;){let e=n.pop();t.push(e);for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();e!==null&&n.push(e)}}return t}function Gh(e){if(!Uh(e))return;let t=0,n=/* @__PURE__ */ new Set;for(let r of e.getLayerlessNodes())r.getProperty(v)||(r.setProperty(F,t++),r.hasProperty(In)&&n.add(r.getProperty(In)));e.setProperty(xn,t),e.setProperty(Ut,n.size);let r=0;for(let t of e.getLayerlessNodes())for(let e of t.getPorts())for(let t of e.getOutgoingEdges())t.setProperty(F,r++)}function Kh(e){for(let t of Wh(e))Gh(t)}function qh(t){let n=[t];for(;n.length>0;){let t=n.pop();for(let r of t.getLayerlessNodes()){let t=r.getOutgoingEdges().some(t=>t.isSelfLoop()&&t.getProperty(e));if(r.getProperty(Ae)&&t&&r.getNestedGraph()===null){let e=new rr;r.setNestedGraph(e),e.setParentNode(r),e.setProperty(S,`RIGHT`)}let i=r.getNestedGraph();i!==null&&n.push(i)}}}var Jh=class{begin(){}done(){}};function Yh(e){let t=[],n=[e];for(;n.length>0;){let e=n.pop();for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();e!==null&&n.push(e)}t.push(e)}return t.reverse()}function Xh(e,t,n,r){let i={x:t.position.x+t.size.x/2,y:t.position.y+t.size.y/2},a=t.getProperty(E),o=e.getSize(),s=e.getPadding(),c=e.getOffset();switch(t.getProperty(L),t.getProperty(j)){case`NORTH`:i.x+=s.left+c.x-n/2,i.y=-r-a,t.position.y=-(s.top+a+c.y);break;case`EAST`:i.x=o.x+s.left+s.right+a,i.y+=s.top+c.y-r/2,t.position.x=o.x+s.right+a-c.x;break;case`SOUTH`:i.x+=s.left+c.x-n/2,i.y=o.y+s.top+s.bottom+a,t.position.y=o.y+s.bottom+a-c.y;break;case`WEST`:i.x=-n-a,i.y+=s.top+c.y-r/2,t.position.x=-(s.left+a+c.x)}return i}function Zh(e,t){let n=e.getNestedGraph();if(n===null)return;let r=n.getAllNodes();if(r.length===0)return;let i=e=>{let n=e.getType();if(n===`NORMAL`||n===`LONG_EDGE`)return!0;if(n===`EXTERNAL_PORT`){if(!t&&a)return!1;let n=e.getProperty(j);return n===`WEST`||n===`EAST`||e.getPorts().some(e=>e.getConnectedEdges().length>0)}return!1},a=r.some(e=>e.getType()===`NORMAL`||e.getType()===`LONG_EDGE`),o=r.filter(i);if(o.length===0)return;let s=1/0,c=1/0,l=-1/0,u=-1/0,d=1/0,f=1/0;for(let e of o){let t=e.getMargin();if(s=Math.min(s,e.position.x-t.left),c=Math.min(c,e.position.y-t.top),l=Math.max(l,e.position.x+e.size.x+t.right),u=Math.max(u,e.position.y+e.size.y+t.bottom),e.getType()===`EXTERNAL_PORT`){let r=e.position.x;if(r<0||r>n.getSize().x){f=Math.min(f,e.position.y-t.top);continue}}d=Math.min(d,e.position.x-t.left),f=Math.min(f,e.position.y-t.top)}let p=n.getPadding(),m=e.size.x,h=e.size.y,g=n.getSize().x+p.left+p.right,_=n.getSize().y+p.top+p.bottom,v=n.getProperty(x);v&&(g=Math.max(g,v.x),_=Math.max(_,v.y)),mg&&n.getProperty(qe)?.length>0&&(g=n.getSize().x+p.left+p.right,_=n.getSize().y+p.top+p.bottom,v&&(g=Math.max(g,v.x),_=Math.max(_,v.y)));{let t=n.getSize().x+p.left+p.right,r=n.getSize().y+p.top+p.bottom,i=e.getProperty(`org.eclipse.elk.contentAlignment`)??[];if(g>t||_>r){let e=n.getOffset();g>t&&(i.includes(`H_CENTER`)?e.x+=(g-t)/2:i.includes(`H_RIGHT`)&&(e.x+=g-t)),_>r&&(i.includes(`V_CENTER`)?e.y+=(_-r)/2:i.includes(`V_BOTTOM`)&&(e.y+=_-r))}}d=-n.getOffset().x,f=-n.getOffset().y;let y=p.left-d,b=p.top-f;if(t&&(y!==0||b!==0)){for(let e of r)e.getType()===`NORMAL`&&(e.position.x+=y,e.position.y+=b);let e=/* @__PURE__ */ new Set;for(let t of r)for(let n of t.getPorts())for(let t of n.getConnectedEdges())if(!e.has(t)){e.add(t);for(let e of t.getBendPoints())e.x+=y,e.y+=b;for(let e of t.getLabels())e.position.x+=y,e.position.y+=b}}if(n.getProperty(w).has(`EXTERNAL_PORTS`)){e.setProperty(O,`FIXED_POS`),e.getGraph().getProperty(w).add(`NON_FREE_PORTS`);for(let e of n.getAllNodes()){let t=e.getProperty(L);if(t instanceof H){let r=t,i=Xh(n,e,r.getSize().x,r.getSize().y);r.getPosition().x=i.x,r.getPosition().y=i.y,r.setSide(e.getProperty(j))}}if(t&&b!==0&&r.some(e=>e.getType()===`NORMAL`))for(let e of n.getAllNodes()){if(e.getType()!==`EXTERNAL_PORT`)continue;let t=e.getProperty(j);if(t===`WEST`||t===`EAST`){e.position.y+=b;for(let t of e.getPorts())for(let e of t.getLabels())e.position.y-=b}}e.size.x=g,e.size.y=_,n.getSize().x=g,n.getSize().y=_}else{if(m>0&&h>0){let t=g/m,n=_/h,r=g-m,i=_-h;for(let a of e.getPorts())switch(a.getSide()){case`NORTH`:a.getPosition().x*=t;break;case`EAST`:a.getPosition().x+=r,a.getPosition().y*=n;break;case`SOUTH`:a.getPosition().x*=t,a.getPosition().y+=i;break;case`WEST`:a.getPosition().y*=n}}e.size.x=g,e.size.y=_,n.getSize().x=g,n.getSize().y=_}}function Qh(e,t,n){let r=e.getProperty(S)===`UNDEFINED`?`RIGHT`:e.getProperty(S);for(let t of e.getAllNodes()){let e=t.getProperty(O);if(D.isSideFixed(e))for(let n of t.getPorts())gc(n,e,r)}let i=e.getProperty(w),a=e.getProperty(S),o=a===`UNDEFINED`?`RIGHT`:a;for(let t of e.getLayerlessNodes()){let n=t.getProperty(O);n!==`FREE`&&n!==`UNDEFINED`&&i.add(`NON_FREE_PORTS`),t.getProperty(it)&&(i.add(`HYPERNODES`),i.add(`HYPEREDGES`),t.setProperty(O,`FREE`)),kh(e);for(let e of t.getPorts()){let n=e.getSide();(o===`RIGHT`||o===`LEFT`?n===`NORTH`||n===`SOUTH`:n===`EAST`||n===`WEST`)&&i.add(`NORTH_SOUTH_PORTS`),e.getIncomingEdges().length+e.getOutgoingEdges().length>1&&i.add(`HYPEREDGES`);for(let n of e.getOutgoingEdges()){n.getTarget()!==null&&n.getTarget().getNode()===t&&i.add(`SELF_LOOPS`);for(let e of n.getLabels())e.placement===`HEAD`||e.placement===`TAIL`?i.add(`END_LABELS`):i.add(`CENTER_LABELS`)}}}$(`GraphTransformer(in)`,n,e,()=>new Dm(`TO_INPUT_DIRECTION`).process(e));for(let t of e.getAllNodes())t.hasProperty(tn)||t.setProperty(tn,t.getProperty(O));(e.getProperty(gt)===null||e.getProperty(gt)===void 0)&&e.setProperty(gt,e.getProperty(s)===`ORTHOGONAL`),e.getProperty(w).has(`COMMENTS`)&&$(`CommentPreprocessor`,n,e,()=>tm(e)),e.getProperty(Qt)!==`INTERACTIVE`&&$(`EdgeAndLayerConstraintEdgeReverser`,n,e,()=>new mr().process(e));let c=e.getProperty(w).has(`SELF_LOOPS`);c&&$(`SelfLoopPreprocessor`,n,e,()=>Mf(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionPreprocessor`,n,e,()=>wh(e)),(e.getProperty(De)===`INTERACTIVE`||e.getProperty(Qt)===`INTERACTIVE`)&&$(`InteractiveExternalPortPositioner`,n,e,()=>Dd(e));let l=e.getProperty(De);l===`MODEL_ORDER`?$(`ModelOrderCycleBreaker`,n,e,()=>fr(e,t)):l===`GREEDY_MODEL_ORDER`?$(`GreedyModelOrderCycleBreaker`,n,e,()=>new pr().process(e,t)):l===`DEPTH_FIRST`?$(`DepthFirstCycleBreaker`,n,e,()=>new ou().process(e,t)):l===`SCC_CONNECTIVITY`?$(`SCConnectivity`,n,e,()=>new du().process(e,t)):l===`SCC_NODE_TYPE`?$(`SCCNodeTypeCycleBreaker`,n,e,()=>new mu().process(e,t)):l===`DFS_NODE_ORDER`?$(`DFSNodeOrderCycleBreaker`,n,e,()=>new cu().process(e,t)):l===`BFS_NODE_ORDER`?$(`BFSNodeOrderCycleBreaker`,n,e,()=>new su().process(e,t)):l===`INTERACTIVE`?$(`InteractiveCycleBreaker`,n,e,()=>lr(e)):$(`GreedyCycleBreaker`,n,e,()=>new sr().process(e,t)),n?.afterPhase?.(`P1`,e),$(`LabelDummyInserter`,n,e,()=>Mr(e)),$(`LayerConstraintPreprocessor`,n,e,()=>new $l().process(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionMidprocessor`,n,e,()=>Eh(e));let u=e.getProperty(Qt);u===`INTERACTIVE`?$(`InteractiveLayerer`,n,e,()=>iu(e,t)):u===`LONGEST_PATH_SOURCE`?$(`LongestPathSourceLayerer`,n,e,()=>new Tr().process(e,t)):u===`LONGEST_PATH`||u===`LONGEST_PATH_SINK`?$(`LongestPathLayerer`,n,e,()=>new wr().process(e,t)):u===`COFFMAN_GRAHAM`?$(`CoffmanGrahamLayerer`,n,e,()=>new gu().process(e,t)):u===`BF_MODEL_ORDER`?$(`BreadthFirstModelOrderLayerer`,n,e,()=>new _u().process(e,t)):u===`DF_MODEL_ORDER`?$(`DepthFirstModelOrderLayerer`,n,e,()=>new vu().process(e,t)):u===`MIN_WIDTH`?$(`MinWidthLayerer`,n,e,()=>new yu().process(e,t)):u===`STRETCH_WIDTH`?$(`StretchWidthLayerer`,n,e,()=>new bu().process(e,t)):$(`NetworkSimplexLayerer`,n,e,()=>new Cr().process(e,t)),n?.afterPhase?.(`P2`,e),e.getProperty(tt)&&$(`HighDegreeNodeLayeringProcessor`,n,e,()=>Ah(e)),e.getProperty(yt)!==`NONE`&&$(`NodePromotion`,n,e,()=>new di().process(e,t)),$(`LayerConstraintPostprocessor`,n,e,()=>eu(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionPostprocessor`,n,e,()=>Oh(e)),mg&&e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortConstraintProcessor`,n,e,()=>new zf().process(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointInserter`,n,e,()=>Bd(e)),$(`LongEdgeSplitter`,n,e,()=>Er(e)),$(`PortSideProcessor`,n,e,()=>_c(e));let d=e.getProperty(s);(d===`POLYLINE`||d===`SPLINES`||d===`ORTHOGONAL`&&(e.getProperty(w).has(`NON_FREE_PORTS`)||e.getProperty(ne)||e.getProperty(w).has(`HYPEREDGES`)))&&$(`InvertedPortProcessor`,n,e,()=>$p(e)),c&&$(`DummySelfLoopProcessor`,n,e,()=>Gp(e)),e.getProperty(Ce)!==`NONE`&&$(`SortByInputModel`,n,e,()=>yh(e)),$(`PortListSorter`,n,e,()=>gf(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&!mg&&$(`HierarchicalPortConstraintProcessor`,n,e,()=>new zf().process(e)),e.getProperty(_e)&&$(`SemiInteractiveCrossMinProcessor`,n,e,()=>Ch(e)),e.getProperty(w).has(`NON_FREE_PORTS`)&&e.getProperty(w).has(`NORTH_SOUTH_PORTS`)&&$(`NorthSouthPortPreprocessor`,n,e,()=>xf(e))}function $h(e,t,n,r=!1){let i=e.getProperty(w).has(`SELF_LOOPS`);e.setProperty(Rn,new ka(e)),i&&$(`SelfLoopPortRestorer`,n,e,()=>new gp().process(e)),$(`InLayerConstraintProcessor`,n,e,()=>ap(e)),$(`LabelAndNodeSizeProcessor`,n,e,()=>bd(e)),$(`NodeMarginCalculator`,n,e,()=>Ec(e)),e.getProperty(w).has(`COMMENTS`)&&$(`CommentNodeMarginCalculator`,n,e,()=>im(e)),e.getProperty(w).has(`END_LABELS`)&&$(`EndLabelPreprocessor`,n,e,()=>Am(e)),e.getProperty(w).has(`CENTER_LABELS`)&&$(`LabelDummySwitcher`,n,e,()=>Rr(e)),(e.getProperty(w).has(`END_LABELS`)||e.getProperty(w).has(`CENTER_LABELS`))&&$(`LabelSideSelector`,n,e,()=>Wm(e)),e.getProperty(w).has(`HYPEREDGES`)&&e.getProperty(s)!==`SPLINES`&&$(`HyperedgeDummyMerger`,n,e,()=>new hr().process(e)),$(`HierarchicalPortDummySizeProcessor`,n,e,()=>If(e)),i&&$(`SelfLoopRouter`,n,e,()=>Up(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointProcessor`,n,e,()=>qd(e));let a=e.getProperty(zn);a===`SIMPLE`?$(`SimpleNodePlacer`,n,e,()=>Ta(e)):a===`INTERACTIVE`?$(`InteractiveNodePlacer`,n,e,()=>Ea(e)):a===`NETWORK_SIMPLEX`?$(`NetworkSimplexPlacer`,n,e,()=>new za().process(e)):a===`LINEAR_SEGMENTS`?$(`LinearSegmentsNodePlacer`,n,e,()=>Cu(e)):(a!==`BRANDES_KOEPF`&&fg(`nodePlacement.strategy`,String(a),`BRANDES_KOEPF`),$(`BKNodePlacer`,n,e,()=>new wa().process(e))),n?.afterPhase?.(`BK`,e),e.getLayerlessNodes().length>0&&e.hasProperty(p)&&$(`NodePlacementRepeater`,n,e,()=>Td(e)),$(`LayerSizeAndGraphHeightCalculator`,n,e,()=>new Ba().process(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortPositionProcessor`,n,e,()=>Bf(e));let o=e.getProperty(s);if(o===`POLYLINE`?$(`PolylineEdgeRouter`,n,e,()=>new rs().process(e)):o===`SPLINES`?$(`SplineEdgeRouter`,n,e,()=>new Bs().process(e)):(o!==`ORTHOGONAL`&&o!=null&&fg(`edgeRouting`,String(o),`ORTHOGONAL`),$(`OrthogonalEdgeRouter`,n,e,()=>new wo().process(e))),n?.afterPhase?.(`P5`,e),(e.getProperty(Et)||e.getProperty(fe))&&$(`ConstraintsPostprocessor`,n,e,()=>Nu(e)),e.getProperty(w).has(`HYPERNODES`)&&$(`HypernodesProcessor`,n,e,()=>Pu(e)),$(`LongEdgeJoiner`,n,e,()=>oi(e)),i&&$(`SelfLoopPostprocessor`,n,e,()=>op(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointRemover`,n,e,()=>nf(e)),e.getProperty(w).has(`NON_FREE_PORTS`)&&e.getProperty(w).has(`NORTH_SOUTH_PORTS`)&&$(`NorthSouthPortPostprocessor`,n,e,()=>Yp(e)),e.getProperty(Mn)!==`NONE`&&e.getProperty(s)!==`POLYLINE`&&$(`HorizontalGraphCompactor`,n,e,()=>new es().process(e)),$(`LabelDummyRemover`,n,e,()=>ci(e)),o===`SPLINES`&&$(`FinalSplineBendpointsCalculator`,n,e,()=>Ws(e)),e.getProperty(w).has(`COMMENTS`)&&$(`CommentPostprocessor`,n,e,()=>sm(e)),$(`EndLabelSorter`,n,e,()=>ah(e)),$(`ReversedEdgeRestorer`,n,e,()=>of(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortOrthogonalEdgeRouter`,n,e,()=>Hf(e)),e.getProperty(w).has(`END_LABELS`)&&$(`EndLabelPostprocessor`,n,e,()=>ph(e)),!r){$(`GraphTransformer(out)`,n,e,()=>new Dm(`TO_INTERNAL_LTR`).process(e));for(let t of e.getLayers())for(let n of t.getNodes())Dc(n),e.getProperty(w).has(`COMMENTS`)&&am(n)}}function eg(e){let t=e.getParentNode();if(t===null)return;let n=e.getProperty(S);if(n!==`DOWN`&&n!==`UP`)return;let r=t.getGraph()?.getProperty(S);if(r!==`RIGHT`&&r!==`UNDEFINED`)return;let i=t.size.x;t.size.x=t.size.y,t.size.y=i;let a=t.getPadding(),o=a.left;a.left=a.top,a.top=o;let s=a.right;a.right=a.bottom,a.bottom=s}function tg(e){let t=e.getParentNode();return t!==null&&t.getProperty(mn)===`SEPARATE_CHILDREN`}function ng(e,t,n){let r=Yh(e);sg(e,r);for(let e of r)if(e.getProperty(P)===void 0){let t=e.getProperty(me);e.setProperty(P,t===0?new $n:new $n(t))}for(let e of r)gg(e)||Qh(e,t,n);let i=r[r.length-1],a=i.getProperty(be);a===`INTERACTIVE`?($(`InteractiveCrossingMinimizer`,n,i,()=>new ua().process(i)),n?.afterPhase?.(`P3`,i)):a===`MEDIAN_LAYER_SWEEP`?($(`LayerSweepCrossingMinimizer`,n,i,()=>new la(3).process(i,t)),n?.afterPhase?.(`P3`,i)):($(`LayerSweepCrossingMinimizer`,n,i,()=>new la(0).process(i,t)),n?.afterPhase?.(`P3`,i));let o=/* @__PURE__ */ new Set;for(let e of r){if(gg(e))continue;$h(e,t,n,!0);let r=e.getParentNode();if(r!==null&&Zh(r,!0),tg(e)){$(`GraphTransformer(out)`,n,e,()=>new Dm(`TO_INTERNAL_LTR`).process(e)),eg(e);for(let t of e.getLayers())for(let e of t.getNodes())Dc(e);o.add(e)}}for(let e of r)if(!o.has(e)){$(`GraphTransformer(out)`,n,e,()=>new Dm(`TO_INTERNAL_LTR`).process(e)),eg(e);for(let t of e.getLayers())for(let e of t.getNodes())Dc(e)}let s=e.getOffset(),c=e.getPadding();for(let t of e.getAllNodes())t.position.x+=s.x+c.left,t.position.y+=s.y+c.top;let l=s.x+c.left,u=s.y+c.top;if(l!==0||u!==0){let t=/* @__PURE__ */ new Set;for(let n of e.getAllNodes())for(let e of n.getPorts())for(let n of e.getConnectedEdges())if(!t.has(n)){t.add(n);for(let e of n.getBendPoints())e.x+=l,e.y+=u}}n?.afterPhase?.(`done`,e)}function rg(e){let t=e.getProperty(S);for(let n of e.getLayerlessNodes()){let e=n.getNestedGraph();if(e!==null){if(e.getProperty(S)===`UNDEFINED`){let r=n.getProperty(`org.eclipse.elk.hierarchyHandling`),i=n.getProperty(`org.eclipse.elk.direction`);r===`SEPARATE_CHILDREN`&&i!==void 0&&i!==`UNDEFINED`?e.setProperty(S,i):t!==`UNDEFINED`&&e.setProperty(S,t)}rg(e)}}}function ig(e){for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();if(e!==null){if(e.getProperty(O)===`UNDEFINED`){let n=t.getProperty(O);n!==`UNDEFINED`&&e.setProperty(O,n)}ig(e)}}}const ag=[be,De,Qt,_e,Et,Je,s,oe,me,r,Kt,N,Zt,kn,n,wt,an,_n,dn,Ot,Yn];function og(e){for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();if(e!==null){for(let n of ag)t.hasProperty(n)&&e.setProperty(n,t.getProperty(n));og(e)}}}function sg(e,t){let n=e.getProperty(be);for(let r of t){if(r===e)continue;let t=r.getProperty(be);if(t!==n){let e=r.getParentNode()?.id??`G-unlayered`;throw Error(`UnsupportedGraphException: The hierarchy aware processor `+t+` in child node `+e+` is only allowed if the root node specifies the same hierarchical processor.`)}}}function cg(e){let t=[e];for(;t.length>0;){let e=t.pop(),n=e.getProperty(S)===`UNDEFINED`?`RIGHT`:e.getProperty(S);for(let t of e.getAllNodes()){let e=t.getProperty(O);if(D.isSideFixed(e))for(let r of t.getPorts())gc(r,e,n)}for(let n of e.getLayerlessNodes()){let e=n.getNestedGraph();e!==null&&t.push(e)}}}function lg(e,t,n){if(rg(e),og(e),mg&&ig(e),cg(e),$(`CompoundGraphPreprocessor`,n,e,()=>new Mc().process(e)),e.getProperty(mn)===`INCLUDE_CHILDREN`){ng(e,t,n),$(`CompoundGraphPostprocessor`,n,e,()=>Yl(e));return}let r=Yh(e);for(let e of r)if(!gg(e)&&(e.getLayers().length===0||e.getLayerlessNodes().length>0)){ug(e,t,n);let r=e.getParentNode();if(r!==null&&e.getProperty(w).has(`EXTERNAL_PORTS`)&&e.getSize().x===0&&e.getAllNodes().some(e=>e.getType()===`EXTERNAL_PORT`)){let t=[],n=/* @__PURE__ */ new Set;for(let r of e.getAllNodes())n.has(r)||(n.add(r),t.push(r));let i=/* @__PURE__ */ new Set,a=e=>{let t=[e];for(;t.length>0;){let e=t.pop();if(!i.has(e)){i.add(e);for(let n of e.getPorts())for(let e of n.getConnectedPorts()){let n=e.getNode();n!==null&&!i.has(n)&&t.push(n)}}}},o=0;for(let e of t)i.has(e)||(a(e),o++);let s=/* @__PURE__ */ new Set;for(let e of t){let t=e.getProperty(L);t instanceof H&&s.add(t)}for(let e of r.getPorts())s.has(e)||o++;e.getSize().x=o>1?e.getProperty(je):-e.getProperty(je)}r!==null&&mg&&e.getProperty(w).has(`EXTERNAL_PORTS`)&&Hf(e),r!==null&&(Zh(r,!1),eg(e))}$(`CompoundGraphPostprocessor`,n,e,()=>Yl(e))}function $(e,t,n,r){t?.beforeModule?.(e,n),r(),t?.afterModule?.(e,n)}function ug(e,t,n){if(e.getProperty(P)===void 0){let t=e.getProperty(me);e.setProperty(P,t===0?new $n:new $n(t))}let i=e.getProperty(_e)||e.getProperty(be)===`INTERACTIVE`,a=e.getProperty(r),o=e.getProperty(Kt),s=e.getLayerlessNodes().length,c=!i&&a!==`OFF`&&(o===0||o>s);e.setProperty(pe,c);let l=new Gl().split(e);if(l.length===1)pg(e,t,n);else{for(let e of l){pg(e,t,n,!1);for(let t of e.getLayers()){for(let n of[...t.getNodes()])e.getLayerlessNodes().includes(n)||e.getLayerlessNodes().push(n),n.setLayer(null);t.getNodes().length=0}e.getLayers().length=0,ql(e)}new Gl().combine(l,e),n?.afterPhase?.(`combine`,e);let r=e.getOffset(),i=e.getPadding(),a=r.x+i.left,o=r.y+i.top,s=/* @__PURE__ */ new Set;for(let t of e.getLayerlessNodes()){t.position.x+=a,t.position.y+=o;for(let e of t.getPorts())for(let t of e.getConnectedEdges())if(!s.has(t)){s.add(t);for(let e of t.getBendPoints())e.x+=a,e.y+=o}}}}const dg=/* @__PURE__ */ new Set;function fg(e,t,n){let r=`${e}=${t}`;dg.has(r)||(dg.add(r),console.warn(`[ggn] 未实现策略 ${e}=${t},降级为 ${n}(与 ELK 不一致,待移植/显式降级)`))}function pg(e,t,n,r=!0){let i=e.getProperty(S)===`UNDEFINED`?`RIGHT`:e.getProperty(S);for(let t of e.getAllNodes()){let e=t.getProperty(O);if(D.isSideFixed(e))for(let n of t.getPorts())gc(n,e,i)}let a=e.getProperty(w),o=e.getProperty(S),c=o===`UNDEFINED`?`RIGHT`:o;for(let t of e.getLayerlessNodes()){let n=t.getProperty(O);n!==`FREE`&&n!==`UNDEFINED`&&a.add(`NON_FREE_PORTS`),t.getProperty(it)&&(a.add(`HYPERNODES`),a.add(`HYPEREDGES`),t.setProperty(O,`FREE`)),kh(e);for(let e of t.getPorts()){let n=e.getSide();(c===`RIGHT`||c===`LEFT`?n===`NORTH`||n===`SOUTH`:n===`EAST`||n===`WEST`)&&a.add(`NORTH_SOUTH_PORTS`),e.getIncomingEdges().length+e.getOutgoingEdges().length>1&&a.add(`HYPEREDGES`);for(let n of e.getOutgoingEdges()){n.getTarget()!==null&&n.getTarget().getNode()===t&&a.add(`SELF_LOOPS`);for(let e of n.getLabels())e.placement===`HEAD`||e.placement===`TAIL`?a.add(`END_LABELS`):a.add(`CENTER_LABELS`)}}}$(`GraphTransformer(in)`,n,e,()=>new Dm(`TO_INPUT_DIRECTION`).process(e));for(let t of e.getAllNodes())t.hasProperty(tn)||t.setProperty(tn,t.getProperty(O));(e.getProperty(gt)===null||e.getProperty(gt)===void 0)&&e.setProperty(gt,e.getProperty(s)===`ORTHOGONAL`),e.getProperty(w).has(`COMMENTS`)&&$(`CommentPreprocessor`,n,e,()=>tm(e)),e.getProperty(Qt)!==`INTERACTIVE`&&$(`EdgeAndLayerConstraintEdgeReverser`,n,e,()=>new mr().process(e));let l=e.getProperty(w).has(`SELF_LOOPS`);l&&$(`SelfLoopPreprocessor`,n,e,()=>Mf(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionPreprocessor`,n,e,()=>wh(e)),(e.getProperty(De)===`INTERACTIVE`||e.getProperty(Qt)===`INTERACTIVE`)&&$(`InteractiveExternalPortPositioner`,n,e,()=>Dd(e));let u=e.getProperty(De);u===`MODEL_ORDER`?$(`ModelOrderCycleBreaker`,n,e,()=>fr(e,t)):u===`GREEDY_MODEL_ORDER`?$(`GreedyModelOrderCycleBreaker`,n,e,()=>new pr().process(e,t)):u===`DEPTH_FIRST`?$(`DepthFirstCycleBreaker`,n,e,()=>new ou().process(e,t)):u===`SCC_CONNECTIVITY`?$(`SCConnectivity`,n,e,()=>new du().process(e,t)):u===`SCC_NODE_TYPE`?$(`SCCNodeTypeCycleBreaker`,n,e,()=>new mu().process(e,t)):u===`DFS_NODE_ORDER`?$(`DFSNodeOrderCycleBreaker`,n,e,()=>new cu().process(e,t)):u===`BFS_NODE_ORDER`?$(`BFSNodeOrderCycleBreaker`,n,e,()=>new su().process(e,t)):u===`INTERACTIVE`?$(`InteractiveCycleBreaker`,n,e,()=>lr(e)):$(`GreedyCycleBreaker`,n,e,()=>new sr().process(e,t)),n?.afterPhase?.(`P1`,e),$(`LabelDummyInserter`,n,e,()=>Mr(e)),$(`LayerConstraintPreprocessor`,n,e,()=>new $l().process(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionMidprocessor`,n,e,()=>Eh(e));let d=e.getProperty(Qt);d===`INTERACTIVE`?$(`InteractiveLayerer`,n,e,()=>iu(e,t)):d===`LONGEST_PATH_SOURCE`?$(`LongestPathSourceLayerer`,n,e,()=>new Tr().process(e,t)):d===`LONGEST_PATH`||d===`LONGEST_PATH_SINK`?$(`LongestPathLayerer`,n,e,()=>new wr().process(e,t)):d===`COFFMAN_GRAHAM`?$(`CoffmanGrahamLayerer`,n,e,()=>new gu().process(e,t)):d===`BF_MODEL_ORDER`?$(`BreadthFirstModelOrderLayerer`,n,e,()=>new _u().process(e,t)):d===`DF_MODEL_ORDER`?$(`DepthFirstModelOrderLayerer`,n,e,()=>new vu().process(e,t)):d===`MIN_WIDTH`?$(`MinWidthLayerer`,n,e,()=>new yu().process(e,t)):d===`STRETCH_WIDTH`?$(`StretchWidthLayerer`,n,e,()=>new bu().process(e,t)):$(`NetworkSimplexLayerer`,n,e,()=>new Cr().process(e,t)),n?.afterPhase?.(`P2`,e),e.getProperty(tt)&&$(`HighDegreeNodeLayeringProcessor`,n,e,()=>Ah(e)),e.getProperty(yt)!==`NONE`&&$(`NodePromotion`,n,e,()=>new di().process(e,t)),$(`LayerConstraintPostprocessor`,n,e,()=>eu(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionPostprocessor`,n,e,()=>Oh(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointInserter`,n,e,()=>Bd(e)),$(`LongEdgeSplitter`,n,e,()=>Er(e)),$(`PortSideProcessor`,n,e,()=>_c(e));let f=e.getProperty(s);(f===`POLYLINE`||f===`SPLINES`||f===`ORTHOGONAL`&&(e.getProperty(w).has(`NON_FREE_PORTS`)||e.getProperty(ne)||e.getProperty(w).has(`HYPEREDGES`)))&&$(`InvertedPortProcessor`,n,e,()=>$p(e)),l&&$(`DummySelfLoopProcessor`,n,e,()=>Gp(e)),$(`PortListSorter`,n,e,()=>gf(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortConstraintProcessor`,n,e,()=>new zf().process(e)),e.getProperty(_e)&&$(`SemiInteractiveCrossMinProcessor`,n,e,()=>Ch(e)),e.getProperty(Ce)!==`NONE`&&$(`SortByInputModel`,n,e,()=>yh(e)),e.getProperty(w).has(`NON_FREE_PORTS`)&&e.getProperty(w).has(`NORTH_SOUTH_PORTS`)&&$(`NorthSouthPortPreprocessor`,n,e,()=>xf(e));let m=e.getProperty(be),h=e.getProperty(pe);m===`INTERACTIVE`?($(`InteractiveCrossingMinimizer`,n,e,()=>new ua().process(e)),n?.afterPhase?.(`P3`,e)):m===`MEDIAN_LAYER_SWEEP`?($(`LayerSweepCrossingMinimizer`,n,e,()=>new la(3).process(e,t)),n?.afterPhase?.(`P3`,e)):m!==`NONE`&&($(`LayerSweepCrossingMinimizer`,n,e,()=>new la(0).process(e,t)),n?.afterPhase?.(`P3`,e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointProcessor`,n,e,()=>qd(e)),h&&($(`GreedySwitchHeuristic`,n,e,()=>new la(2).process(e,t)),n?.afterPhase?.(`GreedySwitch`,e)),e.setProperty(Rn,new ka(e)),l&&$(`SelfLoopPortRestorer`,n,e,()=>new gp().process(e)),$(`InLayerConstraintProcessor`,n,e,()=>ap(e)),$(`LabelAndNodeSizeProcessor`,n,e,()=>bd(e)),$(`NodeMarginCalculator`,n,e,()=>Ec(e)),e.getProperty(w).has(`COMMENTS`)&&$(`CommentNodeMarginCalculator`,n,e,()=>im(e)),e.getProperty(w).has(`END_LABELS`)&&$(`EndLabelPreprocessor`,n,e,()=>Am(e)),e.getProperty(w).has(`CENTER_LABELS`)&&$(`LabelDummySwitcher`,n,e,()=>Rr(e)),(e.getProperty(w).has(`END_LABELS`)||e.getProperty(w).has(`CENTER_LABELS`))&&$(`LabelSideSelector`,n,e,()=>Wm(e)),e.getProperty(w).has(`HYPEREDGES`)&&e.getProperty(s)!==`SPLINES`&&$(`HyperedgeDummyMerger`,n,e,()=>new hr().process(e)),$(`HierarchicalPortDummySizeProcessor`,n,e,()=>If(e)),l&&$(`SelfLoopRouter`,n,e,()=>Up(e)),e.getProperty(pn)===`ALTERNATING`&&$(`AlternatingLayerUnzipper`,n,e,()=>Lh(e));let g=e.getProperty(zn);g===`SIMPLE`?$(`SimpleNodePlacer`,n,e,()=>Ta(e)):g===`INTERACTIVE`?$(`InteractiveNodePlacer`,n,e,()=>Ea(e)):g===`NETWORK_SIMPLEX`?$(`NetworkSimplexPlacer`,n,e,()=>new za().process(e)):g===`LINEAR_SEGMENTS`?$(`LinearSegmentsNodePlacer`,n,e,()=>Cu(e)):(g!==`BRANDES_KOEPF`&&fg(`nodePlacement.strategy`,String(g),`BRANDES_KOEPF`),$(`BKNodePlacer`,n,e,()=>new wa().process(e))),n?.afterPhase?.(`BK`,e),e.getLayerlessNodes().length>0&&e.hasProperty(p)&&$(`NodePlacementRepeater`,n,e,()=>Td(e)),$(`LayerSizeAndGraphHeightCalculator`,n,e,()=>new Ba().process(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortPositionProcessor`,n,e,()=>Bf(e));let _=e.getProperty(s);_===`POLYLINE`?$(`PolylineEdgeRouter`,n,e,()=>new rs().process(e)):_===`SPLINES`?$(`SplineEdgeRouter`,n,e,()=>new Bs().process(e)):(_!==`ORTHOGONAL`&&_!=null&&fg(`edgeRouting`,String(_),`ORTHOGONAL`),$(`OrthogonalEdgeRouter`,n,e,()=>new wo().process(e))),n?.afterPhase?.(`P5`,e),(e.getProperty(Et)||e.getProperty(fe))&&$(`ConstraintsPostprocessor`,n,e,()=>Nu(e)),e.getProperty(w).has(`HYPERNODES`)&&$(`HypernodesProcessor`,n,e,()=>Pu(e)),$(`LongEdgeJoiner`,n,e,()=>oi(e)),l&&$(`SelfLoopPostprocessor`,n,e,()=>op(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointRemover`,n,e,()=>nf(e)),e.getProperty(w).has(`NON_FREE_PORTS`)&&e.getProperty(w).has(`NORTH_SOUTH_PORTS`)&&$(`NorthSouthPortPostprocessor`,n,e,()=>Yp(e)),e.getProperty(Mn)!==`NONE`&&e.getProperty(s)!==`POLYLINE`&&$(`HorizontalGraphCompactor`,n,e,()=>new es().process(e)),$(`LabelDummyRemover`,n,e,()=>ci(e)),_===`SPLINES`&&$(`FinalSplineBendpointsCalculator`,n,e,()=>Ws(e)),e.getProperty(w).has(`COMMENTS`)&&$(`CommentPostprocessor`,n,e,()=>sm(e)),$(`EndLabelSorter`,n,e,()=>ah(e)),$(`ReversedEdgeRestorer`,n,e,()=>of(e)),e.getProperty(w).has(`END_LABELS`)&&$(`EndLabelPostprocessor`,n,e,()=>ph(e)),$(`GraphTransformer(out)`,n,e,()=>new Dm(`TO_INTERNAL_LTR`).process(e));let v=e.getProperty(S);if(v!==`RIGHT`&&v!==`UNDEFINED`)for(let t of e.getLayers())for(let n of t.getNodes())Dc(n),e.getProperty(w).has(`COMMENTS`)&&am(n);if(r){let t=e.getOffset(),n=e.getPadding(),r=t.x+n.left,i=t.y+n.top,a=/* @__PURE__ */ new Set;for(let t of e.getAllNodes())if(t.getType()!==`EXTERNAL_PORT`){t.position.x+=r,t.position.y+=i;for(let e of t.getPorts())for(let t of e.getConnectedEdges())if(!a.has(t)){a.add(t);for(let e of t.getBendPoints())e.x+=r,e.y+=i}}}n?.afterPhase?.(`done`,e)}const mg=!0;function hg(e){for(let t of Yh(e))for(let e of t.getLayerlessNodes()){let n=e.getNestedGraph();if(n===null)continue;let r=e.getProperty(He);if(!r||r.length===0)continue;let i=e.getProperty(O);if(!D.isSideFixed(i)){let n=t.getProperty(S)===`UNDEFINED`?`RIGHT`:t.getProperty(S);for(let t of e.getPorts())t.getSide()===`UNDEFINED`&&yc(t,!1,n)}let a=sd(e,t,!0)??{x:e.size.x,y:e.size.y},o=n.getProperty(x)??{x:0,y:0},s=e.getProperty(x)??{x:0,y:0},c={x:Math.max(o.x,s.x),y:Math.max(o.y,s.y)};n.setProperty(x,{x:Math.max(c.x,a.x),y:Math.max(c.y,a.y)});let l=n.getProperty(He);l.includes(`MINIMUM_SIZE`)||n.setProperty(He,[...l,`MINIMUM_SIZE`])}}function gg(e){let t=e.getParentNode();return t!==null&&t.getProperty(`org.eclipse.elk.algorithm`)===`fixed`}function _g(e){let t=/* @__PURE__ */ new Set,n=e=>{let r=e.getProperty(`org.eclipse.elk.algorithm`);if(r&&t.has(r))throw Error(`Layout algorithm '${r}' not found`);let i=e.getNestedGraph();if(i!==null)for(let e of i.getLayerlessNodes())n(e)};for(let t of e.getLayerlessNodes())n(t)}var vg=class{hooks;setHooks(e){this.hooks=e}layout(e,t){let n=t??new Jh;_g(e),Kh(e),qh(e),rg(e),cg(e),hg(e),em(e)&&e.getProperty(w).add(`COMMENTS`),e.getLayerlessNodes().filter(e=>e.getNestedGraph()!==null).length>0?lg(e,n,this.hooks):ug(e,n,this.hooks),bg(e),yg(e)}};function yg(e){for(let t of e.getAllNodes()){t.getNestedGraph()!==null&&yg(t.getNestedGraph());let e=t.hasProperty(He)?t.getProperty(He):t.getGraph()?.getProperty(He)??[];if(!e.includes(`NODE_LABELS`)||e.includes(`PORTS`)||e.includes(`PORT_LABELS`)||e.includes(`MINIMUM_SIZE`)||t.getNestedGraph()!==null)continue;let n=t.getLabels();if(n.length===0)continue;let r=0,i=0;for(let e of n)r=Math.max(r,e.size.x),i=Math.max(i,e.size.y);if(r>0||i>0||t.size.x===0&&t.size.y===0)continue;let a={x:t.size.x,y:t.size.y};t.size.x=0,t.size.y=0,t.position.x+=a.x/2,t.position.y+=a.y/2;for(let e of n)e.position.x=0,e.position.y=0}}function bg(e){for(let t of e.getAllNodes()){t.getNestedGraph()!==null&&bg(t.getNestedGraph());let e=t.hasProperty(Nt)?t.getProperty(Nt):t.getGraph()?.getProperty(Nt)??{left:0,right:0,top:0,bottom:0},n=e.left??0,r=e.right??0,i=Tc(t);for(let e of t.getLabels()){let a=e.placement??t.getProperty(N)??``,o=Array.isArray(a)?a:String(a).split(/[\s,]+/).filter(Boolean);if(o.includes(`OUTSIDE`)){let n=o.includes(`H_PRIORITY`),r=o.includes(`H_LEFT`)||o.includes(`H_RIGHT`);n&&r||!n&&o.includes(`V_CENTER`)&&r?(o.includes(`H_RIGHT`)?e.position.x=t.size.x+i:e.position.x=-e.size.x-i,o.includes(`V_BOTTOM`)?e.position.y=t.size.y-e.size.y:o.includes(`V_CENTER`)?e.position.y=(t.size.y-e.size.y)/2:e.position.y=0):(o.includes(`V_BOTTOM`)?e.position.y=t.size.y+i:e.position.y=-e.size.y-i,o.includes(`H_RIGHT`)?e.position.x=t.size.x-e.size.x:o.includes(`H_LEFT`)?e.position.x=0:e.position.x=(t.size.x-e.size.x)/2)}else o.includes(`H_LEFT`)?e.position.x=n:o.includes(`H_RIGHT`)?e.position.x=t.size.x-e.size.x-r:e.position.x=n+(t.size.x-n-r-e.size.x)/2}}}function xg(e,t,n){switch(n){case`WEST`:e.x=0,e.y=t.y/2;break;case`EAST`:e.x=t.x,e.y=t.y/2;break;case`NORTH`:e.x=t.x/2,e.y=0;break;case`SOUTH`:e.x=t.x/2,e.y=t.y;break;default:e.x=t.x/2,e.y=t.y/2}}function Sg(e,t,n){let r=t===`INPUT`?nt:It;for(let t of e.getPorts())if(t.getProperty(r)===!0)return t;let i=new H;return i.setProperty(r,!0),i.setNode(e),i.setSide(n),xg(i.getPosition(),e.getSize(),n),i}function Cg(e,t,n,r,i){if(r&&!i)return Sg(e,t,t===`OUTPUT`?n:wg(n));let a=new H;return a.setNode(e),a.setSide(t===`OUTPUT`?n:wg(n)),a}function wg(e){switch(e){case`NORTH`:return`SOUTH`;case`SOUTH`:return`NORTH`;case`EAST`:return`WEST`;case`WEST`:return`EAST`;default:return`UNDEFINED`}}const Tg={direction:{ggn:`org.eclipse.elk.direction`,elkjs:`elk.direction`,type:`str`},position:{ggn:`org.eclipse.elk.position`,elkjs:`elk.position`,type:`str`},edgeRouting:{ggn:`org.eclipse.elk.edgeRouting`,elkjs:`elk.edgeRouting`,type:`str`},"spacing.nodeNode":{ggn:`org.eclipse.elk.spacing.nodeNode`,elkjs:`elk.spacing.nodeNode`,type:`num`},"spacing.edgeEdge":{ggn:`org.eclipse.elk.spacing.edgeEdge`,elkjs:`elk.spacing.edgeEdge`,type:`num`},"spacing.nodeSelfLoop":{ggn:`org.eclipse.elk.spacing.nodeSelfLoop`,elkjs:`elk.spacing.nodeSelfLoop`,type:`num`},"spacing.portPort":{ggn:`org.eclipse.elk.spacing.portPort`,elkjs:`elk.spacing.portPort`,type:`num`},"spacing.edgeNode":{ggn:`org.eclipse.elk.spacing.edgeNode`,elkjs:`elk.spacing.edgeNode`,type:`num`},"spacing.edgeLabel":{ggn:`org.eclipse.elk.spacing.edgeLabel`,elkjs:`elk.spacing.edgeLabel`,type:`num`},"spacing.labelLabel":{ggn:`org.eclipse.elk.spacing.labelLabel`,elkjs:`elk.spacing.labelLabel`,type:`num`},"spacing.labelNode":{ggn:`org.eclipse.elk.spacing.labelNode`,elkjs:`elk.spacing.labelNode`,type:`num`},"spacing.edgeEdgeBetweenLayers":{ggn:`org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers`,elkjs:`elk.layered.spacing.edgeEdgeBetweenLayers`,type:`num`},"spacing.nodeNodeBetweenLayers":{ggn:`org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers`,elkjs:`elk.layered.spacing.nodeNodeBetweenLayers`,type:`num`},"spacing.edgeNodeBetweenLayers":{ggn:`org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers`,elkjs:`elk.layered.spacing.edgeNodeBetweenLayers`,type:`num`},"crossingMinimization.strategy":{ggn:`org.eclipse.elk.layered.crossingMinimization.strategy`,elkjs:`elk.layered.crossingMinimization.strategy`,type:`str`},"crossingMinimization.greedySwitch.type":{ggn:`org.eclipse.elk.layered.crossingMinimization.greedySwitch.type`,elkjs:`elk.layered.crossingMinimization.greedySwitch.type`,type:`str`},"cycleBreaking.strategy":{ggn:`org.eclipse.elk.layered.cycleBreaking.strategy`,elkjs:`elk.layered.cycleBreaking.strategy`,type:`str`},"layering.strategy":{ggn:`org.eclipse.elk.layered.layering.strategy`,elkjs:`elk.layered.layering.strategy`,type:`str`},"nodePlacement.strategy":{ggn:`org.eclipse.elk.layered.nodePlacement.strategy`,elkjs:`elk.layered.nodePlacement.strategy`,type:`str`},"considerModelOrder.strategy":{ggn:`org.eclipse.elk.layered.considerModelOrder.strategy`,elkjs:`elk.layered.considerModelOrder.strategy`,type:`str`},mergeEdges:{ggn:`org.eclipse.elk.layered.mergeEdges`,elkjs:`elk.layered.mergeEdges`,type:`bool`},mergeHierarchyEdges:{ggn:`org.eclipse.elk.layered.mergeHierarchyEdges`,elkjs:`elk.layered.mergeHierarchyEdges`,type:`bool`},feedbackEdges:{ggn:`org.eclipse.elk.layered.feedbackEdges`,elkjs:`elk.layered.feedbackEdges`,type:`bool`},thoroughness:{ggn:`org.eclipse.elk.layered.thoroughness`,elkjs:`elk.layered.thoroughness`,type:`num`},randomSeed:{ggn:`org.eclipse.elk.randomSeed`,elkjs:`elk.randomSeed`,type:`num`},separateConnectedComponents:{ggn:`org.eclipse.elk.separateConnectedComponents`,elkjs:`elk.separateConnectedComponents`,type:`bool`},hierarchyHandling:{ggn:`org.eclipse.elk.hierarchyHandling`,elkjs:`elk.hierarchyHandling`,type:`str`},portConstraints:{ggn:`org.eclipse.elk.portConstraints`,elkjs:`elk.portConstraints`,type:`str`},"insideSelfLoops.activate":{ggn:`org.eclipse.elk.insideSelfLoops.activate`,elkjs:`elk.insideSelfLoops.activate`,type:`bool`},generatePositionAndLayerIds:{ggn:`org.eclipse.elk.layered.generatePositionAndLayerIds`,elkjs:`elk.layered.generatePositionAndLayerIds`,type:`bool`},"nodeLabels.placement":{ggn:`org.eclipse.elk.nodeLabels.placement`,elkjs:`elk.nodeLabels.placement`,type:`enumset`,values:[`H_LEFT`,`H_CENTER`,`H_RIGHT`,`V_TOP`,`V_CENTER`,`V_BOTTOM`,`INSIDE`,`OUTSIDE`,`H_PRIORITY`]},"portLabels.placement":{ggn:`org.eclipse.elk.portLabels.placement`,elkjs:`elk.portLabels.placement`,type:`enumset`,values:[`OUTSIDE`,`INSIDE`,`NEXT_TO_PORT_IF_POSSIBLE`,`ALWAYS_SAME_SIDE`,`ALWAYS_OTHER_SAME_SIDE`,`SPACE_EFFICIENT`]},allowNonFlowPortsToSwitchSides:{ggn:`org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides`,elkjs:`elk.layered.allowNonFlowPortsToSwitchSides`,type:`bool`},directionCongruency:{ggn:`org.eclipse.elk.layered.directionCongruency`,elkjs:`elk.layered.directionCongruency`,type:`str`},portSortingStrategy:{ggn:`org.eclipse.elk.layered.portSortingStrategy`,elkjs:`elk.portSortingStrategy`,type:`str`},aspectRatio:{ggn:`org.eclipse.elk.aspectRatio`,elkjs:`elk.aspectRatio`,type:`num`},"edgeRouting.selfLoopDistribution":{ggn:`org.eclipse.elk.layered.edgeRouting.selfLoopDistribution`,elkjs:`elk.layered.edgeRouting.selfLoopDistribution`,type:`str`},"edgeRouting.selfLoopOrdering":{ggn:`org.eclipse.elk.layered.edgeRouting.selfLoopOrdering`,elkjs:`elk.layered.edgeRouting.selfLoopOrdering`,type:`str`},"nodePlacement.bk.fixedAlignment":{ggn:`org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment`,elkjs:`elk.layered.nodePlacement.bk.fixedAlignment`,type:`str`},"nodePlacement.bk.edgeStraightening":{ggn:`org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening`,elkjs:`elk.layered.nodePlacement.bk.edgeStraightening`,type:`str`},"layering.nodePromotion.strategy":{ggn:`org.eclipse.elk.layered.layering.nodePromotion.strategy`,elkjs:`elk.layered.layering.nodePromotion.strategy`,type:`str`},"considerModelOrder.portModelOrder":{ggn:`org.eclipse.elk.layered.considerModelOrder.portModelOrder`,elkjs:`elk.layered.considerModelOrder.portModelOrder`,type:`bool`},"edgeLabels.placement":{ggn:`org.eclipse.elk.edgeLabels.placement`,elkjs:`elk.edgeLabels.placement`,type:`str`},"spacing.labelPort":{ggn:`org.eclipse.elk.spacing.labelPortHorizontal`,elkjs:`elk.spacing.labelPortHorizontal`,type:`num`},"insideSelfLoops.yo":{ggn:`org.eclipse.elk.insideSelfLoops.yo`,elkjs:`elk.insideSelfLoops.yo`,type:`bool`},"nodeSize.constraints":{ggn:`org.eclipse.elk.nodeSize.constraints`,elkjs:`elk.nodeSize.constraints`,type:`enumset`,values:[`PORTS`,`PORT_LABELS`,`NODE_LABELS`,`MINIMUM_SIZE`]},"nodeSize.minimum":{ggn:`org.eclipse.elk.nodeSize.minimum`,elkjs:`elk.nodeSize.minimum`,type:`str`},"nodeSize.options":{ggn:`org.eclipse.elk.nodeSize.options`,elkjs:`elk.nodeSize.options`,type:`str`},"nodeLabels.padding":{ggn:`org.eclipse.elk.nodeLabels.padding`,elkjs:`elk.nodeLabels.padding`,type:`object`},"nodeLabels.spacing":{ggn:`org.eclipse.elk.nodeLabels.spacing`,elkjs:`elk.nodeLabels.spacing`,type:`num`},layerConstraint:{ggn:`org.eclipse.elk.layered.layering.layerConstraint`,elkjs:`elk.layered.layering.layerConstraint`,type:`str`},"layering.layerConstraint":{ggn:`org.eclipse.elk.layered.layering.layerConstraint`,elkjs:`elk.layered.layering.layerConstraint`,type:`str`},"layering.layerChoiceConstraint":{ggn:`org.eclipse.elk.layered.layering.layerChoiceConstraint`,elkjs:`elk.layered.layering.layerChoiceConstraint`,type:`num`},"crossingMinimization.positionChoiceConstraint":{ggn:`org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint`,elkjs:`elk.layered.crossingMinimization.positionChoiceConstraint`,type:`num`},"crossingMinimization.semiInteractive":{ggn:`org.eclipse.elk.layered.crossingMinimization.semiInteractive`,elkjs:`elk.layered.crossingMinimization.semiInteractive`,type:`bool`},algorithm:{ggn:`org.eclipse.elk.algorithm`,elkjs:`elk.algorithm`,type:`str`},"partitioning.partition":{ggn:`org.eclipse.elk.partitioning.partition`,elkjs:`elk.partitioning.partition`,type:`num`},"spacing.portNode":{ggn:`org.eclipse.elk.spacing.portNode`,elkjs:`elk.spacing.portNode`,type:`num`},"portAlignment.default":{ggn:`org.eclipse.elk.portAlignment.default`,elkjs:`elk.portAlignment.default`,type:`str`},"portAlignment.west":{ggn:`org.eclipse.elk.portAlignment.west`,elkjs:`elk.portAlignment.west`,type:`str`},"portAlignment.east":{ggn:`org.eclipse.elk.portAlignment.east`,elkjs:`elk.portAlignment.east`,type:`str`},"portAlignment.north":{ggn:`org.eclipse.elk.portAlignment.north`,elkjs:`elk.portAlignment.north`,type:`str`},"portAlignment.south":{ggn:`org.eclipse.elk.portAlignment.south`,elkjs:`elk.portAlignment.south`,type:`str`},commentBox:{ggn:`org.eclipse.elk.commentBox`,elkjs:`elk.commentBox`,type:`bool`},desiredPosition:{ggn:`org.eclipse.elk.desiredPosition`,elkjs:`elk.desiredPosition`,type:`str`},interactiveLayout:{ggn:`org.eclipse.elk.interactiveLayout`,elkjs:`elk.interactiveLayout`,type:`bool`},padding:{ggn:`org.eclipse.elk.padding`,elkjs:`elk.padding`,type:`object`},noLayout:{ggn:`org.eclipse.elk.noLayout`,elkjs:`elk.noLayout`,type:`bool`},expandNodes:{ggn:`org.eclipse.elk.expandNodes`,elkjs:`elk.expandNodes`,type:`bool`},debugMode:{ggn:`org.eclipse.elk.debugMode`,elkjs:`elk.debugMode`,type:`bool`},alignment:{ggn:`org.eclipse.elk.alignment`,elkjs:`elk.alignment`,type:`str`},contentAlignment:{ggn:`org.eclipse.elk.contentAlignment`,elkjs:`elk.contentAlignment`,type:`enumset`,values:[`V_TOP`,`V_CENTER`,`V_BOTTOM`,`H_LEFT`,`H_CENTER`,`H_RIGHT`]},"spacing.portsSurrounding":{ggn:`org.eclipse.elk.spacing.portsSurrounding`,elkjs:`elk.spacing.portsSurrounding`,type:`object`},"spacing.individual":{ggn:`org.eclipse.elk.spacing.individual`,elkjs:`elk.spacing.individual`,type:`str`},"spacing.commentComment":{ggn:`org.eclipse.elk.spacing.commentComment`,elkjs:`elk.spacing.commentComment`,type:`num`},"spacing.commentNode":{ggn:`org.eclipse.elk.spacing.commentNode`,elkjs:`elk.spacing.commentNode`,type:`num`},"spacing.componentComponent":{ggn:`org.eclipse.elk.spacing.componentComponent`,elkjs:`elk.spacing.componentComponent`,type:`num`},"portLabels.treatAsGroup":{ggn:`org.eclipse.elk.portLabels.treatAsGroup`,elkjs:`elk.portLabels.treatAsGroup`,type:`bool`},"partitioning.activate":{ggn:`org.eclipse.elk.partitioning.activate`,elkjs:`elk.partitioning.activate`,type:`bool`},fixedAlignment:{ggn:`org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment`,elkjs:`elk.layered.nodePlacement.bk.fixedAlignment`,type:`str`},edgeStraightening:{ggn:`org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening`,elkjs:`elk.layered.nodePlacement.bk.edgeStraightening`,type:`str`},mode:{ggn:`org.eclipse.elk.layered.edgeRouting.splines.mode`,elkjs:`elk.layered.edgeRouting.splines.mode`,type:`str`},"postCompaction.strategy":{ggn:`org.eclipse.elk.layered.compaction.postCompaction.strategy`,elkjs:`elk.layered.compaction.postCompaction.strategy`,type:`str`},"compaction.connectedComponents":{ggn:`org.eclipse.elk.layered.compaction.connectedComponents`,elkjs:`elk.layered.compaction.connectedComponents`,type:`bool`},"edgeLabels.sideSelection":{ggn:`org.eclipse.elk.layered.edgeLabels.sideSelection`,elkjs:`elk.layered.edgeLabels.sideSelection`,type:`str`},"edgeLabels.centerLabelPlacementStrategy":{ggn:`org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy`,elkjs:`elk.layered.edgeLabels.centerLabelPlacementStrategy`,type:`str`},"highDegreeNodes.threshold":{ggn:`org.eclipse.elk.layered.highDegreeNodes.threshold`,elkjs:`elk.layered.highDegreeNodes.threshold`,type:`num`},"highDegreeNodes.treatment":{ggn:`org.eclipse.elk.layered.highDegreeNodes.treatment`,elkjs:`elk.layered.highDegreeNodes.treatment`,type:`bool`},"highDegreeNodes.treeHeight":{ggn:`org.eclipse.elk.layered.highDegreeNodes.treeHeight`,elkjs:`elk.layered.highDegreeNodes.treeHeight`,type:`num`},"considerModelOrder.components":{ggn:`org.eclipse.elk.layered.considerModelOrder.components`,elkjs:`elk.layered.considerModelOrder.components`,type:`str`},"considerModelOrder.longEdgeStrategy":{ggn:`org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy`,elkjs:`elk.layered.considerModelOrder.longEdgeStrategy`,type:`str`},"considerModelOrder.crossingCounterNodeInfluence":{ggn:`org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence`,elkjs:`elk.layered.considerModelOrder.crossingCounterNodeInfluence`,type:`num`},"crossingMinimization.greedySwitchHierarchical.type":{ggn:`org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type`,elkjs:`elk.layered.crossingMinimization.greedySwitchHierarchical.type`,type:`str`},"crossingMinimization.forceNodeModelOrder":{ggn:`org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder`,elkjs:`elk.layered.crossingMinimization.forceNodeModelOrder`,type:`bool`},nodeFlexibility:{ggn:`org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility`,elkjs:`elk.layered.nodePlacement.networkSimplex.nodeFlexibility`,type:`str`},"nodeFlexibility.default":{ggn:`org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default`,elkjs:`elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default`,type:`str`},portPort:{ggn:`org.eclipse.elk.spacing.portPort`,elkjs:`elk.spacing.portPort`,type:`num`},nodeNode:{ggn:`org.eclipse.elk.spacing.nodeNode`,elkjs:`elk.spacing.nodeNode`,type:`num`},minimum:{ggn:`org.eclipse.elk.nodeSize.minimum`,elkjs:`elk.nodeSize.minimum`,type:`str`},"greedySwitch.type":{ggn:`org.eclipse.elk.layered.crossingMinimization.greedySwitch.type`,elkjs:`elk.layered.crossingMinimization.greedySwitch.type`,type:`str`},positionChoiceConstraint:{ggn:`org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint`,elkjs:`elk.layered.crossingMinimization.positionChoiceConstraint`,type:`num`},sideSelection:{ggn:`org.eclipse.elk.layered.edgeLabels.sideSelection`,elkjs:`elk.layered.edgeLabels.sideSelection`,type:`str`},"nodeSize.fixedGraphSize":{ggn:`org.eclipse.elk.nodeSize.fixedGraphSize`,elkjs:`elk.nodeSize.fixedGraphSize`,type:`bool`},"topdown.hierarchicalNodeWidth":{ggn:`org.eclipse.elk.topdown.hierarchicalNodeWidth`,elkjs:`elk.topdown.hierarchicalNodeWidth`,type:`num`},"topdown.hierarchicalNodeAspectRatio":{ggn:`org.eclipse.elk.topdown.hierarchicalNodeAspectRatio`,elkjs:`elk.topdown.hierarchicalNodeAspectRatio`,type:`num`},"topdownpacking.nodeArrangement.strategy":{ggn:`org.eclipse.elk.topdownpacking.nodeArrangement.strategy`,elkjs:`elk.topdownpacking.nodeArrangement.strategy`,type:`str`},"topdownpacking.whitespaceElimination.strategy":{ggn:`org.eclipse.elk.topdownpacking.whitespaceElimination.strategy`,elkjs:`elk.topdownpacking.whitespaceElimination.strategy`,type:`str`},"vertiflex.verticalConstraint":{ggn:`org.eclipse.elk.vertiflex.verticalConstraint`,elkjs:`elk.vertiflex.verticalConstraint`,type:`num`},"vertiflex.layoutStrategy":{ggn:`org.eclipse.elk.vertiflex.layoutStrategy`,elkjs:`elk.vertiflex.layoutStrategy`,type:`str`},"vertiflex.layerDistance":{ggn:`org.eclipse.elk.vertiflex.layerDistance`,elkjs:`elk.vertiflex.layerDistance`,type:`num`},"vertiflex.considerNodeModelOrder":{ggn:`org.eclipse.elk.vertiflex.considerNodeModelOrder`,elkjs:`elk.vertiflex.considerNodeModelOrder`,type:`bool`},"overlapRemoval.maxIterations":{ggn:`org.eclipse.elk.overlapRemoval.maxIterations`,elkjs:`elk.overlapRemoval.maxIterations`,type:`num`},"overlapRemoval.runScanline":{ggn:`org.eclipse.elk.overlapRemoval.runScanline`,elkjs:`elk.overlapRemoval.runScanline`,type:`bool`},"processingOrder.treeConstruction":{ggn:`org.eclipse.elk.processingOrder.treeConstruction`,elkjs:`elk.processingOrder.treeConstruction`,type:`str`},"processingOrder.spanningTreeCostFunction":{ggn:`org.eclipse.elk.processingOrder.spanningTreeCostFunction`,elkjs:`elk.processingOrder.spanningTreeCostFunction`,type:`str`},"processingOrder.rootSelection":{ggn:`org.eclipse.elk.processingOrder.rootSelection`,elkjs:`elk.processingOrder.rootSelection`,type:`str`},"processingOrder.preferredRoot":{ggn:`org.eclipse.elk.processingOrder.preferredRoot`,elkjs:`elk.processingOrder.preferredRoot`,type:`str`},"compaction.compactionStrategy":{ggn:`org.eclipse.elk.compaction.compactionStrategy`,elkjs:`elk.compaction.compactionStrategy`,type:`str`},"compaction.orthogonal":{ggn:`org.eclipse.elk.compaction.orthogonal`,elkjs:`elk.compaction.orthogonal`,type:`bool`},"structure.structureExtractionStrategy":{ggn:`org.eclipse.elk.structure.structureExtractionStrategy`,elkjs:`elk.structure.structureExtractionStrategy`,type:`str`},underlyingLayoutAlgorithm:{ggn:`org.eclipse.elk.underlyingLayoutAlgorithm`,elkjs:`elk.underlyingLayoutAlgorithm`,type:`str`},interactiveReferencePoint:{ggn:`org.eclipse.elk.layered.interactiveReferencePoint`,elkjs:`elk.layered.interactiveReferencePoint`,type:`str`},considerModelOrder:{ggn:`org.eclipse.elk.layered.considerModelOrder.strategy`,elkjs:`elk.layered.considerModelOrder.strategy`,type:`str`},portAlignment:{ggn:`org.eclipse.elk.portAlignment.default`,elkjs:`elk.portAlignment.default`,type:`str`}};function Eg(e){return e.replace(/\\(['"\\])/g,(e,t)=>t)}function Dg(e,t){let n=t.trim();if((n.startsWith(`"`)&&n.endsWith(`"`)||n.startsWith(`'`)&&n.endsWith(`'`))&&(n=n.slice(1,-1)),e.type===`num`){let e=Number(n);return Number.isFinite(e)?e:void 0}if(e.type===`bool`)return n.toLowerCase()===`true`;if(e.type===`enumset`){let t=n.match(/^\[([^\]]*)\]$/),r=(t?t[1]:n).split(/[\s,]+/).map(e=>e.trim()).filter(Boolean);if(e.values){for(let t of r)if(!e.values.includes(t))return}return r}if(e.type===`object`){let e=n.match(/^\[([^\]]*)\]$/);if(e){let t={};for(let n of e[1].split(/[,;]/)){let e=n.split(`=`);if(e.length===2){let n=Number(e[1].trim());if(!Number.isFinite(n))return;t[e[0].trim()]=n}}return t}let t=n.match(/^\(([\d.]+)\s*,\s*([\d.]+)\)$/);return t?{x:Number(t[1]),y:Number(t[2])}:void 0}return Eg(n)}function Og(e,t){let n={},r=t instanceof Map?t.entries():Object.entries(t);for(let[t,i]of r){let r=e[t];if(r===void 0)continue;let a=[];for(let t of i){let n=e[t];n!==void 0&&a.push(n)}n[r]=a}return n}function kg(e,t,n=null,r=null,i=`EAST`,a=!1,o=!1){let s=(e,t,n)=>{if(n&&e.getProperty(O)!==`FIXED_SIDE`)return Cg(e,t===`OUTPUT`?`OUTPUT`:`INPUT`,(t===`OUTPUT`?i:Ag[i]??`WEST`)??`EAST`,!0,!1);let r=new H;return r.setNode(e),r.setSide(t===`OUTPUT`?i:Ag[i]??`WEST`),r},c=n!==null&&n<e.getPorts().length?e.getPorts()[n]:s(e,`OUTPUT`,a),l=r!==null&&r<t.getPorts().length?t.getPorts()[r]:s(t,`INPUT`,o),u=new U;return u.setSource(c),u.setTarget(l),u}const Ag={NORTH:`SOUTH`,SOUTH:`NORTH`,EAST:`WEST`,WEST:`EAST`};function jg(e,t){let n=e.split(`.`),r=t.split(`.`),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;return i===0?null:n.slice(0,i).join(`.`)}function Mg(e){return String(e).trim().toLowerCase().replace(/^org\.eclipse\.elk\./,``).replace(/^elk\./,``)}function Ng(e,t,n,r){let i=n(e),a=n(t);if(i===null&&a===null)return;let o=jg(e,t);if(o===null||!r(o)&&n(o)===null)throw Error(`UnsupportedGraphException: The source or the target of edge could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN.`)}function Pg(e,t){for(let[n,r]of Object.entries(t)){let t=Tg[n];if(!t)continue;let i=typeof r==`object`&&r&&!Array.isArray(r)?r:Dg(t,String(r));if(i!==void 0){if(t.ggn===`org.eclipse.elk.nodeSize.minimum`&&typeof i==`string`){let[e,t]=String(i).replace(/[()]/g,``).split(`,`).map(Number);i={x:e,y:t}}if(t.ggn===`org.eclipse.elk.padding`){let t=i;if(typeof t!=`object`||!t||t.top===void 0&&t.left===void 0&&t.right===void 0&&t.bottom===void 0)continue;e.setPadding({top:t.top??0,left:t.left??0,right:t.right??0,bottom:t.bottom??0})}else e.setProperty(t.ggn,i)}}}function Fg(t,n=`graph`){let{nodes:r,edges:i,hierarchy:a,graphProps:o,nodeProps:s}=t,c=r.length,l=Object.create(null);for(let e=0;e<c;e++){let t=r[e];l[t]===void 0&&(l[t]=e)}let u=Og(l,a),d=String(o.direction??`RIGHT`).toUpperCase(),f=new rr,p=/* @__PURE__ */ new Map,m=/* @__PURE__ */ new Map,h=new Int32Array(c);h.fill(-1);for(let e of Object.keys(u)){let t=Number(e);m.set(t,new rr);for(let e of u[t])h[e]===-1&&(h[e]=t)}for(let e=0;e<c;e++){let t=r[e],n=s.get(t)??{},i=h[e],o=new V(i===-1?f:m.get(i));o.size={x:n.width??60,y:n.height??30},n.x!==void 0&&(o.position.x=n.x),n.y!==void 0&&(o.position.y=n.y),n.portConstraints&&o.setProperty(O,n.portConstraints),(n[`insideSelfLoops.activate`]===`true`||n[`insideSelfLoops.activate`]===!0)&&o.setProperty(Ae,!0);for(let[e,t]of Object.entries(n)){if(e.startsWith(`_`)||e===`ports`||e===`children`||e===`labels`||e===`width`||e===`height`||e===`portConstraints`||e===`insideSelfLoops.activate`)continue;let n=Tg[e];if(!n)continue;let r=typeof t==`object`&&t&&!Array.isArray(t)?t:Dg(n,String(t));if(r!==void 0){if(n.ggn===`org.eclipse.elk.nodeSize.minimum`&&typeof r==`string`){let[e,t]=String(r).replace(/[()]/g,``).split(`,`).map(Number);r={x:e,y:t}}if(n.ggn===`org.eclipse.elk.position`&&typeof r==`string`){let[e,t]=String(r).replace(/[()]/g,``).split(`,`).map(Number);r={x:e,y:t}}o.setProperty(n.ggn,r)}}for(let e of n.ports??[]){let t=e.side??null,n=new H;n.setNode(o),n.getPosition().x=e.x??0,n.getPosition().y=e.y??0,n.size={x:e.w??8,y:e.h??8},e.borderOffset!==void 0&&e.borderOffset!==null&&n.setProperty(E,e.borderOffset),t&&n.setSide(t),e.index!==null&&e.index!==void 0&&n.setProperty(Fe,e.index),(e.labels??[]).length>0&&n.setLabels((e.labels??[]).map(e=>({text:e.text??``,position:{x:e.x??0,y:e.y??0},size:{x:e.width??0,y:e.height??0}})))}if((n.labels??[]).length>0&&o.setLabels((n.labels??[]).map(e=>({text:e.text??``,position:{x:e.x??0,y:e.y??0},size:{x:e.width??0,y:e.height??0},placement:e.placement??void 0}))),(a.get(t)??[]).length>0){let t=m.get(e);if(t){let e=typeof n.padding==`object`?n.padding:n.padding?Dg(Tg.padding,String(n.padding)):null,r=e===null||!(e=>e!==null&&(e.top!==void 0||e.left!==void 0||e.right!==void 0||e.bottom!==void 0))(e)?{top:12,left:12,right:12,bottom:12}:{top:e.top??0,left:e.left??0,right:e.right??0,bottom:e.bottom??0},i=n[`nodeLabels.placement`],a=0,o=0,s=0,c=0;for(let e of n.labels??[]){let t=e.placement??i??``;if(!t)continue;let n=String(t).replace(/[\[\]]/g,``).split(/[\s,]+/).filter(Boolean);n.includes(`INSIDE`)&&(n.includes(`V_TOP`)?a=Math.max(a,e.height??0):n.includes(`V_BOTTOM`)?o=Math.max(o,e.height??0):(n.includes(`H_LEFT`)&&(s=Math.max(s,e.width??0)),n.includes(`H_RIGHT`)&&(c=Math.max(c,e.width??0))))}let l=n[`nodeLabels.padding`]??{top:5,right:5,bottom:5,left:5},u=Number(n[`spacing.labelLabel`]??0),d=typeof l==`object`?l.top??5:5,f=typeof l==`object`?l.bottom??5:5,p=typeof l==`object`?l.left??5:5,m=typeof l==`object`?l.right??5:5,h=(e,t)=>e>0?e+t+2*u:0;t.setPadding({top:r.top+h(a,d),bottom:r.bottom+h(o,f),left:r.left+h(s,p),right:r.right+h(c,m)})}}p.set(e,o)}for(let e of Object.keys(u).map(Number)){let t=p.get(e),n=m.get(e);t.setNestedGraph(n),n.setParentNode(t);let i=(s.get(r[e])??{}).mergeEdges;(i===!0||i===`true`)&&n.setProperty(nn,!0)}(o.mergeEdges===!0||o.mergeEdges===`true`)&&f.setProperty(nn,!0);let g=/* @__PURE__ */ new Map;for(let[e,t]of Object.entries(u)){let n=Number(e);for(let e of t)g.set(e,n)}let _=(e,t)=>{let n=/* @__PURE__ */ new Set,r=e;for(;r!==void 0;)n.add(r),r=g.get(r);let i=t;for(;i!==void 0&&!n.has(i);)i=g.get(i);if(i===void 0)return f;let a=g.get(i);return a===void 0?f:m.get(a)??f},v=e=>{let t=s.get(e);return t!==void 0&&t.algorithm!==void 0&&Mg(t.algorithm)!==`layered`},y=e=>{let t=e.lastIndexOf(`.`);for(;t!==-1;){let n=e.slice(0,t);if(v(n))return n;t=n.lastIndexOf(`.`)}return null};for(let[t,n,r,a,o,c,u]of i){Ng(t,r,y,v);let i=l[t],f=l[r];if(i===void 0||f===void 0)continue;let m=n===null?-1:(s.get(t)?.ports??[]).findIndex(e=>e.id===n),h=a===null?-1:(s.get(r)?.ports??[]).findIndex(e=>e.id===a),g={RIGHT:`EAST`,LEFT:`WEST`,DOWN:`SOUTH`,UP:`NORTH`}[d]??`EAST`,b=(m<0||m>=p.get(i).getPorts().length)&&_(i,f).getProperty(nn)===!0,x=(h<0||h>=p.get(f).getPorts().length)&&p.get(f).getGraph()?.getProperty(nn)===!0,S=kg(p.get(i),p.get(f),m>=0?m:null,h>=0?h:null,g,b,x);if(o===!0&&S.setProperty(e,!0),u!=null&&S.setProperty(Ye,u),c!=null&&c.length>0)for(let e of c)S.getLabels().push({text:e.text??``,position:{x:0,y:0},size:{x:e.width??0,y:e.height??0},placement:e.placement??void 0})}return Object.keys(u).length>0&&f.setProperty(mn,`INCLUDE_CHILDREN`),f.setProperty(S,d),Pg(f,o),f.hasProperty(me)||f.setProperty(me,1),{graph:f,nodeOf:p,nodeCount:c,edgeCount:i.length,hasHierarchy:Object.keys(u).length>0,name:n}}function Ig(e={}){let t={};for(let[n,r]of Object.entries(e)){let e=null;for(let[t,r]of Object.entries(Tg))if(r.ggn===n||r.elkjs===n){e=t;break}t[e??n.replace(/^org\.eclipse\.elk\./,``).replace(/^layered\./,``)]=r}return t}function Lg(e,t={}){let n=t.stripNPrefix!==!1,r=t.blackBoxIds instanceof Set?t.blackBoxIds:/* @__PURE__ */ new Set,i=[],a=/* @__PURE__ */ new Set;for(let e of r)a.add(n?String(e).replace(/^N/,``):String(e));let o=/* @__PURE__ */ new Map;if(a.size>0){let t=(e,r)=>{let i=n?String(e.id).replace(/^N/,``):String(e.id),s=a.has(i)?i:r;for(let r of e.children??[]){let e=n?String(r.id).replace(/^N/,``):String(r.id);s!==null&&o.set(e,s),t(r,s)}};t(e,null)}let s=[],c=/* @__PURE__ */ new Map,l={},u=/* @__PURE__ */ new Map,d=/* @__PURE__ */ new Set,f=(e,t)=>{let a=n?e.id.replace(/^N/,``):e.id;if(d.has(a)||(d.add(a),i.push(a)),t!=null){let e=c.get(t)??[];e.includes(a)||e.push(a),c.set(t,e)}let o={width:e.width??60,height:e.height??30,x:e.x,y:e.y},s=(n?`N`+a:a)+`.`,l=e.ports??[];o.ports=l.map(e=>{let t=Ig(e.properties??{}),n={id:e.id&&e.id.startsWith(s)?e.id.slice(s.length):e.id,w:0,h:0};e.x!==void 0&&(n.x=e.x),e.y!==void 0&&(n.y=e.y),n.w=e.width??0,n.h=e.height??0,t[`port.side`]!==void 0&&(n.side=t[`port.side`]===`UNDEFINED`?null:t[`port.side`]),t[`port.index`]!==void 0&&(n.index=Number(t[`port.index`])),t[`port.borderOffset`]!==void 0&&(n.borderOffset=Number(t[`port.borderOffset`]));let r=e.labels??[];return r.length>0&&(n.labels=r.map(e=>{let t={text:e.text??``,width:e.width??0,height:e.height??0};return e.x!==void 0&&(t.x=e.x,t.y=e.y),t})),n}),l.length===0&&delete o.ports;let p=e.labels??[];if(o.labels=p.map(e=>{let t=Ig(e.layoutOptions??{}),n={text:e.text??``,width:e.width??0,height:e.height??0};return e.x!==void 0&&(n.x=e.x),e.y!==void 0&&(n.y=e.y),t[`nodeLabels.placement`]!==void 0&&(n.placement=t[`nodeLabels.placement`]),n}),p.length===0&&delete o.labels,Object.assign(o,Ig(e.layoutOptions??{})),u.set(a,o),!(r.has(e.id)||r.has(a)))for(let t of e.children??[])f(t,a)};for(let t of e.children??[])f(t,null);Object.assign(l,Ig(e.layoutOptions??{}));let p=e=>{let t=n?String(e??``).replace(/^N/,``):String(e??``);if(d.has(t))return[t,null];let r=t.lastIndexOf(`.`);return r!==-1&&d.has(t.slice(0,r))?[t.slice(0,r),t.slice(r+1)]:[t,null]},m=e=>{if(!(r.has(e.id)||r.has(n?String(e.id).replace(/^N/,``):e.id))){for(let t of e.edges??[]){if(a.size>0){let e=t.sources?.[0]??t.source,r=t.targets?.[0]??t.target;if(e!==void 0&&r!==void 0){let t=e=>n?String(e).replace(/^N/,``):String(e);Ng(t(e),t(r),e=>{if(o.has(e))return o.get(e);let t=e.lastIndexOf(`.`);return t!==-1&&o.has(e.slice(0,t))?o.get(e.slice(0,t)):null},e=>a.has(e))}}let[e,r]=p(t.sources?.[0]??t.source),[i,c]=p(t.targets?.[0]??t.target),l=Ig(t.properties??{}),u=l[`insideSelfLoops.yo`]===`true`,d=l[`edge.thickness`]===void 0?null:Number(l[`edge.thickness`]),f=(t.labels??[]).map(e=>{let t=Ig(e.layoutOptions??{})[`edgeLabels.placement`]??e.placement??null;return{text:e.text??``,width:e.width??0,height:e.height??0,placement:t}});s.push([e,r,i,c,u,f,d])}for(let t of e.children??[])m(t)}};return m(e),{nodes:i,edges:s,hierarchy:c,graphProps:l,nodeProps:u}}let Rg=/* @__PURE__ */ function(e){return e.INVALID_INPUT=`INVALID_INPUT`,e.MISSING_ID=`MISSING_ID`,e.DUPLICATE_ID=`DUPLICATE_ID`,e.NEGATIVE_SIZE=`NEGATIVE_SIZE`,e.NON_FINITE_SIZE=`NON_FINITE_SIZE`,e.EMPTY_ENDPOINTS=`EMPTY_ENDPOINTS`,e.DANGLING_ENDPOINT=`DANGLING_ENDPOINT`,e.MULTI_ENDPOINTS=`MULTI_ENDPOINTS`,e.UNSUPPORTED_ALGORITHM=`UNSUPPORTED_ALGORITHM`,e.CYCLIC_REFERENCE=`CYCLIC_REFERENCE`,e.INTERNAL_ERROR=`INTERNAL_ERROR`,e.ABORTED=`ABORTED`,e}({});var zg=class extends Error{code;path;retryable;phase;details;constructor(e,t,n,r={}){super(`${e} at ${t||`root`}: ${n}`,r.cause===void 0?void 0:{cause:r.cause}),this.name=`LayoutError`,this.code=e,this.path=t,this.retryable=!1,this.phase=r.phase,this.details=r.details,Object.setPrototypeOf(this,new.target.prototype)}toJSON(){let e={name:this.name,code:this.code,path:this.path,message:this.message,retryable:this.retryable};return this.phase!==void 0&&(e.phase=this.phase),this.details!==void 0&&(e.details=this.details),e}};function Bg(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Vg(e,t){return e?`${e}.${t}`:t}function Hg(e,t,n){return`${e?`${e}.`:``}${t}[${n}]`}function Ug(e,t,n,r){e.push({code:t,path:n,message:`${t} at ${n||`root`}: ${r}`,retryable:!1})}function Wg(e,t,n){typeof e!=`number`||!Number.isFinite(e)?Ug(n,`NON_FINITE_SIZE`,t,`size must be a finite number`):e<0&&Ug(n,`NEGATIVE_SIZE`,t,`size must be greater than or equal to zero`)}function Gg(e,t,n){for(let r of[`width`,`height`])r in e&&Wg(e[r],Vg(t,r),n)}function Kg(e,t,n,r){let i=e.layoutOptions;if(Bg(i))for(let e of[`org.eclipse.elk.algorithm`,`elk.algorithm`]){if(!(e in i))continue;let a=i[e];(typeof a!=`string`||a.trim()!==``)&&(bt(a)||Ug(r,`UNSUPPORTED_ALGORITHM`,Vg(t,`layoutOptions.${e}`),`algorithm ${JSON.stringify(a)} on node ${JSON.stringify(n??`root`)} is not supported`))}}function qg(e,t,n,r,i,a){if(!Bg(e)){Ug(n,a?`INVALID_INPUT`:`MISSING_ID`,t||`root`,a?`root input must be a plain object`:`child node must be a plain object with a non-empty string id`);return}if(i.has(e)){Ug(n,`CYCLIC_REFERENCE`,t||`root`,`object is referenced more than once in the input tree (cycle or shared reference)`);return}i.add(e);let o=e.id,s=typeof o==`string`&&o.trim().length>0;s?r.nodeIds.has(o)?Ug(n,`DUPLICATE_ID`,t||`root`,`node id ${JSON.stringify(o)} is duplicated`):r.nodeIds.add(o):Ug(n,a?`INVALID_INPUT`:`MISSING_ID`,a?`root`:t,a?`root input must have a non-empty string id`:`child node must have a non-empty string id`),Gg(e,t,n),Kg(e,t,s?o:void 0,n);let c=s?o:void 0,l=e.ports;if(Array.isArray(l))for(let e=0;e<l.length;e+=1){let i=l[e],a=Hg(t,`ports`,e);if(!Bg(i))continue;Gg(i,a,n);let o=i.id;c!==void 0&&typeof o==`string`&&o.trim().length>0&&(r.portRefs.add(`${c}.${o}`),r.portRefs.add(o))}let u=e.children;if(Array.isArray(u))for(let e=0;e<u.length;e+=1)qg(u[e],Hg(t,`children`,e),n,r,i,!1)}function Jg(e,t){if(t.nodeIds.has(e))return!0;let n=e.lastIndexOf(`.`);return n!==-1&&t.nodeIds.has(e.slice(0,n))}function Yg(e,t,n,r){if(!Bg(e))return;let i=e.edges;if(!Array.isArray(i))return;for(let e=0;e<i.length;e+=1){let a=i[e],o=Hg(t,`edges`,e);if(!Bg(a))Ug(n,`EMPTY_ENDPOINTS`,o,`edge must contain non-empty sources and targets arrays`);else for(let e of[`sources`,`targets`]){let t=a[e],i=Vg(o,e);if(!Array.isArray(t)||t.length===0||t.some(e=>typeof e!=`string`)){Ug(n,`EMPTY_ENDPOINTS`,i,`${e} must be a non-empty string array`);continue}if(t.length>1){Ug(n,`MULTI_ENDPOINTS`,i,`${e} must contain exactly one endpoint (hyperedge not supported in P0)`);continue}let s=t[0];Jg(s,r)||Ug(n,`DANGLING_ENDPOINT`,`${i}[0]`,`endpoint reference ${JSON.stringify(s)} does not resolve to a node or port`)}}let a=e.children;if(Array.isArray(a))for(let e=0;e<a.length;e+=1)Yg(a[e],Hg(t,`children`,e),n,r)}function Xg(e){let t=[];if(!Bg(e))return Ug(t,`INVALID_INPUT`,`root`,`root input must be a plain object`),t;let n={nodeIds:/* @__PURE__ */ new Set,portRefs:/* @__PURE__ */ new Set};return qg(e,``,t,n,/* @__PURE__ */ new WeakSet,!0),Yg(e,``,t,n),t}function Zg(e){let t=Xg(e),n=t[0];if(n!==void 0)throw new zg(n.code,n.path,n.message,{phase:`validate`,details:{issues:t}})}function Qg(e,t){if(Array.isArray(e)){let n=[];t&&t.set(e,n);for(let r of e)n.push(Qg(r,t));return n}if(typeof e==`object`&&e){let n=t?.get(e);if(n!==void 0)return n;let r={};t&&t.set(e,r);for(let[n,i]of Object.entries(e))Object.defineProperty(r,n,{value:Qg(i,t),enumerable:!0,writable:!0,configurable:!0});return r}return e}function $g(e,t,n,r){if(e?.signal?.aborted)throw new zg(`ABORTED`,`root`,`布局在 ${t} 阶段被取消`,{phase:t});if(e?.onProgress?.({phase:t,completed:n,...r===void 0?{}:{graphId:r}}),e?.signal?.aborted)throw new zg(`ABORTED`,`root`,`布局在 ${t} 阶段回调后被取消`,{phase:t})}function e_(e,t,n){let r={...t?.layoutOptions??{},...e.layoutOptions??{}},i=Lg(e,{stripNPrefix:!1,blackBoxIds:n});if(Object.assign(i.graphProps,Ig(t?.layoutOptions??{})),t?.direction&&(i.graphProps.direction=t.direction),t?.randomSeed!==void 0&&(i.graphProps.randomSeed=String(t.randomSeed)),t?.hierarchyHandling&&(i.graphProps.hierarchyHandling=t.hierarchyHandling),i.graphProps.direction===void 0&&(i.graphProps.direction=r[`org.eclipse.elk.direction`]??r[`elk.direction`]??`RIGHT`),i.graphProps.randomSeed===void 0&&(i.graphProps.randomSeed=`1`),i.graphProps.hierarchyHandling===void 0){let t=(e.children??[]).some(e=>(e.children?.length??0)>0);i.graphProps.hierarchyHandling=t?`INCLUDE_CHILDREN`:`OFF`}let a=Fg(i,e.id),o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map;for(let[e,t]of a.nodeOf){let r=i.nodes[e];o.set(t,r),s.set(r,t),n?.has(r)&&t.setProperty(mn,`SEPARATE_CHILDREN`)}let c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map;for(let[e,t]of a.nodeOf){let n=i.nodes[e],r=i.nodeProps.get(n)?.ports??[],a=t.getPorts();for(let e=0;e<r.length&&e<a.length;e++){let t=`${n}.${r[e].id}`;c.set(t,a[e]),l.set(a[e],t)}}let u=/* @__PURE__ */ new Map;u.set(a.graph,e.id);let d=e=>{for(let t of e.getAllNodes()){let e=t.getNestedGraph();if(e){let n=o.get(t);n!==void 0&&u.set(e,n),d(e)}}};d(a.graph);let f=/* @__PURE__ */ new Set,p=e=>{for(let t of e.getAllNodes()){for(let e of t.getPorts())for(let t of e.getOutgoingEdges())f.add(t);let e=t.getNestedGraph();e&&p(e)}};return p(a.graph),{graph:a.graph,nodeOf:s,portOf:c,nodeRef:o,portRef:l,edgeSet:f,graphToNodeId:u,root:e}}function t_(e){let t=e.getSource()?.getNode(),n=e.getTarget()?.getNode();if(!t||!n)return null;if(t===n)return t.getGraph()?.getParentNode()??null;let r=/* @__PURE__ */ new Set,i=t;for(;i;)r.add(i),i=i.getGraph()?.getParentNode()??null;for(i=n;i;){if(r.has(i))return i;i=i.getGraph()?.getParentNode()??null}return null}function n_(e,t){let n={...t.root};delete n.children,delete n.edges;let r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Map,s=(e,t,n)=>JSON.stringify([e,t,n]),c=e=>{if(i.has(e))return e;let t=e.lastIndexOf(`.`),n=t===-1?e:e.slice(0,t);return i.has(n)?n:null},l=(e,t)=>{let r=c(String(e[0]??``)),i=c(String(t[0]??``));if(r===null||i===null||r===i)return r===null?n.id:a.get(r)??n.id;let o=/* @__PURE__ */ new Set,s=r;for(;s!==null;)o.add(s),s=a.get(s)??null;for(s=i;s!==null&&!o.has(s);)s=a.get(s)??null;return s??n.id},u=(e,t)=>{i.set(e.id,e),a.set(e.id,t);for(let t of e.children??[])u(t,e.id)},d=e=>{for(let t of e.edges??[]){let n={edge:t,consumed:!1},r=e=>{let r=s(e,String(t.sources?.[0]??``),String(t.targets?.[0]??``)),i=o.get(r)??[];i.includes(n)||i.push(n),o.set(r,i)};r(e.id);let i=l(t.sources??[],t.targets??[]);i!==e.id&&r(i)}for(let t of e.children??[])d(t)};u(t.root,null),d(t.root);let f=(e,t,n)=>{let r=o.get(s(e,String(t[0]??``),String(n[0]??``)));for(;r&&r.length>0;){let e=r.shift();if(!e.consumed)return e.consumed=!0,e.edge}};function p(e,n){let a=[];n.children=a;for(let n of e.getAllNodes()){let e=t.nodeRef.get(n);if(e===void 0)continue;let o=i.get(e),s=o?{...o,x:n.position.x,y:n.position.y,width:n.size.x,height:n.size.y}:{id:e,x:n.position.x,y:n.position.y,width:n.size.x,height:n.size.y};delete s.children,delete s.edges,r.set(s.id,s),a.push(s);let c=n.getNestedGraph();c&&p(c,s)}}p(e,n);let m=/* @__PURE__ */ new Set,h=/* @__PURE__ */ new Map;function g(e){for(let r of e.getAllNodes()){for(let e of r.getPorts())for(let r of e.getOutgoingEdges()){if(m.has(r)||!t.edgeSet.has(r))continue;m.add(r);let e=t_(r),i=h.get(e)??[];h.set(e,i);let{source:a,target:o}=uc(r),s=[r_(r.getSource(),t)],c=[r_(r.getTarget(),t)],l=r.getBendPoints().map(e=>({x:e.x,y:e.y})),u={startPoint:a,endPoint:o};l.length>0&&(u.bendPoints=l);let d=e===null?n.id:t.nodeRef.get(e)??n.id,p=f(d,s,c);i.push(p?{...p,sources:s,targets:c,sections:[u],container:d}:{sources:s,targets:c,sections:[u],container:d})}let e=r.getNestedGraph();e&&g(e)}}g(e);let _=h.get(null);_&&_.length>0&&(n.edges=_);for(let[e,n]of h){if(e===null)continue;let i=t.nodeRef.get(e);if(i===void 0)continue;let a=r.get(i);a&&(a.edges=n)}return n}function r_(e,t){return t.portRef.get(e)??(e.getNode()?t.nodeRef.get(e.getNode())??String(e.getNode().id):`?`)}function i_(e,t,n=/* @__PURE__ */ new Map,r=!0){let i=t?.layoutOptions?.[`org.eclipse.elk.algorithm`]??t?.layoutOptions?.[`elk.algorithm`]??e.layoutOptions?.[`org.eclipse.elk.algorithm`]??e.layoutOptions?.[`elk.algorithm`];i!==void 0&&String(i).trim()!==``&&n.set(e.id,Dt(String(i)));for(let t of e.children??[])i_(t,void 0,n,!1);return n}function a_(e,t,n){let r=/* @__PURE__ */ new Map,i=e=>{r.set(e.id,e);for(let t of e.children??[])i(t)};i(e);let a=/* @__PURE__ */ new Map,o=(e,t)=>{a.set(e.id,t);for(let n of e.children??[])o(n,t+1)};o(e,0);let s=[...t.entries()].filter(([,e])=>Cn.has(e)||gn.has(e)||yn.has(e)||Xt.has(e)||_t.has(e)||sn.has(e)||On.has(e)||rn.has(e)||lt.has(e)).sort((e,t)=>(a.get(t[0])??0)-(a.get(e[0])??0));for(let[e,t]of s){let i=r.get(e);if(i===void 0||(i.children?.length??0)===0)continue;let a=nr(t);if(a===void 0)throw Error(`[layout] 布局算法 '${t}' 未注册 (本入口未包含该算法; 非 layered 算法请用完整入口 src/index.ts)`);a(i),n?.(i)===!0&&a(i)}}function o_(e,t){if(t.size===0)return;let n=(e,t)=>e.id===t?e:(e.children??[]).map(e=>n(e,t)).find(Boolean)??null,r=[],i=e=>{for(let t of e.edges??[])r.push({e:t,holder:e});for(let t of e.children??[])i(t)};i(e);let a=/* @__PURE__ */ new Map;for(let r of t){let t=n(e,r);if(t===null)continue;let i=/* @__PURE__ */ new Set,o=e=>{i.add(e.id);for(let t of e.children??[])o(t)};o(t),a.set(r,i)}let o=[...a.entries()].sort((e,t)=>t[0].length-e[0].length),s=e=>{if(c.has(e))return e;let t=e.lastIndexOf(`.`);return t!==-1&&c.has(e.slice(0,t))?e.slice(0,t):null},c=/* @__PURE__ */ new Set;for(let e of a.values())for(let t of e)c.add(t);for(let{e:t,holder:i}of r){let r=String(t.sources?.[0]??``),a=String(t.targets?.[0]??``),c=s(r),l=s(a);if(c!==null&&l!==null)for(let[r,a]of o){if(!a.has(c)||!a.has(l))continue;let o=n(e,r);if(o!==null){o.edges??=[],o.edges.push(t);let e=(i.edges??[]).indexOf(t);e!==-1&&i.edges.splice(e,1)}break}}}function s_(e,t){let n=e=>e.id===t?e:(e.children??[]).map(n).find(Boolean)??null;return(n(e)?.children?.length??0)>0}function c_(e,t){let n=t?.control,r=typeof e?.id==`string`?e.id:void 0;$g(n,`validate`,1,r),Zg(e),$g(n,`clone`,2,r);let i=Qg(e);$g(n,`dispatch`,3,r);let a=i_(i,t);for(let[e,t]of a)if(!Cn.has(t)&&!Rt.has(t)&&!gn.has(t)&&!yn.has(t)&&!Xt.has(t)&&!_t.has(t)&&!sn.has(t)&&!On.has(t)&&!rn.has(t)&&!lt.has(t))throw new zg(`UNSUPPORTED_ALGORITHM`,`nodes.${e}`,`布局算法 '${t}' 尚未移植 (节点 ${e}); 移植清单见 docs/NON-LAYERED-PORTING.md`,{phase:`dispatch`});let o=new Set([...a.entries()].filter(([,e])=>Cn.has(e)||gn.has(e)||yn.has(e)||Xt.has(e)||_t.has(e)||sn.has(e)||On.has(e)||rn.has(e)||lt.has(e)).map(([e])=>e).filter(e=>s_(i,e)));o.size>0&&(o_(i,o),a_(i,a,t?.onBlackBoxLaidOut));let s=a.get(i.id);if(s!==void 0&&!Rt.has(s)){let e=new Set([...o].filter(e=>e!==i.id));return e.size>0&&(o_(i,e),a_(i,new Map([...a.entries()].filter(([e])=>e!==i.id)),t?.onBlackBoxLaidOut)),a_(i,/* @__PURE__ */ new Map([[i.id,s]]),t?.onBlackBoxLaidOut),g_(i,h_(i,t),i),l_(i),$g(n,`extract`,4,r),$g(n,`format`,5,r),u_(i,t)}let c=e_(i,t,o);new vg().layout(c.graph),$g(n,`extract`,4,r);let l=n_(c.graph,c);return l_(l,c.graph),o.size>0&&__(l,i,o),g_(l,h_(i,t),i),$g(n,`format`,5,r),u_(l,t)}function l_(e,t){e.x??=0,e.y??=0,e.width===void 0&&(e.width=t?.getActualSize().x??0),e.height===void 0&&(e.height=t?.getActualSize().y??0)}function u_(e,t){let n=t?.responseFormat??`full`;return n===`summary`?p_(e):n===`concise`?d_(e):t?.pick===void 0?e:f_(e,t.pick)}function d_(e){let t={id:e.id,x:e.x,y:e.y,width:e.width,height:e.height};return e.children!==void 0&&(t.children=e.children.map(d_)),e.edges!==void 0&&(t.edges=e.edges.flatMap(e=>{let t=e.sections?.[0],n={...e.id===void 0?{}:{id:e.id},sources:[...e.sources],targets:[...e.targets]};return t!==void 0&&(n.sections=[{startPoint:{...t.startPoint},endPoint:{...t.endPoint}}]),[n]})),t}function f_(e,t){let n={id:e.id,x:e.x,y:e.y,width:e.width,height:e.height};for(let r of t)r in e&&r!==`children`&&r!==`edges`&&r!==`id`&&r!==`x`&&r!==`y`&&r!==`width`&&r!==`height`&&(n[r]=e[r]);return e.children!==void 0&&(n.children=e.children.map(e=>f_(e,t))),e.edges!==void 0&&(n.edges=e.edges),n}function p_(e){let t=[],n=[],r=(e,i)=>{i&&t.push({id:e.id,x:e.x,y:e.y,width:e.width,height:e.height});for(let t of e.edges??[]){let e=t.sections?.[0],r=t.sources[0],i=t.targets[0];e!==void 0&&r!==void 0&&i!==void 0&&n.push({...t.id===void 0?{}:{id:t.id},sources:[r],targets:[i],startPoint:{...e.startPoint},endPoint:{...e.endPoint}})}for(let t of e.children??[])r(t,!0)};r(e,!1);let i={nodes:t,edges:n};return typeof e.width==`number`&&(i.width=e.width),typeof e.height==`number`&&(i.height=e.height),i}function m_(e){return e===`shapeCoords`||e.endsWith(`json.shapeCoords`)?`org.eclipse.elk.json.shapeCoords`:e===`edgeCoords`||e.endsWith(`json.edgeCoords`)?`org.eclipse.elk.json.edgeCoords`:e.startsWith(`org.eclipse.elk.`)?e:e.replace(/^elk\./,`org.eclipse.elk.`)}function h_(e,t){let n=e=>{let t={};for(let[n,r]of Object.entries(e??{}))t[m_(n)]=r;return t},r=n(e.layoutOptions);for(let[e,i]of Object.entries(n(t?.layoutOptions)))r[e]=i;let i=e=>{let t=n(e)[`org.eclipse.elk.json.shapeCoords`];return t===`ROOT`||t===`PARENT`||t===`INHERIT`?t:void 0},a=e=>{let t=n(e)[`org.eclipse.elk.json.edgeCoords`];return t===`ROOT`||t===`PARENT`||t===`CONTAINER`||t===`INHERIT`?t:void 0},o=r[`org.eclipse.elk.json.shapeCoords`],s=r[`org.eclipse.elk.json.edgeCoords`],c=o===`ROOT`||o===`PARENT`?o:`PARENT`,l=s===`ROOT`||s===`PARENT`||s===`CONTAINER`?s:`CONTAINER`,u=/* @__PURE__ */ new Map,d=/* @__PURE__ */ new Map,f=(e,t,n,r)=>{let o=i(e.layoutOptions),s=a(e.layoutOptions),c=o===void 0||o===`INHERIT`?t:o,l=s===void 0||s===`INHERIT`?n:s;r||(u.set(e.id,c),d.set(e.id,l));for(let t of e.children??[])f(t,c,l,!1)};return f(e,c,l,!0),{rootShape:c,rootEdge:l,nodeShape:u,nodeEdge:d}}function g_(e,t,n){let r=/* @__PURE__ */ new Map,i=(e,t,n)=>{let a=t+(e.x??0),o=n+(e.y??0);r.set(e.id,{x:a,y:o});for(let t of e.children??[])i(t,a,o)};i(e,0,0);let a=n=>n.id===e.id?t.rootShape:t.nodeShape.get(n.id)??`PARENT`,o=(t,n)=>{if(t.id!==e.id&&n===`ROOT`){let e=r.get(t.id);e&&(t.x=e.x,t.y=e.y)}let i=a(t);for(let e of t.children??[])o(e,i)};o(e,t.rootShape);let s=/* @__PURE__ */ new Map,c=(e,t)=>{for(let n of e.edges??[]){let e=`${String(n.sources?.[0]??``)}|${String(n.targets?.[0]??``)}`;s.has(e)||s.set(e,t)}for(let t of e.children??[])c(t,t.id)};c(n,null);let l=e=>{let n=s.get(e);return n===null?t.rootEdge:n===void 0?`CONTAINER`:t.nodeEdge.get(n)??`CONTAINER`},u=(e,t)=>{e&&(e.x+=t.x,e.y+=t.y)},d=t=>t.id===e.id?{x:0,y:0}:r.get(t.id)??{x:0,y:0},f=e=>{let t=d(e);for(let n of e.edges??[]){let e=`${String(n.sources?.[0]??``)}|${String(n.targets?.[0]??``)}`,i=l(e),a=null;if(i===`ROOT`)a=t;else if(i===`PARENT`){let n=s.get(e),i=n==null?{x:0,y:0}:r.get(n)??{x:0,y:0};a={x:t.x-i.x,y:t.y-i.y}}if(a!==null){for(let e of n.sections??[]){u(e.startPoint,a),u(e.endPoint,a);for(let t of e.bendPoints??[])u(t,a)}delete n.container}}for(let t of e.children??[])f(t)};f(e)}function __(e,t,n){let r=(e,t)=>{if(e.id===t)return e;for(let n of e.children??[]){let e=r(n,t);if(e!==null)return e}return null},i=e=>{if(n.has(e.id)){let n=r(t,e.id);if(n!==null){e.children=n.children,e.edges=n.edges;for(let t of e.edges??[])t.container=e.id;for(let t of e.children??[])i(t);return}}for(let t of e.children??[])i(t)};i(e)}export{rr as C,or as S,$n as T,W as _,Xg as a,V as b,Cg as c,Jh as d,lg as f,uc as g,ql as h,Zg as i,Sg as l,Gl as m,n_ as n,zg as o,ug as p,c_ as r,Rg as s,e_ as t,vg as u,U as v,tr as w,ar as x,H as y};
1
+ /**
2
+ * ggn-layout — TypeScript port of the Eclipse Layout Kernel (ELK) layered layout algorithms.
3
+ *
4
+ * Copyright (c) 2026 GGN contributors.
5
+ * Portions derived from ELK (https://github.com/eclipse/elk), Copyright (c) Kiel University
6
+ * and others, are licensed under the Eclipse Public License 2.0 (EPL-2.0);
7
+ * GGN-original portions are licensed under MIT.
8
+ * See LICENSES/EPL-2.0.txt, LICENSE and THIRD_PARTY_NOTICES.md.
9
+ *
10
+ * SPDX-License-Identifier: (MIT AND EPL-2.0)
11
+ */
12
+ import{$ as e,$n as t,$t as n,A as r,An as i,Ar as a,At as o,B as s,Bn as c,Bt as l,C as u,Cn as d,Cr as f,Ct as p,D as m,Dn as h,Dr as g,Dt as _,E as v,En as y,Er as b,Et as x,F as S,Fn as ee,Fr as C,Ft as te,G as ne,Gn as w,Gt as T,H as re,Hn as ie,Ht as ae,I as oe,In as se,Ir as ce,It as E,J as le,Jn as ue,Jt as de,K as fe,Kn as pe,Kt as me,L as he,Ln as ge,Lr as D,Lt as O,M as _e,Mn as ve,Mt as ye,N as be,Nn as xe,Nt as Se,O as Ce,On as we,Or as Te,Ot as Ee,P as De,Pn as Oe,Pt as ke,Q as Ae,Qn as k,Qt as je,R as Me,Rn as Ne,Rr as Pe,Rt as Fe,S as Ie,Sn as Le,Sr as A,St as Re,T as ze,Tn as Be,Tr as Ve,Tt as He,U as Ue,Un as j,Ur as We,Ut as Ge,V as Ke,Vn as qe,Vt as Je,W as Ye,Wn as Xe,Wt as Ze,X as Qe,Xn as $e,Xt as et,Y as tt,Yn as nt,Yt as rt,Z as it,Zn as at,Zt as ot,_ as st,_n as ct,_r as M,_t as N,a as lt,ai as ut,an as dt,ar as ft,at as pt,b as mt,bn as ht,br as P,bt as gt,c as _t,cn as vt,cr as F,ct as yt,d as bt,dn as xt,dr as St,dt as Ct,en as wt,er as Tt,et as Et,f as Dt,fn as Ot,ft as kt,g as At,gn as jt,gr as Mt,gt as Nt,h as Pt,hn as Ft,hr as It,ht as Lt,i as Rt,ii as zt,in as Bt,ir as I,it as Vt,j as Ht,jn as Ut,jr as Wt,jt as Gt,k as Kt,kn as qt,kr as Jt,kt as Yt,l as Xt,ln as Zt,lr as L,lt as Qt,m as $t,mn as en,mr as tn,mt as nn,n as rn,nn as an,nr as on,nt as R,o as sn,on as cn,or as ln,ot as un,p as z,pn as dn,pr as fn,pt as pn,q as mn,qt as hn,r as gn,rn as _n,rr as B,rt as vn,s as yn,sn as bn,sr as xn,st as Sn,t as Cn,ti as wn,tn as Tn,tr as En,tt as Dn,u as On,un as kn,ur as An,ut as jn,v as Mn,vn as Nn,vr as Pn,vt as Fn,w as In,wn as Ln,wr as Rn,wt as zn,x as Bn,xn as Vn,xr as Hn,xt as Un,y as Wn,yn as Gn,yr as Kn,yt as qn,z as Jn,zt as Yn}from"./algorithms-JOaPA3B9.js";const Xn=25214903917n,Zn=(1n<<48n)-1n,Qn=15525485;var $n=class{seed;constructor(e){this.seed=Number(e==null?(BigInt(Date.now()^Math.random()*4294967295)^Xn)&Zn:(BigInt(e)^Xn)&Zn)}next(e){let t=this.seed,n=t&16777215,r=Math.floor(t/16777216),i=n*Qn+11,a=Math.floor(i/16777216),o=r*Qn+n*1502+a;return this.seed=(o&16777215)*16777216+(i&16777215),Math.floor(this.seed/2**(48-e))}nextInt(e){if((e&-e)===e)return Math.floor(e*this.next(31)/2147483648);let t,n;do t=this.next(31),n=t%e;while(t-n+(e-1)<0);return n}nextBoolean(){return this.next(1)!==0}nextFloat(){return this.next(24)/16777216}nextLong(){let e=this.next(32),t=this.next(32),n=t>=2147483648?1n:0n,r=(BigInt(e)-n<<32n)+BigInt(t);return Number(r&281474976710655n)}nextDouble(){return(this.next(26)*134217728+this.next(27))/9007199254740992}setSeed(e){this.seed=Number((BigInt(e)^Xn)&Zn)}next31(){return this.next(31)}};const er=/* @__PURE__ */ new Map;function tr(e,t){er.set(e,t)}function nr(e){return er.get(e)}var rr=class extends zt{constructor(){super(),this.setProperty(w,/* @__PURE__ */ new Set)}id=0;size={x:0,y:0};padding={left:12,top:12,right:12,bottom:12};offset={x:0,y:0};layerlessNodes=[];layers=[];parentNode=null;direction=`UNDEFINED`;getSize(){return this.size}getPadding(){return this.padding}setPadding(e){this.padding={...this.padding,...e}}getActualSize(){return{x:this.size.x+this.padding.left+this.padding.right,y:this.size.y+this.padding.top+this.padding.bottom}}getOffset(){return this.offset}getLayerlessNodes(){return this.layerlessNodes}getLayers(){return this.layers}getParentNode(){return this.parentNode}setParentNode(e){this.parentNode=e}getDirection(){return this.direction}setDirection(e){this.direction=e}toNodeArray(){return this.layers.map(e=>[...e.getNodes()])}getAllNodes(){let e=this.layerlessNodes.length;for(let t of this.layers)e+=t.getNodes().length;let t=Array(e),n=0;for(let e of this.layers)for(let r of e.getNodes())t[n++]=r;for(let e of this.layerlessNodes)t[n++]=e;return t}};let ir=0;var ar=class extends zt{id=ir++;getId(){return this.id}},or=class extends ar{position={x:0,y:0};size={x:0,y:0};getPosition(){return this.position}getSize(){return this.size}},V=class extends or{graph=null;layer=null;type=`NORMAL`;ports=[];labels=[];nestedGraph=null;margin={left:0,top:0,right:0,bottom:0};padding={left:0,top:0,right:0,bottom:0};layerConstraint=null;inLayerConstraint=null;edgeConstraint=null;portConstraints=null;constructor(e=null){super(),this.graph=e,e&&e.getLayerlessNodes().push(this)}getGraph(){return this.graph===null&&this.layer!==null?this.layer.getGraph():this.graph}setGraph(e){this.graph=e}getLayer(){return this.layer}setLayer(e){if(this.layer!==null){let e=this.layer.getNodes(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.layer=e,this.layer!==null&&this.layer.getNodes().push(this)}setLayerAt(e,t){if(this.layer!==null){let e=this.layer.getNodes(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.layer=t,t.getNodes().splice(e,0,this)}getType(){return this.type}setType(e){this.type=e}getPorts(e){if(e===void 0)return this.ports;if(typeof e==`string`&&(e===`NORTH`||e===`EAST`||e===`SOUTH`||e===`WEST`))return this.ports.filter(t=>t.getSide()===e);let t=e;return t===`INPUT`?this.ports.filter(e=>e.getIncomingEdges().length>0):t===`OUTPUT`?this.ports.filter(e=>e.getOutgoingEdges().length>0):[]}getPortSideView(e){return this.ports.filter(t=>t.getSide()===e)}setPorts(e){this.ports=e}getLabels(){return this.labels}setLabels(e){this.labels=e}getNestedGraph(){return this.nestedGraph}setNestedGraph(e){this.nestedGraph=e}getMargin(){return this.margin}getPadding(){return this.padding}getLayerConstraint(){if(this.layerConstraint!==null)return this.layerConstraint;let e=this.getProperty(`org.eclipse.elk.layered.layering.layerConstraint`);if(typeof e==`string`){let t=C[e];if(t!==void 0)return t}return null}setLayerConstraint(e){this.layerConstraint=e,this.setProperty(`org.eclipse.elk.layered.layering.layerConstraint`,e)}getInLayerConstraint(){return this.inLayerConstraint}setInLayerConstraint(e){this.inLayerConstraint=e}getEdgeConstraint(){return this.edgeConstraint}setEdgeConstraint(e){this.edgeConstraint=e}getPortConstraints(){return this.portConstraints}setPortConstraints(e){this.portConstraints=e}getIndex(){return this.layer===null?-1:this.layer.getNodes().indexOf(this)}getOutgoingEdges(){let e=0;for(let t of this.ports)e+=t.getOutgoingEdges().length;let t=Array(e),n=0;for(let e of this.ports)for(let r of e.getOutgoingEdges())t[n++]=r;return t}getIncomingEdges(){let e=0;for(let t of this.ports)e+=t.getIncomingEdges().length;let t=Array(e),n=0;for(let e of this.ports)for(let r of e.getIncomingEdges())t[n++]=r;return t}getConnectedEdges(){let e=[];for(let t of this.ports)e.push(...t.getIncomingEdges(),...t.getOutgoingEdges());return e}},H=class extends or{owner=null;side=`UNDEFINED`;explicitSide=!1;anchor={x:0,y:0};explicitlySuppliedPortAnchor=!1;incomingEdges=[];outgoingEdges=[];margin={left:0,top:0,right:0,bottom:0};labels=[];getNode(){return this.owner}setNode(e){if(this.owner!==null){let e=this.owner.getPorts(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.owner=e,this.owner!==null&&this.owner.getPorts().push(this)}getSide(){return this.side}setSide(e){this.applySideAndAnchor(e),this.explicitSide=!0}setSideInferred(e){this.applySideAndAnchor(e)}isExplicitSide(){return this.explicitSide}applySideAndAnchor(e){if(this.side=e,!this.explicitlySuppliedPortAnchor)switch(this.side){case`NORTH`:this.anchor.x=this.size.x/2,this.anchor.y=0;break;case`EAST`:this.anchor.x=this.size.x,this.anchor.y=this.size.y/2;break;case`SOUTH`:this.anchor.x=this.size.x/2,this.anchor.y=this.size.y;break;case`WEST`:this.anchor.x=0,this.anchor.y=this.size.y/2}}getAnchor(){return this.anchor}setAnchor(e){this.anchor.x=e.x,this.anchor.y=e.y}isExplicitlySuppliedPortAnchor(){return this.explicitlySuppliedPortAnchor}setExplicitlySuppliedPortAnchor(e){this.explicitlySuppliedPortAnchor=e}getAbsoluteAnchor(){let e=this.owner;return{x:e.position.x+this.position.x+this.anchor.x,y:e.position.y+this.position.y+this.anchor.y}}getIncomingEdges(){return this.incomingEdges}getOutgoingEdges(){return this.outgoingEdges}getConnectedEdges(){return[...this.incomingEdges,...this.outgoingEdges]}getConnectedPorts(){let e=[];for(let t of this.getConnectedEdges())e.push(this.otherEnd(t));return e}getPredecessorPorts(){return this.incomingEdges.map(e=>e.getSource()).filter(Boolean)}getSuccessorPorts(){return this.outgoingEdges.map(e=>e.getTarget()).filter(Boolean)}otherEnd(e){return e.getSource()===this?e.getTarget():e.getSource()}getDegree(){return this.incomingEdges.length+this.outgoingEdges.length}getNetFlow(){return this.incomingEdges.length-this.outgoingEdges.length}getMargin(){return this.margin}getLabels(){return this.labels}setLabels(e){this.labels=e}getIndex(){return this.owner===null?-1:this.owner.getPorts().indexOf(this)}},U=class extends ar{source=null;target=null;bendPoints=[];labels=[];getSource(){return this.source}setSource(e){if(this.source!==null){let e=this.source.getOutgoingEdges(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.source=e,this.source!==null&&this.source.getOutgoingEdges().push(this)}getTarget(){return this.target}setTarget(e){if(this.target!==null){let e=this.target.getIncomingEdges(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.target=e,this.target!==null&&this.target.getIncomingEdges().push(this)}setTargetAndInsertAtIndex(e,t){if(this.target!==null){let e=this.target.getIncomingEdges(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.target=e,this.target!==null&&this.target.getIncomingEdges().splice(t,0,this)}getBendPoints(){return this.bendPoints}getLabels(){return this.labels}isSelfLoop(){return this.source!==null&&this.target!==null&&this.source.getNode()!==null&&this.source.getNode()===this.target.getNode()}isInLayerEdge(){return this.source!==null&&this.target!==null&&!this.isSelfLoop()&&this.source.getNode().getLayer()===this.target.getNode().getLayer()}getOther(e){return this.source===e?this.target:this.target===e?this.source:null}getOtherNode(e){return this.source!==null&&this.source.getNode()===e?this.target?.getNode()??null:this.target!==null&&this.target.getNode()===e?this.source?.getNode()??null:null}reverse(e,t){this.setProperty(A,!this.getProperty(A));let n=this.source,r=this.target;this.setSource(r),this.setTarget(n),this.bendPoints.reverse();for(let e of this.labels)e.placement===`HEAD`?e.placement=`TAIL`:e.placement===`TAIL`&&(e.placement=`HEAD`)}},sr=class{indeg=[];outdeg=[];mark=[];sources=[];sinks=[];random=null;process(e,t){t.begin(`Greedy cycle removal`,1);let n=e.getLayerlessNodes(),r=n.length;this.indeg=Array(r).fill(0),this.outdeg=Array(r).fill(0),this.mark=Array(r).fill(0);let i=0;for(let t of n){t.setGraph(e),t.id=i;for(let e of t.getPorts()){for(let n of e.getIncomingEdges()){if(n.getSource()!==null&&n.getSource().getNode()===t)continue;let e=n.getProperty(Ge);this.indeg[i]+=e>0?e+1:1}for(let n of e.getOutgoingEdges()){if(n.getTarget()!==null&&n.getTarget().getNode()===t)continue;let e=n.getProperty(Ge);this.outdeg[i]+=e>0?e+1:1}}this.outdeg[i]===0?this.sinks.push(t):this.indeg[i]===0&&this.sources.push(t),i++}let a=-1,o=1,s=[];for(this.random=e.getProperty(P);r>0;){for(;this.sinks.length>0;){let e=this.sinks.shift();this.mark[n.indexOf(e)]=a--,this.updateNeighbors(e,n),r--}for(;this.sources.length>0;){let e=this.sources.shift();this.mark[n.indexOf(e)]=o++,this.updateNeighbors(e,n),r--}if(r>0){let e=-(2**53-1);for(let t=0;t<n.length;t++)if(this.mark[t]===0){let r=this.outdeg[t]-this.indeg[t];r>=e&&(r>e&&(s.length=0,e=r),s.push(n[t]))}let t=this.chooseNodeWithMaxOutflow(s);this.mark[n.indexOf(t)]=o++,this.updateNeighbors(t,n),r--}}let c=n.length+1;for(let e=0;e<n.length;e++)this.mark[e]<0&&(this.mark[e]+=c);for(let t of n)for(let r of[...t.getPorts()])for(let i of[...r.getOutgoingEdges()]){let r=n.indexOf(i.getTarget().getNode());this.mark[n.indexOf(t)]>this.mark[r]&&(i.reverse(e,!0),e.setProperty(ge,!0))}this.dispose(),t.done()}chooseNodeWithMaxOutflow(e){return e[this.random.nextInt(e.length)]}updateNeighbors(e,t){for(let n of e.getPorts())for(let r of n.getConnectedEdges()){let i=r.getSource()===n?r.getTarget():r.getSource();if(i===null)continue;let a=i.getNode();if(a===null||e===a)continue;let o=r.getProperty(Ge),s=o<0?0:o,c=t.indexOf(a);this.mark[c]===0&&(r.getTarget()===i?(this.indeg[c]-=s+1,this.indeg[c]<=0&&this.outdeg[c]>0&&this.sources.push(a)):(this.outdeg[c]-=s+1,this.outdeg[c]<=0&&this.indeg[c]>0&&this.sinks.push(a)))}}dispose(){this.indeg=[],this.outdeg=[],this.mark=[],this.sources=[],this.sinks=[]}};function cr(e){let t=e.getGraph()?.getProperty(Dn),n=e.getPosition();return t===`TOP_LEFT`?{x:n.x,y:n.y}:{x:n.x+e.getSize().x/2,y:n.y+e.getSize().y/2}}function lr(e){let t=[];for(let n of e.getLayerlessNodes()){n.id=1;let e=cr(n).x;for(let r of n.getPorts(`OUTPUT`))for(let i of r.getOutgoingEdges()){let r=i.getTarget()?.getNode();r!=null&&r!==n&&cr(r).x<e&&t.push(i)}}for(let n of t)n.reverse(e,!0);t.length=0;for(let n of e.getLayerlessNodes())n.id>0&&ur(n,t,e);for(let n of t)n.reverse(e,!0)}function ur(e,t,n){e.id=-1;for(let r of e.getPorts(`OUTPUT`))for(let i of r.getOutgoingEdges()){let r=i.getTarget()?.getNode();r!=null&&e!==r&&(r.id<0?t.push(i):r.id>0&&ur(r,t,n))}e.id=0}var dr=class{firstSeparateNodes=0;lastSeparateNodes=0;computeConstraintModelOrder(e,t){let n=0;switch(e.getProperty(Vt)){case`FIRST_SEPARATE`:n=2*-t+this.firstSeparateNodes,this.firstSeparateNodes++;break;case`FIRST`:n=-t;break;case`LAST`:n=t;break;case`LAST_SEPARATE`:n=2*t+this.lastSeparateNodes,this.lastSeparateNodes++}return e.hasProperty(F)&&(n+=e.getProperty(F)),n}computeConstraintGroupModelOrder(e,t,n){let r=0;switch(e.getProperty(Vt)){case`FIRST_SEPARATE`:r=2*-t+this.firstSeparateNodes,this.firstSeparateNodes++;break;case`FIRST`:r=-t;break;case`LAST`:r=t;break;case`LAST_SEPARATE`:r=2*t+this.lastSeparateNodes,this.lastSeparateNodes++}if(e.hasProperty(F)){let t=e.getProperty(In);if(t==null)throw TypeError(`Cannot invoke "java.lang.Integer.intValue()" because the return value of "org.eclipse.elk.alg.layered.graph.LGraph.getProperty(org.eclipse.elk.graph.properties.IProperty)" is null`);r+=t*n+e.getProperty(F)}return r}resetInternalCounters(){this.firstSeparateNodes=0,this.lastSeparateNodes=0}};function fr(e,t){t.begin(`Model order cycle breaking`,1);let n=[];if(!e.hasProperty(xn))throw TypeError(`NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "org.eclipse.elk.alg.layered.graph.LGraph.getProperty(org.eclipse.elk.graph.properties.IProperty)" is null`);let r=Math.max(e.getLayerlessNodes().length,e.getProperty(xn)),i=r*e.getProperty(Ut),a=e.getProperty(mt)===`ENFORCED`;for(let t of e.getLayerlessNodes()){let e=new dr,o=a?e.computeConstraintGroupModelOrder(t,i,r):e.computeConstraintModelOrder(t,r);for(let s of t.getPorts(`OUTPUT`))for(let t of s.getOutgoingEdges()){let s=t.getTarget().getNode();(a?e.computeConstraintGroupModelOrder(s,i,r):e.computeConstraintModelOrder(s,r))<o&&n.push(t)}}for(let t of n)t.reverse(e,!0),e.setProperty(ge,!0);t.done()}var pr=class extends sr{layeredGraph;process(e,t){this.layeredGraph=e,super.process(e,t)}chooseNodeWithMaxOutflow(e){let t=null,n=2**53-1,r=Math.max(this.layeredGraph.getLayerlessNodes().length,this.layeredGraph.getProperty(xn)),i=r*this.layeredGraph.getProperty(Ut),a=new dr,o=this.layeredGraph.getProperty(mt)===`ENFORCED`;for(let s of e)if(s.hasProperty(F)){let e=o?a.computeConstraintGroupModelOrder(s,i,r):a.computeConstraintModelOrder(s,r);n>e&&(n=e,t=s)}return t===null?e[this.layeredGraph.getProperty(P).nextInt(e.length)]:t}},mr=class{process(e){let t=this.handleOuterNodes(e);this.handleInnerNodes(e,t)}handleOuterNodes(e){let t=[];for(let n of e.getLayerlessNodes())this.handleLayerConstraintNode(e,n)||t.push(n);return t}handleInnerNodes(e,t){for(let n of t)if(this.handleLayerConstraintNode(e,n),D.isSideFixed(n.getProperty(O))&&n.getPorts().length>0){let t=!0;for(let e of n.getPorts()){let n=e.getSide(),r=e.getNetFlow();if(!(n===`EAST`&&r>0||n===`WEST`&&r<0)){t=!1;break}for(let n of e.getOutgoingEdges()){let e=n.getTarget()?.getNode()?.getLayerConstraint();if(e===`LAST`||e===`LAST_SEPARATE`){t=!1;break}}if(!t)break;for(let n of e.getIncomingEdges()){let e=n.getSource()?.getNode()?.getLayerConstraint();if(e===`FIRST`||e===`FIRST_SEPARATE`){t=!1;break}}if(!t)break}t&&this.reverseEdges(e,n,`NONE`,`UNDEFINED`)}}handleLayerConstraintNode(e,t){let n=t.getLayerConstraint(),r=null;switch(n){case`FIRST`:case`FIRST_SEPARATE`:r=`OUTGOING_ONLY`;break;case`LAST`:case`LAST_SEPARATE`:r=`INCOMING_ONLY`}return r!==null&&(t.setProperty(he,`OUTGOING_ONLY`),r===`INCOMING_ONLY`?this.reverseEdges(e,t,n,`INPUT`):this.reverseEdges(e,t,n,`OUTPUT`),!0)}reverseEdges(e,t,n,r){for(let i of[...t.getPorts()]){if(r===`INPUT`||r===`UNDEFINED`)for(let t of[...i.getOutgoingEdges()])this.canReverseOutgoingEdge(n,t)&&t.reverse(e,!0);if(r===`OUTPUT`||r===`UNDEFINED`)for(let t of[...i.getIncomingEdges()])this.canReverseIncomingEdge(n,t)&&t.reverse(e,!0)}}canReverseOutgoingEdge(e,t){if(t.getProperty(A))return!1;let n=t.getTarget()?.getNode();return!(n==null||e===`LAST`&&n.getType()===`LABEL`||n.getLayerConstraint()===`LAST_SEPARATE`)}canReverseIncomingEdge(e,t){if(t.getProperty(A))return!1;let n=t.getSource()?.getNode();return!(n==null||e===`FIRST`&&n.getType()===`LABEL`||n.getLayerConstraint()===`FIRST_SEPARATE`)}},hr=class{process(e){this.identifyHyperedges(e);for(let t of e.getLayers()){let e=t.getNodes();if(e.length===0)continue;let n=null,r=null;for(let t=0;t<e.length;t++){let i=e[t],a=i.getType();if(a===`LONG_EDGE`&&r===`LONG_EDGE`&&n!==null){let r=this.checkMergeAllowed(i,n);if(r.allowMerge){this.mergeNodes(i,n,r.sameSource,r.sameTarget),e.splice(t,1),t--;continue}}n=i,r=a}}}checkMergeAllowed(e,t){let n=e.getProperty(on),r=t.getProperty(on),i=e.getProperty(B),a=t.getProperty(B),o=e.getProperty(I),s=t.getProperty(I),c=i!=null&&i===a,l=o!=null&&o===s;if(!n&&!r)return{allowMerge:e.getPorts()[0]?.id===t.getPorts()[0]?.id,sameSource:c,sameTarget:l};let u=(!n||e.getProperty(En))&&(!r||t.getProperty(En)),d=(!n||!e.getProperty(En))&&(!r||!t.getProperty(En));return{allowMerge:c&&u||l&&d,sameSource:c,sameTarget:l}}mergeNodes(e,t,n,r){let i=t.getPorts(`WEST`)[0],a=t.getPorts(`EAST`)[0];for(let t of e.getPorts()){for(;t.getIncomingEdges().length>0;)t.getIncomingEdges()[0].setTarget(i);for(;t.getOutgoingEdges().length>0;)t.getOutgoingEdges()[0].setSource(a)}n||t.setProperty(B,null),r||t.setProperty(I,null)}identifyHyperedges(e){let t=[];for(let n of e.getLayers())for(let e of n.getNodes())t.push(...e.getPorts());for(let e of t)e.id=-1;let n=0;for(let e of t)e.id===-1&&this.dfs(e,n++)}dfs(e,t){e.id=t;for(let n of e.getConnectedPorts())n.id===-1&&this.dfs(n,t);if(e.getNode().getType()===`LONG_EDGE`)for(let n of e.getNode().getPorts())n!==e&&n.id===-1&&this.dfs(n,t)}},W=class{id=0;owner=null;size={x:0,y:0};nodes=[];constructor(e=null){this.owner=e}getGraph(){return this.owner}getSize(){return this.size}getNodes(){return this.nodes}getIndex(){return this.owner===null?-1:this.owner.getLayers().indexOf(this)}},gr=class{id=0;internalId=0;origin=null;type=``;layer=0;outgoingEdges=[];incomingEdges=[];allEdgesCache=null;treeNode=!1;unknownCutvalues=[];getOutgoingEdges(){return this.outgoingEdges}getIncomingEdges(){return this.incomingEdges}getConnectedEdges(){return this.allEdgesCache===null&&(this.allEdgesCache=[...this.incomingEdges,...this.outgoingEdges]),this.allEdgesCache}invalidateConnectedEdges(){this.allEdgesCache=null}},_r=class{node;constructor(){this.node=new gr}id(e){return this.node.id=e,this}origin(e){return this.node.origin=e,this}type(e){return this.node.type=e,this}create(e){return e.nodes.push(this.node),this.node}};function vr(){return new _r}var yr=class{id=0;internalId=0;origin=null;source;target;weight=0;delta=1;treeEdge=!1;getSource(){return this.source}getTarget(){return this.target}getOther(e){if(e===this.source)return this.target;if(e===this.target)return this.source;throw Error(`Node not part of edge`)}reverse(){let e=this.source;this.source=this.target,this.target=e;let t=this.target.getOutgoingEdges(),n=t.indexOf(this);n!==-1&&t.splice(n,1),this.target.getIncomingEdges().push(this);let r=this.source.getIncomingEdges(),i=r.indexOf(this);return i!==-1&&r.splice(i,1),this.source.getOutgoingEdges().push(this),this.source.invalidateConnectedEdges(),this.target.invalidateConnectedEdges(),this}},br=class{edge;constructor(){this.edge=new yr}id(e){return this.edge.id=e,this}origin(e){return this.edge.origin=e,this}weight(e){return this.edge.weight=e,this}delta(e){return this.edge.delta=e,this}source(e){return this.edge.source=e,this}target(e){return this.edge.target=e,this}create(){if(this.edge.source===void 0||this.edge.target===void 0)throw Error(`NEdge must have a source and target NNode specified.`);if(this.edge.source===this.edge.target)throw Error(`Network simplex does not support self-loops`);return this.edge.source.getOutgoingEdges().push(this.edge),this.edge.target.getIncomingEdges().push(this.edge),this.edge.source.invalidateConnectedEdges(),this.edge.target.invalidateConnectedEdges(),this.edge}};function G(){return new br}var xr=class{nodes=[];addNode(e){let t=new gr;return t.origin=e,this.nodes.push(t),t}addEdge(e,t,n,r,i){if(r===i)throw Error(`Network simplex does not support self-loops`);let a=new yr;return a.origin=e,a.weight=t,a.delta=n,a.source=r,a.target=i,a.source.getOutgoingEdges().push(a),a.target.getIncomingEdges().push(a),a.source.invalidateConnectedEdges(),a.target.invalidateConnectedEdges(),a}createArtificialRootAndConnect(e){let t=vr().create(this);for(let n of e)G().delta(0).weight(0).source(t).target(n).create();return t}findConCompRepresentatives(){let e=[],t=Array(this.nodes.length).fill(!1);for(let n of this.nodes)t[n.internalId]||(e.push(n),this.dfs(n,t));return e}dfs(e,t){if(!t[e.internalId]){t[e.internalId]=!0;for(let n of e.getConnectedEdges())this.dfs(n.getOther(e),t)}}makeConnected(){let e=0;for(let t of this.nodes)t.internalId=e++;let t=this.findConCompRepresentatives(),n=null;return t.length>1&&(n=this.createArtificialRootAndConnect(t)),n}isAcyclic(){let e=0;for(let t of this.nodes)t.internalId=e++;let t=Array(this.nodes.length).fill(0),n=Array(this.nodes.length).fill(0);for(let e of this.nodes)t[e.internalId]+=e.getIncomingEdges().length;let r=[];for(let e of this.nodes)e.getIncomingEdges().length===0&&r.push(e);if(r.length===0&&this.nodes.length>0)return!1;for(;r.length>0;){let e=r.shift();for(let i of e.getOutgoingEdges()){let a=i.getTarget();n[a.internalId]=Math.max(n[a.internalId],n[e.internalId]+1),t[a.internalId]--,t[a.internalId]===0&&r.push(a)}}for(let e of this.nodes)for(let t of e.getOutgoingEdges())if(n[t.target.internalId]<=n[t.source.internalId])return!1;return!0}},Sr=class e{graph;edges=[];treeEdges=/* @__PURE__ */ new Set;sources=[];edgeVisited=/* @__PURE__ */ new Uint8Array;postOrder=0;poID=[];lowestPoID=[];cutvalue=[];cutvalueLeafs=[];subtreeNodes=[];subtreeEdges=[];incidentCounts=[];topologicalRoots=[];spanIn=0;spanOut=0;previousLayeringNodeCounts=null;doBalance=!1;iterationLimit=2**53-1;constructor(){}static forGraph(t){let n=new e;return n.graph=t,n}prepare(e){return this.graph=e,this}withBalancing(e){return this.doBalance=e,this}withPreviousLayering(e){return this.previousLayeringNodeCounts=e,this}withIterationLimit(e){return this.iterationLimit=e,this}execute(){this.executeInternal(null)}executeWithMonitor(e){e.begin(`Network simplex`,1),this.executeInternal(e),e.done()}executeInternal(e){if(this.graph.nodes.length<1)return;for(let e of this.graph.nodes)e.layer=0;let t=this.graph.nodes.length>=40;t&&this.removeSubtrees(),this.initialize(),this.feasibleTree();let n=this.leaveEdge(),r=0;for(;n!==null&&r<this.iterationLimit;)this.exchange(n,this.enterEdge(n)),n=this.leaveEdge(),r++;t&&this.reattachSubtrees(),this.doBalance?this.balance(this.normalize()):this.normalize()}removeSubtrees(){this.subtreeNodes.length=0,this.subtreeEdges.length=0;let e=[];for(let t of this.graph.nodes)t.getConnectedEdges().length===1&&e.push(t);let t=0;for(;t<e.length;){let n=e[t++];if(n.getConnectedEdges().length===0)continue;let r=n.getConnectedEdges()[0],i=n.getOutgoingEdges().length>0,a=r.getOther(n);if(i){let e=a.getIncomingEdges().indexOf(r);e!==-1&&a.getIncomingEdges().splice(e,1)}else{let e=a.getOutgoingEdges().indexOf(r);e!==-1&&a.getOutgoingEdges().splice(e,1)}a.invalidateConnectedEdges(),a.getConnectedEdges().length===1&&e.push(a),this.subtreeNodes.push(n),this.subtreeEdges.push(r);let o=this.graph.nodes.indexOf(n);o!==-1&&this.graph.nodes.splice(o,1)}}reattachSubtrees(){for(;this.subtreeNodes.length>0;){let e=this.subtreeNodes.pop(),t=this.subtreeEdges.pop(),n=t.getOther(e);t.target===e?(n.getOutgoingEdges().push(t),e.layer=n.layer+t.delta):(n.getIncomingEdges().push(t),e.layer=n.layer-t.delta),n.invalidateConnectedEdges(),this.graph.nodes.push(e)}}initialize(){let e=this.graph.nodes.length;for(let e of this.graph.nodes)e.treeNode=!1;this.poID.length<e?this.poID=Array(e).fill(0):this.poID.fill(0),this.lowestPoID.length<e?this.lowestPoID=Array(e).fill(0):this.lowestPoID.fill(0),this.sources.length=0;let t=0;this.edges.length=0;for(let e of this.graph.nodes){e.internalId=t++,e.getIncomingEdges().length===0&&this.sources.push(e);let n=e.getOutgoingEdges();for(let e=0;e<n.length;e++)this.edges.push(n[e])}let n=0;for(let e of this.edges)e.internalId=n++,e.treeEdge=!1;let r=this.edges.length;this.cutvalue.length<r&&(this.cutvalue=Array(r).fill(0)),this.edgeVisited.length<r&&(this.edgeVisited=new Uint8Array(r)),this.edgeVisited.fill(0),this.treeEdges=/* @__PURE__ */ new Set,this.postOrder=1}feasibleTree(){if(this.layeringTopologicalNumbering(this.sources),this.edges.length>0){for(this.edgeVisited.fill(0);this.tightTreeDFS(this.graph.nodes[0])<this.graph.nodes.length;){let e=this.minimalSlack(),t=e.getTarget().layer-e.getSource().layer-e.delta;e.getTarget().treeNode&&(t=-t);for(let e of this.graph.nodes)e.treeNode&&(e.layer+=t);this.edgeVisited.fill(0)}this.edgeVisited.fill(0),this.postorderTraversal(this.graph.nodes[0]),this.cutvalues()}}layeringTopologicalNumbering(e){let t=this.graph.nodes.length;this.incidentCounts.length<t?this.incidentCounts=Array(t).fill(0):this.incidentCounts.fill(0);let n=this.incidentCounts;for(let e of this.graph.nodes)n[e.internalId]+=e.getIncomingEdges().length;this.topologicalRoots.length=0;let r=this.topologicalRoots;for(let t=0;t<e.length;t++)r.push(e[t]);let i=0;for(;i<r.length;){let e=r[i++];for(let t of e.getOutgoingEdges()){let i=t.getTarget();i.layer=Math.max(i.layer,e.layer+t.delta),n[i.internalId]--,n[i.internalId]===0&&r.push(i)}}}minimalSpan(e){let t=2**53-1,n=2**53-1,r,i=e.getIncomingEdges();for(let a=0;a<i.length;a++){let o=i[a];r=o.getTarget().layer-o.getSource().layer,o.getTarget()===e&&r<n?n=r:r<t&&(t=r)}let a=e.getOutgoingEdges();for(let i=0;i<a.length;i++){let o=a[i];r=o.getTarget().layer-o.getSource().layer,o.getTarget()===e&&r<n?n=r:r<t&&(t=r)}this.spanIn=n===2**53-1?-1:n,this.spanOut=t===2**53-1?-1:t}tightTreeDFS(e){let t=1;e.treeNode=!0;let n=e.getIncomingEdges();for(let r=0;r<n.length;r++){let i=n[r];if(!this.edgeVisited[i.internalId]){this.edgeVisited[i.internalId]=1;let n=i.getOther(e);i.treeEdge?t+=this.tightTreeDFS(n):!n.treeNode&&i.delta===i.getTarget().layer-i.getSource().layer&&(i.treeEdge=!0,this.treeEdges.add(i),t+=this.tightTreeDFS(n))}}let r=e.getOutgoingEdges();for(let n=0;n<r.length;n++){let i=r[n];if(!this.edgeVisited[i.internalId]){this.edgeVisited[i.internalId]=1;let n=i.getOther(e);i.treeEdge?t+=this.tightTreeDFS(n):!n.treeNode&&i.delta===i.getTarget().layer-i.getSource().layer&&(i.treeEdge=!0,this.treeEdges.add(i),t+=this.tightTreeDFS(n))}}return t}minimalSlack(){let e=2**53-1,t=null,n;for(let r of this.edges)r.getSource().treeNode!==r.getTarget().treeNode&&(n=r.getTarget().layer-r.getSource().layer-r.delta,n<e&&(e=n,t=r));return t}postorderTraversal(e){let t=2**53-1,n=e.getIncomingEdges();for(let r=0;r<n.length;r++){let i=n[r];if(i.treeEdge&&!this.edgeVisited[i.internalId]){this.edgeVisited[i.internalId]=1;let n=this.postorderTraversal(i.getOther(e));n<t&&(t=n)}}let r=e.getOutgoingEdges();for(let n=0;n<r.length;n++){let i=r[n];if(i.treeEdge&&!this.edgeVisited[i.internalId]){this.edgeVisited[i.internalId]=1;let n=this.postorderTraversal(i.getOther(e));n<t&&(t=n)}}this.poID[e.internalId]=this.postOrder;let i=this.postOrder;return this.lowestPoID[e.internalId]=t<i?t:i,this.postOrder=i+1,this.lowestPoID[e.internalId]}isInHead(e,t){let n=t.getSource(),r=t.getTarget();return this.lowestPoID[n.internalId]<=this.poID[e.internalId]&&this.poID[e.internalId]<=this.poID[n.internalId]&&this.lowestPoID[r.internalId]<=this.poID[e.internalId]&&this.poID[e.internalId]<=this.poID[r.internalId]?!(this.poID[n.internalId]<this.poID[r.internalId]):this.poID[n.internalId]<this.poID[r.internalId]}cutvalues(){let e=this.cutvalueLeafs;e.length=0;let t;for(let n of this.graph.nodes){t=0;let r=n.unknownCutvalues;r.length=0;let i=n.getIncomingEdges();for(let e=0;e<i.length;e++){let n=i[e];n.treeEdge&&(r.push(n),t++)}let a=n.getOutgoingEdges();for(let e=0;e<a.length;e++){let n=a[e];n.treeEdge&&(r.push(n),t++)}t===1&&e.push(n)}let n,r,i;for(let t=0;t<e.length;t++){let a=e[t];for(;a.unknownCutvalues.length===1;){n=a.unknownCutvalues[0],this.cutvalue[n.internalId]=n.weight,r=n.getSource(),i=n.getTarget();let e=a.getIncomingEdges(),t=a.getOutgoingEdges();for(let t=0;t<e.length;t++){let o=e[t];o!==n&&(o.treeEdge?r===o.getSource()||i===o.getTarget()?this.cutvalue[n.internalId]-=this.cutvalue[o.internalId]-o.weight:this.cutvalue[n.internalId]+=this.cutvalue[o.internalId]-o.weight:a===r?o.getSource()===a?this.cutvalue[n.internalId]+=o.weight:this.cutvalue[n.internalId]-=o.weight:o.getSource()===a?this.cutvalue[n.internalId]-=o.weight:this.cutvalue[n.internalId]+=o.weight)}for(let e=0;e<t.length;e++){let o=t[e];o!==n&&(o.treeEdge?r===o.getSource()||i===o.getTarget()?this.cutvalue[n.internalId]-=this.cutvalue[o.internalId]-o.weight:this.cutvalue[n.internalId]+=this.cutvalue[o.internalId]-o.weight:a===r?o.getSource()===a?this.cutvalue[n.internalId]+=o.weight:this.cutvalue[n.internalId]-=o.weight:o.getSource()===a?this.cutvalue[n.internalId]-=o.weight:this.cutvalue[n.internalId]+=o.weight)}let o=r.unknownCutvalues,s=o.indexOf(n);s!==-1&&(o[s]=o[o.length-1],o.pop());let c=i.unknownCutvalues,l=c.indexOf(n);l!==-1&&(c[l]=c[c.length-1],c.pop()),a=r===a?n.getTarget():n.getSource()}}}leaveEdge(){for(let e of this.treeEdges)if(e.treeEdge&&this.cutvalue[e.internalId]<-1e-10)return e;return null}enterEdge(e){if(!e.treeEdge)throw Error(`The input edge is not a tree edge.`);let t=null,n=2**53-1,r;for(let i of this.edges){let a=i.getSource(),o=i.getTarget();this.isInHead(a,e)&&!this.isInHead(o,e)&&(r=o.layer-a.layer-i.delta,r<n&&(n=r,t=i))}return t}exchange(e,t){if(!e.treeEdge)throw Error(`Given leave edge is no tree edge.`);if(t.treeEdge)throw Error(`Given enter edge is a tree edge already.`);e.treeEdge=!1,this.treeEdges.delete(e),t.treeEdge=!0,this.treeEdges.add(t);let n=t.getTarget().layer-t.getSource().layer-t.delta;this.isInHead(t.getTarget(),e)||(n=-n);for(let t of this.graph.nodes)this.isInHead(t,e)||(t.layer+=n);this.postOrder=1,this.edgeVisited.fill(0),this.postorderTraversal(this.graph.nodes[0]),this.cutvalues()}normalize(){let e=-(2**53-1),t=2**53-1;for(let n of this.graph.nodes)t=Math.min(t,n.layer),e=Math.max(e,n.layer);let n=Array(e-t+1).fill(0);for(let e of this.graph.nodes)e.layer-=t,n[e.layer]++;let r=0;if(this.previousLayeringNodeCounts!==null){for(let e of this.previousLayeringNodeCounts)if(n[r]+=e,r++,n.length===r)break}return n}balance(e){let t;for(let n of this.graph.nodes)if(n.getIncomingEdges().length===n.getOutgoingEdges().length){t=n.layer,this.minimalSpan(n);for(let r=n.layer-this.spanIn+1;r<n.layer+this.spanOut;r++)e[r]<e[t]&&(t=r);e[t]<e[n.layer]&&(e[n.layer]--,e[t]++,n.layer=t)}}},Cr=class e{layeredGraph=null;componentNodes=[];nodeVisited=[];componentIndex=null;static ITER_LIMIT_FACTOR=4;process(t,n){n.begin(`Network simplex layering`,1),this.layeredGraph=t;let r=t.getProperty(en)*e.ITER_LIMIT_FACTOR,i=t.getLayerlessNodes();if(i.length<1){n.done();return}let a=this.connectedComponents(i),o=null,s=null;for(let e of a){if(e.length===1&&e[0].getConnectedEdges().length===0){let n=t.getLayers();for(;n.length<=0;)n.push(new W(t));e[0].setLayer(n[0]);continue}let i=r*Math.floor(Math.sqrt(e.length)),c=this.initialize(e);s=s===null?Sr.forGraph(c):s.prepare(c),s.withIterationLimit(i).withPreviousLayering(o).withBalancing(!0).executeWithMonitor(n);let l=t.getLayers();for(let e of c.nodes){for(;l.length<=e.layer;)l.push(new W(t));e.origin.setLayer(l[e.layer])}if(a.length>1){o=Array(t.getLayers().length).fill(0);let e=0;for(let n of t.getLayers())o[e++]=n.getNodes().length}}i.length=0,this.dispose(),n.done()}connectedComponents(e){let t=[];this.nodeVisited=Array(e.length).fill(!1),this.componentNodes=[];let n=/* @__PURE__ */ new Map;for(let t=0;t<e.length;t++)n.set(e[t],t);this.componentIndex=n;for(let n of e)this.componentNodes=[],this.connectedComponentsDFS(n),this.componentNodes.length>0&&(t.length===0||t[0].length<this.componentNodes.length?t.unshift(this.componentNodes):t.push(this.componentNodes));return t}connectedComponentsDFS(e){let t=this.componentIndex.get(e);if(!(t===void 0||this.nodeVisited[t])){this.nodeVisited[t]=!0,this.componentNodes.push(e);for(let t of e.getPorts()){for(let e of t.getIncomingEdges())this.connectedComponentsDFS(this.getOpposite(t,e).getNode());for(let e of t.getOutgoingEdges())this.connectedComponentsDFS(this.getOpposite(t,e).getNode())}}}initialize(e){let t=/* @__PURE__ */ new Map,n=new xr;for(let r of e){let e=n.addNode(r);t.set(r,e)}for(let r of e)for(let e of r.getPorts())for(let r of e.getOutgoingEdges())r.isSelfLoop()||r.getSource()!==null&&r.getTarget()!==null&&n.addEdge(r,1*Math.max(1,r.getProperty(Ze)),1,t.get(r.getSource().getNode()),t.get(r.getTarget().getNode()));return n}dispose(){this.componentNodes=[],this.layeredGraph=null,this.nodeVisited=[],this.componentIndex=null}getOpposite(e,t){if(t.getSource()===e)return t.getTarget();if(t.getTarget()===e)return t.getSource();throw Error(`Input edge is not connected to the input port.`)}},wr=class{layeredGraph;nodeHeights=/* @__PURE__ */ new Map;process(e,t){t.begin(`Longest path layering`,1),this.layeredGraph=e;let n=e.getLayerlessNodes();this.nodeHeights=/* @__PURE__ */ new Map;for(let e of n)this.nodeHeights.set(e,-1);for(let e of n)this.visit(e);n.length=0,this.layeredGraph=null,this.nodeHeights=/* @__PURE__ */ new Map,t.done()}visit(e){let t=this.nodeHeights.get(e);if(t>=0)return t;let n=1;for(let t of e.getPorts())for(let r of t.getOutgoingEdges()){let t=r.getTarget().getNode();if(e!==t){let e=this.visit(t);n=Math.max(n,e+1)}}return this.putNode(e,n),n}putNode(e,t){let n=this.layeredGraph.getLayers();for(let e=n.length;e<t;e++)n.unshift(new W(this.layeredGraph));e.setLayer(n[n.length-t]),this.nodeHeights.set(e,t)}},Tr=class{layeredGraph;nodeHeights=/* @__PURE__ */ new Map;process(e,t){t.begin(`Longest path to source layering`,1),this.layeredGraph=e;let n=e.getLayerlessNodes();this.nodeHeights=/* @__PURE__ */ new Map;for(let e of n)this.nodeHeights.set(e,-1);for(let e of n)this.visit(e);n.length=0,this.layeredGraph=null,this.nodeHeights=/* @__PURE__ */ new Map,t.done()}visit(e){let t=this.nodeHeights.get(e);if(t!==void 0&&t>=0)return t;if(t===void 0)return 0;let n=1;for(let t of e.getPorts())for(let r of t.getIncomingEdges()){let t=r.getSource().getNode();if(e!==t){let e=this.visit(t);n=Math.max(n,e+1)}}return this.putNode(e,n),n}putNode(e,t){let n=this.layeredGraph.getLayers();for(let e=n.length;e<t;e++)n.push(new W(this.layeredGraph));e.setLayer(n[t-1]),this.nodeHeights.set(e,t)}};function Er(e){if(e.getLayers().length<=2)return;let t=e.getLayers();for(let n=0;n<t.length-1;n++){let r=t[n],i=t[n+1];for(let t of r.getNodes())for(let r of t.getPorts())for(let t of[...r.getOutgoingEdges()]){let r=t.getTarget().getNode().getLayer();r!==null&&r.getIndex()-n>1&&Or(t,Dr(e,i,t))}}}function Dr(e,t,n){let r=new V(e);return r.setType(`LONG_EDGE`),r.setProperty(L,n),r.setProperty(O,`FIXED_POS`),r.setLayer(t),r}function Or(e,t){let n=e.getTarget(),r=e.getProperty(Ye);r<0&&(r=0,e.setProperty(Ye,r)),t.size.y=r;let i=Math.floor(r/2),a=new H;a.setSide(`WEST`),a.setNode(t),a.getPosition().y=i;let o=new H;o.setSide(`EAST`),o.setNode(t),o.getPosition().y=i,e.setTarget(a);let s=new U;return s.copyProperties(e),s.setProperty(R,null),s.setSource(o),s.setTarget(n),kr(t,e,s),Ar(e,s),s}function kr(e,t,n){let r=t.getSource().getNode(),i=n.getTarget().getNode();r.getType()===`LONG_EDGE`?(e.setProperty(B,r.getProperty(B)),e.setProperty(I,r.getProperty(I)),e.setProperty(on,r.getProperty(on))):r.getType()===`LABEL`?(e.setProperty(B,r.getProperty(B)),e.setProperty(I,r.getProperty(I)),e.setProperty(on,!0)):i.getType()===`LABEL`?(e.setProperty(B,i.getProperty(B)),e.setProperty(I,i.getProperty(I)),e.setProperty(on,!0)):(e.setProperty(B,t.getSource()),e.setProperty(I,n.getTarget()))}function Ar(e,t){let n=[...e.getLabels()];for(let r of n)if(r.placement===`HEAD`){let n=e.getLabels().indexOf(r);n!==-1&&e.getLabels().splice(n,1),t.getLabels().push(r)}}function jr(e){return e.placement===void 0||e.placement===`CENTER`||e.placement===`UNDEFINED`}function Mr(e){let t=e.getProperty(Tn),n=e.getProperty(dt),r=e.getProperty(S)===`DOWN`||e.getProperty(S)===`UP`;for(let i of e.getLayerlessNodes())for(let a of[...i.getOutgoingEdges()]){if(!Nr(a))continue;let i=Pr(a),o=[],s=Fr(e,a,i,o).size,c=a.getLabels();for(let e=0;e<c.length;){let t=c[e];jr(t)?(r?(s.x+=t.size.x+n,s.y=Math.max(s.y,t.size.y)):(s.x=Math.max(s.x,t.size.x),s.y+=t.size.y+n),o.push(t),c.splice(e,1)):e++}r?(s.x-=n,s.y+=t+i):s.y+=t-n+i}}function Nr(e){return e.getSource().getNode()!==e.getTarget().getNode()&&e.getLabels().some(jr)}function Pr(e){let t=e.getProperty(Ye);return t<0&&(t=0,e.setProperty(Ye,t)),t}function Fr(e,t,n,r){let i=new V(e);return i.setType(`LABEL`),i.setProperty(L,t),i.setProperty(Hn,r),i.setProperty(O,`FIXED_POS`),i.setProperty(B,t.getSource()),i.setProperty(I,t.getTarget()),Or(t,i),i}const Ir=[`MEDIAN_LAYER`,`TAIL_LAYER`,`HEAD_LAYER`,`SPACE_EFFICIENT_LAYER`,`WIDEST_LAYER`,`CENTER_LAYER`];function Lr(e){return e===`WIDEST_LAYER`||e===`CENTER_LAYER`||e===`SPACE_EFFICIENT_LAYER`}function Rr(e){let t=e.getProperty(Me);zr(e);let n=Br(e,t),r=Array(e.getLayers().length).fill(0);for(let t of Ir)if(Lr(t)&&n.get(t).length>0){r=Vr(e);break}for(let e of Ir)Lr(e)||Ur(n.get(e),r);for(let e of Ir)Lr(e)&&Ur(n.get(e),r)}function zr(e){let t=0;for(let n of e.getLayers())n.id=t,t++}function Br(e,t){let n=/* @__PURE__ */ new Map;for(let e of Ir)n.set(e,[]);for(let r of e.getLayers())for(let e of r.getNodes())if(e.getType()===`LABEL`){let r=new ai(e,t);n.get(r.placementStrategy).push(r)}return n}function Vr(e){let t=Array(e.getLayers().length).fill(0);for(let n of e.getLayers())t[n.id]=Hr(n);return t}function Hr(e){let t=e.getGraph();if(t!==null&&(t.getProperty(S)===`DOWN`||t.getProperty(S)===`UP`))return 0;let n=0;for(let t of e.getNodes())t.getType()===`NORMAL`&&(n=Math.max(n,t.getSize().x));return n}function Ur(e,t){if(e.length!==0){if(e[0].placementStrategy===`SPACE_EFFICIENT_LAYER`)Zr(e,t);else for(let n of e){switch(n.placementStrategy){case`CENTER_LAYER`:ti(n,Gr(n,t),t);break;case`MEDIAN_LAYER`:ti(n,qr(n),t);break;case`WIDEST_LAYER`:ti(n,Wr(n,t),t);break;case`HEAD_LAYER`:Yr(n),ti(n,Jr(n,!0),t);break;case`TAIL_LAYER`:Yr(n),ti(n,Jr(n,!1),t)}ri(n)}}}function Wr(e,t){let n=e.leftmostLayerId;for(let r=n+1;r<=e.rightmostLayerId;r++)t[r]>t[n]&&(n=r);return n}function Gr(e,t){let n=Kr(e,t),r=n[n.length-1]/2;for(let t=0;t<n.length;t++)if(n[t]>=r)return e.leftmostLayerId+t;return e.leftmostLayerId+e.leftLongEdgeDummies.length}function Kr(e,t){let n=e.labelDummy.getGraph(),r=n.getProperty(_n)*2,i=n.getProperty(kn),a=Math.max(r,i),o=Array(e.totalDummyCount()),s=-a,c=0;for(let n of e.leftLongEdgeDummies)s+=t[n.getLayer().id]+a,o[c++]=s;s+=t[e.labelDummy.getLayer().id]+a,o[c++]=s;for(let n of e.rightLongEdgeDummies)s+=t[n.getLayer().id]+a,o[c++]=s;return o}function qr(e){let t=e.totalDummyCount(),n=Math.floor((t-1)/2);return e.leftmostLayerId+n}function Jr(e,t){let n=Xr(e);return t&&!n||!t&&n?e.rightmostLayerId:e.leftmostLayerId}function Yr(e){let t=e.placementStrategy===`HEAD_LAYER`,n=Xr(e);t&&!n||!t&&n?e.labelDummy.setProperty(z,`RIGHT`):e.labelDummy.setProperty(z,`LEFT`)}function Xr(e){let t=e.labelDummy.getIncomingEdges()[0],n=e.labelDummy.getOutgoingEdges()[0];return t.getProperty(A)||n.getProperty(A)}function Zr(e,t){let n=Qr(e,t);if(n.length===0)return;n.sort((e,t)=>t.labelDummy.getSize().x-e.labelDummy.getSize().x);let r=n.length;for(let e=0;e<r;e++)ti(n[e],ei(n,e,t),t)}function Qr(e,t){let n=[];for(let r of e)r.leftmostLayerId===r.rightmostLayerId?ti(r,r.leftmostLayerId,t):$r(r,t)||n.push(r);return n}function $r(e,t){let n=e.labelDummy.getSize().x,r=e.labelDummy.getGraph().getLayers().slice(e.leftmostLayerId,e.rightmostLayerId+1);for(let i of r)if(i.getSize().x>=n)return ti(e,i.id,t),!0;return!1}function ei(e,t,n){let r=e.length,i=e[t],a=i.labelDummy.getSize().x,o=i.leftmostLayerId,s=0;for(let c=i.leftmostLayerId;c<=i.rightmostLayerId;c++){if(a<=n[c])return c;let i=n[c],l=null;for(let n=t+1;n<r;n++){let t=e[n];t.leftmostLayerId<=c&&t.rightmostLayerId>=c&&(l=t)}l!==null&&(i=Math.max(i,l.labelDummy.getSize().x)),i>s&&(o=c,s=i)}return o}function ti(e,t,n){t!==e.leftmostLayerId+e.leftLongEdgeDummies.length&&ni(e.labelDummy,e.ithDummyNode(t-e.leftmostLayerId));let r=e.labelDummy.getLayer().id;n[r]=Math.max(n[r],e.labelDummy.getSize().x)}function ni(e,t){let n=e.getLayer(),r=t.getLayer(),i=n.getNodes().indexOf(e),a=r.getNodes().indexOf(t),o=e.getPorts(`INPUT`)[0],s=e.getPorts(`OUTPUT`)[0],c=t.getPorts(`INPUT`)[0],l=t.getPorts(`OUTPUT`)[0],u=[...o.getIncomingEdges()],d=[...s.getOutgoingEdges()],f=[...c.getIncomingEdges()],p=[...l.getOutgoingEdges()];e.setLayerAt(a,r);for(let e of f)e.setTarget(o);for(let e of p)e.setSource(s);t.setLayerAt(i,n);for(let e of u)e.setTarget(c);for(let e of d)e.setSource(l)}function ri(e){ii(e.labelDummy)}function ii(e){let t=e.getIncomingEdges()[0].getSource().getNode();for(;t.getType()===`LONG_EDGE`;)t.setProperty(En,!0),t=t.getIncomingEdges()[0].getSource().getNode()}var ai=class{labelDummy;placementStrategy;leftLongEdgeDummies=[];rightLongEdgeDummies=[];leftmostLayerId;rightmostLayerId;constructor(e,t){this.labelDummy=e,this.placementStrategy=t,this.gatherLeftLongEdgeDummies(),this.gatherRightLongEdgeDummies(),this.leftmostLayerId=this.leftLongEdgeDummies.length===0?e.getLayer().id:this.leftLongEdgeDummies[0].getLayer().id,this.rightmostLayerId=this.rightLongEdgeDummies.length===0?e.getLayer().id:this.rightLongEdgeDummies[this.rightLongEdgeDummies.length-1].getLayer().id;for(let t of e.getProperty(Hn)){let e=t.centerLabelPlacementStrategy;if(e!=null){this.placementStrategy=e;break}}}gatherLeftLongEdgeDummies(){let e=this.labelDummy;do e=e.getIncomingEdges()[0].getSource().getNode(),e.getType()===`LONG_EDGE`&&this.leftLongEdgeDummies.push(e);while(e.getType()===`LONG_EDGE`);this.leftLongEdgeDummies.reverse()}gatherRightLongEdgeDummies(){let e=this.labelDummy;do e=e.getOutgoingEdges()[0].getTarget().getNode(),e.getType()===`LONG_EDGE`&&this.rightLongEdgeDummies.push(e);while(e.getType()===`LONG_EDGE`)}totalDummyCount(){return this.rightmostLayerId-this.leftmostLayerId+1}ithDummyNode(e){return e<this.leftLongEdgeDummies.length?this.leftLongEdgeDummies[e]:e===this.leftLongEdgeDummies.length?this.labelDummy:this.rightLongEdgeDummies[e-this.leftLongEdgeDummies.length-1]}};function oi(e){let t=e.getProperty(Ft);for(let n of e.getLayers()){let e=n.getNodes();for(let n=e.length-1;n>=0;n--){let r=e[n];r.getType()===`LONG_EDGE`&&(si(r,t),e.splice(n,1))}}}function si(e,t){let n=e.getPorts(`WEST`)[0],r=e.getPorts(`EAST`)[0],i=n.getIncomingEdges(),a=r.getOutgoingEdges(),o=i.length,s=e.getPorts()[0].getAbsoluteAnchor();for(;o-->0;){let e=i[0],n=a[0],r=n.getTarget().getIncomingEdges().indexOf(n);e.setTargetAndInsertAtIndex(n.getTarget(),r),n.setSource(null),n.setTarget(null);let o=e.getBendPoints();t&&o.push({...s});for(let e of n.getBendPoints())o.push({...e});for(let t of n.getLabels())e.getLabels().push(t);let c=e.getProperty(R),l=n.getProperty(R);l!=null&&(c==null?e.setProperty(R,[...l]):c.push(...l))}}function ci(e){let t=e.getProperty(Tn),n=e.getProperty(dt),r=e.getProperty(S),i=r===`DOWN`||r===`UP`;for(let a of e.getLayers())for(let e=a.getNodes().length-1;e>=0;e--){let o=a.getNodes()[e];if(o.getType()!==`LABEL`)continue;let s=o.getProperty(L),c=s.getProperty(Ye),l=o.getProperty(Tt)===`BELOW`,u={...o.getPosition()};l&&(u.y+=c+t);let d={x:o.size.x,y:o.size.y-c-t},f=o.getProperty(Hn);if(i)li(f,u,n,d,l,r);else{let e=u.y;for(let t of f)t.position.x=u.x+(d.x-t.size.x)/2,t.position.y=e,e+=t.size.y+n}s.getLabels().push(...f),si(o,!1),a.getNodes().splice(e,1)}}function li(e,t,n,r,i,a){let o=a===`UP`?[...e].reverse():e;for(let e of o)e.position.x=t.x,i?e.position.y=t.y:e.position.y=t.y+r.y-e.size.y,t.x+=e.size.x+n}var ui=class{layerToNodes=/* @__PURE__ */ new Map;nodeToLayer=/* @__PURE__ */ new Map;put(e,t){let n=this.nodeToLayer.get(t);if(n!==void 0&&n!==e){let e=this.layerToNodes.get(n);if(e){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}}this.nodeToLayer.set(t,e);let r=this.layerToNodes.get(e);r||(r=[],this.layerToNodes.set(e,r)),r.includes(t)||r.push(t)}putAll(e,t){for(let n of t)this.put(e,n)}getValues(e){return this.layerToNodes.get(e)??[]}getKey(e){return this.nodeToLayer.get(e)}keys(){return[...this.layerToNodes.keys()]}isMaximalKey(e){return e===Math.max(...this.keys())}isMinimalKey(e){return e===Math.min(...this.keys())}},di=class{masterGraph;promotionStrategy=`NONE`;biLayerMap=new ui;process(e,t){switch(t.begin(`Node promotion heuristic`,1),this.masterGraph=e,this.promotionStrategy=e.getProperty(yt),this.promotionStrategy){case`MODEL_ORDER_LEFT_TO_RIGHT`:this.precalculateAndSetInformationModelOrder(),this.modelOrderNodePromotion(!0);break;case`MODEL_ORDER_RIGHT_TO_LEFT`:this.precalculateAndSetInformationModelOrder(),this.modelOrderNodePromotion(!1)}(this.promotionStrategy===`MODEL_ORDER_LEFT_TO_RIGHT`||this.promotionStrategy===`MODEL_ORDER_RIGHT_TO_LEFT`)&&this.setNewLayeringModelOrder(e),t.done()}precalculateAndSetInformationModelOrder(){this.biLayerMap=new ui;let e=0;for(let t of this.masterGraph.getLayers())t.id=e,e++;let t=this.promotionStrategy===`MODEL_ORDER_LEFT_TO_RIGHT`,n=(e,n)=>{if(!e.hasProperty(F)||!n.hasProperty(F))return 0;let r=e.getProperty(F),i=n.getProperty(F);return t?i-r:r-i};for(let e of this.masterGraph.getLayers())e.getNodes().sort(n),this.biLayerMap.putAll(e.id,e.getNodes())}modelOrderNodePromotion(e){let t;do{t=!1;let n=this.biLayerMap.keys();for(let r=e?n.length-2:1;e?r>=0:r<n.length;r+=e?-1:1){let n=this.biLayerMap.getValues(r);for(let i=0;i<n.length;i++){let a=n[i];if(!a.hasProperty(F)||this.biLayerMap.isMaximalKey(r)&&e||this.biLayerMap.isMinimalKey(r)&&!e)continue;let o=!0;for(let t of n)if(t.hasProperty(F)){let n=a.getProperty(F),r=t.getProperty(F);(e&&n<r||!e&&n>r)&&(o=!1)}if(!o)continue;let s=e?r+1:r-1,c=this.biLayerMap.getValues(s),l=!1,u=!0,d=!1;for(let t of c)if(t.hasProperty(F)){if(t!==a){let n=a.getProperty(F),r=t.getProperty(F);l||=e?r<n:r>n,u=!1}}else if(!l&&u&&t.getType()===`LABEL`){d=!0;let n=e?t.getIncomingEdges()[0].getSource().getNode():t.getOutgoingEdges()[0].getTarget().getNode();if(n===a){let r=e?t.getOutgoingEdges()[0].getTarget().getNode():t.getIncomingEdges()[0].getSource().getNode();(e?this.biLayerMap.getKey(r)-this.biLayerMap.getKey(n):this.biLayerMap.getKey(n)-this.biLayerMap.getKey(r))<=2&&(u=!1)}}if(d&&u){let t=e?a.getOutgoingEdges()[0].getTarget().getNode():a.getIncomingEdges()[0].getSource().getNode();(e?this.biLayerMap.getKey(t)-this.biLayerMap.getKey(a):this.biLayerMap.getKey(a)-this.biLayerMap.getKey(t))<=2&&t.getType()===`NORMAL`&&(u=!1)}if(l||u){let n=this.promoteNodeByModelOrder(a,e),r=new Set(n);for(;r.size>0;){let t=r.values().next().value;r.delete(t);for(let n of this.promoteNodeByModelOrder(t,e))r.add(n)}i--,t=!0}}}}while(t)}promoteNodeByModelOrder(e,t){let n=this.biLayerMap.getKey(e);this.biLayerMap.put(t?n+1:n-1,e);let r=/* @__PURE__ */ new Set;for(let n of t?e.getOutgoingEdges():e.getIncomingEdges()){let i=t?n.getTarget().getNode():n.getSource().getNode();this.biLayerMap.getKey(i)===this.biLayerMap.getKey(e)&&r.add(i)}return r}setNewLayeringModelOrder(e){let t=[];e.getLayers().length=0;let n=this.biLayerMap.keys().sort((e,t)=>e-t);for(let r of n){let n=this.biLayerMap.getValues(r);if(n.length>0){let i=new W(e);t.push(i),i.id=r;for(let e of n)e.setLayer(i)}}e.getLayers().push(...t)}},fi=class{binarySums;numsPerIndex;count=0;maxNum;constructor(e){this.maxNum=e,this.binarySums=new Int32Array(e+1),this.numsPerIndex=new Int32Array(e)}add(e){if(!Number.isInteger(e)||e<0||e>=this.numsPerIndex.length)throw RangeError(`BinaryIndexedTree.add(${e})`);this.count++,this.numsPerIndex[e]++;let t=e+1;for(;t<this.binarySums.length;)this.binarySums[t]++,t+=t&-t}rank(e){let t=e,n=0;for(;t>0;)n+=this.binarySums[t],t-=t&-t;return n}size(){return this.count}removeAll(e){if(!Number.isInteger(e)||e<0||e>=this.numsPerIndex.length)throw RangeError(`BinaryIndexedTree.removeAll(${e})`);let t=this.numsPerIndex[e];if(t===0)return;this.numsPerIndex[e]=0,this.count-=t;let n=e+1;for(;n<this.binarySums.length;)this.binarySums[n]-=t,n+=n&-n}reset(e){e===this.maxNum?(this.binarySums.fill(0),this.numsPerIndex.fill(0)):(this.maxNum=e,this.binarySums=new Int32Array(e+1),this.numsPerIndex=new Int32Array(e)),this.count=0}clear(){this.binarySums.fill(0),this.numsPerIndex.fill(0),this.count=0}isEmpty(){return this.count===0}};function pi(e,t){switch(t){case`EAST`:case`NORTH`:return e.getPortSideView(t);case`SOUTH`:case`WEST`:return[...e.getPortSideView(t)].reverse();default:return[]}}function mi(e,t){return{first:e,second:t}}var hi=class e{portPositions;indexTree=null;ends=[];nodeCardinalities=[];includedSet=/* @__PURE__ */ new Set;includedStamp=null;includedStampValue=0;scratchPortsCCW=[];scratchPortsInLayer=[];scratchPortsNS=[];scratchStackNS=[];nsTargets=[];nsDegrees=[];othersByPort=[];inLayerOthersByPort=[];betweenLayerDegreeByPort=[];static INDEXING_SIDE=`WEST`;static STACK_SIDE=`EAST`;constructor(e){this.portPositions=e}countCrossingsBetweenLayers(e,t){let n=this.initPortPositionsCounterClockwise(e,t);this.indexTree??=new fi(n.length),this.indexTree.reset(n.length);let r=this.includedSet;this.includedStamp??=new Uint32Array(this.portPositions.length);let i=++this.includedStampValue;i>=4294967296&&(this.includedStamp.fill(0),this.includedStampValue=1,i=1);for(let e of n)this.includedStamp[e.id]=i;return this.countCrossingsOnPorts(n,r)}countInLayerCrossingsOnSide(e,t){let n=this.initPortPositionsForInLayerCrossings(e,t);return this.countInLayerCrossingsOnPorts(n)}countNorthSouthPortCrossingsInLayer(e){let t=this.initPositionsForNorthSouthCounting(e);return this.indexTree??=new fi(t.length),this.indexTree.reset(t.length),this.countNorthSouthCrossingsOnPorts(t)}countCrossingsBetweenPortsInBothOrders(e,t){let n=this.connectedPortsSortedByPosition(e,t),r=this.countCrossingsOnPorts(n);this.indexTree.clear(),this.switchPorts(e,t),n.sort((e,t)=>this.positionOf(e)-this.positionOf(t));let i=this.countCrossingsOnPorts(n);return this.indexTree.clear(),this.switchPorts(t,e),mi(r,i)}countInLayerCrossingsBetweenNodesInBothOrders(e,t,n){let r=this.connectedInLayerPortsSortedByPosition(e,t,n),i=this.countInLayerCrossingsOnPorts(r);this.switchNodes(e,t,n),this.indexTree.clear(),r.sort((e,t)=>this.positionOf(e)-this.positionOf(t));let a=this.countInLayerCrossingsOnPorts(r);return this.switchNodes(t,e,n),this.indexTree.clear(),mi(i,a)}initForCountingBetween(e,t){let n=this.initPortPositionsCounterClockwise(e,t);this.indexTree??=new fi(n.length),this.indexTree.reset(n.length)}initPortPositionsForInLayerCrossings(e,t){let n=this.scratchPortsInLayer;return n.length=0,this.initPositions(e,n,t,!0,!0),this.indexTree??=new fi(n.length),this.indexTree.reset(n.length),n}switchPorts(e,t){let n=this.portPositions[e.id];this.portPositions[e.id]=this.portPositions[t.id],this.portPositions[t.id]=n}switchNodes(e,t,n){let r=pi(e,n);for(let e of r)this.portPositions[e.id]=this.positionOf(e)+this.nodeCardinalities[t.id];r=pi(t,n);for(let t of r)this.portPositions[t.id]=this.positionOf(t)-this.nodeCardinalities[e.id]}connectedPortsSortedByPosition(e,t){let n=/* @__PURE__ */ new Set;for(let r of[e,t]){n.add(r);for(let e of r.getIncomingEdges())this.isPortSelfLoop(e)||n.add(this.otherEndOf(e,r));for(let e of r.getOutgoingEdges())this.isPortSelfLoop(e)||n.add(this.otherEndOf(e,r))}return[...n].sort((e,t)=>this.positionOf(e)-this.positionOf(t))}connectedInLayerPortsSortedByPosition(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of[e,t])for(let e of pi(i,n)){for(let t of e.getIncomingEdges())t.isSelfLoop()||(r.add(e),this.isInLayer(t)&&r.add(this.otherEndOf(t,e)));for(let t of e.getOutgoingEdges())t.isSelfLoop()||(r.add(e),this.isInLayer(t)&&r.add(this.otherEndOf(t,e)))}return[...r].sort((e,t)=>this.positionOf(e)-this.positionOf(t))}getOthers(e){let t=this.othersByPort[e.id];if(t!==void 0)return t;let n=[],r=e.getIncomingEdges();for(let t=0;t<r.length;t++){let i=r[t];n.push(e===i.getSource()?i.getTarget():i.getSource())}let i=e.getOutgoingEdges();for(let t=0;t<i.length;t++){let r=i[t];n.push(e===r.getSource()?r.getTarget():r.getSource())}return this.othersByPort[e.id]=n,n}countCrossingsOnPorts(e,t){let n=0,r=this.indexTree,i=this.ends,a=this.portPositions,o=t===void 0?null:this.includedStamp,s=this.includedStampValue;for(let t of e){let e=a[t.id]??0;r.removeAll(e);let c=this.getOthers(t);for(let t=0;t<c.length;t++){let l=c[t];if(o!==null&&o[l.id]!==s)continue;let u=a[l.id]??0;u>e&&(n+=r.rank(u),i.push(u))}for(;i.length>0;)r.add(i.pop())}return n}getInLayerOthers(e){let t=this.inLayerOthersByPort[e.id];if(t!==void 0)return t;let n=[],r=0,i=e.getIncomingEdges();for(let t=0;t<i.length;t++){let a=i[t];a.getSource().getNode().getLayer()===a.getTarget().getNode().getLayer()?n.push(e===a.getSource()?a.getTarget():a.getSource()):r++}let a=e.getOutgoingEdges();for(let t=0;t<a.length;t++){let i=a[t];i.getSource().getNode().getLayer()===i.getTarget().getNode().getLayer()?n.push(e===i.getSource()?i.getTarget():i.getSource()):r++}return this.inLayerOthersByPort[e.id]=n,this.betweenLayerDegreeByPort[e.id]=r,n}countInLayerCrossingsOnPorts(e){let t=0,n=this.indexTree,r=this.ends,i=this.portPositions,a=n.numsPerIndex.length;for(let o of e){let e=i[o.id]??0;n.removeAll(e);let s=this.getInLayerOthers(o);for(let o=0;o<s.length;o++){let c=i[s[o].id]??0;c>e&&c<a&&(t+=n.rank(c),r.push(c))}for(t+=n.size()*this.betweenLayerDegreeByPort[o.id];r.length>0;)n.add(r.pop())}return t}countNorthSouthCrossingsOnPorts(e){let t=0,n=this.indexTree,r=this.ends,i=this.portPositions,a=this.nsTargets,o=this.nsDegrees;for(let s of e){let e=i[s.id]??0;switch(n.removeAll(e),a.length=0,o.length=0,s.getNode().getType()){case`NORMAL`:{let e=s.getProperty(M);if(e)for(let t of e.getPorts())a.push(t),o.push(t.getDegree());break}case`LONG_EDGE`:{let e=s.getNode().getPorts().find(e=>e!==s);e&&(a.push(e),o.push(e.getDegree()));break}case`NORTH_SOUTH_PORT`:{let e=s.getProperty(L);e&&(a.push(e),o.push(s.getDegree()));break}}for(let s=0;s<a.length;s++){let c=i[a[s].id]??0;c>e&&(t+=n.rank(c)*o[s],r.push(c))}for(;r.length>0;)n.add(r.pop())}return t}initPositions(e,t,n,r,i){let a=t.length;i&&this.nodeCardinalities.length<e.length&&(this.nodeCardinalities=Array(e.length));let o=n===`EAST`?r:!r;if(r)for(let r=0;r<e.length;r++){let s=e[r],c=s.getPorts(),l=0;if(o)for(let e=0;e<c.length;e++){let r=c[e];r.getSide()===n&&(this.portPositions[r.id]=a++,t.push(r),l++)}else for(let e=c.length-1;e>=0;e--){let r=c[e];r.getSide()===n&&(this.portPositions[r.id]=a++,t.push(r),l++)}i&&(this.nodeCardinalities[s.id]=l)}else for(let r=e.length-1;r>=0;r--){let s=e[r],c=s.getPorts(),l=0;if(o)for(let e=0;e<c.length;e++){let r=c[e];r.getSide()===n&&(this.portPositions[r.id]=a++,t.push(r),l++)}else for(let e=c.length-1;e>=0;e--){let r=c[e];r.getSide()===n&&(this.portPositions[r.id]=a++,t.push(r),l++)}i&&(this.nodeCardinalities[s.id]=l)}}initPortPositionsCounterClockwise(e,t){let n=this.scratchPortsCCW;return n.length=0,this.initPositions(e,n,`EAST`,!0,!1),this.initPositions(t,n,`WEST`,!1,!1),n}initPositionsForNorthSouthCounting(t){let n=this.scratchPortsNS;n.length=0;let r=this.scratchStackNS;r.length=0;let i=null,a=0;for(let o=0;o<t.length;++o){let s=t[o];switch(this.isLayoutUnitChanged(i,s)&&(a=this.emptyStack(r,n,e.STACK_SIDE,a)),s.hasProperty(at)&&(i=s.getProperty(at)),s.getType()){case`NORMAL`:for(let e of s.getPorts())e.getSide()===`NORTH`&&e.hasProperty(M)&&(this.portPositions[e.id]=a++,n.push(e));a=this.emptyStack(r,n,e.STACK_SIDE,a);for(let e of s.getPorts())e.getSide()===`SOUTH`&&e.hasProperty(M)&&(this.portPositions[e.id]=a++,n.push(e));break;case`NORTH_SOUTH_PORT`:{let t=this.firstPortOnSide(s,e.INDEXING_SIDE);t!==null&&(this.portPositions[t.id]=a++,n.push(t)),this.countPortsOnSide(s,e.STACK_SIDE)>0&&r.push(s);break}case`LONG_EDGE`:for(let e of s.getPorts())e.getSide()===`WEST`&&(this.portPositions[e.id]=a++,n.push(e));for(let e=0,t=this.countPortsOnSide(s,`EAST`);e<t;e++)r.push(s)}}return this.emptyStack(r,n,e.STACK_SIDE,a),n}emptyStack(e,t,n,r){let i=r;for(;e.length>0;){let r=e.pop(),a=this.firstPortOnSide(r,n);this.portPositions[a.id]=i++,t.push(a)}return i}getPorts(e,t,n){return t===`EAST`?n?e.getPortSideView(t):[...e.getPortSideView(t)].reverse():n?[...e.getPortSideView(t)].reverse():e.getPortSideView(t)}firstPortOnSide(e,t){let n=e.getPorts();for(let e=0;e<n.length;e++)if(n[e].getSide()===t)return n[e];return null}countPortsOnSide(e,t){let n=e.getPorts(),r=0;for(let e=0;e<n.length;e++)n[e].getSide()===t&&r++;return r}start(e,t){return t?0:e.length-1}end(e,t,n){return t?e<n.length:e>=0}step(e){return e?1:-1}isInLayer(e){return e.getSource().getNode().getLayer()===e.getTarget().getNode().getLayer()}positionOf(e){return this.portPositions[e.id]??0}otherEndOf(e,t){return t===e.getSource()?e.getTarget():e.getSource()}isPortSelfLoop(e){return e.getSource()===e.getTarget()}isLayoutUnitChanged(e,t){return e===null||e===t||!t.hasProperty(at)?!1:t.getProperty(at)!==e}};function gi(e,t){return e.getPortSideView(t).some(e=>e.hasProperty(M)||e.getConnectedEdges().length>0)}var _i=class{isCrossingMatrixFilled;crossingMatrix;inBetweenLayerCrossingCounter;direction;oneSided;constructor(e,t,n,r){this.direction=r,this.oneSided=e===1;let i=t[n];this.isCrossingMatrixFilled=Array.from({length:i.length},()=>Array(i.length).fill(!1)),this.crossingMatrix=Array.from({length:i.length},()=>Array(i.length).fill(0)),this.inBetweenLayerCrossingCounter=new yi(t,n)}getCrossingMatrixEntry(e,t){return this.isCrossingMatrixFilled[e.id][t.id]||(this.fillCrossingMatrix(e,t),this.isCrossingMatrixFilled[e.id][t.id]=!0,this.isCrossingMatrixFilled[t.id][e.id]=!0),this.crossingMatrix[e.id][t.id]}fillCrossingMatrix(e,t){this.oneSided?this.direction===1?this.inBetweenLayerCrossingCounter.countEasternEdgeCrossings(e,t):this.inBetweenLayerCrossingCounter.countWesternEdgeCrossings(e,t):this.inBetweenLayerCrossingCounter.countBothSideCrossings(e,t),this.crossingMatrix[e.id][t.id]=this.inBetweenLayerCrossingCounter.getUpperLowerCrossings(),this.crossingMatrix[t.id][e.id]=this.inBetweenLayerCrossingCounter.getLowerUpperCrossings()}},vi=class{upperLowerCrossings=0;lowerUpperCrossings=0;portPositions=/* @__PURE__ */ new Map;layer;constructor(e){this.layer=e,this.initializePortPositions()}initializePortPositions(){for(let e of this.layer)this.setPortIdsOn(e,`SOUTH`),this.setPortIdsOn(e,`NORTH`)}setPortIdsOn(e,t){let n=0;for(let r of pi(e,t))this.portPositions.set(r,n++)}countCrossings(e,t){this.upperLowerCrossings=0,this.lowerUpperCrossings=0,this.processIfTwoNorthSouthNodes(e,t),this.processIfNorthSouthLongEdgeDummyCrossing(e,t),this.processIfNormalNodeWithNSPortsAndLongEdgeDummy(e,t)}processIfTwoNorthSouthNodes(e,t){this.isNorthSouth(e)&&this.isNorthSouth(t)&&!this.haveDifferentOrigins(e,t)&&(this.isNorthOfNormalNode(e)?this.countCrossingsOfTwoNorthSouthDummies(e,t):this.countCrossingsOfTwoNorthSouthDummies(t,e))}countCrossingsOfTwoNorthSouthDummies(e,t){if(this.originPortPositionOf(e)>this.originPortPositionOf(t)){let n=t.getPortSideView(`EAST`);this.upperLowerCrossings=n.length===0?0:n[0].getDegree();let r=e.getPortSideView(`WEST`);this.lowerUpperCrossings=r.length===0?0:r[0].getDegree()}else{let n=t.getPortSideView(`WEST`);this.upperLowerCrossings=n.length===0?0:n[0].getDegree();let r=e.getPortSideView(`EAST`);this.lowerUpperCrossings=r.length===0?0:r[0].getDegree()}}processIfNorthSouthLongEdgeDummyCrossing(e,t){this.isNorthSouth(e)&&this.isLongEdgeDummy(t)?this.isNorthOfNormalNode(e)?this.upperLowerCrossings=1:this.lowerUpperCrossings=1:this.isNorthSouth(t)&&this.isLongEdgeDummy(e)&&(this.isNorthOfNormalNode(t)?this.lowerUpperCrossings=1:this.upperLowerCrossings=1)}processIfNormalNodeWithNSPortsAndLongEdgeDummy(e,t){this.isNormal(e)&&this.isLongEdgeDummy(t)&&(this.upperLowerCrossings=this.numberOfNorthSouthEdges(e,`SOUTH`),this.lowerUpperCrossings=this.numberOfNorthSouthEdges(e,`NORTH`)),this.isNormal(t)&&this.isLongEdgeDummy(e)&&(this.upperLowerCrossings=this.numberOfNorthSouthEdges(t,`NORTH`),this.lowerUpperCrossings=this.numberOfNorthSouthEdges(t,`SOUTH`))}numberOfNorthSouthEdges(e,t){let n=0;for(let r of e.getPortSideView(t))n+=+!!this.hasConnectedNorthSouthEdge(r);return n}hasConnectedNorthSouthEdge(e){return e.getProperty(M)!==null&&e.getProperty(M)!==void 0}haveDifferentOrigins(e,t){return this.originOf(e)!==this.originOf(t)}originPortPositionOf(e){return this.portPositions.get(this.originPortOf(e))}originPortOf(e){return e.getPorts()[0].getProperty(L)}isNorthOfNormalNode(e){return this.originPortOf(e).getSide()===`NORTH`}originOf(e){return e.getProperty(L)}isLongEdgeDummy(e){return e.getType()===`LONG_EDGE`}isNorthSouth(e){return e.getType()===`NORTH_SOUTH_PORT`}isNormal(e){return e.getType()===`NORMAL`}getUpperLowerCrossings(){return this.upperLowerCrossings}getLowerUpperCrossings(){return this.lowerUpperCrossings}},yi=class{currentNodeOrder;freeLayerIndex;upperLowerCrossings=0;lowerUpperCrossings=0;upperAdjacencies;lowerAdjacencies;portPositions=/* @__PURE__ */ new Map;easternAdjacencies=/* @__PURE__ */ new Map;westernAdjacencies=/* @__PURE__ */ new Map;constructor(e,t){this.currentNodeOrder=e,this.freeLayerIndex=t,this.setPortPositionsForNeighbouringLayers()}setPortPositionsForNeighbouringLayers(){this.freeLayerIndex>0&&this.setPortPositionsForLayer(this.freeLayerIndex-1,`EAST`),this.freeLayerIndex<this.currentNodeOrder.length-1&&this.setPortPositionsForLayer(this.freeLayerIndex+1,`WEST`)}setPortPositionsForLayer(e,t){let n=0;for(let r of this.currentNodeOrder[e])for(let e of pi(r,t))this.portPositions.set(e,n++)}countEasternEdgeCrossings(e,t){this.resetCrossingCount(),e!==t&&this.addEasternCrossings(e,t)}countWesternEdgeCrossings(e,t){this.resetCrossingCount(),e!==t&&this.addWesternCrossings(e,t)}countBothSideCrossings(e,t){this.resetCrossingCount(),e!==t&&(this.addWesternCrossings(e,t),this.addEasternCrossings(e,t))}resetCrossingCount(){this.upperLowerCrossings=0,this.lowerUpperCrossings=0}addEasternCrossings(e,t){this.upperAdjacencies=this.getAdjacencyFor(e,`EAST`,this.easternAdjacencies),this.lowerAdjacencies=this.getAdjacencyFor(t,`EAST`,this.easternAdjacencies),this.upperAdjacencies.size()!==0&&this.lowerAdjacencies.size()!==0&&this.countCrossingsByMergingAdjacencyLists()}getAdjacencyFor(e,t,n){if(n.size===0)for(let e of this.currentNodeOrder[this.freeLayerIndex])n.set(e,new bi(e,t,this.portPositions));let r=n.get(e);return r.reset(),r}addWesternCrossings(e,t){this.upperAdjacencies=this.getAdjacencyFor(e,`WEST`,this.westernAdjacencies),this.lowerAdjacencies=this.getAdjacencyFor(t,`WEST`,this.westernAdjacencies),this.upperAdjacencies.size()!==0&&this.lowerAdjacencies.size()!==0&&this.countCrossingsByMergingAdjacencyLists()}countCrossingsByMergingAdjacencyLists(){for(;!this.upperAdjacencies.isEmpty()&&!this.lowerAdjacencies.isEmpty();)this.isBelow(this.upperAdjacencies.first(),this.lowerAdjacencies.first())?(this.upperLowerCrossings+=this.upperAdjacencies.size(),this.lowerAdjacencies.removeFirst()):this.isBelow(this.lowerAdjacencies.first(),this.upperAdjacencies.first())?(this.lowerUpperCrossings+=this.lowerAdjacencies.size(),this.upperAdjacencies.removeFirst()):(this.upperLowerCrossings+=this.upperAdjacencies.countAdjacenciesBelowNodeOfFirstPort(),this.lowerUpperCrossings+=this.lowerAdjacencies.countAdjacenciesBelowNodeOfFirstPort(),this.upperAdjacencies.removeFirst(),this.lowerAdjacencies.removeFirst())}isBelow(e,t){return e>t}getUpperLowerCrossings(){return this.upperLowerCrossings}getLowerUpperCrossings(){return this.lowerUpperCrossings}},bi=class{node;side;portPositions;adjacencyList=[];totalSize=0;currentSize=0;currentIndex=0;constructor(e,t,n){this.node=e,this.side=t,this.portPositions=n,this.getAdjacenciesSortedByPosition()}getAdjacenciesSortedByPosition(){this.iterateThroughEdgesCollectingAdjacencies(),this.adjacencyList.sort((e,t)=>e.position-t.position)}iterateThroughEdgesCollectingAdjacencies(){for(let e of pi(this.node,this.side)){let t=this.side===`WEST`?e.getIncomingEdges():e.getOutgoingEdges();for(let e of t)!e.isSelfLoop()&&!this.isInLayer(e)&&(this.addAdjacencyOf(e),this.totalSize++,this.currentSize++)}}isInLayer(e){return e.getSource().getNode().getLayer()===e.getTarget().getNode().getLayer()}addAdjacencyOf(e){let t=this.side===`WEST`?e.getSource():e.getTarget(),n=this.portPositions.get(t),r=this.adjacencyList.length-1;this.adjacencyList.length>0&&this.adjacencyList[r].position===n?(this.adjacencyList[r].cardinality++,this.adjacencyList[r].currentCardinality++):this.adjacencyList.push(new xi(n))}reset(){this.currentIndex=0,this.currentSize=this.totalSize,this.isEmpty()||this.currentAdjacency().reset()}countAdjacenciesBelowNodeOfFirstPort(){return this.currentSize-this.currentAdjacency().currentCardinality}removeFirst(){if(this.isEmpty())return;let e=this.currentAdjacency();e.currentCardinality===1?this.incrementCurrentIndex():e.currentCardinality--,this.currentSize--}incrementCurrentIndex(){this.currentIndex++,this.currentIndex<this.adjacencyList.length&&this.currentAdjacency().reset()}isEmpty(){return this.currentSize===0}first(){return this.currentAdjacency().position}size(){return this.currentSize}currentAdjacency(){return this.adjacencyList[this.currentIndex]}},xi=class{position;cardinality=1;currentCardinality=1;constructor(e){this.position=e}reset(){this.currentCardinality=this.cardinality}},Si=class{freeLayer;leftInLayerCounter;rightInLayerCounter;northSouthCounter;crossingMatrixFiller;graphData;parentCrossCounter=null;countCrossingsCausedByPortSwitch;constructor(e,t,n,r,i,a){if(this.crossingMatrixFiller=n,this.graphData=i,e>=t.length)throw Error(`Greedy SwitchDecider: Free layer not in graph.`);this.freeLayer=t[e],this.leftInLayerCounter=new hi(r),this.leftInLayerCounter.initPortPositionsForInLayerCrossings(this.freeLayer,`WEST`),this.rightInLayerCounter=new hi(r),this.rightInLayerCounter.initPortPositionsForInLayerCrossings(this.freeLayer,`EAST`),this.northSouthCounter=new vi(this.freeLayer),this.countCrossingsCausedByPortSwitch=!a&&i.hasParent&&!i.dontSweepInto()&&this.freeLayer[0].getType()===`EXTERNAL_PORT`,this.countCrossingsCausedByPortSwitch&&this.initParentCrossingsCounters(e,t.length)}initParentCrossingsCounters(e,t){let n=this.graphData.parentGraphData,r=n.currentNodeOrder,i=n.portPositions;this.parentCrossCounter=new hi(i);let a=this.graphData.parent.getLayer().id,o=a>0?r[a-1]:[],s=r[a],c=a<r.length-1?r[a+1]:[];e===t-1?this.parentCrossCounter.initForCountingBetween(s,c):this.parentCrossCounter.initForCountingBetween(o,s)}notifyOfSwitch(e,t){if(this.leftInLayerCounter.switchNodes(e,t,`WEST`),this.rightInLayerCounter.switchNodes(e,t,`EAST`),this.countCrossingsCausedByPortSwitch){let n=e.getProperty(L),r=t.getProperty(L);this.parentCrossCounter.switchPorts(n,r)}}doesSwitchReduceCrossings(e,t){if(this.constraintsPreventSwitch(e,t))return!1;let n=this.freeLayer[e],r=this.freeLayer[t],i=this.leftInLayerCounter.countInLayerCrossingsBetweenNodesInBothOrders(n,r,`WEST`),a=this.rightInLayerCounter.countInLayerCrossingsBetweenNodesInBothOrders(n,r,`EAST`);this.northSouthCounter.countCrossings(n,r);let o=this.crossingMatrixFiller.getCrossingMatrixEntry(n,r),s=this.crossingMatrixFiller.getCrossingMatrixEntry(r,n),c=o+i.first+a.first+this.northSouthCounter.getUpperLowerCrossings(),l=s+i.second+a.second+this.northSouthCounter.getLowerUpperCrossings();if(this.countCrossingsCausedByPortSwitch){let e=n.getProperty(L),t=r.getProperty(L),i=this.parentCrossCounter.countCrossingsBetweenPortsInBothOrders(e,t);c+=i.first,l+=i.second}return c>l}constraintsPreventSwitch(e,t){let n=this.freeLayer[e],r=this.freeLayer[t];return this.haveSuccessorConstraints(n,r)||this.haveLayoutUnitConstraints(n,r)||this.areNormalAndNorthSouthPortDummy(n,r)}haveSuccessorConstraints(e,t){let n=e.getProperty(k);return n!=null&&n.length!==0&&n.includes(t)}haveLayoutUnitConstraints(e,t){let n=e.getType()!==`LONG_EDGE`&&t.getType()!==`LONG_EDGE`,r=e.getProperty(at),i=t.getProperty(at),a=r!==i,o=this.partOfMultiNodeLayoutUnit(e,r)||this.partOfMultiNodeLayoutUnit(t,i),s=gi(e,`NORTH`),c=gi(t,`SOUTH`);return o=o||gi(e,`SOUTH`)||gi(t,`NORTH`),n&&(o&&a||s||c)}partOfMultiNodeLayoutUnit(e,t){return t!=null&&t!==e}areNormalAndNorthSouthPortDummy(e,t){return this.isNorthSouthPortNode(e)&&this.isNormalNode(t)||this.isNorthSouthPortNode(t)&&this.isNormalNode(e)}isNormalNode(e){return e.getType()===`NORMAL`}isNorthSouthPortNode(e){return e.getType()===`NORTH_SOUTH_PORT`}},Ci=class{greedySwitchType;graphData;currentNodeOrder;switchDecider;nPorts=0;portPositions=[];constructor(e,t){this.greedySwitchType=e,this.graphData=t}minimizeCrossings(e,t,n,r){return this.setUp(e,t,n),this.continueSwitchingUntilNoImprovementInLayer(t)}setFirstLayerOrder(e,t){let n=t?0:e.length-1;return this.setUp(e,n,t),this.sweepDownwardInLayer(n)}alwaysImproves(){return this.greedySwitchType!==1}isDeterministic(){return!0}initAtLayerLevel(){}initAtNodeLevel(e,t,n){n[e][t].id=t}initAtPortLevel(){this.nPorts++}initAtEdgeLevel(){}initAfterTraversal(){this.portPositions=Array(this.nPorts)}setUp(e,t,n){this.currentNodeOrder=e;let r=+!n,i=new _i(this.greedySwitchType,e,t,r);this.switchDecider=new Si(t,e,i,this.portPositions,this.graphData,this.greedySwitchType===1)}continueSwitchingUntilNoImprovementInLayer(e){let t=!1,n;do n=this.sweepDownwardInLayer(e),t||=n;while(n);return t}sweepDownwardInLayer(e){let t=this.currentNodeOrder[e],n=!1;for(let e=0;e<t.length-1;e++){if(!this.switchDecider.doesSwitchReduceCrossings(e,e+1))continue;this.switchDecider.notifyOfSwitch(t[e],t[e+1]);let r=t[e];t[e]=t[e+1],t[e+1]=r,n=!0}return n}},wi=class{skipInitAtLayerLevel=!0;skipInitAtPortLevel=!0;skipInitAtEdgeLevel=!0;crossingsCounter;hierarchicalCrossingsCounter;nPorts=0;portPositions=[];distributePortsWhileSweeping(e,t,n){let r=n?`WEST`:`EAST`;n&&t>0?this.crossingsCounter.initForCountingBetween(e[t-1],e[t]):!n&&t<e.length-1?this.crossingsCounter.initForCountingBetween(e[t],e[t+1]):this.crossingsCounter.initPortPositionsForInLayerCrossings(e[t],r);let i=!1;for(let a of e[t]){let e=a.getProperty(O);if(D.isOrderFixed(e))continue;let t=a.getNestedGraph(),o=a.getPortSideView(r).length>0&&t!==null;if(o){let e=t.toNodeArray();this.hierarchicalCrossingsCounter=new yi(e,n?0:e.length-1)}i=this.distributePortsOnNode(a,r,o)||i}return i}initAtLayerLevel(){}initAtNodeLevel(e,t,n){this.nPorts+=n[e][t].getPorts().length}initAtPortLevel(){}initAtEdgeLevel(){}initAfterTraversal(){this.portPositions=Array(this.nPorts),this.crossingsCounter=new hi(this.portPositions)}distributePortsOnNode(e,t,n){let r=e.getPortSideView(t);(t===`SOUTH`||t===`WEST`)&&(r=[...r].reverse());let i=!1,a;do{a=!1;for(let t=0;t<r.length-1;t++){let o=r[t],s=r[t+1];if(this.switchingDecreasesCrossings(o,s,n)){this.crossingsCounter.switchPorts(o,s),r[t]=s,r[t+1]=o;let n=e.getPorts(),c=n.indexOf(o),l=n.indexOf(s);c>=0&&l>=0&&(n[c]=s,n[l]=o),i=!0,a=!0}}}while(a);return i}switchingDecreasesCrossings(e,t,n){let r=this.crossingsCounter.countCrossingsBetweenPortsInBothOrders(e,t),i=r.first,a=r.second;if(n){let n=e.getProperty(M),r=t.getProperty(M);n!=null&&r!=null&&(this.hierarchicalCrossingsCounter.countBothSideCrossings(n,r),i+=this.hierarchicalCrossingsCounter.getUpperLowerCrossings(),a+=this.hierarchicalCrossingsCounter.getLowerUpperCrossings())}return i>a}};const Ti={NORTH:0,EAST:1,SOUTH:2,WEST:3};var Ei=class{skipInitAtEdgeLevel=!0;portRanks;minBarycenter=0;maxBarycenter=0;nodePositions;portBarycenter;inLayerPorts=[];nPorts=0;nodeLayerIndex=/* @__PURE__ */ new WeakMap;scratchPorts=[];portHasIncoming=[];portHasOutgoing=[];portDegrees=[];debugSortPorts=!1;debugPortRanks=!1;constructor(e){this.nodePositions=Array(e)}getPortRanks(){return this.portRanks}distributePortsWhileSweeping(e,t,n){this.debugSortPorts=!1,this.updateNodePositions(e,t);let r=e[t],i=n?`WEST`:`EAST`;if(this.isNotFirstLayer(e.length,t,n)){let a=e[n?t-1:t+1];this.calculatePortRanksForLayer(a,this.portTypeFor(n));for(let e of r)this.distributePorts(e,i);this.calculatePortRanksForLayer(r,this.portTypeFor(!n));for(let e of a)this.hasNestedGraph(e)||this.distributePorts(e,Pe.opposed(i))}else for(let e of r)this.distributePorts(e,i);return!1}calculatePortRanksForLayer(e,t){this.debugPortRanks=!1;let n=0,r=e.length;for(let i=0;i<r;i++){let r=e[i];n+=this.calculatePortRanks(r,r.getPorts(),n,t)}}distributePorts(e,t){if(typeof t==`string`){let n=t;D.isOrderFixed(e.getProperty(O))||(this.distributePorts(e,this.collectPortsOnSide(e,n)),this.distributePorts(e,this.collectPortsOnSide(e,`SOUTH`)),this.distributePorts(e,this.collectPortsOnSide(e,`NORTH`)),this.sortPorts(e));return}let n=t;this.inLayerPorts.length=0,this.iteratePortsAndCollectInLayerPorts(e,n),this.inLayerPorts.length>0&&this.calculateInLayerPortsBarycenterValues(e)}collectPortsOnSide(e,t){this.scratchPorts.length=0;let n=e.getPorts();for(let e=0;e<n.length;e++)n[e].getSide()===t&&this.scratchPorts.push(n[e]);return this.scratchPorts}iteratePortsAndCollectInLayerPorts(e,t){this.minBarycenter=0,this.maxBarycenter=0;let n=e.getLayer(),r=2*n.getNodes().length+1;for(let e=0;e<t.length;e++){let i=t[e],a=i.getSide()===`NORTH`||i.getSide()===`SOUTH`,o=0;if(a){let e=i.getProperty(M);if(e==null)continue;o+=this.dealWithNorthSouthPorts(r,i,e)}else{for(let e of i.getOutgoingEdges()){let t=e.getTarget();t.getNode().getLayer()===n?this.inLayerPorts.push(i):o+=this.portRanks[t.id]}for(let e of i.getIncomingEdges()){let t=e.getSource();t.getNode().getLayer()===n?this.inLayerPorts.push(i):o-=this.portRanks[t.id]}}let s=this.portDegrees[i.id]??i.getDegree();s>0?(this.portBarycenter[i.id]=o/s,this.minBarycenter=Math.min(this.minBarycenter,this.portBarycenter[i.id]),this.maxBarycenter=Math.max(this.maxBarycenter,this.portBarycenter[i.id])):a&&(this.portBarycenter[i.id]=o)}}calculateInLayerPortsBarycenterValues(e){let t=this.positionOf(e)+1,n=e.getLayer(),r=n.getNodes().length+1;for(let e of this.inLayerPorts){let i=0,a=0;for(let t of e.getIncomingEdges()){let e=t.getSource();e.getNode().getLayer()===n&&(i+=this.positionOf(e.getNode())+1,a++)}for(let t of e.getOutgoingEdges()){let e=t.getTarget();e.getNode().getLayer()===n&&(i+=this.positionOf(e.getNode())+1,a++)}let o=i/a,s=e.getSide();s===`EAST`?this.portBarycenter[e.id]=o<t?this.minBarycenter-o:this.maxBarycenter+(r-o):s===`WEST`&&(this.portBarycenter[e.id]=o<t?this.maxBarycenter+o:this.minBarycenter-(r-o))}}dealWithNorthSouthPorts(e,t,n){let r=!1,i=!1;for(let e of n.getPorts())e.getProperty(L)===t&&(e.getOutgoingEdges().length>0?i=!0:e.getIncomingEdges().length>0&&(r=!0));let a=0;return r&&!(r&&i)?a=t.getSide()===`NORTH`?-this.positionOf(n):e-this.positionOf(n):i&&!(r&&i)?a=this.positionOf(n)+1:r&&i&&(a=t.getSide()===`NORTH`?0:e/2),a}positionOf(e){return this.nodePositions[this.nodeLayerIndex.get(e)][e.id]}updateNodePositions(e,t){let n=e[t];if(n.length===0)return;let r=this.nodePositions[this.nodeLayerIndex.get(n[0])];for(let e=0;e<n.length;e++){let t=n[e];r[t.id]=e}}hasNestedGraph(e){return e.getNestedGraph()!==null}isNotFirstLayer(e,t,n){return n?t!==0:t!==e-1}portTypeFor(e){return e?`OUTPUT`:`INPUT`}sortPorts(e){if(this.debugSortPorts){let t=e.getPorts().map(e=>`${e.id}:${e.getSide()}(${this.portBarycenter[e.id]})`).join(` `);console.error(`GGN sortPorts L${e.getLayer().getIndex()} node=${e.id} before=[${t}]`)}e.getPorts().sort(this.portComparator),this.debugSortPorts&&console.error(`GGN sortPorts node=${e.id} after=[${e.getPorts().map(e=>e.id).join(` `)}]`)}portComparator=(e,t)=>{let n=Ti[e.getSide()]??0,r=Ti[t.getSide()]??0;if(n!==r)return n-r;let i=this.portBarycenter[e.id],a=this.portBarycenter[t.id];return i===0&&a===0?0:i===0?-1:a===0?1:i-a};initAtLayerLevel(e,t){this.nodePositions[e]=Array(t[e].length);let n=t[e];for(let t=0;t<n.length;t++)this.nodeLayerIndex.set(n[t],e)}initAtNodeLevel(e,t,n){let r=n[e][t];r.id=t,this.nodePositions[e][t]=t}initAtPortLevel(e,t,n,r){let i=r[e][t].getPorts()[n];i.id=this.nPorts++;let a=i.getIncomingEdges(),o=i.getOutgoingEdges();this.portHasIncoming[i.id]=+(a.length>0),this.portHasOutgoing[i.id]=+(o.length>0),this.portDegrees[i.id]=a.length+o.length}initAtEdgeLevel(){}initAfterTraversal(){this.portRanks=Array(this.nPorts).fill(0),this.portBarycenter=Array(this.nPorts).fill(0)}},Di=class extends Ei{constructor(e){super(e)}calculatePortRanks(e,t,n,r){let i=this.portRanks;if(r===`INPUT`){let r=0,a=0;for(let e=0;e<t.length;e++){let n=t[e],i=this.portHasIncoming[n.id];(i===1||i===void 0&&n.getIncomingEdges().length>0)&&(r++,n.getSide()===`NORTH`&&a++)}let o=n+a,s=n+r;for(let n=0;n<t.length;n++){let r=t[n],a=this.portHasIncoming[r.id];if(!(a===0||a===void 0&&r.getIncomingEdges().length===0)&&(r.getSide()===`NORTH`?(i[r.id]=o,o--):(i[r.id]=s,s--),this.debugPortRanks)){let t=r.getIncomingEdges(),n=t.length>0?`<-${t[0].getSource().getNode().id}`:``;console.error(`GGN rank INPUT node=${e.id} L${e.getLayer().getIndex()} port=${r.id} rank=${i[r.id]} conn=${n}`)}}return r}if(r===`OUTPUT`){let e=0;for(let r=0;r<t.length;r++){let a=t[r],o=this.portHasOutgoing[a.id];o===0||o===void 0&&a.getOutgoingEdges().length===0||(e++,i[a.id]=n+e)}return e}throw Error(`IllegalArgumentException`)}},Oi=class extends Ei{constructor(e){super(e)}calculatePortRanks(e,t,n,r){let i=this.portRanks;if(r===`INPUT`){let e=0,r=0;for(let n=0;n<t.length;n++){let i=t[n],a=this.portHasIncoming[i.id];(a===1||a===void 0&&i.getIncomingEdges().length>0)&&(e++,i.getSide()===`NORTH`&&r++)}let a=1/(e+1),o=n+r*a,s=n+1-a;for(let e=0;e<t.length;e++){let n=t[e],r=this.portHasIncoming[n.id];r===0||r===void 0&&n.getIncomingEdges().length===0||(n.getSide()===`NORTH`?(i[n.id]=o,o-=a):(i[n.id]=s,s-=a))}}else if(r===`OUTPUT`){let e=0;for(let n=0;n<t.length;n++){let r=t[n],i=this.portHasOutgoing[r.id];(i===1||i===void 0&&r.getOutgoingEdges().length>0)&&e++}let r=1/(e+1),a=n+r;for(let e=0;e<t.length;e++){let n=t[e],o=this.portHasOutgoing[n.id];o===0||o===void 0&&n.getOutgoingEdges().length===0||(i[n.id]=a,a+=r)}}else throw Error(`Port type is undefined`);return 1}};function ki(e,t,n){return e===2?new wi:t.nextBoolean()?new Oi(n.length):new Di(n.length)}var Ai=class{portPos;inInterlayerCache=null;outInterlayerEdges=null;hyperedgeGroupsByLayer=/* @__PURE__ */ new WeakMap;bounds=/* @__PURE__ */ new Int32Array;constructor(e,t,n){this.portPos=n}getOutInterlayerEdges(e,t){let n=this.outInterlayerEdges??=[],r=n[e.id];if(r===void 0){r=[];let i=e.getOutgoingEdges();for(let e=0;e<i.length;e++){let n=i[e];t!==n.getTarget().getNode().getLayer()&&r.push(n)}n[e.id]=r}return r}getIncomingInterlayerFlag(e,t){let n=this.inInterlayerCache??=new Uint8Array(this.portPos.length).fill(2),r=n[e.id];if(r!==2)return r;r=0;let i=e.getIncomingEdges();for(let e=0;e<i.length;e++)if(t!==i[e].getSource().getNode().getLayer()){r=1;break}return n[e.id]=r,r}buildHyperedgeGroups(e){let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Map,r=e=>{let n=e;for(;t.get(n)!==n;)n=t.get(n);let r=e;for(;t.get(r)!==r;){let e=t.get(r);t.set(r,n),r=e}return n},i=(e,n)=>{let i=r(e),a=r(n);i!==a&&t.set(a,i)};for(let r=0;r<e.length;r++){let a=e[r],o=a.getLayer(),s=a.getPorts();for(let e=0;e<s.length;e++){let r=s[e],a=this.getOutInterlayerEdges(r,o);if(a.length!==0){t.has(r.id)||(t.set(r.id,r.id),n.set(r.id,r));for(let e=0;e<a.length;e++){let o=a[e].getTarget();t.has(o.id)||(t.set(o.id,o.id),n.set(o.id,o)),i(r.id,o.id)}}}}let a=/* @__PURE__ */ new Map;for(let[e]of t){let t=r(e),i=a.get(t);i===void 0&&(i=[],a.set(t,i)),i.push(n.get(e))}return[...a.values()]}getHyperedgeGroups(e){let t=e[0].getLayer(),n=this.hyperedgeGroupsByLayer.get(t);return n===void 0&&(n=this.buildHyperedgeGroups(e),this.hyperedgeGroupsByLayer.set(t,n)),n}countCrossings(e,t){let n=this.getHyperedgeGroups(e),r=0;for(let t=0;t<e.length;t++){let n=e[t],i=n.getLayer(),a=n.getPorts();for(let e=0;e<a.length;e++){let t=a[e];this.getOutInterlayerEdges(t,i).length>0&&(this.portPos[t.id]=r++)}}let i=0;for(let e=0;e<t.length;e++){let n=t[e],r=n.getLayer(),a=0,o=n.getPorts();for(let e=0;e<o.length;e++){let t=o[e];if(t.getSide()!==`NORTH`)break;this.getIncomingInterlayerFlag(t,r)===1&&a++}let s=0;for(let e=o.length-1;e>=0;e--){let t=o[e];this.getIncomingInterlayerFlag(t,r)===1&&(t.getSide()===`NORTH`?(this.portPos[t.id]=i,i++):(this.portPos[t.id]=i+a+s,s++))}i+=s}let a=n.length;this.bounds.length<a*4&&(this.bounds=new Int32Array(a*4));let o=this.bounds,s=e[0].getLayer(),c=t[0].getLayer();for(let e=0;e<a;e++){let t=n[e],a=r,l=0,u=i,d=0;for(let e=0;e<t.length;e++){let n=t[e],r=this.portPos[n.id],i=n.getNode().getLayer();i===s?(r<a&&(a=r),r>l&&(l=r)):i===c&&(r<u&&(u=r),r>d&&(d=r))}let f=e*4;o[f]=a,o[f+1]=l,o[f+2]=u,o[f+3]=d}let l=0;for(let e=0;e<a;e++){let t=e*4,n=o[t],r=o[t+1],i=o[t+2],s=o[t+3];for(let t=e+1;t<a;t++){let e=t*4,a=o[e],c=o[e+1],u=o[e+2],d=o[e+3];(n<a&&i>u||a<n&&u>i)&&l++,((n>a?n:a)<(r<c?r:c)||n===r&&a<n&&n<c||a===c&&n<a&&a<r)&&l++,((i>u?i:u)<(s<d?s:d)||i===s&&u<i&&i<d||u===d&&i<u&&u<s)&&l++}}return l}};function ji(e,t){let n=[],r=[],i=[],a=[],o=[];for(let t=0;t<e.length;t++){let s=e[t];s.skipInitAtLayerLevel!==!0&&n.push(s),s.skipInitAtNodeLevel!==!0&&r.push(s),s.skipInitAtPortLevel!==!0&&i.push(s),s.skipInitAtEdgeLevel!==!0&&a.push(s),s.skipInitAfterTraversal!==!0&&o.push(s)}for(let e=0;e<t.length;e++){for(let r=0;r<n.length;r++)n[r].initAtLayerLevel(e,t);for(let n=0;n<t[e].length;n++){for(let i=0;i<r.length;i++)r[i].initAtNodeLevel(e,n,t);let o=t[e][n].getPorts();for(let r=0;r<o.length;r++){for(let a=0;a<i.length;a++)i[a].initAtPortLevel(e,n,r,t);let s=o[r],c=0,l=s.getIncomingEdges();for(let i=0;i<l.length;i++){let o=l[i];for(let i=0;i<a.length;i++)a[i].initAtEdgeLevel(e,n,r,c++,o,t)}let u=s.getOutgoingEdges();for(let i=0;i<u.length;i++){let o=u[i];for(let i=0;i<a.length;i++)a[i].initAtEdgeLevel(e,n,r,c++,o,t)}}}}for(let e=0;e<o.length;e++)o[e].initAfterTraversal()}var Mi=class{skipInitAtLayerLevel=!0;crossingCounter;hyperedgeCrossingsCounter;hasHyperEdgesEastOfIndex;inLayerEdgeCounts;hasNorthSouthPorts;nPorts=0;constructor(e){this.inLayerEdgeCounts=Array(e.length).fill(0),this.hasNorthSouthPorts=Array(e.length).fill(!1),this.hasHyperEdgesEastOfIndex=Array(e.length).fill(!1)}countAllCrossings(e){if(e.length===0)return 0;let t=this.crossingCounter.countInLayerCrossingsOnSide(e[0],`WEST`);t+=this.crossingCounter.countInLayerCrossingsOnSide(e[e.length-1],`EAST`);for(let n=0;n<e.length;n++)t+=this.countCrossingsAt(n,e);return t}countCrossingsAt(e,t){let n=0,r=t[e];if(e<t.length-1){let i=t[e+1];this.hasHyperEdgesEastOfIndex[e]?(n=this.hyperedgeCrossingsCounter.countCrossings(r,i),n+=this.crossingCounter.countInLayerCrossingsOnSide(r,`EAST`),n+=this.crossingCounter.countInLayerCrossingsOnSide(i,`WEST`)):n=this.crossingCounter.countCrossingsBetweenLayers(r,i)}return this.hasNorthSouthPorts[e]&&(n+=this.crossingCounter.countNorthSouthPortCrossingsInLayer(r)),n}initAtNodeLevel(e,t,n){let r=n[e][t];this.hasNorthSouthPorts[e]=this.hasNorthSouthPorts[e]||r.getType()===`NORTH_SOUTH_PORT`}initAtPortLevel(e,t,n,r){let i=r[e][t].getPorts()[n];i.id=this.nPorts++,i.getOutgoingEdges().length+i.getIncomingEdges().length>1&&(i.getSide()===`EAST`?this.hasHyperEdgesEastOfIndex[e]=!0:i.getSide()===`WEST`&&e>0&&(this.hasHyperEdgesEastOfIndex[e-1]=!0))}initAtEdgeLevel(e,t,n,r,i,a){let o=a[e][t].getPorts()[n];i.getSource()===o&&i.getSource().getNode().getLayer()===i.getTarget().getNode().getLayer()&&this.inLayerEdgeCounts[e]++}initAtLayerLevel(){}initAfterTraversal(){let e=Array(this.nPorts);this.hyperedgeCrossingsCounter=new Ai(this.inLayerEdgeCounts,this.hasNorthSouthPorts,e),this.crossingCounter=new hi(e)}};const Ni=()=>({connectedEdges:0,hierarchicalInfluence:0,randomInfluence:0});function Pi(e,t){e.hierarchicalInfluence+=t.hierarchicalInfluence,e.randomInfluence+=t.randomInfluence,e.connectedEdges+=t.connectedEdges}function Fi(e){let t=e.lGraph.getProperty(ee);if(zi(t)||!e.hasParent||Li(e)||Ri(e))return!0;if(e.crossMinDeterministic)return!1;let n=e.currentNodeOrder.map(e=>e.map(()=>Ni())),r=e=>n[e.getLayer().getIndex()][e.id],i=0,a=0,o=[];for(let t of e.currentNodeOrder){for(let e of t){if(e.getType()===`NORTH_SOUTH_PORT`){o.push(e);continue}let t=r(e);e.getType()===`EXTERNAL_PORT`?(t.hierarchicalInfluence=1,Hi(e)&&(a+=t.connectedEdges)):Vi(e)?t.randomInfluence=1:Bi(e)&&(i+=t.connectedEdges);for(let n of e.getOutgoingEdges())i+=t.randomInfluence,a+=t.hierarchicalInfluence,Ii(r,t,n);for(let n of[...e.getPortSideView(`NORTH`),...e.getPortSideView(`SOUTH`)]){let e=n.getProperty(M);if(e!=null){i+=t.randomInfluence,a+=t.hierarchicalInfluence;let n=r(e);Pi(n,t),n.connectedEdges++}}}for(let e of o){let t=r(e);for(let n of e.getOutgoingEdges())i+=t.randomInfluence,a+=t.hierarchicalInfluence,Ii(r,t,n)}o.length=0}let s=i+a;return(s===0?1/0:(i-a)/s)>=t}function Ii(e,t,n){let r=e(n.getTarget().getNode());Pi(r,t),r.connectedEdges++}function Li(e){return D.isOrderFixed(e.parent.getProperty(O))}function Ri(e){return e.parent.getPortSideView(`EAST`).length<2&&e.parent.getPortSideView(`WEST`).length<2}function zi(e){return e<-1}function Bi(e){let t=e.getPortSideView(`EAST`);return t.length===0||!t.some(e=>e.getConnectedEdges().length>0)}function Vi(e){let t=e.getPortSideView(`WEST`);return t.length===0||!t.some(e=>e.getConnectedEdges().length>0)}function Hi(e){return e.getProperty(L).getSide()===`EAST`}const Ui=[];var Wi=class{nodes;index=-1;barycenter=null;outgoing=null;incoming=null;incomingCount=0;summedWeight;degree;constructor(e,t){if(t!==void 0){let n=e,r=t;this.nodes=Array(n.nodes.length+r.nodes.length);let i=0;for(let e=0;e<n.nodes.length;e++)this.nodes[i++]=n.nodes[e];for(let e=0;e<r.nodes.length;e++)this.nodes[i++]=r.nodes[e];if(n.outgoing!==null){let e=[];for(let t=0;t<n.outgoing.length;t++){let i=n.outgoing[t];i!==r&&e.push(i)}if(r.outgoing!==null)for(let t=0;t<r.outgoing.length;t++){let i=r.outgoing[t];i!==n&&(e.includes(i)?i.incomingCount--:e.push(i))}this.outgoing=e}else if(r.outgoing!==null){let e=[];for(let t=0;t<r.outgoing.length;t++){let i=r.outgoing[t];i!==n&&e.push(i)}this.outgoing=e}this.summedWeight=n.summedWeight+r.summedWeight,this.degree=n.degree+r.degree}else this.nodes=[e],this.summedWeight=0,this.degree=0}getSummedWeight(){return this.summedWeight}getDegree(){return this.degree}getOutgoing(){return this.outgoing??=[],this.outgoing}getIncoming(){return this.incoming??=[],this.incoming}resetOutgoing(){this.outgoing=null}resetIncoming(){this.incoming=null}hasOutgoing(){return this.outgoing!==null&&this.outgoing.length>0}hasIncoming(){return this.incoming!==null&&this.incoming.length>0}getBarycenter(e){return e(this.nodes[0]).barycenter}},Gi=class{skipInitAtLayerLevel=!0;skipInitAtPortLevel=!0;skipInitAtEdgeLevel=!0;skipInitAfterTraversal=!0;barycenterStates;nodeState=/* @__PURE__ */ new WeakMap;groups=/* @__PURE__ */ new Map;layoutUnits=/* @__PURE__ */ new Map;constraintsBetweenNonDummies;scratchGroups=[];constructor(e){this.barycenterStates=e.map(e=>e.map(e=>{let t=new Ki(e);return this.nodeState.set(e,t),t})),this.constraintsBetweenNonDummies=e.length>0&&e[0].length>0&&e[0][0].getGraph().getProperty(t)}getBarycenterStates(){return this.barycenterStates}registerNodeState(e,t){this.nodeState.set(e,t)}initAtLayerLevel(e,t){}initAtNodeLevel(e,t,n){this.initNode(n[e][t],!0)}initNode(e,t){if(this.groups.set(e,new Wi(e)),t){let t=e.getProperty(at);if(t!==null){let n=this.layoutUnits.get(t);n===void 0?this.layoutUnits.set(t,[e]):n.push(e)}}}initAtPortLevel(){}initAtEdgeLevel(){}initAfterTraversal(){}stateOf(e){return this.nodeState.get(e)}processConstraints(e){if(this.constraintsBetweenNonDummies){this.processConstraintsStage(e,!0);for(let t of e)this.initNode(t,!1)}this.processConstraintsStage(e,!1)}processConstraintsStage(e,t){let n=this.scratchGroups;n.length=0;for(let t=0;t<e.length;t++)n.push(this.groups.get(e[t]));this.buildConstraintsGraph(n,t);let r=this.findViolatedConstraint(n);for(;r!==null;)this.handleViolatedConstraint(r[0],r[1],n),r=this.findViolatedConstraint(n);e.length=0;for(let t of n){let n=t.barycenter;for(let r of t.nodes)e.push(r),this.stateOf(r).barycenter=n}}buildConstraintsGraph(e,t){for(let t of e)t.resetOutgoing(),t.incomingCount=0;let n=null;for(let r of e){let e=r.nodes[0];if(!(t&&e.getType()!==`NORMAL`)){for(let n of e.getProperty(k)??Ui)if(!t||n.getType()===`NORMAL`){let t=this.groups.get(n);if(t===void 0){let t=n.getLayer(),r=e.getLayer();console.error(`GGN_FORSTER BUG: successor id=${n.id} label=${n.getLabels()[0]?.text??`?`} type=${n.getType()} layer=${t?.getIndex()??`UNDEF`} graphParent=${n.getGraph()?.getParentNode()?`nested`:`root`} | node id=${e.id} label=${e.getLabels()[0]?.text??`?`} type=${e.getType()} layer=${r?.getIndex()??`UNDEF`} graphParent=${e.getGraph()?.getParentNode()?`nested`:`root`} | graphNodeCount=${n.getGraph()?.getAllNodes().length}`);continue}r.getOutgoing().push(t),t.incomingCount++}if(!t&&e.getType()===`NORMAL`){if(n!==null){let t=this.layoutUnits.get(n)??Ui,r=this.layoutUnits.get(e)??Ui;for(let e of t)for(let t of r){let n=this.groups.get(e),r=this.groups.get(t);n.getOutgoing().push(r),r.incomingCount++}}n=e}}}}findViolatedConstraint(e){let t=e=>this.stateOf(e);for(let n=0;n<e.length;n++){let r=e[n];r.index=n,r.barycenter=t(r.nodes[0]).barycenter}let n=[];for(let t of e)t.resetIncoming(),t.hasOutgoing()&&t.incomingCount===0&&n.push(t);let r=0;for(;r<n.length;){let e=n[r++];if(e.hasIncoming()){let t=e.barycenter;for(let n of e.getIncoming()){let r=n.barycenter;if(r===t){if(n.index>e.index)return[n,e]}else if(r>t)return[n,e]}}for(let t of e.getOutgoing())t.getIncoming().unshift(e),t.incomingCount===t.getIncoming().length&&n.push(t)}return null}handleViolatedConstraint(e,t,n){let r=e=>this.stateOf(e),i=new Wi(e,t),a=e.barycenter,o=t.barycenter,s=null,c=e.getSummedWeight()+t.getSummedWeight(),l=e.getDegree()+t.getDegree();if(l>0?s=c/l:a!==null&&o!==null?s=(a+o)/2:a===null?o!==null&&(s=o):s=a,s!==null)for(let e of i.nodes)this.stateOf(e).barycenter=s;i.barycenter=s;let u=!1;for(let a=0;a<n.length;a++){let o=n[a];if(o===e||o===t)n.splice(a,1),a--;else if(!u&&(o.getBarycenter(r)??0)>(i.getBarycenter(r)??0))n.splice(a,0,i),u=!0;else if(o.hasOutgoing()){let n=o.getOutgoing(),r=!0,a=!0,s=!1;for(let i=0;i<n.length;){let o=n[i];r&&o===e?(n.splice(i,1),r=!1,s=!0):a&&o===t?(n.splice(i,1),a=!1,s=!0):i++}s&&(n.push(i),i.incomingCount++)}}u||n.push(i)}},Ki=class{node;summedWeight=0;degree=0;barycenter=null;visited=!1;visitedGeneration=-1;forwardAdjacency=[];backwardAdjacency=[];constructor(e){this.node=e}};const qi=.07;function Ji(e){return e.getAllProperties().get(`org.eclipse.elk.hierarchyHandling`)===`SEPARATE_CHILDREN`}function Yi(e){let t=e.getPorts();for(let e=0;e<t.length;e++){let n=t[e];if(n.getIncomingEdges().length>0||n.getOutgoingEdges().length>0)return!1}return!0}var Xi=class{skipInitAtPortLevel=!0;skipInitAtEdgeLevel=!0;portRanks;random;constraintResolver;barycenterState;portDistributor;barycenterSortStates=null;layerStates=/* @__PURE__ */ new WeakMap;debugBarycenter=!1;barycenterVisitGeneration=0;nextBarycenterScratch=[];barycenterAssociates=/* @__PURE__ */ new WeakMap;hasBarycenterAssociates=!1;separateBlackBoxes=/* @__PURE__ */ new WeakSet;hasSeparateBlackBoxes=!1;constructor(e,t,n,r){this.constraintResolver=e,this.random=t,this.portDistributor=n,this.barycenterState=e.getBarycenterStates();for(let e=0;e<r.length;e++){let t=r[e];for(let e=0;e<t.length;e++){let n=t[e],r=n.getProperty(we);r!=null&&r.length>0&&(this.barycenterAssociates.set(n,r),this.hasBarycenterAssociates=!0),Ji(n)&&(this.separateBlackBoxes.add(n),this.hasSeparateBlackBoxes=!0)}}}minimizeLayer(e,t,n,r){this.debugBarycenter=!1,n?this.randomizeBarycenters(e):(this.calculateBarycenters(e,r),this.fillInUnknownBarycenters(e,t)),e.length>1&&(this.barycenterSortStates=this.statesForLayer(e),e.sort(this.barycenterIndexStateComparator),this.barycenterSortStates=null,this.constraintResolver.processConstraints(e))}randomizeBarycenters(e){for(let t=0;t<e.length;t++){let n=e[t],r=this.hasSeparateBlackBoxes&&this.separateBlackBoxes.has(n)&&Yi(n)?Number.MAX_VALUE:this.random.nextDouble(),i=this.stateOf(n);i.barycenter=r,i.summedWeight=r,i.degree=1}}fillInUnknownBarycenters(e,t){if(e.length===0)return;let n=this.statesForLayer(e);if(this.hasSeparateBlackBoxes)for(let t=0;t<e.length;t++){let r=e[t],i=n[r.id];i.barycenter===null&&this.separateBlackBoxes.has(r)&&Yi(r)&&(i.barycenter=Number.MAX_VALUE,i.summedWeight=Number.MAX_VALUE,i.degree=1)}if(t){let t=this.nextBarycenterScratch;t.length=e.length;let r=null;for(let i=e.length-1;i>=0;i--){t[i]=r;let a=n[e[i].id].barycenter;a!==null&&(r=a)}let i=-1;for(let r=0;r<e.length;r++){let a=n[e[r].id],o=a.barycenter;if(o===null){let e=i+1,n=t[r];n!==null&&(e=n),o=(i+e)/2,a.barycenter=o,a.summedWeight=o,a.degree=1}i=o}}else{let t=0;for(let r=0;r<e.length;r++){let i=n[e[r].id].barycenter;i!==null&&(t=Math.max(t,i))}t+=2;for(let r=0;r<e.length;r++){let i=n[e[r].id];if(i.barycenter===null){let e=this.random.nextFloat()*t-1;i.barycenter=e,i.summedWeight=e,i.degree=1}}}}calculateBarycenters(e,t){if(e.length===0)return;let n=++this.barycenterVisitGeneration,r=this.statesForLayer(e);for(let i=0;i<e.length;i++)this.calculateBarycenter(e[i],t,n,r)}calculateBarycenter(e,t,n,r){let i=r[e.id];if(i.visitedGeneration===n)return;i.visitedGeneration=n,i.degree=0,i.summedWeight=0,i.barycenter=null;let a=e.getLayer(),o=t?i.forwardAdjacency:i.backwardAdjacency;for(let e=0;e<o.length;e++){let a=o[e];if(a>=0){let e=r[a].node,o=r[a];this.calculateBarycenter(e,t,n,r),i.degree+=o.degree,i.summedWeight+=o.summedWeight}else i.summedWeight+=this.portRanks[-a-1],i.degree++}if(this.hasBarycenterAssociates){let o=this.barycenterAssociates.get(e);if(o!==void 0)for(let e=0;e<o.length;e++){let s=o[e];if(s.getLayer()===a){let e=r[s.id];this.calculateBarycenter(s,t,n,r),i.degree+=e.degree,i.summedWeight+=e.summedWeight}}}if(i.degree>0){let t=this.random.nextFloat();if(i.summedWeight+=t*qi-qi/2,i.barycenter=i.summedWeight/i.degree,this.debugBarycenter){let t=e.getType().toString()===`NORMAL`?e.getLabels()[0]?.text??e.id:e.id,n=[];for(let t of e.getPorts()){for(let e of t.getSuccessorPorts()){let r=e.getNode(),i=r?.getType().toString()===`NORMAL`?r?.getLabels()[0]?.text??r?.id:r?.id;n.push(t.id+`->`+i+`:`+(this.portRanks[e.id]??`?`))}for(let e of t.getPredecessorPorts()){let r=e.getNode(),i=r?.getType().toString()===`NORMAL`?r?.getLabels()[0]?.text??r?.id:r?.id;n.push(i+`->`+t.id+`:`+(this.portRanks[e.id]??`?`))}}console.error(`GGN_BD ${t} L${e.getLayer()?.getIndex()} degree=${this.stateOf(e).degree} sw=${this.stateOf(e).summedWeight.toFixed(4)} bc=${this.stateOf(e).barycenter.toFixed(4)} [${n.join(` `)}]`)}}}statesForLayer(e){let t=e[0].getLayer();return this.layerStates.get(t)??this.barycenterState[t.getIndex()]}stateOf(e){return this.constraintResolver.stateOf(e)}barycenterIndexStateComparator=(e,t)=>{let n=this.barycenterSortStates,r=n[e.id],i=n[t.id];return r.barycenter!==null&&i.barycenter!==null?r.barycenter-i.barycenter:r.barycenter===null?i.barycenter===null?0:1:-1};barycenterStateComparator=(e,t)=>{let n=this.stateOf(e),r=this.stateOf(t);return n.barycenter!==null&&r.barycenter!==null?n.barycenter-r.barycenter:n.barycenter===null?r.barycenter===null?0:1:-1};minimizeCrossings(e,t,n,r){if(!this.isFirstLayer(e,t,n)){let r=e[t-this.changeIndex(n)];this.portDistributor.calculatePortRanksForLayer(r,this.portTypeFor(n))}let i=e[t][0],a=!r||this.isExternalPortDummy(i);return this.minimizeLayer(e[t],a,!1,n),!1}setFirstLayerOrder(e,t){let n=this.startIndex(t,e.length);return this.minimizeLayer(e[n],!1,!0,t),!1}isFirstLayer(e,t,n){return n?t===0:t===e.length-1}changeIndex(e){return e?1:-1}startIndex(e,t){return e?0:t-1}isExternalPortDummy(e){return e.getType()===`EXTERNAL_PORT`}portTypeFor(e){return e?`OUTPUT`:`INPUT`}alwaysImproves(){return!1}isDeterministic(){return!1}initAtLayerLevel(e,t){this.barycenterState[e]=Array(t[e].length)}initAtNodeLevel(e,t,n){let r=new Ki(n[e][t]);this.barycenterState[e][t]=r,this.constraintResolver.registerNodeState(n[e][t],r)}initAtPortLevel(){}initAtEdgeLevel(){}initAfterTraversal(){this.portRanks=this.portDistributor.getPortRanks();for(let e=0;e<this.barycenterState.length;e++){let t=this.barycenterState[e];if(t.length>0){let e=t[0].node.getLayer();e!==null&&this.layerStates.set(e,t)}}this.buildBarycenterAdjacency()}buildBarycenterAdjacency(){for(let e=0;e<this.barycenterState.length;e++){let t=this.barycenterState[e];for(let e=0;e<t.length;e++){let n=t[e].node,r=n.getLayer(),i=[],a=[],o=n.getPorts();for(let e=0;e<o.length;e++){let t=o[e];for(let e of t.getIncomingEdges()){let t=e.getSource();if(t===null)continue;let a=t.getNode();a.getLayer()===r?a!==n&&i.push(a.id):i.push(-(t.id+1))}for(let e of t.getOutgoingEdges()){let t=e.getTarget();if(t===null)continue;let i=t.getNode();i.getLayer()===r?i!==n&&a.push(i.id):a.push(-(t.id+1))}}t[e].forwardAdjacency=i,t[e].backwardAdjacency=a}}}};function Zi(e,t,n,r){let i=n.getProperty(Ie)===`ENFORCED`,a=n.getProperty(Bn);if(!e.hasProperty(F))return-1;if(i){if(a.includes(e.getProperty(u))&&a.includes(t.getProperty(u)))return r*(e.getProperty(u)??0)+e.getProperty(F)}else return e.getProperty(F);return e.getProperty(F)}const Qi=new ut(`medianHeuristic.weight`),$i=Number.MIN_VALUE,ea=Number.MAX_VALUE;function ta(e){return e.getAllProperties().get(`org.eclipse.elk.hierarchyHandling`)===`SEPARATE_CHILDREN`}function na(e){return e.getIncomingEdges().length===0&&e.getOutgoingEdges().length===0}var ra=class{skipInitAtLayerLevel=!0;skipInitAtNodeLevel=!0;skipInitAtPortLevel=!0;skipInitAtEdgeLevel=!0;skipInitAfterTraversal=!0;random;constructor(e){this.random=e}alwaysImproves(){return!1}isDeterministic(){return!0}setFirstLayerOrder(e,t){let n=t?0:Math.max(0,e.length-1),r=[...e[n]];for(let e of r)e.setProperty(Qi,ta(e)&&na(e)?ea:this.random.nextDouble());r.sort(this.weightComparator);let i=0;for(let t of r)e[n][i++]=t,t.setProperty(Qi,i);return!1}minimizeCrossings(e,t,n,r){let i=[...e[t]];this.calculateMedians(i,n?t-1:t+1),i.sort(this.weightComparator);let a=0;for(let n of i)e[t][a++]=n;return!1}calculateMedians(e,t){let n=$i,r=ea,i=[];for(let a of e){let e=[];for(let n of a.getIncomingEdges())this.addAdjacentNodeInReferenceLayer(n,t,e);for(let n of a.getOutgoingEdges())this.addAdjacentNodeInReferenceLayer(n,t,e);if(e.length===0)i.push(a);else{e.sort(this.weightComparator);let t=e[Math.floor(e.length/2)].getProperty(Qi);a.setProperty(Qi,t),n=Math.min(n,t),r=Math.max(r,t)}}let a=(r+n)/2;for(let e of i)e.setProperty(Qi,a)}addAdjacentNodeInReferenceLayer(e,t,n){let r=e.getTarget().getNode(),i=e.getSource().getNode();r.getLayer().getIndex()===t&&n.push(r),i.getLayer().getIndex()===t&&n.push(i)}weightComparator=(e,t)=>e.hasProperty(Qi)?t.hasProperty(Qi)?ia(e.getProperty(Qi),t.getProperty(Qi)):-1:1;initAtLayerLevel(e,t){}initAtNodeLevel(e,t,n){}initAtPortLevel(e,t,n,r){}initAtEdgeLevel(e,t,n,r,i,a){}initAfterTraversal(){}};function ia(e,t){return e<t?-1:e>t?1:e===t?e===0?Object.is(e,-0)===Object.is(t,-0)?0:Object.is(e,-0)?-1:1:0:Number.isNaN(e)?+!Number.isNaN(t):-1}var aa=class e extends Xi{biggerThan=/* @__PURE__ */ new Map;smallerThan=/* @__PURE__ */ new Map;constructor(e,t,n,r){super(e,t,n,r),this.barycenterStateComparator=(e,t)=>{if(e.getLayerConstraint()===`FIRST_SEPARATE`||e.getLayerConstraint()===`LAST_SEPARATE`||t.getLayerConstraint()===`FIRST_SEPARATE`||t.getLayerConstraint()===`LAST_SEPARATE`)return 0;let n=e.getGraph(),r=this.compareBasedOnTansitiveDependencies(e,t);if(r!==0)return r;if(e.hasProperty(F)&&t.hasProperty(F)){let r=Math.sign(Zi(e,t,n,n.getProperty(xn))-Zi(t,e,n,n.getProperty(xn)));if(n.getProperty(Ie)===`ONLY_WITHIN_GROUP`&&e.getProperty(u)!==t.getProperty(u)&&(r=0),r<0)return this.updateBiggerAndSmallerAssociations(t,e),r;if(r>0)return this.updateBiggerAndSmallerAssociations(e,t),r}return this.compareBasedOnBarycenter(e,t)}}minimizeLayer(t,n,r,i){if(r?this.randomizeBarycenters(t):(this.calculateBarycenters(t,i),this.fillInUnknownBarycenters(t,n)),t.length>1){let n=t[0].getGraph().getProperty(Oe);n?e.insertionSort(t,this.barycenterStateComparator,this):t.sort(this.barycenterStateComparator),n||this.constraintResolver.processConstraints(t)}}compareBasedOnTansitiveDependencies(e,t){if(!this.biggerThan.has(e))this.biggerThan.set(e,/* @__PURE__ */ new Set);else if(this.biggerThan.get(e).has(t))return 1;if(!this.biggerThan.has(t))this.biggerThan.set(t,/* @__PURE__ */ new Set);else if(this.biggerThan.get(t).has(e))return-1;if(!this.smallerThan.has(e))this.smallerThan.set(e,/* @__PURE__ */ new Set);else if(this.smallerThan.get(e).has(t))return-1;if(!this.smallerThan.has(t))this.smallerThan.set(t,/* @__PURE__ */ new Set);else if(this.smallerThan.get(t).has(e))return 1;return 0}compareBasedOnBarycenter(e,t){let n=this.stateOf(e),r=this.stateOf(t);if(n.barycenter!==null&&r.barycenter!==null){let i=ia(n.barycenter,r.barycenter);return i<0?this.updateBiggerAndSmallerAssociations(t,e):i>0&&this.updateBiggerAndSmallerAssociations(e,t),i}return n.barycenter===null?r.barycenter===null?0:(this.updateBiggerAndSmallerAssociations(e,t),1):(this.updateBiggerAndSmallerAssociations(t,e),-1)}updateBiggerAndSmallerAssociations(e,t){let n=this.biggerThan.get(e),r=this.biggerThan.get(t),i=this.smallerThan.get(e),a=this.smallerThan.get(t);n.add(t),a.add(e);for(let t of r){n.add(t);let r=this.smallerThan.get(t);r.add(e);for(let e of i)r.add(e)}for(let e of i){a.add(e);let n=this.biggerThan.get(e);n.add(t);for(let e of r)n.add(e)}}static insertionSort(e,t,n){for(let n=1;n<e.length;n++){let r=e[n],i=n;for(;i>0&&t(e[i-1],r)>0;)e[i]=e[i-1],i--;e[i]=r}n.clearTransitiveOrdering()}clearTransitiveOrdering(){this.biggerThan=/* @__PURE__ */ new Map,this.smallerThan=/* @__PURE__ */ new Map}},oa=class{skipInitAtLayerLevel=!0;skipInitAtEdgeLevel=!0;_lGraph;_currentNodeOrder;_currentlyBestNodeAndPortOrder=null;_bestNodeAndPortOrder=null;_portPositions=[];_useBottomUp=!1;_childGraphs=[];_hasExternalPorts=!1;_hasParent=!1;_parentGraphData=null;_parent=null;_crossMinimizer;_portDistributor;_crossingsCounter;_nPorts=0;constructor(e,t,n){this._lGraph=e,this._currentNodeOrder=e.toNodeArray(),this._parent=this._lGraph.getParentNode(),this._hasParent=this._parent!==null,this._parentGraphData=this._hasParent?n[this._parent.getGraph().id]:null;let r=this._lGraph.getProperty(w);this._hasExternalPorts=r.has(`EXTERNAL_PORTS`),this._crossingsCounter=new Mi(this._currentNodeOrder);let i=this._lGraph.getProperty(P);this._portDistributor=ki(t,i,this._currentNodeOrder);let a=[this,this._crossingsCounter,this._portDistributor],o=e.getProperty(Oe);if(t===0&&!o){let e=new Gi(this._currentNodeOrder);a.push(e),this._crossMinimizer=new Xi(e,i,this._portDistributor,this._currentNodeOrder)}else if(t===0&&o){let e=new Gi(this._currentNodeOrder);a.push(e),this._crossMinimizer=new aa(e,i,this._portDistributor,this._currentNodeOrder)}else if(t===3)this._crossMinimizer=new ra(i);else if(t===1||t===2)this._crossMinimizer=new Ci(t,this);else throw Error(`CrossMinType ${t} 未实现`);a.push(this._crossMinimizer),ji(a,this._currentNodeOrder),this._useBottomUp=Fi(this)}dontSweepInto(){return this._useBottomUp}get lGraph(){return this._lGraph}get currentNodeOrder(){return this._currentNodeOrder}get currentlyBestNodeAndPortOrder(){return this._currentlyBestNodeAndPortOrder}setCurrentlyBestNodeAndPortOrder(e){this._currentlyBestNodeAndPortOrder=e}get bestNodeNPortOrder(){return this._bestNodeAndPortOrder}setBestNodeNPortOrder(e){this._bestNodeAndPortOrder=e}get crossCounter(){return this._crossingsCounter}get crossMinimizer(){return this._crossMinimizer}get portDistributor(){return this._portDistributor}get parent(){return this._parent}get hasParent(){return this._hasParent}get childGraphs(){return this._childGraphs}get hasExternalPorts(){return this._hasExternalPorts}get parentGraphData(){return this._parentGraphData}get crossMinDeterministic(){return this._crossMinimizer.isDeterministic()}get crossMinAlwaysImproves(){return this._crossMinimizer.alwaysImproves()}get getBestSweep(){return this._crossMinimizer.isDeterministic()?this._currentlyBestNodeAndPortOrder:this._bestNodeAndPortOrder}get portPositions(){return this._portPositions}initAtLayerLevel(){}initAtNodeLevel(e,t,n){let r=n[e][t].getNestedGraph();r!==null&&this._childGraphs.push(r)}initAtPortLevel(){this._nPorts++}initAtEdgeLevel(){}initAfterTraversal(){this._portPositions=Array(this._nPorts)}};function sa(e,t){let n={NORTH:0,EAST:1,SOUTH:2,WEST:3},r=n[e.getSide()]??0,i=n[t.getSide()]??0;if(r!==i)return r-i;let a=e.getNode().getProperty(O);if(!D.isOrderFixed(a))return 0;if(a===`FIXED_ORDER`){let n=e.getProperty(Fe),r=t.getProperty(Fe);if(n!==null&&r!==null&&n-r!==0)return n-r}switch(e.getSide()){case`NORTH`:return e.getPosition().x-t.getPosition().x;case`EAST`:return e.getPosition().y-t.getPosition().y;case`SOUTH`:return t.getPosition().x-e.getPosition().x;case`WEST`:return t.getPosition().y-e.getPosition().y;default:return 0}}var ca=class e{nodeOrder;portOrders;constructor(t){if(t instanceof e){let n=t;this.nodeOrder=e.deepCopy(n.nodeOrder),this.portOrders=[...n.portOrders]}else{this.nodeOrder=e.deepCopy(t);let n=Array(t.length);this.portOrders=n;for(let e=0;e<t.length;e++){let r=t[e],i=Array(r.length);n[e]=i;for(let e=0;e<r.length;e++)i[e]=r[e].getPorts().slice()}}}static deepCopy(e){if(e===null)return null;let t=Array(e.length);for(let n=0;n<e.length;n++)t[n]=e[n].slice();return t}nodes(){return this.nodeOrder}transferNodeAndPortOrdersToGraph(e,t){let n=[],r=/* @__PURE__ */ new Set,i=e.getLayers();for(let e=0;e<i.length;e++){let a=i[e].getNodes();n.length=0;for(let r=0;r<a.length;r++){let a=this.nodeOrder[e][r];if(a.id=r,a.getType()===`NORTH_SOUTH_PORT`&&n.push(a),i[e].getNodes()[r]=a,a.getPorts().length=0,a.getPorts().push(...this.portOrders[e][r]),t){let e=a.getProperty(O);D.isOrderFixed(e)||a.setProperty(O,`FIXED_ORDER`)}}for(let e of n){let t=this.assertCorrectPortSides(e);r.add(t),r.add(e)}}for(let e of r)e.getPorts().sort(sa)}assertCorrectPortSides(e){let t=e.getProperty(at),n=e.getPorts()[0];for(let r of t.getPorts())if(r===n.getProperty(L)){if(r.getSide()===`NORTH`&&e.id>t.id){if(r.setSide(`SOUTH`),r.isExplicitlySuppliedPortAnchor()){let e=r.getSize().y,t=r.getAnchor().y;r.getAnchor().y=e-t}}else if(r.getSide()===`SOUTH`&&t.id>e.id&&(r.setSide(`NORTH`),r.isExplicitlySuppliedPortAnchor())){let e=r.getSize().y,t=r.getAnchor().y;r.getAnchor().y=-(e-t)}break}return t}},la=class{graphInfoHolders=[];graphsWhoseNodeOrderChanged=/* @__PURE__ */ new Set;random;randomSeed=1;crossMinType;constructor(e){this.crossMinType=e}process(e,t){t.begin(`Minimize Crossings ${this.crossMinType}`,1);let n=e.getLayers().length===0||e.getLayers().every(e=>e.getNodes().length===0),r=e.getLayers().length===1&&e.getLayers()[0].getNodes().length===1,i=e.getProperty(mn)===`INCLUDE_CHILDREN`;if(n||r&&!i){t.done();return}let a=this.initialize(e),o=this.chooseMinimizingMethod(a);for(let e of a)e.currentNodeOrder.length>0&&(o(e),e.hasParent&&this.setPortOrderOnParentGraph(e));this.transferNodeAndPortOrdersToGraph(),t.done()}chooseMinimizingMethod(e){if(e.length===0)return()=>{};let t=e[0];return t.crossMinDeterministic?t.crossMinAlwaysImproves?e=>this.minimizeCrossingsNoCounter(e):e=>this.minimizeCrossingsWithCounter(e):e=>this.compareDifferentRandomizedLayouts(e)}minimizeCrossingsNoCounter(e){let t=this.random.nextBoolean(),n=!0;for(;n;)n=!1,n=e.crossMinimizer.setFirstLayerOrder(e.currentNodeOrder,t),n=this.sweepReducingCrossings(e,t,!1)||n,t=!t;this.setCurrentlyBestNodeOrders()}compareDifferentRandomizedLayouts(e){this.random.setSeed(this.randomSeed),this.graphsWhoseNodeOrderChanged.clear();let t=2**53-1,n=e.lGraph.getProperty(en);for(let r=0;r<n;r++){let n=this.minimizeCrossingsWithCounter(e);if(n<t&&(t=n,this.saveAllNodeOrdersOfChangedGraphs(),t===0))break}}minimizeCrossingsWithCounter(e){let t=this.random.nextBoolean();this.countCurrentNumberOfCrossings(e),e.crossMinimizer.setFirstLayerOrder(e.currentNodeOrder,t),this.sweepReducingCrossings(e,t,!0);let n=this.countCurrentNumberOfCrossings(e),r,i=2;do{if(i++,this.setCurrentlyBestNodeOrders(),n===0)return 0;t=!t,r=n,this.sweepReducingCrossings(e,t,!1),n=this.countCurrentNumberOfCrossings(e)}while(r>n);return r}countCurrentNumberOfCrossings(e){let t=0,n=[e];for(;n.length>0;){let e=n.pop();t+=e.crossCounter.countAllCrossings(e.currentNodeOrder);for(let n of e.childGraphs){let e=this.graphInfoHolders[n.id];e&&!e.dontSweepInto()&&(t+=this.countCurrentNumberOfCrossings(e))}}return t}sweepReducingCrossings(e,t,n){let r=e.currentNodeOrder,i=r.length,a=e.portDistributor.distributePortsWhileSweeping(r,this.firstIndex(t,i),t),o=r[this.firstIndex(t,i)];a=this.sweepInHierarchicalNodes(o,t,n)||a;for(let o=this.firstFree(t,i);this.isNotEnd(i,o,t);o+=this.next(t))a=e.crossMinimizer.minimizeCrossings(r,o,t,n)||a,a=e.portDistributor.distributePortsWhileSweeping(r,o,t)||a,a=this.sweepInHierarchicalNodes(r[o],t,n)||a;return this.graphsWhoseNodeOrderChanged.add(e),a}sweepInHierarchicalNodes(e,t,n){let r=!1;for(let i of e)this.hasNestedGraph(i)&&!this.graphInfoHolders[i.getNestedGraph().id].dontSweepInto()&&(r=this.sweepInHierarchicalNode(t,i,n)||r);return r}sweepInHierarchicalNode(e,t,n){let r=t.getNestedGraph(),i=this.graphInfoHolders[r.id],a=i.currentNodeOrder,o=this.firstIndex(e,a.length),s=a[o][0];this.isExternalPortDummy(s)?a[o]=this.sortPortDummiesByPortPositions(t,a[o],this.sideOpposedSweepDirection(e)):i.crossMinimizer.setFirstLayerOrder(a,e);let c=this.sweepReducingCrossings(i,e,n);return this.sortPortsByDummyPositionsInLastLayer(i.currentNodeOrder,i.parent,e),c}sortPortsByDummyPositionsInLastLayer(e,t,n){let r=e[this.endIndex(n,e.length)],i=this.firstIndex(n,r.length);if(!this.isExternalPortDummy(r[i]))return;let a=[];for(let e=0;e<r.length;e++){let t=r[e];if(this.isExternalPortDummy(t)){let e=this.originPort(t);e!=null&&typeof e.getSide==`function`&&a.push(t)}}let o=t.getPorts(),s=n?0:a.length-1,c=n?1:-1;for(let e=0;e<o.length;e++){let t=o[e];this.isOnEndOfSweepSide(t,n)&&this.isHierarchical(t)&&s>=0&&s<a.length&&(o[e]=this.originPort(a[s]),s+=c)}}sortPortDummiesByPortPositions(e,t,n){let r=e.getPortSideView(n),i=Array(t.length),a=0;if(n===`EAST`||n===`NORTH`)for(let e=0;e<r.length;e++){let t=r[e];this.isHierarchical(t)&&(i[a++]=this.dummyNodeFor(t))}else for(let e=r.length-1;e>=0;e--){let t=r[e];this.isHierarchical(t)&&(i[a++]=this.dummyNodeFor(t))}if(a<t.length)throw Error(`IllegalStateException: Expected ${t.length} hierarchical ports, but found only ${a}.`);return i}setPortOrderOnParentGraph(e){if(e.hasExternalPorts&&e.getBestSweep!==null){let t=e.getBestSweep;this.sortPortsByDummyPositionsInLastLayer(t.nodes(),e.parent,!0),this.sortPortsByDummyPositionsInLastLayer(t.nodes(),e.parent,!1),e.parent.setProperty(O,`FIXED_ORDER`)}}saveAllNodeOrdersOfChangedGraphs(){for(let e of this.graphsWhoseNodeOrderChanged)e.setBestNodeNPortOrder(new ca(e.currentlyBestNodeAndPortOrder))}setCurrentlyBestNodeOrders(){for(let e of this.graphsWhoseNodeOrderChanged)e.setCurrentlyBestNodeAndPortOrder(new ca(e.currentNodeOrder))}firstIndex(e,t){return e?0:t-1}endIndex(e,t){return e?t-1:0}firstFree(e,t){return e?1:t-2}next(e){return e?1:-1}isNotEnd(e,t,n){return n?t<e:t>=0}hasNestedGraph(e){return e.getNestedGraph()!==null}sideOpposedSweepDirection(e){return e?`WEST`:`EAST`}isExternalPortDummy(e){return e.getType()===`EXTERNAL_PORT`}originPort(e){return e.getProperty(L)}isHierarchical(e){return e.getProperty($e)}dummyNodeFor(e){return e.getProperty(M)}isOnEndOfSweepSide(e,t){return t?e.getSide()===`EAST`:e.getSide()===`WEST`}initialize(e){this.graphInfoHolders=[];let t=e.getProperty(P);t===void 0&&(t=new $n(e.getProperty(me)),e.setProperty(P,t)),this.random=t,this.randomSeed=this.random.nextLong();let n=[],r=[e],i=0;for(;i<r.length;){let e=r[i];e.id=i++,e.getProperty(P)===void 0&&e.setProperty(P,t);let a=new oa(e,this.crossMinType,this.graphInfoHolders);r.push(...a.childGraphs),this.graphInfoHolders.push(a),a.dontSweepInto()&&n.unshift(a)}return this.graphsWhoseNodeOrderChanged=/* @__PURE__ */ new Set,n}transferNodeAndPortOrdersToGraph(){for(let e of this.graphInfoHolders){let t=e.getBestSweep;t!==null&&t.transferNodeAndPortOrdersToGraph(e.lGraph,!0)}}getGraphData(){return this.graphInfoHolders}},ua=class{process(e){let t=0;for(let n of e.getLayers())n.id=t++;let n=e.toNodeArray(),r=new Oi(n.length);ji([r],n);let i=0;t=0;for(let a of e.getLayers()){let e=0,o=0;for(let t of a.getNodes()){t.getPosition().x>0&&(e+=t.getPosition().x+t.getSize().x/2,o++);for(let e of t.getPorts())e.id=i++}o>0&&(e/=o);let s=Array(a.getNodes().length),c=0;for(let t of a.getNodes())t.id=c++,s[t.id]=da(t,e),t.getType()===`LONG_EDGE`&&t.setProperty(St,s[t.id]);a.getNodes().sort((e,t)=>{let n=s[e.id]-s[t.id];if(n===0){let n=e.getProperty(k)??[],r=t.getProperty(k)??[];if(n.includes(t))return-1;if(r.includes(e))return 1}return n}),r.distributePortsWhileSweeping(n,t,!0),t++}}};function da(e,t){switch(e.getType()){case`LONG_EDGE`:{let n=e.getProperty(L),r=(n?.getProperty(An)??[]).slice();n?.getProperty(A)&&r.reverse();let i=e.getProperty(B);if(i){let e=i.getAbsoluteAnchor();if(t<=e.x)return e.y;r.unshift(e)}let a=e.getProperty(I);if(a){let e=a.getAbsoluteAnchor();if(e.x<=t)return e.y;r.push(e)}if(r.length>=2){let e=r[0],n=r[1],i=2;for(;n.x<t&&i<r.length;)e=n,n=r[i++];return e.y+(t-e.x)/(n.x-e.x)*(n.y-e.y)}break}case`NORTH_SOUTH_PORT`:{let t=e.getPorts()[0]?.getProperty(L),n=t?.getNode();if(n&&t){if(t.getSide()===`NORTH`)return n.getPosition().y;if(t.getSide()===`SOUTH`)return n.getPosition().y+n.getSize().y}break}}return e.getGraph()?.getProperty(Dn)===`TOP_LEFT`?e.getPosition().y:e.getPosition().y+e.getSize().y/2}function fa(e,t){return{first:e,second:t}}var pa=class e{nodeCount=0;layerIndex=[];nodeIndex=[];leftNeighbors=[];rightNeighbors=[];static buildFor(t){let n=new e;n.nodeCount=0;for(let e of t.getLayers())n.nodeCount+=e.getNodes().length;let r=0,i=0;n.layerIndex=Array(t.getLayers().length);let a=0;n.nodeIndex=Array(n.nodeCount);for(let e of t.getLayers()){e.id=r++,n.layerIndex[e.id]=i++;let t=0;for(let r of e.getNodes())r.id=a++,n.nodeIndex[r.id]=t++}return n.leftNeighbors=[],e.determineAllLeftNeighbors(n,t),n.rightNeighbors=[],e.determineAllRightNeighbors(n,t),n}static determineAllLeftNeighbors(e,t){for(let n of t.getLayers())for(let t of n.getNodes()){let n=[],r=0;for(let e of t.getIncomingEdges()){if(e.isSelfLoop()||e.isInLayerEdge())continue;let t=e.getProperty(T);t>r&&(r=t,n.length=0),t===r&&n.push(fa(e.getSource().getNode(),e))}n.sort((t,n)=>Math.sign(e.nodeIndex[t.first.id]-e.nodeIndex[n.first.id])),e.leftNeighbors[t.id]=n}}static determineAllRightNeighbors(e,t){for(let n of t.getLayers())for(let t of n.getNodes()){let n=[],r=0;for(let e of t.getOutgoingEdges()){if(e.isSelfLoop()||e.isInLayerEdge())continue;let t=e.getProperty(T);t>r&&(r=t,n.length=0),t===r&&n.push(fa(e.getTarget().getNode(),e))}n.sort((t,n)=>Math.sign(e.nodeIndex[t.first.id]-e.nodeIndex[n.first.id])),e.rightNeighbors[t.id]=n}}cleanup(){this.leftNeighbors=[],this.rightNeighbors=[]}},ma=class{root=[];blockSize=/* @__PURE__ */ new Float64Array;align=[];innerShift=/* @__PURE__ */ new Float64Array;sink=[];shift=/* @__PURE__ */ new Float64Array;y=/* @__PURE__ */ new Float64Array;vdir;hdir;su=/* @__PURE__ */ new Uint8Array;od=/* @__PURE__ */ new Uint8Array;layeredGraph;spacings;constructor(e,t,n,r){this.layeredGraph=e,this.spacings=e.getProperty(Rn),this.root=Array(t),this.blockSize=new Float64Array(t),this.align=Array(t),this.innerShift=new Float64Array(t),this.sink=Array(t),this.shift=new Float64Array(t),this.y=new Float64Array(t),this.su=new Uint8Array(t),this.od=new Uint8Array(t),this.od.fill(1),this.vdir=n,this.hdir=r}cleanup(){this.root=[],this.blockSize=/* @__PURE__ */ new Float64Array,this.align=[],this.innerShift=/* @__PURE__ */ new Float64Array,this.sink=[],this.shift=/* @__PURE__ */ new Float64Array,this.y=/* @__PURE__ */ new Float64Array}layoutSize(){let e=1/0,t=-1/0;for(let n of this.layeredGraph.getLayers())for(let r of n.getNodes()){let n=this.y[r.id],i=n+this.blockSize[this.root[r.id].id];e=Math.min(e,n),t=Math.max(t,i)}return t-e}calculateDelta(e,t){let n=this.y[e.getNode().id]+this.innerShift[e.getNode().id]+e.getPosition().y+e.getAnchor().y;return this.y[t.getNode().id]+this.innerShift[t.getNode().id]+t.getPosition().y+t.getAnchor().y-n}shiftBlock(e,t){let n=e;do this.y[n.id]+=t,n=this.align[n.id];while(n!==e)}checkSpaceAbove(e,t,n){let r=t,i=e,a=i;do{a=this.align[a.id];let e=this.getMinY(a),t=this.getUpperNeighbor(a,n);if(t!==null){let n=this.getMaxY(t);r=Math.min(r,e-(n+this.spacings.getVerticalSpacing(a,t)))}}while(i!==a);return r}checkSpaceBelow(e,t,n){let r=t,i=e,a=i;do{a=this.align[a.id];let e=this.getMaxY(a),t=this.getLowerNeighbor(a,n);if(t!==null){let n=this.getMinY(t);r=Math.min(r,n-(e+this.spacings.getVerticalSpacing(a,t)))}}while(i!==a);return r}getMinY(e){let t=this.root[e.id];return this.y[t.id]+this.innerShift[e.id]-e.getMargin().top}getMaxY(e){let t=this.root[e.id];return this.y[t.id]+this.innerShift[e.id]+e.size.y+e.getMargin().bottom}getLowerNeighbor(e,t){let n=e.getLayer(),r=t.nodeIndex[e.id];return r<n.getNodes().length-1?n.getNodes()[r+1]:null}getUpperNeighbor(e,t){let n=e.getLayer(),r=t.nodeIndex[e.id];return r>0?n.getNodes()[r-1]:null}};const ha=/* @__PURE__ */ new WeakMap;var ga=class e{layeredGraph;ni;constructor(e,t){this.layeredGraph=e,this.ni=t}verticalAlignment(e,t){for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes())e.root[n.id]=n,e.align[n.id]=n,e.innerShift[n.id]=0;let n=this.layeredGraph.getLayers(),r=n.length,i=e.hdir===1,a=e.vdir===1;for(let o=0;o<r;o++){let s=n[i?r-1-o:o],c=-1,l=s.getNodes(),u=l.length;a&&(c=2**53-1);for(let n=0;n<u;n++){let r=l[a?u-1-n:n],o=i?this.ni.rightNeighbors[r.id]:this.ni.leftNeighbors[r.id];if(o.length>0){let n=o.length,i=Math.floor((n+1)/2)-1,s=Math.ceil((n+1)/2)-1;if(a){for(let n=s;n>=i;n--)if(e.align[r.id]===r){let i=o[n].first;!t.has(o[n].second.id)&&c>this.ni.nodeIndex[i.id]&&(e.align[i.id]=r,e.root[r.id]=e.root[i.id],e.align[r.id]=e.root[r.id],e.od[e.root[r.id].id]=+(e.od[e.root[r.id].id]!==0&&r.getType()===`LONG_EDGE`),c=this.ni.nodeIndex[i.id])}}else for(let n=i;n<=s;n++)if(e.align[r.id]===r){let i=o[n].first;!t.has(o[n].second.id)&&c<this.ni.nodeIndex[i.id]&&(e.align[i.id]=r,e.root[r.id]=e.root[i.id],e.align[r.id]=e.root[r.id],e.od[e.root[r.id].id]=+(e.od[e.root[r.id].id]!==0&&r.getType()===`LONG_EDGE`),c=this.ni.nodeIndex[i.id])}}}}}insideBlockShift(e){for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes())e.root[n.id]===n&&this.shiftBlock(e,n)}shiftBlock(e,t){let n=0,r=0;n=t.getMargin().top,r=t.size.y+t.getMargin().bottom,e.innerShift[t.id]=0;let i=t,a;for(;(a=e.align[i.id])!==t;){let t=this.getEdge(i,a),o=0;o=e.hdir===1?t.getTarget().getPosition().y+t.getTarget().getAnchor().y-t.getSource().getPosition().y-t.getSource().getAnchor().y:t.getSource().getPosition().y+t.getSource().getAnchor().y-t.getTarget().getPosition().y-t.getTarget().getAnchor().y;let s=e.innerShift[i.id]+o;e.innerShift[a.id]=s,n=Math.max(n,a.getMargin().top-s),r=Math.max(r,s+a.size.y+a.getMargin().bottom),i=a}i=t;do e.innerShift[i.id]=e.innerShift[i.id]+n,i=e.align[i.id];while(i!==t);e.blockSize[t.id]=n+r}getBlocks(e){let t=/* @__PURE__ */ new Map;for(let n of this.layeredGraph.getLayers())for(let r of n.getNodes()){let n=e.root[r.id],i=t.get(n);i||(i=[],t.set(n,i)),i.push(r)}return t}static getEdge(e,t){if(e===t){for(let n of e.getPorts()){for(let e of n.getIncomingEdges())if(e.getTarget().getNode()===t||e.getSource().getNode()===t)return e;for(let e of n.getOutgoingEdges())if(e.getTarget().getNode()===t||e.getSource().getNode()===t)return e}return null}let n=ha.get(e);n===void 0&&(n=/* @__PURE__ */ new Map,ha.set(e,n));let r=n.get(t);if(r!==void 0)return r;for(let r of e.getPorts()){for(let e of r.getIncomingEdges())if(e.getSource().getNode()===t)return n.set(t,e),e;for(let e of r.getOutgoingEdges())if(e.getTarget().getNode()===t)return n.set(t,e),e}return null}getEdge(t,n){return e.getEdge(t,n)}},_a=class{static THRESHOLD=Number.MAX_VALUE;static EPSILON=1e-4;bal;ni;blockFinished=/* @__PURE__ */ new Set;postProcessablesQueue=[];postProcessablesStack=[];init(e,t){this.bal=e,this.ni=t,this.blockFinished.clear(),this.postProcessablesQueue=[],this.postProcessablesStack=[]}finishBlock(e){this.blockFinished.add(e)}getOther(e,t){if(e.getSource().getNode()===t)return e.getTarget().getNode();if(e.getTarget().getNode()===t)return e.getSource().getNode();throw Error(`Node neither source nor target of edge`)}},va=class extends _a{calculateThreshold(e,t,n){return this.bal.vdir===1?1/0:-1/0}postProcess(){}},ya=class extends _a{scratchPostprocessable=null;calculateThreshold(e,t,n){let r=t===n,i=this.bal.align[n.id]===t;if(!(r||i))return e;let a=e;return r&&(a=this.getBound(t,!0)),!Number.isFinite(a)&&i&&(a=this.getBound(n,!1)),a}pickEdge(e){let t=e.isRoot?this.bal.hdir===0?e.free.getIncomingEdges():e.free.getOutgoingEdges():this.bal.hdir===1?e.free.getIncomingEdges():e.free.getOutgoingEdges(),n=!1;for(let r of t)if((this.bal.od[this.bal.root[e.free.id].id]||!r.isInLayerEdge())&&!(this.bal.su[this.bal.root[e.free.id].id]||this.bal.su[this.bal.root[e.free.id].id])&&(n=!0,this.blockFinished.has(this.bal.root[this.getOther(r,e.free).id])))return e.hasEdges=!0,e.edge=r,e;return e.hasEdges=n,e.edge=null,e}getBound(e,t){let n=this.bal.vdir===1?1/0:-1/0,r=this.scratchPostprocessable;r===null?(r=new ba(e,t),this.scratchPostprocessable=r):(r.free=e,r.isRoot=t,r.hasEdges=!1,r.edge=null);let i=this.pickEdge(r);if(i.edge===null&&i.hasEdges){let r=new ba(e,t);return r.hasEdges=i.hasEdges,this.postProcessablesQueue.push(r),n}if(i.edge!==null){let e,n=i.edge.getSource(),r=i.edge.getTarget();if(t){let t=this.bal.hdir===0?r:n,i=this.bal.hdir===0?n:r,a=this.bal.root[i.getNode().id];e=this.bal.y[a.id]+this.bal.innerShift[i.getNode().id]+i.getPosition().y+i.getAnchor().y-this.bal.innerShift[t.getNode().id]-t.getPosition().y-t.getAnchor().y}else{let t=this.bal.hdir===1?r:n,i=this.bal.hdir===1?n:r;e=this.bal.y[this.bal.root[i.getNode().id].id]+this.bal.innerShift[i.getNode().id]+i.getPosition().y+i.getAnchor().y-this.bal.innerShift[t.getNode().id]-t.getPosition().y-t.getAnchor().y}return this.bal.su[this.bal.root[n.getNode().id].id]=1,this.bal.su[this.bal.root[r.getNode().id].id]=1,e}return n}postProcess(){for(;this.postProcessablesQueue.length>0;){let e=this.postProcessablesQueue.shift(),t=this.pickEdge(e);if(t.edge===null)continue;let n=t.edge;(this.bal.od[this.bal.root[e.free.id].id]||!n.isInLayerEdge())&&(this.process(e)||this.postProcessablesStack.push(e))}for(;this.postProcessablesStack.length>0;)this.process(this.postProcessablesStack.pop())}process(e){let t=e.edge,n,r;t.getSource().getNode()===e.free?(n=t.getTarget(),r=t.getSource()):(n=t.getSource(),r=t.getTarget());let i=this.bal.calculateDelta(n,r);if(i>0&&i<_a.THRESHOLD){let e=this.bal.checkSpaceAbove(r.getNode(),i,this.ni);return this.bal.shiftBlock(r.getNode(),-e),e>0}if(i<0&&-i<_a.THRESHOLD){let e=this.bal.checkSpaceBelow(r.getNode(),-i,this.ni);return this.bal.shiftBlock(r.getNode(),e),e>0}return!1}},ba=class{free;isRoot;hasEdges=!1;edge=null;constructor(e,t){this.free=e,this.isRoot=t}},xa=class{classShift=null;node;outgoing=[];indegree=0},Sa=class{separation=0;target},Ca=class{layeredGraph;threshStrategy;ni;spacings;sinkNodes=/* @__PURE__ */ new Map;classNodePool=[];classEdgePool=[];constructor(e,t){this.layeredGraph=e,this.ni=t,this.spacings=e.getProperty(Rn),this.threshStrategy=e.getProperty(Fn)===`IMPROVE_STRAIGHTNESS`?new ya:new va}horizontalCompaction(e){for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes())e.sink[n.id]=n,e.shift[n.id]=e.vdir===1?-1/0:1/0;for(let e of this.sinkNodes.values()){for(let t of e.outgoing)this.classEdgePool.push(t);e.outgoing.length=0,this.classNodePool.push(e)}this.sinkNodes.clear();let t=this.layeredGraph.getLayers(),n=t.length,r=e.hdir===1,i=e.vdir===1;this.threshStrategy.init(e,this.ni),e.y.fill(NaN);for(let a=0;a<n;a++){let o=t[r?n-1-a:a].getNodes(),s=o.length;for(let t=0;t<s;t++){let n=o[i?s-1-t:t];e.root[n.id]===n&&this.placeBlock(n,e)}}this.placeClasses(e);for(let i=0;i<n;i++){let a=t[r?n-1-i:i];for(let t of a.getNodes())if(e.y[t.id]=e.y[e.root[t.id].id],t===e.root[t.id]){let n=e.shift[e.sink[t.id].id];(e.vdir===1&&n>-1/0||e.vdir===0&&n<1/0)&&(e.y[t.id]=e.y[t.id]+n)}}this.threshStrategy.postProcess()}placeBlock(e,t){if(!Number.isNaN(t.y[e.id]))return;let n=!0;t.y[e.id]=0;let r=e,i=t.vdir===0?-1/0:1/0;do{let a=this.ni.nodeIndex[r.id],o=r.getLayer().getNodes().length;if(t.vdir===0&&a>0||t.vdir===1&&a<o-1){let o;o=t.vdir===1?r.getLayer().getNodes()[a+1]:r.getLayer().getNodes()[a-1];let s=t.root[o.id];if(this.placeBlock(s,t),i=this.threshStrategy.calculateThreshold(i,e,r),t.sink[e.id]===e&&(t.sink[e.id]=t.sink[s.id]),t.sink[e.id]===t.sink[s.id]){let a=this.spacings.getVerticalSpacing(r,o);if(t.vdir===1){let c=t.y[e.id],l=t.y[s.id]+t.innerShift[o.id]-o.getMargin().top-a-r.getMargin().bottom-r.size.y-t.innerShift[r.id];n?(n=!1,t.y[e.id]=Math.min(l,i)):t.y[e.id]=Math.min(c,Math.min(l,i))}else{let c=t.y[e.id],l=t.y[s.id]+t.innerShift[o.id]+o.size.y+o.getMargin().bottom+a+r.getMargin().top-t.innerShift[r.id];n?(n=!1,t.y[e.id]=Math.max(l,i)):t.y[e.id]=Math.max(c,Math.max(l,i))}}else{let n=this.layeredGraph.getProperty(Zt),i=this.getOrCreateClassNode(t.sink[e.id],t),a=this.getOrCreateClassNode(t.sink[s.id],t);if(t.vdir===1){let c=t.y[e.id]+t.innerShift[r.id]+r.size.y+r.getMargin().bottom+n-(t.y[s.id]+t.innerShift[o.id]-o.getMargin().top);this.addClassEdge(i,a,c)}else{let c=t.y[e.id]+t.innerShift[r.id]-r.getMargin().top-t.y[s.id]-t.innerShift[o.id]-o.size.y-o.getMargin().bottom-n;this.addClassEdge(i,a,c)}}}else i=this.threshStrategy.calculateThreshold(i,e,r);r=t.align[r.id]}while(r!==e);this.threshStrategy.finishBlock(e)}placeClasses(e){let t=[];for(let e of this.sinkNodes.values())e.indegree===0&&t.push(e);for(;t.length>0;){let n=t.shift();n.classShift===null&&(n.classShift=0);for(let r of n.outgoing)r.target.classShift===null?r.target.classShift=n.classShift+r.separation:e.vdir===0?r.target.classShift=Math.min(r.target.classShift,n.classShift+r.separation):r.target.classShift=Math.max(r.target.classShift,n.classShift+r.separation),r.target.indegree--,r.target.indegree===0&&t.push(r.target)}for(let t of this.sinkNodes.values())e.shift[t.node.id]=t.classShift}addClassEdge(e,t,n){let r=this.classEdgePool.pop()??new Sa;r.target=t,r.separation=n,t.indegree++,e.outgoing.push(r)}getOrCreateClassNode(e,t){let n=this.sinkNodes.get(e);return n===void 0&&(n=this.classNodePool.pop()??new xa,n.classShift=null,n.indegree=0,n.outgoing.length=0,n.node=e,this.sinkNodes.set(n.node,n)),n}},wa=class e{lGraph;markedEdges=/* @__PURE__ */ new Set;ni;produceBalancedLayout=!1;static MIN_LAYERS_FOR_CONFLICTS=3;process(e){this.lGraph=e,this.ni=pa.buildFor(e);let t=e.getProperty(qn),n=e.getProperty(gt);this.produceBalancedLayout=t===`NONE`&&!n||t===`BALANCED`,this.markConflicts(e);let r=this.ni.nodeCount,i=[];switch(t){case`LEFTDOWN`:i.push([0,1]);break;case`LEFTUP`:i.push([1,1]);break;case`RIGHTDOWN`:i.push([0,0]);break;case`RIGHTUP`:i.push([1,0]);break;default:i.push([0,0],[1,0],[0,1],[1,1])}let a=i.length,o=new Float64Array(a*r),s=new Float64Array(a*r),c=Array(a),l=new ma(e,r,null,null),u=new ga(e,this.ni),d=new Ca(e,this.ni),f=[];for(let e=0;e<a;e++)l.vdir=i[e][0],l.hdir=i[e][1],l.y=o.subarray(e*r,(e+1)*r),l.innerShift=s.subarray(e*r,(e+1)*r),l.su.fill(0),l.od.fill(1),u.verticalAlignment(l,this.markedEdges),u.insideBlockShift(l),d.horizontalCompaction(l),c[e]=l.layoutSize(),f.push({vdir:i[e][0],hdir:i[e][1],y:l.y,innerShift:l.innerShift,size:c[e]});let p=null,m=null,h=0,g=null;if(p===null&&this.produceBalancedLayout&&(g=this.createBalancedLayout(this.lGraph,r,f),this.checkOrderConstraint(e,g.y,g.innerShift)&&(p=g.y,m=g.innerShift,h=0)),p===null)for(let t of f)this.checkOrderConstraint(e,t.y,t.innerShift)&&(p===null||h>t.size+1e-6)&&(p=t.y,m=t.innerShift,h=t.size,`${t.vdir}${t.hdir}`);p===null&&(p=f[0].y,m=f[0].innerShift,h=f[0].size,`${f[0].vdir}${f[0].hdir}`);for(let t of e.getLayers())for(let e of t.getNodes())e.position.y=p[e.id]+m[e.id];l.cleanup(),this.ni.cleanup(),this.markedEdges.clear()}markConflicts(t){let n=t.getLayers().length;if(n<e.MIN_LAYERS_FOR_CONFLICTS)return;let r=t.getLayers().map(e=>e.getNodes().length);for(let e=1;e<n-1;e++){let n=t.getLayers()[e+1],i=0,a=0;for(let t=0;t<r[e+1];t++){let o=n.getNodes()[t],s=this.incidentToInnerSegment(o,e+1,e);if(t===r[e+1]-1||s){let c=r[e]-1;for(s&&(c=this.ni.nodeIndex[this.ni.leftNeighbors[o.id][0].first.id]);a<=t;){let t=n.getNodes()[a];if(!this.incidentToInnerSegment(t,e+1,e))for(let e of this.ni.leftNeighbors[t.id]){let t=this.ni.nodeIndex[e.first.id];(t<i||t>c)&&this.markedEdges.add(e.second.id)}a++}i=c}}}}incidentToInnerSegment(e,t,n){if(e.getType()===`LONG_EDGE`){for(let r of e.getPorts())for(let i of r.getIncomingEdges())if(i.getSource().getNode().getType()===`LONG_EDGE`&&this.ni.layerIndex[i.getSource().getNode().getLayer().getIndex()]===n&&this.ni.layerIndex[e.getLayer().getIndex()]===t)return!0}return!1}createBalancedLayout(e,t,n){let r=n.length,i=new ma(e,t,null,null),a=Array(r),o=Array(r),s=Array(r),c=0;for(let e=0;e<r;e++)o[e]=2**53-1,s[e]=-(2**53-1);for(let t=0;t<r;t++){let r=n[t];a[t]=r.size,a[c]>a[t]&&(c=t);for(let n of e.getLayers())for(let e of n.getNodes()){let n=r.y[e.id]+r.innerShift[e.id];o[t]=Math.min(o[t],n),s[t]=Math.max(s[t],n+e.size.y)}}let l=Array(r);for(let e=0;e<r;e++)n[e].vdir===0?l[e]=o[c]-o[e]:l[e]=s[c]-s[e];let u=Array(r);for(let t of e.getLayers())for(let e of t.getNodes()){for(let t=0;t<r;t++){let r=n[t];u[t]=r.y[e.id]+r.innerShift[e.id]+l[t]}u.sort((e,t)=>e-t),i.y[e.id]=(u[1]+u[2])/2,i.innerShift[e.id]=0}return i}checkOrderConstraint(e,t,n){let r=!0;for(let i of e.getLayers()){let e=-1/0;for(let a of i.getNodes()){let i=t[a.id]+n[a.id]-a.getMargin().top,o=t[a.id]+n[a.id]+a.size.y+a.getMargin().bottom;if(i>e&&o>e)e=o;else{r=!1;break}}if(!r)break}return r}};function Ta(e){let t=e.getProperty(Rn),n=0;for(let r of e.getLayers()){let e=r.getSize();e.y=0;let i=null;for(let n of r.getNodes())i!==null&&(e.y+=t.getVerticalSpacing(n,i)),e.y+=n.getMargin().top+n.getSize().y+n.getMargin().bottom,i=n;n=Math.max(n,e.y)}for(let r of e.getLayers()){let e=r.getSize(),i=(n-e.y)/2,a=null;for(let e of r.getNodes())a!==null&&(i+=t.getVerticalSpacing(e,a)),i+=e.getMargin().top,e.getPosition().y=i,i+=e.getSize().y+e.getMargin().bottom,a=e}}function Ea(e){let t=e.getProperty(Rn);for(let n of e.getLayers())Da(n,t)}function Da(e,t){let n=-1/0,r=`NORMAL`;for(let i of e.getNodes()){let e=i.getType();if(e!==`NORMAL`){let a=i.getProperty(St);a==null?(n=Math.max(n,0),i.getPosition().y=n+t.getVerticalSpacingByType(e,r)):i.getPosition().y=a}let a=t.getVerticalSpacingByType(e,r);i.getPosition().y<n+a+i.getMargin().top&&(i.getPosition().y=n+a+i.getMargin().top),n=i.getPosition().y+i.getSize().y+i.getMargin().bottom,r=e}}const Oa=Object.values(ce);var ka=class{graph;nodeTypeSpacingOptionsHorizontal;nodeTypeSpacingOptionsVertical;cachedDefaults=/* @__PURE__ */ new Map;constructor(e){this.graph=e,this.nodeTypeSpacingOptionsHorizontal=this.emptyTable(),this.nodeTypeSpacingOptionsVertical=this.emptyTable(),this.precalculateNodeTypeSpacings()}emptyTable(){let e={};for(let t of Oa)e[t]={};return e}diagV(e,t){this.nodeTypeSpacingOptionsVertical[e][e]=t}diagVH(e,t,n){this.nodeTypeSpacingOptionsVertical[e][e]=t,this.nodeTypeSpacingOptionsHorizontal[e][e]=n}pairV(e,t,n){this.nodeTypeSpacingOptionsVertical[e][t]=n,this.nodeTypeSpacingOptionsVertical[t][e]=n}pairVH(e,t,n,r){this.nodeTypeSpacingOptionsVertical[e][t]=n,this.nodeTypeSpacingOptionsVertical[t][e]=n,this.nodeTypeSpacingOptionsHorizontal[e][t]=r,this.nodeTypeSpacingOptionsHorizontal[t][e]=r}precalculateNodeTypeSpacings(){let{NORMAL:e,LONG_EDGE:t,NORTH_SOUTH_PORT:r,EXTERNAL_PORT:i,LABEL:a,BREAKING_POINT:o}=ce;this.diagVH(e,Zt,kn),this.pairVH(e,t,an,_n),this.pairV(e,r,an),this.pairV(e,i,an),this.pairVH(e,a,Zt,kn),this.diagVH(t,n,wt),this.pairV(t,r,n),this.pairV(t,i,n),this.pairVH(t,a,an,_n),this.diagV(r,n),this.pairV(r,i,n),this.pairV(r,a,cn),this.diagV(i,dn),this.pairVH(i,a,vt,bn),this.diagVH(a,n,n),this.diagVH(o,n,wt),this.pairVH(o,e,an,_n),this.pairVH(o,a,an,_n),this.pairVH(o,t,an,_n)}getVerticalSpacing(e,t){return this.getLocalSpacing(e,t,this.nodeTypeSpacingOptionsVertical)}getHorizontalSpacing(e,t){return this.getLocalSpacing(e,t,this.nodeTypeSpacingOptionsHorizontal)}getVerticalSpacingByType(e,t){return this.getTypeSpacing(e,t,this.nodeTypeSpacingOptionsVertical)}getHorizontalSpacingByType(e,t){return this.getTypeSpacing(e,t,this.nodeTypeSpacingOptionsHorizontal)}getLocalSpacing(e,t,n){let r=e.getType(),i=t.getType(),a=n[r]?.[i],o=this.getIndividualOrDefault(e,a),s=this.getIndividualOrDefault(t,a);return Math.max(o,s)}getTypeSpacing(e,t,n){let r=n[e]?.[t];return r===void 0?this.graph.getProperty(Zt):this.graph.getProperty(r)}getIndividualOrDefault(e,t){if(t===void 0)return this.graph.getProperty(Zt);if(!e.hasProperty(Bt)){let e=this.cachedDefaults.get(t);return e===void 0&&(e=this.graph.getProperty(t),this.cachedDefaults.set(t,e)),e}return Aa(e,t)}};function Aa(e,t){let n=null;if(e.hasProperty(Bt)){let r=e.getProperty(Bt);r&&r.hasProperty(t)&&(n=r.getProperty(t))}return n===null&&(n=e.getGraph()?.getProperty(t)??t.getDefault()),n}const ja=.1,Ma=1e4;function Na(e){return e.hasProperty(Un)?e.getProperty(Un):e.getGraph().getProperty(Re)}function Pa(e){if(e.getType()!==`NORMAL`||e.getPorts().length<=1)return!1;let t=e.getProperty(`org.eclipse.elk.portConstraints`);if(D.isPosFixed(t))return!1;let n=Na(e);if(n===`NONE`)return!1;if(!Fa(n)){let t=Aa(e,dn),n=e.getProperty(Ot),r=n.top,i=n.bottom,a=e.getPortSideView(`WEST`);if(r+i+(a.length-1)*t>e.getSize().y)return!1;let o=e.getPortSideView(`EAST`);if(r+i+(o.length-1)*t>e.getSize().y)return!1}return!0}function Fa(e){return e===`NODE_SIZE_WHERE_SPACE_PERMITS`||e===`NODE_SIZE`}var Ia=class{origin;head;tail;isFlexible;constructor(e,t,n,r){this.origin=e,this.isFlexible=t,this.head=n,this.tail=r}},La=class{origin;left;right;constructor(e,t,n){this.origin=e,this.left=t,this.right=n}isStraight(){return this.notStraightBy()===0}notStraightBy(){return this.left.target.layer-this.left.delta-(this.right.target.layer-this.right.delta)}},Ra=class extends Array{containsLongEdgeDummy(){return this.length===0?!1:this[0].getSource().getNode().getType()===`LONG_EDGE`||this.some(e=>e.getTarget().getNode().getType()===`LONG_EDGE`)}containsFlexibleNode(e){return this.length===0?!1:e(Na(this[0].getSource().getNode()))?!0:this.some(t=>e(Na(t.getTarget().getNode())))}orderTwoPath(){if(this.length!==2)throw Error(`Order only allowed for two paths.`);let e=this[0],t=this[1];e.getTarget().getNode()!==t.getSource().getNode()&&(this.length=0,this.push(t,e))}isTwoPathCenterNodeFlexible(){return Pa(this[0].getTarget().getNode())}},za=class e{lGraph;spacings;nGraph;nodeReps=[];edgeReps=[];portMap=/* @__PURE__ */ new Map;nodeCount=0;edgeCount=0;nodeState=[];crossing=[];twoPaths=[];flexibleWhereSpacePermitsEdges=[];process(e){this.lGraph=e,this.spacings=e.getProperty(Rn),this.prepare(),this.buildInitialAuxiliaryGraph(),this.insertNorthSouthAuxiliaryEdges(),this.insertInLayerEdgeAuxiliaryEdges(),this.lGraph.getProperty(gt)&&this.preferStraightEdges(),this.nGraph.makeConnected();let t=e.getProperty(en)*this.nGraph.nodes.length;if(Sr.forGraph(this.nGraph).withIterationLimit(t).withBalancing(!1).execute(),this.flexibleWhereSpacePermitsEdges.length>0){this.insertFlexibleWhereSpaceAuxiliaryEdges();for(let e of this.flexibleWhereSpacePermitsEdges)e.weight=1;Sr.forGraph(this.nGraph).withIterationLimit(t).withBalancing(!1).execute()}this.lGraph.getProperty(gt)&&this.postProcessTwoPaths(),this.applyPositions(),this.cleanup()}prepare(){this.nGraph=new xr;let e=0,t=0;for(let n of this.lGraph.getLayers())for(let r of n.getNodes()){r.id=e++;for(let e of r.getOutgoingEdges())e.id=t++;let n=Pa(r);for(let e of r.getPorts()){if(n){let t=e.getAnchor().y;if(t!==Math.floor(t)){let n=t-Math.round(t);e.getAnchor().y-=n}}let t=e.getPosition().y+e.getAnchor().y;if(t!==Math.floor(t)){let n=t-Math.round(t);e.getPosition().y-=n}}}this.nodeReps=Array(e),this.edgeReps=Array(t),this.nodeCount=e,this.edgeCount=t,this.flexibleWhereSpacePermitsEdges=[]}cleanup(){this.nodeReps=[],this.edgeReps=[],this.portMap.clear(),this.flexibleWhereSpacePermitsEdges=[]}buildInitialAuxiliaryGraph(){for(let e of this.lGraph.getLayers())this.transformLayer(e);this.transformEdges()}transformLayer(e){let t=null;for(let n of e.getNodes()){let e=Pa(n)?this.transformFixedOrderNode(n):this.transformFixedPosNode(n);if(this.nodeReps[n.id]=e,t!==null){let r=t.origin.getMargin().bottom+this.spacings.getVerticalSpacing(t.origin,n)+n.getMargin().top;t.isFlexible||(r+=t.origin.getSize().y),G().delta(Math.ceil(r)).weight(0).source(t.tail).target(e.head).create()}t=e}}transformFixedPosNode(e){let t=vr().origin(e).type(`non-flexible`).create(this.nGraph);for(let n of e.getPorts())We.includes(n.getSide())&&this.portMap.set(n,t);return new Ia(e,!1,t,t)}transformFixedOrderNode(e){let t=vr().origin(e).type(`flexible-head`).create(this.nGraph),n=vr().origin(e).type(`flexible-tail`).create(this.nGraph),r=new Ia(e,!0,t,n),i=e.getSize().y,a=Na(e),o=a===`NODE_SIZE`?1:Ma,s=G().weight(o).delta(Math.ceil(i)).source(t).target(n).create();return a===`NODE_SIZE_WHERE_SPACE_PERMITS`&&this.flexibleWhereSpacePermitsEdges.push(s),this.transformPorts([...e.getPortSideView(`WEST`)].reverse(),r),this.transformPorts(e.getPortSideView(`EAST`),r),r}transformPorts(e,t){if(e.length===0)return;let n=Aa(t.origin,dn),r=Aa(t.origin,Ot),i=t.head,a=null;for(let t of e){let e=0;e=a===null?r.top:n+a.getSize().y;let o=vr().origin(t).type(`port`).create(this.nGraph);this.portMap.set(t,o),G().weight(0).delta(Math.ceil(e)).source(i).target(o).create(),a=t,i=o}G().weight(0).delta(Math.ceil(r.bottom+a.getSize().y)).source(i).target(t.tail).create()}transformEdges(){for(let e of this.lGraph.getLayers())for(let t of e.getNodes())for(let e of t.getOutgoingEdges())this.isHandledEdge(e)&&this.transformEdge(e)}transformEdge(e){let t=vr().type(`edge`).create(this.nGraph),n=this.nodeReps[e.getSource().getNode().id],r=this.nodeReps[e.getTarget().getNode().id],i=e.getSource(),a=e.getTarget(),o=i.getAnchor().y,s=a.getAnchor().y;n.isFlexible||(o+=i.getPosition().y),r.isFlexible||(s+=a.getPosition().y);let c=Math.max(0,o-s),l=Math.max(0,s-o),u=this.getEdgeWeight(e),d=G().origin(e).weight(u).delta(l).source(t).target(this.portMap.get(i)).create(),f=G().origin(e).weight(u).delta(c).source(t).target(this.portMap.get(a)).create();this.edgeReps[e.id]=new La(e,d,f)}insertInLayerEdgeAuxiliaryEdges(){for(let e of this.lGraph.getLayers())for(let t of e.getNodes())if(t.getType()===`NORMAL`)for(let e of t.getConnectedEdges()){if(!e.isInLayerEdge())continue;let t=e.getSource().getNode().getType()===`NORMAL`?e.getSource():e.getTarget(),n=e.getOther(t).getNode(),r=this.portMap.get(t),i=this.nodeReps[n.id].head,a=t.getNode().getIndex()<n.getIndex()?r:i,o=t.getNode().getIndex()<n.getIndex()?i:r;G().delta(0).weight(4).source(a).target(o).create()}}insertNorthSouthAuxiliaryEdges(){for(let e of this.lGraph.getLayers())for(let t of e.getNodes()){for(let e of t.getPortSideView(`SOUTH`)){let n=e.getProperty(M),r=n==null?void 0:this.nodeReps[n.id];n!=null&&r!==void 0&&this.nodeReps[t.id]!==void 0&&G().delta(0).weight(ja).source(this.nodeReps[t.id].tail).target(r.head).create()}for(let e of t.getPortSideView(`NORTH`)){let n=e.getProperty(M),r=n==null?void 0:this.nodeReps[n.id];n!=null&&r!==void 0&&this.nodeReps[t.id]!==void 0&&G().delta(0).weight(ja).source(r.tail).target(this.nodeReps[t.id].head).create()}}}static length(e){return Math.abs(e.source.layer-e.target.layer)-e.delta}getEdgeWeightByType(e,t){return e===`NORMAL`&&t===`NORMAL`?4:e===`NORMAL`||t===`NORMAL`?8:32}preferStraightEdges(){this.nodeState=Array(this.nodeCount),this.twoPaths=[];for(let t of this.lGraph.getLayers())for(let n of t.getNodes())this.nodeState[n.id]=e.getNodeState(n);this.markEdgeCrossings();let t=this.identifyPaths();for(let e of t){if(e.length<=1)continue;if(e.length===2){e.orderTwoPath(),e.isTwoPathCenterNodeFlexible()||this.twoPaths.push(e);continue}if(e.containsLongEdgeDummy()||e.containsFlexibleNode(e=>Fa(e)))continue;let t=null;for(let n=0;n<e.length;n++){let r=e[n],i=this.edgeReps[r.id],a=(t===null||n===e.length-1?this.getEdgeWeightByType(`NORMAL`,`LONG_EDGE`):this.getEdgeWeightByType(`LONG_EDGE`,`LONG_EDGE`))*2,o=i.left.weight;i.left.weight=Math.max(o,o+(a-o));let s=i.right.weight;i.right.weight=Math.max(s,s+(a-s)),t=r}}}postProcessTwoPaths(){let e=[...this.twoPaths],t=[];for(;e.length>0;){let n=e.shift();this.improveTwoPath(n,!0)&&t.push(n)}for(;t.length>0;)this.improveTwoPath(t.pop(),!1)}improveTwoPath(t,n){let r=this.edgeReps[t[0].id],i=this.edgeReps[t[1].id];if(r.isStraight()&&i.isStraight())return!1;let a=r.right.target.origin;if(a===null||typeof a.getPorts!=`function`)return!1;let o=a,s=this.nodeReps[o.id],c=o.getIndex(),l=1/0;if(c>0){let e=o.getLayer().getNodes()[c-1],t=this.nodeReps[e.id],n=Math.ceil(this.spacings.getVerticalSpacing(e,o));l=s.head.layer-o.getMargin().top-(t.head.layer+e.getSize().y+e.getMargin().bottom)-n}let u=1/0;if(c<o.getLayer().getNodes().length-1){let e=o.getLayer().getNodes()[c+1],t=this.nodeReps[e.id],n=Math.ceil(this.spacings.getVerticalSpacing(e,o));u=t.head.layer-e.getMargin().top-(s.head.layer+o.getSize().y+o.getMargin().bottom)-n}if(n&&Math.abs(l-u)<=1e-5)return!0;let d=+e.length(r.left),f=-e.length(r.right),p=-e.length(i.left),m=+e.length(i.right),h=r.notStraightBy()>0&&i.notStraightBy()<0,g=r.notStraightBy()<0&&i.notStraightBy()>0,_=r.left.target.layer+r.right.delta<i.right.target.layer+i.left.delta,v=r.left.target.layer+r.right.delta>i.right.target.layer+i.left.delta,y=0;return!h&&!g&&(v?l+p>0?y=p:u-d>0&&(y=d):_&&(l+f>0?y=f:u-m>0&&(y=m))),s.head.layer+=y,s.isFlexible&&(s.tail.layer+=y),!1}identifyPaths(){let e=[];for(let t of this.lGraph.getLayers())for(let n of t.getNodes())if(this.nodeState[n.id]===2)for(let t of n.getConnectedEdges()){if(!this.isHandledEdge(t))continue;let r=this.follow(t,n,new Ra);r.length>1&&e.push(r)}return e}follow(e,t,n){let r=e.getOtherNode(t);if(n.push(e),this.nodeState[r.id]===-1||this.nodeState[r.id]===2||this.crossing[e.id])return n;this.nodeState[r.id]=-1;for(let t of r.getConnectedEdges())if(this.isHandledEdge(t)&&t!==e)return this.follow(t,r,n);return n}static getNodeState(e){let t=0,n=0;for(let r of e.getPorts()){for(let e of r.getIncomingEdges())e.isSelfLoop()||t++;for(let e of r.getOutgoingEdges())e.isSelfLoop()||n++;if(t>1||n>1)return 2}return t+n===1?2:0}markEdgeCrossings(){this.crossing=Array(this.edgeCount).fill(!1);let e=this.lGraph.getLayers();for(let t=0;t+1<e.length;t++)this.markCrossingEdges(e[t],e[t+1])}markCrossingEdges(e,t){let n=[];for(let r of e.getNodes())for(let e of r.getPortSideView(`EAST`))for(let r of e.getOutgoingEdges())r.isInLayerEdge()||r.isSelfLoop()||r.getTarget().getNode().getLayer()!==t||n.push(r);for(let r=t.getNodes().length-1;r>=0;r--){let i=t.getNodes()[r];for(let t of i.getPortSideView(`WEST`))for(let r of t.getIncomingEdges())if(!(r.isInLayerEdge()||r.isSelfLoop()||r.getSource().getNode().getLayer()!==e)&&n.length>0){let e=n.length-1,t=n[e];for(;t!==r&&e>0;)this.crossing[t.id]=!0,this.crossing[r.id]=!0,e--,t=n[e];t===r&&e>0&&n.splice(e,1)}}}insertFlexibleWhereSpaceAuxiliaryEdges(){let e=1/0,t=-1/0;for(let n of this.nGraph.nodes)n.layer<e&&(e=n.layer),n.layer>t&&(t=n.layer);let n=t-e,r=vr().create(this.nGraph),i=vr().create(this.nGraph);G().weight(Ma*2).delta(n).source(r).target(i).create();for(let t of this.nodeReps)t!==void 0&&t.origin.getType()===`NORMAL`&&(t.origin.getPorts().length<=1||(G().weight(0).delta(t.tail.layer-e).source(r).target(t.tail).create(),G().weight(0).delta(n-t.head.layer).source(t.head).target(i).create()))}applyPositions(){for(let e of this.lGraph.getLayers())for(let t of e.getNodes()){let e=this.nodeReps[t.id],n=e.head.layer,r=e.tail.layer;t.getPosition().y=n;let i=r-n-t.getSize().y,a=Pa(t),o=Na(t);if(a&&Fa(o)&&(t.getSize().y+=i),a&&(o===`PORT_POSITION`||Fa(o))){for(let e of t.getPorts())if(We.includes(e.getSide())){let t=this.portMap.get(e);e.getPosition().y=t.layer-n}}}}getEdgeWeight(e){let t=Math.max(1,e.getProperty(T)),n=e.getSource().getNode().getType(),r=e.getTarget().getNode().getType(),i;return i=n===`NORMAL`&&r===`NORMAL`?4:n===`NORMAL`||r===`NORMAL`?8:32,t*i}isHandledEdge(e){return!e.isSelfLoop()&&!e.isInLayerEdge()}},Ba=class{process(e){let t=1/0,n=-1/0,r=!1;for(let i of e.getLayers()){let a=i.getSize();if(a.x=0,a.y=0,i.getNodes().length===0)continue;r=!0;for(let e of i.getNodes())a.x=Math.max(a.x,e.size.x+e.getMargin().left+e.getMargin().right);let o=i.getNodes()[0],s=e.getProperty(Ot),c=o.getPosition().y-o.getMargin().top;o.getType()===`EXTERNAL_PORT`&&(c-=s.top);let l=i.getNodes()[i.getNodes().length-1],u=l.getPosition().y+l.size.y+l.getMargin().bottom;l.getType()===`EXTERNAL_PORT`&&(u+=s.bottom),a.y=u-c,t=Math.min(t,c),n=Math.max(n,u)}r||(t=0,n=0),e.getSize().y=n-t,e.getOffset().y-=t}};function Va(e,t){let n=0,r=0;for(let t of e.getNodes())n=Math.max(n,t.getMargin().left),r=Math.max(r,t.getMargin().right);for(let i of e.getNodes()){let a=i.getProperty(z),o;if(a===`LEFT`)o=0;else if(a===`RIGHT`)o=1;else if(a===`CENTER`)o=.5;else{let e=0,t=0;for(let n of i.getPorts())n.getIncomingEdges().length>0&&e++,n.getOutgoingEdges().length>0&&t++;o=e+t===0?.5:t/(e+t)}let s=e.getSize(),c=i.size.x,l=(s.x-c)*o;o>.5?l-=r*2*(o-.5):o<.5&&(l+=n*2*(.5-o));let u=i.getMargin().left;l<u&&(l=u);let d=i.getMargin().right;l>s.x-d-c&&(l=s.x-d-c),i.position.x=t+l}}var K=class e{static CRITICAL_DEPENDENCY_WEIGHT=1;type;source=null;target=null;weight;constructor(e,t,n,r){this.type=e,this.weight=r,this.setSource(t),this.setTarget(n)}static createAndAddRegular(t,n,r){return new e(0,t,n,r)}static createAndAddCritical(t,n){return new e(1,t,n,e.CRITICAL_DEPENDENCY_WEIGHT)}remove(){this.setSource(null),this.setTarget(null)}reverse(){let e=this.source,t=this.target;this.setSource(t),this.setTarget(e)}getType(){return this.type}getSource(){return this.source}getTarget(){return this.target}getWeight(){return this.weight}setSource(e){if(this.source!==null){let e=this.source.getOutgoingSegmentDependencies(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.source=e,this.source!==null&&this.source.getOutgoingSegmentDependencies().push(this)}setTarget(e){if(this.target!==null){let e=this.target.getIncomingSegmentDependencies(),t=e.indexOf(this);t!==-1&&e.splice(t,1)}this.target=e,this.target!==null&&this.target.getIncomingSegmentDependencies().push(this)}},Ha=class{static detectCycles(e,t,n){let r=[],i=[],a=[];Ua(e,i,a,t),Wa(e,i,a,t,n);for(let n of e)for(let e of n.getOutgoingSegmentDependencies())(!t||e.getType()===1)&&n.mark>e.getTarget().mark&&r.push(e);return r}};function Ua(e,t,n,r){let i=-1;for(let a of e){a.mark=i--;let e=0;for(let t of a.getIncomingSegmentDependencies())t.getType()===1&&(e+=t.getWeight());let o=0;for(let e of a.getOutgoingSegmentDependencies())e.getType()===1&&(o+=e.getWeight());let s=e,c=o;if(!r){s=0;for(let e of a.getIncomingSegmentDependencies())s+=e.getWeight();c=0;for(let e of a.getOutgoingSegmentDependencies())c+=e.getWeight()}a.setInWeight(s),a.setCriticalInWeight(e),a.setOutWeight(c),a.setCriticalOutWeight(o),c===0?n.push(a):s===0&&t.push(a)}}function Wa(e,t,n,r,i){let a=[],o=[],s=e.length,c=s-1,l=s+1;for(;;){let s=0;for(;s<n.length;){let e=n[s++];e.mark=c--,Ga(e,t,n,r)}n.length=0;let u=0;for(;u<t.length;){let e=t[u++];e.mark=l++,Ga(e,t,n,r)}t.length=0,a.length=0;for(let t=e.length-1;t>=0;t--){let n=e[t];n.mark<0&&a.push(n)}if(a.length===0)break;let d=-(2**53-1);o.length=0;for(let e of a){if(!r&&e.getCriticalOutWeight()>0&&e.getCriticalInWeight()<=0){o.length=0,o.push(e);break}let t=e.getOutWeight()-e.getInWeight();t>=d&&(t>d&&(o.length=0,d=t),o.push(e))}if(o.length>0){let e=o[i.nextInt(o.length)];e.mark=l++,Ga(e,t,n,r)}}let u=e.length+1;for(let t of e)t.mark<s&&(t.mark+=u)}function Ga(e,t,n,r){for(let n of e.getOutgoingSegmentDependencies())if(!r||n.getType()===1){let e=n.getTarget();e.mark<0&&n.getWeight()>0&&(e.setInWeight(e.getInWeight()-n.getWeight()),n.getType()===1&&e.setCriticalInWeight(e.getCriticalInWeight()-n.getWeight()),e.getInWeight()<=0&&e.getOutWeight()>0&&t.push(e))}for(let t of e.getIncomingSegmentDependencies())if(!r||t.getType()===1){let e=t.getSource();e.mark<0&&t.getWeight()>0&&(e.setOutWeight(e.getOutWeight()-t.getWeight()),t.getType()===1&&e.setCriticalOutWeight(e.getCriticalOutWeight()-t.getWeight()),e.getOutWeight()<=0&&e.getInWeight()>0&&n.push(e))}}const Ka=`EAST`;function qa(e){return e.getNode().position.y+e.getPosition().y+e.getAnchor().y}var Ja=class e{mark=0;positionFn;srcSide;splitPartner=null;splitBy=null;constructor(e=qa,t=Ka){this.positionFn=e,this.srcSide=t}routingSlot=0;ports=[];startPosition=NaN;endPosition=NaN;incomingConnectionCoordinates=[];outgoingConnectionCoordinates=[];incomingSegmentDependencies=[];outgoingSegmentDependencies=[];inWeight=0;outWeight=0;criticalInWeight=0;criticalOutWeight=0;addPortPositions(e,t,n=!0){t.set(e,this),this.ports.push(e);let r=this.positionFn(e);e.getSide()===this.srcSide?Ya(this.incomingConnectionCoordinates,r):Ya(this.outgoingConnectionCoordinates,r);let i=e.getIncomingEdges?.();if(i!==void 0){for(let n of i){let r=n.getSource()===e?n.getTarget():n.getSource();t.has(r)||this.addPortPositions(r,t,!1)}for(let n of e.getOutgoingEdges()){let r=n.getSource()===e?n.getTarget():n.getSource();t.has(r)||this.addPortPositions(r,t,!1)}}else for(let n of e.getConnectedPorts())t.has(n)||this.addPortPositions(n,t,!1);n&&this.recomputeExtent()}getPorts(){return this.ports}getSplitPartner(){return this.splitPartner}setSplitPartner(e){this.splitPartner=e}getSplitBy(){return this.splitBy}setSplitBy(e){this.splitBy=e}isDummy(){return this.splitPartner!==null&&this.splitBy===null}getLength(){return this.endPosition-this.startPosition}representsHyperedge(){return this.ports.length>2}getRoutingSlot(){return this.routingSlot}setRoutingSlot(e){this.routingSlot=e}getStartCoordinate(){return this.startPosition}getEndCoordinate(){return this.endPosition}getIncomingConnectionCoordinates(){return this.incomingConnectionCoordinates}getOutgoingConnectionCoordinates(){return this.outgoingConnectionCoordinates}getIncomingSegmentDependencies(){return this.incomingSegmentDependencies}getOutgoingSegmentDependencies(){return this.outgoingSegmentDependencies}getInWeight(){return this.inWeight}setInWeight(e){this.inWeight=e}getOutWeight(){return this.outWeight}setOutWeight(e){this.outWeight=e}getCriticalInWeight(){return this.criticalInWeight}setCriticalInWeight(e){this.criticalInWeight=e}getCriticalOutWeight(){return this.criticalOutWeight}setCriticalOutWeight(e){this.criticalOutWeight=e}splitAt(t){for(this.splitPartner=new e(this.positionFn,this.srcSide),this.splitPartner.setSplitPartner(this),this.splitPartner.outgoingConnectionCoordinates.push(...this.outgoingConnectionCoordinates),this.outgoingConnectionCoordinates.length=0,this.outgoingConnectionCoordinates.push(t),this.splitPartner.incomingConnectionCoordinates.push(t),this.recomputeExtent(),this.splitPartner.recomputeExtent();this.incomingSegmentDependencies.length>0;)this.incomingSegmentDependencies[0].remove();for(;this.outgoingSegmentDependencies.length>0;)this.outgoingSegmentDependencies[0].remove();return this.splitPartner}simulateSplit(){let t=new e(this.positionFn,this.srcSide),n=new e(this.positionFn,this.srcSide);return t.splitBy=this.splitBy,t.splitPartner=n,n.splitPartner=t,t.incomingConnectionCoordinates.push(...this.incomingConnectionCoordinates),t.recomputeExtent(),n.outgoingConnectionCoordinates.push(...this.outgoingConnectionCoordinates),n.recomputeExtent(),[t,n]}recomputeExtent(){this.startPosition=NaN,this.endPosition=NaN,this.recomputeExtentList(this.incomingConnectionCoordinates),this.recomputeExtentList(this.outgoingConnectionCoordinates)}recomputeExtentList(e){e.length!==0&&(this.startPosition=Number.isNaN(this.startPosition)?e[0]:Math.min(this.startPosition,e[0]),this.endPosition=Number.isNaN(this.endPosition)?e[e.length-1]:Math.max(this.endPosition,e[e.length-1]))}};function Ya(e,t){let n=0,r=e.length;for(;n<r;){let i=n+r>>1,a=e[i];if(a===t)return;a>t?r=i:n=i+1}e.splice(n,0,t)}var Xa=class{startPosition;endPosition;size;constructor(e,t){this.startPosition=e,this.endPosition=t,this.size=t-e}},Za=class{dependencies=0;crossings=0};function Qa(e,t){let n=[];for(let t of e)n.push(...t.getIncomingConnectionCoordinates(),...t.getOutgoingConnectionCoordinates());n.sort((e,t)=>e-t);let r=[];for(let e=1;e<n.length;e++)n[e]-n[e-1]>=2*t&&r.push(new Xa(n[e-1]+t,n[e]-t));return r}function $a(e){let t=/* @__PURE__ */ new Set;for(let n of e){let e=n.getSource(),r=n.getTarget();if(e===null||r===null||t.has(e)||t.has(r))continue;let i=e,a=r;e.representsHyperedge()&&!r.representsHyperedge()&&(i=r,a=e),t.add(i),i.setSplitBy(a)}return t}function eo(e,t,n,r){let i=ro(e,n,r);t.push(e.splitAt(i)),to(e,t)}function to(e,t){let n=e.getSplitBy(),r=e.getSplitPartner();if(n!==null&&r!==null){K.createAndAddCritical(e,n),K.createAndAddCritical(n,r);for(let i of t)i!==n&&i!==e&&i!==r&&(no(i,e),no(i,r))}}function no(e,t){if(Math.abs(e.getStartCoordinate()-e.getEndCoordinate())<.001||Math.abs(t.getStartCoordinate()-t.getEndCoordinate())<.001)return;let n=xo(e.getOutgoingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate())+xo(t.getIncomingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate()),r=xo(t.getOutgoingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate())+xo(e.getIncomingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate());(n>0||r>0)&&(n<=r?K.createAndAddCritical(e,t):K.createAndAddCritical(t,e))}function ro(e,t,n){let r=-1,i=-1;for(let n=0;n<t.length;n++){let a=t[n];if(a.startPosition>e.getEndCoordinate())break;a.endPosition>=e.getStartCoordinate()&&(r<0&&(r=n),i=n)}let a=fo(e);if(r>=0){let o=io(e,t,r,i);a=po(t[o]),lo(t,o,n)}return a}function io(e,t,n,r){let i=n;if(n<r){let[a,o]=e.simulateSplit(),s=t[i],c=ao(e,a,o,s);for(let l=n+1;l<=r;l++){let n=t[l],r=ao(e,a,o,n);co(n,r,s,c)&&(s=n,c=r,i=l)}}return i}function ao(e,t,n,r){let i=po(r);t.getOutgoingConnectionCoordinates().length=0,t.getOutgoingConnectionCoordinates().push(i),n.getIncomingConnectionCoordinates().length=0,n.getIncomingConnectionCoordinates().push(i);let a=new Za;for(let r of e.getIncomingSegmentDependencies()){let e=r.getSource();e!==null&&(oo(a,t,e),oo(a,n,e))}for(let r of e.getOutgoingSegmentDependencies()){let e=r.getTarget();e!==null&&(oo(a,t,e),oo(a,n,e))}a.dependencies+=2;let o=e.getSplitBy();return o!==null&&(a.crossings+=so(t,o),a.crossings+=so(o,n)),a}function oo(e,t,n){let r=so(t,n),i=so(n,t);r===i?r>0&&(e.dependencies+=2,e.crossings+=r):(e.dependencies+=1,e.crossings+=Math.min(r,i))}function so(e,t){return xo(e.getOutgoingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate())+xo(t.getIncomingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate())}function co(e,t,n,r){return t.crossings<r.crossings||t.crossings===r.crossings&&(t.dependencies<r.dependencies||t.dependencies===r.dependencies&&e.size>n.size)}function lo(e,t,n){let r=e[t];if(e.splice(t,1),r.size/2>=n){let i=t,a=po(r),o=a-n;r.startPosition<=o&&e.splice(i++,0,new Xa(r.startPosition,o));let s=a+n;s<=r.endPosition&&e.splice(i,0,new Xa(s,r.endPosition))}}function uo(e,t){return(e+t)/2}function fo(e){return uo(e.getStartCoordinate(),e.getEndCoordinate())}function po(e){return uo(e.startPosition,e.endPosition)}function mo(e,t,n){if(e.length===0)return;let r=Qa(t,n),i=[...$a(e)].sort((e,t)=>e.getLength()-t.getLength());for(let e of i)eo(e,t,r,n)}const ho={sourceSide:`NORTH`,targetSide:`SOUTH`,positionFn:_o},go={sourceSide:`SOUTH`,targetSide:`NORTH`,positionFn:_o};function _o(e){return e.getNode().position.x+e.getPosition().x+e.getAnchor().x}const vo=.2;var yo=class{criticalConflictThreshold=0;edgeSpacing;conflictThreshold;constructor(e){this.edgeSpacing=e,this.conflictThreshold=.5*e}edgeSegmentsScratch=[];portToEdgeSegmentMapScratch=/* @__PURE__ */ new Map;incomingCoordsScratch=[];outgoingCoordsScratch=[];routeEdgesSlotCount(e,t,n){return this.routeEdgesInternal(e,t,n,NaN)}routeEdges(e,t,n,r){return this.routeEdgesInternal(e,t,r,n)}routeEdgesInternal(e,t,n,r){let i=this.edgeSegmentsScratch;i.length=0;let a=this.portToEdgeSegmentMapScratch;if(a.clear(),this.createHyperEdgeSegments(e,`EAST`,i,a),this.createHyperEdgeSegments(t,`WEST`,i,a),i.length===0)return 0;this.criticalConflictThreshold=vo*this.minimumHorizontalSegmentDistance(i);let o=0,s=!1;for(let e=0;e<i.length-1;e++){let t=i[e];for(let n=e+1;n<i.length;n++)o+=this.createDependencyIfNecessary(t,i[n]),!s&&(t.getOutgoingSegmentDependencies().length>0||i[n].getOutgoingSegmentDependencies().length>0)&&(s=!0)}s&&(o>=2&&mo(Ha.detectCycles(i,!0,n),i,this.criticalConflictThreshold),Co(i,n)),So(i);let c=-1;for(let e of i)Math.abs(e.getStartCoordinate()-e.getEndCoordinate())<.001||(c=Math.max(c,e.getRoutingSlot()),Number.isNaN(r)||this.calculateBendPoints(e,r,this.edgeSpacing));return c+1}calculateBendPoints(e,t,n){if(e.isDummy())return;let r=t+e.getRoutingSlot()*n;for(let i of e.getPorts()){let a=i.getNode().position.y+i.getPosition().y+i.getAnchor().y;for(let o of i.getOutgoingEdges()){if(o.isSelfLoop())continue;let i=o.getTarget(),s=i.getNode().position.y+i.getPosition().y+i.getAnchor().y;if(Math.abs(a-s)>.001){let i=r;o.getBendPoints().push({x:i,y:a});let c=e.getSplitPartner();if(c!==null){let e=c.getIncomingConnectionCoordinates()[0];o.getBendPoints().push({x:i,y:e}),i=t+c.getRoutingSlot()*n,o.getBendPoints().push({x:i,y:e})}o.getBendPoints().push({x:i,y:s})}}}}createHyperEdgeSegments(e,t,n,r,i=qa,a=Ka){if(e!=null)for(let o of e)for(let e of o.getPorts()){if(e.getSide()!==t||e.getOutgoingEdges().length===0)continue;let o=r.get(e);o===void 0&&(o=new Ja(i,a),n.push(o),o.addPortPositions(e,r))}}routeEdgesForDirection(e,t,n,r,i,a,o=NaN){let s=this.edgeSegmentsScratch;s.length=0;let c=this.portToEdgeSegmentMapScratch;if(c.clear(),this.createHyperEdgeSegments(e??[],r,s,c,a,r),this.createHyperEdgeSegments(t??[],i,s,c,a,r),s.length===0)return 0;this.criticalConflictThreshold=vo*this.minimumHorizontalSegmentDistance(s);let l=0,u=!1;for(let e=0;e<s.length-1;e++){let t=s[e];for(let n=e+1;n<s.length;n++)l+=this.createDependencyIfNecessary(t,s[n]),!u&&(t.getOutgoingSegmentDependencies().length>0||s[n].getOutgoingSegmentDependencies().length>0)&&(u=!0)}u&&(l>=2&&mo(Ha.detectCycles(s,!0,n),s,this.criticalConflictThreshold),Co(s,n)),So(s);let d=-1;for(let e of s)Math.abs(e.getStartCoordinate()-e.getEndCoordinate())<.001||(d=Math.max(d,e.getRoutingSlot()),Number.isNaN(o)||this.calculateBendPointsForDirection(e,o,this.edgeSpacing,r));return d+1}calculateBendPointsForDirection(e,t,n,r){if(e.isDummy())return;let i=r===`NORTH`,a=t+(i?-1:1)*e.getRoutingSlot()*n;for(let r of e.getPorts()){let o=_o(r);for(let s of r.getOutgoingEdges()){if(s.isSelfLoop())continue;let r=s.getTarget();if(r==null)continue;let c=_o(r);if(Math.abs(o-c)<=.001)continue;let l=a;s.getBendPoints().push({x:o,y:l});let u=e.getSplitPartner();if(u!==null){let e=u.getIncomingConnectionCoordinates()[0];e!==void 0&&(s.getBendPoints().push({x:e,y:l}),l=t+(i?-1:1)*u.getRoutingSlot()*n,s.getBendPoints().push({x:e,y:l}))}s.getBendPoints().push({x:c,y:l})}}}createDependencyIfNecessary(e,t){if(Math.abs(e.getStartCoordinate()-e.getEndCoordinate())<.001||Math.abs(t.getStartCoordinate()-t.getEndCoordinate())<.001)return 0;let n=this.countConflicts(e.getOutgoingConnectionCoordinates(),t.getIncomingConnectionCoordinates()),r=this.countConflicts(t.getOutgoingConnectionCoordinates(),e.getIncomingConnectionCoordinates());if(n===-1||r===-1){let i=0;return n===-1&&(K.createAndAddCritical(t,e),i++),r===-1&&(K.createAndAddCritical(e,t),i++),i}{let i=xo(e.getOutgoingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate())+xo(t.getIncomingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate()),a=xo(t.getOutgoingConnectionCoordinates(),e.getStartCoordinate(),e.getEndCoordinate())+xo(e.getIncomingConnectionCoordinates(),t.getStartCoordinate(),t.getEndCoordinate()),o=1*n+16*i,s=1*r+16*a;return o<s?K.createAndAddRegular(e,t,s-o):o>s?K.createAndAddRegular(t,e,o-s):o>0&&s>0&&(K.createAndAddRegular(e,t,0),K.createAndAddRegular(t,e,0)),0}}countConflicts(e,t){let n=0;if(e.length>0&&t.length>0){let r=0,i=0,a=e[0],o=t[0],s=!0;do{if(a>o-this.criticalConflictThreshold&&a<o+this.criticalConflictThreshold)return-1;a>o-this.conflictThreshold&&a<o+this.conflictThreshold&&n++,a<=o&&r+1<e.length?a=e[++r]:o<=a&&i+1<t.length?o=t[++i]:s=!1}while(s)}return n}minimumHorizontalSegmentDistance(e){let t=this.incomingCoordsScratch,n=this.outgoingCoordsScratch;t.length=0,n.length=0;for(let r of e)t.push(...r.getIncomingConnectionCoordinates()),n.push(...r.getOutgoingConnectionCoordinates());return Math.min(bo(t),bo(n))}};function bo(e){e.sort((e,t)=>e-t);let t=Number.MAX_VALUE;if(e.length>=2)for(let n=1;n<e.length;n++)e[n]!==e[n-1]&&(t=Math.min(t,e[n]-e[n-1]));return t}function xo(e,t,n){let r=0;for(let i=0;i<e.length;i++){let a=e[i];if(a>n)break;a>=t&&r++}return r}function So(e){let t=[],n=[];for(let r of e)r.setInWeight(r.getIncomingSegmentDependencies().length),r.setOutWeight(r.getOutgoingSegmentDependencies().length),r.getInWeight()===0&&t.push(r),r.getOutWeight()===0&&r.getIncomingConnectionCoordinates().length===0&&n.push(r);let r=-1,i=0;for(;i<t.length;){let e=t[i++];r=Math.max(r,e.getRoutingSlot());for(let n of e.getOutgoingSegmentDependencies()){let i=n.getTarget();i.setRoutingSlot(Math.max(i.getRoutingSlot(),e.getRoutingSlot()+1)),r=Math.max(r,i.getRoutingSlot()),i.setInWeight(i.getInWeight()-1),i.getInWeight()===0&&t.push(i)}}if(r>-1){for(let e of n)e.setRoutingSlot(r);let e=0;for(;e<n.length;){let t=n[e++];for(let e of t.getIncomingSegmentDependencies()){let r=e.getSource();r.getIncomingConnectionCoordinates().length>0||(r.setRoutingSlot(Math.min(r.getRoutingSlot(),t.getRoutingSlot()-1)),r.setOutWeight(r.getOutWeight()-1),r.getOutWeight()===0&&n.push(r))}}}return r+1}function Co(e,t){let n=Ha.detectCycles(e,!1,t);for(let e of n)e.getWeight()===0?e.remove():e.reverse()}var wo=class{process(e){let t=e.getProperty(kn),n=e.getProperty(wt),r=e.getProperty(_n),i=new yo(n),a=0,o=e.getLayers(),s=e=>e.length>0&&e.every(e=>e.getType().toString()===`EXTERNAL_PORT`&&(e.getProperty(j)===`WEST`||e.getProperty(j)===`EAST`)),c=null;for(let l=0;l<=o.length;l++){let u=l<o.length?o[l].getNodes():null;c!==null&&(Va(o[l-1],a),a+=o[l-1].getSize().x);let d=c===null?a:a+r,f=e.getProperty(P),p=i.routeEdges(c,u,d,f),m=c===null||s(c),h=u===null||s(u);if(p>0){let e=(p-1)*n;c!==null&&(e+=r),u!==null&&(e+=r),e<t&&!m&&!h&&(e=t),a+=e}else!m&&!h&&(a+=t);c=u}let l=a;for(let e of o)for(let t of e.getNodes())l=Math.max(l,t.position.x+t.size.x);e.getSize().x=l}},To=class{startPos=-1/0;delta=0;deltaNormalized=0;cNodes;incomingConstraints;outDegree=0;reference=null;id=0;reposition=!0;constructor(...e){this.cNodes=/* @__PURE__ */ new Set,this.incomingConstraints=/* @__PURE__ */ new Set,this.outDegree=0;for(let t of e)this.reference===null&&(this.reference=t),this.addCNode(t)}addCNode(e){if(e.cGroup!==null)throw Error(`CNode belongs to another CGroup.`);this.cNodes.add(e),e.cGroup=this}removeCNode(e){let t=this.cNodes.delete(e);return t&&(e.cGroup=null),t}},Eo=class{cNodes=[];cGroups=[];predefinedHorizontalConstraints=[];supportedDirections;constructor(e){this.supportedDirections=new Set(e)}supports(e){return this.supportedDirections.has(e)}};const Do={getHorizontalSpacing(e,t){return Math.max(e.getHorizontalSpacing(),t.getHorizontalSpacing())},getVerticalSpacing(e,t){return Math.max(e.getVerticalSpacing(),t.getVerticalSpacing())}};function Oo(e,t){return Math.abs(e-t)<=1e-4?0:e<t?-1:1}const ko={eq(e,t){return Oo(e,t)===0},gt(e,t){return Oo(e,t)>0},lt(e,t){return Oo(e,t)<0},ge(e,t){return Oo(e,t)>=0},le(e,t){return Oo(e,t)<=0}};function Ao(e,t,n){let r=[...e];r.sort(t);for(let e of r)n.handle(e)}var jo=class{compact(e){let t=1/0;for(let n of e.cGraph.cNodes)t=Math.min(t,n.cGroup.reference.hitbox.x+n.cGroupOffset.x);let n=[];for(let r of e.cGraph.cGroups)r.startPos=t,r.outDegree===0&&n.push(r);for(;n.length>0;){let t=n.shift(),r=t.reference.hitbox.x;for(let e of t.cNodes){let n=t.startPos+e.cGroupOffset.x;e.startPos=e.cGroup.reposition||e.getPosition()<n?n:e.hitbox.x}r-=t.reference.startPos,t.delta+=r,e.direction===`RIGHT`||e.direction===`DOWN`?t.deltaNormalized+=r:t.deltaNormalized-=r;for(let r of t.cNodes)for(let t of r.constraints){let i=e.direction===`LEFT`||e.direction===`RIGHT`?e.spacingsHandler.getHorizontalSpacing(r,t):e.spacingsHandler.getVerticalSpacing(r,t);t.cGroup.startPos=Math.max(t.cGroup.startPos,r.startPos+r.hitbox.width+i-t.cGroupOffset.x),t.reposition||(t.cGroup.startPos=Math.max(t.cGroup.startPos,t.getPosition()-t.cGroupOffset.x)),t.cGroup.outDegree--,t.cGroup.outDegree===0&&n.push(t.cGroup)}}for(let t of e.cGraph.cNodes)t.applyPosition()}},Mo=class{calculateConstraints(e){for(let t of e.cGraph.cNodes)t.constraints.length=0;for(let t of e.cGraph.cNodes)for(let n of e.cGraph.cNodes){if(t===n||t.cGroup!==null&&t.cGroup===n.cGroup)continue;let r=e.direction===`LEFT`||e.direction===`RIGHT`?e.spacingsHandler.getVerticalSpacing(t,n):e.spacingsHandler.getHorizontalSpacing(t,n);t!==n.parentNode&&(n.hitbox.x>t.hitbox.x||t.hitbox.x===n.hitbox.x&&t.hitbox.width<n.hitbox.width)&&ko.gt(n.hitbox.y+n.hitbox.height+r,t.hitbox.y)&&ko.lt(n.hitbox.y,t.hitbox.y+t.hitbox.height+r)&&t.constraints.push(n)}}},No=class e{static EPSILON=.5;compactor;calculateConstraints(e){this.compactor=e,this.sweep(()=>!0,()=>0)}sweep(e,t){this.blowUpHitboxes(e,t);let n=[];for(let t of this.compactor.cGraph.cNodes)e(t)&&(n.push(new Po(t,!0)),n.push(new Po(t,!1)));let r=0;for(let t of this.compactor.cGraph.cNodes)e(t)&&(t.id=r++);this.handler.reset(this.compactor.cGraph.cNodes.length),Ao(n,Io,this.handler),this.normalizeHitboxes(e,t)}blowUpHitboxes(t,n){for(let r of this.compactor.cGraph.cNodes){if(!t(r))continue;let i=n(r);i>0&&((this.compactor.direction===`LEFT`||this.compactor.direction===`RIGHT`?r.spacingIgnore.up:r.spacingIgnore.left)||(r.hitbox.y-=Math.max(0,i/2-e.EPSILON)),(this.compactor.direction===`LEFT`||this.compactor.direction===`RIGHT`?r.spacingIgnore.down:r.spacingIgnore.right)||(r.hitbox.height+=Math.max(0,i-2*e.EPSILON)))}}normalizeHitboxes(t,n){for(let r of this.compactor.cGraph.cNodes){if(!t(r))continue;let i=n(r);i>0&&((this.compactor.direction===`LEFT`||this.compactor.direction===`RIGHT`?r.spacingIgnore.up:r.spacingIgnore.left)||(r.hitbox.y+=Math.max(0,i/2-e.EPSILON)),(this.compactor.direction===`LEFT`||this.compactor.direction===`RIGHT`?r.spacingIgnore.down:r.spacingIgnore.right)||(r.hitbox.height-=i-2*e.EPSILON))}}handler=new Lo},Po=class{node;low;constructor(e,t){this.node=e,this.low=t}};function Fo(e){return e.low?e.node.hitbox.y:e.node.hitbox.y+e.node.hitbox.height}const Io=(e,t)=>{let n=Fo(e)-Fo(t);if(n===0){if(!e.low&&t.low)return-1;if(!t.low&&e.low)return 1}return n};var Lo=class{intervals=[];cand=[];reset(e){this.intervals=[],this.cand=Array(e)}handle(e){e.low?this.insert(e):this.delete(e)}insert(e){this.intervals.push(e.node),this.intervals.sort((e,t)=>e.hitbox.x+e.hitbox.width/2-(t.hitbox.x+t.hitbox.width/2)),this.cand[e.node.id]=this.lower(e.node);let t=this.higher(e.node);t!==null&&(this.cand[t.id]=e.node)}delete(e){let t=this.lower(e.node);t!==null&&t===this.cand[e.node.id]&&t.cGroup!==null&&t.cGroup!==e.node.cGroup&&t.constraints.push(e.node);let n=this.higher(e.node);n!==null&&this.cand[n.id]===e.node&&n.cGroup!==null&&n.cGroup!==e.node.cGroup&&e.node.constraints.push(n),this.intervals.splice(this.intervals.indexOf(e.node),1)}lower(e){let t=e.hitbox.x+e.hitbox.width/2,n=null;for(let r of this.intervals){let i=r.hitbox.x+r.hitbox.width/2;if(i<t)n=r;else if((i!==t||r===e||n!==null)&&i>t)break}return n}higher(e){let t=e.hitbox.x+e.hitbox.width/2;for(let e of this.intervals)if(e.hitbox.x+e.hitbox.width/2>t)return e;return null}},Ro=class e{static LONGEST_PATH_COMPACTION=new jo;static SCANLINE_CONSTRAINTS=new No;static QUADRATIC_CONSTRAINTS=new Mo;compactionAlgorithm=e.LONGEST_PATH_COMPACTION;constraintAlgorithm=e.SCANLINE_CONSTRAINTS;cGraph;direction=`UNDEFINED`;lockingStrategy;finished=!1;spacingsHandler=Do;constructor(e){this.cGraph=e,this.lockingStrategy=e=>e.first.cGroup.outDegree!==0,this.calculateGroupOffsets();for(let t of e.cNodes)if(t.cGroup===null){let n=new To(t);e.cGroups.push(n)}}setSpacingsHandler(e){return this.spacingsHandler=e,this}setCompactionAlgorithm(e){return this.compactionAlgorithm=e,this}setConstraintAlgorithm(e){return this.constraintAlgorithm=e,this}compact(){if(this.finished)throw Error(`The OneDimensionalCompactor instance has been finished already.`);this.direction===`UNDEFINED`&&this.changeDirection(`LEFT`);for(let e of this.cGraph.cNodes)e.hitboxPreCompaction={...e.hitbox};for(let e of this.cGraph.cGroups)e.outDegree=0;for(let e of this.cGraph.cNodes){e.startPos=-1/0;for(let t of e.constraints)t.cGroup.outDegree++}this.compactionAlgorithm.compact(this);for(let e of this.cGraph.cNodes)e.reposition=!0;return this}finish(){return this.changeDirection(`LEFT`),this.finished=!0,this}changeDirection(e){if(this.finished)throw Error(`The OneDimensionalCompactor instance has been finished already.`);if(!this.cGraph.supports(e))throw Error(`The direction ${e} is not supported by the CGraph instance.`);if(e===this.direction)return this;let t=this.direction;switch(this.direction=e,t){case`UNDEFINED`:e===`LEFT`?this.calculateConstraints():e===`RIGHT`?(this.mirrorHitboxes(),this.calculateConstraints()):e===`UP`?(this.transposeHitboxes(),this.calculateConstraints()):e===`DOWN`&&(this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints());break;case`LEFT`:e===`RIGHT`?(this.mirrorHitboxes(),this.reverseConstraints()):e===`UP`?(this.transposeHitboxes(),this.calculateConstraints()):e===`DOWN`&&(this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints());break;case`RIGHT`:e===`LEFT`?(this.mirrorHitboxes(),this.reverseConstraints()):e===`UP`?(this.mirrorHitboxes(),this.transposeHitboxes(),this.calculateConstraints()):e===`DOWN`&&(this.mirrorHitboxes(),this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints());break;case`UP`:e===`LEFT`?(this.transposeHitboxes(),this.calculateConstraints()):e===`RIGHT`?(this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints()):e===`DOWN`&&(this.mirrorHitboxes(),this.reverseConstraints());break;case`DOWN`:e===`LEFT`?(this.mirrorHitboxes(),this.transposeHitboxes(),this.calculateConstraints()):e===`RIGHT`?(this.mirrorHitboxes(),this.transposeHitboxes(),this.mirrorHitboxes(),this.calculateConstraints()):e===`UP`&&(this.mirrorHitboxes(),this.reverseConstraints())}return this}setLockingStrategy(e){return this.lockingStrategy=e,this}applyLockingStrategy(e){let t=e??this.direction;for(let e of this.cGraph.cGroups)e.reposition=!0;for(let e of this.cGraph.cNodes)e.reposition=this.lockingStrategy({first:e,second:t}),e.cGroup.reposition=e.cGroup.reposition&&e.reposition;return this}forceConstraintsRecalculation(){return this.calculateConstraints(),this}calculateGroupOffsets(){for(let e of this.cGraph.cGroups){e.reference=null;for(let t of e.cNodes)t.cGroupOffset.x=0,t.cGroupOffset.y=0,(e.reference===null||t.hitbox.x<e.reference.hitbox.x)&&(e.reference=t);for(let t of e.cNodes)t.cGroupOffset.x=t.hitbox.x-e.reference.hitbox.x,t.cGroupOffset.y=t.hitbox.y-e.reference.hitbox.y}return this}mirrorHitboxes(){for(let e of this.cGraph.cNodes)e.hitbox.x=-e.hitbox.x-e.hitbox.width,e.parentNode!==null&&(e.cGroupOffset.x=-e.cGroupOffset.x+e.parentNode.hitbox.width);this.calculateGroupOffsets()}transposeHitboxes(){for(let e of this.cGraph.cNodes){let t=e.hitbox.x;e.hitbox.x=e.hitbox.y,e.hitbox.y=t,t=e.hitbox.width,e.hitbox.width=e.hitbox.height,e.hitbox.height=t,t=e.cGroupOffset.x,e.cGroupOffset.x=e.cGroupOffset.y,e.cGroupOffset.y=t}this.calculateGroupOffsets()}calculateConstraints(){for(let e of this.cGraph.cNodes)e.constraints.length=0;let e=this.cGraph.predefinedHorizontalConstraints;for(let[t,n]of e)this.direction===`LEFT`||this.direction===`UP`?t.constraints.push(n):n.constraints.push(t);this.constraintAlgorithm.calculateConstraints(this),this.calculateConstraintsForCGroups()}calculateConstraintsForCGroups(){for(let e of this.cGraph.cGroups)e.outDegree=0,e.incomingConstraints.clear();for(let e of this.cGraph.cGroups)for(let t of e.cNodes)for(let n of t.constraints)n.cGroup!==e&&(e.incomingConstraints.add(n),n.cGroup.outDegree++)}reverseConstraints(){let e=/* @__PURE__ */ new Map;for(let t of this.cGraph.cNodes)e.set(t,[]);for(let t of this.cGraph.cNodes){t.startPos=-1/0;for(let n of t.constraints)e.get(n).push(t)}for(let t of this.cGraph.cNodes)t.constraints=e.get(t);this.calculateConstraintsForCGroups()}},zo=class{left=!1;right=!1;up=!1;down=!1;constructor(e=!1,t=!1,n=!1,r=!1){this.set(e,t,n,r)}set(e,t,n,r){typeof t==`boolean`?(this.left=e,this.right=t,this.up=n??!1,this.down=r??!1):this.setDirection(e,t)}setDirection(e,t){switch(t){case`LEFT`:this.left=e;break;case`RIGHT`:this.right=e;break;case`UP`:this.up=e;break;case`DOWN`:this.down=e}}applyOr(e){this.left=this.left||e.left,this.right=this.right||e.right,this.up=this.up||e.up,this.down=this.down||e.down}get(e){switch(e){case`LEFT`:return this.left;case`RIGHT`:return this.right;case`UP`:return this.up;case`DOWN`:return this.down;default:return!1}}},Bo=class{cGroup=null;parentNode=null;constraints=[];hitbox={x:0,y:0,width:0,height:0};hitboxPreCompaction=null;cGroupOffset=wn(0,0);startPos=-1/0;reposition=!0;lock=new zo;spacingIgnore=new zo;id=0;getPosition(){return this.hitbox.x}applyPosition(){this.hitbox.x=this.startPos}},q=class extends Bo{lNode;constructor(e){super(),this.lNode=e;let t=e.getMargin(),n=e.getPosition(),r=e.getSize();this.hitbox={x:n.x-t.left,y:n.y-t.top,width:r.x+t.left+t.right,height:r.y+t.top+t.bottom}}getHorizontalSpacing(){return 0}getVerticalSpacing(){return 0}applyElementPosition(){this.lNode.getPosition().x=this.hitbox.x+this.lNode.getMargin().left}getElementPosition(){return this.hitbox.x}},J=class extends Bo{vs;constructor(e){super(),this.vs=e,this.hitbox={...e.hitbox}}getHorizontalSpacing(){return 0}getVerticalSpacing(){return 0}applyElementPosition(){let e=this.hitboxPreCompaction,t=e===null?0:this.hitbox.x-e.x;for(let e of this.vs.affectedBends)e.x+=t;for(let e of this.vs.affectedBoundingBoxes)e.x+=t;for(let e of this.vs.junctionPoints)e.x+=t}getElementPosition(){return this.hitbox.x}};const Vo=.01;var Ho=class extends No{graph;verticalEdgeEdgeSpacing;edgeRouting;constructor(e){super(),this.graph=e,this.verticalEdgeEdgeSpacing=e.getProperty(n),this.edgeRouting=e.getProperty(s)}calculateConstraints(e){this.compactor=e,this.edgeRouting===`SPLINES`?this.calculateForSpline():this.calculateForOrthogonal()}alterHitbox(e,t,n){let r=t*n;if(e instanceof J){let t=e.vs;t.ignoreSpacing.up?t.ignoreSpacing.down||(e.hitbox.height+=r+Vo):(e.hitbox.y-=r+Vo,e.hitbox.height+=r+Vo)}else e instanceof q&&(e.hitbox.y-=r,e.hitbox.height+=2*r)}alterGroupedHitboxOrthogonal(e,t,n){let r=null;for(let t of e.cNodes)if(t instanceof q){r=t;break}if(r===null&&(r=e.cNodes.values().next().value??null),r===null||(this.alterHitbox(r,t,n),e.cNodes.size===1))return;let i=t*n;for(let t of e.cNodes){if(t===r||!(t instanceof J))continue;let e=t.vs;e.ignoreSpacing.up?(t.hitbox.y+=i+Vo,t.hitbox.height-=i+Vo):e.ignoreSpacing.down&&(t.hitbox.height-=i+Vo)}}calculateForSpline(){this.sweep(e=>e instanceof J,()=>0);let e=1/0;for(let t of this.compactor.cGraph.cNodes)if(!(t instanceof q&&t.lNode.getType()===`EXTERNAL_PORT`)){if(t instanceof J)e=Math.min(e,Math.max(0,this.verticalEdgeEdgeSpacing/2-No.EPSILON));else if(t instanceof q){let t=this.graph.getProperty(Zt);e=Math.min(e,Math.max(0,t/2-No.EPSILON))}}Number.isFinite(e)||(e=0);let t=[];for(let n of this.compactor.cGraph.cNodes)n instanceof q&&(this.alterHitbox(n,e,1),t.push([n,e]));this.sweep(e=>!0,()=>0);for(let[e,n]of t)this.alterHitbox(e,n,-1)}calculateForOrthogonal(){let e=[];for(let t of this.compactor.cGraph.cNodes)if(t instanceof J){let n=Math.max(0,this.verticalEdgeEdgeSpacing/2-No.EPSILON);this.alterHitbox(t,n,1),e.push([t,n])}this.sweep(e=>e instanceof J,()=>0);for(let[t,n]of e)this.alterHitbox(t,n,-1);let t=[];for(let e of this.compactor.cGraph.cNodes)if(e instanceof q){let r=Math.max(0,this.graph.getProperty(n)/2-No.EPSILON);this.alterHitbox(e,r,1),t.push([e,r])}this.sweep(e=>e instanceof q,()=>0);for(let[e,n]of t)this.alterHitbox(e,n,-1);let r=1/0;for(let e of this.compactor.cGraph.cNodes)e instanceof q&&e.lNode.getType()===`EXTERNAL_PORT`||(e instanceof J?r=Math.min(r,Math.max(0,this.verticalEdgeEdgeSpacing/2-No.EPSILON)):e instanceof q&&(r=Math.min(r,Math.max(0,this.graph.getProperty(Zt)/2-No.EPSILON))));Number.isFinite(r)||(r=0);let i=[];for(let e of this.compactor.cGraph.cGroups)this.alterGroupedHitboxOrthogonal(e,r,1),i.push([e,r]);this.sweep(e=>!0,()=>0);for(let[e,t]of i)this.alterGroupedHitboxOrthogonal(e,t,-1)}},Uo=class{potentialGroupParents=[];representedLEdges=[];affectedBends=[];affectedBoundingBoxes=[];hitbox={x:0,y:0,width:0,height:0};junctionPoints=[];ignoreSpacing=new zo;constraints=[];aPort=null;joined=[];constructor(e,t,n,r){this.affectedBends.push(e),this.affectedBends.push(t),this.hitbox.x=Math.min(e.x,t.x),this.hitbox.y=Math.min(e.y,t.y),this.hitbox.width=Math.abs(e.x-t.x),this.hitbox.height=Math.abs(e.y-t.y),n!==null&&this.potentialGroupParents.push(n),this.representedLEdges.push(r)}joinWith(e){this.representedLEdges.push(...e.representedLEdges),this.affectedBends.push(...e.affectedBends),this.affectedBoundingBoxes.push(...e.affectedBoundingBoxes),this.junctionPoints.push(...e.junctionPoints),this.constraints.push(...e.constraints),this.potentialGroupParents.push(...e.potentialGroupParents);let t=Math.min(this.hitbox.x,e.hitbox.x),n=Math.min(this.hitbox.y,e.hitbox.y),r=Math.max(this.hitbox.x+this.hitbox.width,e.hitbox.x+e.hitbox.width),i=Math.max(this.hitbox.y+this.hitbox.height,e.hitbox.y+e.hitbox.height);return this.hitbox={x:t,y:n,width:r-t,height:i-n},this.ignoreSpacing.applyOr(e.ignoreSpacing),this.aPort===null&&(this.aPort=e.aPort),this.joined.push(...e.joined),this.joined.push(e),this}intersects(e){return ko.eq(this.hitbox.x,e.hitbox.x)&&!(ko.lt(this.hitbox.y+this.hitbox.height,e.hitbox.y)||ko.lt(e.hitbox.y+e.hitbox.height,this.hitbox.y))}compareTo(e){let t=ko.eq(this.hitbox.x,e.hitbox.x)?0:this.hitbox.x<e.hitbox.x?-1:1;return t===0?this.hitbox.y-e.hitbox.y:t}},Wo=class{cGraph;layeredGraph;edgeRouting;nodesMap=/* @__PURE__ */ new Map;verticalSegmentsMap=/* @__PURE__ */ new Map;lockMap=/* @__PURE__ */ new Map;transform(e){return this.layeredGraph=e,this.edgeRouting=e.getProperty(s),this.cGraph=new Eo([`LEFT`,`RIGHT`]),this.nodesMap=/* @__PURE__ */ new Map,this.verticalSegmentsMap=/* @__PURE__ */ new Map,this.lockMap=/* @__PURE__ */ new Map,this.transformNodes(),this.transformEdges(),this.cGraph}getLockMap(){return this.lockMap}transformNodes(){let e=0;for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes()){let t=new q(n);t.id=e++,this.cGraph.cNodes.push(t);let r=new To(t);this.cGraph.cGroups.push(r);let i=new zo;this.lockMap.set(t,i);let a=n.getIncomingEdges().length-n.getOutgoingEdges().length;a<0?i.set(!0,`LEFT`):a>0&&i.set(!0,`RIGHT`),n.getType()===`EXTERNAL_PORT`&&i.set(!1,!1,!1,!1),this.nodesMap.set(n,t)}}transformEdges(){let e;e=this.edgeRouting===`ORTHOGONAL`?this.collectVerticalSegmentsOrthogonal():this.edgeRouting===`SPLINES`?this.collectVerticalSegmentsSplines():[],this.mergeVerticalSegments(e);for(let[e,t]of this.verticalSegmentsMap)for(let n of e.constraints){let e=this.verticalSegmentsMap.get(n);e&&this.cGraph.predefinedHorizontalConstraints.push([t,e])}}collectVerticalSegmentsOrthogonal(){let e=[];for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes()){let t=this.nodesMap.get(n);if(t){for(let r of n.getOutgoingEdges()){let n=r.getBendPoints();if(n.length===0)continue;let i=!0,a=null,o=n[0],s=null,c=r.getSource();if(c.getSide()===`NORTH`){let n=new Uo(o,{x:o.x,y:t.hitbox.y},t,r);n.ignoreSpacing.down=!0,n.aPort=c,e.push(n)}if(c.getSide()===`SOUTH`){let n=new Uo(o,{x:o.x,y:t.hitbox.y+t.hitbox.height},t,r);n.ignoreSpacing.up=!0,n.aPort=c,e.push(n)}for(let c=1;c<n.length;c++)s=n[c],ko.eq(o.y,s.y)||(a=new Uo(o,s,null,r),e.push(a),i&&(i=!1,s.y<t.hitbox.y?a.ignoreSpacing.down=!0:s.y>t.hitbox.y+t.hitbox.height?a.ignoreSpacing.up=!0:(a.ignoreSpacing.up=!0,a.ignoreSpacing.down=!0))),c+1<n.length&&(o=s);if(a!==null){let e=this.nodesMap.get(r.getTarget().getNode());e&&(o.y<e.hitbox.y?a.ignoreSpacing.down=!0:o.y>e.hitbox.y+e.hitbox.height?a.ignoreSpacing.up=!0:(a.ignoreSpacing.up=!0,a.ignoreSpacing.down=!0))}}for(let r of n.getIncomingEdges()){let n=r.getBendPoints();if(n.length===0)continue;let i=n[n.length-1],a=r.getTarget();if(a.getSide()===`NORTH`){let n=new Uo(i,{x:i.x,y:t.hitbox.y},t,r);n.ignoreSpacing.down=!0,n.aPort=a,e.push(n)}if(a.getSide()===`SOUTH`){let n=new Uo(i,{x:i.x,y:t.hitbox.y+t.hitbox.height},t,r);n.ignoreSpacing.up=!0,n.aPort=a,e.push(n)}}}}return e}collectVerticalSegmentsSplines(){let e=[];this.cGraph.cNodes.length;for(let t of this.layeredGraph.getLayers())for(let n of t.getNodes())for(let t of n.getOutgoingEdges()){let n=t.getProperty(g);if(!n||n.length===0)continue;let r=null;for(let t of n){if(t.isStraight)continue;let n=new Uo({x:t.boundingBox.x,y:t.boundingBox.y},{x:t.boundingBox.x+t.boundingBox.width,y:t.boundingBox.y+t.boundingBox.height},null,t.edges[0]);n.affectedBoundingBoxes.push(t.boundingBox),e.push(n),r!==null&&r.constraints.push(n),r=n}}return e}mergeVerticalSegments(e){if(e.length===0)return;e.sort((e,t)=>e.compareTo(t));let t=e[0];for(let n=1;n<e.length;n++){let r=e[n];t.intersects(r)?t.joinWith(r):(this.verticalSegmentToCNode(t),t=r)}this.verticalSegmentToCNode(t)}verticalSegmentToCNode(e){let t=new J(e);if(t.id=this.cGraph.cNodes.length,this.cGraph.cNodes.push(t),e.potentialGroupParents.length>0){let n=e.potentialGroupParents[0].cGroup;n&&n.addCNode(t)}else{let e=new To(t);this.cGraph.cGroups.push(e)}let n=new zo;this.lockMap.set(t,n);let r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set;for(let t of e.representedLEdges)t.getSource()&&r.add(t.getSource().id),t.getTarget()&&i.add(t.getTarget().id);let a=r.size-i.size;a<0?(n.set(!0,`LEFT`),n.set(!1,`RIGHT`)):a>0&&(n.set(!1,`LEFT`),n.set(!0,`RIGHT`));for(let n of e.joined)this.verticalSegmentsMap.set(n,t);this.verticalSegmentsMap.set(e,t)}applyLayout(){for(let e of this.cGraph.cNodes)e instanceof q&&e.applyElementPosition();for(let e of this.cGraph.cNodes)e instanceof J&&e.applyElementPosition();if(this.edgeRouting===`SPLINES`){for(let e of this.layeredGraph.getLayers())for(let t of e.getNodes())for(let e of t.getOutgoingEdges()){if(!e.isSelfLoop())continue;let t=e.getSource().getNode(),n=this.nodesMap.get(t);if(n===void 0||n.hitboxPreCompaction===null)continue;let r=n.hitbox.x-n.hitboxPreCompaction.x;for(let t of e.getBendPoints())t.x+=r}for(let e of this.layeredGraph.getLayers())for(let t of e.getNodes())for(let e of t.getOutgoingEdges()){let t=e.getProperty(g);t!=null&&t.length>0&&this.adjustSplineControlPoints(t)}}let e=1/0,t=1/0,n=-1/0,r=-1/0;for(let i of this.cGraph.cNodes)e=Math.min(e,i.hitbox.x),t=Math.min(t,i.hitbox.y),n=Math.max(n,i.hitbox.x+i.hitbox.width),r=Math.max(r,i.hitbox.y+i.hitbox.height);Number.isFinite(e)&&(this.layeredGraph.getOffset().x=-e,this.layeredGraph.getOffset().y=-t,this.layeredGraph.getSize().x=n-e,this.layeredGraph.getSize().y=r-t)}adjustSplineControlPoints(e){if(e.length===0)return;let t=e[0];if(e.length===1){this.adjustControlPointBetweenSegments(t,t,1,0,e);return}let n=1;for(;n<e.length;)if(t.initialSegment||!t.isStraight){let r=this.firstNonStraightSegment(e,n);if(r!==null){let i=r.index,a=r.segment;this.adjustControlPointBetweenSegments(t,a,n,i,e),n=i+1,t=a}}}firstNonStraightSegment(e,t){if(t<0||t>=e.length)return null;for(let n=t;n<e.length;n++){let t=e[n];if(n===e.length-1||!t.isStraight)return{index:n,segment:t}}return null}adjustControlPointBetweenSegments(e,t,n,r,i){let a,o=n;if(e.initialSegment&&e.isStraight){let t=this.nodesMap.get(e.sourceNode);a=t.hitbox.x+t.hitbox.width,o--}else a=e.boundingBox.x+e.boundingBox.width;let s,c=r;t.lastSegment&&t.isStraight?(s=this.nodesMap.get(t.targetNode).hitbox.x,c++):s=t.boundingBox.x;let l=(s-a)/Math.max(2,c-o),u=a+l;for(let e=o;e<c;e++){let t=i[e],n=t.boundingBox.width;t.boundingBox.x=u-n/2,u+=l}}};function Go(e){return e.getOutgoingEdges().length>0}function Ko(e){return e.getIncomingEdges().length>0}function qo(e){return e===`NORTH`||e===`SOUTH`}function Jo(e){return e===`LEFT`||e===`RIGHT`}function Yo(e){return Math.trunc(Math.ceil(e))}var Xo=class{compactor;networkSimplexGraph;nNodes=[];index=0;compact(e){this.compactor=e,this.networkSimplexGraph=new xr,this.nNodes=Array(this.compactor.cGraph.cGroups.length),this.index=0;for(let e of this.compactor.cGraph.cGroups){e.id=this.index;let t=vr().id(this.index).origin(e).create(this.networkSimplexGraph);this.nNodes[this.index]=t,this.index++}this.addSeparationConstraints(),this.addEdgeConstraints(),this.addArtificialSourceNode(),Sr.forGraph(this.networkSimplexGraph).execute();for(let e of this.compactor.cGraph.cNodes)e.hitbox.x=this.nNodes[e.cGroup.id].layer+e.cGroupOffset.x}addSeparationConstraints(){for(let e of this.compactor.cGraph.cNodes)for(let t of e.constraints){if(e.cGroup===t.cGroup)continue;let n=Jo(this.compactor.direction)?this.compactor.spacingsHandler.getHorizontalSpacing(e,t):this.compactor.spacingsHandler.getVerticalSpacing(e,t),r=e.cGroupOffset.x+e.hitbox.width+n-t.cGroupOffset.x;if(r=Math.ceil(r),r=Math.max(0,r),Zo(e,t)){let n=vr().create(this.networkSimplexGraph),r=Yo(t.cGroupOffset.x-e.cGroupOffset.x),i=r-(t.cGroupOffset.x-e.cGroupOffset.x),a=$o(e)?.aPort??null,o=e;a===null&&(a=$o(t)?.aPort??null,i=-i,o=t),a!==null&&(o.cGroupOffset.x-=i,a.getPosition().x-=i),G().delta(Math.max(0,r)).weight(1).source(n).target(this.nNodes[e.cGroup.id]).create(),G().delta(Math.max(0,-r)).weight(1).source(n).target(this.nNodes[t.cGroup.id]).create()}else{let n=1;(e instanceof J&&t instanceof q||t instanceof J&&e instanceof q)&&(n=2),G().delta(r).weight(n).source(this.nNodes[e.cGroup.id]).target(this.nNodes[t.cGroup.id]).create()}}}addEdgeConstraints(){let e=/* @__PURE__ */ new Map,t=/* @__PURE__ */ new Map;for(let n of this.compactor.cGraph.cNodes){let r=Qo(n);if(r!==null)e.set(r,n);else{let e=$o(n);if(e!==null)for(let r of e.representedLEdges){let e=t.get(r);e===void 0?t.set(r,[n]):e.push(n)}}}for(let n of this.compactor.cGraph.cNodes){let r=Qo(n);if(r!==null)for(let i of r.getOutgoingEdges()){if(i.isSelfLoop())continue;let r=i.getSource(),a=i.getTarget();if(r===null||a===null||qo(r.getSide())&&qo(a.getSide()))continue;let o=e.get(a.getNode());if(o!==void 0){if(G().delta(0).weight(100).source(this.nNodes[n.cGroup.id]).target(this.nNodes[o.cGroup.id]).create(),r.getSide()===`WEST`&&Go(r)){for(let e of t.get(i)??[])if(e.hitbox.x<n.hitbox.x){let t=this.nNodes[e.cGroup.id],r=this.nNodes[n.cGroup.id];if(t===r)continue;G().delta(1).weight(100).source(t).target(r).create()}}if(a.getSide()===`EAST`&&Ko(a)){for(let e of t.get(i)??[])if(e.hitbox.x>n.hitbox.x){let t=this.nNodes[n.cGroup.id],r=this.nNodes[e.cGroup.id];if(t===r)continue;G().delta(1).weight(100).source(t).target(r).create()}}}}}}addArtificialSourceNode(){let e=[];for(let t of this.networkSimplexGraph.nodes)t.getIncomingEdges().length===0&&e.push(t);if(e.length>1){let t=vr().id(this.index++).create(this.networkSimplexGraph);for(let n of e)G().delta(1).weight(0).source(t).target(n).create()}}};function Zo(e,t){let n=e instanceof J?e.vs:null,r=t instanceof J?t.vs:null;return n===null||r===null?!1:n.representedLEdges.some(e=>r.representedLEdges.includes(e))}function Qo(e){return e instanceof q?e.lNode:null}function $o(e){return e instanceof J?e.vs:null}var es=class{lGraph;process(e){let t=e.getProperty(Mn);if(t===`NONE`)return;this.lGraph=e;let n=new Wo,r=new Ro(n.transform(e));switch(r.setSpacingsHandler(this.specialSpacingsHandler),e.getProperty(st)===`SCANLINE`?r.setConstraintAlgorithm(new Ho(e)):r.setConstraintAlgorithm(Ro.QUADRATIC_CONSTRAINTS),t){case`LEFT`:r.compact();break;case`RIGHT`:r.changeDirection(`RIGHT`).compact();break;case`LEFT_RIGHT_CONSTRAINT_LOCKING`:r.compact().changeDirection(`RIGHT`).setLockingStrategy(e=>e.first.cGroup.outDegree===0).applyLockingStrategy().compact();break;case`LEFT_RIGHT_CONNECTION_LOCKING`:r.compact().changeDirection(`RIGHT`).setLockingStrategy(e=>n.getLockMap().get(e.first)?.get(e.second)??!1).applyLockingStrategy().compact();break;case`EDGE_LENGTH`:r.setCompactionAlgorithm(new Xo).compact()}r.finish(),n.applyLayout()}specialSpacingsHandler={getHorizontalSpacing:(e,t)=>{if(Zo(e,t))return 0;let n=Qo(e),r=Qo(t);if(n!==null&&n.getType()===`EXTERNAL_PORT`||r!==null&&r.getType()===`EXTERNAL_PORT`)return 0;let i=this.lGraph.getProperty(Rn);return i?i.getHorizontalSpacingByType(n===null?`LONG_EDGE`:n.getType(),r===null?`LONG_EDGE`:r.getType()):0},getVerticalSpacing:(e,t)=>{if(Zo(e,t))return 1;let n=Qo(e),r=Qo(t),i=this.lGraph.getProperty(Rn);return i?i.getVerticalSpacingByType(n===null?`LONG_EDGE`:n.getType(),r===null?`LONG_EDGE`:r.getType()):0}}};const ts=.4;function ns(e,t){return e.x===t.x&&e.y===t.y}var rs=class{createdJunctionPoints=/* @__PURE__ */ new Set;process(e){let t=e.getProperty(Ke),n=e.getProperty(kn),r=e.getProperty(wt),i=Math.min(1,r/n),a=0,o=0,s=e.getLayers();if(s.length>0){let e=this.calculateWestInLayerEdgeYDiff(s[0]);a=ts*i*e}for(let e=0;e<s.length;e++){let r=s[e],c=r.getNodes().length>0&&r.getNodes().every(e=>e.getType()===`EXTERNAL_PORT`),l=e+1<s.length;c&&a>0&&(a-=n),is(r,a);let u=0;for(let e of r.getNodes()){let n=0;for(let t of e.getOutgoingEdges()){let e=t.getSource(),o=t.getTarget();if(!e||!o)continue;let s=e.getAbsoluteAnchor().y,c=o.getAbsoluteAnchor().y;o.getNode()?.getLayer()===r&&!t.isSelfLoop()&&(this.processInLayerEdge(t,a,ts*i*Math.abs(s-c)),e.getSide()===`WEST`&&(s=0,c=0)),n=Math.max(n,Math.abs(c-s))}switch(e.getType()){case`NORMAL`:case`LABEL`:case`LONG_EDGE`:case`NORTH_SOUTH_PORT`:case`BREAKING_POINT`:this.processNode(e,a,t)}u=Math.max(u,n)}if(l){let t=this.calculateWestInLayerEdgeYDiff(s[e+1]);u=Math.max(u,t)}o=ts*i*u,!c&&l&&(o+=n),a+=r.getSize().x+o}this.createdJunctionPoints.clear(),e.getSize().x=a}processNode(e,t,n){let r=t+e.getLayer().getSize().x;for(let i of e.getPorts()){let a={...i.getAbsoluteAnchor()};if(e.getType()===`NORTH_SOUTH_PORT`){let t=i.getProperty(L);t&&(a.x=t.getAbsoluteAnchor().x,e.getPosition().x=a.x)}let o={x:0,y:a.y};if(i.getSide()===`EAST`)o.x=r;else if(i.getSide()===`WEST`)o.x=t;else continue;if(Math.abs(a.x-o.x)<=n&&!this.isInLayerDummy(e))continue;let s=i.getOutgoingEdges().length+i.getIncomingEdges().length>1;for(let e of i.getConnectedEdges()){let t=e.getSource()===i?e.getTarget():e.getSource();Math.abs(t.getAbsoluteAnchor().y-o.y)>1&&this.addBendPoint(e,o,s,i)}}}processInLayerEdge(e,t,n){let r=e.getSource(),i=e.getTarget(),a=(r.getAbsoluteAnchor().y+i.getAbsoluteAnchor().y)/2,o=r.getSide()===`EAST`?{x:t+r.getNode().getLayer().getSize().x+n,y:a}:{x:t-n,y:a};e.getBendPoints().unshift(o)}addBendPoint(e,t,n,r){if((e.isInLayerEdge()||!ns(r.getAbsoluteAnchor(),t))&&!e.isSelfLoop()){e.getSource()===r?e.getBendPoints().unshift({...t}):e.getBendPoints().push({...t});let i=`${t.x},${t.y}`;if(n&&!this.createdJunctionPoints.has(i)){let n=e.getProperty(R);n??(n=[],e.setProperty(R,n));let r={...t};n.push(r),this.createdJunctionPoints.add(i)}}}isInLayerDummy(e){if(e.getType()===`LONG_EDGE`){for(let t of e.getConnectedEdges())if(t.isInLayerEdge())return!0}return!1}calculateWestInLayerEdgeYDiff(e){let t=0;for(let n of e.getNodes())for(let r of n.getOutgoingEdges()){let n=r.getSource(),i=r.getTarget();if(n&&i&&i.getNode()?.getLayer()===e&&n.getSide()===`WEST`){let e=n.getAbsoluteAnchor().y,r=i.getAbsoluteAnchor().y;t=Math.max(t,Math.abs(r-e))}}return t}};function is(e,t){let n=0,r=0;for(let t of e.getNodes())n=Math.max(n,t.getMargin().left),r=Math.max(r,t.getMargin().right);for(let i of e.getNodes()){let a=i.getProperty(z),o;if(a===`LEFT`)o=0;else if(a===`RIGHT`)o=1;else if(a===`CENTER`)o=.5;else{let e=0,t=0;for(let n of i.getPorts())n.getIncomingEdges().length>0&&e++,n.getOutgoingEdges().length>0&&t++;o=e+t===0?.5:t/(e+t)}let s=e.getSize(),c=i.getSize().x,l=(s.x-c)*o;o>.5?l-=r*2*(o-.5):o<.5&&(l+=n*2*(.5-o));let u=i.getMargin().left;l<u&&(l=u);let d=i.getMargin().right;l>s.x-d-c&&(l=s.x-d-c),i.getPosition().x=t+l}}var as=class{source;target;weight;constructor(e,t,n){this.source=e,this.target=t,this.weight=n,e.outgoing.push(this),t.incoming.push(this)}};const os=.9,ss=.09999999999999998,cs=.5;var ls=class e{mark=0;inweight=0;outweight=0;rank=0;outgoing=[];incoming=[];leftPorts=[];rightPorts=[];edges=[];boundingBox={x:0,y:0,width:0,height:0};xDelta=0;isWestOfInitialLayer=!1;isStraight=!1;centerControlPointY=0;hyperEdgeTopYPos=0;hyperEdgeBottomYPos=0;handled=!1;sourcePort=null;targetPort=null;initialSegment=!1;lastSegment=!1;sourceNode=null;targetNode=null;inverseOrder=!1;edgeInformation=/* @__PURE__ */ new Map;constructor(){}addEdge(t){this.edges.push(t);let n=t.getSource(),r=t.getTarget();this.edgeInformation.set(t,{startY:e.anchorY(n),endY:e.anchorY(r),normalSourceNode:us(n.getNode()),normalTargetNode:us(r.getNode()),invertedLeft:n.getSide()===`WEST`,invertedRight:r.getSide()===`EAST`})}isHyperEdge(){return this.edges.length>1}static anchorY(e){return e.getAbsoluteAnchor().y}static fromSingleEdge(t,n,r,i){let a=new e,o=t.getSource(),s=t.getTarget();n===`LEFT`?a.leftPorts.push(o):a.rightPorts.push(o),r===`LEFT`?a.leftPorts.push(s):a.rightPorts.push(s),a.addEdge(t);let c=e.anchorY(o),l=e.anchorY(s);return a.setRelevantPositions(c,l,l),a.isStraight=i(c,l),a}static fromHyperEdge(t,n,r){let i=new e;r===`LEFT`?i.leftPorts.push(t):i.rightPorts.push(t);let a=1/0,o=-1/0;for(let{side:r,edge:s}of n){let n=s.getSource(),c=s.getTarget(),l=n;l===t&&(l=c),r===`LEFT`?i.leftPorts.push(l):i.rightPorts.push(l);let u=e.anchorY(l);a=Math.min(a,u),o=Math.max(o,u)}let s=e.anchorY(t);i.setRelevantPositions(s,a,o);for(let{edge:e}of n)i.addEdge(e);return i.isStraight=!1,i}setRelevantPositions(e,t,n){this.boundingBox.y=Math.min(e,t),this.boundingBox.height=Math.max(e,n)-this.boundingBox.y,e<t?(this.centerControlPointY=cs*(e+t),this.hyperEdgeTopYPos=ss*this.centerControlPointY+os*e,this.hyperEdgeBottomYPos=ss*this.centerControlPointY+os*t):(this.centerControlPointY=cs*(e+n),this.hyperEdgeTopYPos=ss*this.centerControlPointY+os*n,this.hyperEdgeBottomYPos=ss*this.centerControlPointY+os*e)}};function us(e){let t=e.getType();return t===`NORMAL`||t===`BIG_NODE`||t===`BREAKING_POINT`}const ds=Math.PI/2,fs=1e-5;function ps(e){switch(e){case`NORTH`:return 3*ds;case`EAST`:return 0;case`SOUTH`:return ds;case`WEST`:return Math.PI;default:return 0}}function ms(e,t,n){return Math.abs(e-t)<=n}function hs(e,t,n){return e<t-n?-1:+(e>t+n)}function gs(e,t){let n=e.x,r=e.x+e.width,i=e.y,a=e.y+e.height;return t.x>n&&t.x<r&&t.y>i&&t.y<a}function _s(e,t,n){return gs(e,t)&&gs(e,n)}function vs(e,t,n,r){let i=e,a={x:t.x-e.x,y:t.y-e.y},o=n,s={x:r.x-n.x,y:r.y-n.y},c=i.x,l=i.y,u=o.x,d=o.y,f=a.x,p=a.y,m=s.x,h=s.y,g=m*p-f*h;if(ms(0,g,fs))return!1;let _=1/g*((c-u)*p-(l-d)*f),v=1/g*-(-(c-u)*h+(l-d)*m);return hs(0,_,fs)<0&&hs(_,1,fs)<0&&hs(0,v,fs)<0&&hs(v,1,fs)<0}function ys(e,t,n){if(_s(e,t,n))return!1;let r={x:e.x,y:e.y},i={x:e.x+e.width,y:e.y},a={x:e.x+e.width,y:e.y+e.height},o={x:e.x,y:e.y+e.height};return vs(r,i,t,n)||vs(i,a,t,n)||vs(a,o,t,n)||vs(o,r,t,n)}function bs(e,t){let n=t.length-1,r=0,i=0;for(let a=0;a<=n;a++){let o=t[a],s=xs(n,a)*(1-e)**(n-a)*e**+a;r+=o.x*s,i+=o.y*s}return{x:r,y:i}}function xs(e,t){if(t<0||t>e)return 0;let n=1;for(let r=1;r<=t;r++)n=n*(e-t+r)/r;return n}function Ss(e,t){if(e<=0)return[];let n=[],r=1/e,i=0;for(let a=0;a<e;a++)i+=r,n.push(bs(i,t));return n}const Cs=1e-6;var ws=class e{cp;polarCoordinate;constructor(t,n,r){if(t instanceof e&&n instanceof e&&r!==void 0){let e=t.polarCoordinate[0],i=n.polarCoordinate[n.polarCoordinate.length-1],a={x:t.cp.x*(i-r),y:t.cp.y*(i-r)},o={x:n.cp.x*(r-e),y:n.cp.y*(r-e)},s={x:a.x+o.x,y:a.y+o.y},c=1/(i-e);this.cp={x:s.x*c,y:s.y*c},this.polarCoordinate=[];let l=!0;for(let e=1;e<t.polarCoordinate.length;e++){let n=t.polarCoordinate[e];l&&n-r>Cs&&(this.polarCoordinate.push(r),l=!1),this.polarCoordinate.push(n)}l&&this.polarCoordinate.push(r)}else this.cp={x:t.x,y:t.y},this.polarCoordinate=[...n]}getCp(){return this.cp}},Ts=class{knotVector=[];controlPoints=[];dimNUBS=0;isClamped=!1;isUniform=!1;isBezier=!1;minKnot=0;maxKnot=0;constructor(e,t,n){if(t<1)throw Error(`The dimension must be at least 1!`);for(;n.length<t+1;)n.unshift({...n[0]});this.dimNUBS=t,this.isClamped=e,this.isUniform=!0,this.isBezier=!1,this.createUniformKnotVector(e,n.length+this.dimNUBS-1);let r=[],i=0;for(let e=0;e<this.dimNUBS-1;e++)r.push(this.knotVector[i++]);for(let e of n)r.push(this.knotVector[i++]),this.controlPoints.push(new ws(e,r)),r.shift()}createUniformKnotVector(e,t){if(t<2*this.dimNUBS)throw Error(`The knot vector must have at least two time the dimension elements.`);let n;if(e){this.minKnot=0,this.maxKnot=1;for(let e=0;e<this.dimNUBS;e++)this.knotVector.push(0);n=t+1-2*this.dimNUBS}else{n=t+1;let e=this.dimNUBS;this.minKnot=e/(n+1),this.maxKnot=(n-e)/n}let r=n;for(let e=1;e<n;e++)this.knotVector.push(e/r);if(e)for(let e=0;e<this.dimNUBS;e++)this.knotVector.push(1)}getMultiplicity(e){let t=0;for(let n of this.knotVector)Math.abs(n-e)<Cs&&t++;return t}insertKnotAtCurrentPosition(e,t,n,r){let i=this.getMultiplicity(t);for(let a=0;a<e;a++){r.add(t);let o=[],s=n.next();for(let e=i+a;e<this.dimNUBS;e++){let e=s;s=n.next(),o.push(new ws(e,s,t))}for(let e=i+a;e<this.dimNUBS;e++)n.previous(),e>i+a&&n.remove();for(let e of o)n.add(e);if(a<e-1)for(let e=i+a;e<this.dimNUBS;e++)n.previous()}}toBezier(){let e=new Es(this.knotVector),t=new Es(this.controlPoints);if(this.isClamped)for(let t=0;t<this.dimNUBS;t++)e.next();else for(let t=0;t<this.dimNUBS-1;t++)e.next(),e.remove();let n=e.next();for(;this.maxKnot-n>Cs;){let r=n,i=0;for(;Math.abs(n-r)<Cs;)i++,n=e.next(),t.next();i<this.dimNUBS&&(e.previous(),this.insertKnotAtCurrentPosition(this.dimNUBS-i,r,t,e),e.next()),t.previous()}if(!this.isClamped)for(let t=0;t<this.dimNUBS-1;t++)e.next(),e.remove();this.isClamped=!0,this.isBezier=!0}getControlPoints(){return this.controlPoints.map(e=>({x:e.getCp().x,y:e.getCp().y}))}getBezierCP(){this.isBezier||this.toBezier();let e=[];for(let t=1;t<this.controlPoints.length-1;t++)e.push({x:this.controlPoints[t].getCp().x,y:this.controlPoints[t].getCp().y});return e}},Es=class{items;cursor=0;lastRet=-1;constructor(e){this.items=e}next(){let e=this.items[this.cursor];return this.lastRet=this.cursor,this.cursor++,e}previous(){return this.cursor--,this.lastRet=this.cursor,this.items[this.cursor]}remove(){if(this.lastRet===-1)throw Error(`no last returned`);this.lastRet<this.cursor?(this.items.splice(this.lastRet,1),this.cursor--):this.items.splice(this.lastRet,1),this.lastRet=-1}add(e){this.items.splice(this.cursor,0,e),this.cursor++,this.lastRet=-1}};const Ds=1.3,Os=.5;function ks(e,t){return{x:e.x+t.x,y:e.y+t.y}}function As(e,t){return{x:e.x-t.x,y:e.y-t.y}}function js(e,t){return{x:e.x*t,y:e.y*t}}function Ms(e){return Math.hypot(e.x,e.y)}function Ns(e){return{x:Math.cos(e),y:Math.sin(e)}}function Ps(e){let t=e.getPosition(),n=e.getAnchor();return{x:t.x+n.x,y:t.y+n.y}}var Fs=class e extends Ts{firstLabelPosition={x:0,y:0};constructor(e,t,n){typeof e==`boolean`?super(e,t,n):super(!0,e,t)}getFirstLabelPosition(){return this.firstLabelPosition}setFirstLabelPosition(e){this.firstLabelPosition=e}static createSideSelfLoop(t,n,r){let i=ps(t.getSide()),a=Ps(t),o=Ps(n),s=ks(a,js(Ns(i),r)),c=ks(o,js(Ns(i),r)),l=js(As(s,c),1/2),u=ks(ks(c,l),js(Ns(i),Ms(l)));return new e(3,[a,s,u,c,o])}static createCornerSelfLoop(t,n,r,i){let a=ps(t.getSide()),o=ps(n.getSide()),s=Ps(t),c=Ps(n),l=ks(s,js(Ns(a),Ds*r)),u=ks(c,js(Ns(o),Ds*i)),d=0,f=0;switch(t.getSide()){case`WEST`:d=2*(s.x-r)-Os*(l.x+u.x);break;case`EAST`:d=2*(s.x+r)-Os*(l.x+u.x);break;case`NORTH`:f=2*(s.y-r)-Os*(l.y+u.y);break;case`SOUTH`:f=2*(s.y+r)-Os*(l.y+u.y)}switch(n.getSide()){case`WEST`:d=2*(c.x-i)-Os*(u.x+l.x);break;case`EAST`:d=2*(c.x+i)-Os*(u.x+l.x);break;case`NORTH`:f=2*(c.y-i)-Os*(u.y+l.y);break;case`SOUTH`:f=2*(c.y+i)-Os*(u.y+l.y)}return new e(3,[s,l,{x:d,y:f},u,c])}static createAcrossSelfLoop(t,n,r,i,a){let o=Ps(t),s=Ps(n);if(i.length!==2)throw Error(`AssertionError: cornerBendPoints.size() == 2`);let c=i[0],l=i[1],u=js(ks(l,c),Os);return new e(3,[o,r,c,u,l,a,s])}static createThreeSideSelfLoop(t,n,r,i,a){let o=Ps(t),s=Ps(n);if(i.length!==3)throw Error(`AssertionError: cornerBendPoints.size() == 3`);let c=i[0],l=i[1],u=i[2];return new e(3,[o,r,c,l,u,a,s])}static createFourSideSelfLoop(t,n,r,i,a){let o=Ps(t),s=Ps(n);if(i.length!==4)throw Error(`AssertionError: cornerBendPoints.size() == 4`);let c=i[0],l=i[1],u=i[2],d=i[3];return new e(3,[o,r,c,l,u,d,a,s])}};const Is=1e-8;function Ls(e,t,n){return Math.abs(t-e)<Is||Math.abs(n-e)<Is?!0:t-e>Is?e-n>Is:n-e>Is}function Rs(e,t){return e!==t&&(e===`WEST`||e===`EAST`)!=(t===`WEST`||t===`EAST`)}function zs(e){return e.getType()===`EXTERNAL_PORT`&&(e.getProperty(j)===`WEST`||e.getProperty(j)===`EAST`)}var Bs=class{edgesRemainingLayer=[];splineSegmentsLayer=[];leftPortsLayer=[];rightPortsLayer=[];selfLoopsLayer=/* @__PURE__ */ new Set;startEdges=[];allSplineSegments=[];edgeToSegmentMap=/* @__PURE__ */ new Map;successingEdge=/* @__PURE__ */ new Map;process(e){if(e.getLayers().length===0){e.getSize().x=0;return}let t=e.getProperty(kn),n=e.getProperty(_n),r=e.getProperty(wt),i=e.getProperty(re)===`SLOPPY`,a=e.getProperty(Ue);this.startEdges=[],this.allSplineSegments=[],this.successingEdge=/* @__PURE__ */ new Map;let o=e.getLayers(),s=o[0],c=o[o.length-1],l=s.getNodes().length>0&&s.getNodes().every(e=>zs(e)),u=c.getNodes().length>0&&c.getNodes().every(e=>zs(e)),d=0,f=null;for(let p=0;p<=o.length;p++){let m=p<o.length?o[p]:null;this.clearThenFillMappings(f,m),this.createSegmentsAndComputeRanking(e);let h=0;for(let e of this.splineSegmentsLayer)e.isStraight||(h=Math.max(h,e.rank+1));let g=0,_=d,v=f===null||l&&f===s,y=m===null||u&&m===c;if(h>0){let e=0;f!==null&&(e+=n),e+=(h-1)*r,m!==null&&(e+=n),i&&m!==null&&(e=Math.max(e,this.computeSloppySpacing(m,r,t,a))),e<t&&!v&&!y&&(g=(t-e)/2,e=t),_+=e}else!v&&!y&&(_+=t);m!==null&&Va(m,_),this.routeSelfLoops(n);for(let e of this.splineSegmentsLayer)e.boundingBox.x=d,e.boundingBox.width=_-d,e.xDelta=g,e.isWestOfInitialLayer=f===null;this.allSplineSegments.push(...this.splineSegmentsLayer),d=_,m!==null&&(d+=m.getSize().x),f=m}e.getSize().x=d;for(let e of this.startEdges){let t=this.getEdgeChain(e);t.length>0&&e.setProperty(Ve,t);let n=this.getSplinePath(e);n.length>0&&e.setProperty(g,n)}}getEdgeChain(e){let t=[],n=e;for(;n!==null;)t.push(n),n=this.successingEdge.get(n)??null;return t}getSplinePath(e){let t=[],n=e;for(;n!==null;){let e=this.edgeToSegmentMap.get(n);if(!e)break;e.sourcePort=n.getSource(),e.targetPort=n.getTarget(),t.push(e),n=this.successingEdge.get(n)??null}if(t.length>0){let e=t[0];e.initialSegment=!0,e.sourceNode=e.edges[0].getSource().getNode();let n=t[t.length-1];n.lastSegment=!0,n.targetNode=n.edges[0].getTarget().getNode()}return t}clearThenFillMappings(e,t){if(this.leftPortsLayer=[],this.rightPortsLayer=[],this.edgesRemainingLayer=[],this.splineSegmentsLayer=[],this.selfLoopsLayer=/* @__PURE__ */ new Set,e!==null)for(let n of e.getNodes())for(let r of n.getPorts(`EAST`)){this.leftPortsLayer.push(r);for(let n of r.getOutgoingEdges()){if(n.isSelfLoop())continue;this.edgesRemainingLayer.push(n),this.findAndAddSuccessor(n),Us(n.getSource().getNode())&&this.startEdges.push(n);let r=n.getTarget(),i=r.getNode().getLayer();if(i===t)this.rightPortsLayer.push(r);else if(i===e)this.leftPortsLayer.push(r);else{let e=this.edgesRemainingLayer.indexOf(n);e!==-1&&this.edgesRemainingLayer.splice(e,1)}}}if(t!==null)for(let n of t.getNodes()){for(let e of n.getPorts())for(let t of e.getOutgoingEdges())t.isSelfLoop()&&this.selfLoopsLayer.add(t);for(let r of n.getPorts(`WEST`)){this.rightPortsLayer.push(r);for(let n of r.getOutgoingEdges()){if(n.isSelfLoop())continue;this.edgesRemainingLayer.push(n),this.findAndAddSuccessor(n),Us(n.getSource().getNode())&&this.startEdges.push(n);let r=n.getTarget(),i=r.getNode().getLayer();if(i===t)this.rightPortsLayer.push(r);else if(i===e)this.leftPortsLayer.push(r);else{let e=this.edgesRemainingLayer.indexOf(n);e!==-1&&this.edgesRemainingLayer.splice(e,1)}}}}}routeSelfLoops(e){if(this.selfLoopsLayer.size===0)return;let t=e>0?e:20;for(let e of this.selfLoopsLayer){let n=e.getSource(),r=e.getTarget();if(n===null||r===null||e.getBendPoints().length>0)continue;let i=n.getSide(),a=r.getSide();if(i===`UNDEFINED`||a===`UNDEFINED`)continue;let o=null;if(i===a?o=Fs.createSideSelfLoop(n,r,t):Rs(i,a)&&(o=Fs.createCornerSelfLoop(n,r,t,t)),o===null)continue;let s=n.getNode(),c=s===null?{x:0,y:0}:s.getPosition();for(let t of o.getBezierCP())e.getBendPoints().push({x:t.x+c.x,y:t.y+c.y})}}createSegmentsAndComputeRanking(e){this.createSplineSegmentsForHyperEdges(`LEFT`,!0),this.createSplineSegmentsForHyperEdges(`LEFT`,!1),this.createSplineSegmentsForHyperEdges(`RIGHT`,!0),this.createSplineSegmentsForHyperEdges(`RIGHT`,!1),this.createSplineSegments();for(let e=0;e<this.splineSegmentsLayer.length;e++){let t=this.splineSegmentsLayer[e];for(let n=e+1;n<this.splineSegmentsLayer.length;n++)this.createDependency(t,this.splineSegmentsLayer[n])}this.breakCycles(this.splineSegmentsLayer,e.getProperty(P)),this.topologicalNumbering(this.splineSegmentsLayer)}createSplineSegments(){for(let e of this.edgesRemainingLayer){let t=e.getSource(),n;if(this.leftPortsLayer.includes(t))n=`LEFT`;else if(this.rightPortsLayer.includes(t))n=`RIGHT`;else throw Error(`Source port must be in one of the port sets.`);let r=e.getTarget(),i;if(this.leftPortsLayer.includes(r))i=`LEFT`;else if(this.rightPortsLayer.includes(r))i=`RIGHT`;else throw Error(`Target port must be in one of the port sets.`);let a=ls.fromSingleEdge(e,n,i,(e,t)=>Vs(e,t));this.edgeToSegmentMap.set(e,a),this.splineSegmentsLayer.push(a)}}createSplineSegmentsForHyperEdges(e,t){let n=e===`LEFT`?this.leftPortsLayer:this.rightPortsLayer;for(let r of n){let n=r.getAbsoluteAnchor().y,i=[],a=[];for(let e of r.getConnectedEdges())if(e.getProperty(A)===t&&this.edgesRemainingLayer.includes(e)){let t;t=e.getTarget()===r?e.getSource():e.getTarget();let o=t.getAbsoluteAnchor().y;if(Vs(o,n))continue;o<n?i.push({side:this.leftPortsLayer.includes(t)?`LEFT`:`RIGHT`,edge:e}):a.push({side:this.leftPortsLayer.includes(t)?`LEFT`:`RIGHT`,edge:e})}if(i.length>1){let t=ls.fromHyperEdge(r,i,e);for(let{edge:e}of i)this.edgeToSegmentMap.set(e,t);this.splineSegmentsLayer.push(t);for(let{edge:e}of i){let t=this.edgesRemainingLayer.indexOf(e);t!==-1&&this.edgesRemainingLayer.splice(t,1)}}if(a.length>1){let t=ls.fromHyperEdge(r,a,e);for(let{edge:e}of a)this.edgeToSegmentMap.set(e,t);this.splineSegmentsLayer.push(t);for(let{edge:e}of a){let t=this.edgesRemainingLayer.indexOf(e);t!==-1&&this.edgesRemainingLayer.splice(t,1)}}}}createDependency(e,t){if(e.hyperEdgeTopYPos>t.hyperEdgeBottomYPos||t.hyperEdgeTopYPos>e.hyperEdgeBottomYPos)return;let n=0,r=0;for(let r of e.rightPorts)Ls(r.getAbsoluteAnchor().y,t.hyperEdgeTopYPos,t.hyperEdgeBottomYPos)&&n++;for(let r of e.leftPorts)Ls(r.getAbsoluteAnchor().y,t.hyperEdgeTopYPos,t.hyperEdgeBottomYPos)&&n--;for(let n of t.rightPorts)Ls(n.getAbsoluteAnchor().y,e.hyperEdgeTopYPos,e.hyperEdgeBottomYPos)&&r++;for(let n of t.leftPorts)Ls(n.getAbsoluteAnchor().y,e.hyperEdgeTopYPos,e.hyperEdgeBottomYPos)&&r--;n<r?new as(e,t,r-n):r<n?new as(t,e,n-r):(new as(t,e,0),new as(e,t,0))}breakCycles(e,t){let n=[],r=[],i=-1;for(let t of e){t.mark=i--;let e=0,a=0;for(let e of t.outgoing)a+=e.weight;for(let n of t.incoming)e+=n.weight;t.inweight=e,t.outweight=a,a===0?r.push(t):e===0&&n.push(t)}let a=new Set(e),o=e.length,s=o+1,c=o-1,l=[];for(;a.size>0;){for(;r.length>0;){let e=r.shift();a.delete(e),e.mark=c--,this.updateNeighbors(e,n,r)}for(;n.length>0;){let e=n.shift();a.delete(e),e.mark=s++,this.updateNeighbors(e,n,r)}let e=-(2**53-1);for(let t of a){let n=t.outweight-t.inweight;n>=e&&(n>e&&(l.length=0,e=n),l.push(t))}if(l.length>0){let e=t===void 0?l[0]:l[t.nextInt(l.length)];a.delete(e),e.mark=s++,this.updateNeighbors(e,n,r),l.length=0}}let u=e.length+1;for(let t of e)t.mark<o&&(t.mark+=u);for(let t of e){let e=t.outgoing;for(let n=e.length-1;n>=0;n--){let r=e[n],i=r.target;if(t.mark>i.mark){e.splice(n,1);let a=i.incoming.indexOf(r);a!==-1&&i.incoming.splice(a,1),r.weight>0&&(r.source=i,i.outgoing.push(r),r.target=t,t.incoming.push(r))}}}}updateNeighbors(e,t,n){for(let n of e.outgoing)n.target.mark<0&&n.weight>0&&(n.target.inweight-=n.weight,n.target.inweight<=0&&n.target.outweight>0&&t.push(n.target));for(let t of e.incoming)t.source.mark<0&&t.weight>0&&(t.source.outweight-=t.weight,t.source.outweight<=0&&t.source.inweight>0&&n.push(t.source))}topologicalNumbering(e){let t=[],n=[];for(let r of e)r.rank=0,r.inweight=r.incoming.length,r.outweight=r.outgoing.length,r.inweight===0&&t.push(r),r.outweight===0&&r.leftPorts.length===0&&n.push(r);let r=-1;for(;t.length>0;){let e=t.shift();for(let n of e.outgoing){let i=n.target;i.rank=Math.max(i.rank,e.rank+1),r=Math.max(r,i.rank),i.inweight--,i.inweight===0&&t.push(i)}}if(r>-1){for(let e of n)e.rank=r;for(;n.length>0;){let e=n.shift();for(let t of e.incoming){let r=t.source;r.leftPorts.length>0||(r.rank=Math.min(r.rank,e.rank-1),r.outweight--,r.outweight===0&&n.push(r))}}}}computeSloppySpacing(e,t,n,r){let i=0;for(let t of e.getNodes()){let e=0;for(let n of t.getIncomingEdges()){let t=n.getSource().getAbsoluteAnchor().y,r=n.getTarget().getAbsoluteAnchor().y;e=Math.max(e,Math.abs(r-t))}i=Math.max(i,e)}return r*Math.min(1,t/n)*i}findAndAddSuccessor(e){let t=e.getTarget().getNode();if(Hs(t))return;let n=t.getOutgoingEdges();n.length>0&&this.successingEdge.set(e,n[0])}};function Vs(e,t){return Math.abs(e-t)<.2}function Hs(e){let t=e.getType();return t===`NORMAL`||t===`BREAKING_POINT`}function Us(e){let t=e.getType();return t===`NORMAL`||t===`NORTH_SOUTH_PORT`||t===`EXTERNAL_PORT`||t===`BREAKING_POINT`}function Ws(e){let t=e.getProperty(wt),n=e.getProperty(_n),r=e.getProperty(re),i=e.getProperty(Mn);for(let t of e.getLayers()){let e=0;for(let n of t.getNodes())n.id=e++}let a=[];for(let t of e.getLayers())for(let e of t.getNodes())for(let t of e.getPorts())for(let e of t.getOutgoingEdges())e.isSelfLoop()||e.hasProperty(g)&&a.push(e);for(let e of a){let a=e.getProperty(g);if(a!=null){for(let e of a)Gs(e,t,n,r,i);e.setProperty(g,null)}}for(let e of a)Qs(e.getProperty(Ve)??[],e,r),e.setProperty(Ve,null)}function Gs(e,t,n,r,i){if(!e.handled){e.handled=!0;for(let a of e.edges){if(e.isStraight&&!e.isHyperEdge()){Ks(e);continue}let o=e.edgeInformation.get(a);o.invertedLeft||o.invertedRight?qs(a,e,n,t):r===`SLOPPY`&&(o.normalSourceNode||o.normalTargetNode)&&tc(e,i)&&!e.isHyperEdge()?Ys(a,e):Js(a,e,n,t)}if(e.inverseOrder)for(let t of e.edges)t.getBendPoints().reverse()}}function Ks(e){let t=e.boundingBox.x,n={x:t+(e.boundingBox.x+e.boundingBox.width-t)/2,y:e.centerControlPointY};e.edges[0].getBendPoints().push(n)}function qs(e,t,n,r){let i=t.boundingBox.x,a=t.boundingBox.x+t.boundingBox.width,o=t.edgeInformation.get(e),s=o.startY,c=o.endY,l=o.invertedLeft?{x:a,y:s}:{x:i,y:s},u=o.invertedRight?{x:i,y:c}:{x:a,y:c},d=i;t.isWestOfInitialLayer||(d+=n),d+=t.xDelta+t.rank*r;let f={x:d,y:s},p={x:d,y:c};e.getBendPoints().push(l,f),t.edges.length>1&&e.getBendPoints().push({x:d,y:t.centerControlPointY}),e.getBendPoints().push(p,u)}function Js(e,t,n,r){let i=t.boundingBox.x,a=t.boundingBox.x+t.boundingBox.width,o=t.edgeInformation.get(e),s=o.startY,c=o.endY,l={x:i,y:s},u={x:a,y:c},d=i;t.isWestOfInitialLayer||(d+=n),d+=t.xDelta+t.rank*r;let f={x:d,y:s},p={x:d,y:c};e.getBendPoints().push(l,f),t.edges.length>1&&e.getBendPoints().push({x:d,y:t.centerControlPointY}),e.getBendPoints().push(p,u)}function Ys(e,t){let n=t.edgeInformation.get(e),r=t.boundingBox.x,i=t.boundingBox.x+t.boundingBox.width,a=n.startY,o=n.endY,s=a<o,c={x:r,y:a},l={x:i,y:o},u=(r+i)/2,d={x:u,y:a},f={x:u,y:o},p=Zs(e,a,o),m=t.sourcePort.getAbsoluteAnchor(),h={x:u,y:p},g=t.targetPort.getAbsoluteAnchor(),_=Ss(2,[m,h,g]),v=!1,y=t.sourcePort.getNode();if(y!==null&&y.getLayer()!==null&&n.normalSourceNode){let e=y.getLayer();if(!(s&&y.id<e.getNodes().length-1||!s&&y.id>0))v=!0;else{let t=s?y.id+1:y.id-1,n=e.getNodes()[t],r=Xs(n);v=!(ys(r,m,_[0])||_s(r,m,_[0]))}}let b=!1,x=t.targetPort.getNode();if(x!==null&&x.getLayer()!==null&&n.normalTargetNode){let e=x.getLayer();if(!(s&&x.id>0||!s&&x.id<e.getNodes().length-1))b=!0;else{let t=s?x.id-1:x.id+1,n=e.getNodes()[t],r=Xs(n);b=!(ys(r,_[0],g)||_s(r,_[0],g))}}v&&b&&e.getBendPoints().push(h),v||e.getBendPoints().push(c,d),b||e.getBendPoints().push(f,l)}function Xs(e){let t=e.getPosition(),n=e.getSize(),r=e.getMargin();return{x:t.x-r.left,y:t.y-r.top,width:n.x+r.left+r.right,height:n.y+r.top+r.bottom}}function Zs(e,t,n){let r=0,i=0;if(e.getTarget()!==null)for(let t of e.getTarget().getNode().getPorts())r+=t.getIncomingEdges().length;else r=1;if(e.getSource()!==null)for(let t of e.getSource().getNode().getPorts())i+=t.getOutgoingEdges().length;else i=1;let a=Math.sign(i-r);return(n+t)/2+(n-t)*(.4*a)}function Qs(e,t,n){if(e.length===0)return;let r=t===null?e[0]:t,i=r.getSource();if(!Us(i.getNode()))throw Error(`The target node of the edge must be a normal node or a northSouthPort.`);let a=[i.getAbsoluteAnchor()];if(rc(i.getSide())){let e=i.getProperty(b);a.push({x:i.getAbsoluteAnchor().x,y:e??i.getAbsoluteAnchor().y})}let o=null,s=!1;for(let t of e){let e=t.getBendPoints();if(e.length>0){if(s){let t={x:(o.x+e[0].x)/2,y:(o.y+e[0].y)/2};a.push(t),s=!1}else s=!0;o={...e[e.length-1]},a.push(...e.map(e=>({x:e.x,y:e.y}))),e.length=0}}let c=r.getTarget();if(rc(c.getSide())){let e=c.getProperty(b);a.push({x:c.getAbsoluteAnchor().x,y:e??c.getAbsoluteAnchor().y})}a.push(c.getAbsoluteAnchor()),n===`CONSERVATIVE`&&$s(a,i,c);let l=new Ts(!0,3,a).getBezierCP();r.getBendPoints().push(...l)}function $s(e,t,n){let r=e[0],i=e[1],a=ps(t.getSide()),o={x:Math.cos(a)*5,y:Math.sin(a)*5},s={x:i.x-r.x,y:i.y-r.y},c={x:ec(o.x,s.x),y:ec(o.y,s.y)};c.x+=r.x,c.y+=r.y,e.splice(1,0,c);let l=e[e.length-1],u=e[e.length-2],d=ps(n.getSide()),f={x:Math.cos(d)*5,y:Math.sin(d)*5},p={x:u.x-l.x,y:u.y-l.y},m={x:ec(f.x,p.x),y:ec(f.y,p.y)};m.x+=l.x,m.y+=l.y,e.splice(e.length-1,0,m)}function ec(e,t){return Math.abs(e)<Math.abs(t)?e:t}function tc(e,t){if(t===`NONE`)return!0;let n=e.boundingBox.x,r=e.boundingBox.x+e.boundingBox.width;if(e.initialSegment&&e.sourceNode!==null){let t=e.sourceNode,r=nc(t);if(n-(t.getPosition().x+t.getSize().x)>r)return!1}if(e.lastSegment&&e.targetNode!==null){let t=e.targetNode,n=nc(t);if(t.getPosition().x-r>n)return!1}return!0}function nc(e){return e.getLayer().getSize().x-e.getSize().x/2}function rc(e){return e===`NORTH`||e===`SOUTH`}function ic(e,t=!1){let n;switch(e){case`RIGHT`:n=`EAST`;break;case`LEFT`:n=`WEST`;break;case`DOWN`:n=`SOUTH`;break;case`UP`:n=`NORTH`;break;default:n=`EAST`}return t?ac(n):n}function ac(e){switch(e){case`NORTH`:return`SOUTH`;case`SOUTH`:return`NORTH`;case`EAST`:return`WEST`;case`WEST`:return`EAST`;default:return`UNDEFINED`}}function oc(e){let t=e.getProperty(S);return t===`UNDEFINED`?e.getProperty(Pt)>=1?`RIGHT`:`DOWN`:t}function sc(e,t){let n=e.getGraph()?.getParentNode()??null;for(;n!==null;){if(n===t)return!0;n=n.getGraph()?.getParentNode()??null}return!1}function cc(e,t){let n=e.getPosition().x+e.getAnchor().x,r=e.getPosition().y+e.getAnchor().y,i=e.getNode();for(;i!==null&&i!==t;)n+=i.position.x,r+=i.position.y,i=i.getGraph()?.getParentNode()??null;return{x:n,y:r}}function lc(e,t){let n=/* @__PURE__ */ new Set,r=e;for(;r!==null;)n.add(r),r=r.getGraph()?.getParentNode()??null;for(r=t;r!==null;){if(n.has(r))return r;r=r.getGraph()?.getParentNode()??null}return null}function uc(t){let n=t.getSource(),r=t.getTarget(),i=n.getNode(),o=r.getNode(),s,c;if(i===o&&t.getProperty(e)){let e=i,t=e.getGraph(),a=!1;for(;t!==null;){if(t.getProperty(mn)===`INCLUDE_CHILDREN`){a=!0;break}t=t.getParentNode()?.getGraph()??null}if(a)s=n.getAbsoluteAnchor(),c=r.getAbsoluteAnchor();else{let t=(t,n)=>{switch(t){case`WEST`:return{x:e.position.x+n.getPosition().x+n.getSize().x,y:e.position.y+n.getPosition().y+n.getSize().y/2};case`EAST`:return{x:e.position.x+n.getPosition().x,y:e.position.y+n.getPosition().y+n.getSize().y/2};case`NORTH`:return{x:e.position.x+n.getPosition().x+n.getSize().x/2,y:e.position.y+n.getPosition().y+n.getSize().y};case`SOUTH`:return{x:e.position.x+n.getPosition().x+n.getSize().x/2,y:e.position.y+n.getPosition().y};default:return n.getAbsoluteAnchor()}};s=t(n.getSide(),n),c=t(r.getSide(),r)}}else if(sc(o,i)){s={x:n.getPosition().x+n.getAnchor().x,y:n.getPosition().y+n.getAnchor().y};let e=r.getAbsoluteAnchor(),i=t.getProperty(a);c=i?{x:e.x+i.x,y:e.y+i.y}:e}else if(sc(i,o))s=cc(n,o),c=cc(r,o);else if(i===o){s=n.getAbsoluteAnchor();let e=r.getAbsoluteAnchor(),i=t.getProperty(a);c=i?{x:e.x+i.x,y:e.y+i.y}:e}else{let e=lc(i,o);s=cc(n,e),c=cc(r,e)}return{source:s,target:c}}function dc(e,t,n){if(t===n)return e;let r=t,i=null;do{let t=r.getOffset();if(e.x+=t.x,e.y+=t.y,i=r.getParentNode(),i!==null){let t=r.getPadding();e.x+=t.left,e.y+=t.top,e.x+=i.getPosition().x,e.y+=i.getPosition().y,r=i.getGraph()}}while(i!==null);r=n;do{let t=r.getOffset();if(e.x-=t.x,e.y-=t.y,i=r.getParentNode(),i!==null){let t=r.getPadding();e.x-=t.left,e.y-=t.top,e.x-=i.getPosition().x,e.y-=i.getPosition().y,r=i.getGraph()}}while(i!==null);return e}function fc(e,t){return dc({x:0,y:0},e,t)}function pc(e,t,n,r,i,a,o,s,c){let u=n,d=new V(c);d.setType(`EXTERNAL_PORT`),d.setProperty(j,u),d.setProperty(Xe,o),d.setProperty(O,`FIXED_POS`);let f=e.getProperty(E);d.setProperty(E,f);let p=new H;if(p.setNode(d),D.isSideFixed(t)||(u=r>=0?ic(s):ac(ic(s)),e.setProperty(l,u),e instanceof H&&e.setSide(u)),D.isRatioFixed(t)||D.isPosFixed(t)){let e=0;switch(u){case`WEST`:case`EAST`:e=a?.y??0,D.isRatioFixed(t)&&(e/=i?.y??1);break;case`NORTH`:case`SOUTH`:e=a?.x??0,D.isRatioFixed(t)&&(e/=i?.x??1)}d.setProperty(Kn,e)}let m={x:o.x/2,y:o.y/2},h=!1;if(e.getProperty(te)!==void 0){let t=e.getProperty(te);t!=null&&(m.x=t.x,m.y=t.y,h=!0)}switch(u){case`WEST`:d.setLayerConstraint(`FIRST_SEPARATE`),d.setEdgeConstraint(`OUTGOING_ONLY`),d.size.y=o.y,f<0&&(d.size.x=-f),p.setSide(`EAST`),h||(m.x=o.x),m.x-=o.x;break;case`EAST`:d.setLayerConstraint(`LAST_SEPARATE`),d.setEdgeConstraint(`INCOMING_ONLY`),d.size.y=o.y,f<0&&(d.size.x=-f),p.setSide(`WEST`),h||(m.x=0);break;case`NORTH`:d.setInLayerConstraint(`TOP`),d.size.x=o.x,f<0&&(d.size.y=-f),p.setSide(`SOUTH`),h||(m.y=o.y),m.y-=o.y;break;case`SOUTH`:d.setInLayerConstraint(`BOTTOM`),d.size.x=o.x,f<0&&(d.size.y=-f),p.setSide(`NORTH`),h||(m.y=0)}return p.getPosition().x=m.x,p.getPosition().y=m.y,d.setProperty(te,{x:m.x,y:m.y}),a!=null&&(d.getPosition().x=a.x,d.getPosition().y=a.y),d.setProperty(j,u),d}function mc(e,t){let n=e.getNode(),r=n.size.x,i=n.size.y;if(r<=0&&i<=0)return`UNDEFINED`;let a=e.getPosition().x,o=e.getPosition().y,s=e.size.x,c=e.size.y;switch(t){case`LEFT`:case`RIGHT`:if(a<0)return`WEST`;if(a+s>r)return`EAST`;break;case`UP`:case`DOWN`:if(o<0)return`NORTH`;if(o+c>i)return`SOUTH`}let l=(a+s/2)/r,u=(o+c/2)/i;return l+u<=1&&l-u<=0?`WEST`:l+u>=1&&l-u>=0?`EAST`:u<.5?`NORTH`:`SOUTH`}function hc(e,t){let n=e.getNode(),r=e.getPosition();switch(t){case`NORTH`:return-(r.y+e.size.y);case`EAST`:return r.x-(n?.size.x??0);case`SOUTH`:return r.y-(n?.size.y??0);case`WEST`:return-(r.x+e.size.x)}return 0}function gc(e,t,n){let r=e.getSide(),i=D.isSideFixed(t);r===`UNDEFINED`&&i&&(r=mc(e,n),e.setSideInferred(r),!e.hasProperty(E)&&r!==`UNDEFINED`&&(e.getPosition().x!==0||e.getPosition().y!==0)&&e.setProperty(E,hc(e,r)));let a=e.size,o=e.getAnchor();if(r!==`UNDEFINED`)switch(r){case`NORTH`:o.x=a.x/2;break;case`EAST`:o.x=a.x,o.y=a.y/2;break;case`SOUTH`:o.x=a.x/2,o.y=a.y;break;case`WEST`:o.y=a.y/2}else o.x=a.x/2,o.y=a.y/2}function _c(e){let t=e.getProperty(ne);for(let n of e.getLayerlessNodes())vc(n,t);for(let n of e.getLayers())for(let e of n.getNodes())vc(e,t)}function vc(e,t){if(D.isSideFixed(e.getProperty(O)))for(let n of e.getPorts())n.getSide()===`UNDEFINED`&&yc(n,t);else{for(let n of e.getPorts())yc(n,t);e.setProperty(O,`FIXED_SIDE`)}}function yc(e,t=!1,n=`RIGHT`){let r=e.getProperty(M);if(r!=null){e.setSideInferred(r.getProperty(j));return}let i=0;if(t){for(let t of e.getIncomingEdges())i+=t.getProperty(A)?-1:1;for(let t of e.getOutgoingEdges())i-=t.getProperty(A)?-1:1}else i=e.getNetFlow();let a=ic(n),o=i<0?a:ac(a);e.setSideInferred(o)}const bc={top:0,left:0,right:0,bottom:0};function xc(e,t){let n=e.placement??t.getProperty(N);return Array.isArray(n)?n:String(n??``).split(/[\s,]+/).filter(Boolean)}function Sc(e){let t=e.includes(`H_LEFT`)||e.includes(`H_RIGHT`);return e.includes(`H_PRIORITY`)&&t||!e.includes(`H_PRIORITY`)&&e.includes(`V_CENTER`)&&t}function Cc(e,t,n,r){let i=n.includes(`H_RIGHT`)?`right`:n.includes(`H_LEFT`)?`left`:`center`,a=n.includes(`V_BOTTOM`)?`bottom`:n.includes(`V_CENTER`)?`center`:`top`;Sc(n)?(e.position.x=i===`right`?t.x+r:-e.size.x-r,e.position.y=a===`bottom`?t.y-e.size.y:a===`center`?(t.y-e.size.y)/2:0):(e.position.y=a===`bottom`?t.y+r:-e.size.y-r,e.position.x=i===`right`?t.x-e.size.x:i===`center`?(t.x-e.size.x)/2:0)}function wc(e,t,n){if(Sc(t)){let r={...bc};return t.includes(`H_LEFT`)&&(r.left=n+e.x),t.includes(`H_RIGHT`)&&(r.right=n+e.x),r}let r={...bc};return t.includes(`V_TOP`)&&(r.top=n+e.y),t.includes(`V_BOTTOM`)&&(r.bottom=n+e.y),r}function Tc(e){return e.hasProperty(cn)?e.getProperty(cn):e.getGraph()?.getProperty(cn)??5}function Ec(e){let t=e.getLayers();for(let e of t)for(let t of e.getNodes())Dc(t)}function Dc(e){let t=e.getSize(),n=0,r=0,i=t.x,a=t.y;for(let t of e.getPorts()){let e=t.getPosition(),o=t.getSize();n=Math.min(n,e.x),r=Math.min(r,e.y),i=Math.max(i,e.x+o.x),a=Math.max(a,e.y+o.y);for(let o of t.getLabels()){let t=o.position,s=o.size;n=Math.min(n,e.x+t.x),r=Math.min(r,e.y+t.y),i=Math.max(i,e.x+t.x+s.x),a=Math.max(a,e.y+t.y+s.y)}}for(let o of e.getLabels()){let s=o.position,c=o.size;n=Math.min(n,s.x),r=Math.min(r,s.y),i=Math.max(i,s.x+c.x),a=Math.max(a,s.y+c.y);let l=xc(o,e);if(l.includes(`OUTSIDE`)){let o=wc(c,l,Tc(e));n=Math.min(n,-o.left),r=Math.min(r,-o.top),i=Math.max(i,t.x+o.right),a=Math.max(a,t.y+o.bottom)}}let o=e.getMargin();o.left=-n,o.top=-r,o.right=i-t.x,o.bottom=a-t.y}var Oc=class{newEdge;graph;type;constructor(e,t,n){this.newEdge=e,this.graph=t,this.type=n}getNewEdge(){return this.newEdge}getGraph(){return this.graph}getType(){return this.type}getActualSource(){let e=this.newEdge.getSource();return e!==null&&e.getNode().getType().toString()===`EXTERNAL_PORT`?e.getNode().getProperty(L):e}getActualTarget(){let e=this.newEdge.getTarget();return e!==null&&e.getNode().getType().toString()===`EXTERNAL_PORT`?e.getNode().getProperty(L):e}};function kc(e,t){let n=0,r=e;for(;r!==t;){let e=r.getParentNode();if(e===null)break;let t=e.getGraph();if(t===null)break;r=t,n++}return n}function Ac(e,t,n){let r=e.getType(),i=t.getType();return r===`OUTPUT`&&i===`INPUT`?-1:r===`INPUT`&&i===`OUTPUT`?1:r===`OUTPUT`?kc(t.getGraph(),n)-kc(e.getGraph(),n):kc(e.getGraph(),n)-kc(t.getGraph(),n)}var jc=class{origEdges=[];newEdge;dummyNode;dummyPort;type;exported;constructor(e,t,n,r,i,a){this.origEdges.push(e),this.newEdge=t,this.dummyNode=n,this.dummyPort=r,this.type=i,this.exported=a}},Mc=class{crossHierarchyMap=/* @__PURE__ */ new Map;dummyNodeMap=/* @__PURE__ */ new Map;topGraph=null;process(e){this.crossHierarchyMap=/* @__PURE__ */ new Map,this.topGraph=e,e.getProperty(mn)===`INCLUDE_CHILDREN`?(this.transformHierarchyEdges(e,null),this.removeOriginalEdges(),this.setSidesOfPortsToSidesOfDummyNodes(),e.setProperty(se,this.crossHierarchyMap),this.dummyNodeMap.clear()):(this.separateTransformHierarchyEdges(e),this.setContainerPortSidesByNetFlow(e),this.setSidesOfPortsToSidesOfDummyNodes(),this.removeOriginalEdges(),e.setProperty(se,this.crossHierarchyMap),this.dummyNodeMap.clear())}separateTransformHierarchyEdges(e){for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();e!==null&&(this.separateTransformHierarchyEdges(e),this.separateTransformNestedEdges(e,t),this.processInsideSelfLoops(e,t,t.getProperty(O),!0))}}separateTransformNestedEdges(e,t){let n=[],r=/* @__PURE__ */ new Set;for(let i of[...e.getLayerlessNodes()])if(i.getType()!==`EXTERNAL_PORT`)for(let a of i.getPorts()){for(let i of[...a.getOutgoingEdges()])if(!r.has(i)&&i.getTarget().getNode().getGraph()!==e){r.add(i);let o=this.introduceSeparateExternalPort(e,t,i,a,`OUTPUT`);o!==null&&n.push(o)}for(let i of[...a.getIncomingEdges()])if(!r.has(i)&&i.getSource().getNode().getGraph()!==e){r.add(i);let o=this.introduceSeparateExternalPort(e,t,i,a,`INPUT`);o!==null&&n.push(o)}}for(let t of n)e.getLayerlessNodes().includes(t.dummyNode)||e.getLayerlessNodes().push(t.dummyNode);n.length>0&&e.getProperty(w).add(`EXTERNAL_PORTS`)}introduceSeparateExternalPort(e,t,n,r,i){let a=i===`INPUT`?n.getSource():n.getTarget();if(a.getNode()!==t)return null;let o=a.getSide();if(o===`UNDEFINED`){let t=oc(e);o=i===`INPUT`?ac(ic(t)):ic(t)}let s=pc(a,t.getProperty(O),o,this.calculateNetFlow(a),null,a.getPosition(),a.getSize(),oc(e),e);s.setProperty(L,a),this.dummyNodeMap.has(a)||this.dummyNodeMap.set(a,s);let c=this.createDummyEdge(e,n),l=s.getPorts()[0];i===`INPUT`?(c.setSource(l),c.setTarget(r)):(c.setSource(r),c.setTarget(l));let u=new jc(n,c,s,l,i,!0);return this.addToMap(n,new Oc(c,e,i)),u}setContainerPortSidesByNetFlow(e){for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();if(e===null)continue;let n=t.getProperty(O);if(!D.isSideFixed(n))for(let n of t.getPorts()){if(n.getSide()!==`UNDEFINED`)continue;let t=ic(oc(e));n.setSideInferred(n.getNetFlow()>0?t:ac(t))}this.setContainerPortSidesByNetFlow(e)}}removeOriginalEdges(){for(let e of[...this.crossHierarchyMap.keys()]){let t=this.crossHierarchyMap.get(e)??[];if(e.getLabels().length>0&&t.length>0){let n=[...t].sort((e,t)=>Ac(e,t,this.topGraph));for(let t of[...e.getLabels()]){let r=-1;switch(t.placement===void 0?`CENTER`:t.placement){case`HEAD`:r=n.length-1;break;case`CENTER`:r=this.shallowestEdgeSegment(n);break;case`TAIL`:r=0}r!==-1&&(n[r].getNewEdge().getLabels().push(t),e.getLabels().splice(e.getLabels().indexOf(t),1))}}e.setSource(null),e.setTarget(null)}}shallowestEdgeSegment(e){let t=-1;for(let n=0;n<e.length;n++)if(e[n].getType()===`INPUT`){t=n===0?0:n-1;break}else n===e.length-1&&(t=n);return t}setSidesOfPortsToSidesOfDummyNodes(){for(let[e,t]of this.dummyNodeMap){t.setProperty(L,e),e.setProperty(M,t),e.setProperty($e,!0);let n=t.getProperty(j);e.setSide(n===`UNDEFINED`?`UNDEFINED`:n),e.getNode().setProperty(O,`FIXED_SIDE`),e.getNode().getGraph().getProperty(w).add(`NON_FREE_PORTS`)}}processInsideSelfLoops(t,n,r,i){if(n.getProperty(Ae)){for(let i of n.getPorts())for(let a of[...i.getOutgoingEdges()]){if(!(a.getTarget().getNode()===n&&a.getProperty(e)))continue;let i=a.getSource(),o=this.dummyNodeMap.get(i);o===void 0&&(o=pc(i,r,i.getSide(),-1,null,null,i.getSize(),oc(t),t),o.setProperty(L,i),this.dummyNodeMap.set(i,o),t.getLayerlessNodes().includes(o)||t.getLayerlessNodes().push(o));let s=a.getTarget(),c=this.dummyNodeMap.get(s);c===void 0&&(c=pc(s,r,s.getSide(),1,null,null,s.getSize(),oc(t),t),c.setProperty(L,s),this.dummyNodeMap.set(s,c),t.getLayerlessNodes().includes(c)||t.getLayerlessNodes().push(c));let l=this.createDummyEdge(t,a);l.setSource(o.getPorts()[0]),l.setTarget(c.getPorts()[0]),this.addToMap(a,new Oc(l,t,`OUTPUT`)),t.getProperty(w).add(`EXTERNAL_PORTS`)}if(i){let e=/* @__PURE__ */ new Map;n.getPorts().forEach((t,n)=>e.set(t,n));let r=t.getLayerlessNodes(),i=[...r].sort((t,n)=>{let r=t.getProperty(L),i=n.getProperty(L);if(r instanceof H&&i instanceof H){let t=e.get(r),n=e.get(i);if(t!==void 0&&n!==void 0)return t-n}return 0});i.some((e,t)=>e!==r[t])&&(r.length=0,r.push(...i))}}}calculateNetFlow(t){let n=t.getNode(),r=n.getProperty(Ae),i=0,a=0;for(let o of t.getOutgoingEdges()){let t=o.isSelfLoop(),s=t&&r&&o.getProperty(e),c=o.getTarget().getNode();t&&s?a++:t&&!s?i++:c.getGraph().getParentNode()===n?a++:i++}for(let o of t.getIncomingEdges()){let t=o.isSelfLoop(),s=t&&r&&o.getProperty(e),c=o.getSource().getNode();t&&s?i++:t&&!s?a++:c.getGraph().getParentNode()===n?i++:a++}return i-a}transformHierarchyEdges(e,t){let n=[];for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();if(e!==null){let r=this.transformHierarchyEdges(e,t);if(n.push(...r),this.processInsideSelfLoops(e,t,`FREE`,!1),e.getProperty(w).has(`EXTERNAL_PORTS`)){let n=t.getProperty(O);for(let r of t.getPorts()){let i=this.dummyNodeMap.get(r);i===void 0&&(i=pc(r,n,r.getSide(),-r.getNetFlow(),null,{x:0,y:0},r.getSize(),oc(e),e),i.setProperty(L,r),this.dummyNodeMap.set(r,i),e.getLayerlessNodes().includes(i)||e.getLayerlessNodes().push(i));let a=(t.getProperty(Yn)??[]).includes(`INSIDE`),o=i.getPorts()[0],s=t.getProperty(Yn)??[],c=!s.includes(`INSIDE`)&&!s.includes(`OUTSIDE`);for(let e of r.getLabels()){let t={text:``,position:{x:0,y:0},size:{x:e.size.x,y:e.size.y}};if(!a){let n=r.getSide(),i=0;if(c)switch(n){case`EAST`:i=Math.max(0,-e.position.x);break;case`WEST`:i=Math.max(0,e.size.x+e.position.x-r.getSize().x);break;case`NORTH`:i=Math.max(0,e.size.y+e.position.y-r.getSize().y);break;case`SOUTH`:i=Math.max(0,-e.position.y)}n===`EAST`||n===`WEST`?t.size.x=i:t.size.y=i}o.getLabels().push(t)}}}}}let r=[];return this.processInnerHierarchicalEdgeSegments(e,t,n,r),t!==null&&this.processOuterHierarchicalEdgeSegments(e,t,r),r}processInnerHierarchicalEdgeSegments(e,t,n,r){let i=[];for(let r of n){let a=null;if(r.type===`OUTPUT`)for(let o of[...r.origEdges]){let s=o.getTarget().getNode();if(s.getGraph()===e)this.connectChild(e,r,o,r.dummyPort,o.getTarget());else if(t===null||sc(s,t))this.connectSiblings(e,r,n,o);else{let n=this.introduceHierarchicalEdgeSegment(e,t,o,r.dummyPort,`OUTPUT`,a);n!==a&&i.push(n),n.exported&&(a=n)}}else for(let n of[...r.origEdges]){let o=n.getSource().getNode();if(o.getGraph()===e)this.connectChild(e,r,n,n.getSource(),r.dummyPort);else if(t===null||sc(o,t))continue;else{let o=this.introduceHierarchicalEdgeSegment(e,t,n,r.dummyPort,`INPUT`,a);o!==a&&i.push(o),o.exported&&(a=o)}}}for(let t of i)e.getLayerlessNodes().includes(t.dummyNode)||e.getLayerlessNodes().push(t.dummyNode),t.exported&&r.push(t)}processOuterHierarchicalEdgeSegments(e,t,n){let r=[];for(let n of e.getLayerlessNodes())for(let i of n.getPorts()){let n=null;for(let a of[...i.getOutgoingEdges()])if(!sc(a.getTarget().getNode(),t)){let i=this.introduceHierarchicalEdgeSegment(e,t,a,a.getSource(),`OUTPUT`,n);i!==n&&r.push(i),i.exported&&(n=i)}let a=null;for(let n of[...i.getIncomingEdges()])if(!sc(n.getSource().getNode(),t)){let i=this.introduceHierarchicalEdgeSegment(e,t,n,n.getTarget(),`INPUT`,a);i!==a&&r.push(i),i.exported&&(a=i)}}for(let t of r)e.getLayerlessNodes().includes(t.dummyNode)||e.getLayerlessNodes().push(t.dummyNode),t.exported&&n.push(t)}connectChild(e,t,n,r,i){let a=this.createDummyEdge(e,n);a.setSource(r),a.setTarget(i),this.addToMap(n,new Oc(a,e,t.type))}connectSiblings(e,t,n,r){let i=null;for(let e of n)if(e!==t&&e.origEdges.includes(r)){i=e;break}if(i===null)return;let a=this.createDummyEdge(e,r);a.setSource(t.dummyPort),a.setTarget(i.dummyPort),this.addToMap(r,new Oc(a,e,t.type))}introduceHierarchicalEdgeSegment(e,t,n,r,i,a){let o=e.getProperty(Lt),s=null;i===`INPUT`&&n.getSource().getNode()===t?s=n.getSource():i===`OUTPUT`&&n.getTarget().getNode()===t&&(s=n.getTarget());let c=a;if(c===null||!o||s!==null){let a=`UNDEFINED`;s===null?t!==null&&D.isSideFixed(t.getProperty(O))&&(a=i===`INPUT`?`WEST`:`EAST`):a=s.getSide();let o=this.createExternalPortDummy(e,t,i,a,n),l=this.createDummyEdge(t.getGraph(),n);i===`INPUT`?(l.setSource(o.getPorts()[0]),l.setTarget(r)):(l.setSource(r),l.setTarget(o.getPorts()[0])),c=new jc(n,l,o,o.getProperty(L),i,s===null)}else c.origEdges.push(n);return this.addToMap(n,new Oc(c.newEdge,e,i)),c}createExternalPortDummy(e,t,r,i,a){let o=null,s=r===`INPUT`?a.getSource():a.getTarget(),c=oc(e);if(s.getNode()===t)o=this.dummyNodeMap.get(s)??null,o===null&&(o=pc(s,t.getProperty(O),i,this.calculateNetFlow(s),null,s.getPosition(),s.getSize(),c,e),o.setProperty(L,s),this.dummyNodeMap.set(s,o));else{let a=e.getProperty(n)/2;o=pc({getProperty(e){if(e===E)return a},setProperty(){}},t.getProperty(O),i,r===`INPUT`?-1:1,null,{x:0,y:0},{x:0,y:0},c,e);let s=this.createPortForDummy(o,t,r);o.setProperty(L,s),this.dummyNodeMap.set(s,o)}e.getProperty(w).add(`EXTERNAL_PORTS`);let l=e.getProperty(O);return D.isSideFixed(l)?e.setProperty(O,`FIXED_SIDE`):e.setProperty(O,`FREE`),o}createPortForDummy(e,t,n){let r=oc(t.getGraph()),i=new H;return i.setNode(t),n===`INPUT`?i.setSide(ac(ic(r))):i.setSide(ic(r)),i.setProperty(E,e.getProperty(E)),i}createDummyEdge(e,t){let n=new U;return n.copyProperties(t),n.setProperty(R,null),n}addToMap(e,t){let n=this.crossHierarchyMap.get(e);n===void 0?this.crossHierarchyMap.set(e,[t]):n.push(t)}},Nc=class{moveGraphs(e,t,n,r){for(let i of t)this.moveGraph(e,i,n,r)}moveGraph(e,t,n,r){let i=n+t.getOffset().x,a=r+t.getOffset().y,o=/* @__PURE__ */ new Set;for(let n of t.getLayerlessNodes()){n.position.x+=i,n.position.y+=a;for(let e of n.getPorts())for(let t of e.getOutgoingEdges()){if(o.has(t))continue;o.add(t);for(let e of t.getBendPoints())e.x+=i,e.y+=a;let e=t.getProperty(R);if(e!==null)for(let t of e)t.x+=i,t.y+=a;for(let e of t.getLabels())e.position.x+=i,e.position.y+=a}e.getLayerlessNodes().push(n),n.setGraph(e)}}offsetGraphs(e,t,n){for(let r of e)this.offsetGraph(r,t,n)}offsetGraph(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e.getLayerlessNodes()){i.position.x+=t,i.position.y+=n;for(let e of i.getPorts())for(let i of e.getOutgoingEdges()){if(r.has(i))continue;r.add(i);for(let e of i.getBendPoints())e.x+=t,e.y+=n;let e=i.getProperty(R);if(e!==null)for(let r of e)r.x+=t,r.y+=n;for(let e of i.getLabels())e.position.x+=t,e.position.y+=n}}}};let Pc=/* @__PURE__ */ function(e){return e.Q1=`Q1`,e.Q4=`Q4`,e.Q2=`Q2`,e.Q3=`Q3`,e}({});(function(e){function t(e){return e===`Q1`||e===`Q2`}e.isUpper=t;function n(e){return e===`Q1`||e===`Q4`}e.isLeft=n;function r(e,t){return e===`Q1`&&t===`Q4`||e===`Q4`&&t===`Q1`||e===`Q3`&&t===`Q2`||e===`Q2`&&t===`Q3`}e.isBothLeftOrBothRight=r;function i(e,t){return e===`Q1`&&(t===`Q2`||t===`Q3`)||e===`Q4`&&(t===`Q3`||t===`Q2`)}e.isOneLeftOneRight=i})(Pc||={});var Fc=class{x;y;quadrant=null;convex=!0;constructor(e,t,n){this.x=e,this.y=t,n!==void 0&&(this.quadrant=n)}equals(e){return this.x===e.x&&this.y===e.y}};const Ic=(e,t)=>e.x===t.x?e.y-t.y:e.x-t.x,Lc=(e,t)=>e.x===t.x?t.y-e.y:e.x-t.x,Rc=(e,t)=>e.x===t.x?e.y-t.y:t.x-e.x,zc=(e,t)=>e.x===t.x?t.y-e.y:t.x-e.x,Bc=(e,t)=>{if(e.x===t.x){if(e.quadrant===t.quadrant||Pc.isBothLeftOrBothRight(e.quadrant,t.quadrant)){let n=Pc.isLeft(e.quadrant)?1:-1;if(e.convex&&!t.convex)return n;if(!e.convex&&t.convex)return-n}return Vc[e.quadrant]-Vc[t.quadrant]}return e.x-t.x},Vc={Q1:0,Q4:1,Q2:2,Q3:3};var Hc=class{quadrant;points=[];maximalY;compare;constructor(e){this.quadrant=e,e===`Q1`||e===`Q2`?(this.compare=(e,t)=>t-e,this.maximalY=1/0):(this.compare=(e,t)=>e-t,this.maximalY=-1/0)}handle(e){this.compare(e.y,this.maximalY)>0&&(this.points.push(new Fc(e.x,e.y,this.quadrant)),this.maximalY=e.y)}},Uc=class{rects=[];minY=null;maxY=null;lastX;queued=null;queuedPnt=null;constructor(e,t){this.lastX=Math.min(e?.x??0,t?.x??0)}handle(e){if(this.queued!==null&&(e.x!==this.queuedPnt.x||Pc.isOneLeftOneRight(this.queuedPnt.quadrant,e.quadrant))&&(this.rects.push(this.queued),this.lastX=this.queued.x+this.queued.width,this.queued=null,this.queuedPnt=null),Pc.isUpper(e.quadrant)?this.minY=e:this.maxY=e,(e.quadrant===`Q1`&&!e.convex||e.quadrant===`Q2`&&e.convex||e.quadrant===`Q3`&&e.convex||e.quadrant===`Q4`&&!e.convex)&&this.minY!==null&&this.maxY!==null){let t={x:this.lastX,y:this.minY.y,width:e.x-this.lastX,height:this.maxY.y-this.minY.y};this.queued=t,this.queuedPnt=e}}},Wc=class e{hull=[];xMax1=null;xMax2=null;xMin1=null;xMin2=null;yMax1=null;yMax2=null;yMin1=null;yMin2=null;static of(t){let n=new e;for(let e of t)(n.xMax1===null||e.x>=n.xMax1.x)&&(n.xMax2=n.xMax1,n.xMax1=e),(n.xMin1===null||e.x<=n.xMin1.x)&&(n.xMin2=n.xMin1,n.xMin1=e),(n.yMax1===null||e.y>=n.yMax1.y)&&(n.yMax2=n.yMax1,n.yMax1=e),(n.yMin1===null||e.y<=n.yMin1.y)&&(n.yMin2=n.yMin1,n.yMin1=e);let r=new Hc(`Q1`);Ao(t,Ic,r);let i=new Hc(`Q4`);Ao(t,Lc,i);let a=new Hc(`Q2`);Ao(t,Rc,a);let o=new Hc(`Q3`);return Ao(t,zc,o),Gc(r.points,`Q1`),Gc(a.points,`Q2`),Gc(o.points,`Q3`),Gc(i.points,`Q4`),n.hull.length=0,n.hull.push(...r.points,...[...a.points].reverse(),...o.points,...[...i.points].reverse()),n}getHull(){return this.hull}splitIntoRectangles(){let e=new Uc(this.xMin1,this.xMin2);return Ao(this.hull,Bc,e),e.queued!==null&&e.rects.push(e.queued),e.rects}};function Gc(e,t){let n=[],r=e[0];n.push(r);for(let i=1;i<e.length;i++){let a=e[i],o=new Fc(a.x,r.y,t);o.convex=!1,n.push(o,a),r=a}e.length=0,e.push(...n)}function Kc(e){return e===`LEFT`||e===`RIGHT`}function qc(e){switch(e){case`LEFT`:return`RIGHT`;case`RIGHT`:return`LEFT`;case`UP`:return`DOWN`;case`DOWN`:return`UP`;default:return`UNDEFINED`}}const Jc={getHorizontalSpacing(e,t){return Math.min(e.getHorizontalSpacing(),t.getHorizontalSpacing())},getVerticalSpacing(e,t){return Math.min(e.getVerticalSpacing(),t.getVerticalSpacing())}};function Yc(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}const Xc=`NORTH`,Zc=`EAST`,Qc=`SOUTH`,$c=`WEST`,el=/* @__PURE__ */ new Set([Xc]),tl=/* @__PURE__ */ new Set([Zc]),nl=/* @__PURE__ */ new Set([Qc]),rl=/* @__PURE__ */ new Set([$c]),il=/* @__PURE__ */ new Set([Xc,Zc]),al=/* @__PURE__ */ new Set([Zc,Qc]),ol=/* @__PURE__ */ new Set([Qc,$c]),sl=/* @__PURE__ */ new Set([Xc,$c]),cl=/* @__PURE__ */ new Set([Xc,Qc]),ll=/* @__PURE__ */ new Set([Zc,$c]),ul=/* @__PURE__ */ new Set([Xc,Zc,$c]),dl=/* @__PURE__ */ new Set([Xc,Qc,$c]),fl=/* @__PURE__ */ new Set([Zc,Qc,$c]),pl=/* @__PURE__ */ new Set([Xc,Zc,Qc,$c]);var ml=class{cGraph;spacing;oldPosition=/* @__PURE__ */ new Map;offsets=/* @__PURE__ */ new Map;globalOffset={x:0,y:0};graphSize={x:0,y:0};externalExtensions=/* @__PURE__ */ new Map;externalPlaceholder=/* @__PURE__ */ new Map;constructor(e){this.spacing=e,this.cGraph=new Eo([])}getOffset(e){let t=this.oldPosition.get(e),n=this.offsets.get(e).rect;return{x:t.x-n.x,y:t.y-n.y}}getGlobalOffset(){return this.globalOffset}getGraphSize(){return this.graphSize}getExternalExtensions(){return this.externalExtensions}getExternalPlaceholder(){return this.externalPlaceholder}transform(e){this.cGraph=new Eo([`LEFT`,`RIGHT`,`UP`,`DOWN`]);for(let t of e.getComponents()){let e=new To;this.cGraph.cGroups.push(e);for(let n of t.getHull()){let r=new hl(n,this.spacing);this.setLock(r,t.getExternalExtensionSides()),this.oldPosition.has(t)||(this.oldPosition.set(t,{x:n.x,y:n.y}),this.offsets.set(t,r)),this.cGraph.cNodes.push(r),e.addCNode(r)}for(let n of t.getExternalExtensions()){let r=new hl(n.getRepresentor(),this.spacing);this.externalExtensions.set(n,{first:e,second:r}),this.setLock(r,t.getExternalExtensionSides());let i=n.getPlaceholder();if(i!==null){let r=new hl(i,this.spacing,1);this.setLock(r,t.getExternalExtensionSides()),new To().addCNode(r);let a=this.externalPlaceholder.get(n.getDirection())??[];a.push({first:e,second:r}),this.externalPlaceholder.set(n.getDirection(),a)}}}return this.cGraph}setLock(e,t){t.size===0&&e.lock.set(!0,!0,!0,!0),Yc(t,el)&&e.lock.set(!0,!0,!0,!1),Yc(t,tl)&&e.lock.set(!1,!0,!0,!0),Yc(t,nl)&&e.lock.set(!0,!0,!1,!0),Yc(t,rl)&&e.lock.set(!0,!1,!0,!0),Yc(t,il)&&e.lock.set(!1,!0,!0,!1),Yc(t,al)&&e.lock.set(!1,!0,!1,!0),Yc(t,ol)&&e.lock.set(!0,!1,!1,!0),Yc(t,sl)&&e.lock.set(!0,!1,!0,!1),Yc(t,cl)&&e.lock.set(!0,!0,!0,!0),Yc(t,ll)&&e.lock.set(!0,!0,!0,!0),Yc(t,fl)&&e.lock.set(!0,!0,!0,!0),Yc(t,dl)&&e.lock.set(!0,!0,!0,!0),Yc(t,ul)&&e.lock.set(!0,!0,!0,!0),Yc(t,pl)&&e.lock.set(!0,!0,!0,!0)}applyLayout(){for(let e of this.cGraph.cNodes)e.applyElementPosition();let e={x:1/0,y:1/0},t={x:-1/0,y:-1/0};for(let n of this.cGraph.cNodes)e.x=Math.min(e.x,n.hitbox.x),e.y=Math.min(e.y,n.hitbox.y),t.x=Math.max(t.x,n.hitbox.x+n.hitbox.width),t.y=Math.max(t.y,n.hitbox.y+n.hitbox.height);for(let n of this.externalPlaceholder.values())for(let r of n){let n=r.second;e.x=Math.min(e.x,n.hitbox.x),e.y=Math.min(e.y,n.hitbox.y),t.x=Math.max(t.x,n.hitbox.x+n.hitbox.width),t.y=Math.max(t.y,n.hitbox.y+n.hitbox.height)}this.globalOffset={x:-e.x,y:-e.y},this.graphSize={x:t.x-e.x,y:t.y-e.y},this.cGraph.cGroups.length=0,this.cGraph.cNodes.length=0}},hl=class extends Bo{rect;spacing;individualSpacing;constructor(e,t,n=null){super(),this.rect=e,this.spacing=t,this.hitbox={x:e.x,y:e.y,width:e.width,height:e.height},this.individualSpacing=n}getHorizontalSpacing(){return this.individualSpacing??this.spacing}getVerticalSpacing(){return this.individualSpacing??this.spacing}applyElementPosition(){this.rect.x=this.hitbox.x,this.rect.y=this.hitbox.y}getElementPosition(){return this.rect.x}toString(){return``}};const gl=/* @__PURE__ */ new Set([`LEFT`,`RIGHT`]),_l=/* @__PURE__ */ new Set([`UP`,`DOWN`]);var vl=class e{compactionGraph=new Eo([]);transformer=new ml(0);verticalExternalExtensions=[];horizontalExternalExtensions=[];compactor=null;topLeft={x:0,y:0};bottomRight={x:0,y:0};constructor(){}static init(t,n){let r=new e;return r.transformer=new ml(n),r.compactionGraph=r.transformer.transform(t),r}compact(){let e=[];this.verticalExternalExtensions=[],this.horizontalExternalExtensions=[];for(let[t,n]of this.transformer.getExternalExtensions())e.push(n.second),Kc(t.getDirection())?this.horizontalExternalExtensions.push(n):this.verticalExternalExtensions.push(n);this.addExternalEdgeRepresentations(this.horizontalExternalExtensions),this.addExternalEdgeRepresentations(this.verticalExternalExtensions),this.compactor=new Ro(this.compactionGraph),this.compactor.setSpacingsHandler(Jc),this.removeExternalEdgeRepresentations(this.horizontalExternalExtensions),this.removeExternalEdgeRepresentations(this.verticalExternalExtensions),e.push(...this.compactor.cGraph.cNodes),this.topLeft={x:1/0,y:1/0},this.bottomRight={x:-1/0,y:-1/0};for(let t of e)this.topLeft.x=Math.min(this.topLeft.x,t.hitbox.x),this.topLeft.y=Math.min(this.topLeft.y,t.hitbox.y),this.bottomRight.x=Math.max(this.bottomRight.x,t.hitbox.x+t.hitbox.width),this.bottomRight.y=Math.max(this.bottomRight.y,t.hitbox.y+t.hitbox.height);this.compactor.setLockingStrategy(e=>e.first.cGroup.outDegree!==0);let t=0,n;do n=this.compactRun(t),t++;while((t<2||n>1e-4)&&t<10);this.compactor.setLockingStrategy(e=>e.first.lock.get(e.second)||e.first.cGroup.outDegree!==0&&e.first.lock.get(e.second)),this.compactRun(0),this.compactor.finish(),this.transformer.applyLayout()}getGraphSize(){return this.transformer.getGraphSize()}getOffset(e){let t=this.transformer.getOffset(e),n=this.transformer.getGlobalOffset();return{x:-t.x+n.x,y:-t.y+n.y}}compactRun(e){let t=0;for(let e of this.compactionGraph.cGroups)e.delta=0,e.deltaNormalized=0;this.addPlaceholders(`HORZ`),this.addExternalEdgeRepresentations(this.verticalExternalExtensions),this.compactor.calculateGroupOffsets(),this.compactor.forceConstraintsRecalculation();let n=`LEFT`;this.compactor.changeDirection(n).compact().changeDirection(qc(n)).applyLockingStrategy().compact().changeDirection(n).applyLockingStrategy().compact(),this.compactor.changeDirection(`LEFT`),this.removeExternalEdgeRepresentations(this.verticalExternalExtensions),this.removePlaceholders(`HORZ`),this.updateExternalExtensionDimensions(`HORZ`),this.updatePlaceholders(`VERT`),this.addPlaceholders(`VERT`),this.addExternalEdgeRepresentations(this.horizontalExternalExtensions),this.compactor.calculateGroupOffsets();for(let e of this.compactionGraph.cGroups)t+=Math.abs(e.deltaNormalized);for(let e of this.compactionGraph.cGroups)e.delta=0,e.deltaNormalized=0;n=`UP`,this.compactor.changeDirection(n).forceConstraintsRecalculation().compact().changeDirection(qc(n)).applyLockingStrategy().compact().changeDirection(n).applyLockingStrategy().compact(),this.compactor.changeDirection(`LEFT`),this.removeExternalEdgeRepresentations(this.horizontalExternalExtensions),this.removePlaceholders(`VERT`),this.updateExternalExtensionDimensions(`VERT`),this.updatePlaceholders(`HORZ`),this.compactor.forceConstraintsRecalculation();for(let e of this.compactionGraph.cGroups)t+=Math.abs(e.deltaNormalized);return t}addExternalEdgeRepresentations(e){for(let t of e)this.compactionGraph.cNodes.push(t.second),t.first.addCNode(t.second)}removeExternalEdgeRepresentations(e){for(let t of e){let e=this.compactionGraph.cNodes.indexOf(t.second);e!==-1&&this.compactionGraph.cNodes.splice(e,1),t.first.removeCNode(t.second)}}addPlaceholders(e){let t=e===`VERT`?_l:gl;for(let e of t)for(let t of this.transformer.getExternalPlaceholder().get(e)??[])this.compactionGraph.cNodes.push(t.second),this.compactionGraph.cGroups.push(t.second.cGroup)}removePlaceholders(e){let t=e===`VERT`?_l:gl;for(let e of t)for(let t of this.transformer.getExternalPlaceholder().get(e)??[]){let e=this.compactionGraph.cNodes.indexOf(t.second);e!==-1&&this.compactionGraph.cNodes.splice(e,1);let n=this.compactionGraph.cGroups.indexOf(t.second.cGroup);n!==-1&&this.compactionGraph.cGroups.splice(n,1)}}updatePlaceholders(e){let t=e===`VERT`?_l:gl;for(let e of t)for(let t of this.transformer.getExternalPlaceholder().get(e)??[]){let n=t.second,r=t.first.deltaNormalized;switch(e){case`LEFT`:case`RIGHT`:n.hitbox.y+=r;break;case`UP`:case`DOWN`:n.hitbox.x+=r}}}updateExternalExtensionDimensions(e){for(let[t,n]of this.transformer.getExternalExtensions()){if(e===`VERT`){if(t.getDirection()!==`UP`&&t.getDirection()!==`DOWN`)continue}else if(t.getDirection()!==`LEFT`&&t.getDirection()!==`RIGHT`)continue;let r=n.second,i=n.first.deltaNormalized;switch(t.getDirection()){case`LEFT`:r.hitbox.x=this.topLeft.x,r.hitbox.width=Math.max(1,r.hitbox.width+i);break;case`RIGHT`:r.hitbox.x=r.hitbox.x+i,r.hitbox.width=Math.max(1,r.hitbox.width-i);break;case`UP`:r.hitbox.y=this.topLeft.y,r.hitbox.height=Math.max(1,r.hitbox.height+i);break;case`DOWN`:r.hitbox.y=r.hitbox.y+i,r.hitbox.height=Math.max(1,r.hitbox.height-i)}}}};const yl=new ut(`org.eclipse.elk.layered.compaction.connectedComponents`,!1),bl=1e-4;function xl(e){switch(e){case`NORTH`:return`UP`;case`WEST`:return`LEFT`;case`EAST`:return`RIGHT`;case`SOUTH`:return`DOWN`;default:return`UNDEFINED`}}function Sl(e,t,n){return Math.abs(e-t)<=n}function Cl(e,t,n,r){return{x:e,y:t,width:n,height:r}}function wl(e){return{x:e.x+e.width,y:e.y}}function Tl(e){return{x:e.x+e.width,y:e.y+e.height}}function El(e){return{x:e.x,y:e.y+e.height}}function Dl(e){return{x:e.x,y:e.y}}var Ol=class{compactor=null;yetAnotherOffset={x:0,y:0};compactedGraphSize={x:0,y:0};graphTopLeft={x:0,y:0};graphBottomRight={x:0,y:0};compact(e,t,n){this.graphTopLeft={x:1/0,y:1/0},this.graphBottomRight={x:-1/0,y:-1/0};for(let t of e)for(let e of t.getLayerlessNodes())this.graphTopLeft.x=Math.min(this.graphTopLeft.x,e.position.x-e.getMargin().left),this.graphTopLeft.y=Math.min(this.graphTopLeft.y,e.position.y-e.getMargin().top),this.graphBottomRight.x=Math.max(this.graphBottomRight.x,e.position.x+e.size.x+e.getMargin().right),this.graphBottomRight.y=Math.max(this.graphBottomRight.y,e.position.y+e.size.y+e.getMargin().bottom);let r=new kl;for(let t of e){let e=this.transformLGraph(t);r.getComponents().push(e),e.containsRegularNodes=e.containsRegularNodes||e.getExternalExtensionSides().size>0}this.compactor=vl.init(r,n),this.compactor.compact(),this.yetAnotherOffset={x:0,y:0},this.compactedGraphSize=this.compactor.getGraphSize();for(let e of r.getComponents()){let t=this.compactor.getOffset(e);Rl(e.graph,t.x,t.y);for(let t of e.getNodes())if(t.getType()===`EXTERNAL_PORT`){let e=this.getExternalPortPosition(t.getPosition(),t.getProperty(j));t.position.x=e.x,t.position.y=e.y}}for(let e of r.getComponents())for(let t of e.getExternalEdges()){let e=[];e.push(t.getSource().getAbsoluteAnchor()),e.push(...t.getBendPoints()),e.push(t.getTarget().getAbsoluteAnchor());let n=null;for(let t of e)n===null||(Sl(n.x,t.x,bl)?(this.yetAnotherOffset.x=Math.min(this.yetAnotherOffset.x,n.x),this.compactedGraphSize.x=Math.max(this.compactedGraphSize.x,n.x)):Sl(n.y,t.y,bl)&&(this.yetAnotherOffset.y=Math.min(this.yetAnotherOffset.y,n.y),this.compactedGraphSize.y=Math.max(this.compactedGraphSize.y,n.y))),n=t}this.yetAnotherOffset.x=-this.yetAnotherOffset.x,this.yetAnotherOffset.y=-this.yetAnotherOffset.y,this.compactedGraphSize.x+=this.yetAnotherOffset.x,this.compactedGraphSize.y+=this.yetAnotherOffset.y}getOffset(){return this.yetAnotherOffset}getGraphSize(){return this.compactedGraphSize}transformLGraph(e){let t=new Al(e);t.containsRegularNodes||this.createDummyNode(e);let n=this.componentHullPoints(e),r=/* @__PURE__ */ new Map,i=new Fl;for(let t of e.getLayerlessNodes())for(let e of t.getOutgoingEdges())if(this.isExternalEdge(e)){let t=this.transformLEdge(e,n,i),a=r.get(t.getDirection())??[];a.push(t.edge),r.set(t.getDirection(),a)}let a=[];for(let e of t.getExternalExtensionSides()){let t=i.min[e],o=i.max[e],s=i.extent[e],c=null,l=null;switch(e){case`WEST`:c=Cl(this.graphTopLeft.x,t,n.topLeft.x-this.graphTopLeft.x,o-t),l=Cl(this.graphTopLeft.x,t,s,o-t),n.addVector(wl(c)),n.addVector(Tl(c));break;case`EAST`:c=Cl(n.bottomRight.x,t,this.graphBottomRight.x-n.bottomRight.x,o-t),l=Cl(this.graphBottomRight.x-s,t,s,o-t),n.addVector(Dl(c)),n.addVector(El(c));break;case`NORTH`:c=Cl(t,this.graphTopLeft.y,o-t,n.topLeft.y-this.graphTopLeft.y),l=Cl(t,this.graphTopLeft.y,o-t,s),n.addVector(El(c)),n.addVector(Tl(c));break;case`SOUTH`:c=Cl(t,n.bottomRight.y,o-t,this.graphBottomRight.y-n.bottomRight.y),l=Cl(t,this.graphBottomRight.y-s,o-t,s),n.addVector(Dl(c)),n.addVector(wl(c))}if(c!==null){let t=new jl;t.side=e,t.extension=c,t.placeholder=l,t.edges=new Set(r.get(xl(e))??[]),a.push(t)}}return t.externalExtensions=a,t.rectilinearConvexHull=Wc.of(n.points).splitIntoRectangles(),t}createDummyNode(e){let t=e.getLayerlessNodes()[0],n=new V(e);switch(n.size.x=Math.max(1,t.size.x),n.size.y=Math.max(1,t.size.y),n.position.x=t.position.x,n.position.y=t.position.y,t.getProperty(j)){case`WEST`:n.position.x+=2;break;case`NORTH`:n.position.y+=2;break;case`EAST`:n.position.x-=2;break;case`SOUTH`:n.position.y-=2}let r=new H;r.setNode(n);let i=new U,a=t.getPorts()[0];i.setSource(a),i.setTarget(r),r.position.x=a.position.x,r.position.y=a.position.y;let o=a.getAnchor(),s=r.getAnchor();s.x=o.x,s.y=o.y}componentHullPoints(e){let t=new Nl;for(let n of e.getLayerlessNodes())if(n.getType()!==`EXTERNAL_PORT`){Il(t,n);for(let e of n.getOutgoingEdges())if(!this.isExternalEdge(e))for(let n of e.getBendPoints())t.add(new Fc(n.x,n.y))}return t}isExternalEdge(e){return e.getSource().getNode().getType()===`EXTERNAL_PORT`||e.getTarget().getNode().getType()===`EXTERNAL_PORT`}transformLEdge(e,t,n){let r=new Ml(e),i=this.edgeToSegments(e,r),a=Math.max(e.getProperty(Ye),1);for(let e of i.innerSegments){let n=this.segmentToRectangle(e.first,e.second,a);t.addRect(n)}let o=r.externalPortSide,s=this.segmentToRectangle(i.outerSegment.first,i.outerSegment.second,a);o===`WEST`||o===`EAST`?(n.min[o]=Math.min(n.min[o],s.y),n.max[o]=Math.max(n.max[o],s.y+s.height)):(n.min[o]=Math.min(n.min[o],s.x),n.max[o]=Math.max(n.max[o],s.x+s.width));let c=-1/0,l=r.externalPort.getNode().getMargin();switch(o){case`WEST`:c=l.right;break;case`EAST`:c=l.left;break;case`NORTH`:c=l.bottom;break;case`SOUTH`:c=l.top}return n.extent[o]=Math.max(n.extent[o],c),r}segmentToRectangle(e,t,n){return Cl(Math.min(e.x,t.x)-n/2,Math.min(e.y,t.y)-n/2,Math.abs(e.x-t.x)+n,Math.abs(e.y-t.y)+n)}edgeToSegments(e,t){let n=t.externalPort,r=t.externalPortSide,i=e.getSource().getAbsoluteAnchor(),a=e.getTarget().getAbsoluteAnchor();n===e.getSource()?(i=this.getExternalPortPosition(i,r),a=Ll(e.getTarget())):(i=Ll(e.getSource()),a=this.getExternalPortPosition(a,r));let o=[];o.push(i),o.push(...e.getBendPoints()),o.push(a);let s=e.getSource()===n,c=new Pl;for(let e=0;e<o.length-1;++e){let t={first:o[e],second:o[e+1]};s&&e===0||!s&&e===o.length-2?c.outerSegment=t:c.innerSegments.push(t)}return c}getExternalPortPosition(e,t){switch(t){case`NORTH`:return{x:e.x,y:Math.min(this.graphTopLeft.y,e.y)};case`EAST`:return{x:Math.max(this.graphBottomRight.x,e.x),y:e.y};case`SOUTH`:return{x:e.x,y:Math.max(this.graphBottomRight.y,e.y)};case`WEST`:return{x:Math.min(e.x,this.graphTopLeft.x),y:e.y};default:return{x:e.x,y:e.y}}}},kl=class{components=[];containsExternalPorts=!1;getComponents(){return this.components}isContainsExternalExtensions(){return this.containsExternalPorts}},Al=class{graph;containsRegularNodes;rectilinearConvexHull=[];externalExtensions=[];constructor(e){this.graph=e,this.containsRegularNodes=e.getLayerlessNodes().some(e=>e.getType()===`NORMAL`)}getExternalExtensionSides(){return this.graph.getProperty(c)??/* @__PURE__ */ new Set}getHull(){return this.rectilinearConvexHull}getExternalExtensions(){return this.externalExtensions}getNodes(){return this.graph.getLayerlessNodes()}getExternalEdges(){let e=[];for(let t of this.externalExtensions)e.push(...t.getRepresentative());return e}},jl=class{edges=/* @__PURE__ */ new Set;side=`UNDEFINED`;extension=Cl(0,0,0,0);placeholder=Cl(0,0,0,0);getRepresentative(){return this.edges}getRepresentor(){return this.extension}getParent(){throw Error(`UnsupportedOperationException`)}getDirection(){return xl(this.side)}getPlaceholder(){return this.placeholder}},Ml=class{edge;externalPort;externalPortSide;constructor(e){if(this.edge=e,e.getSource().getNode().getType()===`EXTERNAL_PORT`)this.externalPort=e.getSource(),this.externalPortSide=e.getSource().getNode().getProperty(j);else if(e.getTarget().getNode().getType()===`EXTERNAL_PORT`)this.externalPort=e.getTarget(),this.externalPortSide=e.getTarget().getNode().getProperty(j);else throw Error(`Edge ${e} is not an external edge.`)}getDirection(){return xl(this.externalPortSide)}getRepresentative(){return this.edge}},Nl=class{points=[];topLeft={x:1/0,y:1/0};bottomRight={x:-1/0,y:-1/0};add(e){this.topLeft.x=Math.min(this.topLeft.x,e.x),this.topLeft.y=Math.min(this.topLeft.y,e.y),this.bottomRight.x=Math.max(this.bottomRight.x,e.x),this.bottomRight.y=Math.max(this.bottomRight.y,e.y),this.points.push(e)}addVector(e){this.add(new Fc(e.x,e.y))}addRect(e){this.addVector({x:e.x,y:e.y}),this.addVector({x:e.x+e.width,y:e.y}),this.addVector({x:e.x,y:e.y+e.height}),this.addVector({x:e.x+e.width,y:e.y+e.height})}},Pl=class{innerSegments=[];outerSegment=null},Fl=class{min;max;extent;constructor(){this.min={NORTH:1/0,EAST:1/0,SOUTH:1/0,WEST:1/0,UNDEFINED:1/0},this.max={NORTH:-1/0,EAST:-1/0,SOUTH:-1/0,WEST:-1/0,UNDEFINED:-1/0},this.extent={NORTH:-1/0,EAST:-1/0,SOUTH:-1/0,WEST:-1/0,UNDEFINED:-1/0}}};function Il(e,t){let n=t.getMargin();e.addVector({x:t.position.x-n.left,y:t.position.y-n.top}),e.addVector({x:t.position.x-n.left,y:t.position.y+t.size.y+n.bottom}),e.addVector({x:t.position.x+t.size.x+n.right,y:t.position.y-n.top}),e.addVector({x:t.position.x+t.size.x+n.right,y:t.position.y+t.size.y+n.bottom})}function Ll(e){let t=e.getAbsoluteAnchor(),n=e.getNode().getMargin();switch(e.getSide()){case`NORTH`:t.y-=n.top;break;case`EAST`:t.x+=n.right;break;case`SOUTH`:t.y+=n.bottom;break;case`WEST`:t.x-=n.left}return t}function Rl(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e.getLayerlessNodes()){i.position.x+=t,i.position.y+=n;for(let e of i.getPorts())for(let i of e.getOutgoingEdges())if(!r.has(i)){r.add(i);for(let e of i.getBendPoints())e.x+=t,e.y+=n}}}function zl(e){return e.getProperty(c)??/* @__PURE__ */ new Set}var Bl=class extends Nc{combine(e,t){if(e.length===1){let n=e[0];n!==t&&(t.getLayerlessNodes().length=0,this.moveGraph(t,n,0,0),t.copyProperties(n),t.getSize().x=n.getSize().x,t.getSize().y=n.getSize().y);return}if(e.length===0){t.getLayerlessNodes().length=0,t.getSize().x=0,t.getSize().y=0;return}this.sortComponents(e,t);let n=e[0];t.getLayerlessNodes().length=0,t.copyProperties(n);let r=0,i=0;for(let t of e){let e=t.getSize();r=Math.max(r,e.x),i+=e.x*e.y}r=Math.max(r,Math.sqrt(i)*t.getProperty(Pt));let a=t.getProperty(je);if(this.placeComponents(e,t,r,a),n.getProperty(yl)){let n=new Ol;n.compact(e,t.getSize(),a);for(let t of e){let e=t.getOffset();e.x=n.getOffset().x,e.y=n.getOffset().y}let r=t.getSize();r.x=n.getGraphSize().x,r.y=n.getGraphSize().y}this.moveGraphs(t,e,0,0)}sortComponents(e,t){}placeComponents(e,t,n,r){let i=0,a=0,o=0,s=r,c=null,l=0;for(let t of e){let e=t.getSize(),u=zl(t);(i+e.x>n&&!u.has(`NORTH`)||c!==null&&zl(c).has(`EAST`)||u.has(`WEST`))&&(i=l,a+=o+r,o=0);let d=t.getOffset();u.has(`NORTH`)&&(i=s+r),this.offsetGraph(t,i+d.x,a+d.y),s=Math.max(s,i+e.x),u.has(`SOUTH`)&&(l=Math.max(l,i+e.x+r)),d.x=0,d.y=0,o=Math.max(o,e.y),i+=e.x+r,c=t}t.getSize().x=s,t.getSize().y=a+o}};function Vl(e){return[...e].sort().join(`,`)}const Y={NONE:/* @__PURE__ */ new Set,WEST:/* @__PURE__ */ new Set([`WEST`]),EAST:/* @__PURE__ */ new Set([`EAST`]),NORTH:/* @__PURE__ */ new Set([`NORTH`]),SOUTH:/* @__PURE__ */ new Set([`SOUTH`]),NORTH_SOUTH:/* @__PURE__ */ new Set([`NORTH`,`SOUTH`]),EAST_WEST:/* @__PURE__ */ new Set([`EAST`,`WEST`]),NORTH_WEST:/* @__PURE__ */ new Set([`NORTH`,`WEST`]),NORTH_EAST:/* @__PURE__ */ new Set([`NORTH`,`EAST`]),SOUTH_WEST:/* @__PURE__ */ new Set([`SOUTH`,`WEST`]),EAST_SOUTH:/* @__PURE__ */ new Set([`EAST`,`SOUTH`]),NORTH_EAST_WEST:/* @__PURE__ */ new Set([`NORTH`,`EAST`,`WEST`]),NORTH_SOUTH_WEST:/* @__PURE__ */ new Set([`NORTH`,`SOUTH`,`WEST`]),EAST_SOUTH_WEST:/* @__PURE__ */ new Set([`EAST`,`SOUTH`,`WEST`]),NORTH_EAST_SOUTH:/* @__PURE__ */ new Set([`NORTH`,`EAST`,`SOUTH`]),NORTH_EAST_SOUTH_WEST:/* @__PURE__ */ new Set([`NORTH`,`EAST`,`SOUTH`,`WEST`])},Hl=/* @__PURE__ */ new Map;function X(e,...t){let n=Vl(e),r=Hl.get(n);r===void 0&&(r=/* @__PURE__ */ new Set,Hl.set(n,r));for(let e of t)r.add(Vl(e))}X(Y.NONE,Y.NORTH_EAST_SOUTH_WEST),X(Y.WEST,Y.NORTH_EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST),X(Y.EAST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH,Y.NORTH_EAST_SOUTH_WEST,Y.NORTH_EAST_WEST),X(Y.SOUTH,Y.EAST_SOUTH_WEST,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_SOUTH,Y.EAST_WEST,Y.NORTH_EAST_SOUTH_WEST,Y.NORTH_EAST_WEST,Y.EAST_SOUTH_WEST),X(Y.EAST_WEST,Y.NORTH_SOUTH,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_WEST,Y.NORTH_WEST,Y.NORTH_EAST_WEST,Y.NORTH_SOUTH_WEST),X(Y.NORTH_EAST,Y.NORTH_EAST,Y.NORTH_EAST_WEST,Y.NORTH_EAST_SOUTH),X(Y.SOUTH_WEST,Y.SOUTH_WEST,Y.EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST),X(Y.EAST_SOUTH,Y.EAST_SOUTH,Y.EAST_SOUTH_WEST,Y.NORTH_EAST_SOUTH),X(Y.NORTH_EAST_WEST,Y.NORTH,Y.NORTH_SOUTH,Y.NORTH_WEST,Y.NORTH_EAST,Y.NORTH_EAST_SOUTH_WEST,Y.NORTH_EAST_WEST,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH),X(Y.EAST_SOUTH_WEST,Y.SOUTH,Y.NORTH_SOUTH,Y.SOUTH_WEST,Y.EAST_SOUTH,Y.EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_SOUTH_WEST,Y.WEST,Y.EAST_WEST,Y.NORTH_WEST,Y.SOUTH_WEST,Y.NORTH_EAST_WEST,Y.EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_EAST_SOUTH,Y.EAST,Y.EAST_WEST,Y.NORTH_EAST,Y.EAST_SOUTH,Y.NORTH_EAST_WEST,Y.EAST_SOUTH_WEST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST),X(Y.NORTH_EAST_SOUTH_WEST,Y.NONE,Y.WEST,Y.EAST,Y.NORTH,Y.SOUTH,Y.NORTH_SOUTH,Y.EAST_WEST,Y.NORTH_EAST_WEST,Y.EAST_SOUTH_WEST,Y.NORTH_SOUTH_WEST,Y.NORTH_EAST_SOUTH,Y.NORTH_EAST_SOUTH_WEST);var Ul=class{components=/* @__PURE__ */ new Map;constructor(e){e!==void 0&&this.add(e)}add(e){if(this.canAdd(e)){let t=Vl(e.getProperty(c)??/* @__PURE__ */ new Set),n=this.components.get(t);return n===void 0?this.components.set(t,[e]):n.push(e),!0}return!1}canAdd(e){let t=e.getProperty(c)??/* @__PURE__ */ new Set,n=Hl.get(Vl(t));if(n!==void 0)for(let e of n){let t=this.components.get(e);if(t!==void 0&&t.length>0)return!1}return!0}getPortSides(){return[...this.components.keys()]}getComponents(){return[...this.components.values()].flat()}getComponentsFor(e){return this.components.get(Vl(e))??[]}},Wl=class extends Nc{componentGroups=[];combine(e,t){if(this.componentGroups=[],t.getLayerlessNodes().length=0,e.length===0){t.getSize().x=0,t.getSize().y=0;return}let n=e[0];t.copyProperties(n);for(let t of e)this.addComponent(t);let r=0,i=0,a=n.getProperty(je);for(let e of this.componentGroups){let t=this.placeComponents(e,a);this.offsetGraphs(e.getComponents(),r,i),r+=t.x,i+=t.y}if(t.getSize().x=r-a,t.getSize().y=i-a,n.getProperty(yl)&&n.getProperty(s)===`ORTHOGONAL`){for(let t of e)this.offsetGraph(t,t.getOffset().x,t.getOffset().y);let n=new Ol;n.compact(e,t.getSize(),a);for(let t of e)t.getOffset().x=n.getOffset().x,t.getOffset().y=n.getOffset().y;t.getSize().x=n.getGraphSize().x,t.getSize().y=n.getGraphSize().y}for(let e of this.componentGroups)this.moveGraphs(t,e.getComponents(),0,0)}addComponent(e){for(let t of this.componentGroups)if(t.add(e))return;this.componentGroups.push(new Ul(e))}placeComponents(e,t){let n=this.placeComponentsInRows(e.getComponentsFor(Y.NONE),t),r=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH),t),i=this.placeComponentsHorizontally(e.getComponentsFor(Y.SOUTH),t),a=this.placeComponentsVertically(e.getComponentsFor(Y.WEST),t),o=this.placeComponentsVertically(e.getComponentsFor(Y.EAST),t),s=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_WEST),t),c=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_EAST),t),l=this.placeComponentsHorizontally(e.getComponentsFor(Y.SOUTH_WEST),t),u=this.placeComponentsHorizontally(e.getComponentsFor(Y.EAST_SOUTH),t),d=this.placeComponentsVertically(e.getComponentsFor(Y.EAST_WEST),t),f=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_SOUTH),t),p=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_EAST_WEST),t),m=this.placeComponentsHorizontally(e.getComponentsFor(Y.EAST_SOUTH_WEST),t),h=this.placeComponentsVertically(e.getComponentsFor(Y.NORTH_SOUTH_WEST),t),g=this.placeComponentsVertically(e.getComponentsFor(Y.NORTH_EAST_SOUTH),t),_=this.placeComponentsHorizontally(e.getComponentsFor(Y.NORTH_EAST_SOUTH_WEST),t),v=Math.max(s.x,a.x,l.x,h.x),y=Math.max(r.x,n.x,i.x,_.x),b=f.x,x=Math.max(c.x,o.x,u.x,g.x),S=Math.max(s.y,r.y,c.y,p.y),ee=Math.max(a.y,n.y,o.y,_.y),C=d.y,te=Math.max(l.y,i.y,u.y,m.y);this.offsetGraphs(e.getComponentsFor(Y.NONE),v+b,S+C),this.offsetGraphs(e.getComponentsFor(Y.NORTH_EAST_SOUTH_WEST),v+b,S+C),this.offsetGraphs(e.getComponentsFor(Y.NORTH),v+b,0),this.offsetGraphs(e.getComponentsFor(Y.SOUTH),v+b,S+C+ee),this.offsetGraphs(e.getComponentsFor(Y.WEST),0,S+C),this.offsetGraphs(e.getComponentsFor(Y.EAST),v+b+y,S+C),this.offsetGraphs(e.getComponentsFor(Y.NORTH_EAST),v+b+y,0),this.offsetGraphs(e.getComponentsFor(Y.SOUTH_WEST),0,S+C+ee),this.offsetGraphs(e.getComponentsFor(Y.EAST_SOUTH),v+b+y,S+C+ee),this.offsetGraphs(e.getComponentsFor(Y.EAST_WEST),0,S),this.offsetGraphs(e.getComponentsFor(Y.NORTH_SOUTH),v,0),this.offsetGraphs(e.getComponentsFor(Y.EAST_SOUTH_WEST),0,S+C+ee),this.offsetGraphs(e.getComponentsFor(Y.NORTH_EAST_SOUTH),v+b+y,0);let ne={x:0,y:0};return ne.x=Math.max(v+y+b+x,d.x,p.x,m.x),ne.y=Math.max(S+ee+C+te,f.y,h.y,g.y),ne}placeComponentsHorizontally(e,t){let n={x:0,y:0};for(let r of e)this.offsetGraph(r,n.x,0),n.x+=r.getSize().x+t,n.y=Math.max(n.y,r.getSize().y);return n.y>0&&(n.y+=t),n}placeComponentsVertically(e,t){let n={x:0,y:0};for(let r of e)this.offsetGraph(r,0,n.y),n.y+=r.getSize().y+t,n.x=Math.max(n.x,r.getSize().x);return n.x>0&&(n.x+=t),n}placeComponentsInRows(e,t){if(e.length===0)return{x:0,y:0};let n=0,r=0;for(let t of e){let e=t.getSize();n=Math.max(n,e.x),r+=e.x*e.y}n=Math.max(n,Math.sqrt(r));let i=0,a=0,o=0,s=t;for(let r of e){let e=r.getSize();i+e.x>n&&(i=0,a+=o+t,o=0),this.offsetGraph(r,i,a),s=Math.max(s,i+e.x),o=Math.max(o,e.y),i+=e.x+t}return{x:s+t,y:a+o+t}}},Gl=class{split(e){if(e.getProperty(mn)===`INCLUDE_CHILDREN`)return[e];let t=e.getProperty(rt)!==!1,n=e.getProperty(w).has(`EXTERNAL_PORTS`),r=e.getProperty(O),i=!D.isOrderFixed(r);if(!t||n&&!i)return[e];let a=this.splitInner(e);return e.getProperty(Wn)!==h.NONE&&a.sort((e,t)=>Kl(e)-Kl(t)),a}splitInner(e){let t=/* @__PURE__ */ new Set,n=[];for(let r of e.getLayerlessNodes()){if(t.has(r))continue;let i=[];if(this.dfs(r,i,t),i.length>0){let t=new rr;t.copyProperties(e),t.getPadding().left=e.getPadding().left,t.getPadding().top=e.getPadding().top,t.getPadding().right=e.getPadding().right,t.getPadding().bottom=e.getPadding().bottom;for(let e of i)t.getLayerlessNodes().push(e),e.setGraph(t);n.push(t)}}return n.length>0?n:[e]}dfs(e,t,n){if(!n.has(e)){n.add(e),t.push(e);for(let r of e.getPorts())for(let e of r.getConnectedPorts()){let r=e.getNode();r!==null&&this.dfs(r,t,n)}}}combine(e,t){if(t.getProperty(w).has(`EXTERNAL_PORTS`)){let n=t.getProperty(Wn);if(n===h.MODEL_ORDER){new Bl().combine(e,t);return}if(n!==h.GROUP_MODEL_ORDER){new Wl().combine(e,t);return}}if(t.getLayerlessNodes().length=0,e.length===1){let n=e[0];n!==t&&this.moveGraph(t,n,0,0);return}if(e.length===0)return;let n=t.getProperty(je),r=t.getProperty(Wn)===h.NONE?[...e].sort((e,t)=>e.getSize().x*e.getSize().y-t.getSize().x*t.getSize().y):[...e],i=0,a=0;for(let e of r){let t=e.getSize();i=Math.max(i,t.x),a+=t.x*t.y}let o=t.getProperty(Pt);i=Math.max(i,Math.sqrt(a)*o);let s=0,c=0,l=0,u=n;for(let e of r){let t=e.getSize();s+t.x>i&&(s=0,c+=l+n,l=0);let r=e.getOffset();this.offsetGraph(e,s+r.x,c+r.y),r.x=0,r.y=0,u=Math.max(u,s+t.x),l=Math.max(l,t.y),s+=t.x+n}if(t.getSize().x=u,t.getSize().y=c+l,e[0].getProperty(yl)){let r=new Ol;r.compact(e,t.getSize(),n);for(let t of e){let e=t.getOffset();e.x=r.getOffset().x,e.y=r.getOffset().y}let i=t.getSize();i.x=r.getGraphSize().x,i.y=r.getGraphSize().y}for(let e of r)this.moveGraph(t,e,0,0)}moveGraph(e,t,n,r){let i=n+t.getOffset().x,a=r+t.getOffset().y,o=/* @__PURE__ */ new Set;for(let n of t.getLayerlessNodes()){n.position.x+=i,n.position.y+=a;for(let e of n.getPorts())for(let t of e.getConnectedEdges())if(!o.has(t)){o.add(t);for(let e of t.getBendPoints())e.x+=i,e.y+=a}e.getLayerlessNodes().push(n),n.setGraph(e)}t.getOffset().x=0,t.getOffset().y=0}offsetGraph(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e.getLayerlessNodes()){i.position.x+=t,i.position.y+=n;for(let e of i.getPorts())for(let i of e.getConnectedEdges())if(!r.has(i)){r.add(i);for(let e of i.getBendPoints())e.x+=t,e.y+=n}}}};function Kl(e){let t=2**53-1;for(let n of e.getLayerlessNodes())n.hasProperty(F)&&(t=Math.min(t,n.getProperty(F)));return t}function ql(e){let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e.getLayerlessNodes()){let e=a.getMargin(),o=a.position.x-e.left,s=a.position.y-e.top,c=a.position.x+a.size.x+e.right,l=a.position.y+a.size.y+e.bottom;for(let e of a.getPorts()){let t=e.getPosition(),n=e.getSize();o=Math.min(o,a.position.x+t.x),s=Math.min(s,a.position.y+t.y),c=Math.max(c,a.position.x+t.x+n.x),l=Math.max(l,a.position.y+t.y+n.y)}t=Math.min(t,o),n=Math.min(n,s),r=Math.max(r,c),i=Math.max(i,l)}Number.isFinite(t)&&(e.getSize().x=Math.max(e.getSize().x,r-t),e.getSize().y=Math.max(e.getSize().y,i-n))}const Jl=.001;function Yl(e){let t=e.getProperty(Ft),n=e.getProperty(se);if(n==null)return;let r=/* @__PURE__ */ new Set;for(let[i,o]of n){let n=[...o].sort((t,n)=>Ac(t,n,e));if(n.length===0)continue;let s=n[0].getActualSource(),c=n[n.length-1].getActualTarget();if(s===null||c===null)continue;let l=s.getNode(),u;u=l===c.getNode()?l.getGraph()?.getParentNode()??null:lc(l,c.getNode());let d;if(u!==null)d=u.getNestedGraph();else for(d=l.getGraph();d.getParentNode()!==null;)d=d.getParentNode().getGraph();let f=Xl(i,n);i.getBendPoints().length=0;let p=null;for(let o of n){let n=o.getGraph().getAllNodes().some(e=>e.getType()===`NORMAL`)?Zl(o.getGraph(),d):fc(o.getGraph(),d),s=o.getNewEdge(),l=s.getBendPoints().map(e=>({x:e.x+n.x,y:e.y+n.y})),u=o.getGraph(),m=Zl(u,d),h=fc(u,d),g=s.getSource().getNode(),_=s.getTarget().getNode(),v=e.getProperty(mn)===`INCLUDE_CHILDREN`,y=e.getProperty(S),b=e=>{if(e===null||e.getType()!==`EXTERNAL_PORT`)return!1;let t=e.getProperty(j);return y===`DOWN`||y===`UP`?t===`NORTH`||t===`SOUTH`:t===`WEST`||t===`EAST`},x=e=>e!==null&&e.getType()===`EXTERNAL_PORT`?v&&b(e)?m:h:m,ee=x(g),C=x(_),te=s.getSource().getAbsoluteAnchor(),ne=s.getTarget().getAbsoluteAnchor(),w={x:te.x+ee.x,y:te.y+ee.y},T={x:ne.x+C.x,y:ne.y+C.y};if(p!==null){let e=l.length>0?l[0]:T,n=Math.abs(p.x-e.x)>Jl,r=Math.abs(p.y-e.y)>Jl;(!t&&n&&r||t&&(n||r))&&i.getBendPoints().push({...w})}if(i.getBendPoints().push(...l),p=l.length>0?l[l.length-1]:w,f!==null){let e=s.getProperty(R);if(e!=null)for(let t of e)f.push({x:t.x+n.x,y:t.y+n.y})}if(o.getActualTarget()===c){let e=c.getNode(),t=e.getGraph(),n=e.getType()===`EXTERNAL_PORT`?fc(t,d):Zl(t,d);i.setProperty(a,n)}for(let e of[...s.getLabels()])e.position.x+=n.x,e.position.y+=n.y,i.getLabels().push(e);s.getLabels().length=0,r.add(s)}i.setSource(s),i.setTarget(c)}for(let e of r)e.setSource(null),e.setTarget(null)}function Xl(e,t){let n=t.some(e=>{let t=e.getNewEdge().getProperty(R);return t!=null&&t.length>0}),r=e.getProperty(R);return n?r==null?(r=[],e.setProperty(R,r)):r.length=0:r!=null&&(e.setProperty(R,null),r=null),r}function Zl(e,t){let n={x:0,y:0},r=e;for(;r!==null&&r!==t;){let e=r.getParentNode();if(e===null)break;n.x+=e.position.x,n.y+=e.position.y,r=e.getGraph()}return n}const Ql=/* @__PURE__ */ new WeakMap;var $l=class{process(e){let t=[],n=[...e.getLayerlessNodes()];for(let r of n)if(this.isRelevantNode(r)){this.hide(r),t.push(r);let n=e.getLayerlessNodes().indexOf(r);n!==-1&&e.getLayerlessNodes().splice(n,1)}t.length>0&&e.setProperty(ue,t)}isRelevantNode(e){let t=e.getLayerConstraint();return t===`FIRST_SEPARATE`||t===`LAST_SEPARATE`}hide(e){this.ensureNoInacceptableEdges(e);for(let t of[...e.getConnectedEdges()])this.hideEdge(e,t)}hideEdge(e,t){let n=t.getSource().getNode()===e,r=n?t.getTarget():t.getSource();n?t.setTarget(null):t.setSource(null),t.setProperty(fn,r),this.updateOppositeNodeLayerConstraints(e,r.getNode())}updateOppositeNodeLayerConstraints(e,t){if(t.getLayerConstraint()!==null)return;let n=Ql.get(t)??`NONE`,r=e.getLayerConstraint()??`NONE`,i=this.combine(n,r);if(Ql.set(t,i),!(t.getConnectedEdges().length>0))switch(i){case`FIRST_SEPARATE`:t.setLayerConstraint(`FIRST`);break;case`LAST_SEPARATE`:t.setLayerConstraint(`LAST`)}}combine(e,t){return e===`NONE`?t===`FIRST_SEPARATE`?`FIRST_SEPARATE`:`LAST_SEPARATE`:e===`FIRST_SEPARATE`?t===`FIRST_SEPARATE`?`FIRST_SEPARATE`:`BOTH`:e===`LAST_SEPARATE`?t===`FIRST_SEPARATE`?`BOTH`:`LAST_SEPARATE`:`BOTH`}ensureNoInacceptableEdges(e){let t=e.getLayerConstraint();if(t===`FIRST_SEPARATE`){for(let t of e.getIncomingEdges())if(!this.isAcceptableIncidentEdge(t))throw Error(`FIRST_SEPARATE node must not have incoming edges`)}else if(t===`LAST_SEPARATE`){for(let t of e.getOutgoingEdges())if(!this.isAcceptableIncidentEdge(t))throw Error(`LAST_SEPARATE node must not have outgoing edges`)}}isAcceptableIncidentEdge(e){let t=e.getSource().getNode(),n=e.getTarget().getNode();return t!==null&&n!==null&&t.getType()===`EXTERNAL_PORT`&&n.getType()===`EXTERNAL_PORT`}};function eu(e){let t=e.getLayers();if(t.length>0){let n=t[0],r=t[t.length-1];tu(e,n,r)}let n=e.getProperty(ue);if(n!==void 0&&n.length>0){let r=new W(e),i=new W(e);nu(n,r,i),r.getNodes().length>0&&t.unshift(r),i.getNodes().length>0&&t.push(i)}for(let e=t.length-1;e>=0;e--)t[e].getNodes().length===0&&t.splice(e,1)}function tu(e,t,n){for(let r of[...e.getLayers()])for(let e of[...r.getNodes()]){let r=e.getLayerConstraint();r===`FIRST`?e.setLayer(t):r===`LAST`&&e.setLayer(n)}let r=e.getLayers();for(let e=r.length-1;e>=0;e--)r[e].getNodes().length===0&&r.splice(e,1)}function nu(e,t,n){for(let r of e){let e=r.getLayerConstraint();e===`FIRST_SEPARATE`?r.setLayer(t):e===`LAST_SEPARATE`&&r.setLayer(n);for(let e of r.getConnectedEdges()){if(e.getSource()!==null&&e.getTarget()!==null)continue;let t=e.getTarget()===null,n=e.getProperty(fn);t?e.setTarget(n):e.setSource(n)}}}var ru=class{start=0;end=0;nodes=[]};function iu(e,t){let n=[];for(let t of e.getLayerlessNodes()){let e=t.getPosition().x,r=Math.max(e+1,t.getPosition().x+t.size.x),i=null,a=0;for(;a<n.length;a++){let o=n[a];if(o.start>=r)break;o.end>e&&(i===null?(o.nodes.push(t),o.start=Math.min(o.start,e),o.end=Math.max(o.end,r),i=o):(i.nodes.push(...o.nodes),i.end=Math.max(i.end,o.end),n.splice(a,1),a--))}if(i===null){let i=new ru;i.start=e,i.end=r,i.nodes.push(t),n.splice(a,0,i)}}let r=e.getLayers(),i=0;for(let t of n){let n=new W(e);n.id=i++,r.push(n);for(let e of t.nodes)e.setLayer(n),e.id=0}for(let t of e.getLayerlessNodes()){if(t.id!==0)continue;let n=au(t,e);for(;n.size>0;){let t=n.values().next().value;n.delete(t);for(let r of au(t,e))n.add(r)}}for(let e=r.length-1;e>=0;e--)r[e].getNodes().length===0&&r.splice(e,1);e.getLayerlessNodes().length=0}function au(e,t){e.id=1;let n=e.getLayer(),r=/* @__PURE__ */ new Set;for(let i of e.getPorts(`OUTPUT`))for(let a of i.getOutgoingEdges()){let i=a.getTarget().getNode();if(i===e)continue;let o=i.getLayer();if(o!==null&&n!==null&&o.id<=n.id){let e=n.id+1,a;e===t.getLayers().length?(a=new W(t),a.id=e,t.getLayers().push(a)):a=t.getLayers()[e],i.setLayer(a),r.add(i)}}return r}var ou=class{sources=[];visited=[];active=[];edgesToBeReversed=[];process(e,t){t.begin(`Depth-first cycle removal`,1);let n=e.getLayerlessNodes(),r=n.length;this.sources=[],this.visited=Array(r).fill(!1),this.active=Array(r).fill(!1),this.edgesToBeReversed=[];let i=0;for(let e of n)e.id=i,e.getIncomingEdges().length===0&&this.sources.push(e),i++;for(let e of this.sources)this.dfs(e);for(let e=0;e<r;e++)this.visited[e]||this.dfs(n[e]);for(let t of this.edgesToBeReversed)t.reverse(e,!0),e.setProperty(ge,!0);this.sources=[],this.visited=[],this.active=[],this.edgesToBeReversed=[],t.done()}dfs(e){if(!this.visited[e.id]){this.visited[e.id]=!0,this.active[e.id]=!0;for(let t of e.getOutgoingEdges()){if(t.isSelfLoop())continue;let e=t.getTarget().getNode();this.active[e.id]?this.edgesToBeReversed.push(t):this.dfs(e)}this.active[e.id]=!1}}},su=class{sources=/* @__PURE__ */ new Set;sinks=/* @__PURE__ */ new Set;visited=[];bfsQueue=[];edgesToBeReversed=[];graph=null;process(e,t){t.begin(`Breadth-first cycle removal`,1),this.graph=e;let n=e.getLayerlessNodes();this.bfsQueue=[],this.sources=/* @__PURE__ */ new Set,this.sinks=/* @__PURE__ */ new Set,this.visited=Array(n.length).fill(!1),this.edgesToBeReversed=[];let r=0;for(let e of n)e.id=r,e.getIncomingEdges().length===0&&this.sources.add(e),e.getOutgoingEdges().length===0&&this.sinks.add(e),r++;for(let e of this.sources)this.bfsQueue.push(e),this.bfsLoop();this.bfsLoop();let i=!0;for(;i;){i=!1;for(let e=0;e<n.length;e++)if(!this.visited[e]){this.bfsQueue.push(n[e]),i=!0;break}this.bfsLoop()}for(let t of this.edgesToBeReversed)t.reverse(e,!0),e.setProperty(ge,!0);this.sources=/* @__PURE__ */ new Set,this.visited=[],this.bfsQueue=[],this.edgesToBeReversed=[],t.done()}bfsLoop(){for(;this.bfsQueue.length>0;)this.bfs(this.bfsQueue.shift())}bfs(e){if(this.visited[e.id])return;this.visited[e.id]=!0;let t=/* @__PURE__ */ new Map,n=this.graph.getProperty(mt)===`ENFORCED`;for(let r of e.getOutgoingEdges()){let e=r.getTarget().getNode();if(!e.hasProperty(F))t.set(2147483647-t.size,[r]);else{let i=0;i=n?this.graph.getProperty(xn)*e.getProperty(In)+e.getProperty(F):e.getProperty(F);let a=t.get(i);a===void 0?t.set(i,[r]):a.push(r)}}let r=[...t.keys()].sort((e,t)=>e-t);for(let n of r){let r=t.get(n),i=r[0];if(i.isSelfLoop())continue;let a=i.getTarget().getNode();this.visited[a.id]&&!this.sources.has(e)&&!this.sinks.has(a)?this.edgesToBeReversed.push(...r):this.bfsQueue.push(a)}}},cu=class{sources=[];visited=[];active=[];edgesToBeReversed=[];graph=null;process(e,t){t.begin(`Depth-first cycle removal`,1),this.graph=e;let n=e.getLayerlessNodes(),r=n.length;this.sources=[],this.visited=Array(r).fill(!1),this.active=Array(r).fill(!1),this.edgesToBeReversed=[];let i=0;for(let e of n)e.id=i,e.getIncomingEdges().length===0&&this.sources.push(e),i++;for(let e of this.sources)this.dfs(e);for(let e=0;e<r;e++)this.visited[e]||this.dfs(n[e]);for(let t of this.edgesToBeReversed)t.reverse(e,!0),e.setProperty(ge,!0);this.sources=[],this.visited=[],this.active=[],this.edgesToBeReversed=[],t.done()}dfs(e){if(this.visited[e.id])return;this.visited[e.id]=!0,this.active[e.id]=!0;let t=/* @__PURE__ */ new Map,n=this.graph.getProperty(mt)===`ENFORCED`;for(let r of e.getOutgoingEdges()){let e=r.getTarget().getNode();if(!e.hasProperty(F))t.set(2147483647-t.size,[r]);else{let i=0;i=n?this.graph.getProperty(xn)*e.getProperty(In)+e.getProperty(F):e.getProperty(F);let a=t.get(i);a===void 0?t.set(i,[r]):a.push(r)}}let r=[...t.keys()].sort((e,t)=>e-t);for(let e of r){let n=t.get(e),r=n[0];if(r.isSelfLoop())continue;let i=r.getTarget().getNode();this.active[i.id]?this.edgesToBeReversed.push(...n):this.dfs(i)}this.active[e.id]=!1}},lu=class{edgesToBeReversed;stronglyConnectedComponents;nodeToSCCID;index=0;stack=[];tarjanId=/* @__PURE__ */ new Map;tarjanLowlink=/* @__PURE__ */ new Map;tarjanOnStack=/* @__PURE__ */ new Map;constructor(e,t,n){this.edgesToBeReversed=e,this.stronglyConnectedComponents=t,this.nodeToSCCID=n}tarjan(e){this.index=0,this.stack=[];for(let t of e.getLayerlessNodes())(this.tarjanId.get(t)??-1)===-1&&(this.stronglyConnected(t),this.stack.length=0)}stronglyConnected(e){this.tarjanId.set(e,this.index),this.tarjanLowlink.set(e,this.index),this.index++,this.stack.push(e),this.tarjanOnStack.set(e,!0);for(let t of e.getConnectedEdges()){if(t.getSource().getNode()!==e&&!this.edgesToBeReversed.includes(t)||t.getSource().getNode()===e&&this.edgesToBeReversed.includes(t))continue;let n=t.getTarget().getNode()===e?t.getSource().getNode():t.getTarget().getNode();(this.tarjanId.get(n)??-1)===-1?(this.stronglyConnected(n),this.tarjanLowlink.set(e,Math.min(this.tarjanLowlink.get(e),this.tarjanLowlink.get(n)))):this.tarjanOnStack.get(n)&&this.tarjanLowlink.set(e,Math.min(this.tarjanLowlink.get(e),this.tarjanId.get(n)))}if(this.tarjanLowlink.get(e)===this.tarjanId.get(e)){let t=/* @__PURE__ */ new Set,n;do n=this.stack.pop(),this.tarjanOnStack.set(n,!1),t.add(n);while(e!==n);if(t.size>1){let e=this.stronglyConnectedComponents.length;this.stronglyConnectedComponents.push(t);for(let n of t)this.nodeToSCCID.set(n,e)}}}resetTarjan(e){for(let t of e.getLayerlessNodes())this.tarjanOnStack.set(t,!1),this.tarjanLowlink.set(t,-1),this.tarjanId.set(t,-1),this.stack.length=0}},uu=class{stronglyConnectedComponents=[];nodeToSCCID=/* @__PURE__ */ new Map;revEdges=[];graph=null;process(e,t){if(t.begin(`Model order cycle breaking`,1),this.graph=e,this.revEdges=[],!e.hasProperty(xn))throw TypeError(`Cannot invoke "java.lang.Integer.intValue()" because the return value of "org.eclipse.elk.alg.layered.graph.LGraph.getProperty(org.eclipse.elk.graph.properties.IProperty)" is null`);let n=Math.max(e.getLayerlessNodes().length,e.getProperty(xn)),r=n*e.getProperty(Ut);for(;;){let t=new lu(this.revEdges,this.stronglyConnectedComponents,this.nodeToSCCID);if(t.resetTarjan(e),t.tarjan(e),this.stronglyConnectedComponents.length===0)break;this.findNodes(n,r);for(let t of this.revEdges)t.reverse(e,!1),e.setProperty(ge,!0);this.stronglyConnectedComponents.length=0,this.nodeToSCCID.clear(),this.revEdges.length=0}t.done()}findNodes(e,t){for(let n=0;n<this.stronglyConnectedComponents.length;n++){let r=this.stronglyConnectedComponents[n],i=null,a=new dr,o=-(2**53-1),s=this.graph.getProperty(mt)===`ENFORCED`;for(let n of r)if(i===null)i=n,o=s?a.computeConstraintGroupModelOrder(n,t,e):a.computeConstraintModelOrder(n,e);else{let r=s?a.computeConstraintGroupModelOrder(n,t,e):a.computeConstraintModelOrder(n,e);o<r&&(i=n,o=r)}for(let e of i.getOutgoingEdges())r.has(e.getTarget().getNode())&&this.revEdges.push(e)}}},du=class extends uu{findNodes(e,t){for(let n=0;n<this.stronglyConnectedComponents.length;n++){let r=this.stronglyConnectedComponents[n];if(r.size<=1)continue;let i=null,a=null,o=2**53-1,s=-(2**53-1),c=this.graph.getProperty(mt)===`ENFORCED`,l=new dr;for(let n of r)if(i===null||a===null)i=n,o=c?l.computeConstraintGroupModelOrder(n,t,e):l.computeConstraintModelOrder(n,e),a=n,s=o;else{let r=c?l.computeConstraintGroupModelOrder(n,t,e):l.computeConstraintModelOrder(n,e);o>r&&(i=n,o=r),s<r&&(a=n,s=r)}let u=i.getIncomingEdges(),d=a.getOutgoingEdges();if(u.length>d.length)for(let e of u)r.has(e.getSource().getNode())&&this.revEdges.push(e);else for(let e of d)r.has(e.getTarget().getNode())&&this.revEdges.push(e)}}};const fu=new ut(`org.eclipse.elk.layered.considerModelOrder.groupModelOrder.cbPreferredSourceId`,0),pu=new ut(`org.eclipse.elk.layered.considerModelOrder.groupModelOrder.cbPreferredTargetId`,0);var mu=class extends uu{findNodes(e,t){for(let n=0;n<this.stronglyConnectedComponents.length;n++){let r=this.stronglyConnectedComponents[n];if(r.size<=1)continue;let i=null,a=null,o=2**53-1,s=-(2**53-1),c=this.graph.getProperty(mt)===`ENFORCED`,l=new dr;for(let n of r)if(i===null||a===null)i=n,o=c?l.computeConstraintGroupModelOrder(n,t,e):l.computeConstraintModelOrder(n,e),a=n,s=o;else{let r=c?l.computeConstraintGroupModelOrder(n,t,e):l.computeConstraintModelOrder(n,e);o>r&&(i=n,o=r),s<r&&(a=n,s=r)}let u=this.graph.getProperty(fu),d=this.graph.getProperty(pu);if(i.getProperty(In)===u)for(let e of i.getIncomingEdges())r.has(e.getSource().getNode())&&this.revEdges.push(e);else if(a.getProperty(In)===d)for(let e of a.getOutgoingEdges())r.has(e.getSource().getNode())&&this.revEdges.push(e);else{let e=i.getIncomingEdges(),t=a.getOutgoingEdges();if(e.length>t.length)for(let t of e)r.has(t.getSource().getNode())&&this.revEdges.push(t);else for(let e of t)r.has(e.getTarget().getNode())&&this.revEdges.push(e)}}}},hu=class{compare;heap=[];constructor(e){this.compare=e}isEmpty(){return this.heap.length===0}push(e){this.heap.push(e),this.siftUp(this.heap.length-1)}poll(){if(this.heap.length===0)return;let e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&(this.heap[0]=t,this.siftDown(0)),e}siftUp(e){let t=this.heap[e];for(;e>0;){let n=e-1>>1,r=this.heap[n];if(this.compare(t,r)>=0)break;this.heap[e]=r,e=n}this.heap[e]=t}siftDown(e){let t=this.heap.length,n=this.heap[e];for(;;){let r=2*e+1;if(r>=t)break;let i=this.heap[r],a=r+1;if(a<t){let e=this.heap[a];this.compare(i,e)>0&&(r=a,i=e)}if(this.compare(n,i)<=0)break;this.heap[e]=i,e=r}this.heap[e]=n}},gu=class{nodeMark=[];edgeMark=[];inDeg=[];outDeg=[];topoOrd=[];inTopo=/* @__PURE__ */ new Map;process(e,t){if(t.begin(`Coffman-Graham Layering`,1),e.getLayerlessNodes().length===0){t.done();return}let n=e.getProperty(vn),r=0,i=0;for(let t of e.getLayerlessNodes()){t.id=r++;for(let e of t.getOutgoingEdges())e.id=i++}this.nodeMark=Array(r).fill(!1),this.edgeMark=Array(i).fill(!1),this.inDeg=Array(r).fill(0),this.outDeg=Array(r).fill(0),this.topoOrd=Array(r).fill(0),this.inTopo.clear(),this.transitiveReduction(e);let a=new hu((e,t)=>this.compareNodesInTopo(e,t));for(let t of e.getLayerlessNodes()){for(let e of t.getIncomingEdges())this.edgeMark[e.id]||this.inDeg[t.id]++;this.inDeg[t.id]===0&&a.push(t)}let o=0;for(;!a.isEmpty();){let e=a.poll();this.topoOrd[e.id]=o++;for(let t of e.getOutgoingEdges()){if(this.edgeMark[t.id])continue;let n=t.getTarget().getNode();this.inDeg[n.id]--;let r=this.inTopo.get(n)??[];r.push(this.topoOrd[e.id]),this.inTopo.set(n,r),this.inDeg[n.id]===0&&a.push(n)}}let s=new hu((e,t)=>{let n=this.topoOrd[e.id],r=this.topoOrd[t.id];return n>r?-1:+(n<r)});for(let t of e.getLayerlessNodes()){for(let e of t.getOutgoingEdges())this.edgeMark[e.id]||this.outDeg[t.id]++;this.outDeg[t.id]===0&&s.push(t)}let c=[],l=this.createLayer(e,c);for(;!s.isEmpty();){let t=s.poll();(this.isLayerFull(l,n)||!this.canAdd(t,l))&&(l=this.createLayer(e,c)),t.setLayer(l);for(let e of t.getIncomingEdges()){if(this.edgeMark[e.id])continue;let t=e.getSource().getNode();this.outDeg[t.id]--,this.outDeg[t.id]===0&&s.push(t)}}for(let t=c.length-1;t>=0;--t)e.getLayers().push(c[t]);e.getLayerlessNodes().length=0,t.done()}isLayerFull(e,t){return e.getNodes().length>=t}canAdd(e,t){for(let n of e.getOutgoingEdges())if(n.getTarget().getNode().getLayer()===t)return!1;return!0}createLayer(e,t){let n=new W(e);return t.push(n),n}compareNodesInTopo(e,t){let n=this.inTopo.get(e)??[],r=this.inTopo.get(t)??[],i=n.length-1,a=r.length-1;for(;i>=0&&a>=0;){let e=n[i],t=r[a];if(e!==t)return e<t?-1:1;i--,a--}return n.length===0&&r.length===0?e.id<t.id?-1:+(e.id>t.id):n.length===0?-1:1}transitiveReduction(e){for(let t of e.getLayerlessNodes()){this.nodeMark.fill(!1);for(let e of t.getOutgoingEdges())this.dfs(t,e.getTarget().getNode())}}dfs(e,t){if(!this.nodeMark[t.id]){for(let n of t.getOutgoingEdges()){let t=n.getTarget().getNode();for(let n of t.getIncomingEdges())n.getSource().getNode()===e&&(this.edgeMark[n.id]=!0);this.dfs(e,t)}this.nodeMark[t.id]=!0}}},_u=class{layeredGraph;process(e,t){t.begin(`Breadth first model order layering`,1),this.layeredGraph=e;let n=[];for(let e of this.layeredGraph.getLayerlessNodes())e.getType()===`NORMAL`&&n.push(e);n.sort((e,t)=>{if(e.hasProperty(F)&&t.hasProperty(F))return e.getProperty(F)-t.getProperty(F);throw Error(`The BF model order layer assigner requires all real nodes to have a model order.`)});let r=!0,i=new W(this.layeredGraph),a=null;this.layeredGraph.getLayers().push(i);for(let e of n)if(r)e.setLayer(i),r=!1;else{for(let t of e.getIncomingEdges())(t.getSource().getNode().getType()===`NORMAL`&&t.getSource().getNode().getLayer()===i||t.getSource().getNode().getType()===`LABEL`&&t.getSource().getNode().getIncomingEdges()[0].getSource().getNode().getLayer()===i)&&(a=new W(this.layeredGraph),this.layeredGraph.getLayers().push(a),i=new W(this.layeredGraph),this.layeredGraph.getLayers().push(i));for(let t of e.getIncomingEdges())t.getSource().getNode().getType()===`LABEL`&&t.getSource().getNode().getLayer()===null&&t.getSource().getNode().setLayer(a);e.setLayer(i)}this.layeredGraph.getLayerlessNodes().length=0;let o=[];for(let e of this.layeredGraph.getLayers())e.getNodes().length===0&&o.push(e);for(let e of o){let t=this.layeredGraph.getLayers().indexOf(e);t!==-1&&this.layeredGraph.getLayers().splice(t,1)}let s=0;for(let e of this.layeredGraph.getLayers())e.id=s,s++;t.done()}},vu=class{layeredGraph;currentLayer;currentLayerId=0;currentDummyLayer=null;nodesToPlace=[];maxToPlace=0;process(e,t){t.begin(`Depth first model order layering`,1),this.layeredGraph=e;let n=[];for(let e of this.layeredGraph.getLayerlessNodes())e.getType()===`NORMAL`&&n.push(e);n.sort((e,t)=>{if(e.hasProperty(F)&&t.hasProperty(F))return e.getProperty(F)-t.getProperty(F);throw Error(`The DF model order layer assigner requires all real nodes to have a model order.`)});let r=!0;this.currentLayer=new W(this.layeredGraph),this.currentDummyLayer=null,this.layeredGraph.getLayers().push(this.currentLayer),this.currentLayer.id=0,this.currentLayerId=0,this.nodesToPlace=[];for(let e of n)if(r)e.setLayer(this.currentLayer),r=!1;else if(this.isConnectedToCurrentLayer(e)){let t=this.currentLayerId;t=this.getMaxConnectedLayer(t,e);let n=t+2,r=t-this.currentLayerId;if(this.nodesToPlace.length>0){if(r>0){for(let e of this.nodesToPlace)e.id+=t-this.maxToPlace;this.placeNodesToPlace(),this.nodesToPlace=[],this.addNodeToLayer(n,e)}else{this.nodesToPlace.push(e),e.id=n,this.maxToPlace=Math.max(this.maxToPlace,n);for(let t of e.getIncomingEdges())t.getSource().getNode().getLayer()===null&&t.getSource().getNode().getType()===`LABEL`&&(this.nodesToPlace.push(t.getSource().getNode()),t.getSource().getNode().id=n-1);this.currentLayerId=n}}else this.addNodeToLayer(n,e)}else{this.placeNodesToPlace(),this.nodesToPlace=[];let t=0;if(e.getIncomingEdges().length===0)this.nodesToPlace.push(e),e.id=0,this.maxToPlace=Math.max(this.maxToPlace,0),this.currentLayer=this.layeredGraph.getLayers()[0],this.currentLayerId=0;else{let n=0;n=this.getMaxConnectedLayer(n,e),t=n+2,this.addNodeToLayer(t,e)}}this.nodesToPlace.length>0&&this.placeNodesToPlace(),this.layeredGraph.getLayerlessNodes().length=0;let i=[];for(let e of this.layeredGraph.getLayers())e.getNodes().length===0&&i.push(e);for(let e of i){let t=this.layeredGraph.getLayers().indexOf(e);t!==-1&&this.layeredGraph.getLayers().splice(t,1)}let a=0;for(let e of this.layeredGraph.getLayers())e.id=a,a++;t.done()}isConnectedToCurrentLayer(e){for(let t of e.getIncomingEdges()){let e,n;if(this.nodesToPlace.length===0){if(e=t.getSource().getNode().getType()===`NORMAL`&&t.getSource().getNode().getLayer()!==null&&t.getSource().getNode().getLayer().id===this.currentLayerId,t.getSource().getNode().getIncomingEdges().length>0){let e=t.getSource().getNode().getIncomingEdges()[0].getSource().getNode().getLayer();n=t.getSource().getNode().getType()===`LABEL`&&e!==null&&e.id===this.currentLayerId}else n=!1}else e=t.getSource().getNode().getType()===`NORMAL`&&t.getSource().getNode().id===this.currentLayerId,n=t.getSource().getNode().getType()===`LABEL`&&t.getSource().getNode().getIncomingEdges()[0].getSource().getNode().id===this.currentLayerId;if(e||n)return!0}return!1}addNodeToLayer(e,t){e<this.layeredGraph.getLayers().length?(this.currentLayer=this.layeredGraph.getLayers()[e],this.currentDummyLayer=this.layeredGraph.getLayers()[e-1],this.currentLayerId=e):(this.currentDummyLayer=new W(this.layeredGraph),this.currentDummyLayer.id=e-1,this.layeredGraph.getLayers().push(this.currentDummyLayer),this.currentLayer=new W(this.layeredGraph),this.currentLayer.id=e,this.layeredGraph.getLayers().push(this.currentLayer),this.currentLayerId=e),t.setLayer(this.currentLayer);for(let e of t.getIncomingEdges())e.getSource().getNode().getLayer()===null&&e.getSource().getNode().getType()===`LABEL`&&e.getSource().getNode().setLayer(this.currentDummyLayer)}getMaxConnectedLayer(e,t){let n=e;for(let e of t.getIncomingEdges())e.getSource().getNode().getLayer()!==null&&(n=Math.max(n,e.getSource().getNode().getLayer().id));return n}placeNodesToPlace(){this.maxToPlace=0;for(let e of this.nodesToPlace){if(e.id>=this.layeredGraph.getLayers().length){let t=new W(this.layeredGraph);t.id=e.id-1,this.layeredGraph.getLayers().push(t);let n=new W(this.layeredGraph);n.id=e.id,this.layeredGraph.getLayers().push(n)}e.setLayer(this.layeredGraph.getLayers()[e.id])}}},yu=class e{static UPPERBOUND_ON_WIDTH_RANGE={lower:1,upper:4};static COMPENSATOR_RANGE={lower:1,upper:2};dummySize=0;minimumNodeSize=0;normSize=[];avgSize=0;inDegree=[];outDegree=[];lastMaxWidth=0;process(t,r){r.begin(`MinWidth layering`,1);let i=t.getLayers(),a=t.getLayerlessNodes(),o=t.getProperty(un),s=t.getProperty(Sn);this.dummySize=t.getProperty(n),this.minimumNodeSize=1/0;for(let e of a){if(e.getType()!==`NORMAL`)continue;let t=e.getSize().y;this.minimumNodeSize=Math.min(this.minimumNodeSize,t)}this.minimumNodeSize=Math.max(1,this.minimumNodeSize);let c=a.length;this.inDegree=Array(c).fill(0),this.outDegree=Array(c).fill(0),this.normSize=Array(c).fill(0);let l=0;this.avgSize=0;for(let e of a)e.id=l++,this.inDegree[e.id]=this.countEdgesExceptSelfLoops(e.getIncomingEdges()),this.outDegree[e.id]=this.countEdgesExceptSelfLoops(e.getOutgoingEdges()),this.normSize[e.id]=e.getSize().y/this.minimumNodeSize,this.avgSize+=this.normSize[e.id];this.dummySize/=this.minimumNodeSize,this.avgSize/=c;let u=this.precalcSuccessors(a);a.sort((e,t)=>{let n=this.outDegree[e.id],r=this.outDegree[t.id];return n<r?1:n===r?0:-1});let d=1/0,f=2**53-1,p=null,m=o,h=o,g=s,_=s;o<0&&(m=e.UPPERBOUND_ON_WIDTH_RANGE.lower,h=e.UPPERBOUND_ON_WIDTH_RANGE.upper),s<0&&(g=e.COMPENSATOR_RANGE.lower,_=e.COMPENSATOR_RANGE.upper);for(let e=m;e<=h;e++)for(let t=g;t<=_;t++){let n=this.computeMinWidthLayering(e,t,a,u),r=n.width,i=n.layers,o=i.length;(r<d||r===d&&o<f)&&(d=r,f=o,p=i)}for(let e of p){let n=new W(t);for(let t of e)t.setLayer(n);i.push(n)}this.lastMaxWidth=d,i.reverse(),a.length=0,r.done()}precalcSuccessors(e){let t=[];for(let n of e){let e=/* @__PURE__ */ new Set;for(let t of n.getOutgoingEdges())this.isSelfLoop(t)||e.add(t.getTarget().getNode());t.push(e)}return t}computeMinWidthLayering(e,t,n,r){let i=[],a=new Set(n),o=e*this.avgSize,s=0,c=0,l=/* @__PURE__ */ new Set,u=/* @__PURE__ */ new Set,d=[],f=0,p=0,m=0,h=0,g=0,_=0;for(;a.size>0;){let e=this.selectNode(a,r,u);if(e!==null&&(a.delete(e),d.push(e),l.add(e),c=this.outDegree[e.id],f+=this.normSize[e.id]-c*this.dummySize,s=this.inDegree[e.id],p+=s*this.dummySize,_+=c*this.dummySize,h+=this.normSize[e.id]),e===null||a.size===0||f>=o&&this.normSize[e.id]>c*this.dummySize||p>=t*o){i.push(d),d=[];for(let e of l)u.add(e);l.clear(),g-=_,m=Math.max(m,g*this.dummySize+h),g+=p,f=p,p=0,_=0,h=0}}return{width:m,layers:i}}selectNode(e,t,n){for(let r of e)if(this.containsAll(n,t[r.id]))return r;return null}containsAll(e,t){for(let n of t)if(!e.has(n))return!1;return!0}countEdgesExceptSelfLoops(e){let t=0;for(let n of e)this.isSelfLoop(n)||t++;return t}isSelfLoop(e){return e.getSource().getNode()===e.getTarget().getNode()}},bu=class{widthCurrent=0;widthUp=0;maxWidth=0;currentGraph;upperLayerInfluence=0;sortedLayerlessNodes=[];alreadyPlacedNodes=/* @__PURE__ */ new Set;alreadyPlacedInOtherLayers=/* @__PURE__ */ new Set;tempLayerlessNodes=[];successors=[];outDegree=[];remainingOutGoing=[];inDegree=[];selectedNode=null;minimumNodeSize=0;maximumNodeSize=0;normSize=[];dummySize=0;process(e,t){if(t.begin(`StretchWidth layering`,1),e.getLayerlessNodes().length===0){t.done();return}this.currentGraph=e,this.widthCurrent=0,this.widthUp=0,this.minimumNodeSize=1/0,this.maximumNodeSize=-1/0,this.dummySize=e.getProperty(n),this.computeSortedNodes(),this.computeSuccessors(),this.computeDegrees(),this.minMaxNodeSize(),this.computeNormalizedSize(),this.minimumNodeSize=Math.max(1,this.minimumNodeSize),this.maximumNodeSize=Math.max(1,this.maximumNodeSize),this.dummySize/=this.minimumNodeSize,this.maxWidth=this.maximumNodeSize/this.minimumNodeSize,this.upperLayerInfluence=this.getAverageOutDegree();let r=new W(this.currentGraph);for(this.currentGraph.getLayers().push(r),this.tempLayerlessNodes=[...this.sortedLayerlessNodes],this.remainingOutGoing=[...this.outDegree];this.tempLayerlessNodes.length>0;)if(this.selectedNode=this.selectNode(),this.selectedNode===null||this.conditionGoUp()&&this.alreadyPlacedNodes.size>0){this.updateOutGoing(r),r=new W(this.currentGraph),this.currentGraph.getLayers().push(r);for(let e of this.alreadyPlacedNodes)this.alreadyPlacedInOtherLayers.add(e);this.alreadyPlacedNodes.clear(),this.widthCurrent=this.widthUp,this.widthUp=0}else this.conditionGoUp()?(this.currentGraph.getLayers().length=0,r=new W(this.currentGraph),this.currentGraph.getLayers().push(r),this.widthCurrent=0,this.widthUp=0,this.alreadyPlacedNodes.clear(),this.alreadyPlacedInOtherLayers.clear(),this.maxWidth++,this.tempLayerlessNodes=[...this.sortedLayerlessNodes],this.remainingOutGoing=[...this.outDegree]):(this.selectedNode.setLayer(r),this.tempLayerlessNodes.splice(this.tempLayerlessNodes.indexOf(this.selectedNode),1),this.alreadyPlacedNodes.add(this.selectedNode),this.widthCurrent=this.widthCurrent-this.outDegree[this.selectedNode.id]*this.dummySize+this.normSize[this.selectedNode.id],this.widthUp+=this.inDegree[this.selectedNode.id]*this.dummySize);e.getLayerlessNodes().length=0,e.getLayers().reverse(),t.done()}conditionGoUp(){let e=this.widthCurrent-this.outDegree[this.selectedNode.id]*this.dummySize+this.normSize[this.selectedNode.id]>this.maxWidth,t=this.widthUp+this.inDegree[this.selectedNode.id]*this.dummySize>this.maxWidth*this.upperLayerInfluence*this.dummySize;return e||t}selectNode(){for(let e of this.tempLayerlessNodes)if(this.remainingOutGoing[e.id]<=0)return e;return null}computeSortedNodes(){let e=this.currentGraph.getLayerlessNodes();this.sortedLayerlessNodes=[...e];for(let t of e)t.id=this.getRank(t);this.sortedLayerlessNodes.sort((e,t)=>e.id<t.id?1:e.id>t.id?-1:0)}getRank(e){let t=e.getOutgoingEdges().length,n;for(let r of e.getIncomingEdges())n=r.getSource().getNode().getOutgoingEdges().length,t=Math.max(t,n);return t}computeSuccessors(){let e=0;this.successors=[];let t=/* @__PURE__ */ new Set;for(let n of this.sortedLayerlessNodes){n.id=e;for(let e of n.getOutgoingEdges())t.add(e.getTarget().getNode());t.delete(n),this.successors.push(new Set(t)),t.clear(),e++}}computeDegrees(){this.inDegree=Array(this.sortedLayerlessNodes.length).fill(0),this.outDegree=Array(this.sortedLayerlessNodes.length).fill(0);for(let e of this.sortedLayerlessNodes)this.inDegree[e.id]=e.getIncomingEdges().length,this.outDegree[e.id]=e.getOutgoingEdges().length}minMaxNodeSize(){for(let e of this.sortedLayerlessNodes){if(e.getType()!==`NORMAL`)continue;let t=e.getSize().y;this.minimumNodeSize=Math.min(this.minimumNodeSize,t),this.maximumNodeSize=Math.max(this.maximumNodeSize,t)}}avereageNodeSize(){let e=0;for(let t of this.sortedLayerlessNodes)e+=this.normSize[t.id];return e/this.sortedLayerlessNodes.length}computeNormalizedSize(){this.normSize=Array(this.sortedLayerlessNodes.length).fill(0);for(let e of this.sortedLayerlessNodes)this.normSize[e.id]=e.getSize().y/this.minimumNodeSize}getAverageOutDegree(){let e=0;for(let t of this.currentGraph.getLayerlessNodes())e+=t.getOutgoingEdges().length;return e/this.currentGraph.getLayerlessNodes().length}updateOutGoing(e){for(let t of e.getNodes())for(let e of t.getIncomingEdges()){let t=e.getSource().getNode().id;this.remainingOutGoing[t]=this.remainingOutGoing[t]-1}}};const xu=new ut(`org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening`,.3);var Su=class e{nodes=[];id;indexInLastLayer=-1;lastLayer=-1;deflection=0;weight=0;refSegment=null;nodeType=`NORMAL`;constructor(e){this.id=e}region(){let e=this;for(;e.refSegment!==null;)e=e.refSegment;return e}split(t,n,r){let i=this.nodes.indexOf(t),a=new e(n),o=this.nodes.splice(i);a.nodes.push(...o);for(let e of o)r.set(e,n);return a}};function Cu(e){let t=e.getProperty(Rn),n=wu(e),r=/* @__PURE__ */ new Map,i=Tu(e,r);Ou(e,i,t),ku(e,i,t,n,r),Mu(e,i,t)}function wu(e){let t=/* @__PURE__ */ new Map;for(let n of e.getLayers())for(let e of n.getNodes()){let n=-(2**53-1),r=-(2**53-1);for(let t of e.getPorts()){for(let e of t.getIncomingEdges())n=Math.max(n,e.getProperty(T));for(let e of t.getOutgoingEdges())r=Math.max(r,e.getProperty(T))}t.set(e,{input:n,output:r})}return t}function Tu(e,t){let n=[],r=0;for(let i of e.getLayers())for(let e of i.getNodes())if(!t.has(e)){let i=new Su(r++);Eu(e,i,t),n.push(i)}let i=n.map(()=>[]),a=n.map(()=>0);Du(e,n,i,a,t);let o=[];for(let e=0;e<n.length;e++)a[e]===0&&o.push(n[e]);let s=Array(n.length),c=0;for(;o.length>0;){let e=o.shift();for(s[e.id]=c++;i[e.id].length>0;){let t=i[e.id].shift();a[t.id]--,a[t.id]===0&&o.push(t)}}let l=Array(n.length);for(let e=0;e<n.length;e++){let r=n[e],i=s[e];l[i]=r,r.id=i;for(let e of r.nodes)t.set(e,i)}return l}function Eu(e,t,n){let r=e.getType();if(n.has(e))return!1;if(n.set(e,t.id),t.nodes.push(e),t.nodeType=r,r===`LONG_EDGE`||r===`NORTH_SOUTH_PORT`)for(let r of e.getPorts())for(let i of r.getSuccessorPorts()){let r=i.getNode(),a=r.getType();if(e.getLayer()!==r.getLayer()&&(a===`LONG_EDGE`||a===`NORTH_SOUTH_PORT`)&&Eu(r,t,n))return!0}return!0}function Du(e,t,n,r,i){let a=t.length,o=0;for(let s of e.getLayers()){let e=s.getNodes();if(e.length===0)continue;let c=0,l=null,u=e[0],d=null;for(;u!==null;){if(d=t[i.get(u)],d.indexInLastLayer>=0){let o=null;for(let n=c+1;n<e.length;n++){let r=e[n],a=t[i.get(r)];if(a.lastLayer===d.lastLayer&&a.indexInLastLayer<d.indexInLastLayer){o=a;break}}if(o!==null){if(l!==null){let e=t[i.get(l)];r[d.id]--;let a=n[e.id],o=a.indexOf(d);o!==-1&&a.splice(o,1)}d=d.split(u,a++,i),t.push(d),n.push([]),l===null?r.push(0):(n[i.get(l)].push(d),r.push(1))}}let s=null;if(c+1<e.length){s=e[c+1];let a=t[i.get(s)];n[d.id].push(a),r[a.id]++}d.lastLayer=o,d.indexInLastLayer=c++,l=u,u=s}o++}}function Ou(e,t,r){let i=e.getLayers().length,a=Array(i).fill(0),o=Array(i).fill(null);for(let i of t){let t=0;for(let s of i.nodes){let i=s.getLayer().getIndex();a[i]++;let c=e.getProperty(n);a[i]>0&&o[i]!==null&&(c=r.getVerticalSpacing(o[i],s)),t=Math.max(t,s.getLayer().getSize().y+c)}for(let e of i.nodes){e.getPosition().y=t+e.getMargin().top;let n=e.getLayer();n.getSize().y=t+e.getMargin().top+e.getSize().y+e.getMargin().bottom,o[n.getIndex()]=e}}}function ku(e,t,n,r,i){let a=e.getProperty(xu),o=e.getProperty(en),s=4,c=3,l=20/o,u=!1,d=`FORW_PENDULUM`,f=2**53-1;do{let p=d!==`BACKW_PENDULUM`,m=d!==`FORW_PENDULUM`,h=0;for(let e of t)e.refSegment=null,Au(e,t,p,m,a,r,i),h+=Math.abs(e.deflection);let g;do g=ju(e,t,n,i);while(g);for(let e of t){let t=e.region().deflection;if(t!==0)for(let n of e.nodes)n.getPosition().y+=t}d===`FORW_PENDULUM`||d===`BACKW_PENDULUM`?(s--,s<=0&&(h<f||-s>o)?(d=`RUBBER`,f=2**53-1):d===`FORW_PENDULUM`?(d=`BACKW_PENDULUM`,f=h):(d=`FORW_PENDULUM`,f=h)):(u=h>=f||f-h<l,f=h,u&&c--)}while(!(u&&c<=0))}function Au(e,t,n,r,i,a,o){let s=0,c=0;for(let i of e.nodes){let l=0,u=0,d=a.get(i),f=n?d.input:-(2**53-1),p=r?d.output:-(2**53-1),m=Math.max(f,p);for(let s of i.getPorts()){let c=i.getPosition().y+s.getPosition().y+s.getAnchor().y;if(r)for(let n of s.getOutgoingEdges()){let r=n.getTarget(),i=r.getNode();if(e!==t[o.get(i)]){let e=a.get(i),t=Math.max(e.input,e.output),o=n.getProperty(T);o>=m&&o>=t&&(l+=i.getPosition().y+r.getPosition().y+r.getAnchor().y-c,u++)}}if(n)for(let n of s.getIncomingEdges()){let r=n.getSource(),i=r.getNode();if(e!==t[o.get(i)]){let e=a.get(i),t=Math.max(e.input,e.output),o=n.getProperty(T);o>=m&&o>=t&&(l+=i.getPosition().y+r.getPosition().y+r.getAnchor().y-c,u++)}}}u>0&&(s+=l/u,c++)}c>0?(e.deflection=i*s/c,e.weight=c):(e.deflection=0,e.weight=0)}function ju(e,t,n,r){let i=!1,a=1e-4*e.getProperty(Zt);for(let o of e.getLayers()){let e=o.getNodes();if(e.length===0)continue;let s=e[0],c=t[r.get(s)].region();for(let o=1;o<e.length;o++){let l=e[o],u=t[r.get(l)].region();if(c!==u){let e=n.getVerticalSpacing(s,l);if(s.getPosition().y+s.getSize().y+s.getMargin().bottom+c.deflection+e>l.getPosition().y-l.getMargin().top+u.deflection+a){let e=c.weight+u.weight;e>0&&(u.deflection=(u.weight*u.deflection+c.weight*c.deflection)/e,u.weight=e,c.refSegment=u,i=!0)}}s=l,c=u}}return i}function Mu(e,t,n){for(let e of t){let t=2**53-1,r=2**53-1;for(let i of e.nodes){let e=i.getIndex(),a=i.getLayer().getNodes(),o,s;if(e>0){let t=a[e-1],r=n.getVerticalSpacing(i,t);o=i.getPosition().y-i.getMargin().top-(t.getPosition().y+t.getSize().y+t.getMargin().bottom+r)}else o=i.getPosition().y-i.getMargin().top;if(t=Math.min(o,t),e<a.length-1){let t=a[e+1],r=n.getVerticalSpacing(i,t);s=t.getPosition().y-t.getMargin().top-(i.getPosition().y+i.getSize().y+i.getMargin().bottom+r)}else s=2*i.getPosition().y;r=Math.min(s,r)}let i=2**53-1,a=!1,o=e.nodes[0];for(let e of o.getPorts()){let n=o.getPosition().y+e.getPosition().y+e.getAnchor().y;for(let o of e.getIncomingEdges()){let e=o.getSource(),s=e.getNode().getPosition().y+e.getPosition().y+e.getAnchor().y-n;Math.abs(s)<Math.abs(i)&&Math.abs(s)<(s<0?t:r)&&(i=s,a=!0)}}let s=e.nodes[e.nodes.length-1];for(let e of s.getPorts()){let n=s.getPosition().y+e.getPosition().y+e.getAnchor().y;for(let o of e.getOutgoingEdges()){let e=o.getTarget(),s=e.getNode().getPosition().y+e.getPosition().y+e.getAnchor().y-n;Math.abs(s)<Math.abs(i)&&Math.abs(s)<(s<0?t:r)&&(i=s,a=!0)}}if(a&&i!==0)for(let t of e.nodes)t.getPosition().y+=i}}function Nu(e){let t=0;for(let n of e.getLayers()){let e=0,r=!1;for(let i of n.getNodes())i.getType()===`NORMAL`&&(r=!0,i.setProperty(pt,t),i.setProperty(Ht,e),e++);r&&t++}}function Pu(e){for(let t of e.getLayers())for(let n of t.getNodes()){if(!n.getProperty(it)||n.getPorts().length>2)continue;let t=0,r=0,i=0,a=0;for(let e of n.getPorts())switch(e.getSide()){case`NORTH`:t++;break;case`EAST`:r++;break;case`SOUTH`:i++;break;case`WEST`:a++}t===0&&i===0&&Fu(e,n,a<=r)}}function Fu(e,t,n){let r=[],i=2**53-1,a=2**53-1,o=2**53-1;if(n){i=e.getSize().x;for(let e of t.getPorts())for(let t of e.getOutgoingEdges()){let e=t.getBendPoints();if(e.length===0)continue;let n=e[0];n.x<i&&(a=i-n.x,o=2**53-1,r.length=0,i=n.x),n.x<=i&&(r.push(t),e.length>1&&(o=Math.min(o,Math.abs(e[1].y-n.y))))}}else for(let e of t.getPorts())for(let t of e.getIncomingEdges()){let e=t.getBendPoints();if(e.length===0)continue;let n=e[e.length-1];n.x>i&&(a=n.x-i,o=2**53-1,r.length=0,i=n.x),n.x>=i&&(r.push(t),e.length>1&&(o=Math.min(o,Math.abs(e[e.length-2].y-n.y))))}if(r.length===0||a<=t.size.x/2||o<=t.size.y/2)return;let s=new H;s.setNode(t),s.setSide(`NORTH`),s.position.x=t.size.x/2;let c=new H;c.setNode(t),c.setSide(`SOUTH`),c.position.x=t.size.x/2,c.position.y=t.size.y;for(let e of r){let t,r;n?(t=e.getBendPoints().shift(),r=e.getBendPoints().length===0?e.getTarget().getAbsoluteAnchor():e.getBendPoints()[0],r.y>=t.y?e.setSource(c):e.setSource(s)):(t=e.getBendPoints().pop(),r=e.getBendPoints().length===0?e.getSource().getAbsoluteAnchor():e.getBendPoints()[e.getBendPoints().length-1],r.y>=t.y?e.setTarget(c):e.setTarget(s));let i=e.getProperty(R);if(i!=null){let e=i.findIndex(e=>e.x===t.x&&e.y===t.y);e!==-1&&i.splice(e,1)}}t.position.x=i-t.size.x/2}const Iu={top:0,left:0,bottom:0,right:0},Lu=e=>({...e}),Ru=[`NORTH`,`SOUTH`,`EAST`,`WEST`];var zu=class{padding=Lu(Iu);contributesMinWidth=!1;contributesMinHeight=!1;rect={x:0,y:0,width:0,height:0}},Bu=class extends zu{content={x:0,y:0};getMinimumWidth(){return this.content.x+this.padding.left+this.padding.right}getMinimumHeight(){return this.content.y+this.padding.top+this.padding.bottom}},Vu=class extends zu{content={x:0,y:0};gap;labelRefs=[];hAlign=`CENTER`;vAlign=`CENTER`;constructor(e){super(),this.gap=e}addLabel(e,t,n){this.content.y>0&&(this.content.y+=this.gap),this.content.x=Math.max(this.content.x,e),this.content.y+=t,n&&this.labelRefs.push(n)}setHorizontalAlignment(e){this.hAlign=e}setVerticalAlignment(e){this.vAlign=e}getLabels(){return this.labelRefs}applyLabelLayout(){let e=this.rect,t=e.y;this.vAlign===`CENTER`?t+=(e.height-this.content.y)/2:this.vAlign===`BOTTOM`&&(t+=e.height-this.content.y);for(let n of this.labelRefs){let r=n.size.x;n.position.y=t,t+=n.size.y+this.gap,this.hAlign===`LEFT`?n.position.x=e.x+this.padding.left:this.hAlign===`CENTER`?n.position.x=e.x+this.padding.left+(e.width-r)/2:n.position.x=e.x+e.width-this.padding.right-r}}getMinimumWidth(){return this.content.x+this.padding.left+this.padding.right}getMinimumHeight(){return this.content.y+this.padding.top+this.padding.bottom}};function Hu(e,t){return e===null||t&&!e.contributesMinWidth||e instanceof Bu&&e.content.x===0?0:e.getMinimumWidth()}function Uu(e){return e===null||e instanceof Bu&&e.content.x===0?0:e.getMinimumWidth()}function Wu(e){return e===null||e instanceof Bu&&e.content.y===0?0:e.getMinimumHeight()}function Gu(e,t){return e===null||t&&!e.contributesMinHeight||e instanceof Bu&&e.content.y===0?0:e.getMinimumHeight()}var Ku=class extends zu{mode;symmetrical;gap;cells=[null,null,null];constructor(e,t,n){super(),this.mode=e,this.symmetrical=t,this.gap=n}getMinimumWidth(){let e;if(this.mode===`VERTICAL`)e=Math.max(0,Hu(this.cells[0],!0),Hu(this.cells[1],!0),Hu(this.cells[2],!0));else{let t=Hu(this.cells[0],!0),n=Hu(this.cells[1],!0),r=Hu(this.cells[2],!0);this.symmetrical&&(t=Math.max(t,r),r=t);let i=0,a=0;t>0&&(i+=t,a++),n>0&&(i+=n,a++),r>0&&(i+=r,a++),e=a>1?i+this.gap*(a-1):i}return e>0?e+this.padding.left+this.padding.right:0}getMinimumHeight(){let e;if(this.mode===`VERTICAL`){let t=Gu(this.cells[0],!0),n=Gu(this.cells[1],!0),r=Gu(this.cells[2],!0);this.symmetrical&&(t=Math.max(t,r),r=t);let i=0,a=0;t>0&&(i+=t,a++),n>0&&(i+=n,a++),r>0&&(i+=r,a++),e=a>1?i+this.gap*(a-1):i}else e=Math.max(0,Gu(this.cells[0],!0),Gu(this.cells[1],!0),Gu(this.cells[2],!0));return e>0?e+this.padding.top+this.padding.bottom:0}},qu=class extends zu{symmetrical;gap;cells=[[null,null,null],[null,null,null],[null,null,null]];constructor(e,t){super(),this.symmetrical=e,this.gap=t}minHeightOfRow(e,t){let n=0;for(let r=0;r<3;r++)n=Math.max(n,Gu(this.cells[e][r],t));return n}minColumnWidthSum(e,t){let n=this.cells[e],r=Hu(n[0],t),i=Hu(n[1],t),a=Hu(n[2],t),o=0,s=0;return r>0&&(o+=r,s++),i>0&&(o+=i,s++),a>0&&(o+=a,s++),s>1?o+this.gap*(s-1):o}getMinimumWidth(){let e=Math.max(this.minColumnWidthSum(0,!0),this.minColumnWidthSum(1,!0),this.minColumnWidthSum(2,!0));return e>0?e+this.padding.left+this.padding.right:0}getMinimumHeight(){let e=this.minHeightOfRow(0,!0),t=this.minHeightOfRow(1,!0),n=this.minHeightOfRow(2,!0);this.symmetrical&&(e=Math.max(e,n),n=e);let r=0,i=0;e>0&&(r+=e,i++),t>0&&(r+=t,i++),n>0&&(r+=n,i++);let a=i>1?r+this.gap*(i-1):r;return a>0?a+this.padding.top+this.padding.bottom:0}};function Ju(e,t,n,r){return e.hasProperty(n)?e.getProperty(n):t&&t.hasProperty(n)?t.getProperty(n):r}function Yu(e,t){let n=t===`NORTH`?ye:t===`SOUTH`?Se:t===`EAST`?Gt:ke,r=e.node.hasProperty(n)?e.node.getProperty(n):void 0;return r&&r!==`DISTRIBUTED`?r:Ju(e.node,e.graph,o,`DISTRIBUTED`)}function Xu(e){return!e.includes(`INSIDE`)&&!e.includes(`OUTSIDE`)}function Zu(e){let t=e.getLabels();if(t.length===0)return null;let n=1/0,r=1/0,i=-1/0,a=-1/0;for(let e of t)n=Math.min(n,e.position.x),r=Math.min(r,e.position.y),i=Math.max(i,e.position.x+e.size.x),a=Math.max(a,e.position.y+e.size.y);return{x:n,y:r,w:i-n,h:a-r}}function Qu(e,t){for(let t of Ru)e.portContexts.set(t,[]);let n=Xu(e.portLabelsPlacement),r=!n&&(!t||!e.portLabelsPlacement.includes(`INSIDE`)),i=e.portLabelsPlacement.includes(`NEXT_TO_PORT_IF_POSSIBLE`);for(let t of e.node.getPorts()){let a=t.getSide();if(a===`UNDEFINED`)continue;let o=!1;e.portLabelsPlacement.includes(`INSIDE`)?(o=!0,e.treatAsCompoundNode&&(o=i)):e.portLabelsPlacement.includes(`OUTSIDE`)&&(o=i&&t.getConnectedEdges().length===0);let s={port:t,margin:{left:0,right:0,top:0,bottom:0},labelsNextToPort:o,labelCell:null,fixedLabelBounds:n?Zu(t):null};if(r){let n=t.getLabels();if(n.length>0){let t=new Vu(e.labelCellSpacing);for(let e of n)t.addLabel(e.size.x,e.size.y,e);s.labelCell=t,e.hasPortLabelCells=!0}}e.portContexts.get(a).push(s)}}function $u(e){let t=e.insideGrid;t.padding=Lu(e.nodeLabelsPadding);let n=e.outsideNodeLabelContainers,r=e.node.getProperty(N);for(let i of e.node.getLabels()){let a=Array.isArray(i.placement)?i.placement:String(i.placement??``).split(/[\s,]+/),o=[];for(let e of a){let t=e.replace(/^\[+|\]+$/g,``).trim();t&&o.push(t)}let s=o.length>0?o:r??[],c=s.includes(`INSIDE`),l=s.includes(`V_BOTTOM`)?`bottom`:s.includes(`V_CENTER`)?`center`:`top`,u=s.includes(`H_RIGHT`)?`right`:s.includes(`H_LEFT`)?`left`:`center`,d=l===`bottom`?2:+(l===`center`),f=u===`right`?2:u===`left`?0:1;if(c){let n=t.cells[d][f];n||(n=new Vu(e.labelCellSpacing),t.cells[d][f]=n),n.addLabel(i.size.x,i.size.y)}else{let t;t=l===`bottom`?n.get(`SOUTH`):u===`left`&&(s.includes(`H_PRIORITY`)||l===`center`)?n.get(`WEST`):u===`right`&&(s.includes(`H_PRIORITY`)||l===`center`)?n.get(`EAST`):n.get(`NORTH`);let r=new Vu(e.labelCellSpacing);r.addLabel(i.size.x,i.size.y),t.mode===`HORIZONTAL`?t.cells[f]=r:t.cells[1]=r}}}function ed(e){let t=e.nodeContainer.padding;for(let[n,r]of e.portContexts)for(let i of r){let r=i.port.getProperty(E)??0;if(r<0){let e=-r;n===`NORTH`?t.top=Math.max(t.top,e):n===`SOUTH`?t.bottom=Math.max(t.bottom,e):n===`EAST`?t.right=Math.max(t.right,e):t.left=Math.max(t.left,e)}if(Xu(e.portLabelsPlacement)&&i.fixedLabelBounds){let a=i.fixedLabelBounds,o=i.port.size,s=0;s=n===`NORTH`?Math.max(0,a.h+a.y-(o.y+r)):n===`SOUTH`?Math.max(0,-a.y-r):n===`EAST`?Math.max(0,-a.x-r):Math.max(0,a.w+a.x-(o.x+r));let c=e.symmetry;if(n===`NORTH`){let e=s>t.top;t.top=Math.max(t.top,s),c&&e&&(t.top=Math.max(t.top,t.bottom),t.bottom=t.top+r)}else if(n===`SOUTH`){let e=s>t.bottom;t.bottom=Math.max(t.bottom,s),c&&e&&(t.bottom=Math.max(t.bottom,t.top),t.top=t.bottom+r)}else if(n===`EAST`){let e=s>t.right;t.right=Math.max(t.right,s),c&&e&&(t.right=Math.max(t.left,t.right),t.left=t.right+r)}else{let e=s>t.left;t.left=Math.max(t.left,s),c&&e&&(t.left=Math.max(t.left,t.right),t.right=t.left+r)}}}}function td(e){let t=e.portConstraints;if(t===`FIXED_RATIO`||String(t)===`FIXED_RATIO`||t===`FIXED_POS`||String(t)===`FIXED_POSITION`)return;let n=e.insidePortLabelCells.get(`EAST`),r=e.insidePortLabelCells.get(`WEST`),i=e.insidePortLabelCells.get(`NORTH`),a=e.insidePortLabelCells.get(`SOUTH`),o=e.nodeContainer.padding.top+i.getMinimumHeight()+e.labelCellSpacing,s=e.nodeContainer.padding.bottom+a.getMinimumHeight()+e.labelCellSpacing,c=Math.max(0,n.padding.top-o,r.padding.top-o),l=Math.max(0,n.padding.bottom-s,r.padding.bottom-s);n.padding.top=c,r.padding.top=c,n.padding.bottom=l,r.padding.bottom=l}function nd(e){for(let t of Ru){let n=e.insidePortLabelCells.get(t),r=e.portContexts.get(t);if(r.length===0){t===`NORTH`||t===`SOUTH`?(n.padding.left=0,n.padding.right=0,e.portLabelSpacingV>=0&&(t===`NORTH`?n.padding.top=e.portLabelSpacingV:n.padding.bottom=e.portLabelSpacingV)):(n.padding.top=0,n.padding.bottom=0);continue}t===`NORTH`||t===`SOUTH`?(n.padding.left=e.surrounding.left,n.padding.right=e.surrounding.right,e.portLabelSpacingV>=0&&(t===`NORTH`?n.padding.top=e.portLabelSpacingV:n.padding.bottom=e.portLabelSpacingV)):(n.padding.top=e.surrounding.top,n.padding.bottom=e.surrounding.bottom),e.constraints.includes(`PORT_LABELS`)&&rd(e,t);let i=t===`NORTH`||t===`SOUTH`,a=0;for(let t=0;t<r.length;t++){let n=r[t];a+=i?n.margin.left+n.port.size.x+n.margin.right:n.margin.top+n.port.size.y+n.margin.bottom,t<r.length-1&&(a+=e.portPort)}Yu(e,t)===`DISTRIBUTED`&&(a+=2*e.portPort),i?n.content.x=a:n.content.y=a;let o=e.portConstraints!==`FIXED_POS`&&String(e.portConstraints)!==`FIXED_POSITION`;if(i&&e.portLabelsPlacement.includes(`INSIDE`)&&e.constraints.includes(`PORT_LABELS`)&&o){let e=0;for(let t of r)t.labelCell&&(e=Math.max(e,t.labelCell.getMinimumHeight()));e>0&&(n.content.y=e)}if(!i&&e.portLabelsPlacement.includes(`INSIDE`)){let i=0;for(let e of r)e.labelCell&&(i=Math.max(i,e.labelCell.getMinimumWidth()));i>0&&(n.content.x=i,t===`EAST`?n.padding.right=e.portLabelSpacingH:n.padding.left=e.portLabelSpacingH)}}}function rd(e,t){let n=e.portContexts.get(t),r=e.portLabelsPlacement.includes(`OUTSIDE`),i=e.sizeOptions.includes(`UNIFORM_PORT_SPACING`);for(let r of n){let n=r.labelCell?r.labelCell.getMinimumWidth():0,i=r.labelCell?r.labelCell.getMinimumHeight():0;if(r.labelCell){if(t===`NORTH`||t===`SOUTH`){if(r.labelsNextToPort){let e=r.port.size.x;if(n>e){let t=(n-e)/2;r.margin.left=t,r.margin.right=t}}else r.margin.right=e.portLabelSpacingH+n}else if(r.labelsNextToPort){let e=r.port.size.y;if(i>e){let t=(i-e)/2;r.margin.top=t,r.margin.bottom=t}}else r.margin.bottom=e.portLabelSpacingV+i}else if(Xu(e.portLabelsPlacement)&&r.fixedLabelBounds){let e=r.fixedLabelBounds;t===`NORTH`||t===`SOUTH`?(e.x<0&&(r.margin.left=-e.x),e.x+e.w>r.port.size.x&&(r.margin.right=e.x+e.w-r.port.size.x)):(e.y<0&&(r.margin.top=-e.y),e.y+e.h>r.port.size.y&&(r.margin.bottom=e.y+e.h-r.port.size.y))}}if(r){let e=n[0],r=n[n.length-1];t===`NORTH`||t===`SOUTH`?(e.margin.left=0,r.margin.right=0):(e.margin.top=0,r.margin.bottom=0)}if(i){let e=0,i=0,a=0,o=0;for(let t of n)t.margin.left>e&&(e=t.margin.left),t.margin.right>i&&(i=t.margin.right),t.margin.top>a&&(a=t.margin.top),t.margin.bottom>o&&(o=t.margin.bottom);for(let t of n)t.margin.left=e,t.margin.right=i,t.margin.top=a,t.margin.bottom=o;if(r){let e=n[0],r=n[n.length-1];t===`NORTH`||t===`SOUTH`?(e.margin.left=0,r.margin.right=0):(e.margin.top=0,r.margin.bottom=0)}}}function id(e){if(e.constraints.length===0)return;let t=e.insidePortLabelCells,n=e.portConstraints!==`FIXED_RATIO`&&e.portConstraints!==`FIXED_POS`&&String(e.portConstraints)!==`FIXED_RATIO`&&String(e.portConstraints)!==`FIXED_POSITION`;if(e.constraints.includes(`PORTS`)&&(t.get(`NORTH`).contributesMinWidth=!0,t.get(`SOUTH`).contributesMinWidth=!0,t.get(`EAST`).contributesMinHeight=n,t.get(`WEST`).contributesMinHeight=n,e.middleRow.contributesMinHeight=n,e.constraints.includes(`PORT_LABELS`)&&(t.get(`NORTH`).contributesMinHeight=!0,t.get(`SOUTH`).contributesMinHeight=!0,t.get(`EAST`).contributesMinWidth=!0,t.get(`WEST`).contributesMinWidth=!0,e.middleRow.contributesMinWidth=!0)),e.constraints.includes(`NODE_LABELS`)){e.insideGrid.contributesMinHeight=!0,e.insideGrid.contributesMinWidth=!0,e.middleRow.contributesMinHeight=!0,e.middleRow.contributesMinWidth=!0;let t=e.sizeOptions.includes(`OUTSIDE_NODE_LABELS_OVERHANG`);for(let t=0;t<3;t++)for(let n=0;n<3;n++){let r=e.insideGrid.cells[t][n];r&&(r.contributesMinHeight=!0,r.contributesMinWidth=!0)}for(let n of Ru){let r=e.outsideNodeLabelContainers.get(n);r.contributesMinHeight=!t,r.contributesMinWidth=!t;for(let e of r.cells)e&&(e.contributesMinHeight=!t,e.contributesMinWidth=!t)}}e.constraints.includes(`MINIMUM_SIZE`)&&e.sizeOptions.includes(`MINIMUM_SIZE_ACCOUNTS_FOR_PADDING`)&&(e.middleRow.contributesMinHeight=!0,e.middleRow.contributesMinWidth=!0,e.insideGrid.contributesMinHeight||(e.insideGrid.contributesMinHeight=!0,e.insideGrid.contributesMinWidth=!0))}function ad(e,t,n){let r=e.hasProperty(He)?e.getProperty(He):t?.getProperty(He)??[],i=r.length===0||r.length===1&&r[0]===`PORT_LABELS`,a=e.hasProperty(_)?e.getProperty(_):t&&t.hasProperty(_)?t.getProperty(_):[],o=String(e.getProperty(O)??`UNDEFINED`),s=e.hasProperty(Yn)?e.getProperty(Yn):[`OUTSIDE`],c=e.getProperty(`org.eclipse.elk.portLabels.treatAsGroup`)===!0,l=!a.includes(`ASYMMETRICAL`),u=Ju(e,t,dn,10),d=Ju(e,t,Ot,Lu(Iu)),f=Ju(e,t,Nt,{top:5,right:5,bottom:5,left:5}),p=Ju(e,t,dt,0),m=2*p,h=Ju(e,t,cn,5),g=Ju(e,t,bn,1),v=Ju(e,t,vt,1),y=new Ku(`VERTICAL`,l,0),b=new Ku(`HORIZONTAL`,l,0);y.cells[1]=b;let x=new qu(l,m);b.cells[1]=x;let S=/* @__PURE__ */ new Map,ee=new Bu,C=new Bu,te=new Bu,ne=new Bu;S.set(`NORTH`,ee),S.set(`SOUTH`,C),S.set(`WEST`,te),S.set(`EAST`,ne),y.cells[0]=ee,y.cells[2]=C,b.cells[0]=te,b.cells[2]=ne;let w=/* @__PURE__ */ new Map;w.set(`NORTH`,new Ku(`HORIZONTAL`,l,m)),w.set(`SOUTH`,new Ku(`HORIZONTAL`,l,m)),w.set(`WEST`,new Ku(`VERTICAL`,l,m)),w.set(`EAST`,new Ku(`VERTICAL`,l,m)),w.get(`NORTH`).padding.bottom=h,w.get(`SOUTH`).padding.top=h,w.get(`WEST`).padding.right=h,w.get(`EAST`).padding.left=h;let T={node:e,graph:t,treatAsCompoundNode:e.getNestedGraph()!==null||e.getProperty(Ae),sizeFixed:i,constraints:r,sizeOptions:a,portConstraints:o,portLabelsPlacement:s,portLabelsTreatAsGroup:c,symmetry:l,portPort:u,surrounding:d,nodeLabelsPadding:f,labelLabelSpacing:p,labelCellSpacing:m,nodeLabelSpacing:h,portLabelSpacingH:g,portLabelSpacingV:v,portContexts:/* @__PURE__ */ new Map,hasPortLabelCells:!1,nodeContainer:y,middleRow:b,insideGrid:x,insidePortLabelCells:S,outsideNodeLabelContainers:w};return Qu(T,n),$u(T),ed(T),nd(T),id(T),td(T),T}function od(e){if(e.sizeFixed)return null;let{nodeContainer:t}=e,n=e.constraints,r=e.sizeOptions,i=e.outsideNodeLabelContainers,a=t.getMinimumWidth(),o=t.getMinimumHeight();return n.includes(`NODE_LABELS`)&&!r.includes(`OUTSIDE_NODE_LABELS_OVERHANG`)&&(a=Math.max(a,i.get(`NORTH`).getMinimumWidth(),i.get(`SOUTH`).getMinimumWidth()),o=Math.max(o,i.get(`EAST`).getMinimumHeight(),i.get(`WEST`).getMinimumHeight())),{x:a,y:o}}function sd(e,t,n=!1){return od(ad(e,t,n))}function cd(e,t){let n=Wu(e.cells[0]),r=Wu(e.cells[1]),i=Wu(e.cells[2]);e.symmetrical&&(n=Math.max(n,i),i=n),e.cells[0]&&(e.cells[0].rect={x:t.x,y:t.y+e.padding.top,width:t.width,height:n}),e.cells[2]&&(e.cells[2].rect={x:t.x,y:t.y+t.height-e.padding.bottom-i,width:t.width,height:i});let a=t.height-e.padding.top-e.padding.bottom;n>0&&(a-=n),i>0&&(a-=i);let o=Math.max(r,a);e.cells[1]&&(e.cells[1].rect={x:t.x,y:t.y+e.padding.top+n,width:t.width,height:o})}function ld(e,t){let n=Uu(e.cells[0]),r=Uu(e.cells[1]),i=Uu(e.cells[2]);e.symmetrical&&(n=Math.max(n,i),i=n),e.cells[0]&&(e.cells[0].rect={x:t.x+e.padding.left,y:t.y,width:n,height:t.height}),e.cells[2]&&(e.cells[2].rect={x:t.x+t.width-e.padding.right-i,y:t.y,width:i,height:t.height});let a=t.width-e.padding.left-e.padding.right;n>0&&(a-=n+e.gap,n+=e.gap),i>0&&(a-=i+e.gap);let o=Math.max(r,a);e.cells[1]&&(e.cells[1].rect={x:t.x+e.padding.left+n-(o-a)/2,y:t.y,width:o,height:t.height})}function ud(e,t,n){return t===`DISTRIBUTED`?n-2*e.portPort:n}function dd(e,t,n){let r={x:0,y:0,width:t,height:n};cd(e.nodeContainer,r),ld(e.middleRow,e.middleRow.rect);let i=e.sizeOptions.includes(`PORTS_OVERHANG`);for(let n of Ru){let r=e.portContexts.get(n);if(r.length===0)continue;let a=e.insidePortLabelCells.get(n),o=a.rect,s=a.padding,c=n===`NORTH`||n===`SOUTH`,l=Yu(e,n),u=c?a.content.x:a.content.y;(l===`DISTRIBUTED`||l===`JUSTIFIED`)&&r.length===1&&(u=ud(e,l,u),l=`CENTER`);let d=(c?o.width:o.height)-(c?s.left+s.right:s.top+s.bottom),f=c?o.x+s.left:o.y+s.top,p=e.portPort;if(d<u&&!i)l===`DISTRIBUTED`?(p+=(d-u)/(r.length+1),f+=p):p+=(d-u)/(r.length-1);else switch(d<u&&(u=ud(e,l,u),l=`CENTER`),l){case`BEGIN`:break;case`CENTER`:f+=(d-u)/2;break;case`END`:f+=d-u;break;case`DISTRIBUTED`:{let e=(d-u)/(r.length+1);p+=Math.max(0,e),f+=p;break}case`JUSTIFIED`:{let e=(d-u)/(r.length-1);p+=Math.max(0,e);break}}let m=n===`WEST`||n===`SOUTH`;for(let e=0;e<r.length;e++){let i=m?r[r.length-1-e]:r[e],a=i.port.getProperty(E)??0;c?(i.port.getPosition().x=f+i.margin.left,i.port.getPosition().y=n===`NORTH`?-i.port.size.y-a:a,f+=i.margin.left+i.port.size.x+i.margin.right+p):(i.port.getPosition().y=f+i.margin.top,i.port.getPosition().x=n===`EAST`?t+a:-i.port.size.x-a,f+=i.margin.top+i.port.size.y+i.margin.bottom+p)}}}function fd(e,t){let n=e.nodeContainer.padding;switch(t){case`NORTH`:return n.top+e.portLabelSpacingV;case`SOUTH`:return n.bottom+e.portLabelSpacingV;case`EAST`:return n.right+e.portLabelSpacingH;case`WEST`:return n.left+e.portLabelSpacingH;default:return 0}}function pd(e,t){let n=e.portContexts.get(t);if(n.length>=2){let r=t===`SOUTH`||t===`WEST`?n[n.length-1]:n[0],i=e.portLabelsPlacement.includes(`ALWAYS_SAME_SIDE`),a=e.portLabelsPlacement.includes(`SPACE_EFFICIENT`);return!r.labelsNextToPort&&!i&&(n.length===2||a)}return!1}function md(e,t){let n=0,r=fd(e,t),i=t===`NORTH`||t===`SOUTH`;for(let a of e.portContexts.get(t)){let o=a.labelCell;if(o===null||o.getLabels().length===0)continue;let s=a.port.size,c=a.port.getProperty(E)??0,l=o.rect;switch(l.width=o.getMinimumWidth(),l.height=o.getMinimumHeight(),t){case`NORTH`:l.x=a.labelsNextToPort?(s.x-l.width)/2:s.x+e.portLabelSpacingH,l.y=s.y+c+r,o.setHorizontalAlignment(`CENTER`),o.setVerticalAlignment(`TOP`);break;case`SOUTH`:l.x=a.labelsNextToPort?(s.x-l.width)/2:s.x+e.portLabelSpacingH,l.y=-c-r-l.height,o.setHorizontalAlignment(`CENTER`),o.setVerticalAlignment(`BOTTOM`);break;case`EAST`:if(l.x=-c-r-l.width,a.labelsNextToPort){let t=e.portLabelsTreatAsGroup?l.height:o.getLabels()[0].size.y;l.y=(s.y-t)/2}else l.y=s.y+e.portLabelSpacingV;o.setHorizontalAlignment(`RIGHT`),o.setVerticalAlignment(`CENTER`);break;case`WEST`:if(l.x=s.x+c+r,a.labelsNextToPort){let t=e.portLabelsTreatAsGroup?l.height:o.getLabels()[0].size.y;l.y=(s.y-t)/2}else l.y=s.y+e.portLabelSpacingV;o.setHorizontalAlignment(`LEFT`),o.setVerticalAlignment(`CENTER`)}i&&(n=Math.max(n,l.height))}n>0&&(e.insidePortLabelCells.get(t).content.y=n)}function hd(e,t){let n=pd(e,t),r=e.portLabelsPlacement.includes(`ALWAYS_OTHER_SAME_SIDE`);for(let i of e.portContexts.get(t)){let a=i.labelCell;if(a===null||a.getLabels().length===0)continue;let o=i.port.size,s=a.rect;switch(s.width=a.getMinimumWidth(),s.height=a.getMinimumHeight(),t){case`NORTH`:i.labelsNextToPort?(s.x=(o.x-s.width)/2,a.setHorizontalAlignment(`CENTER`)):n||r?(s.x=-s.width-e.portLabelSpacingH,a.setHorizontalAlignment(`RIGHT`)):(s.x=o.x+e.portLabelSpacingH,a.setHorizontalAlignment(`LEFT`)),s.y=-s.height-e.portLabelSpacingV,a.setVerticalAlignment(`BOTTOM`);break;case`SOUTH`:i.labelsNextToPort?(s.x=(o.x-s.width)/2,a.setHorizontalAlignment(`CENTER`)):n||r?(s.x=-s.width-e.portLabelSpacingH,a.setHorizontalAlignment(`RIGHT`)):(s.x=o.x+e.portLabelSpacingH,a.setHorizontalAlignment(`LEFT`)),s.y=o.y+e.portLabelSpacingV,a.setVerticalAlignment(`TOP`);break;case`EAST`:if(i.labelsNextToPort){let t=e.portLabelsTreatAsGroup?s.height:a.getLabels()[0].size.y;s.y=(o.y-t)/2,a.setVerticalAlignment(`CENTER`)}else n||r?(s.y=-s.height-e.portLabelSpacingV,a.setVerticalAlignment(`BOTTOM`)):(s.y=o.y+e.portLabelSpacingV,a.setVerticalAlignment(`TOP`));s.x=o.x+e.portLabelSpacingH,a.setHorizontalAlignment(`LEFT`);break;case`WEST`:if(i.labelsNextToPort){let t=e.portLabelsTreatAsGroup?s.height:a.getLabels()[0].size.y;s.y=(o.y-t)/2,a.setVerticalAlignment(`CENTER`)}else n||r?(s.y=-s.height-e.portLabelSpacingV,a.setVerticalAlignment(`BOTTOM`)):(s.y=o.y+e.portLabelSpacingV,a.setVerticalAlignment(`TOP`));s.x=-s.width-e.portLabelSpacingH,a.setHorizontalAlignment(`RIGHT`)}n=!1}}function gd(e){let t=e.portLabelsPlacement,n=t.includes(`INSIDE`),r=t.includes(`OUTSIDE`);if((n||r)&&e.hasPortLabelCells){for(let t of Ru)n?md(e,t):hd(e,t);for(let t of Ru)for(let n of e.portContexts.get(t))n.labelCell&&n.labelCell.applyLabelLayout()}}function _d(e){return`JUSTIFIED`}function vd(e,t,n){let r=e.getPorts(t);if(r.length===0)return;let i=e.size.y,a=r.find(e=>e.size.y>0)?.size.y??r[0].size.y,o=a+(i-r.reduce((e,t)=>e+t.size.y,0))/(r.length+1),s=t===`WEST`;for(let t=0;t<r.length;t++){let n=r[t],i=s?(r.length-t)*o-a:(t+1)*o-a,c=n.getProperty(E)??0;n.getPosition().x=s?-n.size.x-c:e.size.x+c,n.getPosition().y=i}}function yd(e,t,n){let r=e.getPorts(t);if(r.length===0)return;let i=e.size.x,a=r.reduce((e,t)=>e+t.size.x,0),o=i,s=_d(e),c=0,l=s;(s===`DISTRIBUTED`||s===`JUSTIFIED`)&&r.length===1&&(l=`CENTER`);let u=n;switch(l===`JUSTIFIED`&&(u=(o-a)/(r.length+1),c=u),l){case`CENTER`:c=(o-a)/2;break;case`END`:c=o-a}let d=c,f=t===`SOUTH`?[...r].reverse():r;for(let n of f){let r=t===`NORTH`,i=n.getProperty(E);n.getPosition().y=r?-n.size.y-(i??0):e.size.y+(i??0),n.getPosition().x=d,d+=n.size.x+u}}function bd(e){let t=e.getProperty(dn);for(let n of e.getLayers())for(let e of n.getNodes())e.getType()===`NORMAL`&&Sd(e,t);xd(e)}function xd(e){let t=e.getProperty(Yn)??[],n=t.includes(`NEXT_TO_PORT_IF_POSSIBLE`),r=e.getProperty(`org.eclipse.elk.portLabels.treatAsGroup`)===!0;for(let i of e.getLayers())for(let e of i.getNodes()){if(e.getType()!==`EXTERNAL_PORT`)continue;let i=e.getPorts()[0];if(!i||i.getLabels().length===0)continue;let a=Aa(e,bn),o=Aa(e,vt),s=Aa(e,dt),c=e.size,l=i.position,u=i.getLabels(),d=0,f=0;for(let e of u)d=Math.max(d,e.size.x),f+=e.size.y;f+=(u.length-1)*s;let p={x:0,y:0,width:d,height:f},m=e.getProperty(j),h=e=>n?e?i.getIncomingEdges().length===0&&i.getOutgoingEdges().length===0:i.getConnectedEdges().length===0:!1;if(t.includes(`INSIDE`))switch(m){case`NORTH`:p.x=(c.x-p.width)/2-l.x,p.y=o;break;case`SOUTH`:p.x=(c.x-p.width)/2-l.x,p.y=-o-p.height;break;case`EAST`:case`WEST`:if(h(!0)){let e=r?p.height:u[0].size.y;p.y=(c.y-e)/2-l.y}else p.y=c.y+o-l.y;p.x=m===`EAST`?-a-p.width:a}else if(t.includes(`OUTSIDE`))switch(m){case`NORTH`:case`SOUTH`:p.x=l.x+a;break;case`EAST`:case`WEST`:if(h(!1)){let e=r?p.height:u[0].size.y;p.y=(c.y-e)/2-l.y}else p.y=l.y+o}let g=p.y;for(let e of u)e.position.x=p.x,e.position.y=g,g+=e.size.y+s}}function Sd(e,t){let n=ad(e,e.getGraph(),!1);Cd(e,n);let r=e.getProperty(O);if(r===`FIXED_POS`||r===`FIXED_RATIO`||String(r)===`FIXED_POSITION`||String(r)===`FIXED_RATIO`){for(let t of e.getPorts(`NORTH`))t.isExplicitSide()&&(t.getPosition().y=-t.size.y-(t.getProperty(E)??0));for(let t of e.getPorts(`SOUTH`))t.isExplicitSide()&&(t.getPosition().y=e.size.y+(t.getProperty(E)??0));for(let t of e.getPorts(`WEST`))t.isExplicitSide()&&(t.getPosition().x=-t.size.x-(t.getProperty(E)??0));for(let t of e.getPorts(`EAST`))t.isExplicitSide()&&(t.getPosition().x=e.size.x+(t.getProperty(E)??0));gd(n)}else if(e.getNestedGraph()===null){dd(n,e.size.x,e.size.y);let t=e.size.y;for(let n of e.getPorts(`SOUTH`))n.getPosition().y+=t;gd(n)}else vd(e,`WEST`,t),vd(e,`EAST`,t),yd(e,`NORTH`,t),yd(e,`SOUTH`,t),gd(n)}function Cd(e,t){let n=e.getLabels(),r=e.getGraph(),i=e.hasProperty(He)?e.getProperty(He):r?.getProperty(He)??[];if(i.includes(`MINIMUM_SIZE`)){let t=e.hasProperty(x)?e.getProperty(x):{x:0,y:0};e.size.x=Math.max(e.size.x,t.x),e.size.y=Math.max(e.size.y,t.y)}if(i.includes(`PORTS`)&&e.getNestedGraph()===null){let n=od(t);if(n){let t=n.x,r=n.y;if(i.includes(`MINIMUM_SIZE`)){let n=e.hasProperty(x)?e.getProperty(x):{x:0,y:0};t=Math.max(t,n.x>0?n.x:20),r=Math.max(r,n.y>0?n.y:20)}e.size.x=t,e.size.y=r}}if(n.length===0)return;let a=i.includes(`NODE_LABELS`),o=e.hasProperty(Nt)?e.getProperty(Nt):r?.getProperty(Nt)??{top:5,right:5,bottom:5,left:5},s=0,c=0;for(let e of n)s=Math.max(s,e.size.x),c=Math.max(c,e.size.y);let l=i.includes(`PORTS`)||i.includes(`PORT_LABELS`),u=e.getProperty(mn)===`SEPARATE_CHILDREN`;if(a&&!l&&e.getNestedGraph()===null&&!u){let t=s,n=c;if(i.includes(`MINIMUM_SIZE`)){let r=e.hasProperty(x)?e.getProperty(x):{x:0,y:0};t=Math.max(t,r.x>0?r.x:20),n=Math.max(n,r.y>0?r.y:20)}i.includes(`MINIMUM_SIZE`)?(e.size.x=t,e.size.y=n):(e.size.x=t+o.left+o.right,e.size.y=n+o.top+o.bottom)}wd(e,n,o,r)}function wd(e,t,n,r){if(t.length===0)return;let i=r?.getProperty(dt)??0,a=Tc(e),o=e.getProperty(N),s=e=>{let t=e.placement??o??``;return Array.isArray(t)?t:String(t).split(/[\s,]+/).filter(Boolean)},c=e=>e.includes(`V_BOTTOM`)?`bottom`:e.includes(`V_CENTER`)?`center`:`top`,l=e=>e.includes(`H_RIGHT`)?`right`:e.includes(`H_LEFT`)?`left`:`center`,u=Array(t.length);for(let e=0;e<t.length;e++)u[e]=s(t[e]);let d=[],f=[];for(let e=0;e<t.length;e++)u[e].includes(`OUTSIDE`)?d.push(t[e]):f.push(t[e]);if(d.length>0)for(let t of d)Cc(t,e.size,xc(t,e),a);if(f.length===0)return;let p={top:{},center:{},bottom:{}};for(let e=0;e<t.length;e++){let n=u[e];if(n.includes(`OUTSIDE`))continue;let r=c(n),i=l(n);(p[r][i]??=[]).push(t[e])}let m=e=>{let t=0;for(let n of Object.values(p[e])){let e=n.reduce((e,t)=>e+t.size.y+i,0)-(n.length>0?i:0);t=Math.max(t,e)}return t},h=m(`top`),g=m(`bottom`),_=m(`center`),v=(t,r)=>{if(t===`top`)return n.top;if(t===`bottom`)return e.size.y-n.bottom-(r.reduce((e,t)=>e+t.size.y+i,0)-(r.length>0?i:0));let a=n.top+h+i;return a+(e.size.y-n.bottom-g-i-a-_)/2};for(let e of[`top`,`center`,`bottom`])for(let t of Object.keys(p[e])){let n=p[e][t],r=v(e,n);for(let e of n)e.position.y=r,r+=e.size.y+i}for(let r=0;r<t.length;r++){if(u[r].includes(`OUTSIDE`))continue;let i=t[r],a=l(u[r]);a===`right`?i.position.x=e.size.x-i.size.x-n.right:a===`left`?i.position.x=n.left:i.position.x=n.left+(e.size.x-n.left-n.right-i.size.x)/2}}function Td(e){let t=e.getProperty(p);if(t!=null){e.setProperty(Re,null);for(let t of e.getLayers())for(let e of t.getNodes())e.setProperty(Un,null),e.setProperty(He,null),e.position.y=0;bd(e),Ec(e),Ed(t,e)}}function Ed(e,t){switch(e){case`SIMPLE`:Ta(t);break;case`INTERACTIVE`:Ea(t);break;case`NETWORK_SIMPLEX`:new za().process(t);break;case`BRANDES_KOEPF`:new wa().process(t);break;default:throw Error(`未支持的节点放置策略: ${e}`)}}function Dd(e){if(!e.getProperty(w).has(`EXTERNAL_PORTS`))return;let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e.getLayerlessNodes()){if(a.getType()!==`NORMAL`)continue;let e=a.getMargin();t=Math.min(t,a.position.x-e.left),n=Math.max(n,a.position.x+a.size.x+e.right),r=Math.min(r,a.position.y-e.top),i=Math.max(i,a.position.y+a.size.y+e.bottom)}for(let a of e.getLayerlessNodes())if(a.getType()!==`NORMAL`)switch(a.getType()){case`EXTERNAL_PORT`:{let e=a.getLayerConstraint();if(e===`FIRST_SEPARATE`){a.position.x=t-10;let e=Od(a,e=>e.getTarget()?.getNode()??null);e!==null&&(a.position.y=e);break}if(e===`LAST_SEPARATE`){a.position.x=n+10;let e=Od(a,e=>e.getSource()?.getNode()??null);e!==null&&(a.position.y=e);break}let o=a.getInLayerConstraint();if(o===`TOP`){let e=kd(a);e!==null&&(a.position.x=e+10),a.position.y=r-10;break}if(o===`BOTTOM`){let e=kd(a);e!==null&&(a.position.x=e+10),a.position.y=i+10;break}break}default:throw Error(`节点类型 ${a.getType()} 不受 InteractiveExternalPortPositioner 支持`)}}function Od(e,t){for(let n of e.getConnectedEdges()){let e=t(n);if(e!==null)return e.position.y+e.size.y/2}return null}function kd(e){if(e.getPorts().length!==1)throw Error(`外部端口 dummy 必须恰好一个端口`);let t=e.getPorts()[0];if(t.getOutgoingEdges().length>0&&t.getIncomingEdges().length>0)throw Error(`交互式布局不支持同时有入边和出边的 NORTH/SOUTH 端口`);if(t.getOutgoingEdges().length>0){let e=1/0;for(let n of t.getOutgoingEdges()){let t=n.getTarget().getNode(),r=t.getMargin();e=Math.min(e,t.position.x-r.left)}return e}if(t.getIncomingEdges().length>0){let e=-1/0;for(let n of t.getIncomingEdges()){let t=n.getSource().getNode(),r=t.getMargin();e=Math.max(e,t.position.x+t.size.x+r.right)}return e}return null}var Ad=class{start;end;nodeStartEdge;startEndEdge;originalEdge;startInLayerDummy=null;startInLayerEdge=null;endInLayerDummy=null;endInLayerEdge=null;prev=null;next=null;constructor(e,t,n,r,i){this.start=e,this.end=t,this.nodeStartEdge=n,this.startEndEdge=r,this.originalEdge=i}static isStart(e){let t=e.getProperty(i);return t!==null&&t.start===e}static isEnd(e){let t=e.getProperty(i);return t!==null&&t.end===e}},jd=class{graph;spacing=0;inLayerSpacing=0;dar;longestPath;maxWidth=null;maxHeight=null;sumWidth=null;widths=null;heights=null;cutsAllowed=null;constructor(e){this.graph=e;let t=e.getProperty(S),n=e.getProperty(Pt),r=e.getProperty(ct);this.dar=t===`LEFT`||t===`RIGHT`||t===`UNDEFINED`?n*r:1/(n*r),this.spacing=e.getProperty(kn),this.inLayerSpacing=e.getProperty(Zt),this.longestPath=e.getLayers().length}getApproximateLayerWidth(e){return this.determineLayerWidth(e)}getApproximateLayeringWidth(){return this.getSumWidth()}getApproximateChunkBasedLayeringWidth(e){if(e.length===0)return this.getApproximateLayeringWidth();let t=0,n=0;for(let r of e)t=Math.max(t,this.determineChunkWidth(n,r)),n=r;return t=Math.max(t,this.determineChunkWidth(n,this.graph.getLayers().length)),t}getApproximateLayerHeight(e){return this.determineLayerHeight(e)}getApproximateLayeringHeight(){return this.getMaxHeight()}getApproximateChunkBasedLayeringHeight(e){if(e.length===0)return 0;let t=0,n=0;for(let r of e)t+=this.determineChunkHeight(n,r),n=r;return t+=this.determineChunkHeight(n,this.graph.getLayers().length),t}getMaxWidth(){return this.maxWidth===null&&(this.maxWidth=this.determineWidth((e,t)=>Math.max(e,t))),this.maxWidth}getSumWidth(){return this.sumWidth===null&&(this.sumWidth=this.determineWidth((e,t)=>e+t)),this.sumWidth}getWidths(){return this.widths===null&&this.initWidthsAndHeights(),this.widths}initWidthsAndHeights(){let e=this.longestPath,t=Array(e),n=Array(e);for(let r=0;r<e;r++){let e=this.graph.getLayers()[r];t[r]=this.determineLayerWidth(e),n[r]=this.determineLayerHeight(e)}this.widths=t,this.heights=n}determineWidth(e){let t=this.graph.getLayers(),n=this.determineLayerWidth(t[0]);for(let r=1;r<t.length;r++)n=e(n,this.determineLayerWidth(t[r]));return n}determineLayerWidth(e){let t=0;for(let n of e.getNodes()){let e=n.getSize().x+n.getMargin().right+n.getMargin().left+this.spacing;t=Math.max(t,e)}return t}determineChunkWidth(e,t){let n=0;for(let r=e;r<t;r++)n+=this.determineLayerWidth(this.graph.getLayers()[r]);return n}getMaxHeight(){return this.maxHeight===null&&(this.maxHeight=this.determineHeight((e,t)=>Math.max(e,t))),this.maxHeight}getHeights(){return this.heights===null&&this.initWidthsAndHeights(),this.heights}determineHeight(e){let t=this.graph.getLayers(),n=this.determineLayerHeight(t[0]);for(let r=1;r<t.length;r++)n=e(n,this.determineLayerHeight(t[r]));return n}determineLayerHeight(e){let t=0;for(let n of e.getNodes()){t+=n.getSize().y+n.getMargin().bottom+n.getMargin().top+this.inLayerSpacing;for(let e of n.getIncomingEdges())if(e.getSource().getNode().getType()===`NORTH_SOUTH_PORT`){let n=e.getSource().getNode().getProperty(L);t+=n.getSize().y+n.getMargin().bottom+n.getMargin().top}}return t}determineChunkHeight(e,t){let n=0;for(let r=e;r<t;r++)n=Math.max(n,this.determineLayerHeight(this.graph.getLayers()[r]));return n}isCutAllowed(e){return this.cutsAllowed===null&&this.initCutAllowed(),this.cutsAllowed[e]}initCutAllowed(){if(this.cutsAllowed!==null)return;let e=Array(this.graph.getLayers().length);if(e[0]=!1,this.graph.hasProperty(Be)){let t=this.graph.getProperty(Be);if(t!==null)for(let n of t)n>0&&n<e.length&&(e[n]=!1)}else{let t=this.graph.getLayers();for(let n=1;n<t.length;n++)e[n]=this.isCutAllowedPerLayer(t[n])}this.cutsAllowed=e}getCutsAllowed(){return this.cutsAllowed===null&&this.initCutAllowed(),this.cutsAllowed}isCutAllowedPerLayer(e){let t=!0,n=null,r=null;check:for(let i of e.getNodes())for(let e of i.getIncomingEdges()){if(n!==null&&n!==i){t=!1;break check}n=i;let a=e.getSource().getNode();if(r!==null&&r!==a){t=!1;break check}r=a}return t}},Md=class{getCutIndexes(e,t){let n=e.getProperty(Nn);return n===null?[]:n}guaranteeValid(){return!1}},Nd=class e{getCutIndexes(t,n){let r=e.getChunkCount(n),i=[],a=n.longestPath/r;for(let e=1;e<r;++e)i.push(Math.round(e*a));return i}static getChunkCount(e){let t=Math.sqrt(e.getSumWidth()/(e.dar*e.getMaxHeight())),n=Math.round(t);return n=Math.min(n,e.longestPath),n}guaranteeValid(){return!1}},Pd=class{guaranteeValid(){return!1}getCutIndexes(e,t){let n=t.getWidths(),r=t.getHeights(),i=Array(n.length);i[0]=n[0];let a=n[0];for(let e=1;e<n.length;e++)i[e]=i[e-1]+n[e],a+=n[e];let o=Nd.getChunkCount(t)-1,s=e.getProperty(Gn),c=-1/0,l=[];for(let e=Math.max(0,o-s);e<=Math.min(t.longestPath-1,o+s);e++){let n=a/(e+1),o=0,s=1,u=[],d=-1/0,f=0,p=0,m=r[0];if(e===0)d=a,p=t.getMaxHeight();else{for(;s<t.longestPath;)i[s-1]-o>=n&&(u.push(s),d=Math.max(d,i[s-1]-f),p+=m,o+=i[s-1]-o,f=i[s-1],m=r[s]),m=Math.max(m,r[s]),s++;p+=m}let h=Math.min(1/d,1/t.dar/p);h>c&&(c=h,l=u)}return l}};function Fd(e,t,n){let r=e.getProperty(an),i=e.getProperty(jt),a=new zt;a.setProperty(an,r+i);let o=t,s=o.getTarget(),c=o.getSource().getNode(),l=o.getTarget().getNode(),u=c.getLayer().getIndex(),d=l.getLayer().getIndex(),f=[];for(let t=u;t<=d;t++){let r=new V(e);r.setType(`LONG_EDGE`),r.setProperty(L,o),r.setProperty(O,`FIXED_POS`),r.setProperty(Bt,a);let i=e.getLayers()[t];t===u?r.setLayerAt(i.getNodes().length-n,i):r.setLayer(i);let c=o.getProperty(Ye);c<0&&(c=0,o.setProperty(Ye,c)),r.size.y=c;let l=Math.floor(c/2),d=new H;d.setSide(`WEST`),d.setNode(r),d.getPosition().y=l;let p=new H;p.setSide(`EAST`),p.setNode(r),p.getPosition().y=l,o.setTarget(d);let m=new U;m.copyProperties(o),m.setProperty(R,null),m.setSource(p),m.setTarget(s),Id(r,o,m),f.push(m),o=m}return f}function Id(e,t,n){let r=t.getSource().getNode();r.getType()===`LONG_EDGE`?(e.setProperty(B,r.getProperty(B)),e.setProperty(I,r.getProperty(I))):(e.setProperty(B,t.getSource()),e.setProperty(I,n.getTarget()))}function Ld(e,t){let n=[],r=0,i=0;for(;i<t.length;){let a=t[i]+r;for(;a<e.longestPath&&!e.isCutAllowed(a);)a++,r++;if(a>=e.longestPath)break;n.push(a),i++}return n}function Rd(e,t){if(t.length===0)return[];let n=[-(2**53-1)];for(let t=1;t<e.longestPath;++t)e.isCutAllowed(t)&&n.push(t);return n.length===1?[]:(n.push(2**53-1),zd(t,n))}function zd(e,t){let n=[],r=0,i=0,a=0;for(;r<t.length-1&&i<e.length;){let o=e[i]+a;for(;t[r+1]<o;)r++;let s=0;for(o-t[r]>t[r+1]-o&&s++,n.push(t[r+s]),a+=t[r+s]-o,i++;i<e.length&&e[i]+a<=t[r+s];)i++;r+=1+s}return n}function Bd(e){let t=new jd(e),n=Vd(e),r=n.getCutIndexes(e,t);if(e.getProperty(Le)&&(r=Ud(e,r)),!n.guaranteeValid()&&e.hasProperty(y))switch(e.getProperty(y)){case`LOOK_BACK`:r=Rd(t,r);break;case`GREEDY`:r=Ld(t,r)}r.length!==0&&Hd(e,r)}function Vd(e){switch(e.getProperty(ht)){case`MANUAL`:return new Md;case`ARD`:return new Nd;default:return new Pd}}function Hd(e,t){let n=e.getLayers(),r=0,a=0,o=t[0],s=0,c=/* @__PURE__ */ new Set,l=/* @__PURE__ */ new Set,u=0;for(;u<n.length;){let d=n[u];for(let e of d.getNodes()){for(let t of e.getOutgoingEdges())l.add(t);for(let t of e.getIncomingEdges())l.delete(t)}if(r+1===o){let r=new W(e);n.splice(u+1,0,r);let d=new W(e);n.splice(u+2,0,d);for(let t of l){c.has(t)||(s++,c.add(t));let n=new V(e);n.setProperty(O,`FIXED_SIDE`),n.setLayer(r),n.setType(`BREAKING_POINT`);let a=new H;a.setNode(n),a.setSide(`WEST`);let o=new H;o.setNode(n),o.setSide(`EAST`);let l=new V(e);l.setProperty(O,`FIXED_SIDE`),l.setLayer(d),l.setType(`BREAKING_POINT`);let u=new H;u.setNode(l),u.setSide(`WEST`);let f=new H;f.setNode(l),f.setSide(`EAST`);let p=new U;p.setSource(t.getSource()),p.setTarget(a),p.setProperty(F,t.getProperty(F));let m=new U;m.setSource(o),m.setTarget(u),m.setProperty(F,t.getProperty(F)),t.setSource(f);let h=new Ad(n,l,p,m,t);n.setProperty(i,h),l.setProperty(i,h);let g=p.getSource().getNode();if(g.getType()===`BREAKING_POINT`){let e=g.getProperty(i);e.next=h,h.prev=e}}if(u+=2,a++,a<t.length)o=t[a];else break}r++,u++}return s}function Ud(e,t){let n=[],r=[],i=null;for(let e of t){let t=new Kd(e);r.push(t),i!==null&&(t.prev=i,i.suc=t),i=t}let a=Gd(e);for(let t=0;t<r.length;++t){let t=null,i=r[0].selfOrNext(),o=null,s=1/0;for(let n=1;n<e.getLayers().length;++n){let r=i===null?Math.abs(n-t.index)+1:Math.abs(i.index-n),c=t===null?r+1:Math.abs(n-t.index),l,u;c<r?(l=t,u=c):(l=i,u=r);let d=Wd(e,n,a[n],u);d<s&&(s=d,o=l,o.newIndex=n),i!==null&&n===i.index&&(t=i,i=i.next())}o!==null&&(n.push(o.newIndex),o.assigned=!0,o.offset())}return n.sort((e,t)=>e-t),n}function Wd(e,t,n,r){return n+r**+e.getProperty(Vn)}function Gd(e){let t=Array(e.getLayers().length+1),n=/* @__PURE__ */ new Set,r=0;for(let i of e.getLayers()){t[r++]=n.size;for(let e of i.getNodes())for(let t of e.getOutgoingEdges())n.add(t);for(let e of i.getNodes())for(let t of e.getIncomingEdges())n.delete(t)}return t}var Kd=class{index;newIndex=0;prev=null;suc=null;assigned=!1;constructor(e){this.index=e}selfOrNext(){return this.assigned?this.suc===null?null:this.suc.selfOrNext():this}next(){return this.suc===null?null:this.suc.selfOrNext()}offset(){if(!this.assigned)throw Error(`Cannot offset an unassigned cut.`);let e=this.newIndex-this.index;this.applyOffset(e),this.offsetPrev(e),this.offsetSuc(e)}applyOffset(e){this.index+=e}offsetPrev(e){this.prev!==null&&!this.prev.assigned&&(this.prev.applyOffset(e),this.prev.offsetPrev(e))}offsetSuc(e){this.suc!==null&&!this.suc.assigned&&(this.suc.applyOffset(e),this.suc.offsetSuc(e))}};function qd(e){if(Jd(e),e.getProperty(d)){let t=/* @__PURE__ */ new Map;for(let n of e.getLayers()){let e=0;for(let r of n.getNodes())t.set(r,e++)}Yd(e,t),Xd(e,t,!0),Xd(e,t,!1)}}function Jd(e){let t=e.getLayers();t.unshift(new W(e));let n=!1,r=1,a=1;for(;a<t.length;){let o=t[a],s=t[r],c=[...o.getNodes()],l=c.length;for(let e of c)e.setLayer(s);if(n){for(let t of[...c].reverse())for(let n of[...t.getIncomingEdges()]){n.reverse(e,!0),e.setProperty(ge,!0);let r=Fd(e,n,l),a=t.getProperty(i),o=r[r.length-1];a.startInLayerDummy=o.getSource().getNode(),a.startInLayerEdge=o,a.endInLayerDummy=n.getTarget().getNode(),a.endInLayerEdge=n}n=!1}else c.length>0&&c[0].getType()===`BREAKING_POINT`&&(n=!0,r=-1);r++,a++}for(let e=t.length-1;e>=0;e--)t[e].getNodes().length===0&&t.splice(e,1)}function Yd(e,t){for(let n of e.getLayers())for(let e of[...n.getNodes()])if(Ad.isStart(e)){let n=e.getProperty(i);if(n.prev===null&&n.next!==null){let e=n,r=n.next;for(;r!==null;){Zd(t,r.start,r.startInLayerDummy,!1,!0),tf(t,e.end),tf(t,r.start),tf(t,r.startInLayerDummy),tf(t,r.endInLayerDummy),r.endInLayerEdge.setTarget(e.endInLayerEdge.getTarget()),e.endInLayerEdge.setTarget(null),e.end.setLayer(null),r.start.setLayer(null),r.startInLayerDummy.setLayer(null),r.endInLayerDummy.setLayer(null);let n=new Ad(e.start,r.end,e.nodeStartEdge,r.startEndEdge,r.originalEdge);n.startInLayerDummy=e.startInLayerDummy,n.startInLayerEdge=e.startInLayerEdge,n.endInLayerDummy=e.endInLayerDummy,n.endInLayerEdge=r.endInLayerEdge,n.prev=e.prev,n.next=r.next,e.start.setProperty(i,n),r.end.setProperty(i,n),r=r.next,e=n}}}}function Xd(e,t,n){let r=n?Ad.isEnd:Ad.isStart,a=!1;do{a=!1;let o=n?[...e.getLayers()].reverse():e.getLayers();for(let e of o){let o=[...e.getNodes()];n||o.reverse();for(let e of o)if(r(e)){let r=e,o=e.getProperty(i);a=Zd(t,r,n?o.endInLayerDummy:o.startInLayerDummy,n,!1)}}}while(a)}function Zd(e,t,n,r,i){let a=$d(t,r),o=$d(n,r),s=!1;for(;a!==null&&o!==null&&(i||Qd(e,a,o,r));){let i=$d(a,r),c=$d(o,r);tf(e,n),tf(e,t);let l=a.getLayer(),u=e.get(o),d=e.get(a);si(a,!1),si(o,!1),r?(n.setLayerAt(u,l),e.set(n,u),t.setLayerAt(d+1,l),e.set(t,d)):(t.setLayerAt(d,l),e.set(t,d),n.setLayerAt(u+1,l),e.set(n,u)),a.setLayer(null),o.setLayer(null),a=i,o=c,s=!0}return s}function Qd(e,t,n,r){let i=t.getLayer(),a=r?n:t,o=r?t:n,s=e.get(a),c=e.get(o);for(let e=s+1;e<c;++e){let t=i.getNodes()[e];if(t.getType()!==`BREAKING_POINT`&&!ef(t))return!1}return!0}function $d(e,t){let n=t?e.getOutgoingEdges():e.getIncomingEdges();for(let t of n){let n=t.getOtherNode(e);if(n!==null&&n.getType()===`LONG_EDGE`&&n.getLayer()!==e.getLayer())return n}return null}function ef(e){if(e.getType()===`LONG_EDGE`){for(let t of e.getConnectedEdges())if(!t.isSelfLoop()&&e.getLayer()===t.getOtherNode(e)?.getLayer())return!0}return!1}function tf(e,t){let n=e.get(t),r=t.getLayer().getNodes();for(let t=n+1;t<r.length;++t){let n=r[t];e.set(n,e.get(n)-1)}}function nf(e){let t=e.getProperty(s);for(let n of e.getLayers())for(let r of[...n.getNodes()])if(Ad.isEnd(r)){let n=r.getProperty(i);n.next===null&&rf(e,n,t)}}function rf(e,t,n){let r=[];switch(n){case`SPLINES`:{let e=t.nodeStartEdge.getProperty(g)??[],n=t.startEndEdge.getProperty(g)??[],r=t.originalEdge.getProperty(g)??[],i=t.nodeStartEdge.getProperty(Ve)??[],a=t.startEndEdge.getProperty(Ve)??[],o=t.originalEdge.getProperty(Ve)??[],s=[];s.push(...e);for(let e of n)e.inverseOrder=!0;s.push(...[...n].reverse()),s.push(...r);let c=[];c.push(...i),c.push(...[...a].reverse()),c.push(...o),t.originalEdge.setProperty(g,s),t.originalEdge.setProperty(Ve,c),t.originalEdge.setProperty(Te,t.originalEdge),t.nodeStartEdge.setProperty(g,null),t.nodeStartEdge.setProperty(Ve,null),t.startEndEdge.setProperty(g,null),t.startEndEdge.setProperty(Ve,null);break}case`POLYLINE`:r.push(...t.nodeStartEdge.getBendPoints()),r.push(wn(t.start.getPosition().x,t.start.getPosition().y)),r.push(...[...t.startEndEdge.getBendPoints()].reverse()),r.push(wn(t.end.getPosition().x,t.end.getPosition().y)),r.push(...t.originalEdge.getBendPoints());break;default:r.push(...t.nodeStartEdge.getBendPoints()),r.push(...[...t.startEndEdge.getBendPoints()].reverse()),r.push(...t.originalEdge.getBendPoints())}let i=t.originalEdge.getBendPoints();i.splice(0,i.length,...r),t.originalEdge.setSource(t.nodeStartEdge.getSource());let a=t.nodeStartEdge.getProperty(R),o=t.startEndEdge.getProperty(R),s=t.originalEdge.getProperty(R);if(a!==null||o!==null||s!==null){let e=[];af(e,s),af(e,o),af(e,a),t.originalEdge.setProperty(R,e)}t.startEndEdge.setSource(null),t.startEndEdge.setTarget(null),t.nodeStartEdge.setSource(null),t.nodeStartEdge.setTarget(null),t.end.setLayer(null),t.start.setLayer(null),t.prev!==null&&rf(e,t.prev,n)}function af(e,t){t!=null&&e.push(...t)}function of(e){for(let t of e.getLayers())for(let n of t.getNodes())for(let t of n.getPorts())for(let n of[...t.getOutgoingEdges()])n.getProperty(A)&&n.reverse(e,!1)}const sf={NORTH:0,EAST:1,SOUTH:2,WEST:3,UNDEFINED:4},cf=(e,t)=>sf[e.getSide()]-sf[t.getSide()],lf=(e,t)=>{let n=e.getNode().getProperty(O);if(sf[e.getSide()]-sf[t.getSide()]!==0||!D.isOrderFixed(n))return 0;if(n===`FIXED_ORDER`){let n=e.getProperty(Fe),r=t.getProperty(Fe);if(n!==null&&r!==null&&n-r!==0)return n-r}switch(e.getSide()){case`NORTH`:return e.getPosition().x-t.getPosition().x;case`EAST`:return e.getPosition().y-t.getPosition().y;case`SOUTH`:return t.getPosition().x-e.getPosition().x;case`WEST`:return t.getPosition().y-e.getPosition().y;default:return 0}},uf=(e,t)=>cf(e,t)||lf(e,t),df=(e,t)=>t(e).filter(e=>!e.getProperty(A)).length,ff=(e,t)=>{if(sf[e.getSide()]-sf[t.getSide()]!==0)return 0;switch(e.getSide()){case`EAST`:return df(t,e=>e.getOutgoingEdges())-df(e,e=>e.getOutgoingEdges());case`WEST`:return df(e,e=>e.getIncomingEdges())-df(t,e=>e.getIncomingEdges());default:return 0}};function pf(e,t,n){if(n-t<=2)return;let r=Math.floor((n-t)/2);for(let i=0;i<r;i++)[e[t+i],e[n-i-1]]=[e[n-i-1],e[t+i]]}function mf(e,t){if(e.length===0)return[0,0];let n=sf[t],r=n+1,i=0,a=sf[e[0].getSide()];for(;i<e.length-1&&a<n;)i++,a=sf[e[i].getSide()];let o=i;for(;o<e.length-1&&a<r;)o++,a=sf[e[i].getSide()];return[i,o]}function hf(e){if(e.length<=1)return;let[t,n]=mf(e,`SOUTH`);pf(e,t,n);let[r,i]=mf(e,`WEST`);pf(e,r,i)}function gf(e){let t=e.getProperty(Je);for(let n of e.getLayers())for(let e of n.getNodes()){let n=e.getProperty(O),r=e.getPorts();D.isOrderFixed(n)?r.sort(uf):D.isSideFixed(n)&&(r.sort(cf),hf(r),t===`PORT_DEGREE`&&r.sort(ff))}}function _f(e){let t=e.getPorts(),n=t.length,r=0,i=n,a=2*n,o=/* @__PURE__ */ new Map;for(let e of t)switch(e.getSide()){case`EAST`:case`WEST`:o.set(e,-1);break;case`NORTH`:case`SOUTH`:{let t=e.getIncomingEdges().length,n=e.getOutgoingEdges().length;t>0&&n>0?o.set(e,i++):t>0?o.set(e,r++):n>0?o.set(e,a++):o.set(e,r++);break}default:o.set(e,-1)}t.sort((e,t)=>{let n=e.getSide(),r=t.getSide();if(n!==r)return vf[n]-vf[r];let i=o.get(e),a=o.get(t);return i===a?0:n===`NORTH`?i-a:a-i})}const vf={UNDEFINED:0,NORTH:1,EAST:2,SOUTH:3,WEST:4};function yf(e,t,n,r){let i=new V(e);i.setType(`NORTH_SOUTH_PORT`),i.setProperty(O,`FIXED_POS`);let a=0;if(t!==null){let e=new H;e.setProperty(L,t),i.setProperty(L,t.getNode()),e.setSide(`WEST`),e.setNode(i);for(let n of[...t.getIncomingEdges()])n.setTarget(e);t.setProperty(M,i),t.setProperty(Pn,!1),a++}if(n!==null){let e=new H;i.setProperty(L,n.getNode()),e.setProperty(L,n),e.setSide(`EAST`),e.setNode(i);for(let t of[...n.getOutgoingEdges()])t.setSource(e);n.setProperty(M,i),n.setProperty(Pn,!0),a++}return i.setProperty(xe,a),r.push(i),i}function bf(e,t,n,r){let[i,a,o]=t.reduce((e,t)=>{let n=t.getIncomingEdges().length>0,r=t.getOutgoingEdges().length>0;return n&&r?e[2].push(t):n?e[0].push(t):r&&e[1].push(t),e},[[],[],[]]);for(let t of i)r.push(yf(e,t,null,n));for(let t of a)r.push(yf(e,null,t,n));for(let t of o)r.push(yf(e,t,t,n))}function xf(e){for(let t of e.getLayers()){let n=-1;for(let r of[...t.getNodes()]){if(n++,!(r.getType()===`NORMAL`&&D.isSideFixed(r.getProperty(O))))continue;!D.isOrderFixed(r.getProperty(O))&&e.getProperty(Ce)===`NONE`&&_f(r),r.setProperty(at,r);let i=[],a=[],o=[];bf(e,r.getPorts(`NORTH`),i,o);let s=n,c=r;for(let e of i)e.setLayerAt(s,t),n++,e.setProperty(at,r),e.getPorts()[0].getProperty(L)?.getProperty($t)||(e.hasProperty(k)||e.setProperty(k,[]),e.getProperty(k).push(c));bf(e,[...r.getPorts(`SOUTH`)].reverse(),a,o);let l=r;for(let e of a)e.setLayerAt(++n,t),e.setProperty(at,r),e.getPorts()[0].getProperty(L)?.getProperty($t)||(l.hasProperty(k)||l.setProperty(k,[]),l.getProperty(k).push(e));o.length>0&&r.setProperty(we,o)}}}const Sf={NORTH:0,EAST:1,SOUTH:2,WEST:3,UNDEFINED:4};function Cf(e){return Sf[e]}function wf(e){switch(e){case`NORTH`:return`EAST`;case`EAST`:return`SOUTH`;case`SOUTH`:return`WEST`;case`WEST`:return`NORTH`;default:return`UNDEFINED`}}function Tf(e){switch(e){case`NORTH`:return`WEST`;case`WEST`:return`SOUTH`;case`SOUTH`:return`EAST`;case`EAST`:return`NORTH`;default:return`UNDEFINED`}}var Ef=class{id=0;lLabels=[];size={x:0,y:0};position={x:0,y:0};layoutDirection;labelLabelSpacing;side=null;alignment=null;alignmentReferenceSLPort=null;constructor(e){let t=e.getSLHolder().getLNode();this.layoutDirection=t.getGraph().getProperty(S),this.labelLabelSpacing=t.getGraph().getProperty(dt)}addLLabels(e){for(let t of e)this.lLabels.push(t),this.updateSize(t)}getLLabels(){return this.lLabels}getSize(){return this.size}getPosition(){return this.position}getSide(){return this.side}setSide(e){this.side=e}getAlignment(){return this.alignment}setAlignment(e){this.alignment=e}getAlignmentReferenceSLPort(){return this.alignmentReferenceSLPort}setAlignmentReferenceSLPort(e){this.alignmentReferenceSLPort=e}updateSize(e){let t=e.size;this.layoutDirection===`LEFT`||this.layoutDirection===`RIGHT`?(this.size.x=Math.max(this.size.x,t.x),this.size.y+=t.y,this.lLabels.length>1&&(this.size.y+=this.labelLabelSpacing)):(this.size.x+=t.x,this.size.y=Math.max(this.size.y,t.y),this.lLabels.length>1&&(this.size.x+=this.labelLabelSpacing))}applyPlacement(e){this.layoutDirection===`LEFT`||this.layoutDirection===`RIGHT`?this.applyPlacementForHorizontalLayout(e):this.applyPlacementForVerticalLayout(e)}applyPlacementForHorizontalLayout(e){let t=this.position.x,n=this.position.y;for(let r of this.lLabels){let i=r.position;i.x=this.alignment===`LEFT`||this.side===`EAST`?t:this.alignment===`RIGHT`||this.side===`WEST`?t+this.size.x-r.size.x:t+(this.size.x-r.size.x)/2,i.y=n,i.x+=e.x,i.y+=e.y,n+=r.size.y+this.labelLabelSpacing}}applyPlacementForVerticalLayout(e){let t=this.position.x,n=this.position.y;for(let r of this.lLabels){let i=r.position;i.x=t,i.y=this.side===`NORTH`?n+this.size.y-r.size.y:n,i.x+=e.x,i.y+=e.y,t+=r.size.x+this.labelLabelSpacing}}};function Df(e){if(e.has(`UNDEFINED`))throw Error(`Port sides must not contain UNDEFINED`);switch(e.size){case 1:return`ONE_SIDE`;case 2:{let t=e.has(`EAST`)&&e.has(`WEST`),n=e.has(`NORTH`)&&e.has(`SOUTH`);return t||n?`TWO_SIDES_OPPOSING`:`TWO_SIDES_CORNER`}case 3:return`THREE_SIDES`;case 4:return`FOUR_SIDES`;default:return null}}var Of=class{slHolder;slPorts=[];slEdges=/* @__PURE__ */ new Set;slLabels=null;selfLoopType=null;slPortsBySide=null;leftmostPort=null;rightmostPort=null;occupiedPortSides=/* @__PURE__ */ new Set;routingSlot=[,,,,,].fill(0);constructor(e){this.slHolder=e}getSLHolder(){return this.slHolder}addSelfLoopEdge(e){if(this.slEdges.has(e))return;this.slEdges.add(e),e.setSLHyperLoop(this);let t=e.getSLSource();this.slPorts.includes(t)||this.slPorts.push(t);let n=e.getSLTarget();this.slPorts.includes(n)||this.slPorts.push(n);let r=e.getLEdge().getLabels();r.length>0&&(this.slLabels===null&&(this.slLabels=new Ef(this)),this.slLabels.addLLabels(r))}computePortsPerSide(){this.slPortsBySide=/* @__PURE__ */ new Map;for(let e of this.slPorts){let t=e.getLPort().getSide(),n=this.slPortsBySide.get(t)??[];n.push(e),this.slPortsBySide.set(t,n)}this.selfLoopType=Df(new Set(this.slPortsBySide.keys()))}getSLPorts(){return this.slPorts}getSLEdges(){return this.slEdges}getSLLabels(){return this.slLabels}getSelfLoopType(){return this.selfLoopType}getSLPortsBySideMap(){return this.slPortsBySide}getSLPortsBySide(e){return this.slPortsBySide.get(e)??[]}hasSLPortsOnSide(e){return this.slPortsBySide.has(e)}getLeftmostPort(){return this.leftmostPort}setLeftmostPort(e){this.leftmostPort=e}getRightmostPort(){return this.rightmostPort}setRightmostPort(e){this.rightmostPort=e}getOccupiedPortSides(){return this.occupiedPortSides}getRoutingSlot(e){return this.routingSlot[Cf(e)]}setRoutingSlot(e,t){this.routingSlot[Cf(e)]=t;let n=this.slHolder.getRoutingSlotCount(),r=Cf(e);n[r]=Math.max(n[r],t+1)}},kf=class{lEdge;slHyperLoop=null;slSource;slTarget;constructor(e,t,n){this.lEdge=e,this.slSource=t,this.slTarget=n,t.getOutgoingSLEdges().push(this),n.getIncomingSLEdges().push(this)}getLEdge(){return this.lEdge}getSLHyperLoop(){return this.slHyperLoop}setSLHyperLoop(e){this.slHyperLoop=e}getSLSource(){return this.slSource}getSLTarget(){return this.slTarget}getLabelSide(){return this.slHyperLoop.getSLLabels().getSide()}},Af=class{lPort;onlySelfLoops;incomingSLEdges=[];outgoingSLEdges=[];hidden=!1;constructor(e){this.lPort=e,this.onlySelfLoops=e.getConnectedEdges().length>0&&e.getConnectedEdges().every(e=>e.isSelfLoop())}getLPort(){return this.lPort}hadOnlySelfLoops(){return this.onlySelfLoops}isHidden(){return this.hidden}setHidden(e){this.hidden=e}getIncomingSLEdges(){return this.incomingSLEdges}getOutgoingSLEdges(){return this.outgoingSLEdges}getSLNetFlow(){return this.incomingSLEdges.length-this.outgoingSLEdges.length}},jf=class e{lNode;slHyperLoops=[];slPorts=/* @__PURE__ */ new Map;arePortsHidden=!1;routingSlotCount=[,,,,,].fill(0);constructor(e){this.lNode=e}static needsSelfLoopProcessing(e){return e.getType()===`NORMAL`&&e.getOutgoingEdges().some(e=>e.isSelfLoop())}static install(t){if(!e.needsSelfLoopProcessing(t))throw Error(`AssertionError: needsSelfLoopProcessing`);let n=new e(t);return t.setProperty(f,n),n.initialize(),n}getLNode(){return this.lNode}getSLHyperLoops(){return this.slHyperLoops}getSLPortMap(){return this.slPorts}arePortsHiddenFlag(){return this.arePortsHidden}setPortsHidden(e){this.arePortsHidden=e}getRoutingSlotCount(){return this.routingSlotCount}initialize(){let e=[];for(let t of this.lNode.getOutgoingEdges())t.isSelfLoop()&&e.push(new kf(t,this.selfLoopPortFor(t.getSource()),this.selfLoopPortFor(t.getTarget())));for(let e of this.slPorts.values())e.getLPort().id=0;for(let e of this.slPorts.values())e.getLPort().id===0&&this.slHyperLoops.push(this.initializeHyperLoop(e))}selfLoopPortFor(e){let t=this.slPorts.get(e);return t===void 0&&(t=new Af(e),this.slPorts.set(e,t)),t}initializeHyperLoop(e){let t=new Of(this),n=[e];for(;n.length>0;){let e=n.shift();e.getLPort().id=1;for(let r of e.getOutgoingSLEdges()){t.addSelfLoopEdge(r);let e=r.getSLTarget();e.getLPort().id===0&&n.push(e)}for(let r of e.getIncomingSLEdges()){t.addSelfLoopEdge(r);let e=r.getSLSource();e.getLPort().id===0&&n.push(e)}}return t}};function Mf(e){for(let t of e.getLayerlessNodes())if(jf.needsSelfLoopProcessing(t)){let e=jf.install(t);Nf(e),Ff(e)}}function Nf(e){for(let t of e.getSLHyperLoops())for(let e of t.getSLEdges())Pf(e.getLEdge())}function Pf(e){e.setSource(null),e.setTarget(null)}function Ff(e){let t=e.getLNode(),n=t.getNestedGraph(),r=D.isOrderFixed(t.getProperty(O)),i=n!==null&&n.getProperty(w).has(`EXTERNAL_PORTS`);if(!(r||i))for(let t of e.getSLPortMap().values())t.hadOnlySelfLoops()&&(t.getLPort().setNode(null),t.setHidden(!0),e.setPortsHidden(!0))}function If(e){let t=e.getProperty(wt)*2;for(let n of e.getLayers()){let{north:e,south:r}=Lf(n);Rf(e,!0,t),Rf(r,!1,t)}}function Lf(e){let t=[],n=[];for(let r of e.getNodes()){if(r.getType()!==`EXTERNAL_PORT`)continue;let e=r.getProperty(j);e===`NORTH`?t.push(r):e===`SOUTH`&&n.push(r)}return{north:t,south:n}}function Rf(e,t,n){let r=t?0:n*(e.length-1),i=t?n:-n;for(let t of e){t.setProperty(z,`CENTER`),t.size.x=r;for(let e of t.getPorts(`EAST`))e.getPosition().x=r;r+=i}}var zf=class{process(e){this.processEasternAndWesternPortDummies(e),this.processNorthernAndSouthernPortDummies(e)}processEasternAndWesternPortDummies(e){if(!D.isOrderFixed(e.getProperty(O)))return;let t=e.getLayers();t.length!==0&&(this.processEW(t[0]),this.processEW(t[t.length-1]))}processEW(e){let t=[...e.getNodes()];t.sort((e,t)=>{let n=e.getType(),r=t.getType(),i=e.getProperty(Kn),a=t.getProperty(Kn);return r===`EXTERNAL_PORT`?n===`EXTERNAL_PORT`?i===a?0:i<a?-1:1:1:-1});let n=null;for(let e of t){if(e.getType()!==`EXTERNAL_PORT`)break;let t=e.getProperty(j);if(t===`WEST`||t===`EAST`){if(n!==null){let t=n.getProperty(k);t??(t=[],n.setProperty(k,t)),t.push(e)}n=e}}}processNorthernAndSouthernPortDummies(e){if(!D.isSideFixed(e.getProperty(O)))return;let t=e.getLayers(),n=t.length,r=[/* @__PURE__ */ new Map,/* @__PURE__ */ new Map],i=[[],[]],a=[];for(let o=0;o<n;o++){let n=t[o],s=r[o],c=/* @__PURE__ */ new Map;r.push(c);let l=i[o],u=[];i.push(u);for(let t of n.getNodes())if(this.isNorthernOrSouthernDummy(t))a.push(t);else{for(let n of t.getIncomingEdges()){let t=n.getSource()?.getNode();if(t==null||!this.isNorthernOrSouthernDummy(t))continue;let r=t.getProperty(ie)??t,i=s.get(r)??null;i===null&&(i=this.createDummy(e,t),s.set(r,i),l.push(i)),n.setSource(i.getPorts()[1])}for(let n of t.getOutgoingEdges()){let t=n.getTarget()?.getNode();if(t==null||!this.isNorthernOrSouthernDummy(t))continue;let r=t.getProperty(ie)??t,i=c.get(r)??null;i===null&&(i=this.createDummy(e,t),c.set(r,i),u.push(i)),n.setTarget(i.getPorts()[0])}}}for(let n=0;n<i.length;n++){let a=i[n];if(a.length===0)continue;let o;n===0?(o=new W(e),t.unshift(o)):n===r.length-1?(o=new W(e),t.push(o)):o=t[n-1];for(let e of a)e.setLayer(o)}for(let e of a)e.setLayer(null);e.setProperty(qe,a)}isNorthernOrSouthernDummy(e){if(e.getType()!==`EXTERNAL_PORT`)return!1;let t=e.getProperty(j);return t===`NORTH`||t===`SOUTH`}createDummy(e,t){let n=new V(e);n.copyProperties(t),n.setInLayerConstraint(t.getInLayerConstraint()),n.setProperty(ie,t),n.setProperty(O,`FIXED_POS`),n.setProperty(z,`CENTER`),n.setType(`EXTERNAL_PORT`);let r=new H;r.setNode(n),r.setSide(`WEST`);let i=new H;return i.setNode(n),i.setSide(`EAST`),n}};function Bf(e){let t=e.getLayers();t.length>0&&Vf(t[0],e),t.length>1&&Vf(t[t.length-1],e)}function Vf(e,t){let n=t.getProperty(O);if(!(D.isRatioFixed(n)||D.isPosFixed(n)))return;let r=t.getActualSize().y;for(let i of e.getNodes()){if(i.getType()!==`EXTERNAL_PORT`)continue;let e=i.getProperty(j);if(e!==`EAST`&&e!==`WEST`)continue;let a=i.getProperty(Kn);n===`FIXED_RATIO`&&(a*=r),i.getPosition().y=a-(i.getProperty(te)?.y??0),i.position.y-=t.getPadding().top+t.getOffset().y}}function Hf(e){let t=Uf(e);Kf(e,t),$f(e,t),np(e),ep(e),rp(e)}function Uf(e){let t=e.getProperty(qe);if(t==null||t.length===0)return[];let n=[];for(let e of t)Wf(e),n.push(e);for(let t of e.getLayers())for(let e of t.getNodes()){if(e.getType()!==`EXTERNAL_PORT`)continue;let t=e.getProperty(ie);t!=null&&Gf(e,t)}let r=e.getLayers();for(let e of n)e.setLayer(r[r.length-1]);return n}function Wf(e){let t=e.getProperty(j),n=e.getPorts()[0];t===`NORTH`?n.setSide(`SOUTH`):t===`SOUTH`&&n.setSide(`NORTH`)}function Gf(e,t){let n=new H;n.setNode(e),n.setSide(e.getProperty(j));let r=t.getPorts()[0],i=new U;i.setSource(n),i.setTarget(r)}function Kf(e,t){let n=e.getProperty(O),r=e.getSize(),i=e.getPadding(),a=r.x+i.left+i.right,o=0-e.getOffset().y,s=r.y+i.top+i.bottom-e.getOffset().y,c=[],l=[];for(let e of t){switch(n){case`FREE`:case`FIXED_SIDE`:case`FIXED_ORDER`:qf(e);break;case`FIXED_RATIO`:Jf(e,a);break;case`FIXED_POS`:Yf(e),r.x=Math.max(r.x,e.getPosition().x+e.getSize().x/2)}switch(e.getProperty(j)){case`NORTH`:e.getPosition().y=o,c.push(e);break;case`SOUTH`:e.getPosition().y=s,l.push(e)}}n===`FREE`||n===`FIXED_SIDE`?(Xf(c,e),Xf(l,e)):n===`FIXED_ORDER`&&(Zf(c,e),Zf(l,e))}function qf(e){let t=e.getPorts()[0];if(t.getDegree()===0){e.getPosition().x=0;return}let n=0;for(let e of t.getConnectedPorts())n+=e.getNode().getPosition().x+e.getPosition().x+e.getAnchor().x;let r=e.getProperty(te),i=r==null?0:r.x;e.getPosition().x=n/t.getDegree()-i}function Jf(e,t){let n=e.getProperty(te),r=n==null?0:n.x;e.getPosition().x=t*e.getProperty(Kn)-r}function Yf(e){let t=e.getProperty(te),n=t==null?0:t.x;e.getPosition().x=e.getProperty(Kn)-n}function Xf(e,t){e.length!==0&&(e.sort((e,t)=>e.getPosition().x-t.getPosition().x),Qf(e,t))}function Zf(e,t){e.length!==0&&(e.sort((e,t)=>e.getProperty(Kn)-t.getProperty(Kn)),Qf(e,t))}function Qf(e,t){let n=t.getProperty(dn),r=e[0].getPosition().x+e[0].getSize().x+e[0].getMargin().right+n;for(let i=1;i<e.length;i++){let a=e[i].getPosition(),o=e[i].getSize(),s=e[i].getMargin(),c=a.x-s.left-r;c<0&&(a.x-=c);let l=t.getSize();l.x=Math.max(l.x,a.x+o.x),r=a.x+o.x+s.right+n}}function $f(e,t){let r=t.filter(e=>e.getProperty(j)===`NORTH`),i=t.filter(e=>e.getProperty(j)===`SOUTH`),a=e.getProperty(P),o=e.getProperty(Zt),s=e.getProperty(n),c=new yo(s),l=e=>{let t=/* @__PURE__ */ new Set;for(let n of e){let e=n.getPorts()[0];if(e!=null)for(let n of e.getIncomingEdges()){let e=n.getSource()?.getNode();e!=null&&t.add(e)}}return[...t]};if(r.length>0){let t=c.routeEdgesForDirection(l(r),r,a,ho.sourceSide,ho.targetSide,ho.positionFn,-o-e.getOffset().y);if(t>0){let n=o+(t-1)*s;e.getOffset().y+=n,e.getSize().y+=n}}if(i.length>0){let t=c.routeEdgesForDirection(l(i),i,a,go.sourceSide,go.targetSide,go.positionFn,e.getSize().y+o-e.getOffset().y);t>0&&(e.getSize().y+=o+(t-1)*s)}}function ep(e){let t=e.getLayers();t.length!==0&&(tp(t[0],e),tp(t[t.length-1],e))}function tp(e,t){let n=t.getProperty(O),r=t.getPadding(),i=t.getOffset(),a=t.getSize(),o=a.y+r.top+r.bottom,s=o;for(let t of e.getNodes()){if(t.getType()!==`EXTERNAL_PORT`)continue;let e=t.getProperty(j),o=t.getPosition(),c=t.getProperty(Xe);if(c==null){let e=t.getProperty(L);c=e instanceof H?e.getSize():{x:0,y:0}}switch(e){case`EAST`:o.x=a.x+r.right-i.x;break;case`WEST`:o.x=-i.x-r.left}let l=0;if(e===`EAST`||e===`WEST`){let e=t.getProperty(te),s=e==null?0:e.y;if(n===`FIXED_RATIO`){let e=t.getProperty(Kn)??0;o.y=a.y*e-s,l=o.y+c.y,o.y-=r.top+i.y}else n===`FIXED_POS`&&(o.y=(t.getProperty(Kn)??0)-s,l=o.y+c.y,o.y-=r.top+i.y)}s=Math.max(s,l)}a.y+=s-o;for(let t of e.getNodes()){if(t.getType()!==`EXTERNAL_PORT`)continue;let e=t.getProperty(j),n=t.getPosition();switch(e){case`NORTH`:n.y=-i.y;break;case`SOUTH`:n.y=a.y+r.top+r.bottom-i.y}}}function np(e){let t=[];for(let n of e.getLayers())for(let e of n.getNodes()){if(e.getType()!==`EXTERNAL_PORT`||!e.hasProperty(ie))continue;let n=null,r=null,i=null;for(let t of e.getPorts())switch(t.getSide()){case`WEST`:n=t;break;case`EAST`:r=t;break;default:i=t}if(n===null||r===null||i===null)continue;let a=i.getOutgoingEdges()[0];if(a===void 0)continue;let o=a.getBendPoints().map(e=>({...e})),s={x:i.getPosition().x+e.getPosition().x,y:i.getPosition().y+e.getPosition().y};o.unshift(s);let c=[...a.getBendPoints()].reverse().map(e=>({...e}));c.push({...s});let l=e.getProperty(ie).getPorts()[0];for(let e of[...n.getIncomingEdges()])e.setTarget(l),e.getBendPoints().push(...o.map(e=>({...e})));for(let e of[...r.getOutgoingEdges()])e.setSource(l),e.getBendPoints().unshift(...c.map(e=>({...e})));a.setSource(null),a.setTarget(null),t.push(e)}for(let n of t){n.setLayer(null);let t=e.getLayerlessNodes().indexOf(n);t!==-1&&e.getLayerlessNodes().splice(t,1)}}function rp(e){let t=e.getLayers();t.length!==0&&(ip(t[0]),ip(t[t.length-1]))}function ip(e){for(let t of e.getNodes()){if(t.getType()!==`EXTERNAL_PORT`)continue;let e=t.getProperty(j);if(e===`EAST`||e===`WEST`)for(let e of t.getPorts())for(let n of e.getConnectedEdges()){let e=n.getBendPoints();if(e.length===0)continue;let r=n.getSource();r!==null&&r.getNode()===t&&(e[0].y=r.getAbsoluteAnchor().y);let i=n.getTarget();i!==null&&i.getNode()===t&&(e[e.length-1].y=i.getAbsoluteAnchor().y)}}}function ap(e){for(let t of e.getLayers()){let e=-1,n=[];for(let[r,i]of[...t.getNodes()].entries()){let a=i.getInLayerConstraint();e===-1?a!==`TOP`&&(e=r):a===`TOP`&&(i.setLayer(null),i.setLayerAt(e++,t)),a===`BOTTOM`&&n.push(i)}for(let e of n)e.setLayer(null),e.setLayer(t)}}function op(e){for(let t of e.getLayers())for(let e of t.getNodes()){if(e.getType()!==`NORMAL`)continue;let t=e.getProperty(f);t!=null&&sp(e,t)}}function sp(e,t){for(let n of t.getSLHyperLoops())for(let t of n.getSLEdges())cp(e,t);for(let n of t.getSLHyperLoops())n.getSLLabels()!==null&&n.getSLLabels().applyPlacement(e.position)}function cp(e,t){let n=t.getLEdge();n.setSource(t.getSLSource().getLPort()),n.setTarget(t.getSLTarget().getLPort());for(let t of n.getBendPoints())t.x+=e.position.x,t.y+=e.position.y}var lp=class e{slLoopsByType=/* @__PURE__ */ new Map;targetAreas=/* @__PURE__ */ new Map;restorePorts(e){this.initTargetAreas(),this.slLoopsByType=this.gatherSelfLoopsByType(e);let t=e.getLNode().hasProperty(de)?e.getLNode().getProperty(de):e.getLNode().getGraph().getProperty(de);this.processOneSideLoops(t),this.processTwoSideCornerLoops(),this.processThreeSideLoops(),this.processFourSideLoops(),this.processTwoSideOpposingLoops(),this.restorePortList(e);for(let e of this.targetAreas.values())for(let t of e)t.setHidden(!1);e.setPortsHidden(!1),this.slLoopsByType=/* @__PURE__ */ new Map}initTargetAreas(){this.targetAreas=/* @__PURE__ */ new Map;for(let e of up)for(let t of[0,1,2])this.targetAreas.set(dp(e,t),[])}gatherSelfLoopsByType(e){let t=/* @__PURE__ */ new Map;for(let n of e.getSLHyperLoops()){let e=t.get(n.getSelfLoopType())??[];e.push(n),t.set(n.getSelfLoopType(),e)}return t}processOneSideLoops(e){let t=this.slLoopsByType.get(`ONE_SIDE`)??[];e===`REVERSE_STACKED`&&t.reverse();for(let n of t){let t=n.getSLPorts()[0].getLPort().getSide(),r=[...n.getSLPorts()];switch(r.sort((e,t)=>e.getSLNetFlow()-t.getSLNetFlow()),e){case`SEQUENCED`:this.addToTargetAreaPorts(r,t,1,1);break;case`REVERSE_STACKED`:case`STACKED`:{let e=this.computePortListSplitIndex(r);this.addToTargetAreaPorts(r.slice(0,e),t,1,0),this.addToTargetAreaPorts(r.slice(e),t,1,1);break}default:throw Error(`Unexpected ordering: ${e}`)}}}computePortListSplitIndex(e){let t=0;for(;t<e.length&&!(e[t].getSLNetFlow()>0);t++);if(t>0&&t<e.length-1)return t;let n=0;for(;n<e.length&&!(e[n].getSLNetFlow()>0);n++);return n>0&&t<e.length-1?n:Math.floor(e.length/2)}processTwoSideCornerLoops(){for(let t of this.slLoopsByType.get(`TWO_SIDES_CORNER`)??[]){let n=e.sortedTwoSideLoopPortSides(t);this.addToTargetArea(t,n[0],2,0),this.addToTargetArea(t,n[1],0,1)}}processTwoSideOpposingLoops(){for(let t of this.slLoopsByType.get(`TWO_SIDES_OPPOSING`)??[]){let n=e.sortedTwoSideLoopPortSides(t);this.addToTargetArea(t,n[0],2,0),this.addToTargetArea(t,n[1],0,1)}}static sortedTwoSideLoopPortSides(e){let t=[...e.getSLPortsBySideMap().keys()];return t.sort((e,t)=>fp(e)-fp(t)),t[0]===`NORTH`&&t[1]===`WEST`&&(t[0]=`WEST`,t[1]=`NORTH`),t}static NES=[`NORTH`,`EAST`,`SOUTH`];static ESW=[`EAST`,`SOUTH`,`WEST`];static SWN=[`SOUTH`,`WEST`,`NORTH`];static WNE=[`WEST`,`NORTH`,`EAST`];processThreeSideLoops(){for(let e of this.slLoopsByType.get(`THREE_SIDES`)??[]){let t=this.determineLoopConstellation(e);this.addToTargetArea(e,t[0],2,0),this.addToTargetArea(e,t[1],1,1),this.addToTargetArea(e,t[2],0,1)}}determineLoopConstellation(t){let n=t.getSLPortsBySideMap();if(!n.has(`NORTH`))return e.ESW;if(!n.has(`EAST`))return e.SWN;if(!n.has(`SOUTH`))return e.WNE;if(!n.has(`WEST`))return e.NES;throw Error(`Impossible`)}processFourSideLoops(){for(let e of this.slLoopsByType.get(`FOUR_SIDES`)??[])for(let t of e.getSLPortsBySideMap().keys())this.addToTargetArea(e,t,1,1)}addToTargetArea(e,t,n,r){this.addToTargetAreaPorts(e.getSLPortsBySide(t),t,n,r)}addToTargetAreaPorts(e,t,n,r){let i=e.filter(e=>e.isHidden());i.reverse();let a=this.targetAreas.get(dp(t,n));r===0?a.unshift(...i):a.push(...i)}restorePortList(e){let t=e.getLNode(),n=[...t.getPorts()],r=0,i=t.getPorts();i.length=0,this.addAll(this.targetAreas.get(dp(`NORTH`,0)),t),r=this.addAllThat(n,r,e=>e.getSide()===`NORTH`&&this.isNorthSouthPortWithWestOrWestEastConnections(e),i),this.addAll(this.targetAreas.get(dp(`NORTH`,1)),t),r=this.addAllThat(n,r,e=>e.getSide()===`NORTH`,i),this.addAll(this.targetAreas.get(dp(`NORTH`,2)),t),this.addAll(this.targetAreas.get(dp(`EAST`,0)),t),this.addAll(this.targetAreas.get(dp(`EAST`,1)),t),r=this.addAllThat(n,r,e=>e.getSide()===`EAST`,i),this.addAll(this.targetAreas.get(dp(`EAST`,2)),t),this.addAll(this.targetAreas.get(dp(`SOUTH`,0)),t),r=this.addAllThat(n,r,e=>e.getSide()===`SOUTH`&&this.isNorthSouthPortWithEastConnections(e),i),this.addAll(this.targetAreas.get(dp(`SOUTH`,1)),t),r=this.addAllThat(n,r,e=>e.getSide()===`SOUTH`,i),this.addAll(this.targetAreas.get(dp(`SOUTH`,2)),t),this.addAll(this.targetAreas.get(dp(`WEST`,0)),t),r=this.addAllThat(n,r,e=>e.getSide()===`WEST`,i),this.addAll(this.targetAreas.get(dp(`WEST`,1)),t),this.addAll(this.targetAreas.get(dp(`WEST`,2)),t)}addAll(e,t){for(let n of e)n.getLPort().setNode(t)}addAllThat(e,t,n,r){for(let i=t;i<e.length;i++){let t=e[i];if(n(t))r.push(t);else return i}return e.length}isNorthSouthPortWithWestOrWestEastConnections(e){return this.northSouthPortConnectionSides(e).has(`WEST`)}isNorthSouthPortWithEastConnections(e){return this.northSouthPortConnectionSides(e).has(`EAST`)}northSouthPortConnectionSides(e){let t=/* @__PURE__ */ new Set,n=e.getProperty(M);if(n!=null)for(let r of n.getPorts())r.getProperty(L)===e&&r.getConnectedEdges().length>0&&t.add(r.getSide());return t}};const up=[`NORTH`,`EAST`,`SOUTH`,`WEST`];function dp(e,t){return`${e}-${t}`}function fp(e){switch(e){case`NORTH`:return 0;case`EAST`:return 1;case`SOUTH`:return 2;case`WEST`:return 3;default:return 4}}const pp=[{name:`NORTH`,firstSide:`NORTH`,secondSide:`NORTH`},{name:`SOUTH`,firstSide:`SOUTH`,secondSide:`SOUTH`},{name:`EAST`,firstSide:`EAST`,secondSide:`EAST`},{name:`WEST`,firstSide:`WEST`,secondSide:`WEST`},{name:`NORTH_WEST_CORNER`,firstSide:`WEST`,secondSide:`NORTH`},{name:`NORTH_EAST_CORNER`,firstSide:`NORTH`,secondSide:`EAST`},{name:`SOUTH_WEST_CORNER`,firstSide:`SOUTH`,secondSide:`WEST`},{name:`SOUTH_EAST_CORNER`,firstSide:`EAST`,secondSide:`SOUTH`}],mp=e=>e.firstSide!==e.secondSide;var hp=class{assignPortSides(e){let t=e.getLNode().hasProperty(hn)?e.getLNode().getProperty(hn):e.getLNode().getGraph().getProperty(hn);switch(t){case`NORTH`:this.assignToNorthSide(e);break;case`NORTH_SOUTH`:this.assignToNorthOrSouthSide(e);break;case`EQUALLY`:this.assignToAllSides(e);break;default:throw Error(`Unexpected distribution: ${String(t)}`)}}assignToNorthSide(e){for(let t of e.getSLHyperLoops())for(let e of this.hiddenSelfLoopPortStream(t))e.getLPort().setSide(`NORTH`)}assignToNorthOrSouthSide(e){let t=0,n=0;for(let r of e.getSLHyperLoops()){let e=this.hiddenSelfLoopPortStream(r),i;t<=n?(i=`NORTH`,t+=e.length):(i=`SOUTH`,n+=e.length);for(let t of e)t.getLPort().setSide(i)}}assignToAllSides(e){let t=[...e.getSLHyperLoops()];t.sort((e,t)=>t.getSLPorts().length-e.getSLPorts().length);let n=0;for(let e of t){let t=pp[n%pp.length];this.assignToTarget(e,t),n++}}assignToTarget(e,t){let n=e.getSLPorts();mp(t)&&n.sort((e,t)=>e.getLPort().getNetFlow()-t.getLPort().getNetFlow());let r=Math.floor(n.length/2);for(let e=0;e<r;e++){let r=n[e];r.isHidden()&&r.getLPort().setSide(t.firstSide)}for(let e=r;e<n.length;e++){let r=n[e];r.isHidden()&&r.getLPort().setSide(t.secondSide)}}hiddenSelfLoopPortStream(e){return e.getSLPorts().filter(e=>e.isHidden())}},gp=class{portSideAssigner=new hp;portRestorer=new lp;process(e){for(let t of e.getLayers())for(let e of t.getNodes()){if(e.getType()!==`NORMAL`)continue;let t=e.getProperty(f);t!=null&&this.processNode(t)}}processNode(e){if(e.arePortsHiddenFlag())switch(e.getLNode().getProperty(tn)){case`UNDEFINED`:case`FREE`:this.portSideAssigner.assignPortSides(e);case`FIXED_SIDE`:this.computeSelfLoopTypes(e),this.portRestorer.restorePorts(e);break;default:throw Error(`Unexpected port constraints`)}else this.computeSelfLoopTypes(e)}computeSelfLoopTypes(e){for(let t of e.getSLHyperLoops())t.computePortsPerSide()}};function _p(e){vp(e);for(let t of e.getSLHyperLoops())t.getSLLabels()!==null&&wp(t)}function vp(e){let t=null,n=null,r=e.getLNode().hasProperty(de)?e.getLNode().getProperty(de):e.getLNode().getGraph().getProperty(de);r===`SEQUENCED`&&(t=[],n=[]);for(let i of e.getSLHyperLoops())if(i.getSLLabels()!==null)switch(i.getSelfLoopType()){case`ONE_SIDE`:{let e=i.getOccupiedPortSides().values().next().value;r===`SEQUENCED`&&e===`NORTH`?t.push(i):r===`SEQUENCED`&&e===`SOUTH`?n.push(i):yp(i,e);break}case`TWO_SIDES_CORNER`:xp(i);break;case`TWO_SIDES_OPPOSING`:case`THREE_SIDES`:Sp(i);break;case`FOUR_SIDES`:Cp(i);break;default:throw Error(`Unexpected self loop type`)}t!==null&&(t.length>0&&bp(t,`NORTH`),n.length>0&&bp(n,`SOUTH`))}function yp(e,t){switch(t){case`EAST`:case`WEST`:{let n=e.getLeftmostPort();e.getRightmostPort().getLPort().getPosition().y<n.getLPort().getPosition().y&&(n=e.getRightmostPort()),Z(e,t,`TOP`,n);break}case`NORTH`:case`SOUTH`:Z(e,t,`CENTER`,null);break;default:throw Error(`Impossible`)}}function bp(e,t){let n=0;for(let t of e[0].getSLHolder().getLNode().getPorts())t.id=n++;t===`NORTH`?e.sort((e,t)=>e.getLeftmostPort().getLPort().id-t.getLeftmostPort().getLPort().id):e.sort((e,t)=>t.getLeftmostPort().getLPort().id-e.getLeftmostPort().getLPort().id);let r=0,i=e.length-1;for(;r<i;){let n=e[r],a=e[i],o=t===`NORTH`?n.getRightmostPort():n.getLeftmostPort(),s=t===`NORTH`?a.getLeftmostPort():a.getRightmostPort();Z(n,t,`RIGHT`,o),Z(a,t,`LEFT`,s),r++,i--}r===i&&Z(e[r],t,`CENTER`,null)}function xp(e){let t=e.getLeftmostPort().getLPort().getSide(),n=e.getRightmostPort().getLPort().getSide();if(t===`NORTH`)Z(e,`NORTH`,`LEFT`,e.getLeftmostPort());else if(n===`NORTH`)Z(e,`NORTH`,`RIGHT`,e.getRightmostPort());else if(t===`SOUTH`)Z(e,`SOUTH`,`RIGHT`,e.getLeftmostPort());else if(n===`SOUTH`)Z(e,`SOUTH`,`LEFT`,e.getRightmostPort());else throw Error(`Impossible`)}function Sp(e){let t=e.getOccupiedPortSides();if(!t.has(`NORTH`))Z(e,`SOUTH`,`CENTER`,null);else if(!t.has(`SOUTH`))Z(e,`NORTH`,`CENTER`,null);else if(!t.has(`WEST`))Z(e,`NORTH`,`LEFT`,e.getLeftmostPort());else if(!t.has(`EAST`))Z(e,`NORTH`,`RIGHT`,e.getRightmostPort());else throw Error(`Impossible`)}function Cp(e){let t=e.getLeftmostPort().getLPort().getSide(),n=e.getLeftmostPort().getLPort().getSide();t===`NORTH`||n===`NORTH`?Z(e,`SOUTH`,`CENTER`,null):Z(e,`NORTH`,`CENTER`,null)}function Z(e,t,n,r){let i=e.getSLLabels();i.setSide(t),i.setAlignment(n),i.setAlignmentReferenceSLPort(r)}function wp(e){let t=e.getSLLabels(),n=t.getAlignmentReferenceSLPort(),r=t.getSize(),i=t.getPosition();switch(t.getAlignment()){case`CENTER`:i.x=(e.getSLHolder().getLNode().size.x-r.x)/2;break;case`LEFT`:i.x=n.getLPort().getPosition().x+n.getLPort().getAnchor().x;break;case`RIGHT`:i.x=n.getLPort().getPosition().x+n.getLPort().getAnchor().x-r.x;break;case`TOP`:i.y=n.getLPort().getPosition().y+n.getLPort().getAnchor().y;break;default:throw Error(`Impossible`)}}var Tp=class{routeSelfLoops(e){let t=e.getLNode(),r=t.size,i=t.getMargin(),a=t.getGraph().getProperty(n),o=t.getGraph().getProperty(Tn),s=t.getGraph().getProperty(xt),c={...i},l=this.computeRoutingSlotPositions(e,a,o,s);for(let t of e.getSLHyperLoops()){for(let e of t.getSLEdges()){let t=e.getLEdge(),n=this.computeEdgeRoutingDirection(e),i=this.computeOrthogonalBendPoints(e,n,l),a=this.modifyBendPoints(e,n,i);t.getBendPoints().length=0;for(let e of a)t.getBendPoints().push(e);for(let e of a)this.updateNewNodeMargins(r,c,e)}let e=t.getSLLabels();e!==null&&(this.placeLabels(t,e,l,o),this.updateNewNodeMarginsForLabels(r,c,e))}i.left=c.left,i.top=c.top,i.right=c.right,i.bottom=c.bottom}computeEdgeRoutingDirection(e){let t=e.getSLSource().getLPort(),n=t.getSide(),r=e.getSLTarget().getLPort(),i=r.getSide();return n===i?t.id<r.id?0:1:wf(n)===i?0:Tf(n)===i?1:+!e.getSLHyperLoop().getOccupiedPortSides().has(wf(n))}placeLabels(e,t,n,r){let i=t.getSide(),a=n[Cf(i)][e.getRoutingSlot(i)];switch(i){case`NORTH`:a-=r+t.getSize().y,t.getPosition().y=a;break;case`SOUTH`:a+=r,t.getPosition().y=a;break;case`WEST`:a-=r+t.getSize().x,t.getPosition().x=a;break;case`EAST`:a+=r,t.getPosition().x=a}}updateNewNodeMargins(e,t,n){t.left=Math.max(t.left,-n.x),t.right=Math.max(t.right,n.x-e.x),t.top=Math.max(t.top,-n.y),t.bottom=Math.max(t.bottom,n.y-e.y)}updateNewNodeMarginsForLabels(e,t,n){let r={...n.getPosition()};this.updateNewNodeMargins(e,t,r),r.x+=n.getSize().x,r.y+=n.getSize().y,this.updateNewNodeMargins(e,t,r)}computeRoutingSlotPositions(e,t,n,r){let i=[];for(let t of[`NORTH`,`EAST`,`SOUTH`,`WEST`])i[Cf(t)]=Array(e.getRoutingSlotCount()[Cf(t)]).fill(0);return this.initializeWithMaxLabelHeight(i,e,`NORTH`),this.initializeWithMaxLabelHeight(i,e,`SOUTH`),this.computePositions(i,e,`NORTH`,t,n,r),this.computePositions(i,e,`EAST`,t,n,r),this.computePositions(i,e,`SOUTH`,t,n,r),this.computePositions(i,e,`WEST`,t,n,r),i}initializeWithMaxLabelHeight(e,t,n){let r=e[Cf(n)];for(let e of t.getSLHyperLoops()){let t=e.getSLLabels();if(t!==null&&t.getSide()===n){let i=e.getRoutingSlot(n);r[i]=Math.max(r[i],t.getSize().y)}}}computePositions(e,t,n,r,i,a){let o=this.computeBaselinePosition(t,n,a),s=n===`NORTH`||n===`WEST`?-1:1,c=e[Cf(n)];for(let e=0;e<c.length;e++){let t=c[e];t>0&&(t+=i),c[e]=o,o+=s*(t+r)}}computeBaselinePosition(e,t,n){let r=e.getLNode(),i=r.getMargin();switch(t){case`NORTH`:return-i.top-n;case`EAST`:return r.size.x+i.right+n;case`SOUTH`:return r.size.y+i.bottom+n;case`WEST`:return-i.left-n;default:throw Error(`Impossible`)}}computeOrthogonalBendPoints(e,t,n){let r=[];return this.addOuterBendPoint(e,e.getSLSource(),n,r),this.addCornerBendPoints(e,t,n,r),this.addOuterBendPoint(e,e.getSLTarget(),n,r),r}modifyBendPoints(e,t,n){return n}addOuterBendPoint(e,t,n,r){let i=e.getSLHyperLoop(),a=t.getLPort(),o=a.getSide(),s=this.getBaseVector(o,i.getRoutingSlot(o),n),c={x:a.getPosition().x+a.getAnchor().x,y:a.getPosition().y+a.getAnchor().y};switch(a.getSide()){case`NORTH`:s.x+=c.x;break;case`SOUTH`:s.x+=c.x;break;case`EAST`:s.y+=c.y;break;case`WEST`:s.y+=c.y}r.push(s)}addCornerBendPoints(e,t,n,r){let i=e.getSLSource().getLPort(),a=e.getSLTarget().getLPort();if(i.getSide()===a.getSide())return;let o=e.getSLHyperLoop(),s=i.getSide();for(;s!==a.getSide();){let e=t===0?wf(s):Tf(s),i=this.getBaseVector(s,o.getRoutingSlot(s),n),a=this.getBaseVector(e,o.getRoutingSlot(e),n);r.push({x:i.x+a.x,y:i.y+a.y}),s=e}}getBaseVector(e,t,n){let r=n[Cf(e)][t];switch(e){case`NORTH`:case`SOUTH`:return{x:0,y:r};case`EAST`:case`WEST`:return{x:r,y:0};default:throw Error(`Impossible`)}}};const Ep=.01;function Dp(e){return{x:e.x>=-.01&&e.x<=Ep?0:e.x,y:e.y>=-.01&&e.y<=Ep?0:e.y}}var Op=class extends Tp{modifyBendPoints(e,t,n){let r=e.getSLSource().getLPort();n.unshift({x:r.getPosition().x+r.getAnchor().x,y:r.getPosition().y+r.getAnchor().y});let i=e.getSLTarget().getLPort();return n.push({x:i.getPosition().x+i.getAnchor().x,y:i.getPosition().y+i.getAnchor().y}),this.cutCorners(n,10)}cutCorners(e,t){if(e.length<=2)throw Error(`AssertionError: bendPoints.size() > 2`);let n=[],r=null,i=e[0],a=e[1];for(let o=2;o<e.length;o++){r=i,i=a,a=e[o];let s=Dp({x:r.x-i.x,y:r.y-i.y}),c=Dp({x:a.x-i.x,y:a.y-i.y}),l=t;l=Math.min(l,Math.abs(s.x+s.y)/2),l=Math.min(l,Math.abs(c.x+c.y)/2),s.x=Math.sign(s.x)*l,s.y=Math.sign(s.y)*l,c.x=Math.sign(c.x)*l,c.y=Math.sign(c.y)*l,n.push({x:s.x+i.x,y:s.y+i.y}),n.push({x:c.x+i.x,y:c.y+i.y})}return n}};const kp=[`WEST`,`NORTH`,`SOUTH`,`EAST`],Ap=(e,t)=>e.getLPort().id-t.getLPort().id;var jp=class{portPenalties=null;determineLoopRoutes(e){this.assignPortIds(e.getLNode().getPorts()),this.sortHyperLoopPortLists(e);for(let t of e.getSLHyperLoops()){switch(t.getSelfLoopType()){case`ONE_SIDE`:this.determineOneSideLoopRoutes(t);break;case`TWO_SIDES_CORNER`:this.determineTwoSideCornerLoopRoutes(t);break;case`TWO_SIDES_OPPOSING`:this.determineTwoSideOpposingLoopRoutes(t);break;case`THREE_SIDES`:this.determineThreeSideLoopRoutes(t);break;case`FOUR_SIDES`:this.determineFourSideLoopRoutes(t);break;default:throw Error(`Unexpected self loop type`)}this.computeOccupiedPortSides(t)}this.portPenalties=null}assignPortIds(e){for(let t=0;t<e.length;t++)e[t].id=t}sortHyperLoopPortLists(e){for(let t of e.getSLHyperLoops())t.getSLPorts().sort(Ap)}computeOccupiedPortSides(e){let t=e.getLeftmostPort().getLPort().getSide(),n=e.getRightmostPort().getLPort().getSide();for(;t!==n;)e.getOccupiedPortSides().add(t),t=wf(t);e.getOccupiedPortSides().add(t)}determineOneSideLoopRoutes(e){let t=e.getSLPorts()[0].getLPort().getSide();this.assignLeftmostRightmostPorts(e,t,t)}determineTwoSideCornerLoopRoutes(e){let t=lp.sortedTwoSideLoopPortSides(e);this.assignLeftmostRightmostPorts(e,t[0],t[1])}determineTwoSideOpposingLoopRoutes(e){let t=[...e.getSLPortsBySideMap().keys()].sort((e,t)=>kp.indexOf(e)-kp.indexOf(t)),n=e.getSLHolder(),r=this.lowestPortOnSide(e,t[0]),i=this.highestPortOnSide(e,t[1]),a=this.computeEdgePenalty(n,r,i),o=this.lowestPortOnSide(e,t[1]),s=this.highestPortOnSide(e,t[0]);a<=this.computeEdgePenalty(n,o,s)?(e.setLeftmostPort(r),e.setRightmostPort(i)):(e.setLeftmostPort(o),e.setRightmostPort(s))}determineThreeSideLoopRoutes(e){let t,n;switch(this.computeMissingPortSide(e)){case`NORTH`:t=`EAST`,n=`WEST`;break;case`EAST`:t=`SOUTH`,n=`NORTH`;break;case`SOUTH`:t=`WEST`,n=`EAST`;break;default:t=`NORTH`,n=`SOUTH`}this.assignLeftmostRightmostPorts(e,t,n)}computeMissingPortSide(e){let t=e.getSLPortsBySideMap();for(let e of[`NORTH`,`EAST`,`SOUTH`,`WEST`])if(!t.has(e))return e;throw Error(`Cannot happen`)}determineFourSideLoopRoutes(e){let t=e.getSLPorts(),n=e.getSLHolder(),r=t[t.length-1],i=t[0],a=this.computeEdgePenalty(n,r,i);for(let e=1;e<t.length;e++){let o=t[e-1],s=t[e],c=this.computeEdgePenalty(n,o,s);c>a&&(r=o,i=s,a=c)}e.setLeftmostPort(i),e.setRightmostPort(r)}assignLeftmostRightmostPorts(e,t,n){e.setLeftmostPort(this.lowestPortOnSide(e,t)),e.setRightmostPort(this.highestPortOnSide(e,n))}lowestPortOnSide(e,t){let n=e.getSLPortsBySide(t),r=n[0];for(let e of n)Ap(e,r)<0&&(r=e);return r}highestPortOnSide(e,t){let n=e.getSLPortsBySide(t),r=n[0];for(let e of n)Ap(e,r)>0&&(r=e);return r}computeEdgePenalty(e,t,n){this.portPenalties===null&&this.computePenalties(e);let r=e.getLNode().getPorts().length,i=t.getLPort().id,a=n.getLPort().id-1;a<0&&(a=r-1);let o=this.portPenalties;return i<=a?o[a]-o[i]:o[r-1]-o[i]+o[a]}computePenalties(e){let t=e.getLNode().getPorts();this.portPenalties=Array(t.length);let n=0;for(let e=0;e<t.length;e++){let r=t[e];r.getIncomingEdges().length===0&&r.getOutgoingEdges().length===0?n+=1:n+=3,this.portPenalties[e]=n}}};const Mp=1e-6;var Np=class{list;cursor=0;lastReturned=-1;constructor(e){this.list=e}next(){if(this.cursor>=this.list.length)throw Error(`NoSuchElementException`);this.lastReturned=this.cursor;let e=this.list[this.cursor];return this.cursor++,e}hasNext(){return this.cursor<this.list.length}previous(){if(this.cursor<=0)throw Error(`NoSuchElementException`);return this.cursor--,this.lastReturned=this.cursor,this.list[this.cursor]}add(e){this.list.splice(this.cursor,0,e),this.cursor++,this.lastReturned=-1}remove(){if(this.lastReturned<0)throw Error(`IllegalStateException`);this.list.splice(this.lastReturned,1),this.cursor>this.lastReturned&&this.cursor--,this.lastReturned=-1}},Pp=class e{cp;polarCoordinate;constructor(t,n,r){if(t instanceof e&&n instanceof e&&r!==void 0){let e=t.polarCoordinate[0],i=n.polarCoordinate[n.polarCoordinate.length-1],a={x:t.cp.x*(i-r),y:t.cp.y*(i-r)},o={x:n.cp.x*(r-e),y:n.cp.y*(r-e)};this.cp={x:(a.x+o.x)/(i-e),y:(a.y+o.y)/(i-e)},this.polarCoordinate=[];let s=!0;for(let e=1;e<t.polarCoordinate.length;e++){let n=t.polarCoordinate[e];s&&n-r>Mp&&(this.polarCoordinate.push(r),s=!1),this.polarCoordinate.push(n)}s&&this.polarCoordinate.push(r)}else this.cp={x:t.x,y:t.y},this.polarCoordinate=[...n]}getCp(){return this.cp}},Fp=class{knotVector=[];controlPoints=[];dim;isClamped;isBezier=!1;minKnot=0;maxKnot=0;constructor(e,t,n){if(t<1)throw Error(`The dimension must be at least 1!`);for(;n.length<=t;)n.unshift({...n[0]});if(n.length<t+1)throw Error(`At (least dimension + 1) control points are necessary!`);this.dim=t,this.isClamped=e,this.isBezier=!1,this.createUniformKnotVector(e,n.length+t-1);let r=[],i=new Np(this.knotVector);for(let e=0;e<t-1;e++)r.push(i.next());for(let e of n)r.push(i.next()),this.controlPoints.push(new Pp(e,r)),r.shift()}createUniformKnotVector(e,t){if(t<2*this.dim)throw Error(`The knot vector must have at least two time the dimension elements.`);let n;if(e){this.minKnot=0,this.maxKnot=1;for(let e=0;e<this.dim;e++)this.knotVector.push(0);n=t+1-2*this.dim}else{n=t+1;let e=this.dim;this.minKnot=e/(n+1),this.maxKnot=(n-e)/n}let r=n;for(let e=1;e<n;e++)this.knotVector.push(e/r);if(this.isClamped)for(let e=0;e<this.dim;e++)this.knotVector.push(1)}getMultiplicity(e){let t=0;for(let n of this.knotVector){let r=n-e;if(r>Mp)return t;r>-1e-6&&t++}return t}insertKnotAtCurrentPosition(e,t,n,r){let i=this.getMultiplicity(t);for(let a=0;a<e;a++){r.add(t);let o=[],s=n.next();for(let e=i+a;e<this.dim;e++){let e=s;s=n.next(),o.push(new Pp(e,s,t))}for(let e=i+a;e<this.dim;e++)n.previous(),e>i+a&&n.remove();for(let e of o)n.add(e);if(a<e-1)for(let e=i+a;e<this.dim;e++)n.previous()}}toBezier(){let e=new Np(this.knotVector),t=new Np(this.controlPoints);if(this.isClamped)for(let t=0;t<this.dim;t++)e.next();else for(let t=0;t<this.dim-1;t++)e.next(),e.remove();let n=e.next();for(;this.maxKnot-n>Mp;){let r=n,i=0;for(;Math.abs(n-r)<Mp;)i++,n=e.next(),t.next();i<this.dim&&(e.previous(),this.insertKnotAtCurrentPosition(this.dim-i,r,t,e),e.next()),t.previous()}if(!this.isClamped)for(let t=0;t<this.dim-1;t++)e.next(),e.remove();this.isClamped=!0,this.isBezier=!0}getBezierCP(e=!1,t=!1){this.isBezier||this.toBezier();let n=[],r=this.controlPoints[Symbol.iterator]();e||r.next();let i=r.next();for(;!i.done;)n.push(i.value.getCp()),i=r.next();return t||n.pop(),n}};function Ip(e){switch(e){case`NORTH`:return Math.PI*1.5;case`EAST`:return 0;case`SOUTH`:return Math.PI*.5;case`WEST`:return Math.PI;default:return 0}}function Lp(e){return{x:Math.cos(e),y:Math.sin(e)}}var Rp=class extends Tp{modifyBendPoints(e,t,n){let r=e.getSLHyperLoop().getSLHolder().getLNode().getGraph().getProperty(Tn),i=[this.relativePortAnchor(e.getSLSource())];return this.addSplineControlPoints(e,t,n,i,r),i.push(this.relativePortAnchor(e.getSLTarget())),new Fp(!0,3,i).getBezierCP()}relativePortAnchor(e){let t=e.getLPort();return{x:t.getPosition().x+t.getAnchor().x,y:t.getPosition().y+t.getAnchor().y}}addSplineControlPoints(e,t,n,r,i){if(n.length<2)throw Error(`AssertionError: orthoBendPoints.size() >= 2`);let a=e.getSLSource().getLPort().getSide(),o=n[0];for(let e=1;e<n.length;e++){let s=n[e];r.push(o);let c={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5},l=Lp(Ip(a));c.x+=l.x*i,c.y+=l.y*i,r.push(c),o=s,a=t===0?wf(a):Tf(a)}r.push(n[n.length-1])}},zp=class{hyperEdgeSegments=[];slLoopToSegmentMap=/* @__PURE__ */ new Map;slLoopActivityOverPorts=/* @__PURE__ */ new Map;assignRoutingSlots(e){let t=this.computeLabelCrossingMatrix(e);this.createCrossingGraph(e,t);let n=e.getLNode().getGraph().getProperty(P);Vp(this.hyperEdgeSegments,n),this.doAssignRoutingSlots(e,t),this.hyperEdgeSegments=[],this.slLoopToSegmentMap=/* @__PURE__ */ new Map,this.slLoopActivityOverPorts=/* @__PURE__ */ new Map}computeLabelCrossingMatrix(e){let t=0;for(let n of e.getSLHyperLoops())n.getSLLabels()!==null&&(n.getSLLabels().id=t++);let n=Array.from({length:t},()=>Array(t).fill(!1)),r=e.getSLHyperLoops();for(let e=0;e<r.length;e++){let t=r[e];if(t.getSLLabels()!==null)for(let i=e+1;i<r.length;i++){let e=r[i];if(e.getSLLabels()!==null){let r=Bp(t,e);n[t.getSLLabels().id][e.getSLLabels().id]=r,n[e.getSLLabels().id][t.getSLLabels().id]=r}}}return n}createCrossingGraph(e,t){let n=e.getSLHyperLoops();this.hyperEdgeSegments=Array(n.length),this.slLoopToSegmentMap=/* @__PURE__ */ new Map;for(let e=0;e<n.length;e++){let t=new Ja;this.hyperEdgeSegments[e]=t,this.slLoopToSegmentMap.set(n[e],t)}this.slLoopActivityOverPorts=/* @__PURE__ */ new Map,this.computeLoopActivity(e);for(let e=0;e<n.length-1;e++){let r=n[e];for(let i=e+1;i<n.length;i++)this.createDependencies(r,n[i],t)}}computeLoopActivity(e){let t=e.getSLHyperLoops(),n=e.getLNode().getPorts();for(let e of t){let t=Array(n.length).fill(!1);this.slLoopActivityOverPorts.set(e,t);let r=e.getLeftmostPort().getLPort().id-1,i=e.getRightmostPort().getLPort().id;for(;r!==i;)r=(r+1)%n.length,t[r]=!0}}createDependencies(e,t,n){let r=this.countCrossings(e,t),i=this.countCrossings(t,e),a=this.slLoopToSegmentMap.get(e),o=this.slLoopToSegmentMap.get(t);r<i?K.createAndAddRegular(a,o,i-r):i<r?K.createAndAddRegular(o,a,r-i):(r!==0||this.labelsOverlapWithMatrix(e,t,n))&&(K.createAndAddRegular(a,o,0),K.createAndAddRegular(o,a,0))}countCrossings(e,t){let n=this.slLoopActivityOverPorts.get(t),r=0;for(let t of e.getSLPorts())n[t.getLPort().id]&&r++;return r}labelsOverlapWithMatrix(e,t,n){return e.getSLLabels()===null||t.getSLLabels()===null?!1:n[e.getSLLabels().id][t.getSLLabels().id]}doAssignRoutingSlots(e,t){this.assignRawRoutingSlotsToSegments(),this.assignRawRoutingSlotsToLoops(e),this.shiftTowardsNode(e,t)}assignRawRoutingSlotsToSegments(){let e=[];for(let t of this.hyperEdgeSegments)t.setInWeight(t.getIncomingSegmentDependencies().length),t.setOutWeight(t.getOutgoingSegmentDependencies().length),t.getOutWeight()===0&&(t.setRoutingSlot(0),e.push(t));for(;e.length>0;){let t=e.shift(),n=t.getRoutingSlot()+1;for(let r of t.getIncomingSegmentDependencies()){let t=r.getSource();t.setRoutingSlot(Math.max(t.getRoutingSlot(),n)),t.setOutWeight(t.getOutWeight()-1),t.getOutWeight()===0&&e.push(t)}}}assignRawRoutingSlotsToLoops(e){for(let t of e.getSLHyperLoops()){let e=this.slLoopToSegmentMap.get(t);for(let n of t.getOccupiedPortSides())t.setRoutingSlot(n,e.getRoutingSlot())}}shiftTowardsNode(e,t){let n=Array(e.getLNode().getPorts().length).fill(0);this.shiftTowardsNodeOnSide(e,`NORTH`,n,t),this.shiftTowardsNodeOnSide(e,`EAST`,n,t),this.shiftTowardsNodeOnSide(e,`SOUTH`,n,t),this.shiftTowardsNodeOnSide(e,`WEST`,n,t)}shiftTowardsNodeOnSide(e,t,n,r){let i=e.getSLHyperLoops().filter(e=>e.getOccupiedPortSides().has(t)).sort((e,n)=>e.getRoutingSlot(t)-n.getRoutingSlot(t)),a=e.getLNode(),o=2**53-1,s=-(2**53-1);for(let e of a.getPorts())e.getSide()===t&&(o=Math.min(o,e.id),s=Math.max(s,e.id));if(o===2**53-1)for(let e=0;e<i.length;e++)i[e].setRoutingSlot(t,e);else{let e=Array(r.length).fill(-1);for(let a of i){let i=this.slLoopActivityOverPorts.get(a),c=0;for(let e=o;e<=s;e++)i[e]&&(c=Math.max(c,n[e]));if(a.getSLLabels()!==null){let t=a.getSLLabels().id,n=/* @__PURE__ */ new Set;for(let i=0;i<r.length;i++)r[t][i]&&n.add(e[i]);for(;n.has(c);)c++}a.setRoutingSlot(t,c);for(let e=o;e<=s;e++)i[e]&&(n[e]=c+1);a.getSLLabels()!==null&&(e[a.getSLLabels().id]=c)}}}};function Bp(e,t){let n=e.getSLLabels(),r=t.getSLLabels();if(n===null||r===null||n.getSide()!==r.getSide()||n.getSide()===`EAST`||n.getSide()===`WEST`)return!1;let i=n.getPosition().x,a=i+n.getSize().x,o=r.getPosition().x;return i<=o+r.getSize().x&&a>=o}function Vp(e,t){let n=Ha.detectCycles(e,!1,t);for(let e of n)e.getWeight()===0?e.remove():e.reverse()}function Hp(e){switch(e.getProperty(s)){case`POLYLINE`:return new Op;case`SPLINES`:return new Rp;default:return new Tp}}function Up(e){let t=new jp,n=new zp,r=Hp(e);for(let i of e.getLayers())for(let e of i.getNodes()){if(e.getType()!==`NORMAL`)continue;let i=e.getProperty(f);i!=null&&Wp(i,r,t,n)}}function Wp(e,t,n,r){n.determineLoopRoutes(e),_p(e),r.assignRoutingSlots(e),t.routeSelfLoops(e)}function Gp(e){for(let t of e.getLayers()){let n=[];for(let r of t.getNodes())for(let t of r.getPorts()){let r=[...t.getOutgoingEdges()];for(let t of r){if(t.getSource().getNode()!==t.getTarget().getNode())continue;let r=t.getSource(),i=t.getTarget(),a=r.getSide(),o=i.getSide();((a===`NORTH`||a===`SOUTH`)&&o===`WEST`||a===`SOUTH`&&o===`NORTH`||a===`EAST`&&o!==`EAST`)&&t.reverse(e,!1);let s=t.getSource().getSide(),c=t.getTarget().getSide();s===`EAST`&&c===`WEST`?n.push(Kp(e,t,t.getTarget(),t.getSource())):s===`WEST`&&c===`EAST`&&n.push(Kp(e,t,t.getSource(),t.getTarget()))}}for(let e of n)e.setLayer(t)}}function Kp(e,t,n,r){let i=new V(e);i.setType(`LONG_EDGE`),i.setProperty(L,t),i.setProperty(O,`FIXED_POS`),i.setProperty(B,n),i.setProperty(I,r);let a=new H;a.setSide(`WEST`),a.setNode(i);let o=new H;o.setSide(`EAST`),o.setNode(i),t.setTarget(a);let s=new U;return s.copyProperties(t),s.setProperty(R,null),s.setSource(o),s.setTarget(r),i}function qp(e,t,n){for(let r of e){let e=r.getProperty(L),i=e.getAbsoluteAnchor().x,a=r.getNode().getPosition().y,o=t?[...r.getIncomingEdges()]:[...r.getOutgoingEdges()];for(let r of o)if(t?(r.setTarget(e),r.getBendPoints().push({x:i,y:a})):(r.setSource(e),r.getBendPoints().unshift({x:i,y:a})),n){let e=r.getProperty(R);e??(e=[],r.setProperty(R,e)),e.push({x:i,y:a})}}}function Jp(e){let t=e.getProperty(L),n=e.getPorts(`WEST`)[0],r=e.getPorts(`EAST`)[0],i=n.getProperty(L),a=r.getProperty(L);t.setSource(a),t.setTarget(i);let o={...r.getNode().getPosition()};o.x=a.getAbsoluteAnchor().x,t.getBendPoints().push(o);let s={...n.getNode().getPosition()};s.x=i.getAbsoluteAnchor().x,t.getBendPoints().push(s)}function Yp(e){let t=e.getProperty(s);for(let n of e.getLayers())for(let e of[...n.getNodes()])if(e.getType()===`NORTH_SOUTH_PORT`){if(t===`SPLINES`)for(let t of e.getPorts()){let n=t.getProperty(L);if(n.setProperty(b,e.getPosition().y),t.getIncomingEdges().length>0)for(let e of[...t.getIncomingEdges()])e.setTarget(n);if(t.getOutgoingEdges().length>0)for(let e of[...t.getOutgoingEdges()])e.setSource(n)}else if(e.getProperty(L)instanceof U)Jp(e);else{let t=e.getPorts(),n=t.length>=2;for(let e=1;e<t.length;e++)if(t[e].getProperty(L)!==t[e-1].getProperty(L)){n=!1;break}t.length<2&&(n=!1);for(let e of t)e.getIncomingEdges().length>0&&qp([e],!0,n),e.getOutgoingEdges().length>0&&qp([e],!1,n)}e.setLayer(null)}}function Xp(e,t,n,r,i){if((i?n.getSource().getNode():n.getTarget().getNode())===t.getNode())return;let a=new V(e);a.setType(`LONG_EDGE`),a.setProperty(L,n),a.setProperty(O,`FIXED_POS`),r.push(a);let o=new H;o.setNode(a),o.setSide(`WEST`);let s=new H;if(s.setNode(a),s.setSide(`EAST`),i){n.setTarget(o);let e=new U;e.copyProperties(n),e.setProperty(R,null),e.setSource(s),e.setTarget(t),Qp(a,o,s,t),Zp(n,e)}else{let e=n.getTarget();n.setTarget(o);let r=new U;r.copyProperties(n),r.setProperty(R,null),r.setSource(s),r.setTarget(e),Qp(a,o,s,t),Zp(n,r)}}function Zp(e,t){let n=e.getLabels();for(let e=n.length-1;e>=0;e--)if(n[e].placement===`HEAD`){let[r]=n.splice(e,1);t.getLabels().push(r)}}function Qp(e,t,n,r){let i=t.getIncomingEdges()[0].getSource(),a=i.getNode();e.setProperty(B,a.getType()===`LONG_EDGE`?a.getProperty(B):i);let o=n.getOutgoingEdges()[0].getTarget(),s=o.getNode();e.setProperty(I,s.getType()===`LONG_EDGE`?s.getProperty(I):o)}function $p(e){let t=e.getLayers(),n=[],r=0;for(let i of t){if(r>0){for(let e of n)e.setLayer(t[r-1]);n.length=0}for(let t of i.getNodes())if(t.getType()===`NORMAL`&&D.isSideFixed(t.getProperty(O))){for(let r of t.getPorts(`INPUT`).filter(e=>e.getSide()===`EAST`))for(let t of[...r.getIncomingEdges()])Xp(e,r,t,n,!0);for(let r of t.getPorts(`OUTPUT`).filter(e=>e.getSide()===`WEST`))for(let t of[...r.getOutgoingEdges()])Xp(e,r,t,n,!1)}r++}for(let e of n)e.setLayer(t[t.length-1])}function em(e){return e.getLayerlessNodes().some(e=>e.getProperty(At))}function tm(e){for(let t of[...e.getLayerlessNodes()]){if(!t.getProperty(At))continue;let n=0,r=null,i=null;for(let e of t.getPorts())n+=e.getDegree(),e.getIncomingEdges().length===1&&(r=e.getIncomingEdges()[0],i=r.getSource()),e.getOutgoingEdges().length===1&&(r=e.getOutgoingEdges()[0],i=r.getTarget());if(n===1&&i!==null&&i.getDegree()===1&&!i.getNode().getProperty(At)){nm(t,r,i,i.getNode());let n=e.getLayerlessNodes().indexOf(t);n!==-1&&e.getLayerlessNodes().splice(n,1)}else{let n=[];for(let e of t.getPorts()){for(let t of e.getOutgoingEdges())t.getTarget().getNode().getOutgoingEdges().length>0&&n.push(t);for(let t of e.getIncomingEdges())t.getSource().getNode().getIncomingEdges().length>0&&n.push(t)}for(let t of n)t.reverse(e,!0)}}}function nm(e,t,n,r){let i=!1,a=!1,o=!1,s=r.getProperty(`org.eclipse.elk.portConstraints`);if(s!=null&&String(s).includes(`FIXED`)){let e=!1,t=!1;for(let n of r.getPorts())for(let r of n.getConnectedPorts())if(!r.getNode().getProperty(At)){if(n.getSide()===`NORTH`){e=!0;break}if(n.getSide()===`SOUTH`){t=!0;break}}a=t&&!e,o=e&&!t}if(!a&&!o&&r.getLabels().length>0){let e=0;for(let t of r.getLabels())e+=t.position.y+t.size.y/2;e/=r.getLabels().length,i=e>=r.size.y/2}else i=!o;let c=null;if(i){let e=r.getProperty(Wt);if(e==null)c=[],r.setProperty(Wt,c);else if(a)c=e;else{let t=r.getProperty(qt);t==null?(c=[],r.setProperty(qt,c)):c=e.length<=t.length?e:t}}else{let e=r.getProperty(qt);if(e==null)c=[],r.setProperty(qt,c);else if(o)c=e;else{let t=r.getProperty(Wt);t==null?(c=[],r.setProperty(Wt,c)):c=e.length<=t.length?e:t}}c.push(e),e.setProperty(ve,n),t.getTarget()===n?(t.setTarget(null),n.getDegree()===0&&n.setNode(null),rm(n)):(t.setSource(null),n.getDegree()===0&&n.setNode(null)),t.getBendPoints().length=0}function rm(e){let t=e.getProperty(M);if(t!=null){let e=t.getLayer();if(e!==null){let n=e.getNodes(),r=n.indexOf(t);if(r!==-1&&n.splice(r,1),n.length===0){let n=t.getGraph().getLayers(),r=n.indexOf(e);r!==-1&&n.splice(r,1)}}}}function im(e){for(let t of e.getLayers())for(let e of t.getNodes())om(e)}function am(e){om(e)}function om(e){let t=e.getMargin(),n=e.getProperty(Wt),r=e.getProperty(qt);if(n==null&&r==null)return;let i=e.getGraph()?.getProperty(et)??10,a=e.getGraph()?.getProperty(ot)??10,o=0;if(n!=null){let e=0;for(let t of n)e=Math.max(e,t.size.y),o+=t.size.x;o+=i*(n.length-1),t.top+=e+a}let s=0;if(r!=null){let e=0;for(let t of r)e=Math.max(e,t.size.y),s+=t.size.x;s+=i*(r.length-1),t.bottom+=e+a}let c=Math.max(o,s);if(c>e.size.x){let n=(c-e.size.x)/2;t.left=Math.max(t.left,n),t.right=Math.max(t.right,n)}}function sm(e){for(let t of e.getLayers()){let e=[];for(let n of t.getNodes()){let t=n.getProperty(Wt),r=n.getProperty(qt);(t!=null||r!=null)&&(cm(n,t??null,r??null),t!=null&&e.push(...t),r!=null&&e.push(...r))}for(let n of e)t.getNodes().includes(n)||t.getNodes().push(n)}}function cm(e,t,n){let r=e.position,i=e.size,a=e.getMargin(),o=e.getGraph()?.getProperty(et)??10;if(t!=null){let n=o*(t.length-1),s=0;for(let e of t)n+=e.size.x,s=Math.max(s,e.size.y);let c=r.x-(n-i.x)/2,l=r.y-a.top+s,u=i.x/(t.length+1),d=u;for(let n of t){n.position.x=c,n.position.y=l-n.size.y,c+=n.size.x+o;let t=lm(n);t!==null&&(t.getPosition().x=n.size.x/2-t.getAnchor().x,t.getPosition().y=n.size.y);let r=n.getProperty(ve);r!=null&&r.getDegree()===1&&(r.getPosition().x=d-r.getAnchor().x,r.getPosition().y=0,r.setNode(e)),d+=u}}if(n!=null){let t=o*(n.length-1),s=0;for(let e of n)t+=e.size.x,s=Math.max(s,e.size.y);let c=r.x-(t-i.x)/2,l=r.y+i.y+a.bottom-s,u=i.x/(n.length+1),d=u;for(let t of n){t.position.x=c,t.position.y=l,c+=t.size.x+o;let n=lm(t);n!==null&&(n.getPosition().x=t.size.x/2-n.getAnchor().x,n.getPosition().y=0);let r=t.getProperty(ve);r!=null&&r.getDegree()===1&&(r.getPosition().x=d-r.getAnchor().x,r.getPosition().y=i.y,r.setNode(e)),d+=u}}}function lm(e){let t=e.getProperty(ve);for(let n of e.getPorts()){for(let e of n.getOutgoingEdges())return t!=null&&e.setTarget(t),n;for(let e of n.getIncomingEdges())return t!=null&&e.setSource(t),n}return null}function Q(e){let t=e.x;e.x=e.y,e.y=t}function um(e,t){e.x=t-e.x}function dm(e,t){e.y=t-e.y}function fm(e){let t=e.top,n=e.bottom,r=e.left,i=e.right;e.top=r,e.bottom=i,e.left=t,e.right=n}function pm(e){let t=e.left;e.left=e.right,e.right=t}function mm(e){let t=e.top;e.top=e.bottom,e.bottom=t}function hm(e){return e===`EAST`?`WEST`:e===`WEST`?`EAST`:e}function gm(e){return e===`NORTH`?`SOUTH`:e===`SOUTH`?`NORTH`:e}function _m(e){switch(e){case`NORTH`:return`WEST`;case`WEST`:return`NORTH`;case`SOUTH`:return`EAST`;case`EAST`:return`SOUTH`;default:return`UNDEFINED`}}function vm(e){let t=e.getProperty(Fe);t!=null&&e.setProperty(Fe,-t)}function ym(e){switch(e.getLayerConstraint()){case`FIRST`:e.setLayerConstraint(`LAST`);break;case`FIRST_SEPARATE`:e.setLayerConstraint(`LAST_SEPARATE`);break;case`LAST`:e.setLayerConstraint(`FIRST`);break;case`LAST_SEPARATE`:e.setLayerConstraint(`FIRST_SEPARATE`)}}function bm(e){switch(e.getInLayerConstraint()){case`TOP`:e.setInLayerConstraint(`BOTTOM`);break;case`BOTTOM`:e.setInLayerConstraint(`TOP`)}}function xm(e){let t=e.getLayerConstraint(),n=e.getInLayerConstraint();t===`FIRST_SEPARATE`?(e.setLayerConstraint(`NONE`),e.setInLayerConstraint(`TOP`)):t===`LAST_SEPARATE`?(e.setLayerConstraint(`NONE`),e.setInLayerConstraint(`BOTTOM`)):n===`TOP`?(e.setLayerConstraint(`FIRST_SEPARATE`),e.setInLayerConstraint(`NONE`)):n===`BOTTOM`&&(e.setLayerConstraint(`LAST_SEPARATE`),e.setInLayerConstraint(`NONE`))}function Sm(e){return Array.isArray(e)?[...e]:String(e??``).replace(/[\[\]]/g,``).split(/[\s,]+/).filter(Boolean)}function Cm(e){let t=[...e],n=t.indexOf(`H_LEFT`),r=t.indexOf(`H_RIGHT`);return n>=0?t[n]=`H_RIGHT`:r>=0&&(t[r]=`H_LEFT`),t}function wm(e){let t=[...e],n=t.indexOf(`V_TOP`),r=t.indexOf(`V_BOTTOM`);return n>=0?t[n]=`V_BOTTOM`:r>=0&&(t[r]=`V_TOP`),t}function Tm(e){if(e.length===0)return e;let t=[];return e.includes(`INSIDE`)?t.push(`INSIDE`):t.push(`OUTSIDE`),e.includes(`H_PRIORITY`)||t.push(`H_PRIORITY`),e.includes(`H_LEFT`)?t.push(`V_TOP`):e.includes(`H_CENTER`)?t.push(`V_CENTER`):e.includes(`H_RIGHT`)&&t.push(`V_BOTTOM`),e.includes(`V_TOP`)?t.push(`H_LEFT`):e.includes(`V_CENTER`)?t.push(`H_CENTER`):e.includes(`V_BOTTOM`)&&t.push(`H_RIGHT`),t}function Em(e){return e.join(`, `)}var Dm=class{mode;constructor(e){this.mode=e}process(e){let t=[...e.getLayerlessNodes()];for(let n of e.getLayers())t.push(...n.getNodes());let n=e.getProperty(S),r=e.getProperty(oe)===`READING_DIRECTION`,i=this.mode===`TO_INPUT_DIRECTION`;if(r)switch(n){case`LEFT`:this.mirrorAllX(e,t);break;case`DOWN`:this.transposeAll(e,t);break;case`UP`:i?(this.mirrorAllY(e,t),this.transposeAll(e,t)):(this.transposeAll(e,t),this.mirrorAllY(e,t))}else if(i)switch(n){case`LEFT`:this.mirrorAllX(e,t),this.mirrorAllY(e,t);break;case`DOWN`:this.mirrorAllX(e,t),this.transposeAll(e,t);break;case`UP`:this.transposeAll(e,t),this.mirrorAllX(e,t)}else switch(n){case`LEFT`:this.mirrorAllX(e,t),this.mirrorAllY(e,t);break;case`DOWN`:this.transposeAll(e,t),this.mirrorAllX(e,t);break;case`UP`:this.mirrorAllX(e,t),this.transposeAll(e,t)}}mirrorAllX(e,t){e.hasProperty(Nt)&&pm(e.getProperty(Nt));let n=0;if(e.getSize().x===0)for(let e of t)n=Math.max(n,e.position.x+e.size.x+e.getMargin().right);else n=e.getSize().x-e.getOffset().x;n-=e.getOffset().x;for(let e of t){um(e.position,n-e.size.x),pm(e.getPadding()),this.mirrorLabelPlacementX(e),this.mirrorPositionX(e,n),this.mirrorAlignmentX(e);let t=e.size;for(let r of e.getPorts()){um(r.getPosition(),t.x-r.getSize().x),um(r.getAnchor(),r.getSize().x),r.setSideInferred(hm(r.getSide())),vm(r);for(let e of r.getOutgoingEdges()){for(let t of e.getBendPoints())um(t,n);let t=e.getProperty(R);if(t!=null)for(let e of t)um(e,n);for(let t of e.getLabels())um(t.position,n-t.size.x)}for(let e of r.getLabels())um(e.position,r.getSize().x-e.size.x)}e.getType()===`EXTERNAL_PORT`&&(e.setProperty(j,hm(e.getProperty(j))),ym(e));for(let n of e.getLabels())this.mirrorLabelPlacementXOn(n),um(n.position,t.x-n.size.x)}}mirrorAllY(e,t){e.hasProperty(Nt)&&mm(e.getProperty(Nt));let n=0;if(e.getSize().y===0)for(let e of t)n=Math.max(n,e.position.y+e.size.y+e.getMargin().bottom);else n=e.getSize().y-e.getOffset().y;n-=e.getOffset().y;for(let e of t){dm(e.position,n-e.size.y),mm(e.getPadding()),this.mirrorLabelPlacementY(e),this.mirrorPositionY(e,n),this.mirrorAlignmentY(e);let t=e.size;for(let r of e.getPorts()){dm(r.getPosition(),t.y-r.getSize().y),dm(r.getAnchor(),r.getSize().y),r.setSideInferred(gm(r.getSide())),vm(r);for(let e of r.getOutgoingEdges()){for(let t of e.getBendPoints())dm(t,n);let t=e.getProperty(R);if(t!=null)for(let e of t)dm(e,n);for(let t of e.getLabels())dm(t.position,n-t.size.y)}for(let e of r.getLabels())dm(e.position,r.getSize().y-e.size.y)}e.getType()===`EXTERNAL_PORT`&&(e.setProperty(j,gm(e.getProperty(j))),bm(e));for(let n of e.getLabels())this.mirrorLabelPlacementYOn(n),dm(n.position,t.y-n.size.y)}}transposeAll(e,t){Q(e.getOffset()),Q(e.getSize()),fm(e.getPadding()),e.hasProperty(Nt)&&fm(e.getProperty(Nt));for(let e of t){Q(e.position),Q(e.size),fm(e.getPadding()),this.transposeLabelPlacement(e),this.transposeProperties(e);for(let t of e.getPorts()){Q(t.getPosition()),Q(t.getAnchor()),Q(t.getSize()),t.setSideInferred(_m(t.getSide())),vm(t);for(let e of t.getOutgoingEdges()){for(let t of e.getBendPoints())Q(t);let t=e.getProperty(R);if(t!=null)for(let e of t)Q(e);for(let t of e.getLabels())Q(t.position),Q(t.size)}for(let e of t.getLabels())Q(e.position),Q(e.size)}e.getType()===`EXTERNAL_PORT`&&(e.setProperty(j,_m(e.getProperty(j))),xm(e));for(let t of e.getLabels())this.transposeLabelPlacementOn(t),Q(t.size),Q(t.position)}}mirrorLabelPlacementX(e){if(!e.hasProperty(N))return;let t=Sm(e.getProperty(N));t.length!==0&&e.setProperty(N,Cm(t))}mirrorLabelPlacementY(e){if(!e.hasProperty(N))return;let t=Sm(e.getProperty(N));t.length!==0&&e.setProperty(N,wm(t))}transposeLabelPlacement(e){if(!e.hasProperty(N))return;let t=Sm(e.getProperty(N));e.setProperty(N,Tm(t))}mirrorLabelPlacementXOn(e){if(e.placement===void 0||e.placement===``)return;let t=Sm(e.placement);t.length!==0&&(e.placement=Em(Cm(t)))}mirrorLabelPlacementYOn(e){if(e.placement===void 0||e.placement===``)return;let t=Sm(e.placement);t.length!==0&&(e.placement=Em(wm(t)))}transposeLabelPlacementOn(e){if(e.placement===void 0||e.placement===``)return;let t=Sm(e.placement);t.length!==0&&(e.placement=Em(Tm(t)))}mirrorPositionX(e,t){if(!e.hasProperty(ae))return;let n=e.getProperty(ae);n&&um(n,t-e.size.x)}mirrorPositionY(e,t){if(!e.hasProperty(ae))return;let n=e.getProperty(ae);n&&dm(n,t-e.size.y)}mirrorAlignmentX(e){switch(e.getProperty(z)){case`LEFT`:e.setProperty(z,`RIGHT`);break;case`RIGHT`:e.setProperty(z,`LEFT`)}}mirrorAlignmentY(e){switch(e.getProperty(z)){case`TOP`:e.setProperty(z,`BOTTOM`);break;case`BOTTOM`:e.setProperty(z,`TOP`)}}transposeProperties(e){let t=e.getProperty(x);e.setProperty(x,{x:t.y,y:t.x});let n=e.getProperty(`org.eclipse.elk.contentAlignment`)??[];if(n.length>0){let t=n.map(e=>e===`H_CENTER`?`V_CENTER`:e===`V_CENTER`?`H_CENTER`:e===`H_LEFT`?`V_TOP`:e===`H_RIGHT`?`V_BOTTOM`:e===`V_TOP`?`H_LEFT`:e===`V_BOTTOM`?`H_RIGHT`:e);e.setProperty(`org.eclipse.elk.contentAlignment`,t)}switch(e.getProperty(z)){case`LEFT`:e.setProperty(z,`TOP`);break;case`RIGHT`:e.setProperty(z,`BOTTOM`);break;case`TOP`:e.setProperty(z,`LEFT`);break;case`BOTTOM`:e.setProperty(z,`RIGHT`)}if(e.hasProperty(ae)){let t=e.getProperty(ae);if(t){let e=t.x;t.x=t.y,t.y=e}}}transposeEdgeLabelPlacement(e){switch(e.getProperty(Jn)){case`ALWAYS_UP`:e.setProperty(Jn,`ALWAYS_DOWN`);break;case`ALWAYS_DOWN`:e.setProperty(Jn,`ALWAYS_UP`);break;case`DIRECTION_UP`:e.setProperty(Jn,`DIRECTION_DOWN`);break;case`DIRECTION_DOWN`:e.setProperty(Jn,`DIRECTION_UP`);break;case`SMART_UP`:e.setProperty(Jn,`SMART_DOWN`);break;case`SMART_DOWN`:e.setProperty(Jn,`SMART_UP`)}}},Om=class{horizontalLayoutMode;gap;horizontalAlignment=`CENTER`;verticalAlignment=`CENTER`;entries=[];minimumContentAreaSize={x:0,y:0};cellRectangle={x:0,y:0,width:0,height:0};constructor(e,t){this.gap=e,this.horizontalLayoutMode=t}getHorizontalAlignment(){return this.horizontalAlignment}setHorizontalAlignment(e){return this.horizontalAlignment=e,this}getVerticalAlignment(){return this.verticalAlignment}setVerticalAlignment(e){return this.verticalAlignment=e,this}getEntries(){return this.entries}hasLabels(){return this.entries.length>0}addLabel(e,t){this.entries.push({label:e,edge:t});let n=e.size;this.horizontalLayoutMode?(this.minimumContentAreaSize.x=Math.max(this.minimumContentAreaSize.x,n.x),this.minimumContentAreaSize.y+=n.y,this.entries.length>1&&(this.minimumContentAreaSize.y+=this.gap)):(this.minimumContentAreaSize.x+=n.x,this.minimumContentAreaSize.y=Math.max(this.minimumContentAreaSize.y,n.y),this.entries.length>1&&(this.minimumContentAreaSize.x+=this.gap))}getMinimumWidth(){return this.minimumContentAreaSize.x}getMinimumHeight(){return this.minimumContentAreaSize.y}applyLabelLayout(){this.horizontalLayoutMode?this.applyHorizontalModeLabelLayout():this.applyVerticalModeLabelLayout()}applyHorizontalModeLabelLayout(){let e=this.cellRectangle,t=e.y;this.verticalAlignment===`CENTER`?t+=(e.height-this.minimumContentAreaSize.y)/2:this.verticalAlignment===`BOTTOM`&&(t+=e.height-this.minimumContentAreaSize.y);for(let n of this.entries){let r=n.label.size;switch(n.label.position.y=t,t+=r.y+this.gap,this.horizontalAlignment){case`LEFT`:n.label.position.x=e.x;break;case`CENTER`:n.label.position.x=e.x+(e.width-r.x)/2;break;case`RIGHT`:n.label.position.x=e.x+e.width-r.x}}}applyVerticalModeLabelLayout(){let e=this.cellRectangle,t=e.x;this.horizontalAlignment===`CENTER`?t+=(e.width-this.minimumContentAreaSize.x)/2:this.horizontalAlignment===`RIGHT`&&(t+=e.width-this.minimumContentAreaSize.x);for(let n of this.entries){let r=n.label.size;switch(n.label.position.x=t,t+=r.x+this.gap,this.verticalAlignment){case`TOP`:n.label.position.y=e.y;break;case`CENTER`:n.label.position.y=e.y+(e.height-r.y)/2;break;case`BOTTOM`:n.label.position.y=e.y+e.height-r.y}}}},km=class e{static DEFAULT_GAP=5;overlapRemovalDirection;gapVertical=e.DEFAULT_GAP;gapHorizontal=e.DEFAULT_GAP;startCoordinate=0;rectangleNodes=[];constructor(e){this.overlapRemovalDirection=e}static createForDirection(t){return new e(t)}withGap(e,t){return this.gapHorizontal=e,this.gapVertical=t,this}withStartCoordinate(e){return this.startCoordinate=e,this}getVerticalGap(){return this.gapVertical}getRectangleNodes(){return this.rectangleNodes}addRectangle(e){return this.rectangleNodes.push({originalRectangle:e,rectangle:this.importRectangle(e),overlappingNodes:[]}),this}importRectangle(e){switch(this.overlapRemovalDirection){case`UP`:case`DOWN`:return e;case`LEFT`:case`RIGHT`:return{x:e.y,y:0,width:e.height,height:e.width};default:throw Error(`unsupported direction`)}}exportRectangle(e){let t=e.rectangle,n=e.originalRectangle;switch(this.overlapRemovalDirection){case`UP`:n.y=this.startCoordinate-t.height-t.y;break;case`DOWN`:n.y+=this.startCoordinate;break;case`LEFT`:n.x=this.startCoordinate-t.height-t.y;break;case`RIGHT`:n.x=this.startCoordinate+t.y}}removeOverlaps(){this.rectangleNodes.sort((e,t)=>e.rectangle.x-t.rectangle.x),this.computeOverlaps();let e=this.greedyRemoveOverlaps();for(let e of this.rectangleNodes)this.exportRectangle(e);return e}computeOverlaps(){let e=[];for(let t of this.rectangleNodes){let n=t.rectangle.x;for(;e.length>0;){let t=e[0];if(t.rectangle.x+t.rectangle.width<n)e.shift();else break}for(let n of e)n.overlappingNodes.push(t),t.overlappingNodes.push(n);let r=t.rectangle.x+t.rectangle.width,i=e.findIndex(e=>e.rectangle.x+e.rectangle.width>r);i===-1&&(i=e.length),e.splice(i,0,t)}}greedyRemoveOverlaps(){let e=this.gapVertical,t=/* @__PURE__ */ new Set,n=0;for(let r of this.rectangleNodes){let i=0;r.overlappingNodes.sort((e,t)=>e.rectangle.y-t.rectangle.y);for(let n of r.overlappingNodes)if(t.has(n)){let t=r.rectangle,a=n.rectangle;i<a.y+a.height+e&&i+t.height+e>a.y&&(i=a.y+a.height+e)}r.rectangle.y=i,t.add(r),n=Math.max(n,r.rectangle.y+r.rectangle.height)}return n}};function Am(e){let t=e.getProperty(Tn),n=e.getProperty(dt),r=e.getProperty(S),i=r===`DOWN`||r===`UP`;for(let r of e.getLayers())for(let e of r.getNodes())jm(e,t,n,i)}function jm(e,t,n,r){let i=e.getPorts().length,a=Array(i);for(let t=0;t<i;t++){let i=e.getPorts()[t];i.id=t,a[t]=Mm(Nm(i),n,r)}Fm(e,a,n,t,r);let o=/* @__PURE__ */ new Map;for(let t=0;t<a.length;t++){let n=a[t];n!==null&&o.set(e.getPorts()[t],n)}o.size>0&&(e.setProperty(Ne,o),zm(e,a))}function Mm(e,t,n){if(e===null||e.length===0)return null;let r=new Om(t,!n);for(let t of e)r.addLabel(t.label,t.edge);return r.cellRectangle.height=r.getMinimumHeight(),r.cellRectangle.width=r.getMinimumWidth(),r}function Nm(e){let t=[],n=Pm(e,t),r=e.getProperty(M);if(r!=null)for(let i of r.getPorts())i.getProperty(L)===e&&(n=Math.max(n,Pm(i,t)));return t.length>0&&e.setProperty(ln,n),n===-1?null:t}function Pm(e,t){let n=-1,r=[];for(let i of e.getConnectedEdges()){if(n=Math.max(n,i.getProperty(Ye)),i.getSource()===e)for(let e of i.getLabels())e.placement===`TAIL`&&r.push({label:e,edge:i});else for(let e of i.getLabels())e.placement===`HEAD`&&r.push({label:e,edge:i});t.push(...r),r.length=0}return n}function Fm(e,t,n,r,i){for(let n of e.getPorts()){let e=t[n.id];e!==null&&Im(n,e,r)}i?(Lm(e,t,`EAST`,2*n,r),Lm(e,t,`WEST`,2*n,r)):(Lm(e,t,`NORTH`,2*n,r),Lm(e,t,`SOUTH`,2*n,r))}function Im(e,t,n){let r=t.cellRectangle,i=e.getNode().getSize(),a=e.getNode().getMargin(),o=e.getPosition(),s={x:o.x+e.getAnchor().x,y:o.y+e.getAnchor().y};switch(e.getSide()){case`NORTH`:t.setVerticalAlignment(`BOTTOM`),r.y=-a.top-n-r.height,Vm(t)===`ABOVE`?(t.setHorizontalAlignment(`RIGHT`),r.x=s.x-Um(e)-n-r.width):(t.setHorizontalAlignment(`LEFT`),r.x=s.x+Um(e)+n);break;case`EAST`:t.setHorizontalAlignment(`LEFT`),r.x=i.x+a.right+n,Vm(t)===`ABOVE`?(t.setVerticalAlignment(`BOTTOM`),r.y=s.y-Um(e)-n-r.height):(t.setVerticalAlignment(`TOP`),r.y=s.y+Um(e)+n);break;case`SOUTH`:t.setVerticalAlignment(`TOP`),r.y=i.y+a.bottom+n,Vm(t)===`ABOVE`?(t.setHorizontalAlignment(`RIGHT`),r.x=s.x-Um(e)-n-r.width):(t.setHorizontalAlignment(`LEFT`),r.x=s.x+Um(e)+n);break;case`WEST`:t.setHorizontalAlignment(`RIGHT`),r.x=-a.left-n-r.width,Vm(t)===`ABOVE`?(t.setVerticalAlignment(`BOTTOM`),r.y=s.y-Um(e)-n-r.height):(t.setVerticalAlignment(`TOP`),r.y=s.y+Um(e)+n)}}function Lm(e,t,n,r,i){let a=km.createForDirection(Hm(n)).withGap(r,r).withStartCoordinate(Rm(e,n,i));for(let r of e.getPorts(n)){let e=t[r.id];e!==null&&a.addRectangle(e.cellRectangle)}a.removeOverlaps()}function Rm(e,t,n){let r=e.getSize(),i=e.getMargin();switch(t){case`NORTH`:return-i.top-n;case`SOUTH`:return r.y+i.bottom+n;case`EAST`:return r.x+i.right+n;case`WEST`:return-i.left-n;default:return 0}}function zm(e,t){let n=e.getMargin(),r=e.getSize(),i={x:-n.left,y:-n.top,width:n.left+r.x+n.right,height:n.top+r.y+n.bottom};for(let e of t)e!==null&&(i=Bm(i,e.cellRectangle));n.left=-i.x,n.top=-i.y,n.right=i.width-n.left-r.x,n.bottom=i.height-n.top-r.y}function Bm(e,t){let n=Math.min(e.x,t.x),r=Math.min(e.y,t.y),i=Math.max(e.x+e.width,t.x+t.width),a=Math.max(e.y+e.height,t.y+t.height);return{x:n,y:r,width:i-n,height:a-r}}function Vm(e){return`BELOW`}function Hm(e){switch(e){case`NORTH`:return`UP`;case`SOUTH`:return`DOWN`;case`EAST`:return`RIGHT`;case`WEST`:return`LEFT`;default:return`UP`}}function Um(e){return e.getProperty(ln)}function Wm(e){switch(e.getProperty(Jn)){case`ALWAYS_UP`:Km(e,`ABOVE`);break;case`ALWAYS_DOWN`:Km(e,`BELOW`);break;case`DIRECTION_UP`:qm(e,`ABOVE`);break;case`DIRECTION_DOWN`:qm(e,`BELOW`);break;case`SMART_UP`:Jm(e,`ABOVE`),Gm(e,`ABOVE`);break;case`SMART_DOWN`:Jm(e,`BELOW`),Gm(e,`BELOW`)}}function Gm(e,t){let n=e=>{for(let n of e.getOutgoingEdges())for(let e of n.getLabels()){let n=e;(n.side===void 0||n.side===``)&&(n.side=t)}};for(let t of e.getLayers())for(let e of t.getNodes())n(e);for(let t of e.getLayerlessNodes())n(t)}function Km(e,t){for(let n of e.getLayers())for(let e of n.getNodes()){e.getType()===`LABEL`&&nh(e,t);for(let n of e.getOutgoingEdges())rh(n,t)}}function qm(e,t){let n=t===`ABOVE`?`BELOW`:`ABOVE`;for(let r of e.getLayers())for(let e of r.getNodes()){e.getType()===`LABEL`&&nh(e,ih(e)?t:n);for(let r of e.getOutgoingEdges())rh(r,ih(r)?t:n)}}function Jm(e,t){let n=[];for(let r of e.getLayers()){let e=!0,i=0;for(let a of r.getNodes())switch(a.getType()){case`LABEL`:i++,n.push(a);break;case`LONG_EDGE`:n.push(a);break;case`NORMAL`:Ym(a,t),n.length>0&&Qm(n,i,e,!1,t),e=!1,i=0;break;default:n.length>0&&Qm(n,i,e,!1,t),e=!1,i=0}n.length>0&&Qm(n,i,e,!0,t)}}function Ym(e,t){let n=[],r=null;for(let i of e.getPorts()){i.getSide()!==r&&(n.length>0&&Xm(n,r,t),n.length=0,r=i.getSide());let e=Nm(i);e!==null&&n.push(e)}n.length>0&&Xm(n,r,t)}function Xm(e,t,n){if(e.length===2)t===`NORTH`||t===`EAST`?(Zm(e[0],`ABOVE`),Zm(e[1],`BELOW`)):(Zm(e[0],`BELOW`),Zm(e[1],`ABOVE`));else for(let t of e)Zm(t,n)}function Zm(e,t){for(let n of e)n.label.side=t}function Qm(e,t,n,r,i){n&&(!r||e.length>1)&&t===1&&e[0].getType()===`LABEL`?nh(e[0],`ABOVE`):r&&(!n||e.length>1)&&t===1&&e[e.length-1].getType()===`LABEL`?nh(e[e.length-1],`BELOW`):e.length===2?(nh(e[0],`ABOVE`),nh(e[1],`BELOW`)):$m(e,t,i),e.length=0}function $m(e,t,n){let r=[],i=null,a=null;for(let t of e){let e=th(t,!0),o=th(t,!1);(i!==e||a!==o)&&(eh(r,n),i=e,a=o),r.push(t)}eh(r,n)}function eh(e,t){if(e.length!==0){if(e.length===2)nh(e[0],`ABOVE`),nh(e[1],`BELOW`);else for(let n of e)nh(n,t);e.length=0}}function th(e,t){let n=e.getProperty(t?B:I);return n==null?null:n.getNode()}function nh(e,t){if(e.getType()!==`LABEL`)return;let n=t;if(e.setProperty(Tt,n),n!==`BELOW`){let t=e.getProperty(L)?.getProperty(Ye)??0,r=0;if(n===`ABOVE`)r=e.size.y-Math.ceil(t/2);else if(n===`INLINE`){let n=e.getGraph()?.getProperty(Tn)??0;r=Math.ceil(e.size.y-n-t)/2,e.size.y-=n,e.size.y-=t}for(let t of e.getPorts())t.getPosition().y=r}}function rh(e,t){for(let n of e.getLabels())n.side=t}function ih(e){if(e instanceof V){let t=e.getIncomingEdges()[0],n=e.getOutgoingEdges()[0];return!!(t&&ih(t)||n&&ih(n))}return!e.getProperty(A)}function ah(e){for(let t of e.getLayers())for(let e of t.getNodes())e.getType()===`NORMAL`&&oh(e)}function oh(e){let t=!1,n=e.getProperty(Ne);if(n==null||!(n instanceof Map))return;let r=n;for(let n of e.getPorts())sh(n)&&(t||=(ch(e.getGraph()),!0),lh(n,r.get(n)))}function sh(e){let t=0;for(let n of e.getIncomingEdges())n.getLabels().some(e=>e.placement===`HEAD`)&&t++;for(let n of e.getOutgoingEdges())n.getLabels().some(e=>e.placement===`TAIL`)&&t++;return t>=2}function ch(e){if(e===null)return;let t=0;for(let n of e.getLayers())for(let e of n.getNodes()){e.id=t++;for(let n of e.getPorts())n.id=t++}}function lh(e,t){if(t===void 0)return;let n=uh(t);n.sort(fh);let r=t.getEntries();r.length=0;for(let e of n)r.push(...e.entries)}function uh(e){let t=/* @__PURE__ */ new Map;for(let n of e.getEntries()){let e=n.edge,r=t.get(e);r===void 0&&(r=new dh(e),t.set(e,r)),r.entries.push(n)}return[...t.values()]}var dh=class{edge;entries=[];constructor(e){this.edge=e}};const fh=(e,t)=>{let n=e.edge,r=t.edge;if(n===null||r===null)return 0;let i=n.getSource(),a=r.getSource();if(i!==null&&a!==null){let e=i.id-a.id;if(e!==0)return e}let o=n.getTarget(),s=r.getTarget();if(o!==null&&s!==null){let e=o.getNode(),t=s.getNode(),n=(e?.id??0)-(t?.id??0);return n===0?s.id-o.id:n}return 0};function ph(e){for(let t of e.getLayers())for(let e of t.getNodes())(e.getType()===`NORMAL`||e.getType()===`EXTERNAL_PORT`)&&e.hasProperty(Ne)&&mh(e)}function mh(e){let t=e.getProperty(Ne);if(t==null)return;let n=e.getPosition();for(let e of t.values()){let t=e,r=t.cellRectangle;r.x+=n.x,r.y+=n.y,t.applyLabelLayout()}e.setProperty(Ne,null)}var hh=class{targetNodeModelOrder;portModelOrder;previousLayer;graph;strategy;biggerThan=/* @__PURE__ */ new Map;smallerThan=/* @__PURE__ */ new Map;constructor(e,t,n,r,i){this.graph=e,this.previousLayer=t,this.strategy=n,this.targetNodeModelOrder=r,this.portModelOrder=i}compare(e,t){let n=e,r=t;if(!this.biggerThan.has(n))this.biggerThan.set(n,/* @__PURE__ */ new Set);else if(this.biggerThan.get(n).has(r))return 1;if(!this.biggerThan.has(r))this.biggerThan.set(r,/* @__PURE__ */ new Set);else if(this.biggerThan.get(r).has(n))return-1;if(!this.smallerThan.has(n))this.smallerThan.set(n,/* @__PURE__ */ new Set);else if(this.smallerThan.get(n).has(r))return-1;if(!this.smallerThan.has(r))this.smallerThan.set(r,/* @__PURE__ */ new Set);else if(this.biggerThan.get(r).has(n))return 1;if(n.getSide()!==r.getSide()){let e=vh(n.getSide())-vh(r.getSide());return e>0?this.updateBiggerAndSmallerAssociations(n,r,1):this.updateBiggerAndSmallerAssociations(r,n,1),e}let i=1;if(n.getIncomingEdges().length>0&&r.getIncomingEdges().length>0){(n.getSide()===`WEST`&&r.getSide()===`WEST`||n.getSide()===`NORTH`&&r.getSide()===`NORTH`||n.getSide()===`SOUTH`&&r.getSide()===`SOUTH`)&&(i=-i);let e=n.getIncomingEdges()[0].getSource(),t=r.getIncomingEdges()[0].getSource(),a=e.getNode(),o=t.getNode();if(a===o)for(let o of a.getPorts()){if(e===o)return this.updateBiggerAndSmallerAssociations(r,n,i),-i;if(t===o)return this.updateBiggerAndSmallerAssociations(n,r,i),i}if(a.getType()===`LONG_EDGE`&&o.getType()===`LONG_EDGE`&&a.getLayer().id===o.getLayer().id&&a.getLayer().id===n.getNode().getLayer().id){let e=this.checkReferenceLayer(a.getLayer().getNodes(),a,o);if(e!==0)return n.getSide()===`EAST`&&r.getSide()===`EAST`&&(i=-i),e>0?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}let s=this.checkReferenceLayer(this.previousLayer,a,o);if(s!==0)return s>0?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i);if(this.portModelOrder){let e=this.checkPortModelOrder(n,r);if(e!==0)return e>0?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}}if(n.getOutgoingEdges().length>0&&r.getOutgoingEdges().length>0){(n.getSide()===`WEST`&&r.getSide()===`WEST`||n.getSide()===`SOUTH`&&r.getSide()===`SOUTH`)&&(i=-i);let e=n.getProperty(ft),t=r.getProperty(ft);if(this.strategy===`PREFER_NODES`&&e!=null&&t!=null&&e.hasProperty(F)&&t.hasProperty(F))return Zi(e,t,this.graph,this.graph.getProperty(`org.eclipse.elk.layered.internal.maxModelOrderNodes`))>Zi(t,e,this.graph,this.graph.getProperty(`org.eclipse.elk.layered.internal.maxModelOrderNodes`))?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i);if(this.portModelOrder){let e=this.checkPortModelOrder(n,r);if(e!==0)return e>0?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}let a=0,o=0;return n.getOutgoingEdges()[0].hasProperty(F)&&(a=Zi(n.getOutgoingEdges()[0],r.getOutgoingEdges()[0],this.graph,n.getOutgoingEdges().length+n.getIncomingEdges().length)),r.getOutgoingEdges()[0].hasProperty(F)&&(o=Zi(r.getOutgoingEdges()[0],n.getOutgoingEdges()[0],this.graph,r.getOutgoingEdges().length+r.getIncomingEdges().length)),e!=null&&e===t||this.targetNodeModelOrder!=null&&(this.targetNodeModelOrder.has(e)&&(a=this.targetNodeModelOrder.get(e)),this.targetNodeModelOrder.has(t)&&(o=this.targetNodeModelOrder.get(t))),a>o?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}if(n.getIncomingEdges().length>0&&r.getOutgoingEdges().length>0)return this.updateBiggerAndSmallerAssociations(n,r,i),1;if(n.getOutgoingEdges().length>0&&r.getIncomingEdges().length>0)return this.updateBiggerAndSmallerAssociations(r,n,i),-1;if(n.hasProperty(F)&&r.hasProperty(F)){let e=n.getNode().getPorts().length,t=Zi(n,r,this.graph,e),a=Zi(r,n,this.graph,e);return(n.getSide()===`WEST`&&r.getSide()===`WEST`||n.getSide()===`SOUTH`&&r.getSide()===`SOUTH`)&&(i=-i),t>a?(this.updateBiggerAndSmallerAssociations(n,r,i),i):(this.updateBiggerAndSmallerAssociations(r,n,i),-i)}return this.updateBiggerAndSmallerAssociations(r,n,i),-i}checkPortModelOrder(e,t){let n=e.getNode().getPorts().length;return e.hasProperty(F)&&t.hasProperty(F)?Zi(e,t,this.graph,n)-Zi(t,e,this.graph,n):0}updateBiggerAndSmallerAssociations(e,t,n){let r=e,i=t;n<0&&(r=t,i=e);let a=this.biggerThan.get(r),o=this.biggerThan.get(i),s=this.smallerThan.get(r),c=this.smallerThan.get(i);a.add(i),c.add(r);for(let e of o){a.add(e),this.smallerThan.get(e).add(r);for(let t of s)this.smallerThan.get(e).add(t)}for(let e of s){c.add(e),this.biggerThan.get(e).add(i);for(let t of o)this.biggerThan.get(e).add(t)}}checkReferenceLayer(e,t,n){for(let r of e){if(r===t)return-1;if(r===n)return 1}return 0}clearTransitiveOrdering(){this.biggerThan=/* @__PURE__ */ new Map,this.smallerThan=/* @__PURE__ */ new Map}},gh=class{previousLayer;graph;orderingStrategy;groupOrderStrategy;biggerThan=/* @__PURE__ */ new Map;smallerThan=/* @__PURE__ */ new Map;longEdgeNodeOrder;beforePorts;constructor(e,t,n,r,i,a){this.graph=e,this.previousLayer=t,this.orderingStrategy=n,this.groupOrderStrategy=i,this.longEdgeNodeOrder=r,this.beforePorts=a}compare(e,t){if(!this.biggerThan.has(e))this.biggerThan.set(e,/* @__PURE__ */ new Set);else if(this.biggerThan.get(e).has(t))return 1;if(!this.biggerThan.has(t))this.biggerThan.set(t,/* @__PURE__ */ new Set);else if(this.biggerThan.get(t).has(e))return-1;if(!this.smallerThan.has(e))this.smallerThan.set(e,/* @__PURE__ */ new Set);else if(this.smallerThan.get(e).has(t))return-1;if(!this.smallerThan.has(t))this.smallerThan.set(t,/* @__PURE__ */ new Set);else if(this.biggerThan.get(t).has(e))return 1;if(this.orderingStrategy===`PREFER_EDGES`||!e.hasProperty(F)||!t.hasProperty(F)){let n=null;for(let t of e.getPorts())if(t.getIncomingEdges().length>0&&t.getIncomingEdges()[0].getSource().getNode().getLayer().id===e.getLayer().id-1){n=t.getIncomingEdges()[0].getSource();break}let r=null;for(let e of t.getPorts())if(e.getIncomingEdges()[0]?.getSource()?.getNode(),e.getIncomingEdges().length>0&&e.getIncomingEdges()[0].getSource().getNode().getLayer().id===t.getLayer().id-1){r=e.getIncomingEdges()[0].getSource();break}if(n!==null&&r!==null){let i=n.getNode(),a=r.getNode();if(i===a){for(let a of i.getPorts()){if(a===n)return this.updateBiggerAndSmallerAssociations(t,e),-1;if(a===r)return this.updateBiggerAndSmallerAssociations(e,t),1}return this.getModelOrderFromConnectedEdges(e)>this.getModelOrderFromConnectedEdges(t)?(this.updateBiggerAndSmallerAssociations(e,t),1):(this.updateBiggerAndSmallerAssociations(t,e),-1)}for(let n of this.previousLayer){if(n===i)return this.updateBiggerAndSmallerAssociations(t,e),-1;if(n===a)return this.updateBiggerAndSmallerAssociations(e,t),1}}if(n!==null&&r===null||n===null&&r!==null){let n=this.handleHelperDummyNodes(e,t);if(n!==0)return n>0?this.updateBiggerAndSmallerAssociations(e,t):this.updateBiggerAndSmallerAssociations(t,e),n;if(!e.hasProperty(F)||!t.hasProperty(F))return this.getModelOrderFromConnectedEdges(e)>this.getModelOrderFromConnectedEdges(t)?(this.updateBiggerAndSmallerAssociations(e,t),1):(this.updateBiggerAndSmallerAssociations(t,e),-1)}if(n===null&&r===null){let n=this.handleHelperDummyNodes(e,t);if(n!==0)return n>0?this.updateBiggerAndSmallerAssociations(e,t):this.updateBiggerAndSmallerAssociations(t,e),n}}return e.hasProperty(F)&&t.hasProperty(F)&&Zi(e,t,this.graph,this.graph.getProperty(xn))>Zi(t,e,this.graph,this.graph.getProperty(xn))?(this.updateBiggerAndSmallerAssociations(e,t),1):(this.updateBiggerAndSmallerAssociations(t,e),-1)}getModelOrderFromConnectedEdges(e){let t=e.getPorts().find(e=>e.getIncomingEdges().length>0);if(t!==void 0){let e=t.getIncomingEdges()[0];if(e!==void 0)return e.getProperty(F)}return _h(this.longEdgeNodeOrder)}updateBiggerAndSmallerAssociations(e,t){let n=this.biggerThan.get(e),r=this.biggerThan.get(t),i=this.smallerThan.get(e),a=this.smallerThan.get(t);n.add(t),a.add(e);for(let t of r){n.add(t),this.smallerThan.get(t).add(e);for(let e of i)this.smallerThan.get(t).add(e)}for(let e of i){a.add(e),this.biggerThan.get(e).add(t);for(let t of r)this.biggerThan.get(e).add(t)}}handleHelperDummyNodes(e,t){if(e.getType()===`LONG_EDGE`&&t.getType()===`NORMAL`){let n=this.getFirstIncomingSourcePortOfNode(e).getNode(),r=this.getFirstOutgoingTargetPortOfNode(e).getNode(),i=e.getLayer().id;return n.getLayer().id!==i&&r.getLayer().id!==i?0:n===t||r===t?(this.updateBiggerAndSmallerAssociations(e,t),1):this.compare(n,t)}if(e.getType()===`NORMAL`&&t.getType()===`LONG_EDGE`){let n=this.getFirstIncomingSourcePortOfNode(t).getNode(),r=this.getFirstOutgoingTargetPortOfNode(t).getNode(),i=e.getLayer().id;return n.getLayer().id!==i&&r.getLayer().id!==i?0:n===e||r===e?(this.updateBiggerAndSmallerAssociations(t,e),-1):this.compare(e,n)}if(e.getType()===`LONG_EDGE`&&t.getType()===`LONG_EDGE`){let n=this.getFirstIncomingSourcePortOfNode(e),r=this.getFirstOutgoingTargetPortOfNode(e),i=n.getNode(),a=r.getNode(),o=e.getLayer().id,s=!1,c=!1,l=this.getFirstIncomingSourcePortOfNode(t),u=this.getFirstOutgoingTargetPortOfNode(t),d=l.getNode(),f=u.getNode(),p=t.getLayer().id,m=!1,h=!1,g=e,_=t;if(i.getLayer().id===o?(s=!0,g=i):a.getLayer().id===o&&(c=!0,g=a),d.getLayer().id===p?(m=!0,_=d):f.getLayer().id===p&&(h=!0,_=f),g===_){if(this.beforePorts){if(s&&m)return new hh(this.graph,this.previousLayer,this.orderingStrategy,null,h).compare(n,l)>0?(this.updateBiggerAndSmallerAssociations(t,e),1):(this.updateBiggerAndSmallerAssociations(e,t),-1);if(s&&h)return this.updateBiggerAndSmallerAssociations(t,e),1;if(c&&m)return this.updateBiggerAndSmallerAssociations(e,t),-1;if(c&&h)return 0}else for(let r of g.getPorts()){if(n===r)return this.updateBiggerAndSmallerAssociations(t,e),-1;if(l===r)return this.updateBiggerAndSmallerAssociations(e,t),1}}return this.compare(g,_)}return 0}getFirstIncomingPortOfNode(e){return e.getPorts().find(e=>e.getIncomingEdges().length>0)}getFirstIncomingSourcePortOfNode(e){return this.getFirstIncomingPortOfNode(e).getIncomingEdges()[0].getSource()}getFirstOutgoingPortOfNode(e){return e.getPorts().find(e=>e.getOutgoingEdges().length>0)}getFirstOutgoingTargetPortOfNode(e){return this.getFirstOutgoingPortOfNode(e).getOutgoingEdges()[0].getTarget()}clearTransitiveOrdering(){this.biggerThan=/* @__PURE__ */ new Map,this.smallerThan=/* @__PURE__ */ new Map}};function _h(e){switch(e){case`DUMMY_NODE_OVER`:return 2**53-1;case`DUMMY_NODE_UNDER`:return-(2**53-1);default:return 0}}function vh(e){switch(e){case`UNDEFINED`:return 0;case`NORTH`:return 1;case`EAST`:return 2;case`SOUTH`:return 3;case`WEST`:return 4}}function yh(e){let t=0;for(let n of e.getLayers()){n.id=t;let r=t===0?0:t-1,i=e.getLayers()[r].getNodes(),a=new gh(e,i,e.getProperty(Ce),e.getProperty(ze),e.getProperty(Ie),!0);Sh(n.getNodes(),a);for(let t of n.getNodes()){let n=t.getProperty(O);if(n!==`FIXED_ORDER`&&n!==`FIXED_POS`){let n=new hh(e,i,e.getProperty(Ce),bh(t),e.getProperty(m));t.getPorts().sort((e,t)=>n.compare(e,t))}}a=new gh(e,i,e.getProperty(Ce),e.getProperty(ze),e.getProperty(Ie),!1),Sh(n.getNodes(),a),t++}}function bh(e){let t=/* @__PURE__ */ new Map;if(e.hasProperty(Jt))return e.getProperty(Jt);for(let n of e.getPorts()){if(n.getOutgoingEdges().length===0)continue;let e=xh(n);if(n.setProperty(ft,e),e!==null){let r=2**53-1;t.has(e)&&(r=t.get(e));let i=n.getOutgoingEdges()[0];i.getProperty(A)||t.set(e,Math.min(i.getProperty(F),r))}}return e.setProperty(Jt,t),t}function xh(e){let t=null,n=e.getOutgoingEdges()[0];for(;;){if(t=n.getTarget().getNode(),t.hasProperty(I))return t.getProperty(I).getNode();if(t.getType()!==`NORMAL`&&t.getOutgoingEdges().length>0)n=t.getOutgoingEdges()[0];else if(t.getType()!==`NORMAL`)return null;if(t.getType()===`NORMAL`)break}return t}function Sh(e,t){for(let n=1;n<e.length;n++){let r=e[n],i=n;for(;i>0&&t.compare(e[i-1],r)>0;)e[i]=e[i-1],i--;e[i]=r}t.clearTransitiveOrdering()}function Ch(e){let n=!1;for(let t of e.getLayers()){let e=t.getNodes().filter(e=>e.getType()===`NORMAL`).filter(e=>e.hasProperty(ae)&&e.getProperty(ae)!==null).sort((e,t)=>{let n=e.getProperty(ae),r=t.getProperty(ae);return(n?.y??0)-(r?.y??0)});for(let t=0;t+1<e.length;t++){let r=e[t].getProperty(k)??[];r.push(e[t+1]),e[t].setProperty(k,r),n=!0}}n&&e.setProperty(t,!0)}function wh(e){let t=e.getLayerlessNodes().filter(e=>e.hasProperty(Yt)),n=[];for(let r of e.getLayerlessNodes())if(r.hasProperty(Yt))for(let e of r.getOutgoingEdges())Th(e,t)&&n.push(e);for(let t of n){t.reverse(e,!0);let n=1e3;t.hasProperty(Ge)&&(n+=t.getProperty(Ge)),t.setProperty(Ge,n)}}function Th(e,t){let n=e.getSource()?.getNode(),r=e.getTarget()?.getNode();if(!n||!r)return!1;let i=n.getProperty(Yt);if(r.hasProperty(Yt))return i>r.getProperty(Yt);let a=t.filter(e=>e.getProperty(Yt)<i),o=[n],s=/* @__PURE__ */ new Set([n]);for(;o.length>0;){let e=o.shift();if(a.includes(e))return!0;for(let t of e.getOutgoingEdges()){let e=t.getTarget()?.getNode();e&&!s.has(e)&&(s.add(e),o.push(e))}}return!1}function Eh(e){let t=/* @__PURE__ */ new Map;for(let n of e.getLayerlessNodes())if(n.hasProperty(Yt)){let e=n.getProperty(Yt);t.has(e)||t.set(e,[]),t.get(e).push(n)}if(t.size===0)return;let n=[...t.keys()].sort((e,t)=>e-t);for(let e=0;e+1<n.length;e++)Dh(t.get(n[e]),t.get(n[e+1]))}function Dh(e,t){for(let n of e){let e=new H;e.setNode(n),e.setSide(`EAST`),e.setProperty(Mt,!0);for(let n of t){let t=new H;t.setNode(n),t.setSide(`WEST`),t.setProperty(Mt,!0);let r=new U;r.setProperty(Mt,!0),r.setSource(e),r.setTarget(t)}}}function Oh(e){for(let t of e.getLayers())for(let e of t.getNodes())e.setPorts(e.getPorts().filter(e=>!e.getProperty(Mt)))}function kh(e){e.getProperty(Ee)&&e.getProperty(w).add(`PARTITIONS`)}function Ah(e){let t=e.getProperty(le),n=e.getProperty(Qe);n===0&&(n=2**53-1);let r=e.getLayers(),i=0;for(;i<r.length;){let a=r[i],o=[],s=-1,c=-1;for(let e of[...a.getNodes()])if(Ph(e)>=t){let r=jh(e,t,n);s=Math.max(s,r.incMax),c=Math.max(c,r.outMax),o.push([e,r])}let l=[];for(let t=0;t<s;t++){let t=new W(e);r.splice(i,0,t),l.unshift(t)}l.reverse();for(let[,e]of o)if(e.incRoots!==null)for(let t of e.incRoots)Nh(t,e=>e.getIncomingEdges(),l);let u=i+Math.max(0,s),d=[];for(let t=0;t<c;t++){let n=new W(e);r.splice(u+1+t,0,n),d.push(n)}for(let[,e]of o)if(e.outRoots!==null)for(let t of e.outRoots)Nh(t,e=>e.getOutgoingEdges(),d);i+=Math.max(0,s)+1+Math.max(0,c)}for(let e=r.length-1;e>=0;e--)r[e].getNodes().length===0&&r.splice(e,1)}function jh(e,t,n){let r={incMax:-1,incRoots:null,outMax:-1,outRoots:null};for(let i of e.getIncomingEdges()){if(i.isSelfLoop())continue;let e=i.getSource().getNode();if(Fh(e,e=>e.getOutgoingEdges())){let i=Mh(e,e=>e.getOutgoingEdges(),e=>e.getIncomingEdges(),t,n);if(i===-1)continue;r.incMax=Math.max(r.incMax,i),r.incRoots===null&&(r.incRoots=[]),r.incRoots.push(e)}}for(let i of e.getOutgoingEdges()){if(i.isSelfLoop())continue;let e=i.getTarget().getNode();if(Fh(e,e=>e.getIncomingEdges())){let i=Mh(e,e=>e.getIncomingEdges(),e=>e.getOutgoingEdges(),t,n);if(i===-1)continue;r.outMax=Math.max(r.outMax,i),r.outRoots===null&&(r.outRoots=[]),r.outRoots.push(e)}}return r}function Mh(e,t,n,r,i){if(Ph(e)>=r||!Fh(e,t))return-1;let a=n(e);if(a.length===0)return 1;let o=0;for(let s of a){let a=Mh(Ih(s,e),t,n,r,i);if(a===-1||(o=Math.max(o,a),o>i-1))return-1}return o+1}function Nh(e,t,n){e.setLayer(n[0]);let r=n.slice(1);for(let n of t(e))Nh(Ih(n,e),t,r)}function Ph(e){return e.getConnectedEdges().length}function Fh(e,t){let n=null;for(let r of t(e)){let t=Ih(r,e);if(n===null)n=t;else if(t!==n)return!1}return!0}function Ih(e,t){let n=e.getSource()?.getNode(),r=e.getTarget()?.getNode();return n===t?r:n}function Lh(e){let t=1,n=[];for(let r=0;r<e.getLayers().length;r++){let i=e.getLayers()[r],a=Rh(i),o=zh(i);if(Bh(i)){let t=0,n=0;for(let e of i.getNodes())t=Math.max(t,e.size.x),n+=e.size.y;if(n/=i.getNodes().length,t+=Math.max(2*e.getProperty(_n),Math.max(i.getNodes().length*e.getProperty(wt),e.getProperty(kn))),n+=Math.max(e.getProperty(Zt),e.getProperty(an)),t/n>=i.getNodes().length/4)continue}if(i.getNodes().length>=a){let s=[i];for(let i=0;i<a-1;i++){let a=new W(e);n.push({layer:a,index:r+i+t}),s.push(a)}t+=a-1;let c=s[0].getNodes().length;for(let t=0,n=0,r=0;t<c;t++,n++,r++){let i=s[0].getNodes()[n];i.getType()===`NONSHIFTING_PLACEHOLDER`?(--t,--r):n+=Vh(e,s,r%a,n),o&&i.getType()===`LONG_EDGE`&&(r=-1)}}}for(let t of n)e.getLayers().splice(t.index,0,t.layer);for(let t of e.getLayers()){let e=t.getNodes();for(let t=e.length-1;t>=0;t--){let n=e[t];(n.getType()===`PLACEHOLDER`||n.getType()===`NONSHIFTING_PLACEHOLDER`)&&e.splice(t,1)}}}function Rh(e){let t=2**53-1,n=!0;for(let r=0;r<e.getNodes().length;r++){let i=e.getNodes()[r];if(i.hasProperty(jn)){n=!1;let e=i.getProperty(jn);t=t<e?t:e}}return n&&(t=jn.getDefault()),t}function zh(e){for(let t=0;t<e.getNodes().length;t++){let n=e.getNodes()[t];if(n.hasProperty(kt)&&!n.getProperty(kt))return!1}return!0}function Bh(e){for(let t=0;t<e.getNodes().length;t++){let n=e.getNodes()[t];if(n.hasProperty(Ct)&&n.getProperty(Ct))return!0}return!1}function Vh(e,t,n,r){let i=t[0].getNodes()[r];n>0&&i.setLayer(t[n]);let a=0,o=!0,s=[...i.getIncomingEdges()].reverse();for(let i of s){o=!1;let s=i;for(let i=0;i<n;i++){let n=Hh(e,s);r+a>t[i].getNodes().length?n.setLayer(t[i]):n.setLayerAt(r+a,t[i]),s=Or(s,n)}n>0&&(a+=1)}if(o){for(let i=0;i<n;i++){let n=new V(e);n.setType(`PLACEHOLDER`),r+a>t[i].getNodes().length?n.setLayer(t[i]):n.setLayerAt(r+a,t[i])}n>0&&(a+=1)}let c=!1;for(let o of i.getOutgoingEdges()){let i=o;for(let r=n+1;r<t.length;r++){let n=Hh(e,i);n.setLayer(t[r]),i=Or(i,n)}for(let i=0;i<=n;i++)if(c){let n=new V(e);n.setType(`NONSHIFTING_PLACEHOLDER`),r+1>t[i].getNodes().length?n.setLayer(t[i]):n.setLayerAt(r+1,t[i])}c&&(a+=1),c=!0}return a>0?a-1:0}function Hh(e,t){let n=new V(e);return n.setType(`LONG_EDGE`),n.setProperty(L,t),n.setProperty(O,`FIXED_POS`),n}function Uh(e){let t=e.getProperty(De),n=t===`MODEL_ORDER`||t===`GREEDY_MODEL_ORDER`||t===`BFS_NODE_ORDER`||t===`DFS_NODE_ORDER`||t===`SCC_CONNECTIVITY`||t===`SCC_NODE_TYPE`,r=e.getProperty(Qt),i=r===`BF_MODEL_ORDER`||r===`DF_MODEL_ORDER`||e.getProperty(yt)===`MODEL_ORDER_LEFT_TO_RIGHT`||e.getProperty(yt)===`MODEL_ORDER_RIGHT_TO_LEFT`,a=e.getProperty(Ce)!==`NONE`||e.getProperty(Oe)||e.getProperty(Wn)!==h.NONE;return n||i||a}function Wh(e){let t=[],n=[e];for(;n.length>0;){let e=n.pop();t.push(e);for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();e!==null&&n.push(e)}}return t}function Gh(e){if(!Uh(e))return;let t=0,n=/* @__PURE__ */ new Set;for(let r of e.getLayerlessNodes())r.getProperty(v)||(r.setProperty(F,t++),r.hasProperty(In)&&n.add(r.getProperty(In)));e.setProperty(xn,t),e.setProperty(Ut,n.size);let r=0;for(let t of e.getLayerlessNodes())for(let e of t.getPorts())for(let t of e.getOutgoingEdges())t.setProperty(F,r++)}function Kh(e){for(let t of Wh(e))Gh(t)}function qh(t){let n=[t];for(;n.length>0;){let t=n.pop();for(let r of t.getLayerlessNodes()){let t=r.getOutgoingEdges().some(t=>t.isSelfLoop()&&t.getProperty(e));if(r.getProperty(Ae)&&t&&r.getNestedGraph()===null){let e=new rr;r.setNestedGraph(e),e.setParentNode(r),e.setProperty(S,`RIGHT`)}let i=r.getNestedGraph();i!==null&&n.push(i)}}}var Jh=class{begin(){}done(){}};function Yh(e){let t=[],n=[e];for(;n.length>0;){let e=n.pop();for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();e!==null&&n.push(e)}t.push(e)}return t.reverse()}function Xh(e,t,n,r){let i={x:t.position.x+t.size.x/2,y:t.position.y+t.size.y/2},a=t.getProperty(E),o=e.getSize(),s=e.getPadding(),c=e.getOffset();switch(t.getProperty(L),t.getProperty(j)){case`NORTH`:i.x+=s.left+c.x-n/2,i.y=-r-a,t.position.y=-(s.top+a+c.y);break;case`EAST`:i.x=o.x+s.left+s.right+a,i.y+=s.top+c.y-r/2,t.position.x=o.x+s.right+a-c.x;break;case`SOUTH`:i.x+=s.left+c.x-n/2,i.y=o.y+s.top+s.bottom+a,t.position.y=o.y+s.bottom+a-c.y;break;case`WEST`:i.x=-n-a,i.y+=s.top+c.y-r/2,t.position.x=-(s.left+a+c.x)}return i}function Zh(e,t){let n=e.getNestedGraph();if(n===null)return;let r=n.getAllNodes();if(r.length===0)return;let i=e=>{let n=e.getType();if(n===`NORMAL`||n===`LONG_EDGE`)return!0;if(n===`EXTERNAL_PORT`){if(!t&&a)return!1;let n=e.getProperty(j);return n===`WEST`||n===`EAST`||e.getPorts().some(e=>e.getConnectedEdges().length>0)}return!1},a=r.some(e=>e.getType()===`NORMAL`||e.getType()===`LONG_EDGE`),o=r.filter(i);if(o.length===0)return;let s=1/0,c=1/0,l=-1/0,u=-1/0,d=1/0,f=1/0;for(let e of o){let t=e.getMargin();if(s=Math.min(s,e.position.x-t.left),c=Math.min(c,e.position.y-t.top),l=Math.max(l,e.position.x+e.size.x+t.right),u=Math.max(u,e.position.y+e.size.y+t.bottom),e.getType()===`EXTERNAL_PORT`){let r=e.position.x;if(r<0||r>n.getSize().x){f=Math.min(f,e.position.y-t.top);continue}}d=Math.min(d,e.position.x-t.left),f=Math.min(f,e.position.y-t.top)}let p=n.getPadding(),m=e.size.x,h=e.size.y,g=n.getSize().x+p.left+p.right,_=n.getSize().y+p.top+p.bottom,v=n.getProperty(x);v&&(g=Math.max(g,v.x),_=Math.max(_,v.y)),mg&&n.getProperty(qe)?.length>0&&(g=n.getSize().x+p.left+p.right,_=n.getSize().y+p.top+p.bottom,v&&(g=Math.max(g,v.x),_=Math.max(_,v.y)));{let t=n.getSize().x+p.left+p.right,r=n.getSize().y+p.top+p.bottom,i=e.getProperty(`org.eclipse.elk.contentAlignment`)??[];if(g>t||_>r){let e=n.getOffset();g>t&&(i.includes(`H_CENTER`)?e.x+=(g-t)/2:i.includes(`H_RIGHT`)&&(e.x+=g-t)),_>r&&(i.includes(`V_CENTER`)?e.y+=(_-r)/2:i.includes(`V_BOTTOM`)&&(e.y+=_-r))}}d=-n.getOffset().x,f=-n.getOffset().y;let y=p.left-d,b=p.top-f;if(t&&(y!==0||b!==0)){for(let e of r)e.getType()===`NORMAL`&&(e.position.x+=y,e.position.y+=b);let e=/* @__PURE__ */ new Set;for(let t of r)for(let n of t.getPorts())for(let t of n.getConnectedEdges())if(!e.has(t)){e.add(t);for(let e of t.getBendPoints())e.x+=y,e.y+=b;for(let e of t.getLabels())e.position.x+=y,e.position.y+=b}}if(n.getProperty(w).has(`EXTERNAL_PORTS`)){e.setProperty(O,`FIXED_POS`),e.getGraph().getProperty(w).add(`NON_FREE_PORTS`);for(let e of n.getAllNodes()){let t=e.getProperty(L);if(t instanceof H){let r=t,i=Xh(n,e,r.getSize().x,r.getSize().y);r.getPosition().x=i.x,r.getPosition().y=i.y,r.setSide(e.getProperty(j))}}if(t&&b!==0&&r.some(e=>e.getType()===`NORMAL`))for(let e of n.getAllNodes()){if(e.getType()!==`EXTERNAL_PORT`)continue;let t=e.getProperty(j);if(t===`WEST`||t===`EAST`){e.position.y+=b;for(let t of e.getPorts())for(let e of t.getLabels())e.position.y-=b}}e.size.x=g,e.size.y=_,n.getSize().x=g,n.getSize().y=_}else{if(m>0&&h>0){let t=g/m,n=_/h,r=g-m,i=_-h;for(let a of e.getPorts())switch(a.getSide()){case`NORTH`:a.getPosition().x*=t;break;case`EAST`:a.getPosition().x+=r,a.getPosition().y*=n;break;case`SOUTH`:a.getPosition().x*=t,a.getPosition().y+=i;break;case`WEST`:a.getPosition().y*=n}}e.size.x=g,e.size.y=_,n.getSize().x=g,n.getSize().y=_}}function Qh(e,t,n){let r=e.getProperty(S)===`UNDEFINED`?`RIGHT`:e.getProperty(S);for(let t of e.getAllNodes()){let e=t.getProperty(O);if(D.isSideFixed(e))for(let n of t.getPorts())gc(n,e,r)}let i=e.getProperty(w),a=e.getProperty(S),o=a===`UNDEFINED`?`RIGHT`:a;for(let t of e.getLayerlessNodes()){let n=t.getProperty(O);n!==`FREE`&&n!==`UNDEFINED`&&i.add(`NON_FREE_PORTS`),t.getProperty(it)&&(i.add(`HYPERNODES`),i.add(`HYPEREDGES`),t.setProperty(O,`FREE`)),kh(e);for(let e of t.getPorts()){let n=e.getSide();(o===`RIGHT`||o===`LEFT`?n===`NORTH`||n===`SOUTH`:n===`EAST`||n===`WEST`)&&i.add(`NORTH_SOUTH_PORTS`),e.getIncomingEdges().length+e.getOutgoingEdges().length>1&&i.add(`HYPEREDGES`);for(let n of e.getOutgoingEdges()){n.getTarget()!==null&&n.getTarget().getNode()===t&&i.add(`SELF_LOOPS`);for(let e of n.getLabels())e.placement===`HEAD`||e.placement===`TAIL`?i.add(`END_LABELS`):i.add(`CENTER_LABELS`)}}}$(`GraphTransformer(in)`,n,e,()=>new Dm(`TO_INPUT_DIRECTION`).process(e));for(let t of e.getAllNodes())t.hasProperty(tn)||t.setProperty(tn,t.getProperty(O));(e.getProperty(gt)===null||e.getProperty(gt)===void 0)&&e.setProperty(gt,e.getProperty(s)===`ORTHOGONAL`),e.getProperty(w).has(`COMMENTS`)&&$(`CommentPreprocessor`,n,e,()=>tm(e)),e.getProperty(Qt)!==`INTERACTIVE`&&$(`EdgeAndLayerConstraintEdgeReverser`,n,e,()=>new mr().process(e));let c=e.getProperty(w).has(`SELF_LOOPS`);c&&$(`SelfLoopPreprocessor`,n,e,()=>Mf(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionPreprocessor`,n,e,()=>wh(e)),(e.getProperty(De)===`INTERACTIVE`||e.getProperty(Qt)===`INTERACTIVE`)&&$(`InteractiveExternalPortPositioner`,n,e,()=>Dd(e));let l=e.getProperty(De);l===`MODEL_ORDER`?$(`ModelOrderCycleBreaker`,n,e,()=>fr(e,t)):l===`GREEDY_MODEL_ORDER`?$(`GreedyModelOrderCycleBreaker`,n,e,()=>new pr().process(e,t)):l===`DEPTH_FIRST`?$(`DepthFirstCycleBreaker`,n,e,()=>new ou().process(e,t)):l===`SCC_CONNECTIVITY`?$(`SCConnectivity`,n,e,()=>new du().process(e,t)):l===`SCC_NODE_TYPE`?$(`SCCNodeTypeCycleBreaker`,n,e,()=>new mu().process(e,t)):l===`DFS_NODE_ORDER`?$(`DFSNodeOrderCycleBreaker`,n,e,()=>new cu().process(e,t)):l===`BFS_NODE_ORDER`?$(`BFSNodeOrderCycleBreaker`,n,e,()=>new su().process(e,t)):l===`INTERACTIVE`?$(`InteractiveCycleBreaker`,n,e,()=>lr(e)):$(`GreedyCycleBreaker`,n,e,()=>new sr().process(e,t)),n?.afterPhase?.(`P1`,e),$(`LabelDummyInserter`,n,e,()=>Mr(e)),$(`LayerConstraintPreprocessor`,n,e,()=>new $l().process(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionMidprocessor`,n,e,()=>Eh(e));let u=e.getProperty(Qt);u===`INTERACTIVE`?$(`InteractiveLayerer`,n,e,()=>iu(e,t)):u===`LONGEST_PATH_SOURCE`?$(`LongestPathSourceLayerer`,n,e,()=>new Tr().process(e,t)):u===`LONGEST_PATH`||u===`LONGEST_PATH_SINK`?$(`LongestPathLayerer`,n,e,()=>new wr().process(e,t)):u===`COFFMAN_GRAHAM`?$(`CoffmanGrahamLayerer`,n,e,()=>new gu().process(e,t)):u===`BF_MODEL_ORDER`?$(`BreadthFirstModelOrderLayerer`,n,e,()=>new _u().process(e,t)):u===`DF_MODEL_ORDER`?$(`DepthFirstModelOrderLayerer`,n,e,()=>new vu().process(e,t)):u===`MIN_WIDTH`?$(`MinWidthLayerer`,n,e,()=>new yu().process(e,t)):u===`STRETCH_WIDTH`?$(`StretchWidthLayerer`,n,e,()=>new bu().process(e,t)):$(`NetworkSimplexLayerer`,n,e,()=>new Cr().process(e,t)),n?.afterPhase?.(`P2`,e),e.getProperty(tt)&&$(`HighDegreeNodeLayeringProcessor`,n,e,()=>Ah(e)),e.getProperty(yt)!==`NONE`&&$(`NodePromotion`,n,e,()=>new di().process(e,t)),$(`LayerConstraintPostprocessor`,n,e,()=>eu(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionPostprocessor`,n,e,()=>Oh(e)),mg&&e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortConstraintProcessor`,n,e,()=>new zf().process(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointInserter`,n,e,()=>Bd(e)),$(`LongEdgeSplitter`,n,e,()=>Er(e)),$(`PortSideProcessor`,n,e,()=>_c(e));let d=e.getProperty(s);(d===`POLYLINE`||d===`SPLINES`||d===`ORTHOGONAL`&&(e.getProperty(w).has(`NON_FREE_PORTS`)||e.getProperty(ne)||e.getProperty(w).has(`HYPEREDGES`)))&&$(`InvertedPortProcessor`,n,e,()=>$p(e)),c&&$(`DummySelfLoopProcessor`,n,e,()=>Gp(e)),e.getProperty(Ce)!==`NONE`&&$(`SortByInputModel`,n,e,()=>yh(e)),$(`PortListSorter`,n,e,()=>gf(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&!mg&&$(`HierarchicalPortConstraintProcessor`,n,e,()=>new zf().process(e)),e.getProperty(_e)&&$(`SemiInteractiveCrossMinProcessor`,n,e,()=>Ch(e)),e.getProperty(w).has(`NON_FREE_PORTS`)&&e.getProperty(w).has(`NORTH_SOUTH_PORTS`)&&$(`NorthSouthPortPreprocessor`,n,e,()=>xf(e))}function $h(e,t,n,r=!1){let i=e.getProperty(w).has(`SELF_LOOPS`);e.setProperty(Rn,new ka(e)),i&&$(`SelfLoopPortRestorer`,n,e,()=>new gp().process(e)),$(`InLayerConstraintProcessor`,n,e,()=>ap(e)),$(`LabelAndNodeSizeProcessor`,n,e,()=>bd(e)),$(`NodeMarginCalculator`,n,e,()=>Ec(e)),e.getProperty(w).has(`COMMENTS`)&&$(`CommentNodeMarginCalculator`,n,e,()=>im(e)),e.getProperty(w).has(`END_LABELS`)&&$(`EndLabelPreprocessor`,n,e,()=>Am(e)),e.getProperty(w).has(`CENTER_LABELS`)&&$(`LabelDummySwitcher`,n,e,()=>Rr(e)),(e.getProperty(w).has(`END_LABELS`)||e.getProperty(w).has(`CENTER_LABELS`))&&$(`LabelSideSelector`,n,e,()=>Wm(e)),e.getProperty(w).has(`HYPEREDGES`)&&e.getProperty(s)!==`SPLINES`&&$(`HyperedgeDummyMerger`,n,e,()=>new hr().process(e)),$(`HierarchicalPortDummySizeProcessor`,n,e,()=>If(e)),i&&$(`SelfLoopRouter`,n,e,()=>Up(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointProcessor`,n,e,()=>qd(e));let a=e.getProperty(zn);a===`SIMPLE`?$(`SimpleNodePlacer`,n,e,()=>Ta(e)):a===`INTERACTIVE`?$(`InteractiveNodePlacer`,n,e,()=>Ea(e)):a===`NETWORK_SIMPLEX`?$(`NetworkSimplexPlacer`,n,e,()=>new za().process(e)):a===`LINEAR_SEGMENTS`?$(`LinearSegmentsNodePlacer`,n,e,()=>Cu(e)):(a!==`BRANDES_KOEPF`&&fg(`nodePlacement.strategy`,String(a),`BRANDES_KOEPF`),$(`BKNodePlacer`,n,e,()=>new wa().process(e))),n?.afterPhase?.(`BK`,e),e.getLayerlessNodes().length>0&&e.hasProperty(p)&&$(`NodePlacementRepeater`,n,e,()=>Td(e)),$(`LayerSizeAndGraphHeightCalculator`,n,e,()=>new Ba().process(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortPositionProcessor`,n,e,()=>Bf(e));let o=e.getProperty(s);if(o===`POLYLINE`?$(`PolylineEdgeRouter`,n,e,()=>new rs().process(e)):o===`SPLINES`?$(`SplineEdgeRouter`,n,e,()=>new Bs().process(e)):(o!==`ORTHOGONAL`&&o!=null&&fg(`edgeRouting`,String(o),`ORTHOGONAL`),$(`OrthogonalEdgeRouter`,n,e,()=>new wo().process(e))),n?.afterPhase?.(`P5`,e),(e.getProperty(Et)||e.getProperty(fe))&&$(`ConstraintsPostprocessor`,n,e,()=>Nu(e)),e.getProperty(w).has(`HYPERNODES`)&&$(`HypernodesProcessor`,n,e,()=>Pu(e)),$(`LongEdgeJoiner`,n,e,()=>oi(e)),i&&$(`SelfLoopPostprocessor`,n,e,()=>op(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointRemover`,n,e,()=>nf(e)),e.getProperty(w).has(`NON_FREE_PORTS`)&&e.getProperty(w).has(`NORTH_SOUTH_PORTS`)&&$(`NorthSouthPortPostprocessor`,n,e,()=>Yp(e)),e.getProperty(Mn)!==`NONE`&&e.getProperty(s)!==`POLYLINE`&&$(`HorizontalGraphCompactor`,n,e,()=>new es().process(e)),$(`LabelDummyRemover`,n,e,()=>ci(e)),o===`SPLINES`&&$(`FinalSplineBendpointsCalculator`,n,e,()=>Ws(e)),e.getProperty(w).has(`COMMENTS`)&&$(`CommentPostprocessor`,n,e,()=>sm(e)),$(`EndLabelSorter`,n,e,()=>ah(e)),$(`ReversedEdgeRestorer`,n,e,()=>of(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortOrthogonalEdgeRouter`,n,e,()=>Hf(e)),e.getProperty(w).has(`END_LABELS`)&&$(`EndLabelPostprocessor`,n,e,()=>ph(e)),!r){$(`GraphTransformer(out)`,n,e,()=>new Dm(`TO_INTERNAL_LTR`).process(e));for(let t of e.getLayers())for(let n of t.getNodes())Dc(n),e.getProperty(w).has(`COMMENTS`)&&am(n)}}function eg(e){let t=e.getParentNode();if(t===null)return;let n=e.getProperty(S);if(n!==`DOWN`&&n!==`UP`)return;let r=t.getGraph()?.getProperty(S);if(r!==`RIGHT`&&r!==`UNDEFINED`)return;let i=t.size.x;t.size.x=t.size.y,t.size.y=i;let a=t.getPadding(),o=a.left;a.left=a.top,a.top=o;let s=a.right;a.right=a.bottom,a.bottom=s}function tg(e){let t=e.getParentNode();return t!==null&&t.getProperty(mn)===`SEPARATE_CHILDREN`}function ng(e,t,n){let r=Yh(e);sg(e,r);for(let e of r)if(e.getProperty(P)===void 0){let t=e.getProperty(me);e.setProperty(P,t===0?new $n:new $n(t))}for(let e of r)gg(e)||Qh(e,t,n);let i=r[r.length-1],a=i.getProperty(be);a===`INTERACTIVE`?($(`InteractiveCrossingMinimizer`,n,i,()=>new ua().process(i)),n?.afterPhase?.(`P3`,i)):a===`MEDIAN_LAYER_SWEEP`?($(`LayerSweepCrossingMinimizer`,n,i,()=>new la(3).process(i,t)),n?.afterPhase?.(`P3`,i)):($(`LayerSweepCrossingMinimizer`,n,i,()=>new la(0).process(i,t)),n?.afterPhase?.(`P3`,i));let o=/* @__PURE__ */ new Set;for(let e of r){if(gg(e))continue;$h(e,t,n,!0);let r=e.getParentNode();if(r!==null&&Zh(r,!0),tg(e)){$(`GraphTransformer(out)`,n,e,()=>new Dm(`TO_INTERNAL_LTR`).process(e)),eg(e);for(let t of e.getLayers())for(let e of t.getNodes())Dc(e);o.add(e)}}for(let e of r)if(!o.has(e)){$(`GraphTransformer(out)`,n,e,()=>new Dm(`TO_INTERNAL_LTR`).process(e)),eg(e);for(let t of e.getLayers())for(let e of t.getNodes())Dc(e)}let s=e.getOffset(),c=e.getPadding();for(let t of e.getAllNodes())t.position.x+=s.x+c.left,t.position.y+=s.y+c.top;let l=s.x+c.left,u=s.y+c.top;if(l!==0||u!==0){let t=/* @__PURE__ */ new Set;for(let n of e.getAllNodes())for(let e of n.getPorts())for(let n of e.getConnectedEdges())if(!t.has(n)){t.add(n);for(let e of n.getBendPoints())e.x+=l,e.y+=u}}n?.afterPhase?.(`done`,e)}function rg(e){let t=e.getProperty(S);for(let n of e.getLayerlessNodes()){let e=n.getNestedGraph();if(e!==null){if(e.getProperty(S)===`UNDEFINED`){let r=n.getProperty(`org.eclipse.elk.hierarchyHandling`),i=n.getProperty(`org.eclipse.elk.direction`);r===`SEPARATE_CHILDREN`&&i!==void 0&&i!==`UNDEFINED`?e.setProperty(S,i):t!==`UNDEFINED`&&e.setProperty(S,t)}rg(e)}}}function ig(e){for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();if(e!==null){if(e.getProperty(O)===`UNDEFINED`){let n=t.getProperty(O);n!==`UNDEFINED`&&e.setProperty(O,n)}ig(e)}}}const ag=[be,De,Qt,_e,Et,Je,s,oe,me,r,Kt,N,Zt,kn,n,wt,an,_n,dn,Ot,Yn];function og(e){for(let t of e.getLayerlessNodes()){let e=t.getNestedGraph();if(e!==null){for(let n of ag)t.hasProperty(n)&&e.setProperty(n,t.getProperty(n));og(e)}}}function sg(e,t){let n=e.getProperty(be);for(let r of t){if(r===e)continue;let t=r.getProperty(be);if(t!==n){let e=r.getParentNode()?.id??`G-unlayered`;throw Error(`UnsupportedGraphException: The hierarchy aware processor `+t+` in child node `+e+` is only allowed if the root node specifies the same hierarchical processor.`)}}}function cg(e){let t=[e];for(;t.length>0;){let e=t.pop(),n=e.getProperty(S)===`UNDEFINED`?`RIGHT`:e.getProperty(S);for(let t of e.getAllNodes()){let e=t.getProperty(O);if(D.isSideFixed(e))for(let r of t.getPorts())gc(r,e,n)}for(let n of e.getLayerlessNodes()){let e=n.getNestedGraph();e!==null&&t.push(e)}}}function lg(e,t,n){if(rg(e),og(e),mg&&ig(e),cg(e),$(`CompoundGraphPreprocessor`,n,e,()=>new Mc().process(e)),e.getProperty(mn)===`INCLUDE_CHILDREN`){ng(e,t,n),$(`CompoundGraphPostprocessor`,n,e,()=>Yl(e));return}let r=Yh(e);for(let e of r)if(!gg(e)&&(e.getLayers().length===0||e.getLayerlessNodes().length>0)){ug(e,t,n);let r=e.getParentNode();if(r!==null&&e.getProperty(w).has(`EXTERNAL_PORTS`)&&e.getSize().x===0&&e.getAllNodes().some(e=>e.getType()===`EXTERNAL_PORT`)){let t=[],n=/* @__PURE__ */ new Set;for(let r of e.getAllNodes())n.has(r)||(n.add(r),t.push(r));let i=/* @__PURE__ */ new Set,a=e=>{let t=[e];for(;t.length>0;){let e=t.pop();if(!i.has(e)){i.add(e);for(let n of e.getPorts())for(let e of n.getConnectedPorts()){let n=e.getNode();n!==null&&!i.has(n)&&t.push(n)}}}},o=0;for(let e of t)i.has(e)||(a(e),o++);let s=/* @__PURE__ */ new Set;for(let e of t){let t=e.getProperty(L);t instanceof H&&s.add(t)}for(let e of r.getPorts())s.has(e)||o++;e.getSize().x=o>1?e.getProperty(je):-e.getProperty(je)}r!==null&&mg&&e.getProperty(w).has(`EXTERNAL_PORTS`)&&Hf(e),r!==null&&(Zh(r,!1),eg(e))}$(`CompoundGraphPostprocessor`,n,e,()=>Yl(e))}function $(e,t,n,r){t?.beforeModule?.(e,n),r(),t?.afterModule?.(e,n)}function ug(e,t,n){if(e.getProperty(P)===void 0){let t=e.getProperty(me);e.setProperty(P,t===0?new $n:new $n(t))}let i=e.getProperty(_e)||e.getProperty(be)===`INTERACTIVE`,a=e.getProperty(r),o=e.getProperty(Kt),s=e.getLayerlessNodes().length,c=!i&&a!==`OFF`&&(o===0||o>s);e.setProperty(pe,c);let l=new Gl().split(e);if(l.length===1)pg(e,t,n);else{for(let e of l){pg(e,t,n,!1);for(let t of e.getLayers()){for(let n of[...t.getNodes()])e.getLayerlessNodes().includes(n)||e.getLayerlessNodes().push(n),n.setLayer(null);t.getNodes().length=0}e.getLayers().length=0,ql(e)}new Gl().combine(l,e),n?.afterPhase?.(`combine`,e);let r=e.getOffset(),i=e.getPadding(),a=r.x+i.left,o=r.y+i.top,s=/* @__PURE__ */ new Set;for(let t of e.getLayerlessNodes()){t.position.x+=a,t.position.y+=o;for(let e of t.getPorts())for(let t of e.getConnectedEdges())if(!s.has(t)){s.add(t);for(let e of t.getBendPoints())e.x+=a,e.y+=o}}}}const dg=/* @__PURE__ */ new Set;function fg(e,t,n){let r=`${e}=${t}`;dg.has(r)||(dg.add(r),console.warn(`[ggn] 未实现策略 ${e}=${t},降级为 ${n}(与 ELK 不一致,待移植/显式降级)`))}function pg(e,t,n,r=!0){let i=e.getProperty(S)===`UNDEFINED`?`RIGHT`:e.getProperty(S);for(let t of e.getAllNodes()){let e=t.getProperty(O);if(D.isSideFixed(e))for(let n of t.getPorts())gc(n,e,i)}let a=e.getProperty(w),o=e.getProperty(S),c=o===`UNDEFINED`?`RIGHT`:o;for(let t of e.getLayerlessNodes()){let n=t.getProperty(O);n!==`FREE`&&n!==`UNDEFINED`&&a.add(`NON_FREE_PORTS`),t.getProperty(it)&&(a.add(`HYPERNODES`),a.add(`HYPEREDGES`),t.setProperty(O,`FREE`)),kh(e);for(let e of t.getPorts()){let n=e.getSide();(c===`RIGHT`||c===`LEFT`?n===`NORTH`||n===`SOUTH`:n===`EAST`||n===`WEST`)&&a.add(`NORTH_SOUTH_PORTS`),e.getIncomingEdges().length+e.getOutgoingEdges().length>1&&a.add(`HYPEREDGES`);for(let n of e.getOutgoingEdges()){n.getTarget()!==null&&n.getTarget().getNode()===t&&a.add(`SELF_LOOPS`);for(let e of n.getLabels())e.placement===`HEAD`||e.placement===`TAIL`?a.add(`END_LABELS`):a.add(`CENTER_LABELS`)}}}$(`GraphTransformer(in)`,n,e,()=>new Dm(`TO_INPUT_DIRECTION`).process(e));for(let t of e.getAllNodes())t.hasProperty(tn)||t.setProperty(tn,t.getProperty(O));(e.getProperty(gt)===null||e.getProperty(gt)===void 0)&&e.setProperty(gt,e.getProperty(s)===`ORTHOGONAL`),e.getProperty(w).has(`COMMENTS`)&&$(`CommentPreprocessor`,n,e,()=>tm(e)),e.getProperty(Qt)!==`INTERACTIVE`&&$(`EdgeAndLayerConstraintEdgeReverser`,n,e,()=>new mr().process(e));let l=e.getProperty(w).has(`SELF_LOOPS`);l&&$(`SelfLoopPreprocessor`,n,e,()=>Mf(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionPreprocessor`,n,e,()=>wh(e)),(e.getProperty(De)===`INTERACTIVE`||e.getProperty(Qt)===`INTERACTIVE`)&&$(`InteractiveExternalPortPositioner`,n,e,()=>Dd(e));let u=e.getProperty(De);u===`MODEL_ORDER`?$(`ModelOrderCycleBreaker`,n,e,()=>fr(e,t)):u===`GREEDY_MODEL_ORDER`?$(`GreedyModelOrderCycleBreaker`,n,e,()=>new pr().process(e,t)):u===`DEPTH_FIRST`?$(`DepthFirstCycleBreaker`,n,e,()=>new ou().process(e,t)):u===`SCC_CONNECTIVITY`?$(`SCConnectivity`,n,e,()=>new du().process(e,t)):u===`SCC_NODE_TYPE`?$(`SCCNodeTypeCycleBreaker`,n,e,()=>new mu().process(e,t)):u===`DFS_NODE_ORDER`?$(`DFSNodeOrderCycleBreaker`,n,e,()=>new cu().process(e,t)):u===`BFS_NODE_ORDER`?$(`BFSNodeOrderCycleBreaker`,n,e,()=>new su().process(e,t)):u===`INTERACTIVE`?$(`InteractiveCycleBreaker`,n,e,()=>lr(e)):$(`GreedyCycleBreaker`,n,e,()=>new sr().process(e,t)),n?.afterPhase?.(`P1`,e),$(`LabelDummyInserter`,n,e,()=>Mr(e)),$(`LayerConstraintPreprocessor`,n,e,()=>new $l().process(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionMidprocessor`,n,e,()=>Eh(e));let d=e.getProperty(Qt);d===`INTERACTIVE`?$(`InteractiveLayerer`,n,e,()=>iu(e,t)):d===`LONGEST_PATH_SOURCE`?$(`LongestPathSourceLayerer`,n,e,()=>new Tr().process(e,t)):d===`LONGEST_PATH`||d===`LONGEST_PATH_SINK`?$(`LongestPathLayerer`,n,e,()=>new wr().process(e,t)):d===`COFFMAN_GRAHAM`?$(`CoffmanGrahamLayerer`,n,e,()=>new gu().process(e,t)):d===`BF_MODEL_ORDER`?$(`BreadthFirstModelOrderLayerer`,n,e,()=>new _u().process(e,t)):d===`DF_MODEL_ORDER`?$(`DepthFirstModelOrderLayerer`,n,e,()=>new vu().process(e,t)):d===`MIN_WIDTH`?$(`MinWidthLayerer`,n,e,()=>new yu().process(e,t)):d===`STRETCH_WIDTH`?$(`StretchWidthLayerer`,n,e,()=>new bu().process(e,t)):$(`NetworkSimplexLayerer`,n,e,()=>new Cr().process(e,t)),n?.afterPhase?.(`P2`,e),e.getProperty(tt)&&$(`HighDegreeNodeLayeringProcessor`,n,e,()=>Ah(e)),e.getProperty(yt)!==`NONE`&&$(`NodePromotion`,n,e,()=>new di().process(e,t)),$(`LayerConstraintPostprocessor`,n,e,()=>eu(e)),e.getProperty(w).has(`PARTITIONS`)&&$(`PartitionPostprocessor`,n,e,()=>Oh(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointInserter`,n,e,()=>Bd(e)),$(`LongEdgeSplitter`,n,e,()=>Er(e)),$(`PortSideProcessor`,n,e,()=>_c(e));let f=e.getProperty(s);(f===`POLYLINE`||f===`SPLINES`||f===`ORTHOGONAL`&&(e.getProperty(w).has(`NON_FREE_PORTS`)||e.getProperty(ne)||e.getProperty(w).has(`HYPEREDGES`)))&&$(`InvertedPortProcessor`,n,e,()=>$p(e)),l&&$(`DummySelfLoopProcessor`,n,e,()=>Gp(e)),$(`PortListSorter`,n,e,()=>gf(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortConstraintProcessor`,n,e,()=>new zf().process(e)),e.getProperty(_e)&&$(`SemiInteractiveCrossMinProcessor`,n,e,()=>Ch(e)),e.getProperty(Ce)!==`NONE`&&$(`SortByInputModel`,n,e,()=>yh(e)),e.getProperty(w).has(`NON_FREE_PORTS`)&&e.getProperty(w).has(`NORTH_SOUTH_PORTS`)&&$(`NorthSouthPortPreprocessor`,n,e,()=>xf(e));let m=e.getProperty(be),h=e.getProperty(pe);m===`INTERACTIVE`?($(`InteractiveCrossingMinimizer`,n,e,()=>new ua().process(e)),n?.afterPhase?.(`P3`,e)):m===`MEDIAN_LAYER_SWEEP`?($(`LayerSweepCrossingMinimizer`,n,e,()=>new la(3).process(e,t)),n?.afterPhase?.(`P3`,e)):m!==`NONE`&&($(`LayerSweepCrossingMinimizer`,n,e,()=>new la(0).process(e,t)),n?.afterPhase?.(`P3`,e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointProcessor`,n,e,()=>qd(e)),h&&($(`GreedySwitchHeuristic`,n,e,()=>new la(2).process(e,t)),n?.afterPhase?.(`GreedySwitch`,e)),e.setProperty(Rn,new ka(e)),l&&$(`SelfLoopPortRestorer`,n,e,()=>new gp().process(e)),$(`InLayerConstraintProcessor`,n,e,()=>ap(e)),$(`LabelAndNodeSizeProcessor`,n,e,()=>bd(e)),$(`NodeMarginCalculator`,n,e,()=>Ec(e)),e.getProperty(w).has(`COMMENTS`)&&$(`CommentNodeMarginCalculator`,n,e,()=>im(e)),e.getProperty(w).has(`END_LABELS`)&&$(`EndLabelPreprocessor`,n,e,()=>Am(e)),e.getProperty(w).has(`CENTER_LABELS`)&&$(`LabelDummySwitcher`,n,e,()=>Rr(e)),(e.getProperty(w).has(`END_LABELS`)||e.getProperty(w).has(`CENTER_LABELS`))&&$(`LabelSideSelector`,n,e,()=>Wm(e)),e.getProperty(w).has(`HYPEREDGES`)&&e.getProperty(s)!==`SPLINES`&&$(`HyperedgeDummyMerger`,n,e,()=>new hr().process(e)),$(`HierarchicalPortDummySizeProcessor`,n,e,()=>If(e)),l&&$(`SelfLoopRouter`,n,e,()=>Up(e)),e.getProperty(pn)===`ALTERNATING`&&$(`AlternatingLayerUnzipper`,n,e,()=>Lh(e));let g=e.getProperty(zn);g===`SIMPLE`?$(`SimpleNodePlacer`,n,e,()=>Ta(e)):g===`INTERACTIVE`?$(`InteractiveNodePlacer`,n,e,()=>Ea(e)):g===`NETWORK_SIMPLEX`?$(`NetworkSimplexPlacer`,n,e,()=>new za().process(e)):g===`LINEAR_SEGMENTS`?$(`LinearSegmentsNodePlacer`,n,e,()=>Cu(e)):(g!==`BRANDES_KOEPF`&&fg(`nodePlacement.strategy`,String(g),`BRANDES_KOEPF`),$(`BKNodePlacer`,n,e,()=>new wa().process(e))),n?.afterPhase?.(`BK`,e),e.getLayerlessNodes().length>0&&e.hasProperty(p)&&$(`NodePlacementRepeater`,n,e,()=>Td(e)),$(`LayerSizeAndGraphHeightCalculator`,n,e,()=>new Ba().process(e)),e.getProperty(w).has(`EXTERNAL_PORTS`)&&$(`HierarchicalPortPositionProcessor`,n,e,()=>Bf(e));let _=e.getProperty(s);_===`POLYLINE`?$(`PolylineEdgeRouter`,n,e,()=>new rs().process(e)):_===`SPLINES`?$(`SplineEdgeRouter`,n,e,()=>new Bs().process(e)):(_!==`ORTHOGONAL`&&_!=null&&fg(`edgeRouting`,String(_),`ORTHOGONAL`),$(`OrthogonalEdgeRouter`,n,e,()=>new wo().process(e))),n?.afterPhase?.(`P5`,e),(e.getProperty(Et)||e.getProperty(fe))&&$(`ConstraintsPostprocessor`,n,e,()=>Nu(e)),e.getProperty(w).has(`HYPERNODES`)&&$(`HypernodesProcessor`,n,e,()=>Pu(e)),$(`LongEdgeJoiner`,n,e,()=>oi(e)),l&&$(`SelfLoopPostprocessor`,n,e,()=>op(e)),e.getProperty(Ln)===`MULTI_EDGE`&&$(`BreakingPointRemover`,n,e,()=>nf(e)),e.getProperty(w).has(`NON_FREE_PORTS`)&&e.getProperty(w).has(`NORTH_SOUTH_PORTS`)&&$(`NorthSouthPortPostprocessor`,n,e,()=>Yp(e)),e.getProperty(Mn)!==`NONE`&&e.getProperty(s)!==`POLYLINE`&&$(`HorizontalGraphCompactor`,n,e,()=>new es().process(e)),$(`LabelDummyRemover`,n,e,()=>ci(e)),_===`SPLINES`&&$(`FinalSplineBendpointsCalculator`,n,e,()=>Ws(e)),e.getProperty(w).has(`COMMENTS`)&&$(`CommentPostprocessor`,n,e,()=>sm(e)),$(`EndLabelSorter`,n,e,()=>ah(e)),$(`ReversedEdgeRestorer`,n,e,()=>of(e)),e.getProperty(w).has(`END_LABELS`)&&$(`EndLabelPostprocessor`,n,e,()=>ph(e)),$(`GraphTransformer(out)`,n,e,()=>new Dm(`TO_INTERNAL_LTR`).process(e));let v=e.getProperty(S);if(v!==`RIGHT`&&v!==`UNDEFINED`)for(let t of e.getLayers())for(let n of t.getNodes())Dc(n),e.getProperty(w).has(`COMMENTS`)&&am(n);if(r){let t=e.getOffset(),n=e.getPadding(),r=t.x+n.left,i=t.y+n.top,a=/* @__PURE__ */ new Set;for(let t of e.getAllNodes())if(t.getType()!==`EXTERNAL_PORT`){t.position.x+=r,t.position.y+=i;for(let e of t.getPorts())for(let t of e.getConnectedEdges())if(!a.has(t)){a.add(t);for(let e of t.getBendPoints())e.x+=r,e.y+=i}}}n?.afterPhase?.(`done`,e)}const mg=!0;function hg(e){for(let t of Yh(e))for(let e of t.getLayerlessNodes()){let n=e.getNestedGraph();if(n===null)continue;let r=e.getProperty(He);if(!r||r.length===0)continue;let i=e.getProperty(O);if(!D.isSideFixed(i)){let n=t.getProperty(S)===`UNDEFINED`?`RIGHT`:t.getProperty(S);for(let t of e.getPorts())t.getSide()===`UNDEFINED`&&yc(t,!1,n)}let a=sd(e,t,!0)??{x:e.size.x,y:e.size.y},o=n.getProperty(x)??{x:0,y:0},s=e.getProperty(x)??{x:0,y:0},c={x:Math.max(o.x,s.x),y:Math.max(o.y,s.y)};n.setProperty(x,{x:Math.max(c.x,a.x),y:Math.max(c.y,a.y)});let l=n.getProperty(He);l.includes(`MINIMUM_SIZE`)||n.setProperty(He,[...l,`MINIMUM_SIZE`])}}function gg(e){let t=e.getParentNode();return t!==null&&t.getProperty(`org.eclipse.elk.algorithm`)===`fixed`}function _g(e){let t=/* @__PURE__ */ new Set,n=e=>{let r=e.getProperty(`org.eclipse.elk.algorithm`);if(r&&t.has(r))throw Error(`Layout algorithm '${r}' not found`);let i=e.getNestedGraph();if(i!==null)for(let e of i.getLayerlessNodes())n(e)};for(let t of e.getLayerlessNodes())n(t)}var vg=class{hooks;setHooks(e){this.hooks=e}layout(e,t){let n=t??new Jh;_g(e),Kh(e),qh(e),rg(e),cg(e),hg(e),em(e)&&e.getProperty(w).add(`COMMENTS`),e.getLayerlessNodes().filter(e=>e.getNestedGraph()!==null).length>0?lg(e,n,this.hooks):ug(e,n,this.hooks),bg(e),yg(e)}};function yg(e){for(let t of e.getAllNodes()){t.getNestedGraph()!==null&&yg(t.getNestedGraph());let e=t.hasProperty(He)?t.getProperty(He):t.getGraph()?.getProperty(He)??[];if(!e.includes(`NODE_LABELS`)||e.includes(`PORTS`)||e.includes(`PORT_LABELS`)||e.includes(`MINIMUM_SIZE`)||t.getNestedGraph()!==null)continue;let n=t.getLabels();if(n.length===0)continue;let r=0,i=0;for(let e of n)r=Math.max(r,e.size.x),i=Math.max(i,e.size.y);if(r>0||i>0||t.size.x===0&&t.size.y===0)continue;let a={x:t.size.x,y:t.size.y};t.size.x=0,t.size.y=0,t.position.x+=a.x/2,t.position.y+=a.y/2;for(let e of n)e.position.x=0,e.position.y=0}}function bg(e){for(let t of e.getAllNodes()){t.getNestedGraph()!==null&&bg(t.getNestedGraph());let e=t.hasProperty(Nt)?t.getProperty(Nt):t.getGraph()?.getProperty(Nt)??{left:0,right:0,top:0,bottom:0},n=e.left??0,r=e.right??0,i=Tc(t);for(let e of t.getLabels()){let a=e.placement??t.getProperty(N)??``,o=Array.isArray(a)?a:String(a).split(/[\s,]+/).filter(Boolean);if(o.includes(`OUTSIDE`)){let n=o.includes(`H_PRIORITY`),r=o.includes(`H_LEFT`)||o.includes(`H_RIGHT`);n&&r||!n&&o.includes(`V_CENTER`)&&r?(o.includes(`H_RIGHT`)?e.position.x=t.size.x+i:e.position.x=-e.size.x-i,o.includes(`V_BOTTOM`)?e.position.y=t.size.y-e.size.y:o.includes(`V_CENTER`)?e.position.y=(t.size.y-e.size.y)/2:e.position.y=0):(o.includes(`V_BOTTOM`)?e.position.y=t.size.y+i:e.position.y=-e.size.y-i,o.includes(`H_RIGHT`)?e.position.x=t.size.x-e.size.x:o.includes(`H_LEFT`)?e.position.x=0:e.position.x=(t.size.x-e.size.x)/2)}else o.includes(`H_LEFT`)?e.position.x=n:o.includes(`H_RIGHT`)?e.position.x=t.size.x-e.size.x-r:e.position.x=n+(t.size.x-n-r-e.size.x)/2}}}function xg(e,t,n){switch(n){case`WEST`:e.x=0,e.y=t.y/2;break;case`EAST`:e.x=t.x,e.y=t.y/2;break;case`NORTH`:e.x=t.x/2,e.y=0;break;case`SOUTH`:e.x=t.x/2,e.y=t.y;break;default:e.x=t.x/2,e.y=t.y/2}}function Sg(e,t,n){let r=t===`INPUT`?nt:It;for(let t of e.getPorts())if(t.getProperty(r)===!0)return t;let i=new H;return i.setProperty(r,!0),i.setNode(e),i.setSide(n),xg(i.getPosition(),e.getSize(),n),i}function Cg(e,t,n,r,i){if(r&&!i)return Sg(e,t,t===`OUTPUT`?n:wg(n));let a=new H;return a.setNode(e),a.setSide(t===`OUTPUT`?n:wg(n)),a}function wg(e){switch(e){case`NORTH`:return`SOUTH`;case`SOUTH`:return`NORTH`;case`EAST`:return`WEST`;case`WEST`:return`EAST`;default:return`UNDEFINED`}}const Tg={direction:{ggn:`org.eclipse.elk.direction`,elkjs:`elk.direction`,type:`str`},position:{ggn:`org.eclipse.elk.position`,elkjs:`elk.position`,type:`str`},edgeRouting:{ggn:`org.eclipse.elk.edgeRouting`,elkjs:`elk.edgeRouting`,type:`str`},"spacing.nodeNode":{ggn:`org.eclipse.elk.spacing.nodeNode`,elkjs:`elk.spacing.nodeNode`,type:`num`},"spacing.edgeEdge":{ggn:`org.eclipse.elk.spacing.edgeEdge`,elkjs:`elk.spacing.edgeEdge`,type:`num`},"spacing.nodeSelfLoop":{ggn:`org.eclipse.elk.spacing.nodeSelfLoop`,elkjs:`elk.spacing.nodeSelfLoop`,type:`num`},"spacing.portPort":{ggn:`org.eclipse.elk.spacing.portPort`,elkjs:`elk.spacing.portPort`,type:`num`},"spacing.edgeNode":{ggn:`org.eclipse.elk.spacing.edgeNode`,elkjs:`elk.spacing.edgeNode`,type:`num`},"spacing.edgeLabel":{ggn:`org.eclipse.elk.spacing.edgeLabel`,elkjs:`elk.spacing.edgeLabel`,type:`num`},"spacing.labelLabel":{ggn:`org.eclipse.elk.spacing.labelLabel`,elkjs:`elk.spacing.labelLabel`,type:`num`},"spacing.labelNode":{ggn:`org.eclipse.elk.spacing.labelNode`,elkjs:`elk.spacing.labelNode`,type:`num`},"spacing.edgeEdgeBetweenLayers":{ggn:`org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers`,elkjs:`elk.layered.spacing.edgeEdgeBetweenLayers`,type:`num`},"spacing.nodeNodeBetweenLayers":{ggn:`org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers`,elkjs:`elk.layered.spacing.nodeNodeBetweenLayers`,type:`num`},"spacing.edgeNodeBetweenLayers":{ggn:`org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers`,elkjs:`elk.layered.spacing.edgeNodeBetweenLayers`,type:`num`},"crossingMinimization.strategy":{ggn:`org.eclipse.elk.layered.crossingMinimization.strategy`,elkjs:`elk.layered.crossingMinimization.strategy`,type:`str`},"crossingMinimization.greedySwitch.type":{ggn:`org.eclipse.elk.layered.crossingMinimization.greedySwitch.type`,elkjs:`elk.layered.crossingMinimization.greedySwitch.type`,type:`str`},"cycleBreaking.strategy":{ggn:`org.eclipse.elk.layered.cycleBreaking.strategy`,elkjs:`elk.layered.cycleBreaking.strategy`,type:`str`},"layering.strategy":{ggn:`org.eclipse.elk.layered.layering.strategy`,elkjs:`elk.layered.layering.strategy`,type:`str`},"nodePlacement.strategy":{ggn:`org.eclipse.elk.layered.nodePlacement.strategy`,elkjs:`elk.layered.nodePlacement.strategy`,type:`str`},"considerModelOrder.strategy":{ggn:`org.eclipse.elk.layered.considerModelOrder.strategy`,elkjs:`elk.layered.considerModelOrder.strategy`,type:`str`},mergeEdges:{ggn:`org.eclipse.elk.layered.mergeEdges`,elkjs:`elk.layered.mergeEdges`,type:`bool`},mergeHierarchyEdges:{ggn:`org.eclipse.elk.layered.mergeHierarchyEdges`,elkjs:`elk.layered.mergeHierarchyEdges`,type:`bool`},feedbackEdges:{ggn:`org.eclipse.elk.layered.feedbackEdges`,elkjs:`elk.layered.feedbackEdges`,type:`bool`},thoroughness:{ggn:`org.eclipse.elk.layered.thoroughness`,elkjs:`elk.layered.thoroughness`,type:`num`},randomSeed:{ggn:`org.eclipse.elk.randomSeed`,elkjs:`elk.randomSeed`,type:`num`},separateConnectedComponents:{ggn:`org.eclipse.elk.separateConnectedComponents`,elkjs:`elk.separateConnectedComponents`,type:`bool`},hierarchyHandling:{ggn:`org.eclipse.elk.hierarchyHandling`,elkjs:`elk.hierarchyHandling`,type:`str`},portConstraints:{ggn:`org.eclipse.elk.portConstraints`,elkjs:`elk.portConstraints`,type:`str`},"insideSelfLoops.activate":{ggn:`org.eclipse.elk.insideSelfLoops.activate`,elkjs:`elk.insideSelfLoops.activate`,type:`bool`},generatePositionAndLayerIds:{ggn:`org.eclipse.elk.layered.generatePositionAndLayerIds`,elkjs:`elk.layered.generatePositionAndLayerIds`,type:`bool`},"nodeLabels.placement":{ggn:`org.eclipse.elk.nodeLabels.placement`,elkjs:`elk.nodeLabels.placement`,type:`enumset`,values:[`H_LEFT`,`H_CENTER`,`H_RIGHT`,`V_TOP`,`V_CENTER`,`V_BOTTOM`,`INSIDE`,`OUTSIDE`,`H_PRIORITY`]},"portLabels.placement":{ggn:`org.eclipse.elk.portLabels.placement`,elkjs:`elk.portLabels.placement`,type:`enumset`,values:[`OUTSIDE`,`INSIDE`,`NEXT_TO_PORT_IF_POSSIBLE`,`ALWAYS_SAME_SIDE`,`ALWAYS_OTHER_SAME_SIDE`,`SPACE_EFFICIENT`]},allowNonFlowPortsToSwitchSides:{ggn:`org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides`,elkjs:`elk.layered.allowNonFlowPortsToSwitchSides`,type:`bool`},directionCongruency:{ggn:`org.eclipse.elk.layered.directionCongruency`,elkjs:`elk.layered.directionCongruency`,type:`str`},portSortingStrategy:{ggn:`org.eclipse.elk.layered.portSortingStrategy`,elkjs:`elk.portSortingStrategy`,type:`str`},aspectRatio:{ggn:`org.eclipse.elk.aspectRatio`,elkjs:`elk.aspectRatio`,type:`num`},"edgeRouting.selfLoopDistribution":{ggn:`org.eclipse.elk.layered.edgeRouting.selfLoopDistribution`,elkjs:`elk.layered.edgeRouting.selfLoopDistribution`,type:`str`},"edgeRouting.selfLoopOrdering":{ggn:`org.eclipse.elk.layered.edgeRouting.selfLoopOrdering`,elkjs:`elk.layered.edgeRouting.selfLoopOrdering`,type:`str`},"nodePlacement.bk.fixedAlignment":{ggn:`org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment`,elkjs:`elk.layered.nodePlacement.bk.fixedAlignment`,type:`str`},"nodePlacement.bk.edgeStraightening":{ggn:`org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening`,elkjs:`elk.layered.nodePlacement.bk.edgeStraightening`,type:`str`},"layering.nodePromotion.strategy":{ggn:`org.eclipse.elk.layered.layering.nodePromotion.strategy`,elkjs:`elk.layered.layering.nodePromotion.strategy`,type:`str`},"considerModelOrder.portModelOrder":{ggn:`org.eclipse.elk.layered.considerModelOrder.portModelOrder`,elkjs:`elk.layered.considerModelOrder.portModelOrder`,type:`bool`},"edgeLabels.placement":{ggn:`org.eclipse.elk.edgeLabels.placement`,elkjs:`elk.edgeLabels.placement`,type:`str`},"spacing.labelPort":{ggn:`org.eclipse.elk.spacing.labelPortHorizontal`,elkjs:`elk.spacing.labelPortHorizontal`,type:`num`},"insideSelfLoops.yo":{ggn:`org.eclipse.elk.insideSelfLoops.yo`,elkjs:`elk.insideSelfLoops.yo`,type:`bool`},"nodeSize.constraints":{ggn:`org.eclipse.elk.nodeSize.constraints`,elkjs:`elk.nodeSize.constraints`,type:`enumset`,values:[`PORTS`,`PORT_LABELS`,`NODE_LABELS`,`MINIMUM_SIZE`]},"nodeSize.minimum":{ggn:`org.eclipse.elk.nodeSize.minimum`,elkjs:`elk.nodeSize.minimum`,type:`str`},"nodeSize.options":{ggn:`org.eclipse.elk.nodeSize.options`,elkjs:`elk.nodeSize.options`,type:`str`},"nodeLabels.padding":{ggn:`org.eclipse.elk.nodeLabels.padding`,elkjs:`elk.nodeLabels.padding`,type:`object`},"nodeLabels.spacing":{ggn:`org.eclipse.elk.nodeLabels.spacing`,elkjs:`elk.nodeLabels.spacing`,type:`num`},layerConstraint:{ggn:`org.eclipse.elk.layered.layering.layerConstraint`,elkjs:`elk.layered.layering.layerConstraint`,type:`str`},"layering.layerConstraint":{ggn:`org.eclipse.elk.layered.layering.layerConstraint`,elkjs:`elk.layered.layering.layerConstraint`,type:`str`},"layering.layerChoiceConstraint":{ggn:`org.eclipse.elk.layered.layering.layerChoiceConstraint`,elkjs:`elk.layered.layering.layerChoiceConstraint`,type:`num`},"crossingMinimization.positionChoiceConstraint":{ggn:`org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint`,elkjs:`elk.layered.crossingMinimization.positionChoiceConstraint`,type:`num`},"crossingMinimization.semiInteractive":{ggn:`org.eclipse.elk.layered.crossingMinimization.semiInteractive`,elkjs:`elk.layered.crossingMinimization.semiInteractive`,type:`bool`},algorithm:{ggn:`org.eclipse.elk.algorithm`,elkjs:`elk.algorithm`,type:`str`},"partitioning.partition":{ggn:`org.eclipse.elk.partitioning.partition`,elkjs:`elk.partitioning.partition`,type:`num`},"spacing.portNode":{ggn:`org.eclipse.elk.spacing.portNode`,elkjs:`elk.spacing.portNode`,type:`num`},"portAlignment.default":{ggn:`org.eclipse.elk.portAlignment.default`,elkjs:`elk.portAlignment.default`,type:`str`},"portAlignment.west":{ggn:`org.eclipse.elk.portAlignment.west`,elkjs:`elk.portAlignment.west`,type:`str`},"portAlignment.east":{ggn:`org.eclipse.elk.portAlignment.east`,elkjs:`elk.portAlignment.east`,type:`str`},"portAlignment.north":{ggn:`org.eclipse.elk.portAlignment.north`,elkjs:`elk.portAlignment.north`,type:`str`},"portAlignment.south":{ggn:`org.eclipse.elk.portAlignment.south`,elkjs:`elk.portAlignment.south`,type:`str`},commentBox:{ggn:`org.eclipse.elk.commentBox`,elkjs:`elk.commentBox`,type:`bool`},desiredPosition:{ggn:`org.eclipse.elk.desiredPosition`,elkjs:`elk.desiredPosition`,type:`str`},interactiveLayout:{ggn:`org.eclipse.elk.interactiveLayout`,elkjs:`elk.interactiveLayout`,type:`bool`},padding:{ggn:`org.eclipse.elk.padding`,elkjs:`elk.padding`,type:`object`},noLayout:{ggn:`org.eclipse.elk.noLayout`,elkjs:`elk.noLayout`,type:`bool`},expandNodes:{ggn:`org.eclipse.elk.expandNodes`,elkjs:`elk.expandNodes`,type:`bool`},debugMode:{ggn:`org.eclipse.elk.debugMode`,elkjs:`elk.debugMode`,type:`bool`},alignment:{ggn:`org.eclipse.elk.alignment`,elkjs:`elk.alignment`,type:`str`},contentAlignment:{ggn:`org.eclipse.elk.contentAlignment`,elkjs:`elk.contentAlignment`,type:`enumset`,values:[`V_TOP`,`V_CENTER`,`V_BOTTOM`,`H_LEFT`,`H_CENTER`,`H_RIGHT`]},"spacing.portsSurrounding":{ggn:`org.eclipse.elk.spacing.portsSurrounding`,elkjs:`elk.spacing.portsSurrounding`,type:`object`},"spacing.individual":{ggn:`org.eclipse.elk.spacing.individual`,elkjs:`elk.spacing.individual`,type:`str`},"spacing.commentComment":{ggn:`org.eclipse.elk.spacing.commentComment`,elkjs:`elk.spacing.commentComment`,type:`num`},"spacing.commentNode":{ggn:`org.eclipse.elk.spacing.commentNode`,elkjs:`elk.spacing.commentNode`,type:`num`},"spacing.componentComponent":{ggn:`org.eclipse.elk.spacing.componentComponent`,elkjs:`elk.spacing.componentComponent`,type:`num`},"portLabels.treatAsGroup":{ggn:`org.eclipse.elk.portLabels.treatAsGroup`,elkjs:`elk.portLabels.treatAsGroup`,type:`bool`},"partitioning.activate":{ggn:`org.eclipse.elk.partitioning.activate`,elkjs:`elk.partitioning.activate`,type:`bool`},fixedAlignment:{ggn:`org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment`,elkjs:`elk.layered.nodePlacement.bk.fixedAlignment`,type:`str`},edgeStraightening:{ggn:`org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening`,elkjs:`elk.layered.nodePlacement.bk.edgeStraightening`,type:`str`},mode:{ggn:`org.eclipse.elk.layered.edgeRouting.splines.mode`,elkjs:`elk.layered.edgeRouting.splines.mode`,type:`str`},"postCompaction.strategy":{ggn:`org.eclipse.elk.layered.compaction.postCompaction.strategy`,elkjs:`elk.layered.compaction.postCompaction.strategy`,type:`str`},"compaction.connectedComponents":{ggn:`org.eclipse.elk.layered.compaction.connectedComponents`,elkjs:`elk.layered.compaction.connectedComponents`,type:`bool`},"edgeLabels.sideSelection":{ggn:`org.eclipse.elk.layered.edgeLabels.sideSelection`,elkjs:`elk.layered.edgeLabels.sideSelection`,type:`str`},"edgeLabels.centerLabelPlacementStrategy":{ggn:`org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy`,elkjs:`elk.layered.edgeLabels.centerLabelPlacementStrategy`,type:`str`},"highDegreeNodes.threshold":{ggn:`org.eclipse.elk.layered.highDegreeNodes.threshold`,elkjs:`elk.layered.highDegreeNodes.threshold`,type:`num`},"highDegreeNodes.treatment":{ggn:`org.eclipse.elk.layered.highDegreeNodes.treatment`,elkjs:`elk.layered.highDegreeNodes.treatment`,type:`bool`},"highDegreeNodes.treeHeight":{ggn:`org.eclipse.elk.layered.highDegreeNodes.treeHeight`,elkjs:`elk.layered.highDegreeNodes.treeHeight`,type:`num`},"considerModelOrder.components":{ggn:`org.eclipse.elk.layered.considerModelOrder.components`,elkjs:`elk.layered.considerModelOrder.components`,type:`str`},"considerModelOrder.longEdgeStrategy":{ggn:`org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy`,elkjs:`elk.layered.considerModelOrder.longEdgeStrategy`,type:`str`},"considerModelOrder.crossingCounterNodeInfluence":{ggn:`org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence`,elkjs:`elk.layered.considerModelOrder.crossingCounterNodeInfluence`,type:`num`},"crossingMinimization.greedySwitchHierarchical.type":{ggn:`org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type`,elkjs:`elk.layered.crossingMinimization.greedySwitchHierarchical.type`,type:`str`},"crossingMinimization.forceNodeModelOrder":{ggn:`org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder`,elkjs:`elk.layered.crossingMinimization.forceNodeModelOrder`,type:`bool`},nodeFlexibility:{ggn:`org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility`,elkjs:`elk.layered.nodePlacement.networkSimplex.nodeFlexibility`,type:`str`},"nodeFlexibility.default":{ggn:`org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default`,elkjs:`elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default`,type:`str`},portPort:{ggn:`org.eclipse.elk.spacing.portPort`,elkjs:`elk.spacing.portPort`,type:`num`},nodeNode:{ggn:`org.eclipse.elk.spacing.nodeNode`,elkjs:`elk.spacing.nodeNode`,type:`num`},minimum:{ggn:`org.eclipse.elk.nodeSize.minimum`,elkjs:`elk.nodeSize.minimum`,type:`str`},"greedySwitch.type":{ggn:`org.eclipse.elk.layered.crossingMinimization.greedySwitch.type`,elkjs:`elk.layered.crossingMinimization.greedySwitch.type`,type:`str`},positionChoiceConstraint:{ggn:`org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint`,elkjs:`elk.layered.crossingMinimization.positionChoiceConstraint`,type:`num`},sideSelection:{ggn:`org.eclipse.elk.layered.edgeLabels.sideSelection`,elkjs:`elk.layered.edgeLabels.sideSelection`,type:`str`},"nodeSize.fixedGraphSize":{ggn:`org.eclipse.elk.nodeSize.fixedGraphSize`,elkjs:`elk.nodeSize.fixedGraphSize`,type:`bool`},"topdown.hierarchicalNodeWidth":{ggn:`org.eclipse.elk.topdown.hierarchicalNodeWidth`,elkjs:`elk.topdown.hierarchicalNodeWidth`,type:`num`},"topdown.hierarchicalNodeAspectRatio":{ggn:`org.eclipse.elk.topdown.hierarchicalNodeAspectRatio`,elkjs:`elk.topdown.hierarchicalNodeAspectRatio`,type:`num`},"topdownpacking.nodeArrangement.strategy":{ggn:`org.eclipse.elk.topdownpacking.nodeArrangement.strategy`,elkjs:`elk.topdownpacking.nodeArrangement.strategy`,type:`str`},"topdownpacking.whitespaceElimination.strategy":{ggn:`org.eclipse.elk.topdownpacking.whitespaceElimination.strategy`,elkjs:`elk.topdownpacking.whitespaceElimination.strategy`,type:`str`},"vertiflex.verticalConstraint":{ggn:`org.eclipse.elk.vertiflex.verticalConstraint`,elkjs:`elk.vertiflex.verticalConstraint`,type:`num`},"vertiflex.layoutStrategy":{ggn:`org.eclipse.elk.vertiflex.layoutStrategy`,elkjs:`elk.vertiflex.layoutStrategy`,type:`str`},"vertiflex.layerDistance":{ggn:`org.eclipse.elk.vertiflex.layerDistance`,elkjs:`elk.vertiflex.layerDistance`,type:`num`},"vertiflex.considerNodeModelOrder":{ggn:`org.eclipse.elk.vertiflex.considerNodeModelOrder`,elkjs:`elk.vertiflex.considerNodeModelOrder`,type:`bool`},"overlapRemoval.maxIterations":{ggn:`org.eclipse.elk.overlapRemoval.maxIterations`,elkjs:`elk.overlapRemoval.maxIterations`,type:`num`},"overlapRemoval.runScanline":{ggn:`org.eclipse.elk.overlapRemoval.runScanline`,elkjs:`elk.overlapRemoval.runScanline`,type:`bool`},"processingOrder.treeConstruction":{ggn:`org.eclipse.elk.processingOrder.treeConstruction`,elkjs:`elk.processingOrder.treeConstruction`,type:`str`},"processingOrder.spanningTreeCostFunction":{ggn:`org.eclipse.elk.processingOrder.spanningTreeCostFunction`,elkjs:`elk.processingOrder.spanningTreeCostFunction`,type:`str`},"processingOrder.rootSelection":{ggn:`org.eclipse.elk.processingOrder.rootSelection`,elkjs:`elk.processingOrder.rootSelection`,type:`str`},"processingOrder.preferredRoot":{ggn:`org.eclipse.elk.processingOrder.preferredRoot`,elkjs:`elk.processingOrder.preferredRoot`,type:`str`},"compaction.compactionStrategy":{ggn:`org.eclipse.elk.compaction.compactionStrategy`,elkjs:`elk.compaction.compactionStrategy`,type:`str`},"compaction.orthogonal":{ggn:`org.eclipse.elk.compaction.orthogonal`,elkjs:`elk.compaction.orthogonal`,type:`bool`},"structure.structureExtractionStrategy":{ggn:`org.eclipse.elk.structure.structureExtractionStrategy`,elkjs:`elk.structure.structureExtractionStrategy`,type:`str`},underlyingLayoutAlgorithm:{ggn:`org.eclipse.elk.underlyingLayoutAlgorithm`,elkjs:`elk.underlyingLayoutAlgorithm`,type:`str`},interactiveReferencePoint:{ggn:`org.eclipse.elk.layered.interactiveReferencePoint`,elkjs:`elk.layered.interactiveReferencePoint`,type:`str`},considerModelOrder:{ggn:`org.eclipse.elk.layered.considerModelOrder.strategy`,elkjs:`elk.layered.considerModelOrder.strategy`,type:`str`},portAlignment:{ggn:`org.eclipse.elk.portAlignment.default`,elkjs:`elk.portAlignment.default`,type:`str`}};function Eg(e){return e.replace(/\\(['"\\])/g,(e,t)=>t)}function Dg(e,t){let n=t.trim();if((n.startsWith(`"`)&&n.endsWith(`"`)||n.startsWith(`'`)&&n.endsWith(`'`))&&(n=n.slice(1,-1)),e.type===`num`){let e=Number(n);return Number.isFinite(e)?e:void 0}if(e.type===`bool`)return n.toLowerCase()===`true`;if(e.type===`enumset`){let t=n.match(/^\[([^\]]*)\]$/),r=(t?t[1]:n).split(/[\s,]+/).map(e=>e.trim()).filter(Boolean);if(e.values){for(let t of r)if(!e.values.includes(t))return}return r}if(e.type===`object`){let e=n.match(/^\[([^\]]*)\]$/);if(e){let t={};for(let n of e[1].split(/[,;]/)){let e=n.split(`=`);if(e.length===2){let n=Number(e[1].trim());if(!Number.isFinite(n))return;t[e[0].trim()]=n}}return t}let t=n.match(/^\(([\d.]+)\s*,\s*([\d.]+)\)$/);return t?{x:Number(t[1]),y:Number(t[2])}:void 0}return Eg(n)}function Og(e,t){let n={},r=t instanceof Map?t.entries():Object.entries(t);for(let[t,i]of r){let r=e[t];if(r===void 0)continue;let a=[];for(let t of i){let n=e[t];n!==void 0&&a.push(n)}n[r]=a}return n}function kg(e,t,n=null,r=null,i=`EAST`,a=!1,o=!1){let s=(e,t,n)=>{if(n&&e.getProperty(O)!==`FIXED_SIDE`)return Cg(e,t===`OUTPUT`?`OUTPUT`:`INPUT`,(t===`OUTPUT`?i:Ag[i]??`WEST`)??`EAST`,!0,!1);let r=new H;return r.setNode(e),r.setSide(t===`OUTPUT`?i:Ag[i]??`WEST`),r},c=n!==null&&n<e.getPorts().length?e.getPorts()[n]:s(e,`OUTPUT`,a),l=r!==null&&r<t.getPorts().length?t.getPorts()[r]:s(t,`INPUT`,o),u=new U;return u.setSource(c),u.setTarget(l),u}const Ag={NORTH:`SOUTH`,SOUTH:`NORTH`,EAST:`WEST`,WEST:`EAST`};function jg(e,t){let n=e.split(`.`),r=t.split(`.`),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;return i===0?null:n.slice(0,i).join(`.`)}function Mg(e){return String(e).trim().toLowerCase().replace(/^org\.eclipse\.elk\./,``).replace(/^elk\./,``)}function Ng(e,t,n,r){let i=n(e),a=n(t);if(i===null&&a===null)return;let o=jg(e,t);if(o===null||!r(o)&&n(o)===null)throw Error(`UnsupportedGraphException: The source or the target of edge could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN.`)}function Pg(e,t){for(let[n,r]of Object.entries(t)){let t=Tg[n];if(!t)continue;let i=typeof r==`object`&&r&&!Array.isArray(r)?r:Dg(t,String(r));if(i!==void 0){if(t.ggn===`org.eclipse.elk.nodeSize.minimum`&&typeof i==`string`){let[e,t]=String(i).replace(/[()]/g,``).split(`,`).map(Number);i={x:e,y:t}}if(t.ggn===`org.eclipse.elk.padding`){let t=i;if(typeof t!=`object`||!t||t.top===void 0&&t.left===void 0&&t.right===void 0&&t.bottom===void 0)continue;e.setPadding({top:t.top??0,left:t.left??0,right:t.right??0,bottom:t.bottom??0})}else e.setProperty(t.ggn,i)}}}function Fg(t,n=`graph`){let{nodes:r,edges:i,hierarchy:a,graphProps:o,nodeProps:s}=t,c=r.length,l=Object.create(null);for(let e=0;e<c;e++){let t=r[e];l[t]===void 0&&(l[t]=e)}let u=Og(l,a),d=String(o.direction??`RIGHT`).toUpperCase(),f=new rr,p=/* @__PURE__ */ new Map,m=/* @__PURE__ */ new Map,h=new Int32Array(c);h.fill(-1);for(let e of Object.keys(u)){let t=Number(e);m.set(t,new rr);for(let e of u[t])h[e]===-1&&(h[e]=t)}for(let e=0;e<c;e++){let t=r[e],n=s.get(t)??{},i=h[e],o=new V(i===-1?f:m.get(i));o.size={x:n.width??60,y:n.height??30},n.x!==void 0&&(o.position.x=n.x),n.y!==void 0&&(o.position.y=n.y),n.portConstraints&&o.setProperty(O,n.portConstraints),(n[`insideSelfLoops.activate`]===`true`||n[`insideSelfLoops.activate`]===!0)&&o.setProperty(Ae,!0);for(let[e,t]of Object.entries(n)){if(e.startsWith(`_`)||e===`ports`||e===`children`||e===`labels`||e===`width`||e===`height`||e===`portConstraints`||e===`insideSelfLoops.activate`)continue;let n=Tg[e];if(!n)continue;let r=typeof t==`object`&&t&&!Array.isArray(t)?t:Dg(n,String(t));if(r!==void 0){if(n.ggn===`org.eclipse.elk.nodeSize.minimum`&&typeof r==`string`){let[e,t]=String(r).replace(/[()]/g,``).split(`,`).map(Number);r={x:e,y:t}}if(n.ggn===`org.eclipse.elk.position`&&typeof r==`string`){let[e,t]=String(r).replace(/[()]/g,``).split(`,`).map(Number);r={x:e,y:t}}o.setProperty(n.ggn,r)}}for(let e of n.ports??[]){let t=e.side??null,n=new H;n.setNode(o),n.getPosition().x=e.x??0,n.getPosition().y=e.y??0,n.size={x:e.w??8,y:e.h??8},e.borderOffset!==void 0&&e.borderOffset!==null&&n.setProperty(E,e.borderOffset),t&&n.setSide(t),e.index!==null&&e.index!==void 0&&n.setProperty(Fe,e.index),(e.labels??[]).length>0&&n.setLabels((e.labels??[]).map(e=>({text:e.text??``,position:{x:e.x??0,y:e.y??0},size:{x:e.width??0,y:e.height??0}})))}if((n.labels??[]).length>0&&o.setLabels((n.labels??[]).map(e=>({text:e.text??``,position:{x:e.x??0,y:e.y??0},size:{x:e.width??0,y:e.height??0},placement:e.placement??void 0}))),(a.get(t)??[]).length>0){let t=m.get(e);if(t){let e=typeof n.padding==`object`?n.padding:n.padding?Dg(Tg.padding,String(n.padding)):null,r=e===null||!(e=>e!==null&&(e.top!==void 0||e.left!==void 0||e.right!==void 0||e.bottom!==void 0))(e)?{top:12,left:12,right:12,bottom:12}:{top:e.top??0,left:e.left??0,right:e.right??0,bottom:e.bottom??0},i=n[`nodeLabels.placement`],a=0,o=0,s=0,c=0;for(let e of n.labels??[]){let t=e.placement??i??``;if(!t)continue;let n=String(t).replace(/[\[\]]/g,``).split(/[\s,]+/).filter(Boolean);n.includes(`INSIDE`)&&(n.includes(`V_TOP`)?a=Math.max(a,e.height??0):n.includes(`V_BOTTOM`)?o=Math.max(o,e.height??0):(n.includes(`H_LEFT`)&&(s=Math.max(s,e.width??0)),n.includes(`H_RIGHT`)&&(c=Math.max(c,e.width??0))))}let l=n[`nodeLabels.padding`]??{top:5,right:5,bottom:5,left:5},u=Number(n[`spacing.labelLabel`]??0),d=typeof l==`object`?l.top??5:5,f=typeof l==`object`?l.bottom??5:5,p=typeof l==`object`?l.left??5:5,m=typeof l==`object`?l.right??5:5,h=(e,t)=>e>0?e+t+2*u:0;t.setPadding({top:r.top+h(a,d),bottom:r.bottom+h(o,f),left:r.left+h(s,p),right:r.right+h(c,m)})}}p.set(e,o)}for(let e of Object.keys(u).map(Number)){let t=p.get(e),n=m.get(e);t.setNestedGraph(n),n.setParentNode(t);let i=(s.get(r[e])??{}).mergeEdges;(i===!0||i===`true`)&&n.setProperty(nn,!0)}(o.mergeEdges===!0||o.mergeEdges===`true`)&&f.setProperty(nn,!0);let g=/* @__PURE__ */ new Map;for(let[e,t]of Object.entries(u)){let n=Number(e);for(let e of t)g.set(e,n)}let _=(e,t)=>{let n=/* @__PURE__ */ new Set,r=e;for(;r!==void 0;)n.add(r),r=g.get(r);let i=t;for(;i!==void 0&&!n.has(i);)i=g.get(i);if(i===void 0)return f;let a=g.get(i);return a===void 0?f:m.get(a)??f},v=e=>{let t=s.get(e);return t!==void 0&&t.algorithm!==void 0&&Mg(t.algorithm)!==`layered`},y=e=>{let t=e.lastIndexOf(`.`);for(;t!==-1;){let n=e.slice(0,t);if(v(n))return n;t=n.lastIndexOf(`.`)}return null};for(let[t,n,r,a,o,c,u]of i){Ng(t,r,y,v);let i=l[t],f=l[r];if(i===void 0||f===void 0)continue;let m=n===null?-1:(s.get(t)?.ports??[]).findIndex(e=>e.id===n),h=a===null?-1:(s.get(r)?.ports??[]).findIndex(e=>e.id===a),g={RIGHT:`EAST`,LEFT:`WEST`,DOWN:`SOUTH`,UP:`NORTH`}[d]??`EAST`,b=(m<0||m>=p.get(i).getPorts().length)&&_(i,f).getProperty(nn)===!0,x=(h<0||h>=p.get(f).getPorts().length)&&p.get(f).getGraph()?.getProperty(nn)===!0,S=kg(p.get(i),p.get(f),m>=0?m:null,h>=0?h:null,g,b,x);if(o===!0&&S.setProperty(e,!0),u!=null&&S.setProperty(Ye,u),c!=null&&c.length>0)for(let e of c)S.getLabels().push({text:e.text??``,position:{x:0,y:0},size:{x:e.width??0,y:e.height??0},placement:e.placement??void 0})}return Object.keys(u).length>0&&f.setProperty(mn,`INCLUDE_CHILDREN`),f.setProperty(S,d),Pg(f,o),f.hasProperty(me)||f.setProperty(me,1),{graph:f,nodeOf:p,nodeCount:c,edgeCount:i.length,hasHierarchy:Object.keys(u).length>0,name:n}}function Ig(e={}){let t={};for(let[n,r]of Object.entries(e)){let e=null;for(let[t,r]of Object.entries(Tg))if(r.ggn===n||r.elkjs===n){e=t;break}t[e??n.replace(/^org\.eclipse\.elk\./,``).replace(/^layered\./,``)]=r}return t}function Lg(e,t={}){let n=t.stripNPrefix!==!1,r=t.blackBoxIds instanceof Set?t.blackBoxIds:/* @__PURE__ */ new Set,i=[],a=/* @__PURE__ */ new Set;for(let e of r)a.add(n?String(e).replace(/^N/,``):String(e));let o=/* @__PURE__ */ new Map;if(a.size>0){let t=(e,r)=>{let i=n?String(e.id).replace(/^N/,``):String(e.id),s=a.has(i)?i:r;for(let r of e.children??[]){let e=n?String(r.id).replace(/^N/,``):String(r.id);s!==null&&o.set(e,s),t(r,s)}};t(e,null)}let s=[],c=/* @__PURE__ */ new Map,l={},u=/* @__PURE__ */ new Map,d=/* @__PURE__ */ new Set,f=(e,t)=>{let a=n?e.id.replace(/^N/,``):e.id;if(d.has(a)||(d.add(a),i.push(a)),t!=null){let e=c.get(t)??[];e.includes(a)||e.push(a),c.set(t,e)}let o={width:e.width??60,height:e.height??30,x:e.x,y:e.y},s=(n?`N`+a:a)+`.`,l=e.ports??[];o.ports=l.map(e=>{let t=Ig(e.properties??{}),n={id:e.id&&e.id.startsWith(s)?e.id.slice(s.length):e.id,w:0,h:0};e.x!==void 0&&(n.x=e.x),e.y!==void 0&&(n.y=e.y),n.w=e.width??0,n.h=e.height??0,t[`port.side`]!==void 0&&(n.side=t[`port.side`]===`UNDEFINED`?null:t[`port.side`]),t[`port.index`]!==void 0&&(n.index=Number(t[`port.index`])),t[`port.borderOffset`]!==void 0&&(n.borderOffset=Number(t[`port.borderOffset`]));let r=e.labels??[];return r.length>0&&(n.labels=r.map(e=>{let t={text:e.text??``,width:e.width??0,height:e.height??0};return e.x!==void 0&&(t.x=e.x,t.y=e.y),t})),n}),l.length===0&&delete o.ports;let p=e.labels??[];if(o.labels=p.map(e=>{let t=Ig(e.layoutOptions??{}),n={text:e.text??``,width:e.width??0,height:e.height??0};return e.x!==void 0&&(n.x=e.x),e.y!==void 0&&(n.y=e.y),t[`nodeLabels.placement`]!==void 0&&(n.placement=t[`nodeLabels.placement`]),n}),p.length===0&&delete o.labels,Object.assign(o,Ig(e.layoutOptions??{})),u.set(a,o),!(r.has(e.id)||r.has(a)))for(let t of e.children??[])f(t,a)};for(let t of e.children??[])f(t,null);Object.assign(l,Ig(e.layoutOptions??{}));let p=e=>{let t=n?String(e??``).replace(/^N/,``):String(e??``);if(d.has(t))return[t,null];let r=t.lastIndexOf(`.`);return r!==-1&&d.has(t.slice(0,r))?[t.slice(0,r),t.slice(r+1)]:[t,null]},m=e=>{if(!(r.has(e.id)||r.has(n?String(e.id).replace(/^N/,``):e.id))){for(let t of e.edges??[]){if(a.size>0){let e=t.sources?.[0]??t.source,r=t.targets?.[0]??t.target;if(e!==void 0&&r!==void 0){let t=e=>n?String(e).replace(/^N/,``):String(e);Ng(t(e),t(r),e=>{if(o.has(e))return o.get(e);let t=e.lastIndexOf(`.`);return t!==-1&&o.has(e.slice(0,t))?o.get(e.slice(0,t)):null},e=>a.has(e))}}let[e,r]=p(t.sources?.[0]??t.source),[i,c]=p(t.targets?.[0]??t.target),l=Ig(t.properties??{}),u=l[`insideSelfLoops.yo`]===`true`,d=l[`edge.thickness`]===void 0?null:Number(l[`edge.thickness`]),f=(t.labels??[]).map(e=>{let t=Ig(e.layoutOptions??{})[`edgeLabels.placement`]??e.placement??null;return{text:e.text??``,width:e.width??0,height:e.height??0,placement:t}});s.push([e,r,i,c,u,f,d])}for(let t of e.children??[])m(t)}};return m(e),{nodes:i,edges:s,hierarchy:c,graphProps:l,nodeProps:u}}let Rg=/* @__PURE__ */ function(e){return e.INVALID_INPUT=`INVALID_INPUT`,e.MISSING_ID=`MISSING_ID`,e.DUPLICATE_ID=`DUPLICATE_ID`,e.NEGATIVE_SIZE=`NEGATIVE_SIZE`,e.NON_FINITE_SIZE=`NON_FINITE_SIZE`,e.EMPTY_ENDPOINTS=`EMPTY_ENDPOINTS`,e.DANGLING_ENDPOINT=`DANGLING_ENDPOINT`,e.MULTI_ENDPOINTS=`MULTI_ENDPOINTS`,e.UNSUPPORTED_ALGORITHM=`UNSUPPORTED_ALGORITHM`,e.CYCLIC_REFERENCE=`CYCLIC_REFERENCE`,e.INTERNAL_ERROR=`INTERNAL_ERROR`,e.ABORTED=`ABORTED`,e}({});var zg=class extends Error{code;path;retryable;phase;details;constructor(e,t,n,r={}){super(`${e} at ${t||`root`}: ${n}`,r.cause===void 0?void 0:{cause:r.cause}),this.name=`LayoutError`,this.code=e,this.path=t,this.retryable=!1,this.phase=r.phase,this.details=r.details,Object.setPrototypeOf(this,new.target.prototype)}toJSON(){let e={name:this.name,code:this.code,path:this.path,message:this.message,retryable:this.retryable};return this.phase!==void 0&&(e.phase=this.phase),this.details!==void 0&&(e.details=this.details),e}};function Bg(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Vg(e,t){return e?`${e}.${t}`:t}function Hg(e,t,n){return`${e?`${e}.`:``}${t}[${n}]`}function Ug(e,t,n,r){e.push({code:t,path:n,message:`${t} at ${n||`root`}: ${r}`,retryable:!1})}function Wg(e,t,n){typeof e!=`number`||!Number.isFinite(e)?Ug(n,`NON_FINITE_SIZE`,t,`size must be a finite number`):e<0&&Ug(n,`NEGATIVE_SIZE`,t,`size must be greater than or equal to zero`)}function Gg(e,t,n){for(let r of[`width`,`height`])r in e&&Wg(e[r],Vg(t,r),n)}function Kg(e,t,n,r){let i=e.layoutOptions;if(Bg(i))for(let e of[`org.eclipse.elk.algorithm`,`elk.algorithm`]){if(!(e in i))continue;let a=i[e];(typeof a!=`string`||a.trim()!==``)&&(bt(a)||Ug(r,`UNSUPPORTED_ALGORITHM`,Vg(t,`layoutOptions.${e}`),`algorithm ${JSON.stringify(a)} on node ${JSON.stringify(n??`root`)} is not supported`))}}function qg(e,t,n,r,i,a){if(!Bg(e)){Ug(n,a?`INVALID_INPUT`:`MISSING_ID`,t||`root`,a?`root input must be a plain object`:`child node must be a plain object with a non-empty string id`);return}if(i.has(e)){Ug(n,`CYCLIC_REFERENCE`,t||`root`,`object is referenced more than once in the input tree (cycle or shared reference)`);return}i.add(e);let o=e.id,s=typeof o==`string`&&o.trim().length>0;s?r.nodeIds.has(o)?Ug(n,`DUPLICATE_ID`,t||`root`,`node id ${JSON.stringify(o)} is duplicated`):r.nodeIds.add(o):Ug(n,a?`INVALID_INPUT`:`MISSING_ID`,a?`root`:t,a?`root input must have a non-empty string id`:`child node must have a non-empty string id`),Gg(e,t,n),Kg(e,t,s?o:void 0,n);let c=s?o:void 0,l=e.ports;if(Array.isArray(l))for(let e=0;e<l.length;e+=1){let i=l[e],a=Hg(t,`ports`,e);if(!Bg(i))continue;Gg(i,a,n);let o=i.id;c!==void 0&&typeof o==`string`&&o.trim().length>0&&(r.portRefs.add(`${c}.${o}`),r.portRefs.add(o))}let u=e.children;if(Array.isArray(u))for(let e=0;e<u.length;e+=1)qg(u[e],Hg(t,`children`,e),n,r,i,!1)}function Jg(e,t){if(t.nodeIds.has(e))return!0;let n=e.lastIndexOf(`.`);return n!==-1&&t.nodeIds.has(e.slice(0,n))}function Yg(e,t,n,r){if(!Bg(e))return;let i=e.edges;if(!Array.isArray(i))return;for(let e=0;e<i.length;e+=1){let a=i[e],o=Hg(t,`edges`,e);if(!Bg(a))Ug(n,`EMPTY_ENDPOINTS`,o,`edge must contain non-empty sources and targets arrays`);else for(let e of[`sources`,`targets`]){let t=a[e],i=Vg(o,e);if(!Array.isArray(t)||t.length===0||t.some(e=>typeof e!=`string`)){Ug(n,`EMPTY_ENDPOINTS`,i,`${e} must be a non-empty string array`);continue}if(t.length>1){Ug(n,`MULTI_ENDPOINTS`,i,`${e} must contain exactly one endpoint (hyperedge not supported in P0)`);continue}let s=t[0];Jg(s,r)||Ug(n,`DANGLING_ENDPOINT`,`${i}[0]`,`endpoint reference ${JSON.stringify(s)} does not resolve to a node or port`)}}let a=e.children;if(Array.isArray(a))for(let e=0;e<a.length;e+=1)Yg(a[e],Hg(t,`children`,e),n,r)}function Xg(e){let t=[];if(!Bg(e))return Ug(t,`INVALID_INPUT`,`root`,`root input must be a plain object`),t;let n={nodeIds:/* @__PURE__ */ new Set,portRefs:/* @__PURE__ */ new Set};return qg(e,``,t,n,/* @__PURE__ */ new WeakSet,!0),Yg(e,``,t,n),t}function Zg(e){let t=Xg(e),n=t[0];if(n!==void 0)throw new zg(n.code,n.path,n.message,{phase:`validate`,details:{issues:t}})}function Qg(e,t){if(Array.isArray(e)){let n=[];t&&t.set(e,n);for(let r of e)n.push(Qg(r,t));return n}if(typeof e==`object`&&e){let n=t?.get(e);if(n!==void 0)return n;let r={};t&&t.set(e,r);for(let[n,i]of Object.entries(e))Object.defineProperty(r,n,{value:Qg(i,t),enumerable:!0,writable:!0,configurable:!0});return r}return e}function $g(e,t,n,r){if(e?.signal?.aborted)throw new zg(`ABORTED`,`root`,`布局在 ${t} 阶段被取消`,{phase:t});if(e?.onProgress?.({phase:t,completed:n,...r===void 0?{}:{graphId:r}}),e?.signal?.aborted)throw new zg(`ABORTED`,`root`,`布局在 ${t} 阶段回调后被取消`,{phase:t})}function e_(e,t,n){let r={...t?.layoutOptions??{},...e.layoutOptions??{}},i=Lg(e,{stripNPrefix:!1,blackBoxIds:n});if(Object.assign(i.graphProps,Ig(t?.layoutOptions??{})),t?.direction&&(i.graphProps.direction=t.direction),t?.randomSeed!==void 0&&(i.graphProps.randomSeed=String(t.randomSeed)),t?.hierarchyHandling&&(i.graphProps.hierarchyHandling=t.hierarchyHandling),i.graphProps.direction===void 0&&(i.graphProps.direction=r[`org.eclipse.elk.direction`]??r[`elk.direction`]??`RIGHT`),i.graphProps.randomSeed===void 0&&(i.graphProps.randomSeed=`1`),i.graphProps.hierarchyHandling===void 0){let t=(e.children??[]).some(e=>(e.children?.length??0)>0);i.graphProps.hierarchyHandling=t?`INCLUDE_CHILDREN`:`OFF`}let a=Fg(i,e.id),o=/* @__PURE__ */ new Map,s=/* @__PURE__ */ new Map;for(let[e,t]of a.nodeOf){let r=i.nodes[e];o.set(t,r),s.set(r,t),n?.has(r)&&t.setProperty(mn,`SEPARATE_CHILDREN`)}let c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map;for(let[e,t]of a.nodeOf){let n=i.nodes[e],r=i.nodeProps.get(n)?.ports??[],a=t.getPorts();for(let e=0;e<r.length&&e<a.length;e++){let t=`${n}.${r[e].id}`;c.set(t,a[e]),l.set(a[e],t)}}let u=/* @__PURE__ */ new Map;u.set(a.graph,e.id);let d=e=>{for(let t of e.getAllNodes()){let e=t.getNestedGraph();if(e){let n=o.get(t);n!==void 0&&u.set(e,n),d(e)}}};d(a.graph);let f=/* @__PURE__ */ new Set,p=e=>{for(let t of e.getAllNodes()){for(let e of t.getPorts())for(let t of e.getOutgoingEdges())f.add(t);let e=t.getNestedGraph();e&&p(e)}};return p(a.graph),{graph:a.graph,nodeOf:s,portOf:c,nodeRef:o,portRef:l,edgeSet:f,graphToNodeId:u,root:e}}function t_(e){let t=e.getSource()?.getNode(),n=e.getTarget()?.getNode();if(!t||!n)return null;if(t===n)return t.getGraph()?.getParentNode()??null;let r=/* @__PURE__ */ new Set,i=t;for(;i;)r.add(i),i=i.getGraph()?.getParentNode()??null;for(i=n;i;){if(r.has(i))return i;i=i.getGraph()?.getParentNode()??null}return null}function n_(e,t){let n={...t.root};delete n.children,delete n.edges;let r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Map,s=(e,t,n)=>JSON.stringify([e,t,n]),c=e=>{if(i.has(e))return e;let t=e.lastIndexOf(`.`),n=t===-1?e:e.slice(0,t);return i.has(n)?n:null},l=(e,t)=>{let r=c(String(e[0]??``)),i=c(String(t[0]??``));if(r===null||i===null||r===i)return r===null?n.id:a.get(r)??n.id;let o=/* @__PURE__ */ new Set,s=r;for(;s!==null;)o.add(s),s=a.get(s)??null;for(s=i;s!==null&&!o.has(s);)s=a.get(s)??null;return s??n.id},u=(e,t)=>{i.set(e.id,e),a.set(e.id,t);for(let t of e.children??[])u(t,e.id)},d=e=>{for(let t of e.edges??[]){let n={edge:t,consumed:!1},r=e=>{let r=s(e,String(t.sources?.[0]??``),String(t.targets?.[0]??``)),i=o.get(r)??[];i.includes(n)||i.push(n),o.set(r,i)};r(e.id);let i=l(t.sources??[],t.targets??[]);i!==e.id&&r(i)}for(let t of e.children??[])d(t)};u(t.root,null),d(t.root);let f=(e,t,n)=>{let r=o.get(s(e,String(t[0]??``),String(n[0]??``)));for(;r&&r.length>0;){let e=r.shift();if(!e.consumed)return e.consumed=!0,e.edge}};function p(e,n){let a=[];n.children=a;for(let n of e.getAllNodes()){let e=t.nodeRef.get(n);if(e===void 0)continue;let o=i.get(e),s=o?{...o,x:n.position.x,y:n.position.y,width:n.size.x,height:n.size.y}:{id:e,x:n.position.x,y:n.position.y,width:n.size.x,height:n.size.y};delete s.children,delete s.edges,r.set(s.id,s),a.push(s);let c=n.getNestedGraph();c&&p(c,s)}}p(e,n);let m=/* @__PURE__ */ new Set,h=/* @__PURE__ */ new Map;function g(e){for(let r of e.getAllNodes()){for(let e of r.getPorts())for(let r of e.getOutgoingEdges()){if(m.has(r)||!t.edgeSet.has(r))continue;m.add(r);let e=t_(r),i=h.get(e)??[];h.set(e,i);let{source:a,target:o}=uc(r),s=[r_(r.getSource(),t)],c=[r_(r.getTarget(),t)],l=r.getBendPoints().map(e=>({x:e.x,y:e.y})),u={startPoint:a,endPoint:o};l.length>0&&(u.bendPoints=l);let d=e===null?n.id:t.nodeRef.get(e)??n.id,p=f(d,s,c);i.push(p?{...p,sources:s,targets:c,sections:[u],container:d}:{sources:s,targets:c,sections:[u],container:d})}let e=r.getNestedGraph();e&&g(e)}}g(e);let _=h.get(null);_&&_.length>0&&(n.edges=_);for(let[e,n]of h){if(e===null)continue;let i=t.nodeRef.get(e);if(i===void 0)continue;let a=r.get(i);a&&(a.edges=n)}return n}function r_(e,t){return t.portRef.get(e)??(e.getNode()?t.nodeRef.get(e.getNode())??String(e.getNode().id):`?`)}function i_(e,t,n=/* @__PURE__ */ new Map,r=!0){let i=t?.layoutOptions?.[`org.eclipse.elk.algorithm`]??t?.layoutOptions?.[`elk.algorithm`]??e.layoutOptions?.[`org.eclipse.elk.algorithm`]??e.layoutOptions?.[`elk.algorithm`];i!==void 0&&String(i).trim()!==``&&n.set(e.id,Dt(String(i)));for(let t of e.children??[])i_(t,void 0,n,!1);return n}function a_(e,t,n){let r=/* @__PURE__ */ new Map,i=e=>{r.set(e.id,e);for(let t of e.children??[])i(t)};i(e);let a=/* @__PURE__ */ new Map,o=(e,t)=>{a.set(e.id,t);for(let n of e.children??[])o(n,t+1)};o(e,0);let s=[...t.entries()].filter(([,e])=>Cn.has(e)||gn.has(e)||yn.has(e)||Xt.has(e)||_t.has(e)||sn.has(e)||On.has(e)||rn.has(e)||lt.has(e)).sort((e,t)=>(a.get(t[0])??0)-(a.get(e[0])??0));for(let[e,t]of s){let i=r.get(e);if(i===void 0||(i.children?.length??0)===0)continue;let a=nr(t);if(a===void 0)throw Error(`[layout] 布局算法 '${t}' 未注册 (本入口未包含该算法; 非 layered 算法请用完整入口 src/index.ts)`);a(i),n?.(i)===!0&&a(i)}}function o_(e,t){if(t.size===0)return;let n=(e,t)=>e.id===t?e:(e.children??[]).map(e=>n(e,t)).find(Boolean)??null,r=[],i=e=>{for(let t of e.edges??[])r.push({e:t,holder:e});for(let t of e.children??[])i(t)};i(e);let a=/* @__PURE__ */ new Map;for(let r of t){let t=n(e,r);if(t===null)continue;let i=/* @__PURE__ */ new Set,o=e=>{i.add(e.id);for(let t of e.children??[])o(t)};o(t),a.set(r,i)}let o=[...a.entries()].sort((e,t)=>t[0].length-e[0].length),s=e=>{if(c.has(e))return e;let t=e.lastIndexOf(`.`);return t!==-1&&c.has(e.slice(0,t))?e.slice(0,t):null},c=/* @__PURE__ */ new Set;for(let e of a.values())for(let t of e)c.add(t);for(let{e:t,holder:i}of r){let r=String(t.sources?.[0]??``),a=String(t.targets?.[0]??``),c=s(r),l=s(a);if(c!==null&&l!==null)for(let[r,a]of o){if(!a.has(c)||!a.has(l))continue;let o=n(e,r);if(o!==null){o.edges??=[],o.edges.push(t);let e=(i.edges??[]).indexOf(t);e!==-1&&i.edges.splice(e,1)}break}}}function s_(e,t){let n=e=>e.id===t?e:(e.children??[]).map(n).find(Boolean)??null;return(n(e)?.children?.length??0)>0}function c_(e,t){let n=t?.control,r=typeof e?.id==`string`?e.id:void 0;$g(n,`validate`,1,r),Zg(e),$g(n,`clone`,2,r);let i=Qg(e);$g(n,`dispatch`,3,r);let a=i_(i,t);for(let[e,t]of a)if(!Cn.has(t)&&!Rt.has(t)&&!gn.has(t)&&!yn.has(t)&&!Xt.has(t)&&!_t.has(t)&&!sn.has(t)&&!On.has(t)&&!rn.has(t)&&!lt.has(t))throw new zg(`UNSUPPORTED_ALGORITHM`,`nodes.${e}`,`布局算法 '${t}' 尚未移植 (节点 ${e}); 移植清单见 docs/NON-LAYERED-PORTING.md`,{phase:`dispatch`});let o=new Set([...a.entries()].filter(([,e])=>Cn.has(e)||gn.has(e)||yn.has(e)||Xt.has(e)||_t.has(e)||sn.has(e)||On.has(e)||rn.has(e)||lt.has(e)).map(([e])=>e).filter(e=>s_(i,e)));o.size>0&&(o_(i,o),a_(i,a,t?.onBlackBoxLaidOut));let s=a.get(i.id);if(s!==void 0&&!Rt.has(s)){let e=new Set([...o].filter(e=>e!==i.id));return e.size>0&&(o_(i,e),a_(i,new Map([...a.entries()].filter(([e])=>e!==i.id)),t?.onBlackBoxLaidOut)),a_(i,/* @__PURE__ */ new Map([[i.id,s]]),t?.onBlackBoxLaidOut),g_(i,h_(i,t),i),l_(i),$g(n,`extract`,4,r),$g(n,`format`,5,r),u_(i,t)}let c=e_(i,t,o);new vg().layout(c.graph),$g(n,`extract`,4,r);let l=n_(c.graph,c);return l_(l,c.graph),o.size>0&&__(l,i,o),g_(l,h_(i,t),i),$g(n,`format`,5,r),u_(l,t)}function l_(e,t){e.x??=0,e.y??=0,e.width===void 0&&(e.width=t?.getActualSize().x??0),e.height===void 0&&(e.height=t?.getActualSize().y??0)}function u_(e,t){let n=t?.responseFormat??`full`;return n===`summary`?p_(e):n===`concise`?d_(e):t?.pick===void 0?e:f_(e,t.pick)}function d_(e){let t={id:e.id,x:e.x,y:e.y,width:e.width,height:e.height};return e.children!==void 0&&(t.children=e.children.map(d_)),e.edges!==void 0&&(t.edges=e.edges.flatMap(e=>{let t=e.sections?.[0],n={...e.id===void 0?{}:{id:e.id},sources:[...e.sources],targets:[...e.targets]};return t!==void 0&&(n.sections=[{startPoint:{...t.startPoint},endPoint:{...t.endPoint}}]),[n]})),t}function f_(e,t){let n={id:e.id,x:e.x,y:e.y,width:e.width,height:e.height};for(let r of t)r in e&&r!==`children`&&r!==`edges`&&r!==`id`&&r!==`x`&&r!==`y`&&r!==`width`&&r!==`height`&&(n[r]=e[r]);return e.children!==void 0&&(n.children=e.children.map(e=>f_(e,t))),e.edges!==void 0&&(n.edges=e.edges),n}function p_(e){let t=[],n=[],r=(e,i)=>{i&&t.push({id:e.id,x:e.x,y:e.y,width:e.width,height:e.height});for(let t of e.edges??[]){let e=t.sections?.[0],r=t.sources[0],i=t.targets[0];e!==void 0&&r!==void 0&&i!==void 0&&n.push({...t.id===void 0?{}:{id:t.id},sources:[r],targets:[i],startPoint:{...e.startPoint},endPoint:{...e.endPoint}})}for(let t of e.children??[])r(t,!0)};r(e,!1);let i={nodes:t,edges:n};return typeof e.width==`number`&&(i.width=e.width),typeof e.height==`number`&&(i.height=e.height),i}function m_(e){return e===`shapeCoords`||e.endsWith(`json.shapeCoords`)?`org.eclipse.elk.json.shapeCoords`:e===`edgeCoords`||e.endsWith(`json.edgeCoords`)?`org.eclipse.elk.json.edgeCoords`:e.startsWith(`org.eclipse.elk.`)?e:e.replace(/^elk\./,`org.eclipse.elk.`)}function h_(e,t){let n=e=>{let t={};for(let[n,r]of Object.entries(e??{}))t[m_(n)]=r;return t},r=n(e.layoutOptions);for(let[e,i]of Object.entries(n(t?.layoutOptions)))r[e]=i;let i=e=>{let t=n(e)[`org.eclipse.elk.json.shapeCoords`];return t===`ROOT`||t===`PARENT`||t===`INHERIT`?t:void 0},a=e=>{let t=n(e)[`org.eclipse.elk.json.edgeCoords`];return t===`ROOT`||t===`PARENT`||t===`CONTAINER`||t===`INHERIT`?t:void 0},o=r[`org.eclipse.elk.json.shapeCoords`],s=r[`org.eclipse.elk.json.edgeCoords`],c=o===`ROOT`||o===`PARENT`?o:`PARENT`,l=s===`ROOT`||s===`PARENT`||s===`CONTAINER`?s:`CONTAINER`,u=/* @__PURE__ */ new Map,d=/* @__PURE__ */ new Map,f=(e,t,n,r)=>{let o=i(e.layoutOptions),s=a(e.layoutOptions),c=o===void 0||o===`INHERIT`?t:o,l=s===void 0||s===`INHERIT`?n:s;r||(u.set(e.id,c),d.set(e.id,l));for(let t of e.children??[])f(t,c,l,!1)};return f(e,c,l,!0),{rootShape:c,rootEdge:l,nodeShape:u,nodeEdge:d}}function g_(e,t,n){let r=/* @__PURE__ */ new Map,i=(e,t,n)=>{let a=t+(e.x??0),o=n+(e.y??0);r.set(e.id,{x:a,y:o});for(let t of e.children??[])i(t,a,o)};i(e,0,0);let a=n=>n.id===e.id?t.rootShape:t.nodeShape.get(n.id)??`PARENT`,o=(t,n)=>{if(t.id!==e.id&&n===`ROOT`){let e=r.get(t.id);e&&(t.x=e.x,t.y=e.y)}let i=a(t);for(let e of t.children??[])o(e,i)};o(e,t.rootShape);let s=/* @__PURE__ */ new Map,c=(e,t)=>{for(let n of e.edges??[]){let e=`${String(n.sources?.[0]??``)}|${String(n.targets?.[0]??``)}`;s.has(e)||s.set(e,t)}for(let t of e.children??[])c(t,t.id)};c(n,null);let l=e=>{let n=s.get(e);return n===null?t.rootEdge:n===void 0?`CONTAINER`:t.nodeEdge.get(n)??`CONTAINER`},u=(e,t)=>{e&&(e.x+=t.x,e.y+=t.y)},d=t=>t.id===e.id?{x:0,y:0}:r.get(t.id)??{x:0,y:0},f=e=>{let t=d(e);for(let n of e.edges??[]){let e=`${String(n.sources?.[0]??``)}|${String(n.targets?.[0]??``)}`,i=l(e),a=null;if(i===`ROOT`)a=t;else if(i===`PARENT`){let n=s.get(e),i=n==null?{x:0,y:0}:r.get(n)??{x:0,y:0};a={x:t.x-i.x,y:t.y-i.y}}if(a!==null){for(let e of n.sections??[]){u(e.startPoint,a),u(e.endPoint,a);for(let t of e.bendPoints??[])u(t,a)}delete n.container}}for(let t of e.children??[])f(t)};f(e)}function __(e,t,n){let r=(e,t)=>{if(e.id===t)return e;for(let n of e.children??[]){let e=r(n,t);if(e!==null)return e}return null},i=e=>{if(n.has(e.id)){let n=r(t,e.id);if(n!==null){e.children=n.children,e.edges=n.edges;for(let t of e.edges??[])t.container=e.id;for(let t of e.children??[])i(t);return}}for(let t of e.children??[])i(t)};i(e)}export{rr as C,or as S,$n as T,W as _,Xg as a,V as b,Cg as c,Jh as d,lg as f,uc as g,ql as h,Zg as i,Sg as l,Gl as m,n_ as n,zg as o,ug as p,c_ as r,Rg as s,e_ as t,vg as u,U as v,tr as w,ar as x,H as y};