{"version":3,"sources":["webpack://draw2d/webpack/universalModuleDefinition","webpack://draw2d/webpack/bootstrap","webpack://draw2d/./node_modules/canvg-browser/index.js","webpack://draw2d/./src/css/contextmenu.css","webpack://draw2d/./node_modules/css-loader/lib/css-base.js","webpack://draw2d/./src/lib/Class.exec.js?38d0","webpack://draw2d/./src/lib/pathfinding.exec.js?c37a","webpack://draw2d/./src/lib/raphael.exec.js?c9eb","webpack://draw2d/./node_modules/rgbcolor/index.js","webpack://draw2d/./node_modules/script-loader/addScript.js","webpack://draw2d/./node_modules/shifty/dist/shifty.js","webpack://draw2d/./node_modules/stackblur/index.js","webpack://draw2d/./node_modules/style-loader/lib/addStyles.js","webpack://draw2d/./node_modules/style-loader/lib/urls.js","webpack://draw2d/(webpack)/buildin/global.js","webpack://draw2d/./node_modules/xmldom/dom-parser.js","webpack://draw2d/./node_modules/xmldom/dom.js","webpack://draw2d/./node_modules/xmldom/sax.js","webpack://draw2d/./src/Canvas.js","webpack://draw2d/./src/Configuration.js","webpack://draw2d/./src/Connection.js","webpack://draw2d/./src/Figure.js","webpack://draw2d/./src/HeadlessCanvas.js","webpack://draw2d/./src/HybridPort.js","webpack://draw2d/./src/InputPort.js","webpack://draw2d/./src/OutputPort.js","webpack://draw2d/./src/Port.js","webpack://draw2d/./src/ResizeHandle.js","webpack://draw2d/./src/SVGFigure.js","webpack://draw2d/./src/Selection.js","webpack://draw2d/./src/SetFigure.js","webpack://draw2d/./src/VectorFigure.js","webpack://draw2d/./src/command/Command.js","webpack://draw2d/./src/command/CommandAdd.js","webpack://draw2d/./src/command/CommandAddVertex.js","webpack://draw2d/./src/command/CommandAssignFigure.js","webpack://draw2d/./src/command/CommandAttr.js","webpack://draw2d/./src/command/CommandBoundingBox.js","webpack://draw2d/./src/command/CommandCollection.js","webpack://draw2d/./src/command/CommandConnect.js","webpack://draw2d/./src/command/CommandDelete.js","webpack://draw2d/./src/command/CommandDeleteGroup.js","webpack://draw2d/./src/command/CommandGroup.js","webpack://draw2d/./src/command/CommandMove.js","webpack://draw2d/./src/command/CommandMoveConnection.js","webpack://draw2d/./src/command/CommandMoveLine.js","webpack://draw2d/./src/command/CommandMoveVertex.js","webpack://draw2d/./src/command/CommandMoveVertices.js","webpack://draw2d/./src/command/CommandReconnect.js","webpack://draw2d/./src/command/CommandRemoveVertex.js","webpack://draw2d/./src/command/CommandReplaceVertices.js","webpack://draw2d/./src/command/CommandResize.js","webpack://draw2d/./src/command/CommandRotate.js","webpack://draw2d/./src/command/CommandStack.js","webpack://draw2d/./src/command/CommandStackEvent.js","webpack://draw2d/./src/command/CommandStackEventListener.js","webpack://draw2d/./src/command/CommandType.js","webpack://draw2d/./src/command/CommandUngroup.js","webpack://draw2d/./src/css/contextmenu.css?bac6","webpack://draw2d/./src/decoration/connection/ArrowDecorator.js","webpack://draw2d/./src/decoration/connection/BarDecorator.js","webpack://draw2d/./src/decoration/connection/CircleDecorator.js","webpack://draw2d/./src/decoration/connection/Decorator.js","webpack://draw2d/./src/decoration/connection/DiamondDecorator.js","webpack://draw2d/./src/geo/Line.js","webpack://draw2d/./src/geo/Point.js","webpack://draw2d/./src/geo/PositionConstants.js","webpack://draw2d/./src/geo/Ray.js","webpack://draw2d/./src/geo/Rectangle.js","webpack://draw2d/./src/geo/Util.js","webpack://draw2d/./src/index.js","webpack://draw2d/./src/io/Reader.js","webpack://draw2d/./src/io/Writer.js","webpack://draw2d/./src/io/json/Reader.js","webpack://draw2d/./src/io/json/Writer.js","webpack://draw2d/./src/io/png/Writer.js","webpack://draw2d/./src/io/svg/Writer.js","webpack://draw2d/./src/layout/anchor/CenterEdgeConnectionAnchor.js","webpack://draw2d/./src/layout/anchor/ChopboxConnectionAnchor.js","webpack://draw2d/./src/layout/anchor/ConnectionAnchor.js","webpack://draw2d/./src/layout/anchor/FanConnectionAnchor.js","webpack://draw2d/./src/layout/anchor/ShortesPathConnectionAnchor.js","webpack://draw2d/./src/layout/connection/CircuitConnectionRouter.js","webpack://draw2d/./src/layout/connection/ConnectionRouter.js","webpack://draw2d/./src/layout/connection/DirectRouter.js","webpack://draw2d/./src/layout/connection/FanConnectionRouter.js","webpack://draw2d/./src/layout/connection/InteractiveManhattanConnectionRouter.js","webpack://draw2d/./src/layout/connection/ManhattanBridgedConnectionRouter.js","webpack://draw2d/./src/layout/connection/ManhattanConnectionRouter.js","webpack://draw2d/./src/layout/connection/MazeConnectionRouter.js","webpack://draw2d/./src/layout/connection/MuteableManhattanConnectionRouter.js","webpack://draw2d/./src/layout/connection/RubberbandRouter.js","webpack://draw2d/./src/layout/connection/SketchConnectionRouter.js","webpack://draw2d/./src/layout/connection/SplineConnectionRouter.js","webpack://draw2d/./src/layout/connection/VertexRouter.js","webpack://draw2d/./src/layout/locator/BottomLocator.js","webpack://draw2d/./src/layout/locator/CenterLocator.js","webpack://draw2d/./src/layout/locator/ConnectionLocator.js","webpack://draw2d/./src/layout/locator/DraggableLocator.js","webpack://draw2d/./src/layout/locator/InputPortLocator.js","webpack://draw2d/./src/layout/locator/LeftLocator.js","webpack://draw2d/./src/layout/locator/Locator.js","webpack://draw2d/./src/layout/locator/ManhattanMidpointLocator.js","webpack://draw2d/./src/layout/locator/OutputPortLocator.js","webpack://draw2d/./src/layout/locator/ParallelMidpointLocator.js","webpack://draw2d/./src/layout/locator/PolylineMidpointLocator.js","webpack://draw2d/./src/layout/locator/PortLocator.js","webpack://draw2d/./src/layout/locator/RightLocator.js","webpack://draw2d/./src/layout/locator/SmartDraggableLocator.js","webpack://draw2d/./src/layout/locator/TopLocator.js","webpack://draw2d/./src/layout/locator/XYAbsPortLocator.js","webpack://draw2d/./src/layout/locator/XYRelPortLocator.js","webpack://draw2d/./src/layout/mesh/ExplodeLayouter.js","webpack://draw2d/./src/layout/mesh/MeshLayouter.js","webpack://draw2d/./src/layout/mesh/ProposedMeshChange.js","webpack://draw2d/./src/lib/Class.exec.js","webpack://draw2d/./src/lib/jquery.autoresize.js","webpack://draw2d/./src/lib/jquery.contextmenu.js","webpack://draw2d/./src/lib/pathfinding.exec.js","webpack://draw2d/./src/lib/raphael.exec.js","webpack://draw2d/./src/packages.js","webpack://draw2d/./src/policy/EditPolicy.js","webpack://draw2d/./src/policy/canvas/BoundingboxSelectionPolicy.js","webpack://draw2d/./src/policy/canvas/CanvasPolicy.js","webpack://draw2d/./src/policy/canvas/CoronaDecorationPolicy.js","webpack://draw2d/./src/policy/canvas/DecorationPolicy.js","webpack://draw2d/./src/policy/canvas/DefaultKeyboardPolicy.js","webpack://draw2d/./src/policy/canvas/DropInterceptorPolicy.js","webpack://draw2d/./src/policy/canvas/ExtendedKeyboardPolicy.js","webpack://draw2d/./src/policy/canvas/FadeoutDecorationPolicy.js","webpack://draw2d/./src/policy/canvas/GhostMoveSelectionPolicy.js","webpack://draw2d/./src/policy/canvas/KeyboardPolicy.js","webpack://draw2d/./src/policy/canvas/PanningSelectionPolicy.js","webpack://draw2d/./src/policy/canvas/ReadOnlySelectionPolicy.js","webpack://draw2d/./src/policy/canvas/SelectionPolicy.js","webpack://draw2d/./src/policy/canvas/ShowChessboardEditPolicy.js","webpack://draw2d/./src/policy/canvas/ShowDimetricGridEditPolicy.js","webpack://draw2d/./src/policy/canvas/ShowDotEditPolicy.js","webpack://draw2d/./src/policy/canvas/ShowGridEditPolicy.js","webpack://draw2d/./src/policy/canvas/SingleSelectionPolicy.js","webpack://draw2d/./src/policy/canvas/SnapToCenterEditPolicy.js","webpack://draw2d/./src/policy/canvas/SnapToDimetricGridEditPolicy.js","webpack://draw2d/./src/policy/canvas/SnapToEditPolicy.js","webpack://draw2d/./src/policy/canvas/SnapToGeometryEditPolicy.js","webpack://draw2d/./src/policy/canvas/SnapToGridEditPolicy.js","webpack://draw2d/./src/policy/canvas/SnapToInBetweenEditPolicy.js","webpack://draw2d/./src/policy/canvas/SnapToVerticesEditPolicy.js","webpack://draw2d/./src/policy/canvas/WheelZoomPolicy.js","webpack://draw2d/./src/policy/canvas/ZoomPolicy.js","webpack://draw2d/./src/policy/connection/ClickConnectionCreatePolicy.js","webpack://draw2d/./src/policy/connection/ComposedConnectionCreatePolicy.js","webpack://draw2d/./src/policy/connection/ConnectionCreatePolicy.js","webpack://draw2d/./src/policy/connection/DragConnectionCreatePolicy.js","webpack://draw2d/./src/policy/connection/OrthogonalConnectionCreatePolicy.js","webpack://draw2d/./src/policy/figure/AntSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/BigRectangleSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/BusSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/DragDropEditPolicy.js","webpack://draw2d/./src/policy/figure/FigureEditPolicy.js","webpack://draw2d/./src/policy/figure/GlowSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/HBusSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/HorizontalEditPolicy.js","webpack://draw2d/./src/policy/figure/RectangleSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/RegionEditPolicy.js","webpack://draw2d/./src/policy/figure/ResizeSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/RoundRectangleSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/SelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/SelectionPolicy.js","webpack://draw2d/./src/policy/figure/SlimSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/VBusSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/VertexSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/figure/VerticalEditPolicy.js","webpack://draw2d/./src/policy/figure/WidthSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/line/LineSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/line/OrthogonalSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/line/VertexSelectionFeedbackPolicy.js","webpack://draw2d/./src/policy/port/ElasticStrapFeedbackPolicy.js","webpack://draw2d/./src/policy/port/IntrusivePortsFeedbackPolicy.js","webpack://draw2d/./src/policy/port/PortFeedbackPolicy.js","webpack://draw2d/./src/shape/analog/OpAmp.js","webpack://draw2d/./src/shape/analog/ResistorBridge.js","webpack://draw2d/./src/shape/analog/ResistorVertical.js","webpack://draw2d/./src/shape/analog/VoltageSupplyHorizontal.js","webpack://draw2d/./src/shape/analog/VoltageSupplyVertical.js","webpack://draw2d/./src/shape/arrow/CalligrapherArrowDownLeft.js","webpack://draw2d/./src/shape/arrow/CalligrapherArrowLeft.js","webpack://draw2d/./src/shape/basic/Arc.js","webpack://draw2d/./src/shape/basic/Circle.js","webpack://draw2d/./src/shape/basic/Diamond.js","webpack://draw2d/./src/shape/basic/GhostVertexResizeHandle.js","webpack://draw2d/./src/shape/basic/Image.js","webpack://draw2d/./src/shape/basic/Label.js","webpack://draw2d/./src/shape/basic/Line.js","webpack://draw2d/./src/shape/basic/LineEndResizeHandle.js","webpack://draw2d/./src/shape/basic/LineResizeHandle.js","webpack://draw2d/./src/shape/basic/LineStartResizeHandle.js","webpack://draw2d/./src/shape/basic/Oval.js","webpack://draw2d/./src/shape/basic/PolyLine.js","webpack://draw2d/./src/shape/basic/Polygon.js","webpack://draw2d/./src/shape/basic/Rectangle.js","webpack://draw2d/./src/shape/basic/Text.js","webpack://draw2d/./src/shape/basic/VertexResizeHandle.js","webpack://draw2d/./src/shape/composite/Composite.js","webpack://draw2d/./src/shape/composite/Group.js","webpack://draw2d/./src/shape/composite/Jailhouse.js","webpack://draw2d/./src/shape/composite/Raft.js","webpack://draw2d/./src/shape/composite/StrongComposite.js","webpack://draw2d/./src/shape/composite/WeakComposite.js","webpack://draw2d/./src/shape/diagram/Diagram.js","webpack://draw2d/./src/shape/diagram/Pie.js","webpack://draw2d/./src/shape/diagram/Sparkline.js","webpack://draw2d/./src/shape/dimetric/Rectangle.js","webpack://draw2d/./src/shape/flowchart/Document.js","webpack://draw2d/./src/shape/icon/Acw.js","webpack://draw2d/./src/shape/icon/Alarm.js","webpack://draw2d/./src/shape/icon/Anonymous.js","webpack://draw2d/./src/shape/icon/Apple.js","webpack://draw2d/./src/shape/icon/Apps.js","webpack://draw2d/./src/shape/icon/ArrowDown.js","webpack://draw2d/./src/shape/icon/ArrowLeft.js","webpack://draw2d/./src/shape/icon/ArrowLeft2.js","webpack://draw2d/./src/shape/icon/ArrowRight.js","webpack://draw2d/./src/shape/icon/ArrowRight2.js","webpack://draw2d/./src/shape/icon/ArrowUp.js","webpack://draw2d/./src/shape/icon/Aumade.js","webpack://draw2d/./src/shape/icon/BarChart.js","webpack://draw2d/./src/shape/icon/BioHazard.js","webpack://draw2d/./src/shape/icon/Book.js","webpack://draw2d/./src/shape/icon/Bookmark.js","webpack://draw2d/./src/shape/icon/Books.js","webpack://draw2d/./src/shape/icon/Bubble.js","webpack://draw2d/./src/shape/icon/Bug.js","webpack://draw2d/./src/shape/icon/Calendar.js","webpack://draw2d/./src/shape/icon/Cart.js","webpack://draw2d/./src/shape/icon/Ccw.js","webpack://draw2d/./src/shape/icon/Chat.js","webpack://draw2d/./src/shape/icon/Check.js","webpack://draw2d/./src/shape/icon/Chrome.js","webpack://draw2d/./src/shape/icon/Clip.js","webpack://draw2d/./src/shape/icon/Clock.js","webpack://draw2d/./src/shape/icon/Cloud.js","webpack://draw2d/./src/shape/icon/Cloud2.js","webpack://draw2d/./src/shape/icon/CloudDown.js","webpack://draw2d/./src/shape/icon/CloudUp.js","webpack://draw2d/./src/shape/icon/Cloudy.js","webpack://draw2d/./src/shape/icon/Code.js","webpack://draw2d/./src/shape/icon/CodeTalk.js","webpack://draw2d/./src/shape/icon/CommandLine.js","webpack://draw2d/./src/shape/icon/Connect.js","webpack://draw2d/./src/shape/icon/Contract.js","webpack://draw2d/./src/shape/icon/Crop.js","webpack://draw2d/./src/shape/icon/Cross.js","webpack://draw2d/./src/shape/icon/Cube.js","webpack://draw2d/./src/shape/icon/Customer.js","webpack://draw2d/./src/shape/icon/Db.js","webpack://draw2d/./src/shape/icon/Detour.js","webpack://draw2d/./src/shape/icon/Diagram.js","webpack://draw2d/./src/shape/icon/Disconnect.js","webpack://draw2d/./src/shape/icon/DockBottom.js","webpack://draw2d/./src/shape/icon/DockLeft.js","webpack://draw2d/./src/shape/icon/DockRight.js","webpack://draw2d/./src/shape/icon/DockTop.js","webpack://draw2d/./src/shape/icon/Download.js","webpack://draw2d/./src/shape/icon/Dry.js","webpack://draw2d/./src/shape/icon/Employee.js","webpack://draw2d/./src/shape/icon/End.js","webpack://draw2d/./src/shape/icon/Ethernet.js","webpack://draw2d/./src/shape/icon/Exchange.js","webpack://draw2d/./src/shape/icon/Expand.js","webpack://draw2d/./src/shape/icon/Export.js","webpack://draw2d/./src/shape/icon/Fave.js","webpack://draw2d/./src/shape/icon/Feed.js","webpack://draw2d/./src/shape/icon/Ff.js","webpack://draw2d/./src/shape/icon/Firefox.js","webpack://draw2d/./src/shape/icon/Flag.js","webpack://draw2d/./src/shape/icon/Flickr.js","webpack://draw2d/./src/shape/icon/Folder.js","webpack://draw2d/./src/shape/icon/Font.js","webpack://draw2d/./src/shape/icon/Fork.js","webpack://draw2d/./src/shape/icon/ForkAlt.js","webpack://draw2d/./src/shape/icon/FullCube.js","webpack://draw2d/./src/shape/icon/Future.js","webpack://draw2d/./src/shape/icon/GRaphael.js","webpack://draw2d/./src/shape/icon/Gear.js","webpack://draw2d/./src/shape/icon/Gear2.js","webpack://draw2d/./src/shape/icon/GitHub.js","webpack://draw2d/./src/shape/icon/GitHubAlt.js","webpack://draw2d/./src/shape/icon/Glasses.js","webpack://draw2d/./src/shape/icon/Globe.js","webpack://draw2d/./src/shape/icon/GlobeAlt.js","webpack://draw2d/./src/shape/icon/GlobeAlt2.js","webpack://draw2d/./src/shape/icon/Hail.js","webpack://draw2d/./src/shape/icon/Hammer.js","webpack://draw2d/./src/shape/icon/HammerAndScrewDriver.js","webpack://draw2d/./src/shape/icon/HangUp.js","webpack://draw2d/./src/shape/icon/Help.js","webpack://draw2d/./src/shape/icon/History.js","webpack://draw2d/./src/shape/icon/Home.js","webpack://draw2d/./src/shape/icon/IMac.js","webpack://draw2d/./src/shape/icon/Icon.js","webpack://draw2d/./src/shape/icon/Icons.js","webpack://draw2d/./src/shape/icon/Ie.js","webpack://draw2d/./src/shape/icon/Ie9.js","webpack://draw2d/./src/shape/icon/Import.js","webpack://draw2d/./src/shape/icon/InkScape.js","webpack://draw2d/./src/shape/icon/Ipad.js","webpack://draw2d/./src/shape/icon/Iphone.js","webpack://draw2d/./src/shape/icon/JQuery.js","webpack://draw2d/./src/shape/icon/Jigsaw.js","webpack://draw2d/./src/shape/icon/Key.js","webpack://draw2d/./src/shape/icon/Lab.js","webpack://draw2d/./src/shape/icon/Lamp.js","webpack://draw2d/./src/shape/icon/Lamp_alt.js","webpack://draw2d/./src/shape/icon/Landing.js","webpack://draw2d/./src/shape/icon/Landscape1.js","webpack://draw2d/./src/shape/icon/Landscape2.js","webpack://draw2d/./src/shape/icon/LineChart.js","webpack://draw2d/./src/shape/icon/Link.js","webpack://draw2d/./src/shape/icon/LinkedIn.js","webpack://draw2d/./src/shape/icon/Linux.js","webpack://draw2d/./src/shape/icon/List.js","webpack://draw2d/./src/shape/icon/Location.js","webpack://draw2d/./src/shape/icon/Lock.js","webpack://draw2d/./src/shape/icon/Locked.js","webpack://draw2d/./src/shape/icon/Magic.js","webpack://draw2d/./src/shape/icon/Magnet.js","webpack://draw2d/./src/shape/icon/Mail.js","webpack://draw2d/./src/shape/icon/Man.js","webpack://draw2d/./src/shape/icon/Merge.js","webpack://draw2d/./src/shape/icon/Mic.js","webpack://draw2d/./src/shape/icon/MicMute.js","webpack://draw2d/./src/shape/icon/Minus.js","webpack://draw2d/./src/shape/icon/NewWindow.js","webpack://draw2d/./src/shape/icon/No.js","webpack://draw2d/./src/shape/icon/NoMagnet.js","webpack://draw2d/./src/shape/icon/NodeJs.js","webpack://draw2d/./src/shape/icon/Notebook.js","webpack://draw2d/./src/shape/icon/Noview.js","webpack://draw2d/./src/shape/icon/Opera.js","webpack://draw2d/./src/shape/icon/Package.js","webpack://draw2d/./src/shape/icon/Page.js","webpack://draw2d/./src/shape/icon/Page2.js","webpack://draw2d/./src/shape/icon/Pallete.js","webpack://draw2d/./src/shape/icon/Palm.js","webpack://draw2d/./src/shape/icon/Paper.js","webpack://draw2d/./src/shape/icon/Parent.js","webpack://draw2d/./src/shape/icon/Pc.js","webpack://draw2d/./src/shape/icon/Pen.js","webpack://draw2d/./src/shape/icon/Pensil.js","webpack://draw2d/./src/shape/icon/People.js","webpack://draw2d/./src/shape/icon/Phone.js","webpack://draw2d/./src/shape/icon/Photo.js","webpack://draw2d/./src/shape/icon/Picker.js","webpack://draw2d/./src/shape/icon/Picture.js","webpack://draw2d/./src/shape/icon/PieChart.js","webpack://draw2d/./src/shape/icon/Plane.js","webpack://draw2d/./src/shape/icon/Plugin.js","webpack://draw2d/./src/shape/icon/Plus.js","webpack://draw2d/./src/shape/icon/Power.js","webpack://draw2d/./src/shape/icon/Ppt.js","webpack://draw2d/./src/shape/icon/Printer.js","webpack://draw2d/./src/shape/icon/Quote.js","webpack://draw2d/./src/shape/icon/Rain.js","webpack://draw2d/./src/shape/icon/Raphael.js","webpack://draw2d/./src/shape/icon/ReflectH.js","webpack://draw2d/./src/shape/icon/ReflectV.js","webpack://draw2d/./src/shape/icon/Refresh.js","webpack://draw2d/./src/shape/icon/Resize2.js","webpack://draw2d/./src/shape/icon/Rotate.js","webpack://draw2d/./src/shape/icon/Ruler.js","webpack://draw2d/./src/shape/icon/Run.js","webpack://draw2d/./src/shape/icon/Rw.js","webpack://draw2d/./src/shape/icon/Safari.js","webpack://draw2d/./src/shape/icon/ScrewDriver.js","webpack://draw2d/./src/shape/icon/Search.js","webpack://draw2d/./src/shape/icon/Sencha.js","webpack://draw2d/./src/shape/icon/Settings.js","webpack://draw2d/./src/shape/icon/SettingsAlt.js","webpack://draw2d/./src/shape/icon/Shuffle.js","webpack://draw2d/./src/shape/icon/Skull.js","webpack://draw2d/./src/shape/icon/Skype.js","webpack://draw2d/./src/shape/icon/SlideShare.js","webpack://draw2d/./src/shape/icon/Smile.js","webpack://draw2d/./src/shape/icon/Smile2.js","webpack://draw2d/./src/shape/icon/Snow.js","webpack://draw2d/./src/shape/icon/Split.js","webpack://draw2d/./src/shape/icon/Star.js","webpack://draw2d/./src/shape/icon/Star2.js","webpack://draw2d/./src/shape/icon/Star2Off.js","webpack://draw2d/./src/shape/icon/Star3.js","webpack://draw2d/./src/shape/icon/Star3Off.js","webpack://draw2d/./src/shape/icon/StarOff.js","webpack://draw2d/./src/shape/icon/Start.js","webpack://draw2d/./src/shape/icon/Sticker.js","webpack://draw2d/./src/shape/icon/Stop.js","webpack://draw2d/./src/shape/icon/StopWatch.js","webpack://draw2d/./src/shape/icon/Sun.js","webpack://draw2d/./src/shape/icon/Svg.js","webpack://draw2d/./src/shape/icon/TShirt.js","webpack://draw2d/./src/shape/icon/Tag.js","webpack://draw2d/./src/shape/icon/TakeOff.js","webpack://draw2d/./src/shape/icon/Talke.js","webpack://draw2d/./src/shape/icon/Talkq.js","webpack://draw2d/./src/shape/icon/Thunder.js","webpack://draw2d/./src/shape/icon/Trash.js","webpack://draw2d/./src/shape/icon/Twitter.js","webpack://draw2d/./src/shape/icon/TwitterBird.js","webpack://draw2d/./src/shape/icon/Umbrella.js","webpack://draw2d/./src/shape/icon/Undo.js","webpack://draw2d/./src/shape/icon/Unlock.js","webpack://draw2d/./src/shape/icon/Usb.js","webpack://draw2d/./src/shape/icon/User.js","webpack://draw2d/./src/shape/icon/Users.js","webpack://draw2d/./src/shape/icon/Video.js","webpack://draw2d/./src/shape/icon/View.js","webpack://draw2d/./src/shape/icon/Vim.js","webpack://draw2d/./src/shape/icon/Volume0.js","webpack://draw2d/./src/shape/icon/Volume1.js","webpack://draw2d/./src/shape/icon/Volume2.js","webpack://draw2d/./src/shape/icon/Volume3.js","webpack://draw2d/./src/shape/icon/Warning.js","webpack://draw2d/./src/shape/icon/WheelChair.js","webpack://draw2d/./src/shape/icon/Windows.js","webpack://draw2d/./src/shape/icon/Woman.js","webpack://draw2d/./src/shape/icon/Wrench.js","webpack://draw2d/./src/shape/icon/Wrench2.js","webpack://draw2d/./src/shape/icon/Wrench3.js","webpack://draw2d/./src/shape/icon/ZoomIn.js","webpack://draw2d/./src/shape/icon/ZoomOut.js","webpack://draw2d/./src/shape/layout/FlexGridLayout.js","webpack://draw2d/./src/shape/layout/HorizontalLayout.js","webpack://draw2d/./src/shape/layout/Layout.js","webpack://draw2d/./src/shape/layout/StackLayout.js","webpack://draw2d/./src/shape/layout/TableLayout.js","webpack://draw2d/./src/shape/layout/VerticalLayout.js","webpack://draw2d/./src/shape/node/Between.js","webpack://draw2d/./src/shape/node/End.js","webpack://draw2d/./src/shape/node/Fulcrum.js","webpack://draw2d/./src/shape/node/HorizontalBus.js","webpack://draw2d/./src/shape/node/Hub.js","webpack://draw2d/./src/shape/node/Node.js","webpack://draw2d/./src/shape/node/Start.js","webpack://draw2d/./src/shape/node/VerticalBus.js","webpack://draw2d/./src/shape/note/PostIt.js","webpack://draw2d/./src/shape/pert/Activity.js","webpack://draw2d/./src/shape/pert/Start.js","webpack://draw2d/./src/shape/state/Connection.js","webpack://draw2d/./src/shape/state/End.js","webpack://draw2d/./src/shape/state/Start.js","webpack://draw2d/./src/shape/state/State.js","webpack://draw2d/./src/shape/widget/Slider.js","webpack://draw2d/./src/shape/widget/Widget.js","webpack://draw2d/./src/ui/LabelEditor.js","webpack://draw2d/./src/ui/LabelInplaceEditor.js","webpack://draw2d/./src/util/ArrayList.js","webpack://draw2d/./src/util/Base64.js","webpack://draw2d/./src/util/Color.js","webpack://draw2d/./src/util/Debug.js","webpack://draw2d/./src/util/JSONUtil.js","webpack://draw2d/./src/util/Polyfill.js","webpack://draw2d/./src/util/SVGUtil.js","webpack://draw2d/./src/util/UUID.js","webpack://draw2d/./src/util/extend.js","webpack://draw2d/./src/util/raphael_ext.js","webpack://draw2d/./src/util/spline/BezierSpline.js","webpack://draw2d/./src/util/spline/CatmullRomSpline.js","webpack://draw2d/./src/util/spline/CubicSpline.js","webpack://draw2d/./src/util/spline/Spline.js"],"names":["draw2d","Canvas","Class","extend","NAME","init","canvasId","width","height","_this","setScrollArea","document","body","html","$","css","isNaN","parseFloat","initialWidth","parseInt","initialHeight","getWidth","getHeight","droppable","accept","over","event","ui","onDragEnter","draggable","out","onDragLeave","drop","_getEvent","pos","fromDocumentToCanvasCoordinate","clientX","clientY","onDrop","getX","getY","shiftKey","ctrlKey","appendTo","stack","zIndex","helper","drag","onDrag","stop","e","start","addClass","paper","Raphael","canvas","style","position","zoomPolicy","zoomFactor","selection","Selection","currentDropTarget","currentHoverFigure","regionDragDropConstraint","policy","figure","RegionEditPolicy","eventSubscriptions","editPolicy","util","ArrayList","figures","lines","commonPorts","resizeHandles","commandStack","command","CommandStack","linesToRepaintAfterDragDrop","lineIntersections","installEditPolicy","WheelZoomPolicy","DefaultKeyboardPolicy","BoundingboxSelectionPolicy","DropInterceptorPolicy","connection","ComposedConnectionCreatePolicy","DragConnectionCreatePolicy","ClickConnectionCreatePolicy","addEventListener","isPostChangeEvent","calculateConnectionIntersection","each","i","line","svgPathString","repaint","mouseDown","mouseDownX","mouseDownY","mouseDragDiffX","mouseDragDiffY","bind","onMouseUp","x","y","hover","getBestFigure","onMouseLeave","fireEvent","onMouseEnter","exc","console","log","onMouseMove","hoverFigure","diffXAbs","diffYAbs","onMouseDrag","which","preventDefault","onMouseDown","stopPropagation","onRightMouseDown","on","onDoubleClick","onClick","originalEvent","delta","type","wheelDelta","detail","returnValue","onMouseWheel","keyupCallback","target","is","KeyboardPolicy","onKeyUp","keyCode","keydownCallback","onKeyDown","destroy","clear","unbind","remove","clone","markSaveLocation","hideDecoration","showDecoration","getLines","l1","removeElementAt","ii","l2","partInter","intersection","getSize","add","other","SelectionPolicy","getSelection","getAll","unselect","grep","p","stay","onUninstall","ZoomPolicy","ConnectionCreatePolicy","onInstall","uninstallEditPolicy","removed","name","getDropInterceptorPolicies","setZoom","animated","getZoom","getDimension","geo","Rectangle","setDimension","dim","widths","getFigures","map","f","getAbsoluteX","heights","getAbsoluteY","Math","max","asArray","w","h","setSize","Point","getScrollLeft","getScrollTop","fromCanvasToDocumentCoordinate","getHtmlContainer","touches","length","changedTouches","elementSelector","scrollArea","getScrollArea","scrollLeft","scrollTop","setScrollLeft","left","setScrollTop","top","scrollTo","offset","getCanvas","shape","basic","Line","setPosition","setCanvas","getShapeElement","dx","dy","PolyLine","contains","Connection","disconnect","getLine","id","count","get","getId","getFigure","getIntersection","result","entry","j","justTouching","snapToHelper","orig","SnapToEditPolicy","snap","registerPort","port","unregisterPort","getAllPorts","getCommandStack","getPrimarySelection","getPrimary","setCurrentSelection","object","addSelection","select","blacklist","whitelist","Array","isArray","testFigure","isInList","list","len","considering","isInBlacklist","item","isInWhitelist","checkRecursive","children","c","isVisible","hitTest","figureResult","childResult","lineResult","getBestLine","figureIndex","node","index","childIndex","lineIndex","array","filter","sort","a","b","lineToIgnore","Figure","inArray","draggedDomNode","droppedDomNode","relX","relY","onContextMenu","args","subscribers","callback","events","split","push","off","eventOrFunction","Configuration","version","i18n","move","assignShape","groupShapes","ungroupShapes","deleteShape","moveShape","moveLine","addShape","moveVertex","moveVertices","deleteVertex","resizeShape","rotateShape","collection","addVertex","changeAttributes","connectPorts","menu","deleteSegment","addSegment","dialog","filenamePrompt","factory","createResizeHandle","owner","ResizeHandle","createConnection","sourcePort","targetPort","dropTarget","createInputPort","relatedFigure","InputPort","createOutputPort","OutputPort","createHybridPort","HybridPort","attr","setter","getter","oldPoint","sourceDecorator","targetDecorator","sourceDecoratorNode","targetDecoratorNode","isMoving","moveListener","setStartPoint","setEndPoint","_super","color","stroke","radius","setSourceDecorator","setTargetDecorator","source","setSource","setTarget","getSourceDecorator","getTargetDecorator","getSource","getTarget","connections","onDisconnect","fireSourcePortRouteEvent","fireTargetPortRouteEvent","reconnect","onConnect","routingRequired","isResizeable","isDraggable","child","locator","layout","ConnectionLocator","decorator","setParent","calculatePath","routingHints","z1","getZOrder","z2","toBack","attributes","repaintBlocked","paint","getVertices","first","transform","getStartAngle","opacity","alpha","getColor","lineColor","hex","forEach","setAttribute","cssClass","end","last","getEndAngle","postProcess","postProcessCache","router","dx2","dy2","updateVertices","DragDropEditPolicy","moved","toFront","insertAfter","getStartPoint","refPoint","getStartPosition","getConnectionAnchorLocation","getConnectionAnchorReferencePoint","getEndPoint","getEndPosition","sharingPorts","notiCanvas","DROP_FILTER","createFilter","element","createShadow","items","lineSegments","p1","p2","SplineConnectionRouter","sqrt","angle","PI","asin","abs","getConnections","conn","createCommand","request","getPolicy","CommandType","MOVE","CommandMoveVertices","MOVE_BASEPOINT","CommandReconnect","getPersistentAttributes","memento","parentNode","getParent","getName","decoration","setPersistentAttributes","eval","MIN_TIMER_INTERVAL","setterWhitelist","setId","setX","setY","setWidth","setHeight","boundingBox","setBoundingBox","minWidth","setMinWidth","minHeight","setMinHeight","setCssClass","userData","setUserData","setDraggable","resizeable","setResizeable","selectable","setSelectable","setRotationAngle","setAlpha","glow","setGlow","visible","setVisible","keepAspectRatio","setKeepAspectRatio","getterWhitelist","getRotationAngle","isSelectable","getAlpha","UUID","create","isResizeHandle","deleteable","canSnapToHelper","snapToGridAnchor","timerId","timerInterval","parent","composite","rotationAngle","replace","RegExp","getMinWidth","getMinHeight","isInDragDrop","ox","oy","lastAppliedAttributes","selectionHandles","panningDelegate","relocateChildrenEventCallback","relocate","defaultSelectionAdapter","selectionAdapter","RectangleSelectionFeedbackPolicy","value","isPlainObject","key","substring","jsonUtil","set","func","param","undefined","call","data","Object","assign","keys","k","pick","obj","var_keys","arguments","prototype","slice","asPrimarySelection","onSelect","onUnselect","setSelectionAdapter","adapter","getSelectionAdapter","isSelected","getUserData","newId","getCssClass","trim","removeAttribute","hasCssClass","className","test","addCssClass","removeCssClass","newClass","indexOf","toggleCssClass","stopTimer","startTimer","milliSeconds","window","setInterval","onTimer","clearInterval","StrongComposite","indexFigure","indexComposite","getTopLevelShapeElement","insertElementAt","handle","insertBefore","SelectionFeedbackPolicy","removedPolicy","debug","warn","getChildren","resetChildren","createShapeElement","hide","visibleDuration","fadeIn","show","fadeOut","flatDiff","getOwnPropertyNames","applyTransformation","flag","getHandleBBox","onDragStart","bbox","translate","getAbsolutePosition","scale","getBestChild","canStartDrag","newPos","adjustPosition","getCanSnapToHelper","onPanning","onPanningEnd","onDragEnd","execute","delegateTarget","draggedFigure","delegate","onCatch","droppedFigure","percent","min","duration","getKeepAspectRatio","previousSibling","setCanSnapToHelper","getSnapToGridAnchor","setSnapToGridAnchor","point","getAbsoluteBounds","oldPos","getPosition","old","newDim","adjustDimension","rect","getBoundingBox","iX","iY","corona","isMemberDraggable","isMemberSelectable","isStrechable","isDeleteable","setDeleteable","containedFigure","getRoot","root","setComposite","getComposite","_inEvent","context","___originalCallback","figureToIgnore","CommandMove","DELETE","CommandDelete","RESIZE","CommandResize","cloneMetaData","exludeChildren","initialId","HeadlessCanvas","Port","InputPortLocator","CONNECT","CommandConnect","OutputPortLocator","Circle","DEFAULT_BORDER_COLOR","Color","lighterBgColor","bgColor","diameter","semanticGroup","setSemanticGroup","getSemanticGroup","coronaWidth","useGradient","preferredConnectionDirection","emitter","connectionAnchor","anchor","ConnectionAnchor","maxFanOut","Number","MAX_SAFE_INTEGER","IntrusivePortsFeedbackPolicy","portSelectionAdapter","setMaxFanOut","getMaxFanOut","group","setConnectionAnchor","setOwner","referencePoint","inquiringConnection","getLocation","getReferencePoint","getConnectionDirection","peerPort","getDirection","setConnectionDirection","direction","setLocator","getLocator","setBackgroundColor","lighter","rgba","setValue","onPortValueChanged","getValue","cx","cy","rx","ry","cursor","fill","hash","join","_oldstroke","getStroke","setStroke","getCoronaWidth","setCoronaWidth","setName","iX2","iY2","Corona","CommandMovePort","ports","setColor","zoomCallback","origWidth","origHeight","origRadius","origStroke","blockEvent","setType","getOwner","getType","commandMove","commandResize","getSnapToDirection","SnapToHelper","NORTH_WEST","NORTH","NORTH_EAST","EAST","SOUTH_EAST","SOUTH","SOUTH_WEST","WEST","NSEW","updateCursor","oldX","oldY","diffX","diffY","objPosX","objPosY","objWidth","objHeight","newX","newY","corrPos","isTouchDevice","offset2","bgGradient","darker","supportsSnapToHelper","ctrl","SVGFigure","SetFigure","svg","setSVG","getSVG","createSet","importSVG","svgNodes","newSVGNodes","oldSVG","rawSVG","svgDOM","_dimensionReadFromJSON","findStyle","tagName","substr","nodeName","nodeValue","exec","$1","$2","r","circle","ellipse","path","d","x1","y1","x2","y2","points","polygon","image","childNodes","firstChild","nodeType","subShape","text","subAttr","getBBox","nextSibling","error","alert","primary","all","setPrimary","checkDescendant","figureToCheck","expand","addRecursive","addAll","getAssignedFigures","reverse","originalWidth","originalHeight","scaleX","scaleY","strokeScale","applyAlpha","s","before","ratio","reverseRatio","rs","getPorts","bb","VectorFigure","Node","dasharray","strokeBeforeGlow","glowIsActive","setDashArray","setRadius","getDashArray","getRadius","getBackgroundColor","dashPattern","ensureDefault","Command","label","getLabel","canExecute","cancel","undo","redo","CommandAdd","CommandAddVertex","newPoint","removeVertexAt","insertVertexAt","CommandAssignFigure","assignedConnections","isNode","oldBoundingBox","assignFigure","oldComposite","unassignFigure","stickFigures","CommandAttr","newAttributes","oldAttributes","CommandBoundingBox","newBoundingBox","equals","CommandCollection","commandLabel","commands","labels","unique","canExec","cmd","setConnection","getConnection","optionalCallback","removedParentEntry","indexOfChild","CommandDeleteGroup","batchDelete","CommandUngroup","CommandGroup","Group","isEmpty","setStartPosition","CommandMoveConnection","setTranslation","CommandMoveLine","CommandMoveVertex","setIndex","origPoint","updatePosition","setVertex","oldVertices","newVertices","setVertices","con","oldSourcePort","oldTargetPort","setNewPorts","newSourcePort","newTargetPort","CommandRemoveVertex","CommandReplaceVertices","originalVertices","oldWidth","oldHeight","newWidth","newHeight","CommandRotate","oldAngle","newAngle","rotate","portRelayoutRequired","undostack","redostack","maxundo","transactionCommand","eventListeners","setUndoLimit","notifyListeners","POST_EXECUTE","PRE_EXECUTE","startTransaction","isInTransaction","commitTransaction","pop","PRE_UNDO","POST_UNDO","PRE_REDO","POST_REDO","getRedoLabel","getUndoLabel","canRedo","canUndo","listener","CommandStackEventListener","stackChanged","removeEventListener","state","action","CommandStackEvent","size","POST_INIT","POST_MASK","PRE_MASK","details","getStack","getCommand","getDetails","isPreChangeEvent","MOVE_VERTEX","MOVE_VERTICES","MOVE_GHOST_VERTEX","RESET","ROTATE","ArrowDecorator","Decorator","st","backgroundColor","BarDecorator","CircleDecorator","DiamondDecorator","inverseLerp","X1","Y1","X2","Y2","px","py","nenner","zaehler","pointProjection","U","Udenom","pow","minx","maxx","miny","maxy","isValid","distance","dotprod","projlenSq","lenSq","bx","by","bw","bh","setBoundary","adjustBoundary","PositionConstants","getDistance","translated","factor","scaled","getScaled","subtract","that","dot","cross","lerp","t","Ray","isHorizontal","similarity","otherRay","getAveraged","resize","dw","dh","setBounds","getLeft","getRight","getTop","getBottom","getTopLeft","getTopCenter","getTopRight","getCenterLeft","getBottomLeft","getBottomCenter","getCenter","getBottomRight","moveInside","newRect","pointOrRectangle","cw","ch","ow","oh","oct","determineOctant","r2","HISTERESE","current","DIRECTION_UP","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_DOWN","o","isInside","intersects","x11","y11","x12","y12","x21","y21","x22","y22","x_overlap","y_overlap","merge","intersectionWithLine","v","toJSON","Util","insetPoint","distanceFromStart","vx","vy","localDistance","module","exports","require","io","Reader","unmarshal","Writer","marshal","resultCallback","formatXml","xml","formatted","reg","pad","indent","match","padding","json","JSON","parse","createFigureFromElement","createFigureFromType","val","getPort","base64Content","Base64","encode","stringify","canvg","png","cropBoundingBox","origPos","outerHTML","canvasDomNode","append","fullSizeCanvas","ignoreMouse","ignoreAnimation","renderCallback","sourceX","sourceY","sourceWidth","sourceHeight","croppedCanvas","createElement","getContext","drawImage","dataUrl","toDataURL","base64Image","img","CenterEdgeConnectionAnchor","ref","dir","center","getBox","ChopboxConnectionAnchor","reference","FanConnectionAnchor","separation","ray","xSeparation","ySeparation","intersections","reduce","previous","p0","p0diff","p1diff","ShortesPathConnectionAnchor","Oval","octant","CircuitConnectionRouter","ManhattanConnectionRouter","setBridgeRadius","setVertexRadius","abortRoutingOnFirstVertexNode","LineSelectionFeedbackPolicy","vertexNodes","vertexRadius","setJunctionRadius","bridgeRadius","bridge_LR","bridge_RL","route","fromPt","fromDir","toPt","toDir","_route","intersectionsASC","intersectionsDESC","intersectionForCalc","ps","oldP","bridgeWidth","bridgeCode","lastVertexNode","interP","hit","otherZ","connZ","vertexNode","exclude","lastVerteNode","ConnectionRouter","_paint","adjust","inset","lastP","canRemoveVertexAt","canRemoveSegmentAt","verticesSet","DirectRouter","invalidate","addPoint","FanConnectionRouter","routeCollision","midPoint","bendPoint","InteractiveManhattanConnectionRouter","OrthogonalSelectionFeedbackPolicy","_routingMetaData","routedByUserInteraction","halfRoute","MINDIST","vertexCount","vertex","startMoved","endMoved","segmentCount","tmpConn","vertices","curSegmentCount","minSegmentCount","draggedSegment","getVertex","getSegments","lp0","lp1","routingMetaData","ManhattanBridgedConnectionRouter","BRIDGE_HORIZONTAL_LR","BRIDGE_HORIZONTAL_RL","TOL","TOLxTOL","TOGGLE_DIST","UP","RIGHT","DOWN","LEFT","xDiff","yDiff","ROUTER_RECTS","MazeConnectionRouter","useSpline","useSimplify","useSimplifyValue","useDebug","useShift","portOutletOffset","finder","PF","JumpPointFinder","allowDiagonal","dontCrossCorners","shift","oldToPt","oldFromPt","getAdjustedPoint","grid","generateNoGoGrid","findPath","isWalkableAt","svgPathBefore","adjustPath","pt","spline","CubicSpline","splinePoints","generate","simplify","oneShift2","canvasWidth","canvasHeight","Grid","box","r_orig","b_orig","setWalkableAt","adjustment","getSquareDistance","getSquareSegmentDistance","simplifyRadialDistance","sqTolerance","prevPoint","newPoints","simplifyDouglasPeucker","MarkerArray","Uint8Array","markers","maxSqDist","sqDist","firstStack","lastStack","tolerance","highestQuality","MuteableManhattanConnectionRouter","rowsUsed","colsUsed","constraints","reservedInfo","startPoint","endPoint","average","startNormal","getStartDirection","endNormal","getEndDirection","positions","horizontal","isCycle","next","trial","findFirstFigureAtStraightLine","EMPTY_LIST","getExcludingFigures","processPositions","getColumnNear","n","proximity","reserveColumn","getRowNear","reserveRow","removeReservedLines","prev","rInfo","reservedRows","reservedCols","column","info","row","getConstraint","setConstraint","constraint","excluding","col","getMidpoint","RubberbandRouter","thickness","uv","uv2","strength","second","third","start90","start270","first90","first270","second90","second270","third90","third270","end90","end270","SketchConnectionRouter","VertexRouter","VertexSelectionFeedbackPolicy","startAnchor","endAnchor","BottomLocator","Locator","targetBoundingBox","CenterLocator","DraggableLocator","PortLocator","dividerFactor","thisNAME","portIndex","applyConsiderRotation","LeftLocator","margin","ManhattanMidpointLocator","segmentIndex","floor","ParallelMidpointLocator","setDistance","nx","ny","radian","rotAnchor","rotCenterOfLabel","xm","ym","cos","sin","PolylineMidpointLocator","halfW","halfH","rotAngle","m","matrix","RightLocator","SmartDraggableLocator","boundedCorners","dist","xOffset","yOffset","calcBoundingCorner","parentVertices","childVertices","i_parent","i_child","TopLocator","XYAbsPortLocator","XYRelPortLocator","mesh","ExplodeLayouter","MeshLayouter","MIN_MARGIN","figureToAdd","changes","dis","currentOctChanges","ProposedMeshChange","r1","uid","Date","defaults","autoResize","onResize","onBeforeResize","onAfterResize","animate","complete","extraSpace","maxHeight","maxWidth","cloneCSSProperties","cloneCSSValues","overflow","resizableFilterSelector","AutoResizer","fn","config","el","toLowerCase","previousScrollTop","overflowY","apply","check","proxy","setTimeout","createClone","removeAttr","whiteSpace","immediate","injectClone","prevValue","cloneWidth","currentWidth","removeData","cloneContainer","jQuery","support","htmlMenuitem","htmlCommand","eventSelectstart","documentElement","widget","_cleanData","cleanData","elems","elem","triggerHandler","$currentTrigger","initialized","$win","counter","namespaces","menus","types","selector","trigger","autoHide","delay","reposition","determinePosition","$menu","my","at","of","collision","outerHeight","outerWidth","opt","$this","bottom","right","positionSubmenu","animation","noop","hoveract","timer","pageX","pageY","zindex","$t","zin","$tt","prop","abortevent","stopImmediatePropagation","contextmenu","hasClass","build","built","isEmptyObject","Error","$trigger","op","click","Event","mousedown","button","mouseup","mouseenter","$related","relatedTarget","$document","closest","mousemove","mouseleave","clearTimeout","layerClick","selectors","$window","hideshow","possibleTarget","triggerAction","elementFromPoint","$layer","has","one","contextMenu","keyStop","isInput","$selected","find","blur","$parent","itemdata","String","fromCharCode","toUpperCase","accesskeys","$node","prevItem","$s","$children","$prev","$round","itemMouseleave","itemMouseenter","$input","focus","nextItem","$next","focusInput","contextMenuRoot","blurInput","menuMouseenter","hovering","menuMouseleave","itemClick","contextMenuKey","isFunction","callbacks","hasOwnProperty","update","inputClick","hideMenu","force","focusItem","siblings","blurItem","removeClass","layer","$label","accesskey","aks","splitAccesskey","ak","_name","hasTypes","inputs","selected","prependTo","radio","options","icon","nested","display","ceil","andSelf","$item","disabled","fixedPosition","operation","$context","_hasContext","ns","$visibleMenu","fromMenu","setInputValues","getInputValues","inputLabel","menuChildren","dimetric","arrow","note","diagram","flowchart","analog","pert","navigator","platform","EditPolicy","host","SingleSelectionPolicy","isInsideMode","rect1","rect2","intersectsMode","decision","boundingBoxFigure1","boundingBoxFigure2","canDrawBoundingBox","oldSelection","setDecisionMode","useIntersectionMode","currentSelection","mouseMovedDuringMouseDown","canDragStart","delegated","mouseDraggingElement","mouseDownElement","draggingLineCommand","draggingLine","fakeDragX","fakeDragY","handleRect","dash","LineResizeHandle","sel","selectionRect","CanvasPolicy","mouseX","mouseY","createMonochromGif","gif","red","green","blue","bit","byte_","writeBit","chunklen","CoronaDecorationPolicy","DecorationPolicy","startDragX","startDragY","diameterToBeFullVisible","diameterToBeVisible","sumDiameter","setDiameterToBeVisible","setDiameterToBeFullVisible","getDiameterToBeVisible","getDiameterToBeFullVisible","__origAlpha","updatePorts","connectInquirer","connectIntent","Hub","getHybridPort","ExtendedKeyboardPolicy","FadeoutDecorationPolicy","DEFAULT_FADEOUT_DURATION","DEFAULT_ALPHA_DECREMENT","alphaDec","hidePortsCounter","portDragging","duringHide","GhostMoveSelectionPolicy","ghostRectangle1","ghostRectangle2","resetPorts","_newPos","draggingElement","redrawConnection","inter","PanningSelectionPolicy","area","ReadOnlySelectionPolicy","ShowChessboardEditPolicy","GRID_COLOR","GRID_WIDTH","oldBg","setGrid","onZoomCallback","emitterFigure","zoomData","zoom","gridColor","background","backgroundSize","backgroundPosition","ShowDimetricGridEditPolicy","shapes","setGridColor","props","angle26","atan","angle153","cos30","sin30","cos150","sin150","setStart","setFinish","ShowDotEditPolicy","DOT_COLOR","DOT_RADIUS","DOT_DISTANCE","dotDistance","dotRadius","dotColor","ShowGridEditPolicy","GRID_STOKE","gridDistance","gridStroke","gridWidth","SnapToCenterEditPolicy","SNAP_THRESHOLD","FADEOUT_DURATION","centers","horizontalGuideLines","verticalGuideLines","hideHorizontalGuides","hideVerticalGuides","modifiedPos","originalPos","allowXChanges","allowYChanges","inputBounds","inputCenter","snapHorizontal","snapped","showHorizontalGuides","diff","vertical","snapVertical","showVerticalGuides","populateCenters","candidates","snappedPoint","causedFigure","fast","SnapToDimetricGridEditPolicy","snapPoint","g","CENTER_H","CENTER_V","NORTH_SOUTH","EAST_WEST","setLineColor","getLineColor","SnapToGeometryEditPolicy","rows","cols","vline","hline","hideVerticalLine","hideHorizontalLine","snapDirections","edge","showVerticalLine","showHorizontalLine","snapRectangle","bounds","resultBounds","topLeft","bottomRight","snapOrientation","inputPoint","resultPoint","populateRowsAndCols","rightCorrection","getCorrectionFor","leftCorrection","bottomCorrection","topCorrection","location","entries","side","resultMag","magnitude","removeAll","causedBox","causedCenter","d_a","d_b","fromY","maxLength","yLength","snappedBox","fromX","xLength","SnapToGridEditPolicy","showGrid","renderer","SnapToInBetweenEditPolicy","populateBounds","intersectionPoint","leftIntersections","leftInputPoint","causedBBox","rightIntersections","rightInputPoint","snappedRect","leftSide","rightSide","topIntersections","topInputPoint","bottomIntersections","bottomInputPoint","topSide","bottomSide","snapTopLeft","snapTopRight","snapBottomRight","SnapToVerticesEditPolicy","VertexResizeHandle","correction","vertexResizeHandle","SNAP","diffy","diffx","snappedPos","debouncedZoomedCallback","_debounce","__wheelZoom","newZoom","client","_zoom","scrollWidth","scrollHeight","centerY","centerX","myTweenable","Tweenable","tween","from","to","easing","step","params","finish","setViewBox","coordsAfter","wait","timeout","later","callNow","z","viewBoxWidth","viewBoxHeight","port1","beeline","pulse","tempConnection","ripple","setEndPosition","KEYCODE_ENTER","KEYCODE_ESC","setRouter","policies","_arg","anim","circle1","circle2","anim1","repeat","Infinity","anim2","currentTarget","de","ct","PortFeedbackPolicy","onHoverLeave","onHoverEnter","OrthogonalConnectionCreatePolicy","getRouter","beforeVertex","lastVertex","portPos","lastSegmentDir","orthogonal","xDist","yDist","AntSelectionFeedbackPolicy","isPrimarySelection","_updateBeeLine","projection","d1","d2","center1","center2","BigRectangleSelectionFeedbackPolicy","BusSelectionFeedbackPolicy","r4","r6","r8","xPos","yPos","FigureEditPolicy","moveCallback","originalAlpha","GlowSelectionFeedbackPolicy","HBusSelectionFeedbackPolicy","HorizontalEditPolicy","dashArray","r3","r5","r7","constRect","diffW","diffH","ResizeSelectionFeedbackPolicy","RoundRectangleSelectionFeedbackPolicy","SlimSelectionFeedbackPolicy","VBusSelectionFeedbackPolicy","GhostVertexResizeHandle","VerticalEditPolicy","WidthSelectionFeedbackPolicy","LineStartResizeHandle","LineEndResizeHandle","p_m1","p3","resizeWidthHalf","resizeHeightHalf","removeSegment","PADDING","splitSegment","newSegLength","np1","np2","np3","np4","segment","hitSegment","startHandle","endHandle","ElasticStrapFeedbackPolicy","connectionLine","hoverFiger","tweenable","allPorts","__beforeInflate","dispose","OpAmp","MyInputPortLocator","calcY","inputLocator","createPort","ResistorBridge","MyOutputPortLocator","outputLocator","ResistorVertical","VoltageSupplyHorizontal","VoltageSupplyVertical","CalligrapherArrowDownLeft","CalligrapherArrowLeft","Arc","startAngle","endAngle","a1","a2","w2","h2","setDiameter","getDiameter","setCenter","Diamond","Polygon","resetVertices","precursorIndex","maxOpacity","Image","setPath","getPath","src","Label","FONT_FALLBACK","cachedWidth","cachedHeight","cachedMinWidth","cachedMinHeight","fontSize","fontColor","fontFamily","outlineStroke","outlineColor","bold","editor","setText","installEditor","setOutlineStroke","setOutlineColor","setFontFamily","setFontSize","setFontColor","setPadding","setBold","getText","getOutlineStroke","getOutlineColor","getFontFamily","getFontSize","getFontColor","getPadding","isBold","lastAppliedLabelRotation","lastAppliedTextAttributes","clearCache","lattr","calculateTextAttr","attrDiff","ts","font","polySides","oddNodes","pi","pj","DEFAULT_COLOR","isGlowing","outlineVisible","startX","setStartX","startY","setStartY","endX","setEndX","endY","setEndY","isFaked","_lineColor","_stroke","minX","minY","maxX","maxY","getStartX","getStartY","getEndX","getEndY","getLength","getAngle","percentage","segments1","segments2","s1","s2","b1","b2","ua_t","ub_t","u_b","ua","ub","getRelatedPort","getOppositePort","objPos","getIndex","origin","mDir","mDiff","t_a","t_b","removedPoint","lastDist","lastValidLength","begin","modStart","modEnd","updateBoundingBox","fracWidth","fracHeight","thisX","thisY","rot","pattern","Text","cachedWrappedAttr","wrappedTextAttr","longestWord","arg1","arg2","svgText","words","abc","letterWidth","l","LINE_COLOR","isDead","getEnclosingAngle","trans","acos","Composite","assignedFigures","Jailhouse","Raft","WeakComposite","aboardFigures","getAboardFigures","dontApplyToChildren","aboardedFigures","recalculate","raftBoundingBox","getNextComposite","figureToTest","nextComposite","Diagram","cache","setData","getData","Pie","COLORS","TWO_PI","sum","_sum","pie","offsetAngle","seg","drawSegment","polarPath","theta","rotation","resolution","Sparkline","toCoords","idx","pathString","prev_pt","Document","amplitude","calcPath","w4","Acw","Icon","Alarm","Anonymous","Apple","Apps","ArrowDown","ArrowLeft","ArrowLeft2","ArrowRight","ArrowRight2","ArrowUp","Aumade","BarChart","BioHazard","Book","Bookmark","Books","Bubble","Bug","Calendar","Cart","Ccw","Chat","Check","Chrome","Clip","Clock","Cloud","Cloud2","CloudDown","CloudUp","Cloudy","Code","CodeTalk","CommandLine","Connect","Contract","Crop","Cross","Cube","Customer","Db","Detour","Disconnect","DockBottom","DockLeft","DockRight","DockTop","Download","Dry","Employee","End","Ethernet","Exchange","Expand","Export","Fave","Feed","Ff","Firefox","Flag","Flickr","Folder","Font","Fork","ForkAlt","FullCube","Future","GRaphael","Gear","Gear2","GitHub","GitHubAlt","Glasses","Globe","GlobeAlt","GlobeAlt2","Hail","Hammer","HammerAndScrewDriver","HangUp","Help","History","Home","IMac","offsetY","offsetX","Icons","Ie","Ie9","Import","InkScape","Ipad","Iphone","JQuery","Jigsaw","Key","Lab","Lamp","Lamp_alt","Landing","Landscape1","Landscape2","LineChart","Link","LinkedIn","Linux","List","Location","Lock","Locked","Magic","Magnet","Mail","Man","Merge","Mic","MicMute","Minus","NewWindow","No","NoMagnet","NodeJs","Notebook","Noview","Opera","Package","Page","Page2","Pallete","Palm","Paper","Parent","Pc","Pen","Pensil","People","Phone","Photo","Picker","Picture","PieChart","Plane","Plugin","Plus","Power","Ppt","Printer","Quote","Rain","ReflectH","ReflectV","Refresh","Resize2","Rotate","Ruler","Run","Rw","Safari","ScrewDriver","Search","Sencha","Settings","SettingsAlt","Shuffle","Skull","Skype","SlideShare","Smile","Smile2","Snow","Split","Star","Star2","Star2Off","Star3","Star3Off","StarOff","Start","Sticker","Stop","StopWatch","Sun","Svg","TShirt","Tag","TakeOff","Talke","Talkq","Thunder","Trash","Twitter","TwitterBird","Umbrella","Undo","Unlock","Usb","User","Users","Video","View","Vim","Volume0","Volume1","Volume2","Volume3","Warning","WheelChair","Windows","Woman","Wrench","Wrench2","Wrench3","ZoomIn","ZoomOut","FlexGridLayout","Layout","cellLocator","gridDef","layoutRequired","_layout","cell","__cellConstraint","valign","align","debugLines","def_cols","def_rows","min_height","min_width","minGridWidth","minGridHeight","hResizeable","vResizeable","resizeListener","columns","cellWidthFromDef","cellConstraint","rowspan","colspan","paintDebugGrid","eHeight","cHeight","cellHeight","_getGridWidth","_getGridHeight","gridHeight","cellWidth","cellX","cellY","posX","posY","newLine","def","HorizontalLayout","gap","setGap","getGap","markup","StackLayout","visibleLayer","setVisibleLayer","getVisibleLayer","_recursiveWidth","_recursiveHeight","TableLayout","DUMMY_CELL","__cell","getCellLayout","widthOffset","layoutInfos","setCellPadding","calculateLayout","getCellPadding","removeRow","removedRow","splice","addRow","figuresToAdd","rowCount","columnCount","missingColumns","setCellVerticalAlign","getCellVerticalAlign","setCellAlign","getCellAlign","layouts","newLayoutInfos","layoutWidths","layoutHeights","VerticalLayout","Between","Fulcrum","_orig_hitTest","setConnectionDirStrategy","HorizontalBus","BACKGROUND_COLOR","setLabel","_port","CONNECTION_DIR_STRATEGY","strategy","dirStrategy","inputPorts","outputPorts","hybridPorts","persistPorts","cachedPorts","setPersistPorts","getPersistPorts","__initialVisibilityState","recursive","getInputPorts","getOutputPorts","excludePorts","clonePort","addPort","portName","getInputPort","portNameOrIndex","getOutputPort","removePort","newPort","c_size","oldCanvas","layoutPorts","relatedPort","locatorAttr","VerticalBus","labelString","mustAdjustTheAngel","PostIt","Activity","mementoValues","darkerBgColor","earlyStartLabel","createLabel","durationLabel","LabelEditor","onCommit","setDuration","earlyEndLabel","activityLabel","LabelInplaceEditor","inputPort","getActivity","anyValue","outputPort","lateStartLabel","stackLabel","lateEndLabel","getEarlyStart","lateFinish","setLateFinish","getEarlyEnd","latestEarlyEnd","parentActivity","lateStart","txt","innerCircle","State","Slider","Widget","DEFAULT_COLOR_THUMB","DEFAULT_COLOR_BG","currentValue","slideBoundingBox","panning","thumbGrow","thumb","onValueChange","panningX","panningY","grow","thumbW2","sliderWidth","figurePos","sliderPos","thumbX","configuration","onCancel","onStart","newText","prompt","commitCallback","commit","scrollDiv","self","avoidDuplicates","concat","elements","deep","newVector","overwriteElementAt","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","ENCODED_VALS_WEBSAFE","encodeByteArray","input","opt_webSafe","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","stringToByteArray","decode","charToByteMap","charAt","haveByte4","byte4","str","charCodeAt","hashString","hex2rgb","getHTMLStyle","getRed","getGreen","getBlue","getIdealTextColor","nThreshold","bgDelta","temp_elem","appendChild","getComputedStyle","removeChild","int2hex","round","fraction","fadeTo","pc","aps","callback_func","callback_force","log_level","log_methods","pass_methods","logs","method","level","log_arr","exec_callback","is_level","firebug","setLevel","setCallback","re","pathList","parentKey","grandParent","grandParentKey","addObj","constructor","regex","paths","propertyIsEnumerable","obj1","obj2","v1","v2","attribute","ontouchmove","pointString","poly","random","toString","extended","global","enabled","getElementsByTagName","defs","svgcanv","createElementNS","getAttr","getAttribute","copy","cloneNode","BezierSpline","Spline","controlPoints","parts","cp","blend","CatmullRomSpline"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFa;;AAEb,gBAAgB,mBAAO,CAAC,kDAAU;AAClC,iBAAiB,mBAAO,CAAC,oDAAW;AACpC,cAAc,mBAAO,CAAC,mDAAQ;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;;AAEZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;;AAEA;AACA;AACA;AACA,8BAA8B,YAAY,2BAA2B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD,8CAA8C,sBAAsB,+BAA+B,EAAE;AACrG,oCAAoC,sBAAsB;AAC1D,8BAA8B,kDAAkD;AAChF,4BAA4B,6BAA6B;AACzD,6BAA6B,8BAA8B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,eAAe,qBAAqB;AACpC;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,oCAAoC;;AAE7D;AACA,mCAAmC,uCAAuC;;AAE1E;AACA;AACA;AACA,4BAA4B;AAC5B,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gGAAgG;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,gBAAgB,mBAAmB;AACnC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0DAA0D;AACpF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,gBAAgB,YAAY;AAC5B,4DAA4D,2CAA2C,sBAAsB;AAC7H,qEAAqE,6CAA6C,wCAAwC;AAC1J,mEAAmE,4CAA4C,yDAAyD;AACxK,6BAA6B,wDAAwD,wEAAwE;AAC7J,UAAU,mCAAmC;AAC7C,IAAI;AACJ;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA,uBAAuB,gBAAgB;AACvC,uBAAuB,gBAAgB;AACvC,2BAA2B,0BAA0B;AACrD,4BAA4B,0BAA0B;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wBAAwB;AACnD,2BAA2B,wBAAwB;;AAEnD;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,uCAAuC;AACvC,uCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;;AAEA;AACA,uCAAuC,MAAM;AAC7C;AACA;AACA;;AAEA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;;AAEA;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0BAA0B,2BAA2B;AACnF,+BAA+B,0BAA0B,2BAA2B;;AAEpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAmC,gCAAgC,2BAA2B;AAC9F;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mCAAmC,gCAAgC,uBAAuB;AAC1F;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uCAAuC;AACvC;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B;AAC1D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2CAA2C;AAC3C;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uDAAuD;AACvD,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,0BAA0B;AAC1C;AACA,gEAAgE;AAChE;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uBAAuB;AACvE,wDAAwD,2BAA2B;AACnF,oFAAoF,oBAAoB;;AAExG;AACA,mDAAmD,6BAA6B;AAChF,8DAA8D,mCAAmC;AACjG,uDAAuD,4BAA4B;AACnF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,yCAAyC;AAClH,UAAU,YAAY;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA,cAAc,KAAK;AACnB,8DAA8D;AAC9D,6DAA6D;AAC7D,4CAA4C;AAC5C;AACA,cAAc,KAAK;AACnB,6CAA6C;AAC7C,kCAAkC,EAAE,oCAAoC;AACxE,4BAA4B;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sCAAsC,oBAAoB;AAC1D;AACA,iBAAiB,sBAAsB;AACvC;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAuD;AAClF;AACA,8BAA8B;AAC9B;AACA,8BAA8B,6DAA6D;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB,kBAAkB,MAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,eAAe,wBAAwB;AACvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,+BAA+B;AAC/C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,4EAA4E;;AAE5E;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,wBAAwB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,0BAA0B;AAChD;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,eAAe,0BAA0B;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;;AAEA;AACA;AACA;AACA;AACA,qCAAqC,oCAAoC;AACzE;AACA,iCAAiC,oBAAoB;AACrD,kCAAkC,kDAAkD,oBAAoB;AACxG;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,0BAA0B;AACzC;AACA;AACA,2FAA2F;AAC3F,gCAAgC;AAChC,4BAA4B;AAC5B,eAAe,kBAAkB;AACjC;AACA,oCAAoC;AACpC;AACA,qCAAqC;AACrC,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,+DAA+D;;AAE/D;AACA,+DAA+D;;AAE/D;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAA6C;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sDAAsD;AACtD,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,iBAAiB;AAC1C,yBAAyB,iBAAiB;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B,gCAAgC;;AAE/D;AACA,qBAAqB;AACrB,sBAAsB,4BAA4B;AAClD,IAAI;AACJ;;AAEA;AACA,qBAAqB;AACrB,sBAAsB,oCAAoC;AAC1D,IAAI;AACJ;;AAEA;;AAEA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;;;;;;;;;;;;AC1gGA,2BAA2B,mBAAO,CAAC,gGAA+C;AAClF;;;AAGA;AACA,cAAc,QAAS,iYAAiY,eAAe,gBAAgB,yBAAyB,uBAAuB,4BAA4B,yBAAyB,4BAA4B,+BAA+B,uBAAuB,yDAAyD,uDAAuD,uDAAuD,uDAAuD,uDAAuD,2DAA2D,sBAAsB,GAAG,wBAAwB,gCAAgC,6BAA6B,yBAAyB,gCAAgC,qCAAqC,gCAAgC,gCAAgC,GAA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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,IAAI,SAAS,IAAI,SAAS,IAAI;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,2BAA2B,IAAI,SAAS,IAAI,SAAS,IAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sBAAsB,EAAE,KAAK,EAAE,KAAK,EAAE;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sBAAsB,EAAE,KAAK,EAAE,KAAK,EAAE;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA,2BAA2B,oBAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,mDAAmD;AACnD,iEAAiE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;;AAEA;;AAEA;;;;;;;;;;;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;;;;;AC1BA;AACA,eAAe,KAAiD,oBAAoB,SAAoH,CAAC,iBAAiB,mBAAmB,cAAc,4BAA4B,YAAY,qBAAqB,2DAA2D,SAAS,mCAAmC,SAAS,qBAAqB,qCAAqC,oCAAoC,EAAE,iBAAiB,iCAAiC,iBAAiB,YAAY,UAAU,sBAAsB,mBAAmB,iDAAiD,yBAAyB,kBAAkB,aAAa,aAAa,cAAc,4BAA4B,SAAS,iFAAiF,qBAAqB,gBAAgB,8EAA8E,aAAa,+DAA+D,sBAAsB,uBAAuB,sCAAsC,SAAS,uEAAuE,iBAAiB,gBAAgB,YAAY,WAAW,KAAK,WAAW,+GAA+G,uBAAuB,wCAAwC,6EAA6E,gBAAgB,aAAa,qGAAqG,UAAU,uCAAuC,0BAA0B,WAAW,0ZAA0Z,wBAAwB,iCAAiC,uBAAuB,sBAAsB,IAAI,4BAA4B,oBAAoB,wCAAwC,oBAAoB,uBAAuB,yCAAyC,sBAAsB,IAAI,qCAAqC,0EAA0E,+BAA+B,mDAAmD,cAAc,kBAAkB,iCAAiC,IAAI,0BAA0B,aAAa,+DAA+D,iEAAiE,0GAA0G,aAAa,qCAAqC,0CAA0C,gBAAgB,cAAc,yBAAyB,GAAG,EAAE,wCAAwC,gLAAgL,wHAAwH,oCAAoC,4KAA4K,EAAE,6BAA6B,0GAA0G,iIAAiI,EAAE,iCAAiC,uEAAuE,sEAAsE,sJAAsJ,sBAAsB,2DAA2D,EAAE,yBAAyB,kCAAkC,2JAA2J,yBAAyB,yCAAyC,yBAAyB,+BAA+B,EAAE,2BAA2B,8BAA8B,EAAE,4BAA4B,sBAAsB,EAAE,6BAA6B,0DAA0D,EAAE,8BAA8B,iJAAiJ,EAAE,6BAA6B,gBAAgB,cAAc,6JAA6J,EAAE,4BAA4B,+JAA+J,qOAAqO,EAAE,iCAAiC,0CAA0C,EAAE,4CAA4C,0BAA0B,EAAE,+BAA+B,WAAW,mBAAmB,mBAAmB,GAAG,KAAK,GAAG,iBAAiB,oBAAoB,QAAQ,2BAA2B,iBAAiB,EAAE,eAAe,iBAAiB,aAAa,cAAc,qGAAqG,iBAAiB,6GAA6G,qBAAqB,IAAI,2BAA2B,wBAAwB,6DAA6D,YAAY,KAAK,KAAK,oCAAoC,gEAAgE,YAAY,oBAAoB,SAAS,2DAA2D,OAAO,uDAAuD,cAAc,SAAS,UAAU,+BAA+B,uBAAuB,mBAAmB,KAAK,uBAAuB,wCAAwC,MAAM,OAAO,YAAY,WAAW,uCAAuC,UAAU,iBAAiB,aAAa,wBAAwB,0CAA0C,sBAAsB,eAAe,sBAAsB,eAAe,sBAAsB,eAAe,kBAAkB,iBAAiB,0DAA0D,YAAY,IAAI,KAAK,4BAA4B,0BAA0B,OAAO,4BAA4B,gBAAgB,KAAK,IAAI,EAAE,4BAA4B,yBAAyB,UAAU,yEAAyE,iBAAiB,eAAe,iBAAiB,KAAK,sCAAsC,SAAS,mDAAmD,gCAAgC,0BAA0B,WAAW,wBAAwB,mBAAmB,wBAAwB,wCAAwC,yDAAyD,kCAAkC,EAAE,mCAAmC,uCAAuC,iBAAiB,aAAa,sCAAsC,SAAS,uBAAuB,6BAA6B,iBAAiB,gCAAgC,iHAAiH,QAAQ,uFAAuF,sCAAsC,uCAAuC,iBAAiB,aAAa,gFAAgF,gBAAgB,aAAa,qGAAqG,aAAa,YAAY,GAAG,IAAI,iDAAiD,SAAS,0EAA0E,YAAY,iBAAiB,aAAa,sCAAsC,SAAS,EAAE,qBAAqB,SAAS,0BAA0B,qBAAqB,2BAA2B,2BAA2B,6BAA6B,kDAAkD,2BAA2B,qBAAqB,4BAA4B,yBAAyB,8BAA8B,wDAAwD,2BAA2B,qBAAqB,4BAA4B,2BAA2B,8BAA8B,8DAA8D,2BAA2B,qBAAqB,4BAA4B,yBAAyB,8BAA8B,wDAAwD,0BAA0B,iCAAiC,2BAA2B,+BAA+B,6BAA6B,kCAAkC,0BAA0B,oCAAoC,2BAA2B,mCAAmC,6BAA6B,oFAAoF,0BAA0B,4BAA4B,2BAA2B,oCAAoC,6BAA6B,sEAAsE,6BAA6B,yIAAyI,0BAA0B,cAAc,uBAAuB,2BAA2B,cAAc,6BAA6B,6BAA6B,cAAc,iFAAiF,uBAAuB,4DAA4D,2BAA2B,cAAc,iFAAiF,yBAAyB,cAAc,uBAAuB,uBAAuB,cAAc,6BAA6B,sBAAsB,yIAAyI,0BAA0B,qJAAqJ,0BAA0B,8DAA8D,wBAAwB,qBAAqB,sBAAsB,wBAAwB,iBAAiB,aAAa,sCAAsC,SAAS,EAAE,WAAW,qCAAqC,6BAA6B,oBAAoB,mCAAmC,6BAA6B,gBAAgB,EAAE,WAAW,uCAAuC,6BAA6B,sBAAsB,EAAE,WAAW,6CAA6C,6BAA6B,4BAA4B,iDAAiD,6BAA6B,8BAA8B,EAAE,iBAAiB,aAAa,cAAc,sBAAsB,kBAAkB,wCAAwC,oBAAoB,sBAAsB,mCAAmC,cAAc,EAAE,oBAAoB,sBAAsB,4BAA4B,cAAc,SAAS,sCAAsC,SAAS,kDAAkD,wBAAwB,0CAA0C,gDAAgD,qBAAqB,IAAI,oBAAoB,2BAA2B,kBAAkB,EAAE,eAAe,gCAAgC,gGAAgG,eAAe,8IAA8I,eAAe,gCAAgC,mBAAmB,sCAAsC,gCAAgC,+BAA+B,IAAI,eAAe,gBAAgB,eAAe,yBAAyB,WAAW,4CAA4C,EAAE,eAAe,4CAA4C,6CAA6C,eAAe,gBAAgB,eAAe,6BAA6B,eAAe,SAAS,+BAA+B,WAAW,2BAA2B,uCAAuC,EAAE,IAAI,iBAAiB,yBAAyB,8BAA8B,gCAAgC,cAAc,EAAE,iBAAiB,SAAS,6BAA6B,sBAAsB,IAAI,iBAAiB,yBAAyB,YAAY,EAAE,iBAAiB,6BAA6B,wCAAwC,IAAI,iBAAiB,yBAAyB,8DAA8D,UAAU,EAAE,iBAAiB,yBAAyB,6BAA6B,8BAA8B,mCAAmC,wBAAwB,oBAAoB,EAAE,yBAAyB,cAAc,cAAc,EAAE,iBAAiB,yBAAyB,2CAA2C,0CAA0C,WAAW,qBAAqB,cAAc,GAAG,GAAG;AACx6c,kC;;;;;;;;;;;ACFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,aAAa,YAAY;AACzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA,aAAa,WAAW;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,aAAa,aAAa;AAC1B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sB;;;;;;;;;;;AClUA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA,cAAc,mBAAO,CAAC,uDAAQ;;AAE9B;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA,mBAAmB,2BAA2B;;AAE9C;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAmB;AACnC;AACA;;AAEA;AACA;;AAEA,iBAAiB,2BAA2B;AAC5C;AACA;;AAEA,QAAQ,uBAAuB;AAC/B;AACA;AACA,GAAG;AACH;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,kDAAkD,sBAAsB;AACxE;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD;;AAEA,6BAA6B,mBAAmB;;AAEhD;;AAEA;;AAEA;AACA;;;;;;;;;;;;;AC1XA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,WAAW,EAAE;AACrD,wCAAwC,WAAW,EAAE;;AAErD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,sCAAsC;AACtC,GAAG;AACH;AACA,8DAA8D;AAC9D;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;;;;;;;;;;;ACxFA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;ACnBA;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA,gCAAgC;AAChC;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,CAAC;;AAED,kHAAkH;AAClH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;;AAED;AACA,iBAAiB,mBAAO,CAAC,2CAAO;AAChC,qDAAqD,mBAAO,CAAC,2CAAO;AACpE,yBAAyB,mBAAO,CAAC,2CAAO;AACxC;AACA;;;;;;;;;;;;AC1PA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,oBAAoB,YAAY,QAAQ;AAChF,2CAA2C,QAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,0BAA0B,cAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kLAAkL;AAClL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;;AAGA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,EAAE;AACF,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,2BAA2B;AAC3B,4BAA4B;AAC5B,+BAA+B;AAC/B;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,SAAS;AACT;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA,GAAG;AACH;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA,cAAc,MAAM;AACpB;AACA;AACA;AACA,4BAA4B,gDAAgD;AAC5E,IAAI;AACJ,4BAA4B,oCAAoC;AAChE;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,gCAAgC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,SAAS;AACV;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AC3tCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd,eAAe;AACf,mBAAmB;AACnB,aAAa;AACb,4BAA4B;AAC5B,mBAAmB;AACnB,oBAAoB;AACpB,oBAAoB;;AAEpB;;AAEA;;AAEA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,uB;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,WAAW;AACX,mBAAmB,MAAM;AACzB;AACA;AACA,wCAAwC;AACxC;AACA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;;;AAIA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI;AACJ,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,IAAI,KAAK;AACT;AACA;AACA;AACA,wBAAwB;AACxB,yBAAyB;AACzB,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,IAAI;AACJ;;AAEA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,GAAG,KAAK;AACZ,gCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,I;AACA;AACA;AACA,sBAAsB;AACtB;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,KAAK;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,yBAAyB;AACzB,EAAE;AACF;AACA,0BAA0B,yBAAyB;AACnD,wBAAwB,uBAAuB;AAC/C,sBAAsB,qBAAqB;AAC3C,oBAAoB,mBAAmB;AACvC,sBAAsB;AACtB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ,uBAAuB,0DAA0D;AACjF;AACA,wBAAwB;AACxB;;;;;AAKA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"draw2d.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"draw2d\"] = factory();\n\telse\n\t\troot[\"draw2d\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.js\");\n","'use strict';\r\n\r\n var RGBColor = require('rgbcolor');\r\n var stackblur = require('stackblur');\r\n var xmldom = require('xmldom');\r\n\r\n/*\r\n * canvg.js - Javascript SVG parser and renderer on Canvas\r\n * MIT Licensed\r\n * Gabe Lerner (gabelerner@gmail.com)\r\n * http://code.google.com/p/canvg/\r\n *\r\n * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/\r\n */\r\n\r\n/*\r\ncanvg(target, s)\r\n  empty parameters: replace all 'svg' elements on page with 'canvas' elements\r\n  target: canvas element or the id of a canvas element\r\n  s: svg string, url to svg file, or xml document\r\n  opts: optional hash of options\r\n    ignoreMouse: true => ignore mouse events\r\n    ignoreAnimation: true => ignore animations\r\n    ignoreDimensions: true => does not try to resize canvas\r\n    ignoreClear: true => does not clear canvas\r\n    offsetX: int => draws at a x offset\r\n    offsetY: int => draws at a y offset\r\n    scaleWidth: int => scales horizontally to width\r\n    scaleHeight: int => scales vertically to height\r\n    renderCallback: function => will call the function after the first render is completed\r\n    forceRedraw: function => will call the function on every frame, if it returns true, will redraw\r\n*/\r\nfunction canvg(target, s, opts) {\r\n\r\n\t// no parameters\r\n\tif (target == null && s == null && opts == null) {\r\n\t\tvar svgTags = document.querySelectorAll('svg');\r\n\t\tfor (var i=0; i<svgTags.length; i++) {\r\n\t\t\tvar svgTag = svgTags[i];\r\n\t\t\tvar c = document.createElement('canvas');\r\n\t\t\tc.width = svgTag.clientWidth;\r\n\t\t\tc.height = svgTag.clientHeight;\r\n\t\t\tsvgTag.parentNode.insertBefore(c, svgTag);\r\n\t\t\tsvgTag.parentNode.removeChild(svgTag);\r\n\t\t\tvar div = document.createElement('div');\r\n\t\t\tdiv.appendChild(svgTag);\r\n\t\t\tcanvg(c, div.innerHTML);\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (typeof target == 'string') {\r\n\t\ttarget = document.getElementById(target);\r\n\t}\r\n\r\n\t// store class on canvas\r\n\tif (target.svg != null) target.svg.stop();\r\n\tvar svg = build(opts || {});\r\n\t// on i.e. 8 for flash canvas, we can't assign the property so check for it\r\n\tif (!(target.childNodes.length == 1 && target.childNodes[0].nodeName == 'OBJECT')) target.svg = svg;\r\n\r\n\tvar ctx = target.getContext('2d');\r\n\tif (typeof s.documentElement != 'undefined') {\r\n\t\t// load from xml doc\r\n\t\tsvg.loadXmlDoc(ctx, s);\r\n\t}\r\n\telse if (s.substr(0,1) == '<') {\r\n\t\t// load from xml string\r\n\t\tsvg.loadXml(ctx, s);\r\n\t}\r\n\telse {\r\n\t\t// load from url\r\n\t\tsvg.load(ctx, s);\r\n\t}\r\n}\r\n\r\nfunction getMatchesSelector() {\r\n  // see https://developer.mozilla.org/en-US/docs/Web/API/Element.matches\r\n  var matchesSelector;\r\n  if (typeof Element.prototype.matches != 'undefined') {\r\n  \tmatchesSelector = function(node, selector) {\r\n  \t\treturn node.matches(selector);\r\n  \t};\r\n  } else if (typeof Element.prototype.webkitMatchesSelector != 'undefined') {\r\n  \tmatchesSelector = function(node, selector) {\r\n  \t\treturn node.webkitMatchesSelector(selector);\r\n  \t};\r\n  } else if (typeof Element.prototype.mozMatchesSelector != 'undefined') {\r\n  \tmatchesSelector = function(node, selector) {\r\n  \t\treturn node.mozMatchesSelector(selector);\r\n  \t};\r\n  } else if (typeof Element.prototype.msMatchesSelector != 'undefined') {\r\n  \tmatchesSelector = function(node, selector) {\r\n  \t\treturn node.msMatchesSelector(selector);\r\n  \t};\r\n  } else if (typeof Element.prototype.oMatchesSelector != 'undefined') {\r\n  \tmatchesSelector = function(node, selector) {\r\n  \t\treturn node.oMatchesSelector(selector);\r\n  \t};\r\n  } else {\r\n  \t// requires Sizzle: https://github.com/jquery/sizzle/wiki/Sizzle-Documentation\r\n  \t// or jQuery: http://jquery.com/download/\r\n  \t// or Zepto: http://zeptojs.com/#\r\n  \t// without it, this is a ReferenceError\r\n\r\n  \tif (typeof jQuery == 'function' || typeof Zepto == 'function') {\r\n  \t\tmatchesSelector = function (node, selector) {\r\n  \t\t\treturn $(node).is(selector);\r\n  \t\t};\r\n  \t}\r\n\r\n  \tif (typeof matchesSelector == 'undefined') {\r\n  \t\tmatchesSelector = Sizzle.matchesSelector;\r\n  \t}\r\n  }\r\n\r\n  return matchesSelector;\r\n}\r\n\r\nfunction getSelectorSpecificity(selector) {\r\n\tvar typeCount = [0, 0, 0];\r\n\r\n  // slightly modified version of https://github.com/keeganstreet/specificity/blob/master/specificity.js\r\n  var attributeRegex = /(\\[[^\\]]+\\])/g;\r\n  var idRegex = /(#[^\\s\\+>~\\.\\[:]+)/g;\r\n  var classRegex = /(\\.[^\\s\\+>~\\.\\[:]+)/g;\r\n  var pseudoElementRegex = /(::[^\\s\\+>~\\.\\[:]+|:first-line|:first-letter|:before|:after)/gi;\r\n  var pseudoClassWithBracketsRegex = /(:[\\w-]+\\([^\\)]*\\))/gi;\r\n  var pseudoClassRegex = /(:[^\\s\\+>~\\.\\[:]+)/g;\r\n  var elementRegex = /([^\\s\\+>~\\.\\[:]+)/g;\r\n\r\n\tvar findMatch = function(regex, type) {\r\n\t\tvar matches = selector.match(regex);\r\n\t\tif (matches == null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttypeCount[type] += matches.length;\r\n\t\tselector = selector.replace(regex, ' ');\r\n\t};\r\n\r\n\tselector = selector.replace(/:not\\(([^\\)]*)\\)/g, '     $1 ');\r\n\tselector = selector.replace(/{[^]*/gm, ' ');\r\n\tfindMatch(attributeRegex, 1);\r\n\tfindMatch(idRegex, 0);\r\n\tfindMatch(classRegex, 1);\r\n\tfindMatch(pseudoElementRegex, 2);\r\n\tfindMatch(pseudoClassWithBracketsRegex, 1);\r\n\tfindMatch(pseudoClassRegex, 1);\r\n\tselector = selector.replace(/[\\*\\s\\+>~]/g, ' ');\r\n\tselector = selector.replace(/[#\\.]/g, ' ');\r\n\tfindMatch(elementRegex, 2);\r\n\treturn typeCount.join('');\r\n}\r\n\r\nfunction build(opts) {\r\n\tvar svg = { opts: opts };\r\n\r\n  var matchesSelector = getMatchesSelector();\r\n\r\n  if (typeof CanvasRenderingContext2D  != 'undefined') {\r\n    CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh, opts) {\r\n      var cOpts = {\r\n        ignoreMouse: true,\r\n        ignoreAnimation: true,\r\n        ignoreDimensions: true,\r\n        ignoreClear: true,\r\n        offsetX: dx,\r\n        offsetY: dy,\r\n        scaleWidth: dw,\r\n        scaleHeight: dh\r\n      };\r\n\r\n      for(var prop in opts) {\r\n        if(opts.hasOwnProperty(prop)){\r\n          cOpts[prop] = opts[prop];\r\n        }\r\n      }\r\n      canvg(this.canvas, s, cOpts);\r\n    };\r\n  }\r\n\r\n\tsvg.FRAMERATE = 30;\r\n\tsvg.MAX_VIRTUAL_PIXELS = 30000;\r\n\r\n\tsvg.log = function(msg) {};\r\n\tif (svg.opts.log == true && typeof console != 'undefined') {\r\n\t\tsvg.log = function(msg) { console.log(msg); };\r\n\t}\r\n\r\n\t// globals\r\n\tsvg.init = function(ctx) {\r\n\t\tvar uniqueId = 0;\r\n\t\tsvg.UniqueId = function () { uniqueId++; return 'canvg' + uniqueId;\t};\r\n\t\tsvg.Definitions = {};\r\n\t\tsvg.Styles = {};\r\n\t\tsvg.StylesSpecificity = {};\r\n\t\tsvg.Animations = [];\r\n\t\tsvg.Images = [];\r\n\t\tsvg.ctx = ctx;\r\n\t\tsvg.ViewPort = new (function () {\r\n\t\t\tthis.viewPorts = [];\r\n\t\t\tthis.Clear = function() { this.viewPorts = []; };\r\n\t\t\tthis.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); };\r\n\t\t\tthis.RemoveCurrent = function() { this.viewPorts.pop(); };\r\n\t\t\tthis.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; };\r\n\t\t\tthis.width = function() { return this.Current().width; };\r\n\t\t\tthis.height = function() { return this.Current().height; };\r\n\t\t\tthis.ComputeSize = function(d) {\r\n\t\t\t\tif (d != null && typeof d == 'number') return d;\r\n\t\t\t\tif (d == 'x') return this.width();\r\n\t\t\t\tif (d == 'y') return this.height();\r\n\t\t\t\treturn Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2);\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\tsvg.init();\r\n\r\n\t// images loaded\r\n\tsvg.ImagesLoaded = function() {\r\n\t\tfor (var i=0; i<svg.Images.length; i++) {\r\n\t\t\tif (!svg.Images[i].loaded) return false;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// trim\r\n\tsvg.trim = function(s) { return s.replace(/^\\s+|\\s+$/g, ''); }\r\n\r\n\t// compress spaces\r\n\tsvg.compressSpaces = function(s) { return s.replace(/[\\s\\r\\t\\n]+/gm,' '); }\r\n\r\n\t// ajax\r\n\tsvg.ajax = function(url) {\r\n\t\tvar AJAX;\r\n\t\tif(window.XMLHttpRequest){AJAX=new XMLHttpRequest();}\r\n\t\telse{AJAX=new ActiveXObject('Microsoft.XMLHTTP');}\r\n\t\tif(AJAX){\r\n\t\t   AJAX.open('GET',url,false);\r\n\t\t   AJAX.send(null);\r\n\t\t   return AJAX.responseText;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// parse xml\r\n\tsvg.parseXml = function(xml) {\r\n\t\tif (typeof Windows != 'undefined' && typeof Windows.Data != 'undefined' && typeof Windows.Data.Xml != 'undefined') {\r\n\t\t\tvar xmlDoc = new Windows.Data.Xml.Dom.XmlDocument();\r\n\t\t\tvar settings = new Windows.Data.Xml.Dom.XmlLoadSettings();\r\n\t\t\tsettings.prohibitDtd = false;\r\n\t\t\txmlDoc.loadXml(xml, settings);\r\n\t\t\treturn xmlDoc;\r\n\t\t}\r\n\t\telse if (window.DOMParser)\r\n\t\t{\r\n\t\t\tvar parser = new DOMParser();\r\n\t\t\treturn parser.parseFromString(xml, 'text/xml');\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\txml = xml.replace(/<!DOCTYPE svg[^>]*>/, '');\r\n\t\t\tvar xmlDoc = new ActiveXObject('Microsoft.XMLDOM');\r\n\t\t\txmlDoc.async = 'false';\r\n\t\t\txmlDoc.loadXML(xml);\r\n\t\t\treturn xmlDoc;\r\n\t\t}\r\n\t}\r\n\r\n\tsvg.Property = function(name, value) {\r\n\t\tthis.name = name;\r\n\t\tthis.value = value;\r\n\t}\r\n\t\tsvg.Property.prototype.getValue = function() {\r\n\t\t\treturn this.value;\r\n\t\t}\r\n\r\n\t\tsvg.Property.prototype.hasValue = function() {\r\n\t\t\treturn (this.value != null && this.value != '');\r\n\t\t}\r\n\r\n\t\t// return the numerical value of the property\r\n\t\tsvg.Property.prototype.numValue = function() {\r\n\t\t\tif (!this.hasValue()) return 0;\r\n\r\n\t\t\tvar n = parseFloat(this.value);\r\n\t\t\tif ((this.value + '').match(/%$/)) {\r\n\t\t\t\tn = n / 100.0;\r\n\t\t\t}\r\n\t\t\treturn n;\r\n\t\t}\r\n\r\n\t\tsvg.Property.prototype.valueOrDefault = function(def) {\r\n\t\t\tif (this.hasValue()) return this.value;\r\n\t\t\treturn def;\r\n\t\t}\r\n\r\n\t\tsvg.Property.prototype.numValueOrDefault = function(def) {\r\n\t\t\tif (this.hasValue()) return this.numValue();\r\n\t\t\treturn def;\r\n\t\t}\r\n\r\n\t\t// color extensions\r\n\t\t\t// augment the current color value with the opacity\r\n\t\t\tsvg.Property.prototype.addOpacity = function(opacityProp) {\r\n\t\t\t\tvar newValue = this.value;\r\n\t\t\t\tif (opacityProp.value != null && opacityProp.value != '' && typeof this.value == 'string') { // can only add opacity to colors, not patterns\r\n\t\t\t\t\tvar color = new RGBColor(this.value);\r\n\t\t\t\t\tif (color.ok) {\r\n\t\t\t\t\t\tnewValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacityProp.numValue() + ')';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn new svg.Property(this.name, newValue);\r\n\t\t\t}\r\n\r\n\t\t// definition extensions\r\n\t\t\t// get the definition from the definitions table\r\n\t\t\tsvg.Property.prototype.getDefinition = function() {\r\n\t\t\t\tvar name = this.value.match(/#([^\\)'\"]+)/);\r\n\t\t\t\tif (name) { name = name[1]; }\r\n\t\t\t\tif (!name) { name = this.value; }\r\n\t\t\t\treturn svg.Definitions[name];\r\n\t\t\t}\r\n\r\n\t\t\tsvg.Property.prototype.isUrlDefinition = function() {\r\n\t\t\t\treturn this.value.indexOf('url(') == 0\r\n\t\t\t}\r\n\r\n\t\t\tsvg.Property.prototype.getFillStyleDefinition = function(e, opacityProp) {\r\n\t\t\t\tvar def = this.getDefinition();\r\n\r\n\t\t\t\t// gradient\r\n\t\t\t\tif (def != null && def.createGradient) {\r\n\t\t\t\t\treturn def.createGradient(svg.ctx, e, opacityProp);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// pattern\r\n\t\t\t\tif (def != null && def.createPattern) {\r\n\t\t\t\t\tif (def.getHrefAttribute().hasValue()) {\r\n\t\t\t\t\t\tvar pt = def.attribute('patternTransform');\r\n\t\t\t\t\t\tdef = def.getHrefAttribute().getDefinition();\r\n\t\t\t\t\t\tif (pt.hasValue()) { def.attribute('patternTransform', true).value = pt.value; }\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn def.createPattern(svg.ctx, e);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t// length extensions\r\n\t\t\tsvg.Property.prototype.getDPI = function(viewPort) {\r\n\t\t\t\treturn 96.0; // TODO: compute?\r\n\t\t\t}\r\n\r\n\t\t\tsvg.Property.prototype.getEM = function(viewPort) {\r\n\t\t\t\tvar em = 12;\r\n\r\n\t\t\t\tvar fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);\r\n\t\t\t\tif (fontSize.hasValue()) em = fontSize.toPixels(viewPort);\r\n\r\n\t\t\t\treturn em;\r\n\t\t\t}\r\n\r\n\t\t\tsvg.Property.prototype.getUnits = function() {\r\n\t\t\t\tvar s = this.value+'';\r\n\t\t\t\treturn s.replace(/[0-9\\.\\-]/g,'');\r\n\t\t\t}\r\n\r\n\t\t\t// get the length as pixels\r\n\t\t\tsvg.Property.prototype.toPixels = function(viewPort, processPercent) {\r\n\t\t\t\tif (!this.hasValue()) return 0;\r\n\t\t\t\tvar s = this.value+'';\r\n\t\t\t\tif (s.match(/em$/)) return this.numValue() * this.getEM(viewPort);\r\n\t\t\t\tif (s.match(/ex$/)) return this.numValue() * this.getEM(viewPort) / 2.0;\r\n\t\t\t\tif (s.match(/px$/)) return this.numValue();\r\n\t\t\t\tif (s.match(/pt$/)) return this.numValue() * this.getDPI(viewPort) * (1.0 / 72.0);\r\n\t\t\t\tif (s.match(/pc$/)) return this.numValue() * 15;\r\n\t\t\t\tif (s.match(/cm$/)) return this.numValue() * this.getDPI(viewPort) / 2.54;\r\n\t\t\t\tif (s.match(/mm$/)) return this.numValue() * this.getDPI(viewPort) / 25.4;\r\n\t\t\t\tif (s.match(/in$/)) return this.numValue() * this.getDPI(viewPort);\r\n\t\t\t\tif (s.match(/%$/)) return this.numValue() * svg.ViewPort.ComputeSize(viewPort);\r\n\t\t\t\tvar n = this.numValue();\r\n\t\t\t\tif (processPercent && n < 1.0) return n * svg.ViewPort.ComputeSize(viewPort);\r\n\t\t\t\treturn n;\r\n\t\t\t}\r\n\r\n\t\t// time extensions\r\n\t\t\t// get the time as milliseconds\r\n\t\t\tsvg.Property.prototype.toMilliseconds = function() {\r\n\t\t\t\tif (!this.hasValue()) return 0;\r\n\t\t\t\tvar s = this.value+'';\r\n\t\t\t\tif (s.match(/s$/)) return this.numValue() * 1000;\r\n\t\t\t\tif (s.match(/ms$/)) return this.numValue();\r\n\t\t\t\treturn this.numValue();\r\n\t\t\t}\r\n\r\n\t\t// angle extensions\r\n\t\t\t// get the angle as radians\r\n\t\t\tsvg.Property.prototype.toRadians = function() {\r\n\t\t\t\tif (!this.hasValue()) return 0;\r\n\t\t\t\tvar s = this.value+'';\r\n\t\t\t\tif (s.match(/deg$/)) return this.numValue() * (Math.PI / 180.0);\r\n\t\t\t\tif (s.match(/grad$/)) return this.numValue() * (Math.PI / 200.0);\r\n\t\t\t\tif (s.match(/rad$/)) return this.numValue();\r\n\t\t\t\treturn this.numValue() * (Math.PI / 180.0);\r\n\t\t\t}\r\n\r\n\t\t// text extensions\r\n\t\t\t// get the text baseline\r\n\t\t\tvar textBaselineMapping = {\r\n\t\t\t\t'baseline': 'alphabetic',\r\n\t\t\t\t'before-edge': 'top',\r\n\t\t\t\t'text-before-edge': 'top',\r\n\t\t\t\t'middle': 'middle',\r\n\t\t\t\t'central': 'middle',\r\n\t\t\t\t'after-edge': 'bottom',\r\n\t\t\t\t'text-after-edge': 'bottom',\r\n\t\t\t\t'ideographic': 'ideographic',\r\n\t\t\t\t'alphabetic': 'alphabetic',\r\n\t\t\t\t'hanging': 'hanging',\r\n\t\t\t\t'mathematical': 'alphabetic'\r\n\t\t\t};\r\n\t\t\tsvg.Property.prototype.toTextBaseline = function () {\r\n\t\t\t\tif (!this.hasValue()) return null;\r\n\t\t\t\treturn textBaselineMapping[this.value];\r\n\t\t\t}\r\n\r\n\t// fonts\r\n\tsvg.Font = new (function() {\r\n\t\tthis.Styles = 'normal|italic|oblique|inherit';\r\n\t\tthis.Variants = 'normal|small-caps|inherit';\r\n\t\tthis.Weights = 'normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit';\r\n\r\n\t\tthis.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) {\r\n\t\t\tvar f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font);\r\n\t\t\treturn {\r\n\t\t\t\tfontFamily: fontFamily || f.fontFamily,\r\n\t\t\t\tfontSize: fontSize || f.fontSize,\r\n\t\t\t\tfontStyle: fontStyle || f.fontStyle,\r\n\t\t\t\tfontWeight: fontWeight || f.fontWeight,\r\n\t\t\t\tfontVariant: fontVariant || f.fontVariant,\r\n\t\t\t\ttoString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') }\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar that = this;\r\n\t\tthis.Parse = function(s) {\r\n\t\t\tvar f = {};\r\n\t\t\tvar d = svg.trim(svg.compressSpaces(s || '')).split(' ');\r\n\t\t\tvar set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false }\r\n\t\t\tvar ff = '';\r\n\t\t\tfor (var i=0; i<d.length; i++) {\r\n\t\t\t\tif (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; }\r\n\t\t\t\telse if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true;\t}\r\n\t\t\t\telse if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) {\tif (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; }\r\n\t\t\t\telse if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; }\r\n\t\t\t\telse { if (d[i] != 'inherit') ff += d[i]; }\r\n\t\t\t} if (ff != '') f.fontFamily = ff;\r\n\t\t\treturn f;\r\n\t\t}\r\n\t});\r\n\r\n\t// points and paths\r\n\tsvg.ToNumberArray = function(s) {\r\n\t\tvar a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' ');\r\n\t\tfor (var i=0; i<a.length; i++) {\r\n\t\t\ta[i] = parseFloat(a[i]);\r\n\t\t}\r\n\t\treturn a;\r\n\t}\r\n\tsvg.Point = function(x, y) {\r\n\t\tthis.x = x;\r\n\t\tthis.y = y;\r\n\t}\r\n\t\tsvg.Point.prototype.angleTo = function(p) {\r\n\t\t\treturn Math.atan2(p.y - this.y, p.x - this.x);\r\n\t\t}\r\n\r\n\t\tsvg.Point.prototype.applyTransform = function(v) {\r\n\t\t\tvar xp = this.x * v[0] + this.y * v[2] + v[4];\r\n\t\t\tvar yp = this.x * v[1] + this.y * v[3] + v[5];\r\n\t\t\tthis.x = xp;\r\n\t\t\tthis.y = yp;\r\n\t\t}\r\n\r\n\tsvg.CreatePoint = function(s) {\r\n\t\tvar a = svg.ToNumberArray(s);\r\n\t\treturn new svg.Point(a[0], a[1]);\r\n\t}\r\n\tsvg.CreatePath = function(s) {\r\n\t\tvar a = svg.ToNumberArray(s);\r\n\t\tvar path = [];\r\n\t\tfor (var i=0; i<a.length; i+=2) {\r\n\t\t\tpath.push(new svg.Point(a[i], a[i+1]));\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t// bounding box\r\n\tsvg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want\r\n\t\tthis.x1 = Number.NaN;\r\n\t\tthis.y1 = Number.NaN;\r\n\t\tthis.x2 = Number.NaN;\r\n\t\tthis.y2 = Number.NaN;\r\n\r\n\t\tthis.x = function() { return this.x1; }\r\n\t\tthis.y = function() { return this.y1; }\r\n\t\tthis.width = function() { return this.x2 - this.x1; }\r\n\t\tthis.height = function() { return this.y2 - this.y1; }\r\n\r\n\t\tthis.addPoint = function(x, y) {\r\n\t\t\tif (x != null) {\r\n\t\t\t\tif (isNaN(this.x1) || isNaN(this.x2)) {\r\n\t\t\t\t\tthis.x1 = x;\r\n\t\t\t\t\tthis.x2 = x;\r\n\t\t\t\t}\r\n\t\t\t\tif (x < this.x1) this.x1 = x;\r\n\t\t\t\tif (x > this.x2) this.x2 = x;\r\n\t\t\t}\r\n\r\n\t\t\tif (y != null) {\r\n\t\t\t\tif (isNaN(this.y1) || isNaN(this.y2)) {\r\n\t\t\t\t\tthis.y1 = y;\r\n\t\t\t\t\tthis.y2 = y;\r\n\t\t\t\t}\r\n\t\t\t\tif (y < this.y1) this.y1 = y;\r\n\t\t\t\tif (y > this.y2) this.y2 = y;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.addX = function(x) { this.addPoint(x, null); }\r\n\t\tthis.addY = function(y) { this.addPoint(null, y); }\r\n\r\n\t\tthis.addBoundingBox = function(bb) {\r\n\t\t\tthis.addPoint(bb.x1, bb.y1);\r\n\t\t\tthis.addPoint(bb.x2, bb.y2);\r\n\t\t}\r\n\r\n\t\tthis.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) {\r\n\t\t\tvar cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)\r\n\t\t\tvar cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)\r\n\t\t\tvar cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)\r\n\t\t\tvar cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)\r\n\t\t\tthis.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y,\tcp2y, p2x, p2y);\r\n\t\t}\r\n\r\n\t\tthis.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\r\n\t\t\t// from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\r\n\t\t\tvar p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y];\r\n\t\t\tthis.addPoint(p0[0], p0[1]);\r\n\t\t\tthis.addPoint(p3[0], p3[1]);\r\n\r\n\t\t\tfor (var i=0; i<=1; i++) {\r\n\t\t\t\tvar f = function(t) {\r\n\t\t\t\t\treturn Math.pow(1-t, 3) * p0[i]\r\n\t\t\t\t\t+ 3 * Math.pow(1-t, 2) * t * p1[i]\r\n\t\t\t\t\t+ 3 * (1-t) * Math.pow(t, 2) * p2[i]\r\n\t\t\t\t\t+ Math.pow(t, 3) * p3[i];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\r\n\t\t\t\tvar a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\r\n\t\t\t\tvar c = 3 * p1[i] - 3 * p0[i];\r\n\r\n\t\t\t\tif (a == 0) {\r\n\t\t\t\t\tif (b == 0) continue;\r\n\t\t\t\t\tvar t = -c / b;\r\n\t\t\t\t\tif (0 < t && t < 1) {\r\n\t\t\t\t\t\tif (i == 0) this.addX(f(t));\r\n\t\t\t\t\t\tif (i == 1) this.addY(f(t));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar b2ac = Math.pow(b, 2) - 4 * c * a;\r\n\t\t\t\tif (b2ac < 0) continue;\r\n\t\t\t\tvar t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\r\n\t\t\t\tif (0 < t1 && t1 < 1) {\r\n\t\t\t\t\tif (i == 0) this.addX(f(t1));\r\n\t\t\t\t\tif (i == 1) this.addY(f(t1));\r\n\t\t\t\t}\r\n\t\t\t\tvar t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\r\n\t\t\t\tif (0 < t2 && t2 < 1) {\r\n\t\t\t\t\tif (i == 0) this.addX(f(t2));\r\n\t\t\t\t\tif (i == 1) this.addY(f(t2));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.isPointInBox = function(x, y) {\r\n\t\t\treturn (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2);\r\n\t\t}\r\n\r\n\t\tthis.addPoint(x1, y1);\r\n\t\tthis.addPoint(x2, y2);\r\n\t}\r\n\r\n\t// transforms\r\n\tsvg.Transform = function(v) {\r\n\t\tvar that = this;\r\n\t\tthis.Type = {}\r\n\r\n\t\t// translate\r\n\t\tthis.Type.translate = function(s) {\r\n\t\t\tthis.p = svg.CreatePoint(s);\r\n\t\t\tthis.apply = function(ctx) {\r\n\t\t\t\tctx.translate(this.p.x || 0.0, this.p.y || 0.0);\r\n\t\t\t}\r\n\t\t\tthis.unapply = function(ctx) {\r\n\t\t\t\tctx.translate(-1.0 * this.p.x || 0.0, -1.0 * this.p.y || 0.0);\r\n\t\t\t}\r\n\t\t\tthis.applyToPoint = function(p) {\r\n\t\t\t\tp.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// rotate\r\n\t\tthis.Type.rotate = function(s) {\r\n\t\t\tvar a = svg.ToNumberArray(s);\r\n\t\t\tthis.angle = new svg.Property('angle', a[0]);\r\n\t\t\tthis.cx = a[1] || 0;\r\n\t\t\tthis.cy = a[2] || 0;\r\n\t\t\tthis.apply = function(ctx) {\r\n\t\t\t\tctx.translate(this.cx, this.cy);\r\n\t\t\t\tctx.rotate(this.angle.toRadians());\r\n\t\t\t\tctx.translate(-this.cx, -this.cy);\r\n\t\t\t}\r\n\t\t\tthis.unapply = function(ctx) {\r\n\t\t\t\tctx.translate(this.cx, this.cy);\r\n\t\t\t\tctx.rotate(-1.0 * this.angle.toRadians());\r\n\t\t\t\tctx.translate(-this.cx, -this.cy);\r\n\t\t\t}\r\n\t\t\tthis.applyToPoint = function(p) {\r\n\t\t\t\tvar a = this.angle.toRadians();\r\n\t\t\t\tp.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]);\r\n\t\t\t\tp.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);\r\n\t\t\t\tp.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.Type.scale = function(s) {\r\n\t\t\tthis.p = svg.CreatePoint(s);\r\n\t\t\tthis.apply = function(ctx) {\r\n\t\t\t\tctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0);\r\n\t\t\t}\r\n\t\t\tthis.unapply = function(ctx) {\r\n\t\t\t\tctx.scale(1.0 / this.p.x || 1.0, 1.0 / this.p.y || this.p.x || 1.0);\r\n\t\t\t}\r\n\t\t\tthis.applyToPoint = function(p) {\r\n\t\t\t\tp.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.Type.matrix = function(s) {\r\n\t\t\tthis.m = svg.ToNumberArray(s);\r\n\t\t\tthis.apply = function(ctx) {\r\n\t\t\t\tctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]);\r\n\t\t\t}\r\n\t\t\tthis.unapply = function(ctx) {\r\n\t\t\t\tvar a = this.m[0];\r\n\t\t\t\tvar b = this.m[2];\r\n\t\t\t\tvar c = this.m[4];\r\n\t\t\t\tvar d = this.m[1];\r\n\t\t\t\tvar e = this.m[3];\r\n\t\t\t\tvar f = this.m[5];\r\n\t\t\t\tvar g = 0.0;\r\n\t\t\t\tvar h = 0.0;\r\n\t\t\t\tvar i = 1.0;\r\n\t\t\t\tvar det = 1 / (a*(e*i-f*h)-b*(d*i-f*g)+c*(d*h-e*g));\r\n\t\t\t\tctx.transform(\r\n\t\t\t\t\tdet*(e*i-f*h),\r\n\t\t\t\t\tdet*(f*g-d*i),\r\n\t\t\t\t\tdet*(c*h-b*i),\r\n\t\t\t\t\tdet*(a*i-c*g),\r\n\t\t\t\t\tdet*(b*f-c*e),\r\n\t\t\t\t\tdet*(c*d-a*f)\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tthis.applyToPoint = function(p) {\r\n\t\t\t\tp.applyTransform(this.m);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.Type.SkewBase = function(s) {\r\n\t\t\tthis.base = that.Type.matrix;\r\n\t\t\tthis.base(s);\r\n\t\t\tthis.angle = new svg.Property('angle', s);\r\n\t\t}\r\n\t\tthis.Type.SkewBase.prototype = new this.Type.matrix;\r\n\r\n\t\tthis.Type.skewX = function(s) {\r\n\t\t\tthis.base = that.Type.SkewBase;\r\n\t\t\tthis.base(s);\r\n\t\t\tthis.m = [1, 0, Math.tan(this.angle.toRadians()), 1, 0, 0];\r\n\t\t}\r\n\t\tthis.Type.skewX.prototype = new this.Type.SkewBase;\r\n\r\n\t\tthis.Type.skewY = function(s) {\r\n\t\t\tthis.base = that.Type.SkewBase;\r\n\t\t\tthis.base(s);\r\n\t\t\tthis.m = [1, Math.tan(this.angle.toRadians()), 0, 1, 0, 0];\r\n\t\t}\r\n\t\tthis.Type.skewY.prototype = new this.Type.SkewBase;\r\n\r\n\t\tthis.transforms = [];\r\n\r\n\t\tthis.apply = function(ctx) {\r\n\t\t\tfor (var i=0; i<this.transforms.length; i++) {\r\n\t\t\t\tthis.transforms[i].apply(ctx);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.unapply = function(ctx) {\r\n\t\t\tfor (var i=this.transforms.length-1; i>=0; i--) {\r\n\t\t\t\tthis.transforms[i].unapply(ctx);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.applyToPoint = function(p) {\r\n\t\t\tfor (var i=0; i<this.transforms.length; i++) {\r\n\t\t\t\tthis.transforms[i].applyToPoint(p);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar data = svg.trim(svg.compressSpaces(v)).replace(/\\)([a-zA-Z])/g, ') $1').replace(/\\)(\\s?,\\s?)/g,') ').split(/\\s(?=[a-z])/);\r\n\t\tfor (var i=0; i<data.length; i++) {\r\n\t\t\tvar type = svg.trim(data[i].split('(')[0]);\r\n\t\t\tvar s = data[i].split('(')[1].replace(')','');\r\n\t\t\tvar transformType = this.Type[type];\r\n\t\t\tif (typeof transformType != 'undefined') {\r\n\t\t\t\tvar transform = new transformType(s);\r\n\t\t\t\ttransform.type = type;\r\n\t\t\t\tthis.transforms.push(transform);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// aspect ratio\r\n\tsvg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) {\r\n\t\t// aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\r\n\t\taspectRatio = svg.compressSpaces(aspectRatio);\r\n\t\taspectRatio = aspectRatio.replace(/^defer\\s/,''); // ignore defer\r\n\t\tvar align = aspectRatio.split(' ')[0] || 'xMidYMid';\r\n\t\tvar meetOrSlice = aspectRatio.split(' ')[1] || 'meet';\r\n\r\n\t\t// calculate scale\r\n\t\tvar scaleX = width / desiredWidth;\r\n\t\tvar scaleY = height / desiredHeight;\r\n\t\tvar scaleMin = Math.min(scaleX, scaleY);\r\n\t\tvar scaleMax = Math.max(scaleX, scaleY);\r\n\t\tif (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; }\r\n\t\tif (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; }\r\n\r\n\t\trefX = new svg.Property('refX', refX);\r\n\t\trefY = new svg.Property('refY', refY);\r\n\t\tif (refX.hasValue() && refY.hasValue()) {\r\n\t\t\tctx.translate(-scaleMin * refX.toPixels('x'), -scaleMin * refY.toPixels('y'));\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// align\r\n\t\t\tif (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0);\r\n\t\t\tif (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0);\r\n\t\t\tif (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0);\r\n\t\t\tif (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight);\r\n\t\t}\r\n\r\n\t\t// scale\r\n\t\tif (align == 'none') ctx.scale(scaleX, scaleY);\r\n\t\telse if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin);\r\n\t\telse if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax);\r\n\r\n\t\t// translate\r\n\t\tctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY);\r\n\t}\r\n\r\n\t// elements\r\n\tsvg.Element = {}\r\n\r\n\tsvg.EmptyProperty = new svg.Property('EMPTY', '');\r\n\r\n\tsvg.Element.ElementBase = function(node) {\r\n\t\tthis.attributes = {};\r\n\t\tthis.styles = {};\r\n\t\tthis.stylesSpecificity = {};\r\n\t\tthis.children = [];\r\n\r\n\t\t// get or create attribute\r\n\t\tthis.attribute = function(name, createIfNotExists) {\r\n\t\t\tvar a = this.attributes[name];\r\n\t\t\tif (a != null) return a;\r\n\r\n\t\t\tif (createIfNotExists == true) { a = new svg.Property(name, ''); this.attributes[name] = a; }\r\n\t\t\treturn a || svg.EmptyProperty;\r\n\t\t}\r\n\r\n\t\tthis.getHrefAttribute = function() {\r\n\t\t\tfor (var a in this.attributes) {\r\n\t\t\t\tif (a == 'href' || a.match(/:href$/)) {\r\n\t\t\t\t\treturn this.attributes[a];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn svg.EmptyProperty;\r\n\t\t}\r\n\r\n\t\t// get or create style, crawls up node tree\r\n\t\tthis.style = function(name, createIfNotExists, skipAncestors) {\r\n\t\t\tvar s = this.styles[name];\r\n\t\t\tif (s != null) return s;\r\n\r\n\t\t\tvar a = this.attribute(name);\r\n\t\t\tif (a != null && a.hasValue()) {\r\n\t\t\t\tthis.styles[name] = a; // move up to me to cache\r\n\t\t\t\treturn a;\r\n\t\t\t}\r\n\r\n\t\t\tif (skipAncestors != true) {\r\n\t\t\t\tvar p = this.parent;\r\n\t\t\t\tif (p != null) {\r\n\t\t\t\t\tvar ps = p.style(name);\r\n\t\t\t\t\tif (ps != null && ps.hasValue()) {\r\n\t\t\t\t\t\treturn ps;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (createIfNotExists == true) { s = new svg.Property(name, ''); this.styles[name] = s; }\r\n\t\t\treturn s || svg.EmptyProperty;\r\n\t\t}\r\n\r\n\t\t// base render\r\n\t\tthis.render = function(ctx) {\r\n\t\t\t// don't render display=none\r\n\t\t\tif (this.style('display').value == 'none') return;\r\n\r\n\t\t\t// don't render visibility=hidden\r\n\t\t\tif (this.style('visibility').value == 'hidden') return;\r\n\r\n\t\t\tctx.save();\r\n\t\t\tif (this.style('mask').hasValue()) { // mask\r\n\t\t\t\tvar mask = this.style('mask').getDefinition();\r\n\t\t\t\tif (mask != null) mask.apply(ctx, this);\r\n\t\t\t}\r\n\t\t\telse if (this.style('filter').hasValue()) { // filter\r\n\t\t\t\tvar filter = this.style('filter').getDefinition();\r\n\t\t\t\tif (filter != null) filter.apply(ctx, this);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.setContext(ctx);\r\n\t\t\t\tthis.renderChildren(ctx);\r\n\t\t\t\tthis.clearContext(ctx);\r\n\t\t\t}\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\r\n\t\t// base set context\r\n\t\tthis.setContext = function(ctx) {\r\n\t\t\t// OVERRIDE ME!\r\n\t\t}\r\n\r\n\t\t// base clear context\r\n\t\tthis.clearContext = function(ctx) {\r\n\t\t\t// OVERRIDE ME!\r\n\t\t}\r\n\r\n\t\t// base render children\r\n\t\tthis.renderChildren = function(ctx) {\r\n\t\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\t\tthis.children[i].render(ctx);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.addChild = function(childNode, create) {\r\n\t\t\tvar child = childNode;\r\n\t\t\tif (create) child = svg.CreateElement(childNode);\r\n\t\t\tchild.parent = this;\r\n\t\t\tif (child.type != 'title') { this.children.push(child);\t}\r\n\t\t}\r\n\r\n\t\tthis.addStylesFromStyleDefinition = function () {\r\n\t\t\t// add styles\r\n\t\t\tfor (var selector in svg.Styles) {\r\n\t\t\t\tif (selector[0] != '@' && matchesSelector(node, selector)) {\r\n\t\t\t\t\tvar styles = svg.Styles[selector];\r\n\t\t\t\t\tvar specificity = svg.StylesSpecificity[selector];\r\n\t\t\t\t\tif (styles != null) {\r\n\t\t\t\t\t\tfor (var name in styles) {\r\n\t\t\t\t\t\t\tvar existingSpecificity = this.stylesSpecificity[name];\r\n\t\t\t\t\t\t\tif (typeof existingSpecificity == 'undefined') {\r\n\t\t\t\t\t\t\t\texistingSpecificity = '000';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (specificity > existingSpecificity) {\r\n\t\t\t\t\t\t\t\tthis.styles[name] = styles[name];\r\n\t\t\t\t\t\t\t\tthis.stylesSpecificity[name] = specificity;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif (node != null && node.nodeType == 1) { //ELEMENT_NODE\r\n\t\t\t// add attributes\r\n\t\t\tfor (var i=0; i<node.attributes.length; i++) {\r\n\t\t\t\tvar attribute = node.attributes[i];\r\n\t\t\t\tthis.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.value);\r\n\t\t\t}\r\n\r\n\t\t\tthis.addStylesFromStyleDefinition();\r\n\r\n\t\t\t// add inline styles\r\n\t\t\tif (this.attribute('style').hasValue()) {\r\n\t\t\t\tvar styles = this.attribute('style').value.split(';');\r\n\t\t\t\tfor (var i=0; i<styles.length; i++) {\r\n\t\t\t\t\tif (svg.trim(styles[i]) != '') {\r\n\t\t\t\t\t\tvar style = styles[i].split(':');\r\n\t\t\t\t\t\tvar name = svg.trim(style[0]);\r\n\t\t\t\t\t\tvar value = svg.trim(style[1]);\r\n\t\t\t\t\t\tthis.styles[name] = new svg.Property(name, value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// add id\r\n\t\t\tif (this.attribute('id').hasValue()) {\r\n\t\t\t\tif (svg.Definitions[this.attribute('id').value] == null) {\r\n\t\t\t\t\tsvg.Definitions[this.attribute('id').value] = this;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// add children\r\n\t\t\tfor (var i=0; i<node.childNodes.length; i++) {\r\n\t\t\t\tvar childNode = node.childNodes[i];\r\n\t\t\t\tif (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE\r\n\t\t\t\tif (this.captureTextNodes && (childNode.nodeType == 3 || childNode.nodeType == 4)) {\r\n\t\t\t\t\tvar text = childNode.value || childNode.text || childNode.textContent || '';\r\n\t\t\t\t\tif (svg.compressSpaces(text) != '') {\r\n\t\t\t\t\t\tthis.addChild(new svg.Element.tspan(childNode), false); // TEXT_NODE\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsvg.Element.RenderedElementBase = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.setContext = function(ctx) {\r\n\t\t\t// fill\r\n\t\t\tif (this.style('fill').isUrlDefinition()) {\r\n\t\t\t\tvar fs = this.style('fill').getFillStyleDefinition(this, this.style('fill-opacity'));\r\n\t\t\t\tif (fs != null) ctx.fillStyle = fs;\r\n\t\t\t}\r\n\t\t\telse if (this.style('fill').hasValue()) {\r\n\t\t\t\tvar fillStyle = this.style('fill');\r\n\t\t\t\tif (fillStyle.value == 'currentColor') fillStyle.value = this.style('color').value;\r\n\t\t\t\tif (fillStyle.value != 'inherit') ctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value);\r\n\t\t\t}\r\n\t\t\tif (this.style('fill-opacity').hasValue()) {\r\n\t\t\t\tvar fillStyle = new svg.Property('fill', ctx.fillStyle);\r\n\t\t\t\tfillStyle = fillStyle.addOpacity(this.style('fill-opacity'));\r\n\t\t\t\tctx.fillStyle = fillStyle.value;\r\n\t\t\t}\r\n\r\n\t\t\t// stroke\r\n\t\t\tif (this.style('stroke').isUrlDefinition()) {\r\n\t\t\t\tvar fs = this.style('stroke').getFillStyleDefinition(this, this.style('stroke-opacity'));\r\n\t\t\t\tif (fs != null) ctx.strokeStyle = fs;\r\n\t\t\t}\r\n\t\t\telse if (this.style('stroke').hasValue()) {\r\n\t\t\t\tvar strokeStyle = this.style('stroke');\r\n\t\t\t\tif (strokeStyle.value == 'currentColor') strokeStyle.value = this.style('color').value;\r\n\t\t\t\tif (strokeStyle.value != 'inherit') ctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value);\r\n\t\t\t}\r\n\t\t\tif (this.style('stroke-opacity').hasValue()) {\r\n\t\t\t\tvar strokeStyle = new svg.Property('stroke', ctx.strokeStyle);\r\n\t\t\t\tstrokeStyle = strokeStyle.addOpacity(this.style('stroke-opacity'));\r\n\t\t\t\tctx.strokeStyle = strokeStyle.value;\r\n\t\t\t}\r\n\t\t\tif (this.style('stroke-width').hasValue()) {\r\n\t\t\t\tvar newLineWidth = this.style('stroke-width').toPixels();\r\n\t\t\t\tctx.lineWidth = newLineWidth == 0 ? 0.001 : newLineWidth; // browsers don't respect 0\r\n\t\t    }\r\n\t\t\tif (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value;\r\n\t\t\tif (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value;\r\n\t\t\tif (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value;\r\n\t\t\tif (this.style('stroke-dasharray').hasValue() && this.style('stroke-dasharray').value != 'none') {\r\n\t\t\t\tvar gaps = svg.ToNumberArray(this.style('stroke-dasharray').value);\r\n\t\t\t\tif (typeof ctx.setLineDash != 'undefined') { ctx.setLineDash(gaps); }\r\n\t\t\t\telse if (typeof ctx.webkitLineDash != 'undefined') { ctx.webkitLineDash = gaps; }\r\n\t\t\t\telse if (typeof ctx.mozDash != 'undefined' && !(gaps.length==1 && gaps[0]==0)) { ctx.mozDash = gaps; }\r\n\r\n\t\t\t\tvar offset = this.style('stroke-dashoffset').numValueOrDefault(1);\r\n\t\t\t\tif (typeof ctx.lineDashOffset != 'undefined') { ctx.lineDashOffset = offset; }\r\n\t\t\t\telse if (typeof ctx.webkitLineDashOffset != 'undefined') { ctx.webkitLineDashOffset = offset; }\r\n\t\t\t\telse if (typeof ctx.mozDashOffset != 'undefined') { ctx.mozDashOffset = offset; }\r\n\t\t\t}\r\n\r\n\t\t\t// font\r\n\t\t\tif (typeof ctx.font != 'undefined') {\r\n\t\t\t\tctx.font = svg.Font.CreateFont(\r\n\t\t\t\t\tthis.style('font-style').value,\r\n\t\t\t\t\tthis.style('font-variant').value,\r\n\t\t\t\t\tthis.style('font-weight').value,\r\n\t\t\t\t\tthis.style('font-size').hasValue() ? this.style('font-size').toPixels() + 'px' : '',\r\n\t\t\t\t\tthis.style('font-family').value).toString();\r\n\t\t\t}\r\n\r\n\t\t\t// transform\r\n\t\t\tif (this.style('transform', false, true).hasValue()) {\r\n\t\t\t\tvar transform = new svg.Transform(this.style('transform', false, true).value);\r\n\t\t\t\ttransform.apply(ctx);\r\n\t\t\t}\r\n\r\n\t\t\t// clip\r\n\t\t\tif (this.style('clip-path', false, true).hasValue()) {\r\n\t\t\t\tvar clip = this.style('clip-path', false, true).getDefinition();\r\n\t\t\t\tif (clip != null) clip.apply(ctx);\r\n\t\t\t}\r\n\r\n\t\t\t// opacity\r\n\t\t\tif (this.style('opacity').hasValue()) {\r\n\t\t\t\tctx.globalAlpha = this.style('opacity').numValue();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tsvg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase;\r\n\r\n\tsvg.Element.PathElementBase = function(node) {\r\n\t\tthis.base = svg.Element.RenderedElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tif (ctx != null) ctx.beginPath();\r\n\t\t\treturn new svg.BoundingBox();\r\n\t\t}\r\n\r\n\t\tthis.renderChildren = function(ctx) {\r\n\t\t\tthis.path(ctx);\r\n\t\t\tsvg.Mouse.checkPath(this, ctx);\r\n\t\t\tif (ctx.fillStyle != '') {\r\n\t\t\t\tif (this.style('fill-rule').valueOrDefault('inherit') != 'inherit') { ctx.fill(this.style('fill-rule').value); }\r\n\t\t\t\telse { ctx.fill(); }\r\n\t\t\t}\r\n\t\t\tif (ctx.strokeStyle != '') ctx.stroke();\r\n\r\n\t\t\tvar markers = this.getMarkers();\r\n\t\t\tif (markers != null) {\r\n\t\t\t\tif (this.style('marker-start').isUrlDefinition()) {\r\n\t\t\t\t\tvar marker = this.style('marker-start').getDefinition();\r\n\t\t\t\t\tmarker.render(ctx, markers[0][0], markers[0][1]);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.style('marker-mid').isUrlDefinition()) {\r\n\t\t\t\t\tvar marker = this.style('marker-mid').getDefinition();\r\n\t\t\t\t\tfor (var i=1;i<markers.length-1;i++) {\r\n\t\t\t\t\t\tmarker.render(ctx, markers[i][0], markers[i][1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.style('marker-end').isUrlDefinition()) {\r\n\t\t\t\t\tvar marker = this.style('marker-end').getDefinition();\r\n\t\t\t\t\tmarker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.getBoundingBox = function() {\r\n\t\t\treturn this.path();\r\n\t\t}\r\n\r\n\t\tthis.getMarkers = function() {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase;\r\n\r\n\t// svg element\r\n\tsvg.Element.svg = function(node) {\r\n\t\tthis.base = svg.Element.RenderedElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.baseClearContext = this.clearContext;\r\n\t\tthis.clearContext = function(ctx) {\r\n\t\t\tthis.baseClearContext(ctx);\r\n\t\t\tsvg.ViewPort.RemoveCurrent();\r\n\t\t}\r\n\r\n\t\tthis.baseSetContext = this.setContext;\r\n\t\tthis.setContext = function(ctx) {\r\n\t\t\t// initial values and defaults\r\n\t\t\tctx.strokeStyle = 'rgba(0,0,0,0)';\r\n\t\t\tctx.lineCap = 'butt';\r\n\t\t\tctx.lineJoin = 'miter';\r\n\t\t\tctx.miterLimit = 4;\r\n\t\t\tif (typeof ctx.font != 'undefined' && typeof window.getComputedStyle != 'undefined') {\r\n\t\t\t\tctx.font = window.getComputedStyle(ctx.canvas).getPropertyValue('font');\r\n\t\t\t}\r\n\r\n\t\t\tthis.baseSetContext(ctx);\r\n\r\n\t\t\t// create new view port\r\n\t\t\tif (!this.attribute('x').hasValue()) this.attribute('x', true).value = 0;\r\n\t\t\tif (!this.attribute('y').hasValue()) this.attribute('y', true).value = 0;\r\n\t\t\tctx.translate(this.attribute('x').toPixels('x'), this.attribute('y').toPixels('y'));\r\n\r\n\t\t\tvar width = svg.ViewPort.width();\r\n\t\t\tvar height = svg.ViewPort.height();\r\n\r\n\t\t\tif (!this.attribute('width').hasValue()) this.attribute('width', true).value = '100%';\r\n\t\t\tif (!this.attribute('height').hasValue()) this.attribute('height', true).value = '100%';\r\n\t\t\tif (typeof this.root == 'undefined') {\r\n\t\t\t\twidth = this.attribute('width').toPixels('x');\r\n\t\t\t\theight = this.attribute('height').toPixels('y');\r\n\r\n\t\t\t\tvar x = 0;\r\n\t\t\t\tvar y = 0;\r\n\t\t\t\tif (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) {\r\n\t\t\t\t\tx = -this.attribute('refX').toPixels('x');\r\n\t\t\t\t\ty = -this.attribute('refY').toPixels('y');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.attribute('overflow').valueOrDefault('hidden') != 'visible') {\r\n\t\t\t\t\tctx.beginPath();\r\n\t\t\t\t\tctx.moveTo(x, y);\r\n\t\t\t\t\tctx.lineTo(width, y);\r\n\t\t\t\t\tctx.lineTo(width, height);\r\n\t\t\t\t\tctx.lineTo(x, height);\r\n\t\t\t\t\tctx.closePath();\r\n\t\t\t\t\tctx.clip();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsvg.ViewPort.SetCurrent(width, height);\r\n\r\n\t\t\t// viewbox\r\n\t\t\tif (this.attribute('viewBox').hasValue()) {\r\n\t\t\t\tvar viewBox = svg.ToNumberArray(this.attribute('viewBox').value);\r\n\t\t\t\tvar minX = viewBox[0];\r\n\t\t\t\tvar minY = viewBox[1];\r\n\t\t\t\twidth = viewBox[2];\r\n\t\t\t\theight = viewBox[3];\r\n\r\n\t\t\t\tsvg.AspectRatio(ctx,\r\n\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value,\r\n\t\t\t\t\t\t\t\tsvg.ViewPort.width(),\r\n\t\t\t\t\t\t\t\twidth,\r\n\t\t\t\t\t\t\t\tsvg.ViewPort.height(),\r\n\t\t\t\t\t\t\t\theight,\r\n\t\t\t\t\t\t\t\tminX,\r\n\t\t\t\t\t\t\t\tminY,\r\n\t\t\t\t\t\t\t\tthis.attribute('refX').value,\r\n\t\t\t\t\t\t\t\tthis.attribute('refY').value);\r\n\r\n\t\t\t\tsvg.ViewPort.RemoveCurrent();\r\n\t\t\t\tsvg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tsvg.Element.svg.prototype = new svg.Element.RenderedElementBase;\r\n\r\n\t// rect element\r\n\tsvg.Element.rect = function(node) {\r\n\t\tthis.base = svg.Element.PathElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tvar x = this.attribute('x').toPixels('x');\r\n\t\t\tvar y = this.attribute('y').toPixels('y');\r\n\t\t\tvar width = this.attribute('width').toPixels('x');\r\n\t\t\tvar height = this.attribute('height').toPixels('y');\r\n\t\t\tvar rx = this.attribute('rx').toPixels('x');\r\n\t\t\tvar ry = this.attribute('ry').toPixels('y');\r\n\t\t\tif (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx;\r\n\t\t\tif (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry;\r\n\t\t\trx = Math.min(rx, width / 2.0);\r\n\t\t\try = Math.min(ry, height / 2.0);\r\n\t\t\tif (ctx != null) {\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.moveTo(x + rx, y);\r\n\t\t\t\tctx.lineTo(x + width - rx, y);\r\n\t\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + ry)\r\n\t\t\t\tctx.lineTo(x + width, y + height - ry);\r\n\t\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height)\r\n\t\t\t\tctx.lineTo(x + rx, y + height);\r\n\t\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - ry)\r\n\t\t\t\tctx.lineTo(x, y + ry);\r\n\t\t\t\tctx.quadraticCurveTo(x, y, x + rx, y)\r\n\t\t\t\tctx.closePath();\r\n\t\t\t}\r\n\r\n\t\t\treturn new svg.BoundingBox(x, y, x + width, y + height);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.rect.prototype = new svg.Element.PathElementBase;\r\n\r\n\t// circle element\r\n\tsvg.Element.circle = function(node) {\r\n\t\tthis.base = svg.Element.PathElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tvar cx = this.attribute('cx').toPixels('x');\r\n\t\t\tvar cy = this.attribute('cy').toPixels('y');\r\n\t\t\tvar r = this.attribute('r').toPixels();\r\n\r\n\t\t\tif (ctx != null) {\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.arc(cx, cy, r, 0, Math.PI * 2, true);\r\n\t\t\t\tctx.closePath();\r\n\t\t\t}\r\n\r\n\t\t\treturn new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.circle.prototype = new svg.Element.PathElementBase;\r\n\r\n\t// ellipse element\r\n\tsvg.Element.ellipse = function(node) {\r\n\t\tthis.base = svg.Element.PathElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tvar KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\r\n\t\t\tvar rx = this.attribute('rx').toPixels('x');\r\n\t\t\tvar ry = this.attribute('ry').toPixels('y');\r\n\t\t\tvar cx = this.attribute('cx').toPixels('x');\r\n\t\t\tvar cy = this.attribute('cy').toPixels('y');\r\n\r\n\t\t\tif (ctx != null) {\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.moveTo(cx, cy - ry);\r\n\t\t\t\tctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry,  cx + rx, cy - (KAPPA * ry), cx + rx, cy);\r\n\t\t\t\tctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry);\r\n\t\t\t\tctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy);\r\n\t\t\t\tctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry);\r\n\t\t\t\tctx.closePath();\r\n\t\t\t}\r\n\r\n\t\t\treturn new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.ellipse.prototype = new svg.Element.PathElementBase;\r\n\r\n\t// line element\r\n\tsvg.Element.line = function(node) {\r\n\t\tthis.base = svg.Element.PathElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.getPoints = function() {\r\n\t\t\treturn [\r\n\t\t\t\tnew svg.Point(this.attribute('x1').toPixels('x'), this.attribute('y1').toPixels('y')),\r\n\t\t\t\tnew svg.Point(this.attribute('x2').toPixels('x'), this.attribute('y2').toPixels('y'))];\r\n\t\t}\r\n\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tvar points = this.getPoints();\r\n\r\n\t\t\tif (ctx != null) {\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.moveTo(points[0].x, points[0].y);\r\n\t\t\t\tctx.lineTo(points[1].x, points[1].y);\r\n\t\t\t}\r\n\r\n\t\t\treturn new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y);\r\n\t\t}\r\n\r\n\t\tthis.getMarkers = function() {\r\n\t\t\tvar points = this.getPoints();\r\n\t\t\tvar a = points[0].angleTo(points[1]);\r\n\t\t\treturn [[points[0], a], [points[1], a]];\r\n\t\t}\r\n\t}\r\n\tsvg.Element.line.prototype = new svg.Element.PathElementBase;\r\n\r\n\t// polyline element\r\n\tsvg.Element.polyline = function(node) {\r\n\t\tthis.base = svg.Element.PathElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.points = svg.CreatePath(this.attribute('points').value);\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tvar bb = new svg.BoundingBox(this.points[0].x, this.points[0].y);\r\n\t\t\tif (ctx != null) {\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.moveTo(this.points[0].x, this.points[0].y);\r\n\t\t\t}\r\n\t\t\tfor (var i=1; i<this.points.length; i++) {\r\n\t\t\t\tbb.addPoint(this.points[i].x, this.points[i].y);\r\n\t\t\t\tif (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y);\r\n\t\t\t}\r\n\t\t\treturn bb;\r\n\t\t}\r\n\r\n\t\tthis.getMarkers = function() {\r\n\t\t\tvar markers = [];\r\n\t\t\tfor (var i=0; i<this.points.length - 1; i++) {\r\n\t\t\t\tmarkers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]);\r\n\t\t\t}\r\n\t\t\tif (markers.length > 0) {\r\n\t\t\t\tmarkers.push([this.points[this.points.length-1], markers[markers.length-1][1]]);\r\n\t\t\t}\r\n\t\t\treturn markers;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.polyline.prototype = new svg.Element.PathElementBase;\r\n\r\n\t// polygon element\r\n\tsvg.Element.polygon = function(node) {\r\n\t\tthis.base = svg.Element.polyline;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.basePath = this.path;\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tvar bb = this.basePath(ctx);\r\n\t\t\tif (ctx != null) {\r\n\t\t\t\tctx.lineTo(this.points[0].x, this.points[0].y);\r\n\t\t\t\tctx.closePath();\r\n\t\t\t}\r\n\t\t\treturn bb;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.polygon.prototype = new svg.Element.polyline;\r\n\r\n\t// path element\r\n\tsvg.Element.path = function(node) {\r\n\t\tthis.base = svg.Element.PathElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tvar d = this.attribute('d').value;\r\n\t\t// TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF\r\n\t\td = d.replace(/,/gm,' '); // get rid of all commas\r\n\t\t// As the end of a match can also be the start of the next match, we need to run this replace twice.\r\n\t\tfor(var i=0; i<2; i++)\r\n\t\t\td = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\\s])/gm,'$1 $2'); // suffix commands with spaces\r\n\t\td = d.replace(/([^\\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // prefix commands with spaces\r\n\t\td = d.replace(/([0-9])([+\\-])/gm,'$1 $2'); // separate digits on +- signs\r\n\t\t// Again, we need to run this twice to find all occurances\r\n\t\tfor(var i=0; i<2; i++)\r\n\t\t\td = d.replace(/(\\.[0-9]*)(\\.)/gm,'$1 $2'); // separate digits when they start with a comma\r\n\t\td = d.replace(/([Aa](\\s+[0-9]+){3})\\s+([01])\\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax\r\n\t\td = svg.compressSpaces(d); // compress multiple spaces\r\n\t\td = svg.trim(d);\r\n\t\tthis.PathParser = new (function(d) {\r\n\t\t\tthis.tokens = d.split(' ');\r\n\r\n\t\t\tthis.reset = function() {\r\n\t\t\t\tthis.i = -1;\r\n\t\t\t\tthis.command = '';\r\n\t\t\t\tthis.previousCommand = '';\r\n\t\t\t\tthis.start = new svg.Point(0, 0);\r\n\t\t\t\tthis.control = new svg.Point(0, 0);\r\n\t\t\t\tthis.current = new svg.Point(0, 0);\r\n\t\t\t\tthis.points = [];\r\n\t\t\t\tthis.angles = [];\r\n\t\t\t}\r\n\r\n\t\t\tthis.isEnd = function() {\r\n\t\t\t\treturn this.i >= this.tokens.length - 1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.isCommandOrEnd = function() {\r\n\t\t\t\tif (this.isEnd()) return true;\r\n\t\t\t\treturn this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null;\r\n\t\t\t}\r\n\r\n\t\t\tthis.isRelativeCommand = function() {\r\n\t\t\t\tswitch(this.command)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 'm':\r\n\t\t\t\t\tcase 'l':\r\n\t\t\t\t\tcase 'h':\r\n\t\t\t\t\tcase 'v':\r\n\t\t\t\t\tcase 'c':\r\n\t\t\t\t\tcase 's':\r\n\t\t\t\t\tcase 'q':\r\n\t\t\t\t\tcase 't':\r\n\t\t\t\t\tcase 'a':\r\n\t\t\t\t\tcase 'z':\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tthis.getToken = function() {\r\n\t\t\t\tthis.i++;\r\n\t\t\t\treturn this.tokens[this.i];\r\n\t\t\t}\r\n\r\n\t\t\tthis.getScalar = function() {\r\n\t\t\t\treturn parseFloat(this.getToken());\r\n\t\t\t}\r\n\r\n\t\t\tthis.nextCommand = function() {\r\n\t\t\t\tthis.previousCommand = this.command;\r\n\t\t\t\tthis.command = this.getToken();\r\n\t\t\t}\r\n\r\n\t\t\tthis.getPoint = function() {\r\n\t\t\t\tvar p = new svg.Point(this.getScalar(), this.getScalar());\r\n\t\t\t\treturn this.makeAbsolute(p);\r\n\t\t\t}\r\n\r\n\t\t\tthis.getAsControlPoint = function() {\r\n\t\t\t\tvar p = this.getPoint();\r\n\t\t\t\tthis.control = p;\r\n\t\t\t\treturn p;\r\n\t\t\t}\r\n\r\n\t\t\tthis.getAsCurrentPoint = function() {\r\n\t\t\t\tvar p = this.getPoint();\r\n\t\t\t\tthis.current = p;\r\n\t\t\t\treturn p;\r\n\t\t\t}\r\n\r\n\t\t\tthis.getReflectedControlPoint = function() {\r\n\t\t\t\tif (this.previousCommand.toLowerCase() != 'c' &&\r\n\t\t\t\t    this.previousCommand.toLowerCase() != 's' &&\r\n\t\t\t\t\tthis.previousCommand.toLowerCase() != 'q' &&\r\n\t\t\t\t\tthis.previousCommand.toLowerCase() != 't' ){\r\n\t\t\t\t\treturn this.current;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// reflect point\r\n\t\t\t\tvar p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y);\r\n\t\t\t\treturn p;\r\n\t\t\t}\r\n\r\n\t\t\tthis.makeAbsolute = function(p) {\r\n\t\t\t\tif (this.isRelativeCommand()) {\r\n\t\t\t\t\tp.x += this.current.x;\r\n\t\t\t\t\tp.y += this.current.y;\r\n\t\t\t\t}\r\n\t\t\t\treturn p;\r\n\t\t\t}\r\n\r\n\t\t\tthis.addMarker = function(p, from, priorTo) {\r\n\t\t\t\t// if the last angle isn't filled in because we didn't have this point yet ...\r\n\t\t\t\tif (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) {\r\n\t\t\t\t\tthis.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo);\r\n\t\t\t\t}\r\n\t\t\t\tthis.addMarkerAngle(p, from == null ? null : from.angleTo(p));\r\n\t\t\t}\r\n\r\n\t\t\tthis.addMarkerAngle = function(p, a) {\r\n\t\t\t\tthis.points.push(p);\r\n\t\t\t\tthis.angles.push(a);\r\n\t\t\t}\r\n\r\n\t\t\tthis.getMarkerPoints = function() { return this.points; }\r\n\t\t\tthis.getMarkerAngles = function() {\r\n\t\t\t\tfor (var i=0; i<this.angles.length; i++) {\r\n\t\t\t\t\tif (this.angles[i] == null) {\r\n\t\t\t\t\t\tfor (var j=i+1; j<this.angles.length; j++) {\r\n\t\t\t\t\t\t\tif (this.angles[j] != null) {\r\n\t\t\t\t\t\t\t\tthis.angles[i] = this.angles[j];\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this.angles;\r\n\t\t\t}\r\n\t\t})(d);\r\n\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tvar pp = this.PathParser;\r\n\t\t\tpp.reset();\r\n\r\n\t\t\tvar bb = new svg.BoundingBox();\r\n\t\t\tif (ctx != null) ctx.beginPath();\r\n\t\t\twhile (!pp.isEnd()) {\r\n\t\t\t\tpp.nextCommand();\r\n\t\t\t\tswitch (pp.command) {\r\n\t\t\t\tcase 'M':\r\n\t\t\t\tcase 'm':\r\n\t\t\t\t\tvar p = pp.getAsCurrentPoint();\r\n\t\t\t\t\tpp.addMarker(p);\r\n\t\t\t\t\tbb.addPoint(p.x, p.y);\r\n\t\t\t\t\tif (ctx != null) ctx.moveTo(p.x, p.y);\r\n\t\t\t\t\tpp.start = pp.current;\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\r\n\t\t\t\t\t\tpp.addMarker(p, pp.start);\r\n\t\t\t\t\t\tbb.addPoint(p.x, p.y);\r\n\t\t\t\t\t\tif (ctx != null) ctx.lineTo(p.x, p.y);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'L':\r\n\t\t\t\tcase 'l':\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t\tvar c = pp.current;\r\n\t\t\t\t\t\tvar p = pp.getAsCurrentPoint();\r\n\t\t\t\t\t\tpp.addMarker(p, c);\r\n\t\t\t\t\t\tbb.addPoint(p.x, p.y);\r\n\t\t\t\t\t\tif (ctx != null) ctx.lineTo(p.x, p.y);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'H':\r\n\t\t\t\tcase 'h':\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t\tvar newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y);\r\n\t\t\t\t\t\tpp.addMarker(newP, pp.current);\r\n\t\t\t\t\t\tpp.current = newP;\r\n\t\t\t\t\t\tbb.addPoint(pp.current.x, pp.current.y);\r\n\t\t\t\t\t\tif (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'V':\r\n\t\t\t\tcase 'v':\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t\tvar newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar());\r\n\t\t\t\t\t\tpp.addMarker(newP, pp.current);\r\n\t\t\t\t\t\tpp.current = newP;\r\n\t\t\t\t\t\tbb.addPoint(pp.current.x, pp.current.y);\r\n\t\t\t\t\t\tif (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'C':\r\n\t\t\t\tcase 'c':\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t\tvar curr = pp.current;\r\n\t\t\t\t\t\tvar p1 = pp.getPoint();\r\n\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\r\n\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\r\n\t\t\t\t\t\tpp.addMarker(cp, cntrl, p1);\r\n\t\t\t\t\t\tbb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\r\n\t\t\t\t\t\tif (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'S':\r\n\t\t\t\tcase 's':\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t\tvar curr = pp.current;\r\n\t\t\t\t\t\tvar p1 = pp.getReflectedControlPoint();\r\n\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\r\n\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\r\n\t\t\t\t\t\tpp.addMarker(cp, cntrl, p1);\r\n\t\t\t\t\t\tbb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\r\n\t\t\t\t\t\tif (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Q':\r\n\t\t\t\tcase 'q':\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t\tvar curr = pp.current;\r\n\t\t\t\t\t\tvar cntrl = pp.getAsControlPoint();\r\n\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\r\n\t\t\t\t\t\tpp.addMarker(cp, cntrl, cntrl);\r\n\t\t\t\t\t\tbb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);\r\n\t\t\t\t\t\tif (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'T':\r\n\t\t\t\tcase 't':\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t\tvar curr = pp.current;\r\n\t\t\t\t\t\tvar cntrl = pp.getReflectedControlPoint();\r\n\t\t\t\t\t\tpp.control = cntrl;\r\n\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\r\n\t\t\t\t\t\tpp.addMarker(cp, cntrl, cntrl);\r\n\t\t\t\t\t\tbb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);\r\n\t\t\t\t\t\tif (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'A':\r\n\t\t\t\tcase 'a':\r\n\t\t\t\t\twhile (!pp.isCommandOrEnd()) {\r\n\t\t\t\t\t    var curr = pp.current;\r\n\t\t\t\t\t\tvar rx = pp.getScalar();\r\n\t\t\t\t\t\tvar ry = pp.getScalar();\r\n\t\t\t\t\t\tvar xAxisRotation = pp.getScalar() * (Math.PI / 180.0);\r\n\t\t\t\t\t\tvar largeArcFlag = pp.getScalar();\r\n\t\t\t\t\t\tvar sweepFlag = pp.getScalar();\r\n\t\t\t\t\t\tvar cp = pp.getAsCurrentPoint();\r\n\r\n\t\t\t\t\t\t// Conversion from endpoint to center parameterization\r\n\t\t\t\t\t\t// http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\r\n\t\t\t\t\t\t// x1', y1'\r\n\t\t\t\t\t\tvar currp = new svg.Point(\r\n\t\t\t\t\t\t\tMath.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,\r\n\t\t\t\t\t\t\t-Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\t// adjust radii\r\n\t\t\t\t\t\tvar l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2);\r\n\t\t\t\t\t\tif (l > 1) {\r\n\t\t\t\t\t\t\trx *= Math.sqrt(l);\r\n\t\t\t\t\t\t\try *= Math.sqrt(l);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// cx', cy'\r\n\t\t\t\t\t\tvar s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt(\r\n\t\t\t\t\t\t\t((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) /\r\n\t\t\t\t\t\t\t(Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2))\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (isNaN(s)) s = 0;\r\n\t\t\t\t\t\tvar cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx);\r\n\t\t\t\t\t\t// cx, cy\r\n\t\t\t\t\t\tvar centp = new svg.Point(\r\n\t\t\t\t\t\t\t(curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y,\r\n\t\t\t\t\t\t\t(curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\t// vector magnitude\r\n\t\t\t\t\t\tvar m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); }\r\n\t\t\t\t\t\t// ratio between two vectors\r\n\t\t\t\t\t\tvar r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) }\r\n\t\t\t\t\t\t// angle between two vectors\r\n\t\t\t\t\t\tvar a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); }\r\n\t\t\t\t\t\t// initial angle\r\n\t\t\t\t\t\tvar a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]);\r\n\t\t\t\t\t\t// angle delta\r\n\t\t\t\t\t\tvar u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry];\r\n\t\t\t\t\t\tvar v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry];\r\n\t\t\t\t\t\tvar ad = a(u, v);\r\n\t\t\t\t\t\tif (r(u,v) <= -1) ad = Math.PI;\r\n\t\t\t\t\t\tif (r(u,v) >= 1) ad = 0;\r\n\r\n\t\t\t\t\t\t// for markers\r\n\t\t\t\t\t\tvar dir = 1 - sweepFlag ? 1.0 : -1.0;\r\n\t\t\t\t\t\tvar ah = a1 + dir * (ad / 2.0);\r\n\t\t\t\t\t\tvar halfWay = new svg.Point(\r\n\t\t\t\t\t\t\tcentp.x + rx * Math.cos(ah),\r\n\t\t\t\t\t\t\tcentp.y + ry * Math.sin(ah)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tpp.addMarkerAngle(halfWay, ah - dir * Math.PI / 2);\r\n\t\t\t\t\t\tpp.addMarkerAngle(cp, ah - dir * Math.PI);\r\n\r\n\t\t\t\t\t\tbb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better\r\n\t\t\t\t\t\tif (ctx != null) {\r\n\t\t\t\t\t\t\tvar r = rx > ry ? rx : ry;\r\n\t\t\t\t\t\t\tvar sx = rx > ry ? 1 : rx / ry;\r\n\t\t\t\t\t\t\tvar sy = rx > ry ? ry / rx : 1;\r\n\r\n\t\t\t\t\t\t\tctx.translate(centp.x, centp.y);\r\n\t\t\t\t\t\t\tctx.rotate(xAxisRotation);\r\n\t\t\t\t\t\t\tctx.scale(sx, sy);\r\n\t\t\t\t\t\t\tctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag);\r\n\t\t\t\t\t\t\tctx.scale(1/sx, 1/sy);\r\n\t\t\t\t\t\t\tctx.rotate(-xAxisRotation);\r\n\t\t\t\t\t\t\tctx.translate(-centp.x, -centp.y);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Z':\r\n\t\t\t\tcase 'z':\r\n\t\t\t\t\tif (ctx != null) ctx.closePath();\r\n\t\t\t\t\tpp.current = pp.start;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn bb;\r\n\t\t}\r\n\r\n\t\tthis.getMarkers = function() {\r\n\t\t\tvar points = this.PathParser.getMarkerPoints();\r\n\t\t\tvar angles = this.PathParser.getMarkerAngles();\r\n\r\n\t\t\tvar markers = [];\r\n\t\t\tfor (var i=0; i<points.length; i++) {\r\n\t\t\t\tmarkers.push([points[i], angles[i]]);\r\n\t\t\t}\r\n\t\t\treturn markers;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.path.prototype = new svg.Element.PathElementBase;\r\n\r\n\t// pattern element\r\n\tsvg.Element.pattern = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.createPattern = function(ctx, element) {\r\n\t\t\tvar width = this.attribute('width').toPixels('x', true);\r\n\t\t\tvar height = this.attribute('height').toPixels('y', true);\r\n\r\n\t\t\t// render me using a temporary svg element\r\n\t\t\tvar tempSvg = new svg.Element.svg();\r\n\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);\r\n\t\t\ttempSvg.attributes['width'] = new svg.Property('width', width + 'px');\r\n\t\t\ttempSvg.attributes['height'] = new svg.Property('height', height + 'px');\r\n\t\t\ttempSvg.attributes['transform'] = new svg.Property('transform', this.attribute('patternTransform').value);\r\n\t\t\ttempSvg.children = this.children;\r\n\r\n\t\t\tvar c = document.createElement('canvas');\r\n\t\t\tc.width = width;\r\n\t\t\tc.height = height;\r\n\t\t\tvar cctx = c.getContext('2d');\r\n\t\t\tif (this.attribute('x').hasValue() && this.attribute('y').hasValue()) {\r\n\t\t\t\tcctx.translate(this.attribute('x').toPixels('x', true), this.attribute('y').toPixels('y', true));\r\n\t\t\t}\r\n\t\t\t// render 3x3 grid so when we transform there's no white space on edges\r\n\t\t\tfor (var x=-1; x<=1; x++) {\r\n\t\t\t\tfor (var y=-1; y<=1; y++) {\r\n\t\t\t\t\tcctx.save();\r\n\t\t\t\t\ttempSvg.attributes['x'] = new svg.Property('x', x * c.width);\r\n\t\t\t\t\ttempSvg.attributes['y'] = new svg.Property('y', y * c.height);\r\n\t\t\t\t\ttempSvg.render(cctx);\r\n\t\t\t\t\tcctx.restore();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar pattern = ctx.createPattern(c, 'repeat');\r\n\t\t\treturn pattern;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.pattern.prototype = new svg.Element.ElementBase;\r\n\r\n\t// marker element\r\n\tsvg.Element.marker = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.baseRender = this.render;\r\n\t\tthis.render = function(ctx, point, angle) {\r\n\t\t\tctx.translate(point.x, point.y);\r\n\t\t\tif (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle);\r\n\t\t\tif (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth);\r\n\t\t\tctx.save();\r\n\r\n\t\t\t// render me using a temporary svg element\r\n\t\t\tvar tempSvg = new svg.Element.svg();\r\n\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);\r\n\t\t\ttempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value);\r\n\t\t\ttempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value);\r\n\t\t\ttempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value);\r\n\t\t\ttempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value);\r\n\t\t\ttempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black'));\r\n\t\t\ttempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none'));\r\n\t\t\ttempSvg.children = this.children;\r\n\t\t\ttempSvg.render(ctx);\r\n\r\n\t\t\tctx.restore();\r\n\t\t\tif (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth);\r\n\t\t\tif (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle);\r\n\t\t\tctx.translate(-point.x, -point.y);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.marker.prototype = new svg.Element.ElementBase;\r\n\r\n\t// definitions element\r\n\tsvg.Element.defs = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.render = function(ctx) {\r\n\t\t\t// NOOP\r\n\t\t}\r\n\t}\r\n\tsvg.Element.defs.prototype = new svg.Element.ElementBase;\r\n\r\n\t// base for gradients\r\n\tsvg.Element.GradientBase = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.stops = [];\r\n\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\tvar child = this.children[i];\r\n\t\t\tif (child.type == 'stop') this.stops.push(child);\r\n\t\t}\r\n\r\n\t\tthis.getGradient = function() {\r\n\t\t\t// OVERRIDE ME!\r\n\t\t}\r\n\r\n\t\tthis.gradientUnits = function () {\r\n\t\t\treturn this.attribute('gradientUnits').valueOrDefault('objectBoundingBox');\r\n\t\t}\r\n\r\n\t\tthis.attributesToInherit = ['gradientUnits'];\r\n\r\n\t\tthis.inheritStopContainer = function (stopsContainer) {\r\n\t\t\tfor (var i=0; i<this.attributesToInherit.length; i++) {\r\n\t\t\t\tvar attributeToInherit = this.attributesToInherit[i];\r\n\t\t\t\tif (!this.attribute(attributeToInherit).hasValue() && stopsContainer.attribute(attributeToInherit).hasValue()) {\r\n\t\t\t\t\tthis.attribute(attributeToInherit, true).value = stopsContainer.attribute(attributeToInherit).value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.createGradient = function(ctx, element, parentOpacityProp) {\r\n\t\t\tvar stopsContainer = this;\r\n\t\t\tif (this.getHrefAttribute().hasValue()) {\r\n\t\t\t\tstopsContainer = this.getHrefAttribute().getDefinition();\r\n\t\t\t\tthis.inheritStopContainer(stopsContainer);\r\n\t\t\t}\r\n\r\n\t\t\tvar addParentOpacity = function (color) {\r\n\t\t\t\tif (parentOpacityProp.hasValue()) {\r\n\t\t\t\t\tvar p = new svg.Property('color', color);\r\n\t\t\t\t\treturn p.addOpacity(parentOpacityProp).value;\r\n\t\t\t\t}\r\n\t\t\t\treturn color;\r\n\t\t\t};\r\n\r\n\t\t\tvar g = this.getGradient(ctx, element);\r\n\t\t\tif (g == null) return addParentOpacity(stopsContainer.stops[stopsContainer.stops.length - 1].color);\r\n\t\t\tfor (var i=0; i<stopsContainer.stops.length; i++) {\r\n\t\t\t\tg.addColorStop(stopsContainer.stops[i].offset, addParentOpacity(stopsContainer.stops[i].color));\r\n\t\t\t}\r\n\r\n\t\t\tif (this.attribute('gradientTransform').hasValue()) {\r\n\t\t\t\t// render as transformed pattern on temporary canvas\r\n\t\t\t\tvar rootView = svg.ViewPort.viewPorts[0];\r\n\r\n\t\t\t\tvar rect = new svg.Element.rect();\r\n\t\t\t\trect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0);\r\n\t\t\t\trect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0);\r\n\t\t\t\trect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS);\r\n\t\t\t\trect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS);\r\n\r\n\t\t\t\tvar group = new svg.Element.g();\r\n\t\t\t\tgroup.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value);\r\n\t\t\t\tgroup.children = [ rect ];\r\n\r\n\t\t\t\tvar tempSvg = new svg.Element.svg();\r\n\t\t\t\ttempSvg.attributes['x'] = new svg.Property('x', 0);\r\n\t\t\t\ttempSvg.attributes['y'] = new svg.Property('y', 0);\r\n\t\t\t\ttempSvg.attributes['width'] = new svg.Property('width', rootView.width);\r\n\t\t\t\ttempSvg.attributes['height'] = new svg.Property('height', rootView.height);\r\n\t\t\t\ttempSvg.children = [ group ];\r\n\r\n\t\t\t\tvar c = document.createElement('canvas');\r\n\t\t\t\tc.width = rootView.width;\r\n\t\t\t\tc.height = rootView.height;\r\n\t\t\t\tvar tempCtx = c.getContext('2d');\r\n\t\t\t\ttempCtx.fillStyle = g;\r\n\t\t\t\ttempSvg.render(tempCtx);\r\n\t\t\t\treturn tempCtx.createPattern(c, 'no-repeat');\r\n\t\t\t}\r\n\r\n\t\t\treturn g;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.GradientBase.prototype = new svg.Element.ElementBase;\r\n\r\n\t// linear gradient element\r\n\tsvg.Element.linearGradient = function(node) {\r\n\t\tthis.base = svg.Element.GradientBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.attributesToInherit.push('x1');\r\n\t\tthis.attributesToInherit.push('y1');\r\n\t\tthis.attributesToInherit.push('x2');\r\n\t\tthis.attributesToInherit.push('y2');\r\n\r\n\t\tthis.getGradient = function(ctx, element) {\r\n\t\t\tvar bb = this.gradientUnits() == 'objectBoundingBox' ? element.getBoundingBox() : null;\r\n\r\n\t\t\tif (!this.attribute('x1').hasValue()\r\n\t\t\t && !this.attribute('y1').hasValue()\r\n\t\t\t && !this.attribute('x2').hasValue()\r\n\t\t\t && !this.attribute('y2').hasValue()) {\r\n\t\t\t\tthis.attribute('x1', true).value = 0;\r\n\t\t\t\tthis.attribute('y1', true).value = 0;\r\n\t\t\t\tthis.attribute('x2', true).value = 1;\r\n\t\t\t\tthis.attribute('y2', true).value = 0;\r\n\t\t\t }\r\n\r\n\t\t\tvar x1 = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? bb.x() + bb.width() * this.attribute('x1').numValue()\r\n\t\t\t\t: this.attribute('x1').toPixels('x'));\r\n\t\t\tvar y1 = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? bb.y() + bb.height() * this.attribute('y1').numValue()\r\n\t\t\t\t: this.attribute('y1').toPixels('y'));\r\n\t\t\tvar x2 = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? bb.x() + bb.width() * this.attribute('x2').numValue()\r\n\t\t\t\t: this.attribute('x2').toPixels('x'));\r\n\t\t\tvar y2 = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? bb.y() + bb.height() * this.attribute('y2').numValue()\r\n\t\t\t\t: this.attribute('y2').toPixels('y'));\r\n\r\n\t\t\tif (x1 == x2 && y1 == y2) return null;\r\n\t\t\treturn ctx.createLinearGradient(x1, y1, x2, y2);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.linearGradient.prototype = new svg.Element.GradientBase;\r\n\r\n\t// radial gradient element\r\n\tsvg.Element.radialGradient = function(node) {\r\n\t\tthis.base = svg.Element.GradientBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.attributesToInherit.push('cx');\r\n\t\tthis.attributesToInherit.push('cy');\r\n\t\tthis.attributesToInherit.push('r');\r\n\t\tthis.attributesToInherit.push('fx');\r\n\t\tthis.attributesToInherit.push('fy');\r\n\r\n\t\tthis.getGradient = function(ctx, element) {\r\n\t\t\tvar bb = element.getBoundingBox();\r\n\r\n\t\t\tif (!this.attribute('cx').hasValue()) this.attribute('cx', true).value = '50%';\r\n\t\t\tif (!this.attribute('cy').hasValue()) this.attribute('cy', true).value = '50%';\r\n\t\t\tif (!this.attribute('r').hasValue()) this.attribute('r', true).value = '50%';\r\n\r\n\t\t\tvar cx = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? bb.x() + bb.width() * this.attribute('cx').numValue()\r\n\t\t\t\t: this.attribute('cx').toPixels('x'));\r\n\t\t\tvar cy = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? bb.y() + bb.height() * this.attribute('cy').numValue()\r\n\t\t\t\t: this.attribute('cy').toPixels('y'));\r\n\r\n\t\t\tvar fx = cx;\r\n\t\t\tvar fy = cy;\r\n\t\t\tif (this.attribute('fx').hasValue()) {\r\n\t\t\t\tfx = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? bb.x() + bb.width() * this.attribute('fx').numValue()\r\n\t\t\t\t: this.attribute('fx').toPixels('x'));\r\n\t\t\t}\r\n\t\t\tif (this.attribute('fy').hasValue()) {\r\n\t\t\t\tfy = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? bb.y() + bb.height() * this.attribute('fy').numValue()\r\n\t\t\t\t: this.attribute('fy').toPixels('y'));\r\n\t\t\t}\r\n\r\n\t\t\tvar r = (this.gradientUnits() == 'objectBoundingBox'\r\n\t\t\t\t? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue()\r\n\t\t\t\t: this.attribute('r').toPixels());\r\n\r\n\t\t\treturn ctx.createRadialGradient(fx, fy, 0, cx, cy, r);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.radialGradient.prototype = new svg.Element.GradientBase;\r\n\r\n\t// gradient stop element\r\n\tsvg.Element.stop = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.offset = this.attribute('offset').numValue();\r\n\t\tif (this.offset < 0) this.offset = 0;\r\n\t\tif (this.offset > 1) this.offset = 1;\r\n\r\n\t\tvar stopColor = this.style('stop-color', true);\r\n\t\tif (stopColor.value == '') stopColor.value = '#000';\r\n\t\tif (this.style('stop-opacity').hasValue()) stopColor = stopColor.addOpacity(this.style('stop-opacity'));\r\n\t\tthis.color = stopColor.value;\r\n\t}\r\n\tsvg.Element.stop.prototype = new svg.Element.ElementBase;\r\n\r\n\t// animation base element\r\n\tsvg.Element.AnimateBase = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tsvg.Animations.push(this);\r\n\r\n\t\tthis.duration = 0.0;\r\n\t\tthis.begin = this.attribute('begin').toMilliseconds();\r\n\t\tthis.maxDuration = this.begin + this.attribute('dur').toMilliseconds();\r\n\r\n\t\tthis.getProperty = function() {\r\n\t\t\tvar attributeType = this.attribute('attributeType').value;\r\n\t\t\tvar attributeName = this.attribute('attributeName').value;\r\n\r\n\t\t\tif (attributeType == 'CSS') {\r\n\t\t\t\treturn this.parent.style(attributeName, true);\r\n\t\t\t}\r\n\t\t\treturn this.parent.attribute(attributeName, true);\r\n\t\t};\r\n\r\n\t\tthis.initialValue = null;\r\n\t\tthis.initialUnits = '';\r\n\t\tthis.removed = false;\r\n\r\n\t\tthis.calcValue = function() {\r\n\t\t\t// OVERRIDE ME!\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tthis.update = function(delta) {\r\n\t\t\t// set initial value\r\n\t\t\tif (this.initialValue == null) {\r\n\t\t\t\tthis.initialValue = this.getProperty().value;\r\n\t\t\t\tthis.initialUnits = this.getProperty().getUnits();\r\n\t\t\t}\r\n\r\n\t\t\t// if we're past the end time\r\n\t\t\tif (this.duration > this.maxDuration) {\r\n\t\t\t\t// loop for indefinitely repeating animations\r\n\t\t\t\tif (this.attribute('repeatCount').value == 'indefinite'\r\n\t\t\t\t || this.attribute('repeatDur').value == 'indefinite') {\r\n\t\t\t\t\tthis.duration = 0.0\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.attribute('fill').valueOrDefault('remove') == 'freeze' && !this.frozen) {\r\n\t\t\t\t\tthis.frozen = true;\r\n\t\t\t\t\tthis.parent.animationFrozen = true;\r\n\t\t\t\t\tthis.parent.animationFrozenValue = this.getProperty().value;\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) {\r\n\t\t\t\t\tthis.removed = true;\r\n\t\t\t\t\tthis.getProperty().value = this.parent.animationFrozen ? this.parent.animationFrozenValue : this.initialValue;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tthis.duration = this.duration + delta;\r\n\r\n\t\t\t// if we're past the begin time\r\n\t\t\tvar updated = false;\r\n\t\t\tif (this.begin < this.duration) {\r\n\t\t\t\tvar newValue = this.calcValue(); // tween\r\n\r\n\t\t\t\tif (this.attribute('type').hasValue()) {\r\n\t\t\t\t\t// for transform, etc.\r\n\t\t\t\t\tvar type = this.attribute('type').value;\r\n\t\t\t\t\tnewValue = type + '(' + newValue + ')';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.getProperty().value = newValue;\r\n\t\t\t\tupdated = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn updated;\r\n\t\t}\r\n\r\n\t\tthis.from = this.attribute('from');\r\n\t\tthis.to = this.attribute('to');\r\n\t\tthis.values = this.attribute('values');\r\n\t\tif (this.values.hasValue()) this.values.value = this.values.value.split(';');\r\n\r\n\t\t// fraction of duration we've covered\r\n\t\tthis.progress = function() {\r\n\t\t\tvar ret = { progress: (this.duration - this.begin) / (this.maxDuration - this.begin) };\r\n\t\t\tif (this.values.hasValue()) {\r\n\t\t\t\tvar p = ret.progress * (this.values.value.length - 1);\r\n\t\t\t\tvar lb = Math.floor(p), ub = Math.ceil(p);\r\n\t\t\t\tret.from = new svg.Property('from', parseFloat(this.values.value[lb]));\r\n\t\t\t\tret.to = new svg.Property('to', parseFloat(this.values.value[ub]));\r\n\t\t\t\tret.progress = (p - lb) / (ub - lb);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tret.from = this.from;\r\n\t\t\t\tret.to = this.to;\r\n\t\t\t}\r\n\t\t\treturn ret;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.AnimateBase.prototype = new svg.Element.ElementBase;\r\n\r\n\t// animate element\r\n\tsvg.Element.animate = function(node) {\r\n\t\tthis.base = svg.Element.AnimateBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.calcValue = function() {\r\n\t\t\tvar p = this.progress();\r\n\r\n\t\t\t// tween value linearly\r\n\t\t\tvar newValue = p.from.numValue() + (p.to.numValue() - p.from.numValue()) * p.progress;\r\n\t\t\treturn newValue + this.initialUnits;\r\n\t\t};\r\n\t}\r\n\tsvg.Element.animate.prototype = new svg.Element.AnimateBase;\r\n\r\n\t// animate color element\r\n\tsvg.Element.animateColor = function(node) {\r\n\t\tthis.base = svg.Element.AnimateBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.calcValue = function() {\r\n\t\t\tvar p = this.progress();\r\n\t\t\tvar from = new RGBColor(p.from.value);\r\n\t\t\tvar to = new RGBColor(p.to.value);\r\n\r\n\t\t\tif (from.ok && to.ok) {\r\n\t\t\t\t// tween color linearly\r\n\t\t\t\tvar r = from.r + (to.r - from.r) * p.progress;\r\n\t\t\t\tvar g = from.g + (to.g - from.g) * p.progress;\r\n\t\t\t\tvar b = from.b + (to.b - from.b) * p.progress;\r\n\t\t\t\treturn 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')';\r\n\t\t\t}\r\n\t\t\treturn this.attribute('from').value;\r\n\t\t};\r\n\t}\r\n\tsvg.Element.animateColor.prototype = new svg.Element.AnimateBase;\r\n\r\n\t// animate transform element\r\n\tsvg.Element.animateTransform = function(node) {\r\n\t\tthis.base = svg.Element.AnimateBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.calcValue = function() {\r\n\t\t\tvar p = this.progress();\r\n\r\n\t\t\t// tween value linearly\r\n\t\t\tvar from = svg.ToNumberArray(p.from.value);\r\n\t\t\tvar to = svg.ToNumberArray(p.to.value);\r\n\t\t\tvar newValue = '';\r\n\t\t\tfor (var i=0; i<from.length; i++) {\r\n\t\t\t\tnewValue += from[i] + (to[i] - from[i]) * p.progress + ' ';\r\n\t\t\t}\r\n\t\t\treturn newValue;\r\n\t\t};\r\n\t}\r\n\tsvg.Element.animateTransform.prototype = new svg.Element.animate;\r\n\r\n\t// font element\r\n\tsvg.Element.font = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.horizAdvX = this.attribute('horiz-adv-x').numValue();\r\n\r\n\t\tthis.isRTL = false;\r\n\t\tthis.isArabic = false;\r\n\t\tthis.fontFace = null;\r\n\t\tthis.missingGlyph = null;\r\n\t\tthis.glyphs = [];\r\n\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\tvar child = this.children[i];\r\n\t\t\tif (child.type == 'font-face') {\r\n\t\t\t\tthis.fontFace = child;\r\n\t\t\t\tif (child.style('font-family').hasValue()) {\r\n\t\t\t\t\tsvg.Definitions[child.style('font-family').value] = this;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (child.type == 'missing-glyph') this.missingGlyph = child;\r\n\t\t\telse if (child.type == 'glyph') {\r\n\t\t\t\tif (child.arabicForm != '') {\r\n\t\t\t\t\tthis.isRTL = true;\r\n\t\t\t\t\tthis.isArabic = true;\r\n\t\t\t\t\tif (typeof this.glyphs[child.unicode] == 'undefined') this.glyphs[child.unicode] = [];\r\n\t\t\t\t\tthis.glyphs[child.unicode][child.arabicForm] = child;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.glyphs[child.unicode] = child;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tsvg.Element.font.prototype = new svg.Element.ElementBase;\r\n\r\n\t// font-face element\r\n\tsvg.Element.fontface = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.ascent = this.attribute('ascent').value;\r\n\t\tthis.descent = this.attribute('descent').value;\r\n\t\tthis.unitsPerEm = this.attribute('units-per-em').numValue();\r\n\t}\r\n\tsvg.Element.fontface.prototype = new svg.Element.ElementBase;\r\n\r\n\t// missing-glyph element\r\n\tsvg.Element.missingglyph = function(node) {\r\n\t\tthis.base = svg.Element.path;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.horizAdvX = 0;\r\n\t}\r\n\tsvg.Element.missingglyph.prototype = new svg.Element.path;\r\n\r\n\t// glyph element\r\n\tsvg.Element.glyph = function(node) {\r\n\t\tthis.base = svg.Element.path;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.horizAdvX = this.attribute('horiz-adv-x').numValue();\r\n\t\tthis.unicode = this.attribute('unicode').value;\r\n\t\tthis.arabicForm = this.attribute('arabic-form').value;\r\n\t}\r\n\tsvg.Element.glyph.prototype = new svg.Element.path;\r\n\r\n\t// text element\r\n\tsvg.Element.text = function(node) {\r\n\t\tthis.captureTextNodes = true;\r\n\t\tthis.base = svg.Element.RenderedElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.baseSetContext = this.setContext;\r\n\t\tthis.setContext = function(ctx) {\r\n\t\t\tthis.baseSetContext(ctx);\r\n\r\n\t\t\tvar textBaseline = this.style('dominant-baseline').toTextBaseline();\r\n\t\t\tif (textBaseline == null) textBaseline = this.style('alignment-baseline').toTextBaseline();\r\n\t\t\tif (textBaseline != null) ctx.textBaseline = textBaseline;\r\n\t\t}\r\n\r\n\t\tthis.getBoundingBox = function () {\r\n\t\t\tvar x = this.attribute('x').toPixels('x');\r\n\t\t\tvar y = this.attribute('y').toPixels('y');\r\n\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\r\n\t\t\treturn new svg.BoundingBox(x, y - fontSize, x + Math.floor(fontSize * 2.0 / 3.0) * this.children[0].getText().length, y);\r\n\t\t}\r\n\r\n\t\tthis.renderChildren = function(ctx) {\r\n\t\t\tthis.x = this.attribute('x').toPixels('x');\r\n\t\t\tthis.y = this.attribute('y').toPixels('y');\r\n\t\t\tif (this.attribute('dx').hasValue()) this.x += this.attribute('dx').toPixels('x');\r\n\t\t\tif (this.attribute('dy').hasValue()) this.y += this.attribute('dy').toPixels('y');\r\n\t\t\tthis.x += this.getAnchorDelta(ctx, this, 0);\r\n\t\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\t\tthis.renderChild(ctx, this, this, i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.getAnchorDelta = function (ctx, parent, startI) {\r\n\t\t\tvar textAnchor = this.style('text-anchor').valueOrDefault('start');\r\n\t\t\tif (textAnchor != 'start') {\r\n\t\t\t\tvar width = 0;\r\n\t\t\t\tfor (var i=startI; i<parent.children.length; i++) {\r\n\t\t\t\t\tvar child = parent.children[i];\r\n\t\t\t\t\tif (i > startI && child.attribute('x').hasValue()) break; // new group\r\n\t\t\t\t\twidth += child.measureTextRecursive(ctx);\r\n\t\t\t\t}\r\n\t\t\t\treturn -1 * (textAnchor == 'end' ? width : width / 2.0);\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tthis.renderChild = function(ctx, textParent, parent, i) {\r\n\t\t\tvar child = parent.children[i];\r\n\t\t\tif (child.attribute('x').hasValue()) {\r\n\t\t\t\tchild.x = child.attribute('x').toPixels('x') + textParent.getAnchorDelta(ctx, parent, i);\r\n\t\t\t\tif (child.attribute('dx').hasValue()) child.x += child.attribute('dx').toPixels('x');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (child.attribute('dx').hasValue()) textParent.x += child.attribute('dx').toPixels('x');\r\n\t\t\t\tchild.x = textParent.x;\r\n\t\t\t}\r\n\t\t\ttextParent.x = child.x + child.measureText(ctx);\r\n\r\n\t\t\tif (child.attribute('y').hasValue()) {\r\n\t\t\t\tchild.y = child.attribute('y').toPixels('y');\r\n\t\t\t\tif (child.attribute('dy').hasValue()) child.y += child.attribute('dy').toPixels('y');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (child.attribute('dy').hasValue()) textParent.y += child.attribute('dy').toPixels('y');\r\n\t\t\t\tchild.y = textParent.y;\r\n\t\t\t}\r\n\t\t\ttextParent.y = child.y;\r\n\r\n\t\t\tchild.render(ctx);\r\n\r\n\t\t\tfor (var i=0; i<child.children.length; i++) {\r\n\t\t\t\ttextParent.renderChild(ctx, textParent, child, i);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tsvg.Element.text.prototype = new svg.Element.RenderedElementBase;\r\n\r\n\t// text base\r\n\tsvg.Element.TextElementBase = function(node) {\r\n\t\tthis.base = svg.Element.RenderedElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.getGlyph = function(font, text, i) {\r\n\t\t\tvar c = text[i];\r\n\t\t\tvar glyph = null;\r\n\t\t\tif (font.isArabic) {\r\n\t\t\t\tvar arabicForm = 'isolated';\r\n\t\t\t\tif ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal';\r\n\t\t\t\tif (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial';\r\n\t\t\t\tif (i>0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial';\r\n\t\t\t\tif (typeof font.glyphs[c] != 'undefined') {\r\n\t\t\t\t\tglyph = font.glyphs[c][arabicForm];\r\n\t\t\t\t\tif (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tglyph = font.glyphs[c];\r\n\t\t\t}\r\n\t\t\tif (glyph == null) glyph = font.missingGlyph;\r\n\t\t\treturn glyph;\r\n\t\t}\r\n\r\n\t\tthis.renderChildren = function(ctx) {\r\n\t\t\tvar customFont = this.parent.style('font-family').getDefinition();\r\n\t\t\tif (customFont != null) {\r\n\t\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\r\n\t\t\t\tvar fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle);\r\n\t\t\t\tvar text = this.getText();\r\n\t\t\t\tif (customFont.isRTL) text = text.split(\"\").reverse().join(\"\");\r\n\r\n\t\t\t\tvar dx = svg.ToNumberArray(this.parent.attribute('dx').value);\r\n\t\t\t\tfor (var i=0; i<text.length; i++) {\r\n\t\t\t\t\tvar glyph = this.getGlyph(customFont, text, i);\r\n\t\t\t\t\tvar scale = fontSize / customFont.fontFace.unitsPerEm;\r\n\t\t\t\t\tctx.translate(this.x, this.y);\r\n\t\t\t\t\tctx.scale(scale, -scale);\r\n\t\t\t\t\tvar lw = ctx.lineWidth;\r\n\t\t\t\t\tctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize;\r\n\t\t\t\t\tif (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0);\r\n\t\t\t\t\tglyph.render(ctx);\r\n\t\t\t\t\tif (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0);\r\n\t\t\t\t\tctx.lineWidth = lw;\r\n\t\t\t\t\tctx.scale(1/scale, -1/scale);\r\n\t\t\t\t\tctx.translate(-this.x, -this.y);\r\n\r\n\t\t\t\t\tthis.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm;\r\n\t\t\t\t\tif (typeof dx[i] != 'undefined' && !isNaN(dx[i])) {\r\n\t\t\t\t\t\tthis.x += dx[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y);\r\n\t\t\tif (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y);\r\n\t\t}\r\n\r\n\t\tthis.getText = function() {\r\n\t\t\t// OVERRIDE ME\r\n\t\t}\r\n\r\n\t\tthis.measureTextRecursive = function(ctx) {\r\n\t\t\tvar width = this.measureText(ctx);\r\n\t\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\t\twidth += this.children[i].measureTextRecursive(ctx);\r\n\t\t\t}\r\n\t\t\treturn width;\r\n\t\t}\r\n\r\n\t\tthis.measureText = function(ctx) {\r\n\t\t\tvar customFont = this.parent.style('font-family').getDefinition();\r\n\t\t\tif (customFont != null) {\r\n\t\t\t\tvar fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);\r\n\t\t\t\tvar measure = 0;\r\n\t\t\t\tvar text = this.getText();\r\n\t\t\t\tif (customFont.isRTL) text = text.split(\"\").reverse().join(\"\");\r\n\t\t\t\tvar dx = svg.ToNumberArray(this.parent.attribute('dx').value);\r\n\t\t\t\tfor (var i=0; i<text.length; i++) {\r\n\t\t\t\t\tvar glyph = this.getGlyph(customFont, text, i);\r\n\t\t\t\t\tmeasure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;\r\n\t\t\t\t\tif (typeof dx[i] != 'undefined' && !isNaN(dx[i])) {\r\n\t\t\t\t\t\tmeasure += dx[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn measure;\r\n\t\t\t}\r\n\r\n\t\t\tvar textToMeasure = svg.compressSpaces(this.getText());\r\n\t\t\tif (!ctx.measureText) return textToMeasure.length * 10;\r\n\r\n\t\t\tctx.save();\r\n\t\t\tthis.setContext(ctx);\r\n\t\t\tvar width = ctx.measureText(textToMeasure).width;\r\n\t\t\tctx.restore();\r\n\t\t\treturn width;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase;\r\n\r\n\t// tspan\r\n\tsvg.Element.tspan = function(node) {\r\n\t\tthis.captureTextNodes = true;\r\n\t\tthis.base = svg.Element.TextElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.text = svg.compressSpaces(node.value || node.text || node.textContent || '');\r\n\t\tthis.getText = function() {\r\n\t\t\t// if this node has children, then they own the text\r\n\t\t\tif (this.children.length > 0) { return ''; }\r\n\t\t\treturn this.text;\r\n\t\t}\r\n\t}\r\n\tsvg.Element.tspan.prototype = new svg.Element.TextElementBase;\r\n\r\n\t// tref\r\n\tsvg.Element.tref = function(node) {\r\n\t\tthis.base = svg.Element.TextElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.getText = function() {\r\n\t\t\tvar element = this.getHrefAttribute().getDefinition();\r\n\t\t\tif (element != null) return element.children[0].getText();\r\n\t\t}\r\n\t}\r\n\tsvg.Element.tref.prototype = new svg.Element.TextElementBase;\r\n\r\n\t// a element\r\n\tsvg.Element.a = function(node) {\r\n\t\tthis.base = svg.Element.TextElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.hasText = node.childNodes.length > 0;\r\n\t\tfor (var i=0; i<node.childNodes.length; i++) {\r\n\t\t\tif (node.childNodes[i].nodeType != 3) this.hasText = false;\r\n\t\t}\r\n\r\n\t\t// this might contain text\r\n\t\tthis.text = this.hasText ? node.childNodes[0].value : '';\r\n\t\tthis.getText = function() {\r\n\t\t\treturn this.text;\r\n\t\t}\r\n\r\n\t\tthis.baseRenderChildren = this.renderChildren;\r\n\t\tthis.renderChildren = function(ctx) {\r\n\t\t\tif (this.hasText) {\r\n\t\t\t\t// render as text element\r\n\t\t\t\tthis.baseRenderChildren(ctx);\r\n\t\t\t\tvar fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);\r\n\t\t\t\tsvg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.toPixels('y'), this.x + this.measureText(ctx), this.y));\r\n\t\t\t}\r\n\t\t\telse if (this.children.length > 0) {\r\n\t\t\t\t// render as temporary group\r\n\t\t\t\tvar g = new svg.Element.g();\r\n\t\t\t\tg.children = this.children;\r\n\t\t\t\tg.parent = this;\r\n\t\t\t\tg.render(ctx);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.onclick = function() {\r\n\t\t\twindow.open(this.getHrefAttribute().value);\r\n\t\t}\r\n\r\n\t\tthis.onmousemove = function() {\r\n\t\t\tsvg.ctx.canvas.style.cursor = 'pointer';\r\n\t\t}\r\n\t}\r\n\tsvg.Element.a.prototype = new svg.Element.TextElementBase;\r\n\r\n\t// image element\r\n\tsvg.Element.image = function(node) {\r\n\t\tthis.base = svg.Element.RenderedElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tvar href = this.getHrefAttribute().value;\r\n\t\tif (href == '') { return; }\r\n\t\tvar isSvg = href.match(/\\.svg$/)\r\n\r\n\t\tsvg.Images.push(this);\r\n\t\tthis.loaded = false;\r\n\t\tif (!isSvg) {\r\n\t\t\tthis.img = document.createElement('img');\r\n\t\t\tif (svg.opts['useCORS'] == true) { this.img.crossOrigin = 'Anonymous'; }\r\n\t\t\tvar self = this;\r\n\t\t\tthis.img.onload = function() { self.loaded = true; }\r\n\t\t\tthis.img.onerror = function() { svg.log('ERROR: image \"' + href + '\" not found'); self.loaded = true; }\r\n\t\t\tthis.img.src = href;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.img = svg.ajax(href);\r\n\t\t\tthis.loaded = true;\r\n\t\t}\r\n\r\n\t\tthis.renderChildren = function(ctx) {\r\n\t\t\tvar x = this.attribute('x').toPixels('x');\r\n\t\t\tvar y = this.attribute('y').toPixels('y');\r\n\r\n\t\t\tvar width = this.attribute('width').toPixels('x');\r\n\t\t\tvar height = this.attribute('height').toPixels('y');\r\n\t\t\tif (width == 0 || height == 0) return;\r\n\r\n\t\t\tctx.save();\r\n\t\t\tif (isSvg) {\r\n\t\t\t\tctx.drawSvg(this.img, x, y, width, height);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tsvg.AspectRatio(ctx,\r\n\t\t\t\t\t\t\t\tthis.attribute('preserveAspectRatio').value,\r\n\t\t\t\t\t\t\t\twidth,\r\n\t\t\t\t\t\t\t\tthis.img.width,\r\n\t\t\t\t\t\t\t\theight,\r\n\t\t\t\t\t\t\t\tthis.img.height,\r\n\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t0);\r\n\t\t\t\tctx.drawImage(this.img, 0, 0);\r\n\t\t\t}\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\r\n\t\tthis.getBoundingBox = function() {\r\n\t\t\tvar x = this.attribute('x').toPixels('x');\r\n\t\t\tvar y = this.attribute('y').toPixels('y');\r\n\t\t\tvar width = this.attribute('width').toPixels('x');\r\n\t\t\tvar height = this.attribute('height').toPixels('y');\r\n\t\t\treturn new svg.BoundingBox(x, y, x + width, y + height);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.image.prototype = new svg.Element.RenderedElementBase;\r\n\r\n\t// group element\r\n\tsvg.Element.g = function(node) {\r\n\t\tthis.base = svg.Element.RenderedElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.getBoundingBox = function() {\r\n\t\t\tvar bb = new svg.BoundingBox();\r\n\t\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\t\tbb.addBoundingBox(this.children[i].getBoundingBox());\r\n\t\t\t}\r\n\t\t\treturn bb;\r\n\t\t};\r\n\t}\r\n\tsvg.Element.g.prototype = new svg.Element.RenderedElementBase;\r\n\r\n\t// symbol element\r\n\tsvg.Element.symbol = function(node) {\r\n\t\tthis.base = svg.Element.RenderedElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.render = function(ctx) {\r\n\t\t\t// NO RENDER\r\n\t\t};\r\n\t}\r\n\tsvg.Element.symbol.prototype = new svg.Element.RenderedElementBase;\r\n\r\n\t// style element\r\n\tsvg.Element.style = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\t// text, or spaces then CDATA\r\n\t\tvar css = ''\r\n\t\tfor (var i=0; i<node.childNodes.length; i++) {\r\n\t\t  css += node.childNodes[i].data;\r\n\t\t}\r\n\t\tcss = css.replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*\\/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, ''); // remove comments\r\n\t\tcss = svg.compressSpaces(css); // replace whitespace\r\n\t\tvar cssDefs = css.split('}');\r\n\t\tfor (var i=0; i<cssDefs.length; i++) {\r\n\t\t\tif (svg.trim(cssDefs[i]) != '') {\r\n\t\t\t\tvar cssDef = cssDefs[i].split('{');\r\n\t\t\t\tvar cssClasses = cssDef[0].split(',');\r\n\t\t\t\tvar cssProps = cssDef[1].split(';');\r\n\t\t\t\tfor (var j=0; j<cssClasses.length; j++) {\r\n\t\t\t\t\tvar cssClass = svg.trim(cssClasses[j]);\r\n\t\t\t\t\tif (cssClass != '') {\r\n\t\t\t\t\t\tvar props = svg.Styles[cssClass] || {};\r\n\t\t\t\t\t\tfor (var k=0; k<cssProps.length; k++) {\r\n\t\t\t\t\t\t\tvar prop = cssProps[k].indexOf(':');\r\n\t\t\t\t\t\t\tvar name = cssProps[k].substr(0, prop);\r\n\t\t\t\t\t\t\tvar value = cssProps[k].substr(prop + 1, cssProps[k].length - prop);\r\n\t\t\t\t\t\t\tif (name != null && value != null) {\r\n\t\t\t\t\t\t\t\tprops[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsvg.Styles[cssClass] = props;\r\n\t\t\t\t\t\tsvg.StylesSpecificity[cssClass] = getSelectorSpecificity(cssClass);\r\n\t\t\t\t\t\tif (cssClass == '@font-face') {\r\n\t\t\t\t\t\t\tvar fontFamily = props['font-family'].value.replace(/\"/g,'');\r\n\t\t\t\t\t\t\tvar srcs = props['src'].value.split(',');\r\n\t\t\t\t\t\t\tfor (var s=0; s<srcs.length; s++) {\r\n\t\t\t\t\t\t\t\tif (srcs[s].indexOf('format(\"svg\")') > 0) {\r\n\t\t\t\t\t\t\t\t\tvar urlStart = srcs[s].indexOf('url');\r\n\t\t\t\t\t\t\t\t\tvar urlEnd = srcs[s].indexOf(')', urlStart);\r\n\t\t\t\t\t\t\t\t\tvar url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6);\r\n\t\t\t\t\t\t\t\t\tvar doc = svg.parseXml(svg.ajax(url));\r\n\t\t\t\t\t\t\t\t\tvar fonts = doc.getElementsByTagName('font');\r\n\t\t\t\t\t\t\t\t\tfor (var f=0; f<fonts.length; f++) {\r\n\t\t\t\t\t\t\t\t\t\tvar font = svg.CreateElement(fonts[f]);\r\n\t\t\t\t\t\t\t\t\t\tsvg.Definitions[fontFamily] = font;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tsvg.Element.style.prototype = new svg.Element.ElementBase;\r\n\r\n\t// use element\r\n\tsvg.Element.use = function(node) {\r\n\t\tthis.base = svg.Element.RenderedElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.baseSetContext = this.setContext;\r\n\t\tthis.setContext = function(ctx) {\r\n\t\t\tthis.baseSetContext(ctx);\r\n\t\t\tif (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').toPixels('x'), 0);\r\n\t\t\tif (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').toPixels('y'));\r\n\t\t}\r\n\r\n\t\tvar element = this.getHrefAttribute().getDefinition();\r\n\r\n\t\tthis.path = function(ctx) {\r\n\t\t\tif (element != null) element.path(ctx);\r\n\t\t}\r\n\r\n\t\tthis.getBoundingBox = function() {\r\n\t\t\tif (element != null) return element.getBoundingBox();\r\n\t\t}\r\n\r\n\t\tthis.renderChildren = function(ctx) {\r\n\t\t\tif (element != null) {\r\n\t\t\t\tvar tempSvg = element;\r\n\t\t\t\tif (element.type == 'symbol') {\r\n\t\t\t\t\t// render me using a temporary svg element in symbol cases (http://www.w3.org/TR/SVG/struct.html#UseElement)\r\n\t\t\t\t\ttempSvg = new svg.Element.svg();\r\n\t\t\t\t\ttempSvg.type = 'svg';\r\n\t\t\t\t\ttempSvg.attributes['viewBox'] = new svg.Property('viewBox', element.attribute('viewBox').value);\r\n\t\t\t\t\ttempSvg.attributes['preserveAspectRatio'] = new svg.Property('preserveAspectRatio', element.attribute('preserveAspectRatio').value);\r\n\t\t\t\t\ttempSvg.attributes['overflow'] = new svg.Property('overflow', element.attribute('overflow').value);\r\n\t\t\t\t\ttempSvg.children = element.children;\r\n\t\t\t\t}\r\n\t\t\t\tif (tempSvg.type == 'svg') {\r\n\t\t\t\t\t// if symbol or svg, inherit width/height from me\r\n\t\t\t\t\tif (this.attribute('width').hasValue()) tempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value);\r\n\t\t\t\t\tif (this.attribute('height').hasValue()) tempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value);\r\n\t\t\t\t}\r\n\t\t\t\tvar oldParent = tempSvg.parent;\r\n\t\t\t\ttempSvg.parent = null;\r\n\t\t\t\ttempSvg.render(ctx);\r\n\t\t\t\ttempSvg.parent = oldParent;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tsvg.Element.use.prototype = new svg.Element.RenderedElementBase;\r\n\r\n\t// mask element\r\n\tsvg.Element.mask = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.apply = function(ctx, element) {\r\n\t\t\t// render as temp svg\r\n\t\t\tvar x = this.attribute('x').toPixels('x');\r\n\t\t\tvar y = this.attribute('y').toPixels('y');\r\n\t\t\tvar width = this.attribute('width').toPixels('x');\r\n\t\t\tvar height = this.attribute('height').toPixels('y');\r\n\r\n\t\t\tif (width == 0 && height == 0) {\r\n\t\t\t\tvar bb = new svg.BoundingBox();\r\n\t\t\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\t\t\tbb.addBoundingBox(this.children[i].getBoundingBox());\r\n\t\t\t\t}\r\n\t\t\t\tvar x = Math.floor(bb.x1);\r\n\t\t\t\tvar y = Math.floor(bb.y1);\r\n\t\t\t\tvar width = Math.floor(bb.width());\r\n\t\t\t\tvar\theight = Math.floor(bb.height());\r\n\t\t\t}\r\n\r\n\t\t\t// temporarily remove mask to avoid recursion\r\n\t\t\tvar mask = element.attribute('mask').value;\r\n\t\t\telement.attribute('mask').value = '';\r\n\r\n\t\t\t\tvar cMask = document.createElement('canvas');\r\n\t\t\t\tcMask.width = x + width;\r\n\t\t\t\tcMask.height = y + height;\r\n\t\t\t\tvar maskCtx = cMask.getContext('2d');\r\n\t\t\t\tthis.renderChildren(maskCtx);\r\n\r\n\t\t\t\tvar c = document.createElement('canvas');\r\n\t\t\t\tc.width = x + width;\r\n\t\t\t\tc.height = y + height;\r\n\t\t\t\tvar tempCtx = c.getContext('2d');\r\n\t\t\t\telement.render(tempCtx);\r\n\t\t\t\ttempCtx.globalCompositeOperation = 'destination-in';\r\n\t\t\t\ttempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat');\r\n\t\t\t\ttempCtx.fillRect(0, 0, x + width, y + height);\r\n\r\n\t\t\t\tctx.fillStyle = tempCtx.createPattern(c, 'no-repeat');\r\n\t\t\t\tctx.fillRect(0, 0, x + width, y + height);\r\n\r\n\t\t\t// reassign mask\r\n\t\t\telement.attribute('mask').value = mask;\r\n\t\t}\r\n\r\n\t\tthis.render = function(ctx) {\r\n\t\t\t// NO RENDER\r\n\t\t}\r\n\t}\r\n\tsvg.Element.mask.prototype = new svg.Element.ElementBase;\r\n\r\n\t// clip element\r\n\tsvg.Element.clipPath = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.apply = function(ctx) {\r\n\t\t\tvar oldBeginPath = CanvasRenderingContext2D.prototype.beginPath;\r\n\t\t\tCanvasRenderingContext2D.prototype.beginPath = function () { };\r\n\r\n\t\t\tvar oldClosePath = CanvasRenderingContext2D.prototype.closePath;\r\n\t\t\tCanvasRenderingContext2D.prototype.closePath = function () { };\r\n\r\n\t\t\toldBeginPath.call(ctx);\r\n\t\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\t\tvar child = this.children[i];\r\n\t\t\t\tif (typeof child.path != 'undefined') {\r\n\t\t\t\t\tvar transform = null;\r\n\t\t\t\t\tif (child.style('transform', false, true).hasValue()) {\r\n\t\t\t\t\t\ttransform = new svg.Transform(child.style('transform', false, true).value);\r\n\t\t\t\t\t\ttransform.apply(ctx);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchild.path(ctx);\r\n\t\t\t\t\tCanvasRenderingContext2D.prototype.closePath = oldClosePath;\r\n\t\t\t\t\tif (transform) { transform.unapply(ctx); }\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\toldClosePath.call(ctx);\r\n\t\t\tctx.clip();\r\n\r\n\t\t\tCanvasRenderingContext2D.prototype.beginPath = oldBeginPath;\r\n\t\t\tCanvasRenderingContext2D.prototype.closePath = oldClosePath;\r\n\t\t}\r\n\r\n\t\tthis.render = function(ctx) {\r\n\t\t\t// NO RENDER\r\n\t\t}\r\n\t}\r\n\tsvg.Element.clipPath.prototype = new svg.Element.ElementBase;\r\n\r\n\t// filters\r\n\tsvg.Element.filter = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.apply = function(ctx, element) {\r\n\t\t\t// render as temp svg\r\n\t\t\tvar bb = element.getBoundingBox();\r\n\t\t\tvar x = Math.floor(bb.x1);\r\n\t\t\tvar y = Math.floor(bb.y1);\r\n\t\t\tvar width = Math.floor(bb.width());\r\n\t\t\tvar\theight = Math.floor(bb.height());\r\n\r\n\t\t\t// temporarily remove filter to avoid recursion\r\n\t\t\tvar filter = element.style('filter').value;\r\n\t\t\telement.style('filter').value = '';\r\n\r\n\t\t\tvar px = 0, py = 0;\r\n\t\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\t\tvar efd = this.children[i].extraFilterDistance || 0;\r\n\t\t\t\tpx = Math.max(px, efd);\r\n\t\t\t\tpy = Math.max(py, efd);\r\n\t\t\t}\r\n\r\n\t\t\tvar c = document.createElement('canvas');\r\n\t\t\tc.width = width + 2*px;\r\n\t\t\tc.height = height + 2*py;\r\n\t\t\tvar tempCtx = c.getContext('2d');\r\n\t\t\ttempCtx.translate(-x + px, -y + py);\r\n\t\t\telement.render(tempCtx);\r\n\r\n\t\t\t// apply filters\r\n\t\t\tfor (var i=0; i<this.children.length; i++) {\r\n\t\t\t\tif (typeof this.children[i].apply == 'function') {\r\n\t\t\t\t\tthis.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// render on me\r\n\t\t\tctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py);\r\n\r\n\t\t\t// reassign filter\r\n\t\t\telement.style('filter', true).value = filter;\r\n\t\t}\r\n\r\n\t\tthis.render = function(ctx) {\r\n\t\t\t// NO RENDER\r\n\t\t}\r\n\t}\r\n\tsvg.Element.filter.prototype = new svg.Element.ElementBase;\r\n\r\n\tsvg.Element.feMorphology = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.apply = function(ctx, x, y, width, height) {\r\n\t\t\t// TODO: implement\r\n\t\t}\r\n\t}\r\n\tsvg.Element.feMorphology.prototype = new svg.Element.ElementBase;\r\n\r\n\tsvg.Element.feComposite = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.apply = function(ctx, x, y, width, height) {\r\n\t\t\t// TODO: implement\r\n\t\t}\r\n\t}\r\n\tsvg.Element.feComposite.prototype = new svg.Element.ElementBase;\r\n\r\n\tsvg.Element.feColorMatrix = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tvar matrix = svg.ToNumberArray(this.attribute('values').value);\r\n\t\tswitch (this.attribute('type').valueOrDefault('matrix')) { // http://www.w3.org/TR/SVG/filters.html#feColorMatrixElement\r\n\t\t\tcase 'saturate':\r\n\t\t\t\tvar s = matrix[0];\r\n\t\t\t\tmatrix = [0.213+0.787*s,0.715-0.715*s,0.072-0.072*s,0,0,\r\n\t\t\t\t\t\t  0.213-0.213*s,0.715+0.285*s,0.072-0.072*s,0,0,\r\n\t\t\t\t\t\t  0.213-0.213*s,0.715-0.715*s,0.072+0.928*s,0,0,\r\n\t\t\t\t\t\t  0,0,0,1,0,\r\n\t\t\t\t\t\t  0,0,0,0,1];\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'hueRotate':\r\n\t\t\t\tvar a = matrix[0] * Math.PI / 180.0;\r\n\t\t\t\tvar c = function (m1,m2,m3) { return m1 + Math.cos(a)*m2 + Math.sin(a)*m3; };\r\n\t\t\t\tmatrix = [c(0.213,0.787,-0.213),c(0.715,-0.715,-0.715),c(0.072,-0.072,0.928),0,0,\r\n\t\t\t\t\t\t  c(0.213,-0.213,0.143),c(0.715,0.285,0.140),c(0.072,-0.072,-0.283),0,0,\r\n\t\t\t\t\t\t  c(0.213,-0.213,-0.787),c(0.715,-0.715,0.715),c(0.072,0.928,0.072),0,0,\r\n\t\t\t\t\t\t  0,0,0,1,0,\r\n\t\t\t\t\t\t  0,0,0,0,1];\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'luminanceToAlpha':\r\n\t\t\t\tmatrix = [0,0,0,0,0,\r\n\t\t\t\t\t\t  0,0,0,0,0,\r\n\t\t\t\t\t\t  0,0,0,0,0,\r\n\t\t\t\t\t\t  0.2125,0.7154,0.0721,0,0,\r\n\t\t\t\t\t\t  0,0,0,0,1];\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tfunction imGet(img, x, y, width, height, rgba) {\r\n\t\t\treturn img[y*width*4 + x*4 + rgba];\r\n\t\t}\r\n\r\n\t\tfunction imSet(img, x, y, width, height, rgba, val) {\r\n\t\t\timg[y*width*4 + x*4 + rgba] = val;\r\n\t\t}\r\n\r\n\t\tfunction m(i, v) {\r\n\t\t\tvar mi = matrix[i];\r\n\t\t\treturn mi * (mi < 0 ? v - 255 : v);\r\n\t\t}\r\n\r\n\t\tthis.apply = function(ctx, x, y, width, height) {\r\n\t\t\t// assuming x==0 && y==0 for now\r\n\t\t\tvar srcData = ctx.getImageData(0, 0, width, height);\r\n\t\t\tfor (var y = 0; y < height; y++) {\r\n\t\t\t\tfor (var x = 0; x < width; x++) {\r\n\t\t\t\t\tvar r = imGet(srcData.data, x, y, width, height, 0);\r\n\t\t\t\t\tvar g = imGet(srcData.data, x, y, width, height, 1);\r\n\t\t\t\t\tvar b = imGet(srcData.data, x, y, width, height, 2);\r\n\t\t\t\t\tvar a = imGet(srcData.data, x, y, width, height, 3);\r\n\t\t\t\t\timSet(srcData.data, x, y, width, height, 0, m(0,r)+m(1,g)+m(2,b)+m(3,a)+m(4,1));\r\n\t\t\t\t\timSet(srcData.data, x, y, width, height, 1, m(5,r)+m(6,g)+m(7,b)+m(8,a)+m(9,1));\r\n\t\t\t\t\timSet(srcData.data, x, y, width, height, 2, m(10,r)+m(11,g)+m(12,b)+m(13,a)+m(14,1));\r\n\t\t\t\t\timSet(srcData.data, x, y, width, height, 3, m(15,r)+m(16,g)+m(17,b)+m(18,a)+m(19,1));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tctx.clearRect(0, 0, width, height);\r\n\t\t\tctx.putImageData(srcData, 0, 0);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.feColorMatrix.prototype = new svg.Element.ElementBase;\r\n\r\n\tsvg.Element.feGaussianBlur = function(node) {\r\n\t\tthis.base = svg.Element.ElementBase;\r\n\t\tthis.base(node);\r\n\r\n\t\tthis.blurRadius = Math.floor(this.attribute('stdDeviation').numValue());\r\n\t\tthis.extraFilterDistance = this.blurRadius;\r\n\r\n\t\tthis.apply = function(ctx, x, y, width, height) {\r\n\t\t\tif (typeof stackblur.canvasRGBA == 'undefined') {\r\n\t\t\t\tsvg.log('ERROR: StackBlur.js must be included for blur to work');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// StackBlur requires canvas be on document\r\n\t\t\tctx.canvas.id = svg.UniqueId();\r\n\t\t\tctx.canvas.style.display = 'none';\r\n\t\t\tdocument.body.appendChild(ctx.canvas);\r\n\t\t\tstackblur.canvasRGBA(ctx.canvas.id, x, y, width, height, this.blurRadius);\r\n\t\t\tdocument.body.removeChild(ctx.canvas);\r\n\t\t}\r\n\t}\r\n\tsvg.Element.feGaussianBlur.prototype = new svg.Element.ElementBase;\r\n\r\n\t// title element, do nothing\r\n\tsvg.Element.title = function(node) {\r\n\t}\r\n\tsvg.Element.title.prototype = new svg.Element.ElementBase;\r\n\r\n\t// desc element, do nothing\r\n\tsvg.Element.desc = function(node) {\r\n\t}\r\n\tsvg.Element.desc.prototype = new svg.Element.ElementBase;\r\n\r\n\tsvg.Element.MISSING = function(node) {\r\n\t\tsvg.log('ERROR: Element \\'' + node.nodeName + '\\' not yet implemented.');\r\n\t}\r\n\tsvg.Element.MISSING.prototype = new svg.Element.ElementBase;\r\n\r\n\t// element factory\r\n\tsvg.CreateElement = function(node) {\r\n\t\tvar className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace\r\n\t\tclassName = className.replace(/\\-/g,''); // remove dashes\r\n\t\tvar e = null;\r\n\t\tif (typeof svg.Element[className] != 'undefined') {\r\n\t\t\te = new svg.Element[className](node);\r\n\t\t}\r\n\t\telse {\r\n\t\t\te = new svg.Element.MISSING(node);\r\n\t\t}\r\n\r\n\t\te.type = node.nodeName;\r\n\t\treturn e;\r\n\t}\r\n\r\n\t// load from url\r\n\tsvg.load = function(ctx, url) {\r\n\t\tsvg.loadXml(ctx, svg.ajax(url));\r\n\t}\r\n\r\n\t// load from xml\r\n\tsvg.loadXml = function(ctx, xml) {\r\n\t\tsvg.loadXmlDoc(ctx, svg.parseXml(xml));\r\n\t}\r\n\r\n\tsvg.loadXmlDoc = function(ctx, dom) {\r\n\t\tsvg.init(ctx);\r\n\r\n\t\tvar mapXY = function(p) {\r\n\t\t\tvar e = ctx.canvas;\r\n\t\t\twhile (e) {\r\n\t\t\t\tp.x -= e.offsetLeft;\r\n\t\t\t\tp.y -= e.offsetTop;\r\n\t\t\t\te = e.offsetParent;\r\n\t\t\t}\r\n\t\t\tif (window.scrollX) p.x += window.scrollX;\r\n\t\t\tif (window.scrollY) p.y += window.scrollY;\r\n\t\t\treturn p;\r\n\t\t}\r\n\r\n\t\t// bind mouse\r\n\t\tif (svg.opts['ignoreMouse'] != true) {\r\n\t\t\tctx.canvas.onclick = function(e) {\r\n\t\t\t\tvar p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));\r\n\t\t\t\tsvg.Mouse.onclick(p.x, p.y);\r\n\t\t\t};\r\n\t\t\tctx.canvas.onmousemove = function(e) {\r\n\t\t\t\tvar p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));\r\n\t\t\t\tsvg.Mouse.onmousemove(p.x, p.y);\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar e = svg.CreateElement(dom.documentElement);\r\n\t\te.root = true;\r\n\t\te.addStylesFromStyleDefinition();\r\n\r\n\t\t// render loop\r\n\t\tvar isFirstRender = true;\r\n\t\tvar draw = function() {\r\n\t\t\tsvg.ViewPort.Clear();\r\n\t\t\tif (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight);\r\n\r\n\t\t\tif (svg.opts['ignoreDimensions'] != true) {\r\n\t\t\t\t// set canvas size\r\n\t\t\t\tif (e.style('width').hasValue()) {\r\n\t\t\t\t\tctx.canvas.width = e.style('width').toPixels('x');\r\n\t\t\t\t\tctx.canvas.style.width = ctx.canvas.width + 'px';\r\n\t\t\t\t}\r\n\t\t\t\tif (e.style('height').hasValue()) {\r\n\t\t\t\t\tctx.canvas.height = e.style('height').toPixels('y');\r\n\t\t\t\t\tctx.canvas.style.height = ctx.canvas.height + 'px';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar cWidth = ctx.canvas.clientWidth || ctx.canvas.width;\r\n\t\t\tvar cHeight = ctx.canvas.clientHeight || ctx.canvas.height;\r\n\t\t\tif (svg.opts['ignoreDimensions'] == true && e.style('width').hasValue() && e.style('height').hasValue()) {\r\n\t\t\t\tcWidth = e.style('width').toPixels('x');\r\n\t\t\t\tcHeight = e.style('height').toPixels('y');\r\n\t\t\t}\r\n\t\t\tsvg.ViewPort.SetCurrent(cWidth, cHeight);\r\n\r\n\t\t\tif (svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX'];\r\n\t\t\tif (svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY'];\r\n\t\t\tif (svg.opts['scaleWidth'] != null || svg.opts['scaleHeight'] != null) {\r\n\t\t\t\tvar xRatio = null, yRatio = null, viewBox = svg.ToNumberArray(e.attribute('viewBox').value);\r\n\r\n\t\t\t\tif (svg.opts['scaleWidth'] != null) {\r\n\t\t\t\t\tif (e.attribute('width').hasValue()) xRatio = e.attribute('width').toPixels('x') / svg.opts['scaleWidth'];\r\n\t\t\t\t\telse if (!isNaN(viewBox[2])) xRatio = viewBox[2] / svg.opts['scaleWidth'];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (svg.opts['scaleHeight'] != null) {\r\n\t\t\t\t\tif (e.attribute('height').hasValue()) yRatio = e.attribute('height').toPixels('y') / svg.opts['scaleHeight'];\r\n\t\t\t\t\telse if (!isNaN(viewBox[3])) yRatio = viewBox[3] / svg.opts['scaleHeight'];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (xRatio == null) { xRatio = yRatio; }\r\n\t\t\t\tif (yRatio == null) { yRatio = xRatio; }\r\n\r\n\t\t\t\te.attribute('width', true).value = svg.opts['scaleWidth'];\r\n\t\t\t\te.attribute('height', true).value = svg.opts['scaleHeight'];\r\n\t\t\t\te.style('transform', true, true).value += ' scale('+(1.0/xRatio)+','+(1.0/yRatio)+')';\r\n\t\t\t}\r\n\r\n\t\t\t// clear and render\r\n\t\t\tif (svg.opts['ignoreClear'] != true) {\r\n\t\t\t\tctx.clearRect(0, 0, cWidth, cHeight);\r\n\t\t\t}\r\n\t\t\te.render(ctx);\r\n\t\t\tif (isFirstRender) {\r\n\t\t\t\tisFirstRender = false;\r\n\t\t\t\tif (typeof svg.opts['renderCallback'] == 'function') svg.opts['renderCallback'](dom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar waitingForImages = true;\r\n\t\tif (svg.ImagesLoaded()) {\r\n\t\t\twaitingForImages = false;\r\n\t\t\tdraw();\r\n\t\t}\r\n\t\tsvg.intervalID = setInterval(function() {\r\n\t\t\tvar needUpdate = false;\r\n\r\n\t\t\tif (waitingForImages && svg.ImagesLoaded()) {\r\n\t\t\t\twaitingForImages = false;\r\n\t\t\t\tneedUpdate = true;\r\n\t\t\t}\r\n\r\n\t\t\t// need update from mouse events?\r\n\t\t\tif (svg.opts['ignoreMouse'] != true) {\r\n\t\t\t\tneedUpdate = needUpdate | svg.Mouse.hasEvents();\r\n\t\t\t}\r\n\r\n\t\t\t// need update from animations?\r\n\t\t\tif (svg.opts['ignoreAnimation'] != true) {\r\n\t\t\t\tfor (var i=0; i<svg.Animations.length; i++) {\r\n\t\t\t\t\tneedUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// need update from redraw?\r\n\t\t\tif (typeof svg.opts['forceRedraw'] == 'function') {\r\n\t\t\t\tif (svg.opts['forceRedraw']() == true) needUpdate = true;\r\n\t\t\t}\r\n\r\n\t\t\t// render if needed\r\n\t\t\tif (needUpdate) {\r\n\t\t\t\tdraw();\r\n\t\t\t\tsvg.Mouse.runEvents(); // run and clear our events\r\n\t\t\t}\r\n\t\t}, 1000 / svg.FRAMERATE);\r\n\t}\r\n\r\n\tsvg.stop = function() {\r\n\t\tif (svg.intervalID) {\r\n\t\t\tclearInterval(svg.intervalID);\r\n\t\t}\r\n\t}\r\n\r\n\tsvg.Mouse = new (function() {\r\n\t\tthis.events = [];\r\n\t\tthis.hasEvents = function() { return this.events.length != 0; }\r\n\r\n\t\tthis.onclick = function(x, y) {\r\n\t\t\tthis.events.push({ type: 'onclick', x: x, y: y,\r\n\t\t\t\trun: function(e) { if (e.onclick) e.onclick(); }\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.onmousemove = function(x, y) {\r\n\t\t\tthis.events.push({ type: 'onmousemove', x: x, y: y,\r\n\t\t\t\trun: function(e) { if (e.onmousemove) e.onmousemove(); }\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.eventElements = [];\r\n\r\n\t\tthis.checkPath = function(element, ctx) {\r\n\t\t\tfor (var i=0; i<this.events.length; i++) {\r\n\t\t\t\tvar e = this.events[i];\r\n\t\t\t\tif (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.checkBoundingBox = function(element, bb) {\r\n\t\t\tfor (var i=0; i<this.events.length; i++) {\r\n\t\t\t\tvar e = this.events[i];\r\n\t\t\t\tif (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.runEvents = function() {\r\n\t\t\tsvg.ctx.canvas.style.cursor = '';\r\n\r\n\t\t\tfor (var i=0; i<this.events.length; i++) {\r\n\t\t\t\tvar e = this.events[i];\r\n\t\t\t\tvar element = this.eventElements[i];\r\n\t\t\t\twhile (element) {\r\n\t\t\t\t\te.run(element);\r\n\t\t\t\t\telement = element.parent;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// done running, clear\r\n\t\t\tthis.events = [];\r\n\t\t\tthis.eventElements = [];\r\n\t\t}\r\n\t});\r\n\r\n\treturn svg;\r\n};\r\n\r\nmodule.exports = canvg;\r\n","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"\\n\\n/*!\\n * jQuery contextMenu - Plugin for simple contextMenu handling\\n *\\n * Version: 1.5.24\\n *\\n * Authors: Rodney Rehm, Addy Osmani (patches for FF)\\n * Web: http://medialize.github.com/jQuery-contextMenu/\\n *\\n * Licensed under\\n *   MIT License http://www.opensource.org/licenses/mit-license\\n *   GPL v3 http://opensource.org/licenses/GPL-3.0\\n *\\n */\\n.context-menu-list {\\n    margin:0;\\n    padding:0;\\n\\n    min-width: 120px;\\n    max-width: 250px;\\n    display: inline-block;\\n    position: absolute;\\n    list-style-type: none;\\n\\n    border: 1px solid #DDD;\\n    background: #EEE;\\n\\n    -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);\\n       -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);\\n        -ms-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);\\n         -o-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);\\n            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);\\n\\n    font-family: Verdana, Arial, Helvetica, sans-serif;\\n    font-size: 11px;\\n}\\n\\n.context-menu-item {\\n    padding: 2px 2px 2px 24px;\\n    background-color: #EEE;\\n    position: relative;\\n    -webkit-user-select: none;\\n       -moz-user-select: -moz-none;\\n        -ms-user-select: none;\\n            user-select: none;\\n}\\n\\n.context-menu-separator {\\n    padding-bottom:0;\\n    border-bottom: 1px solid #DDD;\\n}\\n\\n.context-menu-item > label > input,\\n.context-menu-item > label > textarea {\\n    -webkit-user-select: text;\\n       -moz-user-select: text;\\n        -ms-user-select: text;\\n            user-select: text;\\n}\\n\\n.context-menu-item.hover {\\n    cursor: pointer;\\n    background-color: #39F;\\n}\\n\\n.context-menu-item.disabled {\\n    color: #666;\\n}\\n\\n.context-menu-input.hover,\\n.context-menu-item.disabled.hover {\\n    cursor: default;\\n    background-color: #EEE;\\n}\\n\\n.context-menu-submenu:after {\\n    content: \\\">\\\";\\n    color: #666;\\n    position: absolute;\\n    top: 0;\\n    right: 3px;\\n    z-index: 1;\\n}\\n\\n/* icons\\n    #protip:\\n    In case you want to use sprites for icons (which I would suggest you do) have a look at\\n    http://css-tricks.com/13224-pseudo-spriting/ to get an idea of how to implement\\n    .context-menu-item.icon:before {}\\n */\\n.context-menu-item.icon { min-height: 18px; background-repeat: no-repeat; background-position: 4px 2px; }\\n\\n/* vertically align inside labels */\\n.context-menu-input > label > * { vertical-align: top; }\\n\\n/* position checkboxes and radios as icons */\\n.context-menu-input > label > input[type=\\\"checkbox\\\"],\\n.context-menu-input > label > input[type=\\\"radio\\\"] {\\n    margin-left: -17px;\\n}\\n.context-menu-input > label > span {\\n    margin-left: 5px;\\n}\\n\\n.context-menu-input > label,\\n.context-menu-input > label > input[type=\\\"text\\\"],\\n.context-menu-input > label > textarea,\\n.context-menu-input > label > select {\\n    display: block;\\n    width: 100%;\\n\\n    -webkit-box-sizing: border-box;\\n       -moz-box-sizing: border-box;\\n        -ms-box-sizing: border-box;\\n         -o-box-sizing: border-box;\\n            box-sizing: border-box;\\n}\\n\\n.context-menu-input > label > textarea {\\n    height: 100px;\\n}\\n.context-menu-item > .context-menu-list {\\n    display: none;\\n    /* re-positioned by js */\\n    right: -5px;\\n    top: 5px;\\n}\\n\\n.context-menu-item.hover > .context-menu-list {\\n    display: block;\\n}\\n\\n.context-menu-accesskey {\\n    text-decoration: underline;\\n}\\n\", \"\"]);\n\n// exports\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","module.exports = \"/* \\n * Simple JavaScript Inheritance \\n * By John Resig http://ejohn.org/ \\n * MIT Licensed. \\n * \\n ****************************************************** \\n * Example Usage \\n ****************************************************** \\n var Person = Class.extend({ \\n  init: function(isDancing){ \\n    this.dancing = isDancing; \\n  }, \\n  dance: function(){ \\n    return this.dancing; \\n  } \\n}); \\n\\nvar Ninja = Person.extend({ \\n  init: function(){ \\n    this._super( false ); \\n  }, \\n  dance: function(){ \\n    // Call the inherited version of dance() \\n    return this._super(); \\n  }, \\n  swingSword: function(){ \\n    return true; \\n  } \\n}); \\n\\nvar p = new Person(true); \\np.dance(); // => true \\n\\nvar n = new Ninja(); \\nn.dance(); // => false \\nn.swingSword(); // => true \\n\\n// Should all be true \\np instanceof Person && p instanceof Class && \\nn instanceof Ninja && n instanceof Person && n instanceof Class \\n\\n ****************************************************** \\n */ \\n  \\n// Inspired by base2 and Prototype \\n(function(){ \\n  var fnTest = /xyz/.test(function(){xyz;}) ? /\\\\b_super\\\\b/ : /.*/; \\n\\n  // The base Class implementation (does nothing) \\n  this.Class = function(){}; \\n  \\n\\n  // Create a new Class that inherits from this class \\n  Class.extend = function(prop) { \\n    var _super = this.prototype; \\n    \\n    // Instantiate a base class (but only create the instance, \\n    // don't run the init constructor) \\n    initializing = true; \\n    var prototype = new this(); \\n    initializing = false; \\n    \\n     \\n    // Copy the properties over onto the new prototype \\n    for (var name in prop) { \\n      // Check if we're overwriting an existing function \\n      prototype[name] = typeof prop[name] == \\\"function\\\" && \\n        typeof _super[name] == \\\"function\\\" && fnTest.test(prop[name]) ? \\n        (function(name, fn){ \\n          return function() { \\n            var tmp = this._super; \\n            \\n            // Add a new ._super() method that is the same method \\n            // but on the super-class \\n            this._super = _super[name]; \\n            \\n            // The method only need to be bound temporarily, so we \\n            // remove it when we're done executing \\n            var ret = fn.apply(this, arguments);        \\n            this._super = tmp; \\n            \\n            return ret; \\n          }; \\n        })(name, prop[name]) : \\n        prop[name]; \\n    } \\n    \\n    // The dummy class constructor \\n    function Class() { \\n      // All construction is actually done in the init method \\n      if ( !initializing && this.init ) \\n        this.init.apply(this, arguments); \\n    } \\n    \\n    // Populate our constructed prototype object \\n    Class.prototype = prototype; \\n    \\n    // Enforce the constructor to be what we expect \\n    Class.prototype.constructor = Class; \\n\\n    // And make this class extendable \\n    Class.extend = arguments.callee; \\n    \\n    // EXTENSION BY Draw2D.org to inject methods into an existing class to provide plugins or \\n    // bugfixes for further releases \\n    // \\n    Class.inject = function (prop) { \\n        var proto = this.prototype; \\n        var parent = {}; \\n        for (var name in prop) { \\n            if (typeof (prop[name]) == \\\"function\\\" && typeof (proto[name]) == \\\"function\\\" && fnTest.test(prop[name])) { \\n                parent[name] = proto[name]; \\n                proto[name] = (function (name, fn) { \\n                    return function () { \\n                        var tmp = this.parent; \\n                        this.parent = parent[name]; \\n                        var ret = fn.apply(this, arguments); \\n                        this.parent = tmp; \\n                        return ret; \\n                    }; \\n                })(name, prop[name]); \\n            } else { \\n                proto[name] = prop[name]; \\n            } \\n        } \\n    }; \\n     \\n    return Class; \\n  }; \\n})();\\n \\n\"","module.exports = \"var PF=function(){var e=function(t,n){var r=e.resolve(t,n||\\\"/\\\"),i=e.modules[r];if(!i)throw new Error(\\\"Failed to resolve module \\\"+t+\\\", tried \\\"+r);var s=i._cached?i._cached:i();return s};return e.paths=[],e.modules={},e.extensions=[\\\".js\\\",\\\".coffee\\\"],e._core={assert:!0,events:!0,fs:!0,path:!0,vm:!0},e.resolve=function(){return function(t,n){function u(t){if(e.modules[t])return t;for(var n=0;n<e.extensions.length;n++){var r=e.extensions[n];if(e.modules[t+r])return t+r}}function a(t){t=t.replace(/\\\\/+$/,\\\"\\\");var n=t+\\\"/package.json\\\";if(e.modules[n]){var i=e.modules[n](),s=i.browserify;if(typeof s==\\\"object\\\"&&s.main){var o=u(r.resolve(t,s.main));if(o)return o}else if(typeof s==\\\"string\\\"){var o=u(r.resolve(t,s));if(o)return o}else if(i.main){var o=u(r.resolve(t,i.main));if(o)return o}}return u(t+\\\"/index\\\")}function f(e,t){var n=l(t);for(var r=0;r<n.length;r++){var i=n[r],s=u(i+\\\"/\\\"+e);if(s)return s;var o=a(i+\\\"/\\\"+e);if(o)return o}var s=u(e);if(s)return s}function l(e){var t;e===\\\"/\\\"?t=[\\\"\\\"]:t=r.normalize(e).split(\\\"/\\\");var n=[];for(var i=t.length-1;i>=0;i--){if(t[i]===\\\"node_modules\\\")continue;var s=t.slice(0,i+1).join(\\\"/\\\")+\\\"/node_modules\\\";n.push(s)}return n}n||(n=\\\"/\\\");if(e._core[t])return t;var r=e.modules.path();n=r.resolve(\\\"/\\\",n);var i=n||\\\"/\\\";if(t.match(/^(?:\\\\.\\\\.?\\\\/|\\\\/)/)){var s=u(r.resolve(i,t))||a(r.resolve(i,t));if(s)return s}var o=f(t,i);if(o)return o;throw new Error(\\\"Cannot find module '\\\"+t+\\\"'\\\")}}(),e.alias=function(t,n){var r=e.modules.path(),i=null;try{i=e.resolve(t+\\\"/package.json\\\",\\\"/\\\")}catch(s){i=e.resolve(t,\\\"/\\\")}var o=r.dirname(i),u=(Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t})(e.modules);for(var a=0;a<u.length;a++){var f=u[a];if(f.slice(0,o.length+1)===o+\\\"/\\\"){var l=f.slice(o.length);e.modules[n+l]=e.modules[o+l]}else f===o&&(e.modules[n]=e.modules[o])}},e.define=function(t,n){var r=e._core[t]?\\\"\\\":e.modules.path().dirname(t),i=function(t){return e(t,r)};i.resolve=function(t){return e.resolve(t,r)},i.modules=e.modules,i.define=e.define;var s={exports:{}};e.modules[t]=function(){return e.modules[t]._cached=s.exports,n.call(s.exports,i,s,s.exports,r,t),e.modules[t]._cached=s.exports,s.exports}},typeof process==\\\"undefined\\\"&&(process={}),process.nextTick||(process.nextTick=function(){var e=[],t=typeof window!=\\\"undefined\\\"&&window.postMessage&&window.addEventListener;return t&&window.addEventListener(\\\"message\\\",function(t){if(t.source===window&&t.data===\\\"browserify-tick\\\"){t.stopPropagation();if(e.length>0){var n=e.shift();n()}}},!0),function(n){t?(e.push(n),window.postMessage(\\\"browserify-tick\\\",\\\"*\\\")):setTimeout(n,0)}}()),process.title||(process.title=\\\"browser\\\"),process.binding||(process.binding=function(t){if(t===\\\"evals\\\")return e(\\\"vm\\\");throw new Error(\\\"No such module\\\")}),process.cwd||(process.cwd=function(){return\\\".\\\"}),process.env||(process.env={}),process.argv||(process.argv=[]),e.define(\\\"path\\\",function(e,t,n,r,i){function s(e,t){var n=[];for(var r=0;r<e.length;r++)t(e[r],r,e)&&n.push(e[r]);return n}function o(e,t){var n=0;for(var r=e.length;r>=0;r--){var i=e[r];i==\\\".\\\"?e.splice(r,1):i===\\\"..\\\"?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift(\\\"..\\\");return e}var u=/^(.+\\\\/(?!$)|\\\\/)?((?:.+?)?(\\\\.[^.]*)?)$/;n.resolve=function(){var e=\\\"\\\",t=!1;for(var n=arguments.length;n>=-1&&!t;n--){var r=n>=0?arguments[n]:process.cwd();if(typeof r!=\\\"string\\\"||!r)continue;e=r+\\\"/\\\"+e,t=r.charAt(0)===\\\"/\\\"}return e=o(s(e.split(\\\"/\\\"),function(e){return!!e}),!t).join(\\\"/\\\"),(t?\\\"/\\\":\\\"\\\")+e||\\\".\\\"},n.normalize=function(e){var t=e.charAt(0)===\\\"/\\\",n=e.slice(-1)===\\\"/\\\";return e=o(s(e.split(\\\"/\\\"),function(e){return!!e}),!t).join(\\\"/\\\"),!e&&!t&&(e=\\\".\\\"),e&&n&&(e+=\\\"/\\\"),(t?\\\"/\\\":\\\"\\\")+e},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(s(e,function(e,t){return e&&typeof e==\\\"string\\\"}).join(\\\"/\\\"))},n.dirname=function(e){var t=u.exec(e)[1]||\\\"\\\",n=!1;return t?t.length===1||n&&t.length<=3&&t.charAt(1)===\\\":\\\"?t:t.substring(0,t.length-1):\\\".\\\"},n.basename=function(e,t){var n=u.exec(e)[2]||\\\"\\\";return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},n.extname=function(e){return u.exec(e)[3]||\\\"\\\"}}),e.define(\\\"/core/Node.js\\\",function(e,t,n,r,i){function s(e,t,n){this.x=e,this.y=t,this.walkable=n===undefined?!0:n}t.exports=s}),e.define(\\\"/core/Grid.js\\\",function(e,t,n,r,i){function o(e,t,n){this.width=e,this.height=t,this.nodes=this._buildNodes(e,t,n)}var s=e(\\\"./Node\\\");o.prototype._buildNodes=function(e,t,n){var r,i,o=new Array(t),u;for(r=0;r<t;++r){o[r]=new Array(e);for(i=0;i<e;++i)o[r][i]=new s(i,r)}if(n===undefined)return o;if(n.length!==t||n[0].length!==e)throw new Error(\\\"Matrix size does not fit\\\");for(r=0;r<t;++r)for(i=0;i<e;++i)n[r][i]&&(o[r][i].walkable=!1);return o},o.prototype.getNodeAt=function(e,t){return this.nodes[t][e]},o.prototype.isWalkableAt=function(e,t){return this.isInside(e,t)&&this.nodes[t][e].walkable},o.prototype.isInside=function(e,t){return e>=0&&e<this.width&&t>=0&&t<this.height},o.prototype.setWalkableAt=function(e,t,n){this.nodes[t][e].walkable=n},o.prototype.getNeighbors=function(e,t,n){var r=e.x,i=e.y,s=[],o=!1,u=!1,a=!1,f=!1,l=!1,c=!1,h=!1,p=!1,d=this.nodes;return this.isWalkableAt(r,i-1)&&(s.push(d[i-1][r]),o=!0),this.isWalkableAt(r+1,i)&&(s.push(d[i][r+1]),a=!0),this.isWalkableAt(r,i+1)&&(s.push(d[i+1][r]),l=!0),this.isWalkableAt(r-1,i)&&(s.push(d[i][r-1]),h=!0),t?(n?(u=h&&o,f=o&&a,c=a&&l,p=l&&h):(u=h||o,f=o||a,c=a||l,p=l||h),u&&this.isWalkableAt(r-1,i-1)&&s.push(d[i-1][r-1]),f&&this.isWalkableAt(r+1,i-1)&&s.push(d[i-1][r+1]),c&&this.isWalkableAt(r+1,i+1)&&s.push(d[i+1][r+1]),p&&this.isWalkableAt(r-1,i+1)&&s.push(d[i+1][r-1]),s):s},o.prototype.clone=function(){var e,t,n=this.width,r=this.height,i=this.nodes,u=new o(n,r),a=new Array(r),f;for(e=0;e<r;++e){a[e]=new Array(n);for(t=0;t<n;++t)a[e][t]=new s(t,e,i[e][t].walkable)}return u.nodes=a,u},t.exports=o}),e.define(\\\"/core/Heap.js\\\",function(e,t,n,r,i){(function(){var e,n,r,i,s,o,u,a,f,l,c,h,p,d,v;r=Math.floor,l=Math.min,n=function(e,t){return e<t?-1:e>t?1:0},f=function(e,t,i,s,o){var u;i==null&&(i=0),o==null&&(o=n);if(i<0)throw new Error(\\\"lo must be non-negative\\\");s==null&&(s=e.length);while(o(i,s)<0)u=r((i+s)/2),o(t,e[u])<0?s=u:i=u+1;return[].splice.apply(e,[i,i-i].concat(t)),t},o=function(e,t,r){return r==null&&(r=n),e.push(t),d(e,0,e.length-1,r)},s=function(e,t){var r,i;return t==null&&(t=n),r=e.pop(),e.length?(i=e[0],e[0]=r,v(e,0,t)):i=r,i},a=function(e,t,r){var i;return r==null&&(r=n),i=e[0],e[0]=t,v(e,0,r),i},u=function(e,t,r){var i;return r==null&&(r=n),e.length&&r(e[0],t)<0&&(i=[e[0],t],t=i[0],e[0]=i[1],v(e,0,r)),t},i=function(e,t){var i,s,o,u,a,f,l,c;t==null&&(t=n),f=function(){c=[];for(var t=0,n=r(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)c.push(t);return c}.apply(this).reverse(),l=[];for(s=0,u=f.length;s<u;s++)i=f[s],l.push(v(e,i,t));return l},p=function(e,t,r){var i;return r==null&&(r=n),i=e.indexOf(t),d(e,0,i,r),v(e,i,r)},c=function(e,t,r){var s,o,a,f,l;r==null&&(r=n),o=e.slice(0,t);if(!o.length)return o;i(o,r),l=e.slice(t);for(a=0,f=l.length;a<f;a++)s=l[a],u(o,s,r);return o.sort(r).reverse()},h=function(e,t,r){var o,u,a,c,h,p,d,v,m,g;r==null&&(r=n);if(t*10<=e.length){c=e.slice(0,t).sort(r);if(!c.length)return c;a=c[c.length-1],v=e.slice(t);for(h=0,d=v.length;h<d;h++)o=v[h],r(o,a)<0&&(f(c,o,0,null,r),c.pop(),a=c[c.length-1]);return c}i(e,r),g=[];for(u=p=0,m=l(t,e.length);0<=m?p<m:p>m;u=0<=m?++p:--p)g.push(s(e,r));return g},d=function(e,t,r,i){var s,o,u;i==null&&(i=n),s=e[r];while(r>t){u=r-1>>1,o=e[u];if(i(s,o)<0){e[r]=o,r=u;continue}break}return e[r]=s},v=function(e,t,r){var i,s,o,u,a;r==null&&(r=n),s=e.length,a=t,o=e[t],i=2*t+1;while(i<s)u=i+1,u<s&&!(r(e[i],e[u])<0)&&(i=u),e[t]=e[i],t=i,i=2*t+1;return e[t]=o,d(e,a,t,r)},e=function(){function e(e){this.cmp=e!=null?e:n,this.nodes=[]}return e.name=\\\"Heap\\\",e.push=o,e.pop=s,e.replace=a,e.pushpop=u,e.heapify=i,e.nlargest=c,e.nsmallest=h,e.prototype.push=function(e){return o(this.nodes,e,this.cmp)},e.prototype.pop=function(){return s(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return this.nodes.indexOf(e)!==-1},e.prototype.replace=function(e){return a(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return u(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return i(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return p(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return this.nodes.length===0},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return t=new e,t.nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.remove=e.prototype.pop,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),(typeof t!=\\\"undefined\\\"&&t!==null?t.exports:void 0)?t.exports=e:window.Heap=e}).call(this)}),e.define(\\\"/core/Util.js\\\",function(e,t,n,r,i){function s(e){var t=[[e.x,e.y]];while(e.parent)e=e.parent,t.push([e.x,e.y]);return t.reverse()}function o(e,t){var n=s(e),r=s(t);return n.concat(r.reverse())}function u(e){var t,n=0,r,i,s,o;for(t=1;t<e.length;++t)r=e[t-1],i=e[t],s=r[0]-i[0],o=r[1]-i[1],n+=Math.sqrt(s*s+o*o);return n}function a(e,t,n,r){var i=Math.abs,s=[],o,u,a,f,l,c;a=i(n-e),f=i(r-t),o=e<n?1:-1,u=t<r?1:-1,l=a-f;for(;;){s.push([e,t]);if(e===n&&t===r)break;c=2*l,c>-f&&(l-=f,e+=o),c<a&&(l+=a,t+=u)}return s}function f(e,t){var n=t.length,r=t[0][0],i=t[0][1],s=t[n-1][0],o=t[n-1][1],u,f,l,c,h,p,d,v,m,g,y,b,w;u=r,f=i,h=t[1][0],p=t[1][1],d=[[u,f]];for(v=2;v<n;++v){g=t[v],l=g[0],c=g[1],y=a(u,f,l,c),w=!1;for(m=1;m<y.length;++m){b=y[m];if(!e.isWalkableAt(b[0],b[1])){w=!0,d.push([h,p]),u=h,f=p;break}}w||(h=l,p=c)}return d.push([s,o]),d}n.backtrace=s,n.biBacktrace=o,n.pathLength=u,n.getLine=a,n.smoothenPath=f}),e.define(\\\"/core/Heuristic.js\\\",function(e,t,n,r,i){t.exports={manhattan:function(e,t){return e+t},euclidean:function(e,t){return Math.sqrt(e*e+t*t)},chebyshev:function(e,t){return Math.max(e,t)}}}),e.define(\\\"/finders/AStarFinder.js\\\",function(e,t,n,r,i){function a(e){e=e||{},this.allowDiagonal=e.allowDiagonal,this.dontCrossCorners=e.dontCrossCorners,this.heuristic=e.heuristic||u.manhattan}var s=e(\\\"../core/Heap\\\"),o=e(\\\"../core/Util\\\"),u=e(\\\"../core/Heuristic\\\");a.prototype.findPath=function(e,t,n,r,i){var u=new s(function(e,t){return e.f-t.f}),a=i.getNodeAt(e,t),f=i.getNodeAt(n,r),l=this.heuristic,c=this.allowDiagonal,h=this.dontCrossCorners,p=Math.abs,d=Math.SQRT2,v,m,g,y,b,w,E,S;a.g=0,a.f=0,u.push(a),a.opened=!0;while(!u.empty()){v=u.pop(),v.closed=!0;if(v===f)return o.backtrace(f);m=i.getNeighbors(v,c,h);for(y=0,b=m.length;y<b;++y){g=m[y];if(g.closed)continue;w=g.x,E=g.y,S=v.g+(w-v.x===0||E-v.y===0?1:d);if(!g.opened||S<g.g)g.g=S,g.h=g.h||l(p(w-n),p(E-r)),g.f=g.g+g.h,g.parent=v,g.opened?u.updateItem(g):(u.push(g),g.opened=!0)}}return[]},t.exports=a}),e.define(\\\"/finders/BestFirstFinder.js\\\",function(e,t,n,r,i){function o(e){s.call(this,e);var t=this.heuristic;this.heuristic=function(e,n){return t(e,n)*1e6}}var s=e(\\\"./AStarFinder\\\");o.prototype=new s,o.prototype.constructor=o,t.exports=o}),e.define(\\\"/finders/BreadthFirstFinder.js\\\",function(e,t,n,r,i){function o(e){e=e||{},this.allowDiagonal=e.allowDiagonal,this.dontCrossCorners=e.dontCrossCorners}var s=e(\\\"../core/Util\\\");o.prototype.findPath=function(e,t,n,r,i){var o=[],u=this.allowDiagonal,a=this.dontCrossCorners,f=i.getNodeAt(e,t),l=i.getNodeAt(n,r),c,h,p,d,v;o.push(f),f.opened=!0;while(o.length){p=o.shift(),p.closed=!0;if(p===l)return s.backtrace(l);c=i.getNeighbors(p,u,a);for(d=0,v=c.length;d<v;++d){h=c[d];if(h.closed||h.opened)continue;o.push(h),h.opened=!0,h.parent=p}}return[]},t.exports=o}),e.define(\\\"/finders/DijkstraFinder.js\\\",function(e,t,n,r,i){function o(e){s.call(this,e),this.heuristic=function(e,t){return 0}}var s=e(\\\"./AStarFinder\\\");o.prototype=new s,o.prototype.constructor=o,t.exports=o}),e.define(\\\"/finders/BiAStarFinder.js\\\",function(e,t,n,r,i){function a(e){e=e||{},this.allowDiagonal=e.allowDiagonal,this.dontCrossCorners=e.dontCrossCorners,this.heuristic=e.heuristic||u.manhattan}var s=e(\\\"../core/Heap\\\"),o=e(\\\"../core/Util\\\"),u=e(\\\"../core/Heuristic\\\");a.prototype.findPath=function(e,t,n,r,i){var u=function(e,t){return e.f-t.f},a=new s(u),f=new s(u),l=i.getNodeAt(e,t),c=i.getNodeAt(n,r),h=this.heuristic,p=this.allowDiagonal,d=this.dontCrossCorners,v=Math.abs,m=Math.SQRT2,g,y,b,w,E,S,x,T,N=1,C=2;l.g=0,l.f=0,a.push(l),l.opened=N,c.g=0,c.f=0,f.push(c),c.opened=C;while(!a.empty()&&!f.empty()){g=a.pop(),g.closed=!0,y=i.getNeighbors(g,p,d);for(w=0,E=y.length;w<E;++w){b=y[w];if(b.closed)continue;if(b.opened===C)return o.biBacktrace(g,b);S=b.x,x=b.y,T=g.g+(S-g.x===0||x-g.y===0?1:m);if(!b.opened||T<b.g)b.g=T,b.h=b.h||h(v(S-n),v(x-r)),b.f=b.g+b.h,b.parent=g,b.opened?a.updateItem(b):(a.push(b),b.opened=N)}g=f.pop(),g.closed=!0,y=i.getNeighbors(g,p,d);for(w=0,E=y.length;w<E;++w){b=y[w];if(b.closed)continue;if(b.opened===N)return o.biBacktrace(b,g);S=b.x,x=b.y,T=g.g+(S-g.x===0||x-g.y===0?1:m);if(!b.opened||T<b.g)b.g=T,b.h=b.h||h(v(S-e),v(x-t)),b.f=b.g+b.h,b.parent=g,b.opened?f.updateItem(b):(f.push(b),b.opened=C)}}return[]},t.exports=a}),e.define(\\\"/finders/BiBestFirstFinder.js\\\",function(e,t,n,r,i){function o(e){s.call(this,e);var t=this.heuristic;this.heuristic=function(e,n){return t(e,n)*1e6}}var s=e(\\\"./BiAStarFinder\\\");o.prototype=new s,o.prototype.constructor=o,t.exports=o}),e.define(\\\"/finders/BiBreadthFirstFinder.js\\\",function(e,t,n,r,i){function o(e){e=e||{},this.allowDiagonal=e.allowDiagonal,this.dontCrossCorners=e.dontCrossCorners}var s=e(\\\"../core/Util\\\");o.prototype.findPath=function(e,t,n,r,i){var o=i.getNodeAt(e,t),u=i.getNodeAt(n,r),a=[],f=[],l,c,h,p=this.allowDiagonal,d=this.dontCrossCorners,v=0,m=1,g,y;a.push(o),o.opened=!0,o.by=v,f.push(u),u.opened=!0,u.by=m;while(a.length&&f.length){h=a.shift(),h.closed=!0,l=i.getNeighbors(h,p,d);for(g=0,y=l.length;g<y;++g){c=l[g];if(c.closed)continue;if(c.opened){if(c.by===m)return s.biBacktrace(h,c);continue}a.push(c),c.parent=h,c.opened=!0,c.by=v}h=f.shift(),h.closed=!0,l=i.getNeighbors(h,p,d);for(g=0,y=l.length;g<y;++g){c=l[g];if(c.closed)continue;if(c.opened){if(c.by===v)return s.biBacktrace(c,h);continue}f.push(c),c.parent=h,c.opened=!0,c.by=m}}return[]},t.exports=o}),e.define(\\\"/finders/BiDijkstraFinder.js\\\",function(e,t,n,r,i){function o(e){s.call(this,e),this.heuristic=function(e,t){return 0}}var s=e(\\\"./BiAStarFinder\\\");o.prototype=new s,o.prototype.constructor=o,t.exports=o}),e.define(\\\"/finders/JumpPointFinder.js\\\",function(e,t,n,r,i){function a(e){e=e||{},this.heuristic=e.heuristic||u.manhattan}var s=e(\\\"../core/Heap\\\"),o=e(\\\"../core/Util\\\"),u=e(\\\"../core/Heuristic\\\");a.prototype.findPath=function(e,t,n,r,i){var u=this.openList=new s(function(e,t){return e.f-t.f}),a=this.startNode=i.getNodeAt(e,t),f=this.endNode=i.getNodeAt(n,r),l;this.grid=i,a.g=0,a.f=0,u.push(a),a.opened=!0;while(!u.empty()){l=u.pop(),l.closed=!0;if(l===f)return o.backtrace(f);this._identifySuccessors(l)}return[]},a.prototype._identifySuccessors=function(e){var t=this.grid,n=this.heuristic,r=this.openList,i=this.endNode.x,s=this.endNode.y,o,a,f,l,c,h=e.x,p=e.y,d,v,m,g,y,b,w,E=Math.abs,S=Math.max;o=this._findNeighbors(e);for(l=0,c=o.length;l<c;++l){a=o[l],f=this._jump(a[0],a[1],h,p);if(f){d=f[0],v=f[1],w=t.getNodeAt(d,v);if(w.closed)continue;y=u.euclidean(E(d-h),E(v-p)),b=e.g+y;if(!w.opened||b<w.g)w.g=b,w.h=w.h||n(E(d-i),E(v-s)),w.f=w.g+w.h,w.parent=e,w.opened?r.updateItem(w):(r.push(w),w.opened=!0)}}},a.prototype._jump=function(e,t,n,r){var i=this.grid,s=e-n,o=t-r,u,a;if(!i.isWalkableAt(e,t))return null;if(i.getNodeAt(e,t)===this.endNode)return[e,t];if(s!==0&&o!==0){if(i.isWalkableAt(e-s,t+o)&&!i.isWalkableAt(e-s,t)||i.isWalkableAt(e+s,t-o)&&!i.isWalkableAt(e,t-o))return[e,t]}else if(s!==0){if(i.isWalkableAt(e+s,t+1)&&!i.isWalkableAt(e,t+1)||i.isWalkableAt(e+s,t-1)&&!i.isWalkableAt(e,t-1))return[e,t]}else if(i.isWalkableAt(e+1,t+o)&&!i.isWalkableAt(e+1,t)||i.isWalkableAt(e-1,t+o)&&!i.isWalkableAt(e-1,t))return[e,t];if(s!==0&&o!==0){u=this._jump(e+s,t,e,t),a=this._jump(e,t+o,e,t);if(u||a)return[e,t]}return i.isWalkableAt(e+s,t)||i.isWalkableAt(e,t+o)?this._jump(e+s,t+o,e,t):null},a.prototype._findNeighbors=function(e){var t=e.parent,n=e.x,r=e.y,i=this.grid,s,o,u,a,f,l,c=[],h,p,d,v;if(t)s=t.x,o=t.y,f=(n-s)/Math.max(Math.abs(n-s),1),l=(r-o)/Math.max(Math.abs(r-o),1),f!==0&&l!==0?(i.isWalkableAt(n,r+l)&&c.push([n,r+l]),i.isWalkableAt(n+f,r)&&c.push([n+f,r]),(i.isWalkableAt(n,r+l)||i.isWalkableAt(n+f,r))&&c.push([n+f,r+l]),!i.isWalkableAt(n-f,r)&&i.isWalkableAt(n,r+l)&&c.push([n-f,r+l]),!i.isWalkableAt(n,r-l)&&i.isWalkableAt(n+f,r)&&c.push([n+f,r-l])):f===0?i.isWalkableAt(n,r+l)&&(i.isWalkableAt(n,r+l)&&c.push([n,r+l]),i.isWalkableAt(n+1,r)||c.push([n+1,r+l]),i.isWalkableAt(n-1,r)||c.push([n-1,r+l])):i.isWalkableAt(n+f,r)&&(i.isWalkableAt(n+f,r)&&c.push([n+f,r]),i.isWalkableAt(n,r+1)||c.push([n+f,r+1]),i.isWalkableAt(n,r-1)||c.push([n+f,r-1]));else{h=i.getNeighbors(e,!0);for(d=0,v=h.length;d<v;++d)p=h[d],c.push([p.x,p.y])}return c},t.exports=a}),e.define(\\\"/PathFinding.js\\\",function(e,t,n,r,i){t.exports={Node:e(\\\"./core/Node\\\"),Grid:e(\\\"./core/Grid\\\"),Heap:e(\\\"./core/Heap\\\"),Util:e(\\\"./core/Util\\\"),Heuristic:e(\\\"./core/Heuristic\\\"),AStarFinder:e(\\\"./finders/AStarFinder\\\"),BestFirstFinder:e(\\\"./finders/BestFirstFinder\\\"),BreadthFirstFinder:e(\\\"./finders/BreadthFirstFinder\\\"),DijkstraFinder:e(\\\"./finders/DijkstraFinder\\\"),BiAStarFinder:e(\\\"./finders/BiAStarFinder\\\"),BiBestFirstFinder:e(\\\"./finders/BiBestFirstFinder\\\"),BiBreadthFirstFinder:e(\\\"./finders/BiBreadthFirstFinder\\\"),BiDijkstraFinder:e(\\\"./finders/BiDijkstraFinder\\\"),JumpPointFinder:e(\\\"./finders/JumpPointFinder\\\")}}),e(\\\"/PathFinding.js\\\"),e(\\\"/PathFinding\\\")}()\"","module.exports = \"\\n\\n// ┌────────────────────────────────────────────────────────────────────┐ \\\\\\\\// │ Raphaël 2.1.0 - JavaScript Vector Library                          │ \\\\\\\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com)    │ \\\\\\\\\\n// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com)              │ \\\\\\\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\\\\\\\\\n// └────────────────────────────────────────────────────────────────────┘ \\\\\\\\\\n\\n// ┌──────────────────────────────────────────────────────────────────────────────────────┐ \\\\\\\\\\n// │ Eve 0.3.4 - JavaScript Events Library                                                │ \\\\\\\\\\n// ├──────────────────────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://dmitry.baranovskiy.com/)          │ \\\\\\\\\\n// │ Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. │ \\\\\\\\\\n// └──────────────────────────────────────────────────────────────────────────────────────┘ \\\\\\\\\\n\\n// THIS FILES IS PATCHED BY FREEGROUP\\n// you can't replace this file with a new version without migrate all changes\\n// tagged with \\\"FREEGROUP\\\"\\n//\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n// you may not use this file except in compliance with the License.\\n// You may obtain a copy of the License at\\n//\\n// http://www.apache.org/licenses/LICENSE-2.0\\n//\\n// Unless required by applicable law or agreed to in writing, software\\n// distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n// See the License for the specific language governing permissions and\\n// limitations under the License.\\n// ┌────────────────────────────────────────────────────────────┐ \\\\\\\\\\n// │ Eve 0.4.2 - JavaScript Events Library                      │ \\\\\\\\\\n// ├────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) │ \\\\\\\\\\n// └────────────────────────────────────────────────────────────┘ \\\\\\\\\\n(function (glob, factory) {\\n    if (typeof define === \\\"function\\\" && define.amd) {\\n        define(\\\"eve\\\", function() {\\n            return factory();\\n        });\\n    } else if (typeof exports === \\\"object\\\") {\\n        module.exports = factory();\\n    } else {\\n        glob.eve = factory();\\n    }\\n}(this, function(){\\n    var version = \\\"0.4.2\\\",\\n        has = \\\"hasOwnProperty\\\",\\n        separator = /[\\\\.\\\\/]/,\\n        wildcard = \\\"*\\\",\\n        fun = function () {},\\n        numsort = function (a, b) {\\n            return a - b;\\n        },\\n        current_event,\\n        stop,\\n        events = {n: {}},\\n    /*\\\\\\n     * eve\\n     [ method ]\\n\\n     * Fires event with given `name`, given scope and other parameters.\\n\\n     > Arguments\\n\\n     - name (string) name of the *event*, dot (`.`) or slash (`/`) separated\\n     - scope (object) context for the event handlers\\n     - varargs (...) the rest of arguments will be sent to event handlers\\n\\n     = (object) array of returned values from the listeners\\n     \\\\*/\\n        eve = function (name, scope) {\\n            name = String(name);\\n            var e = events,\\n                oldstop = stop,\\n                args = Array.prototype.slice.call(arguments, 2),\\n                listeners = eve.listeners(name),\\n                z = 0,\\n                f = false,\\n                l,\\n                indexed = [],\\n                queue = {},\\n                out = [],\\n                ce = current_event,\\n                errors = [];\\n            current_event = name;\\n            stop = 0;\\n            for (var i = 0, ii = listeners.length; i < ii; i++) if (\\\"zIndex\\\" in listeners[i]) {\\n                indexed.push(listeners[i].zIndex);\\n                if (listeners[i].zIndex < 0) {\\n                    queue[listeners[i].zIndex] = listeners[i];\\n                }\\n            }\\n            indexed.sort(numsort);\\n            while (indexed[z] < 0) {\\n                l = queue[indexed[z++]];\\n                out.push(l.apply(scope, args));\\n                if (stop) {\\n                    stop = oldstop;\\n                    return out;\\n                }\\n            }\\n            for (i = 0; i < ii; i++) {\\n                l = listeners[i];\\n                if (\\\"zIndex\\\" in l) {\\n                    if (l.zIndex == indexed[z]) {\\n                        out.push(l.apply(scope, args));\\n                        if (stop) {\\n                            break;\\n                        }\\n                        do {\\n                            z++;\\n                            l = queue[indexed[z]];\\n                            l && out.push(l.apply(scope, args));\\n                            if (stop) {\\n                                break;\\n                            }\\n                        } while (l)\\n                    } else {\\n                        queue[l.zIndex] = l;\\n                    }\\n                } else {\\n                    out.push(l.apply(scope, args));\\n                    if (stop) {\\n                        break;\\n                    }\\n                }\\n            }\\n            stop = oldstop;\\n            current_event = ce;\\n            return out.length ? out : null;\\n        };\\n    // Undocumented. Debug only.\\n    eve._events = events;\\n    /*\\\\\\n     * eve.listeners\\n     [ method ]\\n\\n     * Internal method which gives you array of all event handlers that will be triggered by the given `name`.\\n\\n     > Arguments\\n\\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated\\n\\n     = (array) array of event handlers\\n     \\\\*/\\n    eve.listeners = function (name) {\\n        var names = name.split(separator),\\n            e = events,\\n            item,\\n            items,\\n            k,\\n            i,\\n            ii,\\n            j,\\n            jj,\\n            nes,\\n            es = [e],\\n            out = [];\\n        for (i = 0, ii = names.length; i < ii; i++) {\\n            nes = [];\\n            for (j = 0, jj = es.length; j < jj; j++) {\\n                e = es[j].n;\\n                items = [e[names[i]], e[wildcard]];\\n                k = 2;\\n                while (k--) {\\n                    item = items[k];\\n                    if (item) {\\n                        nes.push(item);\\n                        out = out.concat(item.f || []);\\n                    }\\n                }\\n            }\\n            es = nes;\\n        }\\n        return out;\\n    };\\n\\n    /*\\\\\\n     * eve.on\\n     [ method ]\\n     **\\n     * Binds given event handler with a given name. You can use wildcards “`*`” for the names:\\n     | eve.on(\\\"*.under.*\\\", f);\\n     | eve(\\\"mouse.under.floor\\\"); // triggers f\\n     * Use @eve to trigger the listener.\\n     **\\n     > Arguments\\n     **\\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\\n     - f (function) event handler function\\n     **\\n     = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment.\\n     > Example:\\n     | eve.on(\\\"mouse\\\", eatIt)(2);\\n     | eve.on(\\\"mouse\\\", scream);\\n     | eve.on(\\\"mouse\\\", catchIt)(1);\\n     * This will ensure that `catchIt()` function will be called before `eatIt()`.\\n     *\\n     * If you want to put your handler before non-indexed handlers, specify a negative value.\\n     * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.\\n     \\\\*/\\n    eve.on = function (name, f) {\\n        name = String(name);\\n        if (typeof f != \\\"function\\\") {\\n            return function () {};\\n        }\\n        var names = name.split(separator),\\n            e = events;\\n        for (var i = 0, ii = names.length; i < ii; i++) {\\n            e = e.n;\\n            e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}});\\n        }\\n        e.f = e.f || [];\\n        for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {\\n            return fun;\\n        }\\n        e.f.push(f);\\n        return function (zIndex) {\\n            if (+zIndex == +zIndex) {\\n                f.zIndex = +zIndex;\\n            }\\n        };\\n    };\\n    /*\\\\\\n     * eve.f\\n     [ method ]\\n     **\\n     * Returns function that will fire given event with optional arguments.\\n     * Arguments that will be passed to the result function will be also\\n     * concated to the list of final arguments.\\n     | el.onclick = eve.f(\\\"click\\\", 1, 2);\\n     | eve.on(\\\"click\\\", function (a, b, c) {\\n     |     console.log(a, b, c); // 1, 2, [event object]\\n     | });\\n     > Arguments\\n     - event (string) event name\\n     - varargs (…) and any other arguments\\n     = (function) possible event handler function\\n     \\\\*/\\n    eve.f = function (event) {\\n        var attrs = [].slice.call(arguments, 1);\\n        return function () {\\n            eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0)));\\n        };\\n    };\\n    /*\\\\\\n     * eve.stop\\n     [ method ]\\n     **\\n     * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing.\\n     \\\\*/\\n    eve.stop = function () {\\n        stop = 1;\\n    };\\n    /*\\\\\\n     * eve.nt\\n     [ method ]\\n     **\\n     * Could be used inside event handler to figure out actual name of the event.\\n     **\\n     > Arguments\\n     **\\n     - subname (string) #optional subname of the event\\n     **\\n     = (string) name of the event, if `subname` is not specified\\n     * or\\n     = (boolean) `true`, if current event’s name contains `subname`\\n     \\\\*/\\n    eve.nt = function (subname) {\\n        if (subname) {\\n            return new RegExp(\\\"(?:\\\\\\\\.|\\\\\\\\/|^)\\\" + subname + \\\"(?:\\\\\\\\.|\\\\\\\\/|$)\\\").test(current_event);\\n        }\\n        return current_event;\\n    };\\n    /*\\\\\\n     * eve.nts\\n     [ method ]\\n     **\\n     * Could be used inside event handler to figure out actual name of the event.\\n     **\\n     **\\n     = (array) names of the event\\n     \\\\*/\\n    eve.nts = function () {\\n        return current_event.split(separator);\\n    };\\n    /*\\\\\\n     * eve.off\\n     [ method ]\\n     **\\n     * Removes given function from the list of event listeners assigned to given name.\\n     * If no arguments specified all the events will be cleared.\\n     **\\n     > Arguments\\n     **\\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\\n     - f (function) event handler function\\n     \\\\*/\\n    /*\\\\\\n     * eve.unbind\\n     [ method ]\\n     **\\n     * See @eve.off\\n     \\\\*/\\n    eve.off = eve.unbind = function (name, f) {\\n        if (!name) {\\n            eve._events = events = {n: {}};\\n            return;\\n        }\\n        var names = name.split(separator),\\n            e,\\n            key,\\n            splice,\\n            i, ii, j, jj,\\n            cur = [events];\\n        for (i = 0, ii = names.length; i < ii; i++) {\\n            for (j = 0; j < cur.length; j += splice.length - 2) {\\n                splice = [j, 1];\\n                e = cur[j].n;\\n                if (names[i] != wildcard) {\\n                    if (e[names[i]]) {\\n                        splice.push(e[names[i]]);\\n                    }\\n                } else {\\n                    for (key in e) if (e[has](key)) {\\n                        splice.push(e[key]);\\n                    }\\n                }\\n                cur.splice.apply(cur, splice);\\n            }\\n        }\\n        for (i = 0, ii = cur.length; i < ii; i++) {\\n            e = cur[i];\\n            while (e.n) {\\n                if (f) {\\n                    if (e.f) {\\n                        for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {\\n                            e.f.splice(j, 1);\\n                            break;\\n                        }\\n                        !e.f.length && delete e.f;\\n                    }\\n                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\\n                        var funcs = e.n[key].f;\\n                        for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {\\n                            funcs.splice(j, 1);\\n                            break;\\n                        }\\n                        !funcs.length && delete e.n[key].f;\\n                    }\\n                } else {\\n                    delete e.f;\\n                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\\n                        delete e.n[key].f;\\n                    }\\n                }\\n                e = e.n;\\n            }\\n        }\\n    };\\n    /*\\\\\\n     * eve.once\\n     [ method ]\\n     **\\n     * Binds given event handler with a given name to only run once then unbind itself.\\n     | eve.once(\\\"login\\\", f);\\n     | eve(\\\"login\\\"); // triggers f\\n     | eve(\\\"login\\\"); // no listeners\\n     * Use @eve to trigger the listener.\\n     **\\n     > Arguments\\n     **\\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\\n     - f (function) event handler function\\n     **\\n     = (function) same return function as @eve.on\\n     \\\\*/\\n    eve.once = function (name, f) {\\n        var f2 = function () {\\n            eve.unbind(name, f2);\\n            return f.apply(this, arguments);\\n        };\\n        return eve.on(name, f2);\\n    };\\n    /*\\\\\\n     * eve.version\\n     [ property (string) ]\\n     **\\n     * Current version of the library.\\n     \\\\*/\\n    eve.version = version;\\n    eve.toString = function () {\\n        return \\\"You are running Eve \\\" + version;\\n    };\\n\\n    return eve;\\n}));\\n\\n// ┌────────────────────────────────────────────────────────────────────┐ \\\\\\\\\\n// │ Raphaël 2.1.4 - JavaScript Vector Library                      │ \\\\\\\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Core Module                                                        │ \\\\\\\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\\\\\\\\\n// └────────────────────────────────────────────────────────────────────┘ \\\\\\\\\\n\\n(function (glob, factory) {\\n    if (typeof define === \\\"function\\\" && define.amd) {\\n        define(\\\"raphael.core\\\", [\\\"eve\\\"], function(eve) {\\n            return factory(eve);\\n        });\\n    } else if (typeof exports === \\\"object\\\") {\\n        module.exports = factory(require(\\\"eve\\\"));\\n    } else {\\n        glob.Raphael = factory(glob.eve);\\n    }\\n}(this, function (eve) {\\n    /*\\\\\\n     * Raphael\\n     [ method ]\\n     **\\n     * Creates a canvas object on which to draw.\\n     * You must do this first, as all future calls to drawing methods\\n     * from this instance will be bound to this canvas.\\n     > Parameters\\n     **\\n     - container (HTMLElement|string) DOM element or its ID which is going to be a parent for drawing surface\\n     - width (number)\\n     - height (number)\\n     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\\n     * or\\n     - x (number)\\n     - y (number)\\n     - width (number)\\n     - height (number)\\n     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\\n     * or\\n     - all (array) (first 3 or 4 elements in the array are equal to [containerID, width, height] or [x, y, width, height]. The rest are element descriptions in format {type: type, <attributes>}). See @Paper.add.\\n     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\\n     * or\\n     - onReadyCallback (function) function that is going to be called on DOM ready event. You can also subscribe to this event via Eve’s “DOMLoad” event. In this case method returns `undefined`.\\n     = (object) @Paper\\n     > Usage\\n     | // Each of the following examples create a canvas\\n     | // that is 320px wide by 200px high.\\n     | // Canvas is created at the viewport’s 10,50 coordinate.\\n     | var paper = Raphael(10, 50, 320, 200);\\n     | // Canvas is created at the top left corner of the #notepad element\\n     | // (or its top right corner in dir=\\\"rtl\\\" elements)\\n     | var paper = Raphael(document.getElementById(\\\"notepad\\\"), 320, 200);\\n     | // Same as above\\n     | var paper = Raphael(\\\"notepad\\\", 320, 200);\\n     | // Image dump\\n     | var set = Raphael([\\\"notepad\\\", 320, 200, {\\n     |     type: \\\"rect\\\",\\n     |     x: 10,\\n     |     y: 10,\\n     |     width: 25,\\n     |     height: 25,\\n     |     stroke: \\\"#f00\\\"\\n     | }, {\\n     |     type: \\\"text\\\",\\n     |     x: 30,\\n     |     y: 40,\\n     |     text: \\\"Dump\\\"\\n     | }]);\\n     \\\\*/\\n    function R(first) {\\n        if (R.is(first, \\\"function\\\")) {\\n            return loaded ? first() : eve.on(\\\"raphael.DOMload\\\", first);\\n        } else if (R.is(first, array)) {\\n            return R._engine.create[apply](R, first.splice(0, 3 + R.is(first[0], nu))).add(first);\\n        } else {\\n            var args = Array.prototype.slice.call(arguments, 0);\\n            if (R.is(args[args.length - 1], \\\"function\\\")) {\\n                var f = args.pop();\\n                return loaded ? f.call(R._engine.create[apply](R, args)) : eve.on(\\\"raphael.DOMload\\\", function () {\\n                    f.call(R._engine.create[apply](R, args));\\n                });\\n            } else {\\n                return R._engine.create[apply](R, arguments);\\n            }\\n        }\\n    }\\n    R.version = \\\"2.1.4\\\";\\n    R.eve = eve;\\n    var loaded,\\n        separator = /[, ]+/,\\n        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},\\n        formatrg = /\\\\{(\\\\d+)\\\\}/g,\\n        proto = \\\"prototype\\\",\\n        has = \\\"hasOwnProperty\\\",\\n        g = {\\n            doc: document,\\n            win: window\\n        },\\n        oldRaphael = {\\n            was: Object.prototype[has].call(g.win, \\\"Raphael\\\"),\\n            is: g.win.Raphael\\n        },\\n        Paper = function () {\\n            /*\\\\\\n             * Paper.ca\\n             [ property (object) ]\\n             **\\n             * Shortcut for @Paper.customAttributes\\n             \\\\*/\\n            /*\\\\\\n             * Paper.customAttributes\\n             [ property (object) ]\\n             **\\n             * If you have a set of attributes that you would like to represent\\n             * as a function of some number you can do it easily with custom attributes:\\n             > Usage\\n             | paper.customAttributes.hue = function (num) {\\n             |     num = num % 1;\\n             |     return {fill: \\\"hsb(\\\" + num + \\\", 0.75, 1)\\\"};\\n             | };\\n             | // Custom attribute “hue” will change fill\\n             | // to be given hue with fixed saturation and brightness.\\n             | // Now you can use it like this:\\n             | var c = paper.circle(10, 10, 10).attr({hue: .45});\\n             | // or even like this:\\n             | c.animate({hue: 1}, 1e3);\\n             |\\n             | // You could also create custom attribute\\n             | // with multiple parameters:\\n             | paper.customAttributes.hsb = function (h, s, b) {\\n             |     return {fill: \\\"hsb(\\\" + [h, s, b].join(\\\",\\\") + \\\")\\\"};\\n             | };\\n             | c.attr({hsb: \\\"0.5 .8 1\\\"});\\n             | c.animate({hsb: [1, 0, 0.5]}, 1e3);\\n             \\\\*/\\n            this.ca = this.customAttributes = {};\\n        },\\n        paperproto,\\n        appendChild = \\\"appendChild\\\",\\n        apply = \\\"apply\\\",\\n        concat = \\\"concat\\\",\\n        supportsTouch = ('ontouchstart' in g.win) || g.win.DocumentTouch && g.doc instanceof DocumentTouch, //taken from Modernizr touch test\\n        E = \\\"\\\",\\n        S = \\\" \\\",\\n        Str = String,\\n        split = \\\"split\\\",\\n        events = \\\"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\\\"[split](S),\\n        touchMap = {\\n            mousedown: \\\"touchstart\\\",\\n            mousemove: \\\"touchmove\\\",\\n            mouseup: \\\"touchend\\\"\\n        },\\n        lowerCase = Str.prototype.toLowerCase,\\n        math = Math,\\n        mmax = math.max,\\n        mmin = math.min,\\n        abs = math.abs,\\n        pow = math.pow,\\n        PI = math.PI,\\n        nu = \\\"number\\\",\\n        string = \\\"string\\\",\\n        array = \\\"array\\\",\\n        toString = \\\"toString\\\",\\n        fillString = \\\"fill\\\",\\n        objectToString = Object.prototype.toString,\\n        paper = {},\\n        push = \\\"push\\\",\\n        ISURL = R._ISURL = /^url\\\\(['\\\"]?(.+?)['\\\"]?\\\\)$/i,\\n        colourRegExp = /^\\\\s*((#[a-f\\\\d]{6})|(#[a-f\\\\d]{3})|rgba?\\\\(\\\\s*([\\\\d\\\\.]+%?\\\\s*,\\\\s*[\\\\d\\\\.]+%?\\\\s*,\\\\s*[\\\\d\\\\.]+%?(?:\\\\s*,\\\\s*[\\\\d\\\\.]+%?)?)\\\\s*\\\\)|hsba?\\\\(\\\\s*([\\\\d\\\\.]+(?:deg|\\\\xb0|%)?\\\\s*,\\\\s*[\\\\d\\\\.]+%?\\\\s*,\\\\s*[\\\\d\\\\.]+(?:%?\\\\s*,\\\\s*[\\\\d\\\\.]+)?)%?\\\\s*\\\\)|hsla?\\\\(\\\\s*([\\\\d\\\\.]+(?:deg|\\\\xb0|%)?\\\\s*,\\\\s*[\\\\d\\\\.]+%?\\\\s*,\\\\s*[\\\\d\\\\.]+(?:%?\\\\s*,\\\\s*[\\\\d\\\\.]+)?)%?\\\\s*\\\\))\\\\s*$/i,\\n        isnan = {\\\"NaN\\\": 1, \\\"Infinity\\\": 1, \\\"-Infinity\\\": 1},\\n        bezierrg = /^(?:cubic-)?bezier\\\\(([^,]+),([^,]+),([^,]+),([^\\\\)]+)\\\\)/,\\n        round = math.round,\\n        setAttribute = \\\"setAttribute\\\",\\n        toFloat = parseFloat,\\n        toInt = parseInt,\\n        upperCase = Str.prototype.toUpperCase,\\n        availableAttrs = R._availableAttrs = {\\n            \\\"arrow-end\\\": \\\"none\\\",\\n            \\\"arrow-start\\\": \\\"none\\\",\\n            blur: 0,\\n            \\\"clip-rect\\\": \\\"0 0 1e9 1e9\\\",\\n            cursor: \\\"default\\\",\\n            cx: 0,\\n            cy: 0,\\n            fill: \\\"#fff\\\",\\n            \\\"fill-opacity\\\": 1,\\n            font: '10px \\\"Arial\\\"',\\n            \\\"font-family\\\": '\\\"Arial\\\"',\\n            \\\"font-size\\\": \\\"10\\\",\\n            \\\"font-style\\\": \\\"normal\\\",\\n            \\\"font-weight\\\": 400,\\n            gradient: 0,\\n            height: 0,\\n            href: \\\"http://raphaeljs.com/\\\",\\n            \\\"letter-spacing\\\": 0,\\n            opacity: 1,\\n            path: \\\"M0,0\\\",\\n            r: 0,\\n            rx: 0,\\n            ry: 0,\\n            src: \\\"\\\",\\n            stroke: \\\"#000\\\",\\n            \\\"stroke-dasharray\\\": \\\"\\\",\\n            \\\"stroke-linecap\\\": \\\"butt\\\",\\n            \\\"stroke-linejoin\\\": \\\"butt\\\",\\n            \\\"stroke-miterlimit\\\": 0,\\n            \\\"stroke-opacity\\\": 1,\\n            \\\"stroke-width\\\": 1,\\n            \\\"stroke-scale\\\": false, // FreeGroup: draw2d enhancement\\n            target: \\\"_blank\\\",\\n            \\\"text-anchor\\\": \\\"middle\\\",\\n            title: \\\"Raphael\\\",\\n            transform: \\\"\\\",\\n            width: 0,\\n            x: 0,\\n            y: 0\\n        },\\n        availableAnimAttrs = R._availableAnimAttrs = {\\n            blur: nu,\\n            \\\"clip-rect\\\": \\\"csv\\\",\\n            cx: nu,\\n            cy: nu,\\n            fill: \\\"colour\\\",\\n            \\\"fill-opacity\\\": nu,\\n            \\\"font-size\\\": nu,\\n            height: nu,\\n            opacity: nu,\\n            path: \\\"path\\\",\\n            r: nu,\\n            rx: nu,\\n            ry: nu,\\n            stroke: \\\"colour\\\",\\n            \\\"stroke-opacity\\\": nu,\\n            \\\"stroke-width\\\": nu,\\n            transform: \\\"transform\\\",\\n            width: nu,\\n            x: nu,\\n            y: nu\\n        },\\n        whitespace = /[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]/g,\\n        commaSpaces = /[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*,[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*/,\\n        hsrg = {hs: 1, rg: 1},\\n        p2s = /,?([achlmqrstvxz]),?/gi,\\n        pathCommand = /([achlmrqstvz])[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029,]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*,?[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*)+)/ig,\\n        tCommand = /([rstm])[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029,]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*,?[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*)+)/ig,\\n        pathValues = /(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*,?[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*/ig,\\n        radial_gradient = R._radial_gradient = /^r(?:\\\\(([^,]+?)[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*,[\\\\x09\\\\x0a\\\\x0b\\\\x0c\\\\x0d\\\\x20\\\\xa0\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\u2028\\\\u2029]*([^\\\\)]+?)\\\\))?/,\\n        eldata = {},\\n        sortByKey = function (a, b) {\\n            return a.key - b.key;\\n        },\\n        sortByNumber = function (a, b) {\\n            return toFloat(a) - toFloat(b);\\n        },\\n        fun = function () {},\\n        pipe = function (x) {\\n            return x;\\n        },\\n        rectPath = R._rectPath = function (x, y, w, h, r) {\\n            if (r) {\\n                return [[\\\"M\\\", x + r, y], [\\\"l\\\", w - r * 2, 0], [\\\"a\\\", r, r, 0, 0, 1, r, r], [\\\"l\\\", 0, h - r * 2], [\\\"a\\\", r, r, 0, 0, 1, -r, r], [\\\"l\\\", r * 2 - w, 0], [\\\"a\\\", r, r, 0, 0, 1, -r, -r], [\\\"l\\\", 0, r * 2 - h], [\\\"a\\\", r, r, 0, 0, 1, r, -r], [\\\"z\\\"]];\\n            }\\n            return [[\\\"M\\\", x, y], [\\\"l\\\", w, 0], [\\\"l\\\", 0, h], [\\\"l\\\", -w, 0], [\\\"z\\\"]];\\n        },\\n        ellipsePath = function (x, y, rx, ry) {\\n            if (ry == null) {\\n                ry = rx;\\n            }\\n            return [[\\\"M\\\", x, y], [\\\"m\\\", 0, -ry], [\\\"a\\\", rx, ry, 0, 1, 1, 0, 2 * ry], [\\\"a\\\", rx, ry, 0, 1, 1, 0, -2 * ry], [\\\"z\\\"]];\\n        },\\n        getPath = R._getPath = {\\n            path: function (el) {\\n                return el.attr(\\\"path\\\");\\n            },\\n            circle: function (el) {\\n                var a = el.attrs;\\n                return ellipsePath(a.cx, a.cy, a.r);\\n            },\\n            ellipse: function (el) {\\n                var a = el.attrs;\\n                return ellipsePath(a.cx, a.cy, a.rx, a.ry);\\n            },\\n            rect: function (el) {\\n                var a = el.attrs;\\n                return rectPath(a.x, a.y, a.width, a.height, a.r);\\n            },\\n            image: function (el) {\\n                var a = el.attrs;\\n                return rectPath(a.x, a.y, a.width, a.height);\\n            },\\n            text: function (el) {\\n                var bbox = el._getBBox();\\n                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\\n            },\\n            set : function(el) {\\n                var bbox = el._getBBox();\\n                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\\n            }\\n        },\\n    /*\\\\\\n     * Raphael.mapPath\\n     [ method ]\\n     **\\n     * Transform the path string with given matrix.\\n     > Parameters\\n     - path (string) path string\\n     - matrix (object) see @Matrix\\n     = (string) transformed path string\\n     \\\\*/\\n        mapPath = R.mapPath = function (path, matrix) {\\n            if (!matrix) {\\n                return path;\\n            }\\n            var x, y, i, j, ii, jj, pathi;\\n            path = path2curve(path);\\n            for (i = 0, ii = path.length; i < ii; i++) {\\n                pathi = path[i];\\n                for (j = 1, jj = pathi.length; j < jj; j += 2) {\\n                    x = matrix.x(pathi[j], pathi[j + 1]);\\n                    y = matrix.y(pathi[j], pathi[j + 1]);\\n                    pathi[j] = x;\\n                    pathi[j + 1] = y;\\n                }\\n            }\\n            return path;\\n        };\\n\\n    R._g = g;\\n    /*\\\\\\n     * Raphael.type\\n     [ property (string) ]\\n     **\\n     * Can be “SVG”, “VML” or empty, depending on browser support.\\n     \\\\*/\\n    R.type = (g.win.SVGAngle || g.doc.implementation.hasFeature(\\\"http://www.w3.org/TR/SVG11/feature#BasicStructure\\\", \\\"1.1\\\") ? \\\"SVG\\\" : \\\"VML\\\");\\n    if (R.type == \\\"VML\\\") {\\n        var d = g.doc.createElement(\\\"div\\\"),\\n            b;\\n        d.innerHTML = '<v:shape adj=\\\"1\\\"/>';\\n        b = d.firstChild;\\n        b.style.behavior = \\\"url(#default#VML)\\\";\\n        if (!(b && typeof b.adj == \\\"object\\\")) {\\n            return (R.type = E);\\n        }\\n        d = null;\\n    }\\n    /*\\\\\\n     * Raphael.svg\\n     [ property (boolean) ]\\n     **\\n     * `true` if browser supports SVG.\\n     \\\\*/\\n    /*\\\\\\n     * Raphael.vml\\n     [ property (boolean) ]\\n     **\\n     * `true` if browser supports VML.\\n     \\\\*/\\n    R.svg = !(R.vml = R.type == \\\"VML\\\");\\n    R._Paper = Paper;\\n    /*\\\\\\n     * Raphael.fn\\n     [ property (object) ]\\n     **\\n     * You can add your own method to the canvas. For example if you want to draw a pie chart,\\n     * you can create your own pie chart function and ship it as a Raphaël plugin. To do this\\n     * you need to extend the `Raphael.fn` object. You should modify the `fn` object before a\\n     * Raphaël instance is created, otherwise it will take no effect. Please note that the\\n     * ability for namespaced plugins was removed in Raphael 2.0. It is up to the plugin to\\n     * ensure any namespacing ensures proper context.\\n     > Usage\\n     | Raphael.fn.arrow = function (x1, y1, x2, y2, size) {\\n     |     return this.path( ... );\\n     | };\\n     | // or create namespace\\n     | Raphael.fn.mystuff = {\\n     |     arrow: function () {…},\\n     |     star: function () {…},\\n     |     // etc…\\n     | };\\n     | var paper = Raphael(10, 10, 630, 480);\\n     | // then use it\\n     | paper.arrow(10, 10, 30, 30, 5).attr({fill: \\\"#f00\\\"});\\n     | paper.mystuff.arrow();\\n     | paper.mystuff.star();\\n     \\\\*/\\n    R.fn = paperproto = Paper.prototype = R.prototype;\\n    R._id = 0;\\n    R._oid = 0;\\n    /*\\\\\\n     * Raphael.is\\n     [ method ]\\n     **\\n     * Handful of replacements for `typeof` operator.\\n     > Parameters\\n     - o (…) any object or primitive\\n     - type (string) name of the type, i.e. “string”, “function”, “number”, etc.\\n     = (boolean) is given value is of given type\\n     \\\\*/\\n    R.is = function (o, type) {\\n        type = lowerCase.call(type);\\n        if (type == \\\"finite\\\") {\\n            return !isnan[has](+o);\\n        }\\n        if (type == \\\"array\\\") {\\n            return o instanceof Array;\\n        }\\n        return  (type == \\\"null\\\" && o === null) ||\\n            (type == typeof o && o !== null) ||\\n            (type == \\\"object\\\" && o === Object(o)) ||\\n            (type == \\\"array\\\" && Array.isArray && Array.isArray(o)) ||\\n            objectToString.call(o).slice(8, -1).toLowerCase() == type;\\n    };\\n\\n    function clone(obj) {\\n        if (typeof obj == \\\"function\\\" || Object(obj) !== obj) {\\n            return obj;\\n        }\\n        var res = new obj.constructor;\\n        for (var key in obj) if (obj[has](key)) {\\n            res[key] = clone(obj[key]);\\n        }\\n        return res;\\n    }\\n\\n    /*\\\\\\n     * Raphael.angle\\n     [ method ]\\n     **\\n     * Returns angle between two or three points\\n     > Parameters\\n     - x1 (number) x coord of first point\\n     - y1 (number) y coord of first point\\n     - x2 (number) x coord of second point\\n     - y2 (number) y coord of second point\\n     - x3 (number) #optional x coord of third point\\n     - y3 (number) #optional y coord of third point\\n     = (number) angle in degrees.\\n     \\\\*/\\n    R.angle = function (x1, y1, x2, y2, x3, y3) {\\n        if (x3 == null) {\\n            var x = x1 - x2,\\n                y = y1 - y2;\\n            if (!x && !y) {\\n                return 0;\\n            }\\n            return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360;\\n        } else {\\n            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);\\n        }\\n    };\\n    /*\\\\\\n     * Raphael.rad\\n     [ method ]\\n     **\\n     * Transform angle to radians\\n     > Parameters\\n     - deg (number) angle in degrees\\n     = (number) angle in radians.\\n     \\\\*/\\n    R.rad = function (deg) {\\n        return deg % 360 * PI / 180;\\n    };\\n    /*\\\\\\n     * Raphael.deg\\n     [ method ]\\n     **\\n     * Transform angle to degrees\\n     > Parameters\\n     - rad (number) angle in radians\\n     = (number) angle in degrees.\\n     \\\\*/\\n    R.deg = function (rad) {\\n        return Math.round ((rad * 180 / PI% 360)* 1000) / 1000;\\n    };\\n    /*\\\\\\n     * Raphael.snapTo\\n     [ method ]\\n     **\\n     * Snaps given value to given grid.\\n     > Parameters\\n     - values (array|number) given array of values or step of the grid\\n     - value (number) value to adjust\\n     - tolerance (number) #optional tolerance for snapping. Default is `10`.\\n     = (number) adjusted value.\\n     \\\\*/\\n    R.snapTo = function (values, value, tolerance) {\\n        tolerance = R.is(tolerance, \\\"finite\\\") ? tolerance : 10;\\n        if (R.is(values, array)) {\\n            var i = values.length;\\n            while (i--) if (abs(values[i] - value) <= tolerance) {\\n                return values[i];\\n            }\\n        } else {\\n            values = +values;\\n            var rem = value % values;\\n            if (rem < tolerance) {\\n                return value - rem;\\n            }\\n            if (rem > values - tolerance) {\\n                return value - rem + values;\\n            }\\n        }\\n        return value;\\n    };\\n\\n    /*\\\\\\n     * Raphael.createUUID\\n     [ method ]\\n     **\\n     * Returns RFC4122, version 4 ID\\n     \\\\*/\\n    var createUUID = R.createUUID = (function (uuidRegEx, uuidReplacer) {\\n        return function () {\\n            return \\\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\\\".replace(uuidRegEx, uuidReplacer).toUpperCase();\\n        };\\n    })(/[xy]/g, function (c) {\\n        var r = math.random() * 16 | 0,\\n            v = c == \\\"x\\\" ? r : (r & 3 | 8);\\n        return v.toString(16);\\n    });\\n\\n    /*\\\\\\n     * Raphael.setWindow\\n     [ method ]\\n     **\\n     * Used when you need to draw in `&lt;iframe>`. Switched window to the iframe one.\\n     > Parameters\\n     - newwin (window) new window object\\n     \\\\*/\\n    R.setWindow = function (newwin) {\\n        eve(\\\"raphael.setWindow\\\", R, g.win, newwin);\\n        g.win = newwin;\\n        g.doc = g.win.document;\\n        if (R._engine.initWin) {\\n            R._engine.initWin(g.win);\\n        }\\n    };\\n    var toHex = function (color) {\\n            if (R.vml) {\\n                // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/\\n                var trim = /^\\\\s+|\\\\s+$/g;\\n                var bod;\\n                try {\\n                    var docum = new ActiveXObject(\\\"htmlfile\\\");\\n                    docum.write(\\\"<body>\\\");\\n                    docum.close();\\n                    bod = docum.body;\\n                } catch(e) {\\n                    bod = createPopup().document.body;\\n                }\\n                var range = bod.createTextRange();\\n                toHex = cacher(function (color) {\\n                    try {\\n                        bod.style.color = Str(color).replace(trim, E);\\n                        var value = range.queryCommandValue(\\\"ForeColor\\\");\\n                        value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);\\n                        return \\\"#\\\" + (\\\"000000\\\" + value.toString(16)).slice(-6);\\n                    } catch(e) {\\n                        return \\\"none\\\";\\n                    }\\n                });\\n            } else {\\n                var i = g.doc.createElement(\\\"i\\\");\\n                i.title = \\\"Rapha\\\\xebl Colour Picker\\\";\\n                i.style.display = \\\"none\\\";\\n                g.doc.body.appendChild(i);\\n                toHex = cacher(function (color) {\\n                    i.style.color = color;\\n                    return g.doc.defaultView.getComputedStyle(i, E).getPropertyValue(\\\"color\\\");\\n                });\\n            }\\n            return toHex(color);\\n        },\\n        hsbtoString = function () {\\n            return \\\"hsb(\\\" + [this.h, this.s, this.b] + \\\")\\\";\\n        },\\n        hsltoString = function () {\\n            return \\\"hsl(\\\" + [this.h, this.s, this.l] + \\\")\\\";\\n        },\\n        rgbtoString = function () {\\n            return this.hex;\\n        },\\n        prepareRGB = function (r, g, b) {\\n            if (g == null && R.is(r, \\\"object\\\") && \\\"r\\\" in r && \\\"g\\\" in r && \\\"b\\\" in r) {\\n                b = r.b;\\n                g = r.g;\\n                r = r.r;\\n            }\\n            if (g == null && R.is(r, string)) {\\n                var clr = R.getRGB(r);\\n                r = clr.r;\\n                g = clr.g;\\n                b = clr.b;\\n            }\\n            if (r > 1 || g > 1 || b > 1) {\\n                r /= 255;\\n                g /= 255;\\n                b /= 255;\\n            }\\n\\n            return [r, g, b];\\n        },\\n        packageRGB = function (r, g, b, o) {\\n            r *= 255;\\n            g *= 255;\\n            b *= 255;\\n            var rgb = {\\n                r: r,\\n                g: g,\\n                b: b,\\n                hex: R.rgb(r, g, b),\\n                toString: rgbtoString\\n            };\\n            R.is(o, \\\"finite\\\") && (rgb.opacity = o);\\n            return rgb;\\n        };\\n\\n    /*\\\\\\n     * Raphael.color\\n     [ method ]\\n     **\\n     * Parses the color string and returns object with all values for the given color.\\n     > Parameters\\n     - clr (string) color string in one of the supported formats (see @Raphael.getRGB)\\n     = (object) Combined RGB & HSB object in format:\\n     o {\\n     o     r (number) red,\\n     o     g (number) green,\\n     o     b (number) blue,\\n     o     hex (string) color in HTML/CSS format: #••••••,\\n     o     error (boolean) `true` if string can’t be parsed,\\n     o     h (number) hue,\\n     o     s (number) saturation,\\n     o     v (number) value (brightness),\\n     o     l (number) lightness\\n     o }\\n     \\\\*/\\n    R.color = function (clr) {\\n        var rgb;\\n        if (R.is(clr, \\\"object\\\") && \\\"h\\\" in clr && \\\"s\\\" in clr && \\\"b\\\" in clr) {\\n            rgb = R.hsb2rgb(clr);\\n            clr.r = rgb.r;\\n            clr.g = rgb.g;\\n            clr.b = rgb.b;\\n            clr.hex = rgb.hex;\\n        } else if (R.is(clr, \\\"object\\\") && \\\"h\\\" in clr && \\\"s\\\" in clr && \\\"l\\\" in clr) {\\n            rgb = R.hsl2rgb(clr);\\n            clr.r = rgb.r;\\n            clr.g = rgb.g;\\n            clr.b = rgb.b;\\n            clr.hex = rgb.hex;\\n        } else {\\n            if (R.is(clr, \\\"string\\\")) {\\n                clr = R.getRGB(clr);\\n            }\\n            if (R.is(clr, \\\"object\\\") && \\\"r\\\" in clr && \\\"g\\\" in clr && \\\"b\\\" in clr) {\\n                rgb = R.rgb2hsl(clr);\\n                clr.h = rgb.h;\\n                clr.s = rgb.s;\\n                clr.l = rgb.l;\\n                rgb = R.rgb2hsb(clr);\\n                clr.v = rgb.b;\\n            } else {\\n                clr = {hex: \\\"none\\\"};\\n                clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;\\n            }\\n        }\\n        clr.toString = rgbtoString;\\n        return clr;\\n    };\\n    /*\\\\\\n     * Raphael.hsb2rgb\\n     [ method ]\\n     **\\n     * Converts HSB values to RGB object.\\n     > Parameters\\n     - h (number) hue\\n     - s (number) saturation\\n     - v (number) value or brightness\\n     = (object) RGB object in format:\\n     o {\\n     o     r (number) red,\\n     o     g (number) green,\\n     o     b (number) blue,\\n     o     hex (string) color in HTML/CSS format: #••••••\\n     o }\\n     \\\\*/\\n    R.hsb2rgb = function (h, s, v, o) {\\n        if (this.is(h, \\\"object\\\") && \\\"h\\\" in h && \\\"s\\\" in h && \\\"b\\\" in h) {\\n            v = h.b;\\n            s = h.s;\\n            o = h.o;\\n            h = h.h;\\n        }\\n        h *= 360;\\n        var R, G, B, X, C;\\n        h = (h % 360) / 60;\\n        C = v * s;\\n        X = C * (1 - abs(h % 2 - 1));\\n        R = G = B = v - C;\\n\\n        h = ~~h;\\n        R += [C, X, 0, 0, X, C][h];\\n        G += [X, C, C, X, 0, 0][h];\\n        B += [0, 0, X, C, C, X][h];\\n        return packageRGB(R, G, B, o);\\n    };\\n    /*\\\\\\n     * Raphael.hsl2rgb\\n     [ method ]\\n     **\\n     * Converts HSL values to RGB object.\\n     > Parameters\\n     - h (number) hue\\n     - s (number) saturation\\n     - l (number) luminosity\\n     = (object) RGB object in format:\\n     o {\\n     o     r (number) red,\\n     o     g (number) green,\\n     o     b (number) blue,\\n     o     hex (string) color in HTML/CSS format: #••••••\\n     o }\\n     \\\\*/\\n    R.hsl2rgb = function (h, s, l, o) {\\n        if (this.is(h, \\\"object\\\") && \\\"h\\\" in h && \\\"s\\\" in h && \\\"l\\\" in h) {\\n            l = h.l;\\n            s = h.s;\\n            h = h.h;\\n        }\\n        if (h > 1 || s > 1 || l > 1) {\\n            h /= 360;\\n            s /= 100;\\n            l /= 100;\\n        }\\n        h *= 360;\\n        var R, G, B, X, C;\\n        h = (h % 360) / 60;\\n        C = 2 * s * (l < .5 ? l : 1 - l);\\n        X = C * (1 - abs(h % 2 - 1));\\n        R = G = B = l - C / 2;\\n\\n        h = ~~h;\\n        R += [C, X, 0, 0, X, C][h];\\n        G += [X, C, C, X, 0, 0][h];\\n        B += [0, 0, X, C, C, X][h];\\n        return packageRGB(R, G, B, o);\\n    };\\n    /*\\\\\\n     * Raphael.rgb2hsb\\n     [ method ]\\n     **\\n     * Converts RGB values to HSB object.\\n     > Parameters\\n     - r (number) red\\n     - g (number) green\\n     - b (number) blue\\n     = (object) HSB object in format:\\n     o {\\n     o     h (number) hue\\n     o     s (number) saturation\\n     o     b (number) brightness\\n     o }\\n     \\\\*/\\n    R.rgb2hsb = function (r, g, b) {\\n        b = prepareRGB(r, g, b);\\n        r = b[0];\\n        g = b[1];\\n        b = b[2];\\n\\n        var H, S, V, C;\\n        V = mmax(r, g, b);\\n        C = V - mmin(r, g, b);\\n        H = (C == 0 ? null :\\n                V == r ? (g - b) / C :\\n                    V == g ? (b - r) / C + 2 :\\n                    (r - g) / C + 4\\n        );\\n        H = ((H + 360) % 6) * 60 / 360;\\n        S = C == 0 ? 0 : C / V;\\n        return {h: H, s: S, b: V, toString: hsbtoString};\\n    };\\n    /*\\\\\\n     * Raphael.rgb2hsl\\n     [ method ]\\n     **\\n     * Converts RGB values to HSL object.\\n     > Parameters\\n     - r (number) red\\n     - g (number) green\\n     - b (number) blue\\n     = (object) HSL object in format:\\n     o {\\n     o     h (number) hue\\n     o     s (number) saturation\\n     o     l (number) luminosity\\n     o }\\n     \\\\*/\\n    R.rgb2hsl = function (r, g, b) {\\n        b = prepareRGB(r, g, b);\\n        r = b[0];\\n        g = b[1];\\n        b = b[2];\\n\\n        var H, S, L, M, m, C;\\n        M = mmax(r, g, b);\\n        m = mmin(r, g, b);\\n        C = M - m;\\n        H = (C == 0 ? null :\\n            M == r ? (g - b) / C :\\n                M == g ? (b - r) / C + 2 :\\n                (r - g) / C + 4);\\n        H = ((H + 360) % 6) * 60 / 360;\\n        L = (M + m) / 2;\\n        S = (C == 0 ? 0 :\\n            L < .5 ? C / (2 * L) :\\n            C / (2 - 2 * L));\\n        return {h: H, s: S, l: L, toString: hsltoString};\\n    };\\n    R._path2string = function () {\\n        return this.join(\\\",\\\").replace(p2s, \\\"$1\\\");\\n    };\\n    function repush(array, item) {\\n        for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {\\n            return array.push(array.splice(i, 1)[0]);\\n        }\\n    }\\n    function cacher(f, scope, postprocessor) {\\n        function newf() {\\n            var arg = Array.prototype.slice.call(arguments, 0),\\n                args = arg.join(\\\"\\\\u2400\\\"),\\n                cache = newf.cache = newf.cache || {},\\n                count = newf.count = newf.count || [];\\n            if (cache[has](args)) {\\n                repush(count, args);\\n                return postprocessor ? postprocessor(cache[args]) : cache[args];\\n            }\\n            count.length >= 1e3 && delete cache[count.shift()];\\n            count.push(args);\\n            cache[args] = f[apply](scope, arg);\\n            return postprocessor ? postprocessor(cache[args]) : cache[args];\\n        }\\n        return newf;\\n    }\\n\\n    var preload = R._preload = function (src, f) {\\n        var img = g.doc.createElement(\\\"img\\\");\\n        img.style.cssText = \\\"position:absolute;left:-9999em;top:-9999em\\\";\\n        img.onload = function () {\\n            f.call(this);\\n            this.onload = null;\\n            g.doc.body.removeChild(this);\\n        };\\n        img.onerror = function () {\\n            g.doc.body.removeChild(this);\\n        };\\n        g.doc.body.appendChild(img);\\n        img.src = src;\\n    };\\n\\n    function clrToString() {\\n        return this.hex;\\n    }\\n\\n    /*\\\\\\n     * Raphael.getRGB\\n     [ method ]\\n     **\\n     * Parses colour string as RGB object\\n     > Parameters\\n     - colour (string) colour string in one of formats:\\n     # <ul>\\n     #     <li>Colour name (“<code>red</code>”, “<code>green</code>”, “<code>cornflowerblue</code>”, etc)</li>\\n     #     <li>#••• — shortened HTML colour: (“<code>#000</code>”, “<code>#fc0</code>”, etc)</li>\\n     #     <li>#•••••• — full length HTML colour: (“<code>#000000</code>”, “<code>#bd2300</code>”)</li>\\n     #     <li>rgb(•••, •••, •••) — red, green and blue channels’ values: (“<code>rgb(200,&nbsp;100,&nbsp;0)</code>”)</li>\\n     #     <li>rgb(•••%, •••%, •••%) — same as above, but in %: (“<code>rgb(100%,&nbsp;175%,&nbsp;0%)</code>”)</li>\\n     #     <li>hsb(•••, •••, •••) — hue, saturation and brightness values: (“<code>hsb(0.5,&nbsp;0.25,&nbsp;1)</code>”)</li>\\n     #     <li>hsb(•••%, •••%, •••%) — same as above, but in %</li>\\n     #     <li>hsl(•••, •••, •••) — same as hsb</li>\\n     #     <li>hsl(•••%, •••%, •••%) — same as hsb</li>\\n     # </ul>\\n     = (object) RGB object in format:\\n     o {\\n     o     r (number) red,\\n     o     g (number) green,\\n     o     b (number) blue\\n     o     hex (string) color in HTML/CSS format: #••••••,\\n     o     error (boolean) true if string can’t be parsed\\n     o }\\n     \\\\*/\\n    R.getRGB = cacher(function (colour) {\\n        if (!colour || !!((colour = Str(colour)).indexOf(\\\"-\\\") + 1)) {\\n            return {r: -1, g: -1, b: -1, hex: \\\"none\\\", error: 1, toString: clrToString};\\n        }\\n        if (colour == \\\"none\\\") {\\n            return {r: -1, g: -1, b: -1, hex: \\\"none\\\", toString: clrToString};\\n        }\\n        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == \\\"#\\\") && (colour = toHex(colour));\\n        var res,\\n            red,\\n            green,\\n            blue,\\n            opacity,\\n            t,\\n            values,\\n            rgb = colour.match(colourRegExp);\\n        if (rgb) {\\n            if (rgb[2]) {\\n                blue = toInt(rgb[2].substring(5), 16);\\n                green = toInt(rgb[2].substring(3, 5), 16);\\n                red = toInt(rgb[2].substring(1, 3), 16);\\n            }\\n            if (rgb[3]) {\\n                blue = toInt((t = rgb[3].charAt(3)) + t, 16);\\n                green = toInt((t = rgb[3].charAt(2)) + t, 16);\\n                red = toInt((t = rgb[3].charAt(1)) + t, 16);\\n            }\\n            if (rgb[4]) {\\n                values = rgb[4][split](commaSpaces);\\n                red = toFloat(values[0]);\\n                values[0].slice(-1) == \\\"%\\\" && (red *= 2.55);\\n                green = toFloat(values[1]);\\n                values[1].slice(-1) == \\\"%\\\" && (green *= 2.55);\\n                blue = toFloat(values[2]);\\n                values[2].slice(-1) == \\\"%\\\" && (blue *= 2.55);\\n                rgb[1].toLowerCase().slice(0, 4) == \\\"rgba\\\" && (opacity = toFloat(values[3]));\\n                values[3] && values[3].slice(-1) == \\\"%\\\" && (opacity /= 100);\\n            }\\n            if (rgb[5]) {\\n                values = rgb[5][split](commaSpaces);\\n                red = toFloat(values[0]);\\n                values[0].slice(-1) == \\\"%\\\" && (red *= 2.55);\\n                green = toFloat(values[1]);\\n                values[1].slice(-1) == \\\"%\\\" && (green *= 2.55);\\n                blue = toFloat(values[2]);\\n                values[2].slice(-1) == \\\"%\\\" && (blue *= 2.55);\\n                (values[0].slice(-3) == \\\"deg\\\" || values[0].slice(-1) == \\\"\\\\xb0\\\") && (red /= 360);\\n                rgb[1].toLowerCase().slice(0, 4) == \\\"hsba\\\" && (opacity = toFloat(values[3]));\\n                values[3] && values[3].slice(-1) == \\\"%\\\" && (opacity /= 100);\\n                return R.hsb2rgb(red, green, blue, opacity);\\n            }\\n            if (rgb[6]) {\\n                values = rgb[6][split](commaSpaces);\\n                red = toFloat(values[0]);\\n                values[0].slice(-1) == \\\"%\\\" && (red *= 2.55);\\n                green = toFloat(values[1]);\\n                values[1].slice(-1) == \\\"%\\\" && (green *= 2.55);\\n                blue = toFloat(values[2]);\\n                values[2].slice(-1) == \\\"%\\\" && (blue *= 2.55);\\n                (values[0].slice(-3) == \\\"deg\\\" || values[0].slice(-1) == \\\"\\\\xb0\\\") && (red /= 360);\\n                rgb[1].toLowerCase().slice(0, 4) == \\\"hsla\\\" && (opacity = toFloat(values[3]));\\n                values[3] && values[3].slice(-1) == \\\"%\\\" && (opacity /= 100);\\n                return R.hsl2rgb(red, green, blue, opacity);\\n            }\\n            rgb = {r: red, g: green, b: blue, toString: clrToString};\\n            rgb.hex = \\\"#\\\" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);\\n            R.is(opacity, \\\"finite\\\") && (rgb.opacity = opacity);\\n            return rgb;\\n        }\\n        return {r: -1, g: -1, b: -1, hex: \\\"none\\\", error: 1, toString: clrToString};\\n    }, R);\\n    /*\\\\\\n     * Raphael.hsb\\n     [ method ]\\n     **\\n     * Converts HSB values to hex representation of the colour.\\n     > Parameters\\n     - h (number) hue\\n     - s (number) saturation\\n     - b (number) value or brightness\\n     = (string) hex representation of the colour.\\n     \\\\*/\\n    R.hsb = cacher(function (h, s, b) {\\n        return R.hsb2rgb(h, s, b).hex;\\n    });\\n    /*\\\\\\n     * Raphael.hsl\\n     [ method ]\\n     **\\n     * Converts HSL values to hex representation of the colour.\\n     > Parameters\\n     - h (number) hue\\n     - s (number) saturation\\n     - l (number) luminosity\\n     = (string) hex representation of the colour.\\n     \\\\*/\\n    R.hsl = cacher(function (h, s, l) {\\n        return R.hsl2rgb(h, s, l).hex;\\n    });\\n    /*\\\\\\n     * Raphael.rgb\\n     [ method ]\\n     **\\n     * Converts RGB values to hex representation of the colour.\\n     > Parameters\\n     - r (number) red\\n     - g (number) green\\n     - b (number) blue\\n     = (string) hex representation of the colour.\\n     \\\\*/\\n    R.rgb = cacher(function (r, g, b) {\\n        function round(x) { return (x + 0.5) | 0; }\\n        return \\\"#\\\" + (16777216 | round(b) | (round(g) << 8) | (round(r) << 16)).toString(16).slice(1);\\n    });\\n    /*\\\\\\n     * Raphael.getColor\\n     [ method ]\\n     **\\n     * On each call returns next colour in the spectrum. To reset it back to red call @Raphael.getColor.reset\\n     > Parameters\\n     - value (number) #optional brightness, default is `0.75`\\n     = (string) hex representation of the colour.\\n     \\\\*/\\n    R.getColor = function (value) {\\n        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},\\n            rgb = this.hsb2rgb(start.h, start.s, start.b);\\n        start.h += .075;\\n        if (start.h > 1) {\\n            start.h = 0;\\n            start.s -= .2;\\n            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});\\n        }\\n        return rgb.hex;\\n    };\\n    /*\\\\\\n     * Raphael.getColor.reset\\n     [ method ]\\n     **\\n     * Resets spectrum position for @Raphael.getColor back to red.\\n     \\\\*/\\n    R.getColor.reset = function () {\\n        delete this.start;\\n    };\\n\\n    // http://schepers.cc/getting-to-the-point\\n    function catmullRom2bezier(crp, z) {\\n        var d = [];\\n        for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\\n            var p = [\\n                {x: +crp[i - 2], y: +crp[i - 1]},\\n                {x: +crp[i],     y: +crp[i + 1]},\\n                {x: +crp[i + 2], y: +crp[i + 3]},\\n                {x: +crp[i + 4], y: +crp[i + 5]}\\n            ];\\n            if (z) {\\n                if (!i) {\\n                    p[0] = {x: +crp[iLen - 2], y: +crp[iLen - 1]};\\n                } else if (iLen - 4 == i) {\\n                    p[3] = {x: +crp[0], y: +crp[1]};\\n                } else if (iLen - 2 == i) {\\n                    p[2] = {x: +crp[0], y: +crp[1]};\\n                    p[3] = {x: +crp[2], y: +crp[3]};\\n                }\\n            } else {\\n                if (iLen - 4 == i) {\\n                    p[3] = p[2];\\n                } else if (!i) {\\n                    p[0] = {x: +crp[i], y: +crp[i + 1]};\\n                }\\n            }\\n            d.push([\\\"C\\\",\\n                (-p[0].x + 6 * p[1].x + p[2].x) / 6,\\n                (-p[0].y + 6 * p[1].y + p[2].y) / 6,\\n                (p[1].x + 6 * p[2].x - p[3].x) / 6,\\n                (p[1].y + 6*p[2].y - p[3].y) / 6,\\n                p[2].x,\\n                p[2].y\\n            ]);\\n        }\\n\\n        return d;\\n    }\\n    /*\\\\\\n     * Raphael.parsePathString\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Parses given path string into an array of arrays of path segments.\\n     > Parameters\\n     - pathString (string|array) path string or array of segments (in the last case it will be returned straight away)\\n     = (array) array of segments.\\n     \\\\*/\\n    R.parsePathString = function (pathString) {\\n        if (!pathString) {\\n            return null;\\n        }\\n        var pth = paths(pathString);\\n        if (pth.arr) {\\n            return pathClone(pth.arr);\\n        }\\n\\n        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0},\\n            data = [];\\n        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption\\n            data = pathClone(pathString);\\n        }\\n        if (!data.length) {\\n            Str(pathString).replace(pathCommand, function (a, b, c) {\\n                var params = [],\\n                    name = b.toLowerCase();\\n                c.replace(pathValues, function (a, b) {\\n                    b && params.push(+b);\\n                });\\n                if (name == \\\"m\\\" && params.length > 2) {\\n                    data.push([b][concat](params.splice(0, 2)));\\n                    name = \\\"l\\\";\\n                    b = b == \\\"m\\\" ? \\\"l\\\" : \\\"L\\\";\\n                }\\n                if (name == \\\"r\\\") {\\n                    data.push([b][concat](params));\\n                } else while (params.length >= paramCounts[name]) {\\n                    data.push([b][concat](params.splice(0, paramCounts[name])));\\n                    if (!paramCounts[name]) {\\n                        break;\\n                    }\\n                }\\n            });\\n        }\\n        data.toString = R._path2string;\\n        pth.arr = pathClone(data);\\n        return data;\\n    };\\n    /*\\\\\\n     * Raphael.parseTransformString\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Parses given path string into an array of transformations.\\n     > Parameters\\n     - TString (string|array) transform string or array of transformations (in the last case it will be returned straight away)\\n     = (array) array of transformations.\\n     \\\\*/\\n    R.parseTransformString = cacher(function (TString) {\\n        if (!TString) {\\n            return null;\\n        }\\n        var paramCounts = {r: 3, s: 4, t: 2, m: 6},\\n            data = [];\\n        if (R.is(TString, array) && R.is(TString[0], array)) { // rough assumption\\n            data = pathClone(TString);\\n        }\\n        if (!data.length) {\\n            Str(TString).replace(tCommand, function (a, b, c) {\\n                var params = [],\\n                    name = lowerCase.call(b);\\n                c.replace(pathValues, function (a, b) {\\n                    b && params.push(+b);\\n                });\\n                data.push([b][concat](params));\\n            });\\n        }\\n        data.toString = R._path2string;\\n        return data;\\n    });\\n    // PATHS\\n    var paths = function (ps) {\\n        var p = paths.ps = paths.ps || {};\\n        if (p[ps]) {\\n            p[ps].sleep = 100;\\n        } else {\\n            p[ps] = {\\n                sleep: 100\\n            };\\n        }\\n        setTimeout(function () {\\n            for (var key in p) if (p[has](key) && key != ps) {\\n                p[key].sleep--;\\n                !p[key].sleep && delete p[key];\\n            }\\n        });\\n        return p[ps];\\n    };\\n    /*\\\\\\n     * Raphael.findDotsAtSegment\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Find dot coordinates on the given cubic bezier curve at the given t.\\n     > Parameters\\n     - p1x (number) x of the first point of the curve\\n     - p1y (number) y of the first point of the curve\\n     - c1x (number) x of the first anchor of the curve\\n     - c1y (number) y of the first anchor of the curve\\n     - c2x (number) x of the second anchor of the curve\\n     - c2y (number) y of the second anchor of the curve\\n     - p2x (number) x of the second point of the curve\\n     - p2y (number) y of the second point of the curve\\n     - t (number) position on the curve (0..1)\\n     = (object) point information in format:\\n     o {\\n     o     x: (number) x coordinate of the point\\n     o     y: (number) y coordinate of the point\\n     o     m: {\\n     o         x: (number) x coordinate of the left anchor\\n     o         y: (number) y coordinate of the left anchor\\n     o     }\\n     o     n: {\\n     o         x: (number) x coordinate of the right anchor\\n     o         y: (number) y coordinate of the right anchor\\n     o     }\\n     o     start: {\\n     o         x: (number) x coordinate of the start of the curve\\n     o         y: (number) y coordinate of the start of the curve\\n     o     }\\n     o     end: {\\n     o         x: (number) x coordinate of the end of the curve\\n     o         y: (number) y coordinate of the end of the curve\\n     o     }\\n     o     alpha: (number) angle of the curve derivative at the point\\n     o }\\n     \\\\*/\\n    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\\n        var t1 = 1 - t,\\n            t13 = pow(t1, 3),\\n            t12 = pow(t1, 2),\\n            t2 = t * t,\\n            t3 = t2 * t,\\n            x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,\\n            y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y,\\n            mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x),\\n            my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y),\\n            nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x),\\n            ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y),\\n            ax = t1 * p1x + t * c1x,\\n            ay = t1 * p1y + t * c1y,\\n            cx = t1 * c2x + t * p2x,\\n            cy = t1 * c2y + t * p2y,\\n            alpha = (90 - math.atan2(mx - nx, my - ny) * 180 / PI);\\n        (mx > nx || my < ny) && (alpha += 180);\\n        return {\\n            x: x,\\n            y: y,\\n            m: {x: mx, y: my},\\n            n: {x: nx, y: ny},\\n            start: {x: ax, y: ay},\\n            end: {x: cx, y: cy},\\n            alpha: alpha\\n        };\\n    };\\n    /*\\\\\\n     * Raphael.bezierBBox\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Return bounding box of a given cubic bezier curve\\n     > Parameters\\n     - p1x (number) x of the first point of the curve\\n     - p1y (number) y of the first point of the curve\\n     - c1x (number) x of the first anchor of the curve\\n     - c1y (number) y of the first anchor of the curve\\n     - c2x (number) x of the second anchor of the curve\\n     - c2y (number) y of the second anchor of the curve\\n     - p2x (number) x of the second point of the curve\\n     - p2y (number) y of the second point of the curve\\n     * or\\n     - bez (array) array of six points for bezier curve\\n     = (object) point information in format:\\n     o {\\n     o     min: {\\n     o         x: (number) x coordinate of the left point\\n     o         y: (number) y coordinate of the top point\\n     o     }\\n     o     max: {\\n     o         x: (number) x coordinate of the right point\\n     o         y: (number) y coordinate of the bottom point\\n     o     }\\n     o }\\n     \\\\*/\\n    R.bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\\n        if (!R.is(p1x, \\\"array\\\")) {\\n            p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\\n        }\\n        var bbox = curveDim.apply(null, p1x);\\n        return {\\n            x: bbox.min.x,\\n            y: bbox.min.y,\\n            x2: bbox.max.x,\\n            y2: bbox.max.y,\\n            width: bbox.max.x - bbox.min.x,\\n            height: bbox.max.y - bbox.min.y\\n        };\\n    };\\n    /*\\\\\\n     * Raphael.isPointInsideBBox\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Returns `true` if given point is inside bounding boxes.\\n     > Parameters\\n     - bbox (string) bounding box\\n     - x (string) x coordinate of the point\\n     - y (string) y coordinate of the point\\n     = (boolean) `true` if point inside\\n     \\\\*/\\n    R.isPointInsideBBox = function (bbox, x, y) {\\n        return x >= bbox.x && x <= bbox.x2 && y >= bbox.y && y <= bbox.y2;\\n    };\\n    /*\\\\\\n     * Raphael.isBBoxIntersect\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Returns `true` if two bounding boxes intersect\\n     > Parameters\\n     - bbox1 (string) first bounding box\\n     - bbox2 (string) second bounding box\\n     = (boolean) `true` if they intersect\\n     \\\\*/\\n    R.isBBoxIntersect = function (bbox1, bbox2) {\\n        var i = R.isPointInsideBBox;\\n        return i(bbox2, bbox1.x, bbox1.y)\\n            || i(bbox2, bbox1.x2, bbox1.y)\\n            || i(bbox2, bbox1.x, bbox1.y2)\\n            || i(bbox2, bbox1.x2, bbox1.y2)\\n            || i(bbox1, bbox2.x, bbox2.y)\\n            || i(bbox1, bbox2.x2, bbox2.y)\\n            || i(bbox1, bbox2.x, bbox2.y2)\\n            || i(bbox1, bbox2.x2, bbox2.y2)\\n            || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)\\n            && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\\n    };\\n    function base3(t, p1, p2, p3, p4) {\\n        var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,\\n            t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\\n        return t * t2 - 3 * p1 + 3 * p2;\\n    }\\n    function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\\n        if (z == null) {\\n            z = 1;\\n        }\\n        z = z > 1 ? 1 : z < 0 ? 0 : z;\\n        var z2 = z / 2,\\n            n = 12,\\n            Tvalues = [-0.1252,0.1252,-0.3678,0.3678,-0.5873,0.5873,-0.7699,0.7699,-0.9041,0.9041,-0.9816,0.9816],\\n            Cvalues = [0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472],\\n            sum = 0;\\n        for (var i = 0; i < n; i++) {\\n            var ct = z2 * Tvalues[i] + z2,\\n                xbase = base3(ct, x1, x2, x3, x4),\\n                ybase = base3(ct, y1, y2, y3, y4),\\n                comb = xbase * xbase + ybase * ybase;\\n            sum += Cvalues[i] * math.sqrt(comb);\\n        }\\n        return z2 * sum;\\n    }\\n    function getTatLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) {\\n        if (ll < 0 || bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) {\\n            return;\\n        }\\n        var t = 1,\\n            step = t / 2,\\n            t2 = t - step,\\n            l,\\n            e = .01;\\n        l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\\n        while (abs(l - ll) > e) {\\n            step /= 2;\\n            t2 += (l < ll ? 1 : -1) * step;\\n            l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\\n        }\\n        return t2;\\n    }\\n    function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\\n        if (\\n            mmax(x1, x2) < mmin(x3, x4) ||\\n            mmin(x1, x2) > mmax(x3, x4) ||\\n            mmax(y1, y2) < mmin(y3, y4) ||\\n            mmin(y1, y2) > mmax(y3, y4)\\n        ) {\\n            return;\\n        }\\n        var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\\n            ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\\n            denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\\n\\n        if (!denominator) {\\n            return;\\n        }\\n        var px = nx / denominator,\\n            py = ny / denominator,\\n            px2 = +px.toFixed(2),\\n            py2 = +py.toFixed(2);\\n        if (\\n            px2 < +mmin(x1, x2).toFixed(2) ||\\n            px2 > +mmax(x1, x2).toFixed(2) ||\\n            px2 < +mmin(x3, x4).toFixed(2) ||\\n            px2 > +mmax(x3, x4).toFixed(2) ||\\n            py2 < +mmin(y1, y2).toFixed(2) ||\\n            py2 > +mmax(y1, y2).toFixed(2) ||\\n            py2 < +mmin(y3, y4).toFixed(2) ||\\n            py2 > +mmax(y3, y4).toFixed(2)\\n        ) {\\n            return;\\n        }\\n        return {x: px, y: py};\\n    }\\n    function inter(bez1, bez2) {\\n        return interHelper(bez1, bez2);\\n    }\\n    function interCount(bez1, bez2) {\\n        return interHelper(bez1, bez2, 1);\\n    }\\n    function interHelper(bez1, bez2, justCount) {\\n        var bbox1 = R.bezierBBox(bez1),\\n            bbox2 = R.bezierBBox(bez2);\\n        if (!R.isBBoxIntersect(bbox1, bbox2)) {\\n            return justCount ? 0 : [];\\n        }\\n        var l1 = bezlen.apply(0, bez1),\\n            l2 = bezlen.apply(0, bez2),\\n            n1 = mmax(~~(l1 / 5), 1),\\n            n2 = mmax(~~(l2 / 5), 1),\\n            dots1 = [],\\n            dots2 = [],\\n            xy = {},\\n            res = justCount ? 0 : [];\\n        for (var i = 0; i < n1 + 1; i++) {\\n            var p = R.findDotsAtSegment.apply(R, bez1.concat(i / n1));\\n            dots1.push({x: p.x, y: p.y, t: i / n1});\\n        }\\n        for (i = 0; i < n2 + 1; i++) {\\n            p = R.findDotsAtSegment.apply(R, bez2.concat(i / n2));\\n            dots2.push({x: p.x, y: p.y, t: i / n2});\\n        }\\n        for (i = 0; i < n1; i++) {\\n            for (var j = 0; j < n2; j++) {\\n                var di = dots1[i],\\n                    di1 = dots1[i + 1],\\n                    dj = dots2[j],\\n                    dj1 = dots2[j + 1],\\n                    ci = abs(di1.x - di.x) < .001 ? \\\"y\\\" : \\\"x\\\",\\n                    cj = abs(dj1.x - dj.x) < .001 ? \\\"y\\\" : \\\"x\\\",\\n                    is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\\n                if (is) {\\n                    if (xy[is.x.toFixed(4)] == is.y.toFixed(4)) {\\n                        continue;\\n                    }\\n                    xy[is.x.toFixed(4)] = is.y.toFixed(4);\\n                    var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t),\\n                        t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\\n                    if (t1 >= 0 && t1 <= 1.001 && t2 >= 0 && t2 <= 1.001) {\\n                        if (justCount) {\\n                            res++;\\n                        } else {\\n                            res.push({\\n                                x: is.x,\\n                                y: is.y,\\n                                t1: mmin(t1, 1),\\n                                t2: mmin(t2, 1)\\n                            });\\n                        }\\n                    }\\n                }\\n            }\\n        }\\n        return res;\\n    }\\n    /*\\\\\\n     * Raphael.pathIntersection\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Finds intersections of two paths\\n     > Parameters\\n     - path1 (string) path string\\n     - path2 (string) path string\\n     = (array) dots of intersection\\n     o [\\n     o     {\\n     o         x: (number) x coordinate of the point\\n     o         y: (number) y coordinate of the point\\n     o         t1: (number) t value for segment of path1\\n     o         t2: (number) t value for segment of path2\\n     o         segment1: (number) order number for segment of path1\\n     o         segment2: (number) order number for segment of path2\\n     o         bez1: (array) eight coordinates representing beziér curve for the segment of path1\\n     o         bez2: (array) eight coordinates representing beziér curve for the segment of path2\\n     o     }\\n     o ]\\n     \\\\*/\\n    R.pathIntersection = function (path1, path2) {\\n        return interPathHelper(path1, path2);\\n    };\\n    R.pathIntersectionNumber = function (path1, path2) {\\n        return interPathHelper(path1, path2, 1);\\n    };\\n    function interPathHelper(path1, path2, justCount) {\\n        path1 = R._path2curve(path1);\\n        path2 = R._path2curve(path2);\\n        var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,\\n            res = justCount ? 0 : [];\\n        for (var i = 0, ii = path1.length; i < ii; i++) {\\n            var pi = path1[i];\\n            if (pi[0] == \\\"M\\\") {\\n                x1 = x1m = pi[1];\\n                y1 = y1m = pi[2];\\n            } else {\\n                if (pi[0] == \\\"C\\\") {\\n                    bez1 = [x1, y1].concat(pi.slice(1));\\n                    x1 = bez1[6];\\n                    y1 = bez1[7];\\n                } else {\\n                    bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\\n                    x1 = x1m;\\n                    y1 = y1m;\\n                }\\n                for (var j = 0, jj = path2.length; j < jj; j++) {\\n                    var pj = path2[j];\\n                    if (pj[0] == \\\"M\\\") {\\n                        x2 = x2m = pj[1];\\n                        y2 = y2m = pj[2];\\n                    } else {\\n                        if (pj[0] == \\\"C\\\") {\\n                            bez2 = [x2, y2].concat(pj.slice(1));\\n                            x2 = bez2[6];\\n                            y2 = bez2[7];\\n                        } else {\\n                            bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\\n                            x2 = x2m;\\n                            y2 = y2m;\\n                        }\\n                        var intr = interHelper(bez1, bez2, justCount);\\n                        if (justCount) {\\n                            res += intr;\\n                        } else {\\n                            for (var k = 0, kk = intr.length; k < kk; k++) {\\n                                intr[k].segment1 = i;\\n                                intr[k].segment2 = j;\\n                                intr[k].bez1 = bez1;\\n                                intr[k].bez2 = bez2;\\n                            }\\n                            res = res.concat(intr);\\n                        }\\n                    }\\n                }\\n            }\\n        }\\n        return res;\\n    }\\n    /*\\\\\\n     * Raphael.isPointInsidePath\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Returns `true` if given point is inside a given closed path.\\n     > Parameters\\n     - path (string) path string\\n     - x (number) x of the point\\n     - y (number) y of the point\\n     = (boolean) true, if point is inside the path\\n     \\\\*/\\n    R.isPointInsidePath = function (path, x, y) {\\n        var bbox = R.pathBBox(path);\\n        return R.isPointInsideBBox(bbox, x, y) &&\\n            interPathHelper(path, [[\\\"M\\\", x, y], [\\\"H\\\", bbox.x2 + 10]], 1) % 2 == 1;\\n    };\\n    R._removedFactory = function (methodname) {\\n        return function () {\\n            eve(\\\"raphael.log\\\", null, \\\"Rapha\\\\xebl: you are calling to method \\\\u201c\\\" + methodname + \\\"\\\\u201d of removed object\\\", methodname);\\n        };\\n    };\\n    /*\\\\\\n     * Raphael.pathBBox\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Return bounding box of a given path\\n     > Parameters\\n     - path (string) path string\\n     = (object) bounding box\\n     o {\\n     o     x: (number) x coordinate of the left top point of the box\\n     o     y: (number) y coordinate of the left top point of the box\\n     o     x2: (number) x coordinate of the right bottom point of the box\\n     o     y2: (number) y coordinate of the right bottom point of the box\\n     o     width: (number) width of the box\\n     o     height: (number) height of the box\\n     o     cx: (number) x coordinate of the center of the box\\n     o     cy: (number) y coordinate of the center of the box\\n     o }\\n     \\\\*/\\n    var pathDimensions = R.pathBBox = function (path) {\\n            var pth = paths(path);\\n            if (pth.bbox) {\\n                var b= pth.bbox;\\n                return {x: b.x, y: b.y, width: b.width, height: b.height, x2: b.x2, y2: b.y2} ; // FREEGROUP FIX!!!!!!\\n                // raphael reuse the returned bbox. You must clone it here if the caller need the bbxo for\\n                //further calculation\\n            }\\n            if (!path) {\\n                return {x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0};\\n            }\\n            path = path2curve(path);\\n            var x = 0,\\n                y = 0,\\n                X = [],\\n                Y = [],\\n                p;\\n            for (var i = 0, ii = path.length; i < ii; i++) {\\n                p = path[i];\\n                if (p[0] == \\\"M\\\") {\\n                    x = p[1];\\n                    y = p[2];\\n                    X.push(x);\\n                    Y.push(y);\\n                } else {\\n                    var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\\n                    X = X[concat](dim.min.x, dim.max.x);\\n                    Y = Y[concat](dim.min.y, dim.max.y);\\n                    x = p[5];\\n                    y = p[6];\\n                }\\n            }\\n            var xmin = mmin[apply](0, X),\\n                ymin = mmin[apply](0, Y),\\n                xmax = mmax[apply](0, X),\\n                ymax = mmax[apply](0, Y),\\n                width = xmax - xmin,\\n                height = ymax - ymin,\\n                bb = {\\n                    x: xmin,\\n                    y: ymin,\\n                    x2: xmax,\\n                    y2: ymax,\\n                    width: width,\\n                    height: height,\\n                    cx: xmin + width / 2,\\n                    cy: ymin + height / 2\\n                };\\n            pth.bbox = clone(bb);\\n            return bb;\\n        },\\n        pathClone = function (pathArray) {\\n            var res = clone(pathArray);\\n            res.toString = R._path2string;\\n            return res;\\n        },\\n        pathToRelative = R._pathToRelative = function (pathArray) {\\n            var pth = paths(pathArray);\\n            if (pth.rel) {\\n                return pathClone(pth.rel);\\n            }\\n            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\\n                pathArray = R.parsePathString(pathArray);\\n            }\\n            var res = [],\\n                x = 0,\\n                y = 0,\\n                mx = 0,\\n                my = 0,\\n                start = 0;\\n            if (pathArray[0][0] == \\\"M\\\") {\\n                x = pathArray[0][1];\\n                y = pathArray[0][2];\\n                mx = x;\\n                my = y;\\n                start++;\\n                res.push([\\\"M\\\", x, y]);\\n            }\\n            for (var i = start, ii = pathArray.length; i < ii; i++) {\\n                var r = res[i] = [],\\n                    pa = pathArray[i];\\n                if (pa[0] != lowerCase.call(pa[0])) {\\n                    r[0] = lowerCase.call(pa[0]);\\n                    switch (r[0]) {\\n                        case \\\"a\\\":\\n                            r[1] = pa[1];\\n                            r[2] = pa[2];\\n                            r[3] = pa[3];\\n                            r[4] = pa[4];\\n                            r[5] = pa[5];\\n                            r[6] = +(pa[6] - x).toFixed(3);\\n                            r[7] = +(pa[7] - y).toFixed(3);\\n                            break;\\n                        case \\\"v\\\":\\n                            r[1] = +(pa[1] - y).toFixed(3);\\n                            break;\\n                        case \\\"m\\\":\\n                            mx = pa[1];\\n                            my = pa[2];\\n                        default:\\n                            for (var j = 1, jj = pa.length; j < jj; j++) {\\n                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);\\n                            }\\n                    }\\n                } else {\\n                    r = res[i] = [];\\n                    if (pa[0] == \\\"m\\\") {\\n                        mx = pa[1] + x;\\n                        my = pa[2] + y;\\n                    }\\n                    for (var k = 0, kk = pa.length; k < kk; k++) {\\n                        res[i][k] = pa[k];\\n                    }\\n                }\\n                var len = res[i].length;\\n                switch (res[i][0]) {\\n                    case \\\"z\\\":\\n                        x = mx;\\n                        y = my;\\n                        break;\\n                    case \\\"h\\\":\\n                        x += +res[i][len - 1];\\n                        break;\\n                    case \\\"v\\\":\\n                        y += +res[i][len - 1];\\n                        break;\\n                    default:\\n                        x += +res[i][len - 2];\\n                        y += +res[i][len - 1];\\n                }\\n            }\\n            res.toString = R._path2string;\\n            pth.rel = pathClone(res);\\n            return res;\\n        },\\n        pathToAbsolute = R._pathToAbsolute = function (pathArray) {\\n            var pth = paths(pathArray);\\n            if (pth.abs) {\\n                return pathClone(pth.abs);\\n            }\\n            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\\n                pathArray = R.parsePathString(pathArray);\\n            }\\n            if (!pathArray || !pathArray.length) {\\n                return [[\\\"M\\\", 0, 0]];\\n            }\\n            var res = [],\\n                x = 0,\\n                y = 0,\\n                mx = 0,\\n                my = 0,\\n                start = 0;\\n            if (pathArray[0][0] == \\\"M\\\") {\\n                x = +pathArray[0][1];\\n                y = +pathArray[0][2];\\n                mx = x;\\n                my = y;\\n                start++;\\n                res[0] = [\\\"M\\\", x, y];\\n            }\\n            var crz = pathArray.length == 3 && pathArray[0][0] == \\\"M\\\" && pathArray[1][0].toUpperCase() == \\\"R\\\" && pathArray[2][0].toUpperCase() == \\\"Z\\\";\\n            for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\\n                res.push(r = []);\\n                pa = pathArray[i];\\n                if (pa[0] != upperCase.call(pa[0])) {\\n                    r[0] = upperCase.call(pa[0]);\\n                    switch (r[0]) {\\n                        case \\\"A\\\":\\n                            r[1] = pa[1];\\n                            r[2] = pa[2];\\n                            r[3] = pa[3];\\n                            r[4] = pa[4];\\n                            r[5] = pa[5];\\n                            r[6] = +(pa[6] + x);\\n                            r[7] = +(pa[7] + y);\\n                            break;\\n                        case \\\"V\\\":\\n                            r[1] = +pa[1] + y;\\n                            break;\\n                        case \\\"H\\\":\\n                            r[1] = +pa[1] + x;\\n                            break;\\n                        case \\\"R\\\":\\n                            var dots = [x, y][concat](pa.slice(1));\\n                            for (var j = 2, jj = dots.length; j < jj; j++) {\\n                                dots[j] = +dots[j] + x;\\n                                dots[++j] = +dots[j] + y;\\n                            }\\n                            res.pop();\\n                            res = res[concat](catmullRom2bezier(dots, crz));\\n                            break;\\n                        case \\\"M\\\":\\n                            mx = +pa[1] + x;\\n                            my = +pa[2] + y;\\n                        default:\\n                            for (j = 1, jj = pa.length; j < jj; j++) {\\n                                r[j] = +pa[j] + ((j % 2) ? x : y);\\n                            }\\n                    }\\n                } else if (pa[0] == \\\"R\\\") {\\n                    dots = [x, y][concat](pa.slice(1));\\n                    res.pop();\\n                    res = res[concat](catmullRom2bezier(dots, crz));\\n                    r = [\\\"R\\\"][concat](pa.slice(-2));\\n                } else {\\n                    for (var k = 0, kk = pa.length; k < kk; k++) {\\n                        r[k] = pa[k];\\n                    }\\n                }\\n                switch (r[0]) {\\n                    case \\\"Z\\\":\\n                        x = mx;\\n                        y = my;\\n                        break;\\n                    case \\\"H\\\":\\n                        x = r[1];\\n                        break;\\n                    case \\\"V\\\":\\n                        y = r[1];\\n                        break;\\n                    case \\\"M\\\":\\n                        mx = r[r.length - 2];\\n                        my = r[r.length - 1];\\n                    default:\\n                        x = r[r.length - 2];\\n                        y = r[r.length - 1];\\n                }\\n            }\\n            res.toString = R._path2string;\\n            pth.abs = pathClone(res);\\n            return res;\\n        },\\n        l2c = function (x1, y1, x2, y2) {\\n            return [x1, y1, x2, y2, x2, y2];\\n        },\\n        q2c = function (x1, y1, ax, ay, x2, y2) {\\n            var _13 = 1 / 3,\\n                _23 = 2 / 3;\\n            return [\\n                _13 * x1 + _23 * ax,\\n                _13 * y1 + _23 * ay,\\n                _13 * x2 + _23 * ax,\\n                _13 * y2 + _23 * ay,\\n                x2,\\n                y2\\n            ];\\n        },\\n        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\\n            // for more information of where this math came from visit:\\n            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\\n            var _120 = PI * 120 / 180,\\n                rad = PI / 180 * (+angle || 0),\\n                res = [],\\n                xy,\\n                rotate = cacher(function (x, y, rad) {\\n                    var X = x * math.cos(rad) - y * math.sin(rad),\\n                        Y = x * math.sin(rad) + y * math.cos(rad);\\n                    return {x: X, y: Y};\\n                });\\n            if (!recursive) {\\n                xy = rotate(x1, y1, -rad);\\n                x1 = xy.x;\\n                y1 = xy.y;\\n                xy = rotate(x2, y2, -rad);\\n                x2 = xy.x;\\n                y2 = xy.y;\\n                var cos = math.cos(PI / 180 * angle),\\n                    sin = math.sin(PI / 180 * angle),\\n                    x = (x1 - x2) / 2,\\n                    y = (y1 - y2) / 2;\\n                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\\n                if (h > 1) {\\n                    h = math.sqrt(h);\\n                    rx = h * rx;\\n                    ry = h * ry;\\n                }\\n                var rx2 = rx * rx,\\n                    ry2 = ry * ry,\\n                    k = (large_arc_flag == sweep_flag ? -1 : 1) *\\n                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),\\n                    cx = k * rx * y / ry + (x1 + x2) / 2,\\n                    cy = k * -ry * x / rx + (y1 + y2) / 2,\\n                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),\\n                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));\\n\\n                f1 = x1 < cx ? PI - f1 : f1;\\n                f2 = x2 < cx ? PI - f2 : f2;\\n                f1 < 0 && (f1 = PI * 2 + f1);\\n                f2 < 0 && (f2 = PI * 2 + f2);\\n                if (sweep_flag && f1 > f2) {\\n                    f1 = f1 - PI * 2;\\n                }\\n                if (!sweep_flag && f2 > f1) {\\n                    f2 = f2 - PI * 2;\\n                }\\n            } else {\\n                f1 = recursive[0];\\n                f2 = recursive[1];\\n                cx = recursive[2];\\n                cy = recursive[3];\\n            }\\n            var df = f2 - f1;\\n            if (abs(df) > _120) {\\n                var f2old = f2,\\n                    x2old = x2,\\n                    y2old = y2;\\n                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\\n                x2 = cx + rx * math.cos(f2);\\n                y2 = cy + ry * math.sin(f2);\\n                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\\n            }\\n            df = f2 - f1;\\n            var c1 = math.cos(f1),\\n                s1 = math.sin(f1),\\n                c2 = math.cos(f2),\\n                s2 = math.sin(f2),\\n                t = math.tan(df / 4),\\n                hx = 4 / 3 * rx * t,\\n                hy = 4 / 3 * ry * t,\\n                m1 = [x1, y1],\\n                m2 = [x1 + hx * s1, y1 - hy * c1],\\n                m3 = [x2 + hx * s2, y2 - hy * c2],\\n                m4 = [x2, y2];\\n            m2[0] = 2 * m1[0] - m2[0];\\n            m2[1] = 2 * m1[1] - m2[1];\\n            if (recursive) {\\n                return [m2, m3, m4][concat](res);\\n            } else {\\n                res = [m2, m3, m4][concat](res).join()[split](\\\",\\\");\\n                var newres = [];\\n                for (var i = 0, ii = res.length; i < ii; i++) {\\n                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\\n                }\\n                return newres;\\n            }\\n        },\\n        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\\n            var t1 = 1 - t;\\n            return {\\n                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,\\n                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y\\n            };\\n        },\\n        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\\n            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),\\n                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),\\n                c = p1x - c1x,\\n                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,\\n                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,\\n                y = [p1y, p2y],\\n                x = [p1x, p2x],\\n                dot;\\n            abs(t1) > \\\"1e12\\\" && (t1 = .5);\\n            abs(t2) > \\\"1e12\\\" && (t2 = .5);\\n            if (t1 > 0 && t1 < 1) {\\n                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\\n                x.push(dot.x);\\n                y.push(dot.y);\\n            }\\n            if (t2 > 0 && t2 < 1) {\\n                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\\n                x.push(dot.x);\\n                y.push(dot.y);\\n            }\\n            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);\\n            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);\\n            c = p1y - c1y;\\n            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;\\n            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;\\n            abs(t1) > \\\"1e12\\\" && (t1 = .5);\\n            abs(t2) > \\\"1e12\\\" && (t2 = .5);\\n            if (t1 > 0 && t1 < 1) {\\n                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\\n                x.push(dot.x);\\n                y.push(dot.y);\\n            }\\n            if (t2 > 0 && t2 < 1) {\\n                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\\n                x.push(dot.x);\\n                y.push(dot.y);\\n            }\\n            return {\\n                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},\\n                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}\\n            };\\n        }),\\n        path2curve = R._path2curve = cacher(function (path, path2) {\\n            var pth = !path2 && paths(path);\\n            if (!path2 && pth.curve) {\\n                return pathClone(pth.curve);\\n            }\\n            var p = pathToAbsolute(path),\\n                p2 = path2 && pathToAbsolute(path2),\\n                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\\n                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\\n                processPath = function (path, d, pcom) {\\n                    var nx, ny, tq = {T:1, Q:1};\\n                    if (!path) {\\n                        return [\\\"C\\\", d.x, d.y, d.x, d.y, d.x, d.y];\\n                    }\\n                    !(path[0] in tq) && (d.qx = d.qy = null);\\n                    switch (path[0]) {\\n                        case \\\"M\\\":\\n                            d.X = path[1];\\n                            d.Y = path[2];\\n                            break;\\n                        case \\\"A\\\":\\n                            path = [\\\"C\\\"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));\\n                            break;\\n                        case \\\"S\\\":\\n                            if (pcom == \\\"C\\\" || pcom == \\\"S\\\") { // In \\\"S\\\" case we have to take into account, if the previous command is C/S.\\n                                nx = d.x * 2 - d.bx;          // And reflect the previous\\n                                ny = d.y * 2 - d.by;          // command's control point relative to the current point.\\n                            }\\n                            else {                            // or some else or nothing\\n                                nx = d.x;\\n                                ny = d.y;\\n                            }\\n                            path = [\\\"C\\\", nx, ny][concat](path.slice(1));\\n                            break;\\n                        case \\\"T\\\":\\n                            if (pcom == \\\"Q\\\" || pcom == \\\"T\\\") { // In \\\"T\\\" case we have to take into account, if the previous command is Q/T.\\n                                d.qx = d.x * 2 - d.qx;        // And make a reflection similar\\n                                d.qy = d.y * 2 - d.qy;        // to case \\\"S\\\".\\n                            }\\n                            else {                            // or something else or nothing\\n                                d.qx = d.x;\\n                                d.qy = d.y;\\n                            }\\n                            path = [\\\"C\\\"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\\n                            break;\\n                        case \\\"Q\\\":\\n                            d.qx = path[1];\\n                            d.qy = path[2];\\n                            path = [\\\"C\\\"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\\n                            break;\\n                        case \\\"L\\\":\\n                            path = [\\\"C\\\"][concat](l2c(d.x, d.y, path[1], path[2]));\\n                            break;\\n                        case \\\"H\\\":\\n                            path = [\\\"C\\\"][concat](l2c(d.x, d.y, path[1], d.y));\\n                            break;\\n                        case \\\"V\\\":\\n                            path = [\\\"C\\\"][concat](l2c(d.x, d.y, d.x, path[1]));\\n                            break;\\n                        case \\\"Z\\\":\\n                            path = [\\\"C\\\"][concat](l2c(d.x, d.y, d.X, d.Y));\\n                            break;\\n                    }\\n                    return path;\\n                },\\n                fixArc = function (pp, i) {\\n                    if (pp[i].length > 7) {\\n                        pp[i].shift();\\n                        var pi = pp[i];\\n                        while (pi.length) {\\n                            pcoms1[i]=\\\"A\\\"; // if created multiple C:s, their original seg is saved\\n                            p2 && (pcoms2[i]=\\\"A\\\"); // the same as above\\n                            pp.splice(i++, 0, [\\\"C\\\"][concat](pi.splice(0, 6)));\\n                        }\\n                        pp.splice(i, 1);\\n                        ii = mmax(p.length, p2 && p2.length || 0);\\n                    }\\n                },\\n                fixM = function (path1, path2, a1, a2, i) {\\n                    if (path1 && path2 && path1[i][0] == \\\"M\\\" && path2[i][0] != \\\"M\\\") {\\n                        path2.splice(i, 0, [\\\"M\\\", a2.x, a2.y]);\\n                        a1.bx = 0;\\n                        a1.by = 0;\\n                        a1.x = path1[i][1];\\n                        a1.y = path1[i][2];\\n                        ii = mmax(p.length, p2 && p2.length || 0);\\n                    }\\n                },\\n                pcoms1 = [], // path commands of original path p\\n                pcoms2 = [], // path commands of original path p2\\n                pfirst = \\\"\\\", // temporary holder for original path command\\n                pcom = \\\"\\\"; // holder for previous path command of original path\\n            for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) {\\n                p[i] && (pfirst = p[i][0]); // save current path command\\n\\n                if (pfirst != \\\"C\\\") // C is not saved yet, because it may be result of conversion\\n                {\\n                    pcoms1[i] = pfirst; // Save current path command\\n                    i && ( pcom = pcoms1[i-1]); // Get previous path command pcom\\n                }\\n                p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\\n\\n                if (pcoms1[i] != \\\"A\\\" && pfirst == \\\"C\\\") pcoms1[i] = \\\"C\\\"; // A is the only command\\n                // which may produce multiple C:s\\n                // so we have to make sure that C is also C in original path\\n\\n                fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\\n\\n                if (p2) { // the same procedures is done to p2\\n                    p2[i] && (pfirst = p2[i][0]);\\n                    if (pfirst != \\\"C\\\")\\n                    {\\n                        pcoms2[i] = pfirst;\\n                        i && (pcom = pcoms2[i-1]);\\n                    }\\n                    p2[i] = processPath(p2[i], attrs2, pcom);\\n\\n                    if (pcoms2[i]!=\\\"A\\\" && pfirst==\\\"C\\\") pcoms2[i]=\\\"C\\\";\\n\\n                    fixArc(p2, i);\\n                }\\n                fixM(p, p2, attrs, attrs2, i);\\n                fixM(p2, p, attrs2, attrs, i);\\n                var seg = p[i],\\n                    seg2 = p2 && p2[i],\\n                    seglen = seg.length,\\n                    seg2len = p2 && seg2.length;\\n                attrs.x = seg[seglen - 2];\\n                attrs.y = seg[seglen - 1];\\n                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;\\n                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;\\n                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);\\n                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);\\n                attrs2.x = p2 && seg2[seg2len - 2];\\n                attrs2.y = p2 && seg2[seg2len - 1];\\n            }\\n            if (!p2) {\\n                pth.curve = pathClone(p);\\n            }\\n            return p2 ? [p, p2] : p;\\n        }, null, pathClone),\\n        parseDots = R._parseDots = cacher(function (gradient) {\\n            var dots = [];\\n            for (var i = 0, ii = gradient.length; i < ii; i++) {\\n                var dot = {},\\n                    par = gradient[i].match(/^([^:]*):?([\\\\d\\\\.]*)/);\\n                dot.color = R.getRGB(par[1]);\\n                if (dot.color.error) {\\n                    return null;\\n                }\\n                dot.opacity = dot.color.opacity;\\n                dot.color = dot.color.hex;\\n                par[2] && (dot.offset = par[2] + \\\"%\\\");\\n                dots.push(dot);\\n            }\\n            for (i = 1, ii = dots.length - 1; i < ii; i++) {\\n                if (!dots[i].offset) {\\n                    var start = toFloat(dots[i - 1].offset || 0),\\n                        end = 0;\\n                    for (var j = i + 1; j < ii; j++) {\\n                        if (dots[j].offset) {\\n                            end = dots[j].offset;\\n                            break;\\n                        }\\n                    }\\n                    if (!end) {\\n                        end = 100;\\n                        j = ii;\\n                    }\\n                    end = toFloat(end);\\n                    var d = (end - start) / (j - i + 1);\\n                    for (; i < j; i++) {\\n                        start += d;\\n                        dots[i].offset = start + \\\"%\\\";\\n                    }\\n                }\\n            }\\n            return dots;\\n        }),\\n        tear = R._tear = function (el, paper) {\\n            el == paper.top && (paper.top = el.prev);\\n            el == paper.bottom && (paper.bottom = el.next);\\n            el.next && (el.next.prev = el.prev);\\n            el.prev && (el.prev.next = el.next);\\n        },\\n        tofront = R._tofront = function (el, paper) {\\n            if (paper.top === el) {\\n                return;\\n            }\\n            tear(el, paper);\\n            el.next = null;\\n            el.prev = paper.top;\\n            paper.top.next = el;\\n            paper.top = el;\\n        },\\n        toback = R._toback = function (el, paper) {\\n            if (paper.bottom === el) {\\n                return;\\n            }\\n            tear(el, paper);\\n            el.next = paper.bottom;\\n            el.prev = null;\\n            paper.bottom.prev = el;\\n            paper.bottom = el;\\n        },\\n        insertafter = R._insertafter = function (el, el2, paper) {\\n            tear(el, paper);\\n            el2 == paper.top && (paper.top = el);\\n            el2.next && (el2.next.prev = el);\\n            el.next = el2.next;\\n            el.prev = el2;\\n            el2.next = el;\\n        },\\n        insertbefore = R._insertbefore = function (el, el2, paper) {\\n            tear(el, paper);\\n            el2 == paper.bottom && (paper.bottom = el);\\n            el2.prev && (el2.prev.next = el);\\n            el.prev = el2.prev;\\n            el2.prev = el;\\n            el.next = el2;\\n        },\\n    /*\\\\\\n     * Raphael.toMatrix\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Returns matrix of transformations applied to a given path\\n     > Parameters\\n     - path (string) path string\\n     - transform (string|array) transformation string\\n     = (object) @Matrix\\n     \\\\*/\\n        toMatrix = R.toMatrix = function (path, transform) {\\n            var bb = pathDimensions(path),\\n                el = {\\n                    _: {\\n                        transform: E\\n                    },\\n                    getBBox: function () {\\n                        return bb;\\n                    }\\n                };\\n            extractTransform(el, transform);\\n            return el.matrix;\\n        },\\n    /*\\\\\\n     * Raphael.transformPath\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Returns path transformed by a given transformation\\n     > Parameters\\n     - path (string) path string\\n     - transform (string|array) transformation string\\n     = (string) path\\n     \\\\*/\\n        transformPath = R.transformPath = function (path, transform) {\\n            return mapPath(path, toMatrix(path, transform));\\n        },\\n        extractTransform = R._extractTransform = function (el, tstr) {\\n            if (tstr == null) {\\n                return el._.transform;\\n            }\\n            tstr = Str(tstr).replace(/\\\\.{3}|\\\\u2026/g, el._.transform || E);\\n            var tdata = R.parseTransformString(tstr),\\n                deg = 0,\\n                dx = 0,\\n                dy = 0,\\n                sx = 1,\\n                sy = 1,\\n                _ = el._,\\n                m = new Matrix;\\n            _.transform = tdata || [];\\n            if (tdata) {\\n                for (var i = 0, ii = tdata.length; i < ii; i++) {\\n                    var t = tdata[i],\\n                        tlen = t.length,\\n                        command = Str(t[0]).toLowerCase(),\\n                        absolute = t[0] != command,\\n                        inver = absolute ? m.invert() : 0,\\n                        x1,\\n                        y1,\\n                        x2,\\n                        y2,\\n                        bb;\\n                    if (command == \\\"t\\\" && tlen == 3) {\\n                        if (absolute) {\\n                            x1 = inver.x(0, 0);\\n                            y1 = inver.y(0, 0);\\n                            x2 = inver.x(t[1], t[2]);\\n                            y2 = inver.y(t[1], t[2]);\\n                            m.translate(x2 - x1, y2 - y1);\\n                        } else {\\n                            m.translate(t[1], t[2]);\\n                        }\\n                    } else if (command == \\\"r\\\") {\\n                        if (tlen == 2) {\\n                            bb = bb || el.getBBox(1);\\n                            m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2);\\n                            deg += t[1];\\n                        } else if (tlen == 4) {\\n                            if (absolute) {\\n                                x2 = inver.x(t[2], t[3]);\\n                                y2 = inver.y(t[2], t[3]);\\n                                m.rotate(t[1], x2, y2);\\n                            } else {\\n                                m.rotate(t[1], t[2], t[3]);\\n                            }\\n                            deg += t[1];\\n                        }\\n                    } else if (command == \\\"s\\\") {\\n                        if (tlen == 2 || tlen == 3) {\\n                            bb = bb || el.getBBox(1);\\n                            m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2);\\n                            sx *= t[1];\\n                            sy *= t[tlen - 1];\\n                        } else if (tlen == 5) {\\n                            if (absolute) {\\n                                x2 = inver.x(t[3], t[4]);\\n                                y2 = inver.y(t[3], t[4]);\\n                                m.scale(t[1], t[2], x2, y2);\\n                            } else {\\n                                m.scale(t[1], t[2], t[3], t[4]);\\n                            }\\n                            sx *= t[1];\\n                            sy *= t[2];\\n                        }\\n                    } else if (command == \\\"m\\\" && tlen == 7) {\\n                        m.add(t[1], t[2], t[3], t[4], t[5], t[6]);\\n                    }\\n                    _.dirtyT = 1;\\n                    el.matrix = m;\\n                }\\n            }\\n\\n            /*\\\\\\n             * Element.matrix\\n             [ property (object) ]\\n             **\\n             * Keeps @Matrix object, which represents element transformation\\n             \\\\*/\\n            el.matrix = m;\\n\\n            _.sx = sx;\\n            _.sy = sy;\\n            _.deg = deg;\\n            _.dx = dx = m.e;\\n            _.dy = dy = m.f;\\n\\n            if (sx == 1 && sy == 1 && !deg && _.bbox) {\\n                _.bbox.x += +dx;\\n                _.bbox.y += +dy;\\n            } else {\\n                _.dirtyT = 1;\\n            }\\n        },\\n        getEmpty = function (item) {\\n            var l = item[0];\\n            switch (l.toLowerCase()) {\\n                case \\\"t\\\": return [l, 0, 0];\\n                case \\\"m\\\": return [l, 1, 0, 0, 1, 0, 0];\\n                case \\\"r\\\": if (item.length == 4) {\\n                    return [l, 0, item[2], item[3]];\\n                } else {\\n                    return [l, 0];\\n                }\\n                case \\\"s\\\": if (item.length == 5) {\\n                    return [l, 1, 1, item[3], item[4]];\\n                } else if (item.length == 3) {\\n                    return [l, 1, 1];\\n                } else {\\n                    return [l, 1];\\n                }\\n            }\\n        },\\n        equaliseTransform = R._equaliseTransform = function (t1, t2) {\\n            t2 = Str(t2).replace(/\\\\.{3}|\\\\u2026/g, t1);\\n            t1 = R.parseTransformString(t1) || [];\\n            t2 = R.parseTransformString(t2) || [];\\n            var maxlength = mmax(t1.length, t2.length),\\n                from = [],\\n                to = [],\\n                i = 0, j, jj,\\n                tt1, tt2;\\n            for (; i < maxlength; i++) {\\n                tt1 = t1[i] || getEmpty(t2[i]);\\n                tt2 = t2[i] || getEmpty(tt1);\\n                if ((tt1[0] != tt2[0]) ||\\n                    (tt1[0].toLowerCase() == \\\"r\\\" && (tt1[2] != tt2[2] || tt1[3] != tt2[3])) ||\\n                    (tt1[0].toLowerCase() == \\\"s\\\" && (tt1[3] != tt2[3] || tt1[4] != tt2[4]))\\n                ) {\\n                    return;\\n                }\\n                from[i] = [];\\n                to[i] = [];\\n                for (j = 0, jj = mmax(tt1.length, tt2.length); j < jj; j++) {\\n                    j in tt1 && (from[i][j] = tt1[j]);\\n                    j in tt2 && (to[i][j] = tt2[j]);\\n                }\\n            }\\n            return {\\n                from: from,\\n                to: to\\n            };\\n        };\\n    R._getContainer = function (x, y, w, h) {\\n        var container;\\n        container = h == null && !R.is(x, \\\"object\\\") ? g.doc.getElementById(x) : x;\\n        if (container == null) {\\n            return;\\n        }\\n        if (container.tagName) {\\n            if (y == null) {\\n                return {\\n                    container: container,\\n                    width: container.style.pixelWidth || container.offsetWidth,\\n                    height: container.style.pixelHeight || container.offsetHeight\\n                };\\n            } else {\\n                return {\\n                    container: container,\\n                    width: y,\\n                    height: w\\n                };\\n            }\\n        }\\n        return {\\n            container: 1,\\n            x: x,\\n            y: y,\\n            width: w,\\n            height: h\\n        };\\n    };\\n    /*\\\\\\n     * Raphael.pathToRelative\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Converts path to relative form\\n     > Parameters\\n     - pathString (string|array) path string or array of segments\\n     = (array) array of segments.\\n     \\\\*/\\n    R.pathToRelative = pathToRelative;\\n    R._engine = {};\\n    /*\\\\\\n     * Raphael.path2curve\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Converts path to a new path where all segments are cubic bezier curves.\\n     > Parameters\\n     - pathString (string|array) path string or array of segments\\n     = (array) array of segments.\\n     \\\\*/\\n    R.path2curve = path2curve;\\n    /*\\\\\\n     * Raphael.matrix\\n     [ method ]\\n     **\\n     * Utility method\\n     **\\n     * Returns matrix based on given parameters.\\n     > Parameters\\n     - a (number)\\n     - b (number)\\n     - c (number)\\n     - d (number)\\n     - e (number)\\n     - f (number)\\n     = (object) @Matrix\\n     \\\\*/\\n    R.matrix = function (a, b, c, d, e, f) {\\n        return new Matrix(a, b, c, d, e, f);\\n    };\\n    function Matrix(a, b, c, d, e, f) {\\n        if (a != null) {\\n            this.a = +a;\\n            this.b = +b;\\n            this.c = +c;\\n            this.d = +d;\\n            this.e = +e;\\n            this.f = +f;\\n        } else {\\n            this.a = 1;\\n            this.b = 0;\\n            this.c = 0;\\n            this.d = 1;\\n            this.e = 0;\\n            this.f = 0;\\n        }\\n    }\\n    (function (matrixproto) {\\n        /*\\\\\\n         * Matrix.add\\n         [ method ]\\n         **\\n         * Adds given matrix to existing one.\\n         > Parameters\\n         - a (number)\\n         - b (number)\\n         - c (number)\\n         - d (number)\\n         - e (number)\\n         - f (number)\\n         or\\n         - matrix (object) @Matrix\\n         \\\\*/\\n        matrixproto.add = function (a, b, c, d, e, f) {\\n            var out = [[], [], []],\\n                m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],\\n                matrix = [[a, c, e], [b, d, f], [0, 0, 1]],\\n                x, y, z, res;\\n\\n            if (a && a instanceof Matrix) {\\n                matrix = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]];\\n            }\\n\\n            for (x = 0; x < 3; x++) {\\n                for (y = 0; y < 3; y++) {\\n                    res = 0;\\n                    for (z = 0; z < 3; z++) {\\n                        res += m[x][z] * matrix[z][y];\\n                    }\\n                    out[x][y] = res;\\n                }\\n            }\\n            this.a = out[0][0];\\n            this.b = out[1][0];\\n            this.c = out[0][1];\\n            this.d = out[1][1];\\n            this.e = out[0][2];\\n            this.f = out[1][2];\\n        };\\n        /*\\\\\\n         * Matrix.invert\\n         [ method ]\\n         **\\n         * Returns inverted version of the matrix\\n         = (object) @Matrix\\n         \\\\*/\\n        matrixproto.invert = function () {\\n            var me = this,\\n                x = me.a * me.d - me.b * me.c;\\n            return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);\\n        };\\n        /*\\\\\\n         * Matrix.clone\\n         [ method ]\\n         **\\n         * Returns copy of the matrix\\n         = (object) @Matrix\\n         \\\\*/\\n        matrixproto.clone = function () {\\n            return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\\n        };\\n        /*\\\\\\n         * Matrix.translate\\n         [ method ]\\n         **\\n         * Translate the matrix\\n         > Parameters\\n         - x (number)\\n         - y (number)\\n         \\\\*/\\n        matrixproto.translate = function (x, y) {\\n            this.add(1, 0, 0, 1, x, y);\\n        };\\n        /*\\\\\\n         * Matrix.scale\\n         [ method ]\\n         **\\n         * Scales the matrix\\n         > Parameters\\n         - x (number)\\n         - y (number) #optional\\n         - cx (number) #optional\\n         - cy (number) #optional\\n         \\\\*/\\n        matrixproto.scale = function (x, y, cx, cy) {\\n            y == null && (y = x);\\n            (cx || cy) && this.add(1, 0, 0, 1, cx, cy);\\n            this.add(x, 0, 0, y, 0, 0);\\n            (cx || cy) && this.add(1, 0, 0, 1, -cx, -cy);\\n        };\\n        /*\\\\\\n         * Matrix.rotate\\n         [ method ]\\n         **\\n         * Rotates the matrix\\n         > Parameters\\n         - a (number)\\n         - x (number)\\n         - y (number)\\n         \\\\*/\\n        matrixproto.rotate = function (a, x, y) {\\n            a = R.rad(a);\\n            x = x || 0;\\n            y = y || 0;\\n            var cos = +math.cos(a).toFixed(9),\\n                sin = +math.sin(a).toFixed(9);\\n            this.add(cos, sin, -sin, cos, x, y);\\n            this.add(1, 0, 0, 1, -x, -y);\\n        };\\n        /*\\\\\\n         * Matrix.x\\n         [ method ]\\n         **\\n         * Return x coordinate for given point after transformation described by the matrix. See also @Matrix.y\\n         > Parameters\\n         - x (number)\\n         - y (number)\\n         = (number) x\\n         \\\\*/\\n        matrixproto.x = function (x, y) {\\n            return x * this.a + y * this.c + this.e;\\n        };\\n        /*\\\\\\n         * Matrix.y\\n         [ method ]\\n         **\\n         * Return y coordinate for given point after transformation described by the matrix. See also @Matrix.x\\n         > Parameters\\n         - x (number)\\n         - y (number)\\n         = (number) y\\n         \\\\*/\\n        matrixproto.y = function (x, y) {\\n            return x * this.b + y * this.d + this.f;\\n        };\\n        matrixproto.get = function (i) {\\n            return +this[Str.fromCharCode(97 + i)].toFixed(4);\\n        };\\n        matrixproto.toString = function () {\\n            return R.svg ?\\n            \\\"matrix(\\\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + \\\")\\\" :\\n                [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join();\\n        };\\n        matrixproto.toFilter = function () {\\n            return \\\"progid:DXImageTransform.Microsoft.Matrix(M11=\\\" + this.get(0) +\\n                \\\", M12=\\\" + this.get(2) + \\\", M21=\\\" + this.get(1) + \\\", M22=\\\" + this.get(3) +\\n                \\\", Dx=\\\" + this.get(4) + \\\", Dy=\\\" + this.get(5) + \\\", sizingmethod='auto expand')\\\";\\n        };\\n        matrixproto.offset = function () {\\n            return [this.e.toFixed(4), this.f.toFixed(4)];\\n        };\\n        function norm(a) {\\n            return a[0] * a[0] + a[1] * a[1];\\n        }\\n        function normalize(a) {\\n            var mag = math.sqrt(norm(a));\\n            a[0] && (a[0] /= mag);\\n            a[1] && (a[1] /= mag);\\n        }\\n        /*\\\\\\n         * Matrix.split\\n         [ method ]\\n         **\\n         * Splits matrix into primitive transformations\\n         = (object) in format:\\n         o dx (number) translation by x\\n         o dy (number) translation by y\\n         o scalex (number) scale by x\\n         o scaley (number) scale by y\\n         o shear (number) shear\\n         o rotate (number) rotation in deg\\n         o isSimple (boolean) could it be represented via simple transformations\\n         \\\\*/\\n        matrixproto.split = function () {\\n            var out = {};\\n            // translation\\n            out.dx = this.e;\\n            out.dy = this.f;\\n\\n            // scale and shear\\n            var row = [[this.a, this.c], [this.b, this.d]];\\n            out.scalex = math.sqrt(norm(row[0]));\\n            normalize(row[0]);\\n\\n            out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1];\\n            row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear];\\n\\n            out.scaley = math.sqrt(norm(row[1]));\\n            normalize(row[1]);\\n            out.shear /= out.scaley;\\n\\n            // rotation\\n            var sin = -row[0][1],\\n                cos = row[1][1];\\n            if (cos < 0) {\\n                out.rotate = R.deg(math.acos(cos));\\n                if (sin < 0) {\\n                    out.rotate = 360 - out.rotate;\\n                }\\n            } else {\\n                out.rotate = R.deg(math.asin(sin));\\n            }\\n\\n            out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate);\\n            out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate;\\n            out.noRotation = !+out.shear.toFixed(9) && !out.rotate;\\n            return out;\\n        };\\n        /*\\\\\\n         * Matrix.toTransformString\\n         [ method ]\\n         **\\n         * Return transform string that represents given matrix\\n         = (string) transform string\\n         \\\\*/\\n        matrixproto.toTransformString = function (shorter) {\\n            var s = shorter || this[split]();\\n            if (s.isSimple) {\\n                s.scalex = +s.scalex.toFixed(4);\\n                s.scaley = +s.scaley.toFixed(4);\\n                s.rotate = +s.rotate.toFixed(4);\\n                return  (s.dx || s.dy ? \\\"t\\\" + [s.dx, s.dy] : E) +\\n                    (s.scalex != 1 || s.scaley != 1 ? \\\"s\\\" + [s.scalex, s.scaley, 0, 0] : E) +\\n                    (s.rotate ? \\\"r\\\" + [s.rotate, 0, 0] : E);\\n            } else {\\n                return \\\"m\\\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)];\\n            }\\n        };\\n    })(Matrix.prototype);\\n\\n    var preventDefault = function () {\\n            this.returnValue = false;\\n        },\\n        preventTouch = function () {\\n            return this.originalEvent.preventDefault();\\n        },\\n        stopPropagation = function () {\\n            this.cancelBubble = true;\\n        },\\n        stopTouch = function () {\\n            return this.originalEvent.stopPropagation();\\n        },\\n        getEventPosition = function (e) {\\n            var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\\n                scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\\n\\n            return {\\n                x: e.clientX + scrollX,\\n                y: e.clientY + scrollY\\n            };\\n        },\\n        addEvent = (function () {\\n            if (g.doc.addEventListener) {\\n                return function (obj, type, fn, element) {\\n                    var f = function (e) {\\n                        var pos = getEventPosition(e);\\n                        return fn.call(element, e, pos.x, pos.y);\\n                    };\\n                    obj.addEventListener(type, f, false);\\n\\n                    if (supportsTouch && touchMap[type]) {\\n                        var _f = function (e) {\\n                            var pos = getEventPosition(e),\\n                                olde = e;\\n\\n                            for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {\\n                                if (e.targetTouches[i].target == obj) {\\n                                    e = e.targetTouches[i];\\n                                    e.originalEvent = olde;\\n                                    e.preventDefault = preventTouch;\\n                                    e.stopPropagation = stopTouch;\\n                                    break;\\n                                }\\n                            }\\n\\n                            return fn.call(element, e, pos.x, pos.y);\\n                        };\\n                        obj.addEventListener(touchMap[type], _f, false);\\n                    }\\n\\n                    return function () {\\n                        obj.removeEventListener(type, f, false);\\n\\n                        if (supportsTouch && touchMap[type])\\n                            obj.removeEventListener(touchMap[type], _f, false);\\n\\n                        return true;\\n                    };\\n                };\\n            } else if (g.doc.attachEvent) {\\n                return function (obj, type, fn, element) {\\n                    var f = function (e) {\\n                        e = e || g.win.event;\\n                        var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\\n                            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\\n                            x = e.clientX + scrollX,\\n                            y = e.clientY + scrollY;\\n                        e.preventDefault = e.preventDefault || preventDefault;\\n                        e.stopPropagation = e.stopPropagation || stopPropagation;\\n                        return fn.call(element, e, x, y);\\n                    };\\n                    obj.attachEvent(\\\"on\\\" + type, f);\\n                    var detacher = function () {\\n                        obj.detachEvent(\\\"on\\\" + type, f);\\n                        return true;\\n                    };\\n                    return detacher;\\n                };\\n            }\\n        })(),\\n        drag = [],\\n        dragMove = function (e) {\\n            var x = e.clientX,\\n                y = e.clientY,\\n                scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\\n                scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\\n                dragi,\\n                j = drag.length;\\n            while (j--) {\\n                dragi = drag[j];\\n                if (supportsTouch && e.touches) {\\n                    var i = e.touches.length,\\n                        touch;\\n                    while (i--) {\\n                        touch = e.touches[i];\\n                        if (touch.identifier == dragi.el._drag.id) {\\n                            x = touch.clientX;\\n                            y = touch.clientY;\\n                            (e.originalEvent ? e.originalEvent : e).preventDefault();\\n                            break;\\n                        }\\n                    }\\n                } else {\\n                    e.preventDefault();\\n                }\\n                var node = dragi.el.node,\\n                    o,\\n                    next = node.nextSibling,\\n                    parent = node.parentNode,\\n                    display = node.style.display;\\n                g.win.opera && parent.removeChild(node);\\n                node.style.display = \\\"none\\\";\\n                o = dragi.el.paper.getElementByPoint(x, y);\\n                node.style.display = display;\\n                g.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node));\\n                o && eve(\\\"raphael.drag.over.\\\" + dragi.el.id, dragi.el, o);\\n                x += scrollX;\\n                y += scrollY;\\n                eve(\\\"raphael.drag.move.\\\" + dragi.el.id, dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);\\n            }\\n        },\\n        dragUp = function (e) {\\n            R.unmousemove(dragMove).unmouseup(dragUp);\\n            var i = drag.length,\\n                dragi;\\n            while (i--) {\\n                dragi = drag[i];\\n                dragi.el._drag = {};\\n                eve(\\\"raphael.drag.end.\\\" + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);\\n            }\\n            drag = [];\\n        },\\n    /*\\\\\\n     * Raphael.el\\n     [ property (object) ]\\n     **\\n     * You can add your own method to elements. This is usefull when you want to hack default functionality or\\n     * want to wrap some common transformation or attributes in one method. In difference to canvas methods,\\n     * you can redefine element method at any time. Expending element methods wouldn’t affect set.\\n     > Usage\\n     | Raphael.el.red = function () {\\n     |     this.attr({fill: \\\"#f00\\\"});\\n     | };\\n     | // then use it\\n     | paper.circle(100, 100, 20).red();\\n     \\\\*/\\n        elproto = R.el = {};\\n    /*\\\\\\n     * Element.click\\n     [ method ]\\n     **\\n     * Adds event handler for click for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.unclick\\n     [ method ]\\n     **\\n     * Removes event handler for click for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.dblclick\\n     [ method ]\\n     **\\n     * Adds event handler for double click for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.undblclick\\n     [ method ]\\n     **\\n     * Removes event handler for double click for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.mousedown\\n     [ method ]\\n     **\\n     * Adds event handler for mousedown for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.unmousedown\\n     [ method ]\\n     **\\n     * Removes event handler for mousedown for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.mousemove\\n     [ method ]\\n     **\\n     * Adds event handler for mousemove for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.unmousemove\\n     [ method ]\\n     **\\n     * Removes event handler for mousemove for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.mouseout\\n     [ method ]\\n     **\\n     * Adds event handler for mouseout for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.unmouseout\\n     [ method ]\\n     **\\n     * Removes event handler for mouseout for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.mouseover\\n     [ method ]\\n     **\\n     * Adds event handler for mouseover for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.unmouseover\\n     [ method ]\\n     **\\n     * Removes event handler for mouseover for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.mouseup\\n     [ method ]\\n     **\\n     * Adds event handler for mouseup for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.unmouseup\\n     [ method ]\\n     **\\n     * Removes event handler for mouseup for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.touchstart\\n     [ method ]\\n     **\\n     * Adds event handler for touchstart for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.untouchstart\\n     [ method ]\\n     **\\n     * Removes event handler for touchstart for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.touchmove\\n     [ method ]\\n     **\\n     * Adds event handler for touchmove for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.untouchmove\\n     [ method ]\\n     **\\n     * Removes event handler for touchmove for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.touchend\\n     [ method ]\\n     **\\n     * Adds event handler for touchend for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.untouchend\\n     [ method ]\\n     **\\n     * Removes event handler for touchend for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n\\n    /*\\\\\\n     * Element.touchcancel\\n     [ method ]\\n     **\\n     * Adds event handler for touchcancel for the element.\\n     > Parameters\\n     - handler (function) handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    /*\\\\\\n     * Element.untouchcancel\\n     [ method ]\\n     **\\n     * Removes event handler for touchcancel for the element.\\n     > Parameters\\n     - handler (function) #optional handler for the event\\n     = (object) @Element\\n     \\\\*/\\n    for (var i = events.length; i--;) {\\n        (function (eventName) {\\n            R[eventName] = elproto[eventName] = function (fn, scope) {\\n                if (R.is(fn, \\\"function\\\")) {\\n                    this.events = this.events || [];\\n                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || g.doc, eventName, fn, scope || this)});\\n                }\\n                return this;\\n            };\\n            R[\\\"un\\\" + eventName] = elproto[\\\"un\\\" + eventName] = function (fn) {\\n                var events = this.events || [],\\n                    l = events.length;\\n                while (l--){\\n                    if (events[l].name == eventName && (R.is(fn, \\\"undefined\\\") || events[l].f == fn)) {\\n                        events[l].unbind();\\n                        events.splice(l, 1);\\n                        !events.length && delete this.events;\\n                    }\\n                }\\n                return this;\\n            };\\n        })(events[i]);\\n    }\\n\\n    /*\\\\\\n     * Element.data\\n     [ method ]\\n     **\\n     * Adds or retrieves given value asociated with given key.\\n     **\\n     * See also @Element.removeData\\n     > Parameters\\n     - key (string) key to store data\\n     - value (any) #optional value to store\\n     = (object) @Element\\n     * or, if value is not specified:\\n     = (any) value\\n     * or, if key and value are not specified:\\n     = (object) Key/value pairs for all the data associated with the element.\\n     > Usage\\n     | for (var i = 0, i < 5, i++) {\\n     |     paper.circle(10 + 15 * i, 10, 10)\\n     |          .attr({fill: \\\"#000\\\"})\\n     |          .data(\\\"i\\\", i)\\n     |          .click(function () {\\n     |             alert(this.data(\\\"i\\\"));\\n     |          });\\n     | }\\n     \\\\*/\\n    elproto.data = function (key, value) {\\n        var data = eldata[this.id] = eldata[this.id] || {};\\n        if (arguments.length == 0) {\\n            return data;\\n        }\\n        if (arguments.length == 1) {\\n            if (R.is(key, \\\"object\\\")) {\\n                for (var i in key) if (key[has](i)) {\\n                    this.data(i, key[i]);\\n                }\\n                return this;\\n            }\\n            eve(\\\"raphael.data.get.\\\" + this.id, this, data[key], key);\\n            return data[key];\\n        }\\n        data[key] = value;\\n        eve(\\\"raphael.data.set.\\\" + this.id, this, value, key);\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.removeData\\n     [ method ]\\n     **\\n     * Removes value associated with an element by given key.\\n     * If key is not provided, removes all the data of the element.\\n     > Parameters\\n     - key (string) #optional key\\n     = (object) @Element\\n     \\\\*/\\n    elproto.removeData = function (key) {\\n        if (key == null) {\\n            eldata[this.id] = {};\\n        } else {\\n            eldata[this.id] && delete eldata[this.id][key];\\n        }\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.getData\\n     [ method ]\\n     **\\n     * Retrieves the element data\\n     = (object) data\\n     \\\\*/\\n    elproto.getData = function () {\\n        return clone(eldata[this.id] || {});\\n    };\\n    /*\\\\\\n     * Element.hover\\n     [ method ]\\n     **\\n     * Adds event handlers for hover for the element.\\n     > Parameters\\n     - f_in (function) handler for hover in\\n     - f_out (function) handler for hover out\\n     - icontext (object) #optional context for hover in handler\\n     - ocontext (object) #optional context for hover out handler\\n     = (object) @Element\\n     \\\\*/\\n    elproto.hover = function (f_in, f_out, scope_in, scope_out) {\\n        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);\\n    };\\n    /*\\\\\\n     * Element.unhover\\n     [ method ]\\n     **\\n     * Removes event handlers for hover for the element.\\n     > Parameters\\n     - f_in (function) handler for hover in\\n     - f_out (function) handler for hover out\\n     = (object) @Element\\n     \\\\*/\\n    elproto.unhover = function (f_in, f_out) {\\n        return this.unmouseover(f_in).unmouseout(f_out);\\n    };\\n    var draggable = [];\\n    /*\\\\\\n     * Element.drag\\n     [ method ]\\n     **\\n     * Adds event handlers for drag of the element.\\n     > Parameters\\n     - onmove (function) handler for moving\\n     - onstart (function) handler for drag start\\n     - onend (function) handler for drag end\\n     - mcontext (object) #optional context for moving handler\\n     - scontext (object) #optional context for drag start handler\\n     - econtext (object) #optional context for drag end handler\\n     * Additionaly following `drag` events will be triggered: `drag.start.<id>` on start,\\n     * `drag.end.<id>` on end and `drag.move.<id>` on every move. When element will be dragged over another element\\n     * `drag.over.<id>` will be fired as well.\\n     *\\n     * Start event and start handler will be called in specified context or in context of the element with following parameters:\\n     o x (number) x position of the mouse\\n     o y (number) y position of the mouse\\n     o event (object) DOM event object\\n     * Move event and move handler will be called in specified context or in context of the element with following parameters:\\n     o dx (number) shift by x from the start point\\n     o dy (number) shift by y from the start point\\n     o x (number) x position of the mouse\\n     o y (number) y position of the mouse\\n     o event (object) DOM event object\\n     * End event and end handler will be called in specified context or in context of the element with following parameters:\\n     o event (object) DOM event object\\n     = (object) @Element\\n     \\\\*/\\n    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {\\n        function start(e) {\\n            (e.originalEvent || e).preventDefault();\\n            var x = e.clientX,\\n                y = e.clientY,\\n                scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\\n                scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\\n            this._drag.id = e.identifier;\\n            if (supportsTouch && e.touches) {\\n                var i = e.touches.length, touch;\\n                while (i--) {\\n                    touch = e.touches[i];\\n                    this._drag.id = touch.identifier;\\n                    if (touch.identifier == this._drag.id) {\\n                        x = touch.clientX;\\n                        y = touch.clientY;\\n                        break;\\n                    }\\n                }\\n            }\\n            this._drag.x = x + scrollX;\\n            this._drag.y = y + scrollY;\\n            !drag.length && R.mousemove(dragMove).mouseup(dragUp);\\n            drag.push({el: this, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});\\n            onstart && eve.on(\\\"raphael.drag.start.\\\" + this.id, onstart);\\n            onmove && eve.on(\\\"raphael.drag.move.\\\" + this.id, onmove);\\n            onend && eve.on(\\\"raphael.drag.end.\\\" + this.id, onend);\\n            eve(\\\"raphael.drag.start.\\\" + this.id, start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);\\n        }\\n        this._drag = {};\\n        draggable.push({el: this, start: start});\\n        this.mousedown(start);\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.onDragOver\\n     [ method ]\\n     **\\n     * Shortcut for assigning event handler for `drag.over.<id>` event, where id is id of the element (see @Element.id).\\n     > Parameters\\n     - f (function) handler for event, first argument would be the element you are dragging over\\n     \\\\*/\\n    elproto.onDragOver = function (f) {\\n        f ? eve.on(\\\"raphael.drag.over.\\\" + this.id, f) : eve.unbind(\\\"raphael.drag.over.\\\" + this.id);\\n    };\\n    /*\\\\\\n     * Element.undrag\\n     [ method ]\\n     **\\n     * Removes all drag event handlers from given element.\\n     \\\\*/\\n    elproto.undrag = function () {\\n        var i = draggable.length;\\n        while (i--) if (draggable[i].el == this) {\\n            this.unmousedown(draggable[i].start);\\n            draggable.splice(i, 1);\\n            eve.unbind(\\\"raphael.drag.*.\\\" + this.id);\\n        }\\n        !draggable.length && R.unmousemove(dragMove).unmouseup(dragUp);\\n        drag = [];\\n    };\\n    /*\\\\\\n     * Paper.circle\\n     [ method ]\\n     **\\n     * Draws a circle.\\n     **\\n     > Parameters\\n     **\\n     - x (number) x coordinate of the centre\\n     - y (number) y coordinate of the centre\\n     - r (number) radius\\n     = (object) Raphaël element object with type “circle”\\n     **\\n     > Usage\\n     | var c = paper.circle(50, 50, 40);\\n     \\\\*/\\n    paperproto.circle = function (x, y, r) {\\n        var out = R._engine.circle(this, x || 0, y || 0, r || 0);\\n        this.__set__ && this.__set__.push(out);\\n        return out;\\n    };\\n    /*\\\\\\n     * Paper.rect\\n     [ method ]\\n     *\\n     * Draws a rectangle.\\n     **\\n     > Parameters\\n     **\\n     - x (number) x coordinate of the top left corner\\n     - y (number) y coordinate of the top left corner\\n     - width (number) width\\n     - height (number) height\\n     - r (number) #optional radius for rounded corners, default is 0\\n     = (object) Raphaël element object with type “rect”\\n     **\\n     > Usage\\n     | // regular rectangle\\n     | var c = paper.rect(10, 10, 50, 50);\\n     | // rectangle with rounded corners\\n     | var c = paper.rect(40, 40, 50, 50, 10);\\n     \\\\*/\\n    paperproto.rect = function (x, y, w, h, r) {\\n        var out = R._engine.rect(this, x || 0, y || 0, w || 0, h || 0, r || 0);\\n        this.__set__ && this.__set__.push(out);\\n        return out;\\n    };\\n    /*\\\\\\n     * Paper.ellipse\\n     [ method ]\\n     **\\n     * Draws an ellipse.\\n     **\\n     > Parameters\\n     **\\n     - x (number) x coordinate of the centre\\n     - y (number) y coordinate of the centre\\n     - rx (number) horizontal radius\\n     - ry (number) vertical radius\\n     = (object) Raphaël element object with type “ellipse”\\n     **\\n     > Usage\\n     | var c = paper.ellipse(50, 50, 40, 20);\\n     \\\\*/\\n    paperproto.ellipse = function (x, y, rx, ry) {\\n        var out = R._engine.ellipse(this, x || 0, y || 0, rx || 0, ry || 0);\\n        this.__set__ && this.__set__.push(out);\\n        return out;\\n    };\\n    /*\\\\\\n     * Paper.path\\n     [ method ]\\n     **\\n     * Creates a path element by given path data string.\\n     > Parameters\\n     - pathString (string) #optional path string in SVG format.\\n     * Path string consists of one-letter commands, followed by comma seprarated arguments in numercal form. Example:\\n     | \\\"M10,20L30,40\\\"\\n     * Here we can see two commands: “M”, with arguments `(10, 20)` and “L” with arguments `(30, 40)`. Upper case letter mean command is absolute, lower case—relative.\\n     *\\n     # <p>Here is short list of commands available, for more details see <a href=\\\"http://www.w3.org/TR/SVG/paths.html#PathData\\\" title=\\\"Details of a path's data attribute's format are described in the SVG specification.\\\">SVG path string format</a>.</p>\\n     # <table><thead><tr><th>Command</th><th>Name</th><th>Parameters</th></tr></thead><tbody>\\n     # <tr><td>M</td><td>moveto</td><td>(x y)+</td></tr>\\n     # <tr><td>Z</td><td>closepath</td><td>(none)</td></tr>\\n     # <tr><td>L</td><td>lineto</td><td>(x y)+</td></tr>\\n     # <tr><td>H</td><td>horizontal lineto</td><td>x+</td></tr>\\n     # <tr><td>V</td><td>vertical lineto</td><td>y+</td></tr>\\n     # <tr><td>C</td><td>curveto</td><td>(x1 y1 x2 y2 x y)+</td></tr>\\n     # <tr><td>S</td><td>smooth curveto</td><td>(x2 y2 x y)+</td></tr>\\n     # <tr><td>Q</td><td>quadratic Bézier curveto</td><td>(x1 y1 x y)+</td></tr>\\n     # <tr><td>T</td><td>smooth quadratic Bézier curveto</td><td>(x y)+</td></tr>\\n     # <tr><td>A</td><td>elliptical arc</td><td>(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+</td></tr>\\n     # <tr><td>R</td><td><a href=\\\"http://en.wikipedia.org/wiki/Catmull–Rom_spline#Catmull.E2.80.93Rom_spline\\\">Catmull-Rom curveto</a>*</td><td>x1 y1 (x y)+</td></tr></tbody></table>\\n     * * “Catmull-Rom curveto” is a not standard SVG command and added in 2.0 to make life easier.\\n     * Note: there is a special case when path consist of just three commands: “M10,10R…z”. In this case path will smoothly connects to its beginning.\\n     > Usage\\n     | var c = paper.path(\\\"M10 10L90 90\\\");\\n     | // draw a diagonal line:\\n     | // move to 10,10, line to 90,90\\n     * For example of path strings, check out these icons: http://raphaeljs.com/icons/\\n     \\\\*/\\n    paperproto.path = function (pathString) {\\n        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);\\n        var out = R._engine.path(R.format[apply](R, arguments), this);\\n        this.__set__ && this.__set__.push(out);\\n        return out;\\n    };\\n    /*\\\\\\n     * Paper.image\\n     [ method ]\\n     **\\n     * Embeds an image into the surface.\\n     **\\n     > Parameters\\n     **\\n     - src (string) URI of the source image\\n     - x (number) x coordinate position\\n     - y (number) y coordinate position\\n     - width (number) width of the image\\n     - height (number) height of the image\\n     = (object) Raphaël element object with type “image”\\n     **\\n     > Usage\\n     | var c = paper.image(\\\"apple.png\\\", 10, 10, 80, 80);\\n     \\\\*/\\n    paperproto.image = function (src, x, y, w, h) {\\n        var out = R._engine.image(this, src || \\\"about:blank\\\", x || 0, y || 0, w || 0, h || 0);\\n        this.__set__ && this.__set__.push(out);\\n        return out;\\n    };\\n    /*\\\\\\n     * Paper.text\\n     [ method ]\\n     **\\n     * Draws a text string. If you need line breaks, put “\\\\n” in the string.\\n     **\\n     > Parameters\\n     **\\n     - x (number) x coordinate position\\n     - y (number) y coordinate position\\n     - text (string) The text string to draw\\n     = (object) Raphaël element object with type “text”\\n     **\\n     > Usage\\n     | var t = paper.text(50, 50, \\\"Raphaël\\\\nkicks\\\\nbutt!\\\");\\n     \\\\*/\\n    paperproto.text = function (x, y, text) {\\n        var out = R._engine.text(this, x || 0, y || 0, Str(text));\\n        this.__set__ && this.__set__.push(out);\\n        return out;\\n    };\\n    /*\\\\\\n     * Paper.set\\n     [ method ]\\n     **\\n     * Creates array-like object to keep and operate several elements at once.\\n     * Warning: it doesn’t create any elements for itself in the page, it just groups existing elements.\\n     * Sets act as pseudo elements — all methods available to an element can be used on a set.\\n     = (object) array-like object that represents set of elements\\n     **\\n     > Usage\\n     | var st = paper.set();\\n     | st.push(\\n     |     paper.circle(10, 10, 5),\\n     |     paper.circle(30, 10, 5)\\n     | );\\n     | st.attr({fill: \\\"red\\\"}); // changes the fill of both circles\\n     \\\\*/\\n    paperproto.set = function (itemsArray) {\\n        !R.is(itemsArray, \\\"array\\\") && (itemsArray = Array.prototype.splice.call(arguments, 0, arguments.length));\\n        var out = new Set(itemsArray);\\n        this.__set__ && this.__set__.push(out);\\n        out[\\\"paper\\\"] = this;\\n        out[\\\"type\\\"] = \\\"set\\\";\\n        return out;\\n    };\\n    /*\\\\\\n     * Paper.setStart\\n     [ method ]\\n     **\\n     * Creates @Paper.set. All elements that will be created after calling this method and before calling\\n     * @Paper.setFinish will be added to the set.\\n     **\\n     > Usage\\n     | paper.setStart();\\n     | paper.circle(10, 10, 5),\\n     | paper.circle(30, 10, 5)\\n     | var st = paper.setFinish();\\n     | st.attr({fill: \\\"red\\\"}); // changes the fill of both circles\\n     \\\\*/\\n    paperproto.setStart = function (set) {\\n        this.__set__ = set || this.set();\\n    };\\n    /*\\\\\\n     * Paper.setFinish\\n     [ method ]\\n     **\\n     * See @Paper.setStart. This method finishes catching and returns resulting set.\\n     **\\n     = (object) set\\n     \\\\*/\\n    paperproto.setFinish = function (set) {\\n        var out = this.__set__;\\n        delete this.__set__;\\n        return out;\\n    };\\n    /*\\\\\\n     * Paper.getSize\\n     [ method ]\\n     **\\n     * Obtains current paper actual size.\\n     **\\n     = (object)\\n     \\\\*/\\n    paperproto.getSize = function () {\\n        var container = this.canvas.parentNode;\\n        return {\\n            width: container.offsetWidth,\\n            height: container.offsetHeight\\n        };\\n    };\\n    /*\\\\\\n     * Paper.setSize\\n     [ method ]\\n     **\\n     * If you need to change dimensions of the canvas call this method\\n     **\\n     > Parameters\\n     **\\n     - width (number) new width of the canvas\\n     - height (number) new height of the canvas\\n     \\\\*/\\n    paperproto.setSize = function (width, height) {\\n        return R._engine.setSize.call(this, width, height);\\n    };\\n    /*\\\\\\n     * Paper.setViewBox\\n     [ method ]\\n     **\\n     * Sets the view box of the paper. Practically it gives you ability to zoom and pan whole paper surface by\\n     * specifying new boundaries.\\n     **\\n     > Parameters\\n     **\\n     - x (number) new x position, default is `0`\\n     - y (number) new y position, default is `0`\\n     - w (number) new width of the canvas\\n     - h (number) new height of the canvas\\n     - fit (boolean) `true` if you want graphics to fit into new boundary box\\n     \\\\*/\\n    paperproto.setViewBox = function (x, y, w, h, fit) {\\n        return R._engine.setViewBox.call(this, x, y, w, h, fit);\\n    };\\n    /*\\\\\\n     * Paper.top\\n     [ property ]\\n     **\\n     * Points to the topmost element on the paper\\n     \\\\*/\\n    /*\\\\\\n     * Paper.bottom\\n     [ property ]\\n     **\\n     * Points to the bottom element on the paper\\n     \\\\*/\\n    paperproto.top = paperproto.bottom = null;\\n    /*\\\\\\n     * Paper.raphael\\n     [ property ]\\n     **\\n     * Points to the @Raphael object/function\\n     \\\\*/\\n    paperproto.raphael = R;\\n    var getOffset = function (elem) {\\n        var box = elem.getBoundingClientRect(),\\n            doc = elem.ownerDocument,\\n            body = doc.body,\\n            docElem = doc.documentElement,\\n            clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,\\n            top  = box.top  + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop,\\n            left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft;\\n        return {\\n            y: top,\\n            x: left\\n        };\\n    };\\n    /*\\\\\\n     * Paper.getElementByPoint\\n     [ method ]\\n     **\\n     * Returns you topmost element under given point.\\n     **\\n     = (object) Raphaël element object\\n     > Parameters\\n     **\\n     - x (number) x coordinate from the top left corner of the window\\n     - y (number) y coordinate from the top left corner of the window\\n     > Usage\\n     | paper.getElementByPoint(mouseX, mouseY).attr({stroke: \\\"#f00\\\"});\\n     \\\\*/\\n    paperproto.getElementByPoint = function (x, y) {\\n        var paper = this,\\n            svg = paper.canvas,\\n            target = g.doc.elementFromPoint(x, y);\\n        if (g.win.opera && target.tagName == \\\"svg\\\") {\\n            var so = getOffset(svg),\\n                sr = svg.createSVGRect();\\n            sr.x = x - so.x;\\n            sr.y = y - so.y;\\n            sr.width = sr.height = 1;\\n            var hits = svg.getIntersectionList(sr, null);\\n            if (hits.length) {\\n                target = hits[hits.length - 1];\\n            }\\n        }\\n        if (!target) {\\n            return null;\\n        }\\n        while (target.parentNode && target != svg.parentNode && !target.raphael) {\\n            target = target.parentNode;\\n        }\\n        target == paper.canvas.parentNode && (target = svg);\\n        target = target && target.raphael ? paper.getById(target.raphaelid) : null;\\n        return target;\\n    };\\n\\n    /*\\\\\\n     * Paper.getElementsByBBox\\n     [ method ]\\n     **\\n     * Returns set of elements that have an intersecting bounding box\\n     **\\n     > Parameters\\n     **\\n     - bbox (object) bbox to check with\\n     = (object) @Set\\n     \\\\*/\\n    paperproto.getElementsByBBox = function (bbox) {\\n        var set = this.set();\\n        this.forEach(function (el) {\\n            if (R.isBBoxIntersect(el.getBBox(), bbox)) {\\n                set.push(el);\\n            }\\n        });\\n        return set;\\n    };\\n\\n    /*\\\\\\n     * Paper.getById\\n     [ method ]\\n     **\\n     * Returns you element by its internal ID.\\n     **\\n     > Parameters\\n     **\\n     - id (number) id\\n     = (object) Raphaël element object\\n     \\\\*/\\n    paperproto.getById = function (id) {\\n        var bot = this.bottom;\\n        while (bot) {\\n            if (bot.id == id) {\\n                return bot;\\n            }\\n            bot = bot.next;\\n        }\\n        return null;\\n    };\\n    /*\\\\\\n     * Paper.forEach\\n     [ method ]\\n     **\\n     * Executes given function for each element on the paper\\n     *\\n     * If callback function returns `false` it will stop loop running.\\n     **\\n     > Parameters\\n     **\\n     - callback (function) function to run\\n     - thisArg (object) context object for the callback\\n     = (object) Paper object\\n     > Usage\\n     | paper.forEach(function (el) {\\n     |     el.attr({ stroke: \\\"blue\\\" });\\n     | });\\n     \\\\*/\\n    paperproto.forEach = function (callback, thisArg) {\\n        var bot = this.bottom;\\n        while (bot) {\\n            if (callback.call(thisArg, bot) === false) {\\n                return this;\\n            }\\n            bot = bot.next;\\n        }\\n        return this;\\n    };\\n    /*\\\\\\n     * Paper.getElementsByPoint\\n     [ method ]\\n     **\\n     * Returns set of elements that have common point inside\\n     **\\n     > Parameters\\n     **\\n     - x (number) x coordinate of the point\\n     - y (number) y coordinate of the point\\n     = (object) @Set\\n     \\\\*/\\n    paperproto.getElementsByPoint = function (x, y) {\\n        var set = this.set();\\n        this.forEach(function (el) {\\n            if (el.isPointInside(x, y)) {\\n                set.push(el);\\n            }\\n        });\\n        return set;\\n    };\\n    function x_y() {\\n        return this.x + S + this.y;\\n    }\\n    function x_y_w_h() {\\n        return this.x + S + this.y + S + this.width + \\\" \\\\xd7 \\\" + this.height;\\n    }\\n    /*\\\\\\n     * Element.isPointInside\\n     [ method ]\\n     **\\n     * Determine if given point is inside this element’s shape\\n     **\\n     > Parameters\\n     **\\n     - x (number) x coordinate of the point\\n     - y (number) y coordinate of the point\\n     = (boolean) `true` if point inside the shape\\n     \\\\*/\\n    elproto.isPointInside = function (x, y) {\\n        var rp = this.realPath = getPath[this.type](this);\\n        if (this.attr('transform') && this.attr('transform').length) {\\n            rp = R.transformPath(rp, this.attr('transform'));\\n        }\\n        return R.isPointInsidePath(rp, x, y);\\n    };\\n    /*\\\\\\n     * Element.getBBox\\n     [ method ]\\n     **\\n     * Return bounding box for a given element\\n     **\\n     > Parameters\\n     **\\n     - isWithoutTransform (boolean) flag, `true` if you want to have bounding box before transformations. Default is `false`.\\n     = (object) Bounding box object:\\n     o {\\n     o     x: (number) top left corner x\\n     o     y: (number) top left corner y\\n     o     x2: (number) bottom right corner x\\n     o     y2: (number) bottom right corner y\\n     o     width: (number) width\\n     o     height: (number) height\\n     o }\\n     \\\\*/\\n    elproto.getBBox = function (isWithoutTransform) {\\n        if (this.removed) {\\n            return {};\\n        }\\n        var _ = this._;\\n        if (isWithoutTransform) {\\n            if (_.dirty || !_.bboxwt) {\\n                this.realPath = getPath[this.type](this);\\n                _.bboxwt = pathDimensions(this.realPath);\\n                _.bboxwt.toString = x_y_w_h;\\n                _.dirty = 0;\\n            }\\n            return _.bboxwt;\\n        }\\n        if (_.dirty || _.dirtyT || !_.bbox) {\\n            if (_.dirty || !this.realPath) {\\n                _.bboxwt = 0;\\n                this.realPath = getPath[this.type](this);\\n            }\\n            _.bbox = pathDimensions(mapPath(this.realPath, this.matrix));\\n            _.bbox.toString = x_y_w_h;\\n            _.dirty = _.dirtyT = 0;\\n        }\\n        return _.bbox;\\n    };\\n    /*\\\\\\n     * Element.clone\\n     [ method ]\\n     **\\n     = (object) clone of a given element\\n     **\\n     \\\\*/\\n    elproto.clone = function () {\\n        if (this.removed) {\\n            return null;\\n        }\\n        var out = this.paper[this.type]().attr(this.attr());\\n        this.__set__ && this.__set__.push(out);\\n        return out;\\n    };\\n    /*\\\\\\n     * Element.glow\\n     [ method ]\\n     **\\n     * Return set of elements that create glow-like effect around given element. See @Paper.set.\\n     *\\n     * Note: Glow is not connected to the element. If you change element attributes it won’t adjust itself.\\n     **\\n     > Parameters\\n     **\\n     - glow (object) #optional parameters object with all properties optional:\\n     o {\\n     o     width (number) size of the glow, default is `10`\\n     o     fill (boolean) will it be filled, default is `false`\\n     o     opacity (number) opacity, default is `0.5`\\n     o     offsetx (number) horizontal offset, default is `0`\\n     o     offsety (number) vertical offset, default is `0`\\n     o     color (string) glow colour, default is `black`\\n     o }\\n     = (object) @Paper.set of elements that represents glow\\n     \\\\*/\\n    elproto.glow = function (glow) {\\n        if (this.type == \\\"text\\\") {\\n            return null;\\n        }\\n        glow = glow || {};\\n        var s = {\\n                width: (glow.width || 10) + (+this.attr(\\\"stroke-width\\\") || 1),\\n                fill: glow.fill || false,\\n                opacity: glow.opacity == null ? .5 : glow.opacity,\\n                offsetx: glow.offsetx || 0,\\n                offsety: glow.offsety || 0,\\n                color: glow.color || \\\"#000\\\"\\n            },\\n            c = s.width / 2,\\n            r = this.paper,\\n            out = r.set(),\\n            path = this.realPath || getPath[this.type](this);\\n        path = this.matrix ? mapPath(path, this.matrix) : path;\\n        for (var i = 1; i < c + 1; i++) {\\n            out.push(r.path(path).attr({\\n                stroke: s.color,\\n                fill: s.fill ? s.color : \\\"none\\\",\\n                \\\"stroke-linejoin\\\": \\\"round\\\",\\n                \\\"stroke-linecap\\\": \\\"round\\\",\\n                \\\"stroke-width\\\": +(s.width / c * i).toFixed(3),\\n                opacity: +(s.opacity / c).toFixed(3)\\n            }));\\n        }\\n        return out.insertBefore(this).translate(s.offsetx, s.offsety);\\n    };\\n    var curveslengths = {},\\n        getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {\\n            if (length == null) {\\n                return bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);\\n            } else {\\n                return R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, getTatLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length));\\n            }\\n        },\\n        getLengthFactory = function (istotal, subpath) {\\n            return function (path, length, onlystart) {\\n                path = path2curve(path);\\n                var x, y, p, l, sp = \\\"\\\", subpaths = {}, point,\\n                    len = 0;\\n                for (var i = 0, ii = path.length; i < ii; i++) {\\n                    p = path[i];\\n                    if (p[0] == \\\"M\\\") {\\n                        x = +p[1];\\n                        y = +p[2];\\n                    } else {\\n                        l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\\n                        if (len + l > length) {\\n                            if (subpath && !subpaths.start) {\\n                                point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\\n                                sp += [\\\"C\\\" + point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];\\n                                if (onlystart) {return sp;}\\n                                subpaths.start = sp;\\n                                sp = [\\\"M\\\" + point.x, point.y + \\\"C\\\" + point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]].join();\\n                                len += l;\\n                                x = +p[5];\\n                                y = +p[6];\\n                                continue;\\n                            }\\n                            if (!istotal && !subpath) {\\n                                point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\\n                                return {x: point.x, y: point.y, alpha: point.alpha};\\n                            }\\n                        }\\n                        len += l;\\n                        x = +p[5];\\n                        y = +p[6];\\n                    }\\n                    sp += p.shift() + p;\\n                }\\n                subpaths.end = sp;\\n                point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);\\n                point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});\\n                return point;\\n            };\\n        };\\n    var getTotalLength = getLengthFactory(1),\\n        getPointAtLength = getLengthFactory(),\\n        getSubpathsAtLength = getLengthFactory(0, 1);\\n    /*\\\\\\n     * Raphael.getTotalLength\\n     [ method ]\\n     **\\n     * Returns length of the given path in pixels.\\n     **\\n     > Parameters\\n     **\\n     - path (string) SVG path string.\\n     **\\n     = (number) length.\\n     \\\\*/\\n    R.getTotalLength = getTotalLength;\\n    /*\\\\\\n     * Raphael.getPointAtLength\\n     [ method ]\\n     **\\n     * Return coordinates of the point located at the given length on the given path.\\n     **\\n     > Parameters\\n     **\\n     - path (string) SVG path string\\n     - length (number)\\n     **\\n     = (object) representation of the point:\\n     o {\\n     o     x: (number) x coordinate\\n     o     y: (number) y coordinate\\n     o     alpha: (number) angle of derivative\\n     o }\\n     \\\\*/\\n    R.getPointAtLength = getPointAtLength;\\n    /*\\\\\\n     * Raphael.getSubpath\\n     [ method ]\\n     **\\n     * Return subpath of a given path from given length to given length.\\n     **\\n     > Parameters\\n     **\\n     - path (string) SVG path string\\n     - from (number) position of the start of the segment\\n     - to (number) position of the end of the segment\\n     **\\n     = (string) pathstring for the segment\\n     \\\\*/\\n    R.getSubpath = function (path, from, to) {\\n        if (this.getTotalLength(path) - to < 1e-6) {\\n            return getSubpathsAtLength(path, from).end;\\n        }\\n        var a = getSubpathsAtLength(path, to, 1);\\n        return from ? getSubpathsAtLength(a, from).end : a;\\n    };\\n    /*\\\\\\n     * Element.getTotalLength\\n     [ method ]\\n     **\\n     * Returns length of the path in pixels. Only works for element of “path” type.\\n     = (number) length.\\n     \\\\*/\\n    elproto.getTotalLength = function () {\\n        var path = this.getPath();\\n        if (!path) {\\n            return;\\n        }\\n\\n        if (this.node.getTotalLength) {\\n            return this.node.getTotalLength();\\n        }\\n\\n        return getTotalLength(path);\\n    };\\n    /*\\\\\\n     * Element.getPointAtLength\\n     [ method ]\\n     **\\n     * Return coordinates of the point located at the given length on the given path. Only works for element of “path” type.\\n     **\\n     > Parameters\\n     **\\n     - length (number)\\n     **\\n     = (object) representation of the point:\\n     o {\\n     o     x: (number) x coordinate\\n     o     y: (number) y coordinate\\n     o     alpha: (number) angle of derivative\\n     o }\\n     \\\\*/\\n    elproto.getPointAtLength = function (length) {\\n        var path = this.getPath();\\n        if (!path) {\\n            return;\\n        }\\n\\n        return getPointAtLength(path, length);\\n    };\\n    /*\\\\\\n     * Element.getPath\\n     [ method ]\\n     **\\n     * Returns path of the element. Only works for elements of “path” type and simple elements like circle.\\n     = (object) path\\n     **\\n     \\\\*/\\n    elproto.getPath = function () {\\n        var path,\\n            getPath = R._getPath[this.type];\\n\\n        if (this.type == \\\"text\\\" || this.type == \\\"set\\\") {\\n            return;\\n        }\\n\\n        if (getPath) {\\n            path = getPath(this);\\n        }\\n\\n        return path;\\n    };\\n    /*\\\\\\n     * Element.getSubpath\\n     [ method ]\\n     **\\n     * Return subpath of a given element from given length to given length. Only works for element of “path” type.\\n     **\\n     > Parameters\\n     **\\n     - from (number) position of the start of the segment\\n     - to (number) position of the end of the segment\\n     **\\n     = (string) pathstring for the segment\\n     \\\\*/\\n    elproto.getSubpath = function (from, to) {\\n        var path = this.getPath();\\n        if (!path) {\\n            return;\\n        }\\n\\n        return R.getSubpath(path, from, to);\\n    };\\n    /*\\\\\\n     * Raphael.easing_formulas\\n     [ property ]\\n     **\\n     * Object that contains easing formulas for animation. You could extend it with your own. By default it has following list of easing:\\n     # <ul>\\n     #     <li>“linear”</li>\\n     #     <li>“&lt;” or “easeIn” or “ease-in”</li>\\n     #     <li>“>” or “easeOut” or “ease-out”</li>\\n     #     <li>“&lt;>” or “easeInOut” or “ease-in-out”</li>\\n     #     <li>“backIn” or “back-in”</li>\\n     #     <li>“backOut” or “back-out”</li>\\n     #     <li>“elastic”</li>\\n     #     <li>“bounce”</li>\\n     # </ul>\\n     # <p>See also <a href=\\\"http://raphaeljs.com/easing.html\\\">Easing demo</a>.</p>\\n     \\\\*/\\n    var ef = R.easing_formulas = {\\n        linear: function (n) {\\n            return n;\\n        },\\n        \\\"<\\\": function (n) {\\n            return pow(n, 1.7);\\n        },\\n        \\\">\\\": function (n) {\\n            return pow(n, .48);\\n        },\\n        \\\"<>\\\": function (n) {\\n            var q = .48 - n / 1.04,\\n                Q = math.sqrt(.1734 + q * q),\\n                x = Q - q,\\n                X = pow(abs(x), 1 / 3) * (x < 0 ? -1 : 1),\\n                y = -Q - q,\\n                Y = pow(abs(y), 1 / 3) * (y < 0 ? -1 : 1),\\n                t = X + Y + .5;\\n            return (1 - t) * 3 * t * t + t * t * t;\\n        },\\n        backIn: function (n) {\\n            var s = 1.70158;\\n            return n * n * ((s + 1) * n - s);\\n        },\\n        backOut: function (n) {\\n            n = n - 1;\\n            var s = 1.70158;\\n            return n * n * ((s + 1) * n + s) + 1;\\n        },\\n        elastic: function (n) {\\n            if (n == !!n) {\\n                return n;\\n            }\\n            return pow(2, -10 * n) * math.sin((n - .075) * (2 * PI) / .3) + 1;\\n        },\\n        bounce: function (n) {\\n            var s = 7.5625,\\n                p = 2.75,\\n                l;\\n            if (n < (1 / p)) {\\n                l = s * n * n;\\n            } else {\\n                if (n < (2 / p)) {\\n                    n -= (1.5 / p);\\n                    l = s * n * n + .75;\\n                } else {\\n                    if (n < (2.5 / p)) {\\n                        n -= (2.25 / p);\\n                        l = s * n * n + .9375;\\n                    } else {\\n                        n -= (2.625 / p);\\n                        l = s * n * n + .984375;\\n                    }\\n                }\\n            }\\n            return l;\\n        }\\n    };\\n    ef.easeIn = ef[\\\"ease-in\\\"] = ef[\\\"<\\\"];\\n    ef.easeOut = ef[\\\"ease-out\\\"] = ef[\\\">\\\"];\\n    ef.easeInOut = ef[\\\"ease-in-out\\\"] = ef[\\\"<>\\\"];\\n    ef[\\\"back-in\\\"] = ef.backIn;\\n    ef[\\\"back-out\\\"] = ef.backOut;\\n\\n    var animationElements = [],\\n        requestAnimFrame = window.requestAnimationFrame       ||\\n            window.webkitRequestAnimationFrame ||\\n            window.mozRequestAnimationFrame    ||\\n            window.oRequestAnimationFrame      ||\\n            window.msRequestAnimationFrame     ||\\n            function (callback) {\\n                setTimeout(callback, 16);\\n            },\\n        animation = function () {\\n            var Now = +new Date,\\n                l = 0;\\n            for (; l < animationElements.length; l++) {\\n                var e = animationElements[l];\\n                if (e.el.removed || e.paused) {\\n                    continue;\\n                }\\n                var time = Now - e.start,\\n                    ms = e.ms,\\n                    easing = e.easing,\\n                    from = e.from,\\n                    diff = e.diff,\\n                    to = e.to,\\n                    t = e.t,\\n                    that = e.el,\\n                    set = {},\\n                    now,\\n                    init = {},\\n                    key;\\n                if (e.initstatus) {\\n                    time = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * ms;\\n                    e.status = e.initstatus;\\n                    delete e.initstatus;\\n                    e.stop && animationElements.splice(l--, 1);\\n                } else {\\n                    e.status = (e.prev + (e.percent - e.prev) * (time / ms)) / e.anim.top;\\n                }\\n                if (time < 0) {\\n                    continue;\\n                }\\n                if (time < ms) {\\n                    var pos = easing(time / ms);\\n                    for (var attr in from) if (from[has](attr)) {\\n                        switch (availableAnimAttrs[attr]) {\\n                            case nu:\\n                                now = +from[attr] + pos * ms * diff[attr];\\n                                break;\\n                            case \\\"colour\\\":\\n                                now = \\\"rgb(\\\" + [\\n                                        upto255(round(from[attr].r + pos * ms * diff[attr].r)),\\n                                        upto255(round(from[attr].g + pos * ms * diff[attr].g)),\\n                                        upto255(round(from[attr].b + pos * ms * diff[attr].b))\\n                                    ].join(\\\",\\\") + \\\")\\\";\\n                                break;\\n                            case \\\"path\\\":\\n                                now = [];\\n                                for (var i = 0, ii = from[attr].length; i < ii; i++) {\\n                                    now[i] = [from[attr][i][0]];\\n                                    for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\\n                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];\\n                                    }\\n                                    now[i] = now[i].join(S);\\n                                }\\n                                now = now.join(S);\\n                                break;\\n                            case \\\"transform\\\":\\n                                if (diff[attr].real) {\\n                                    now = [];\\n                                    for (i = 0, ii = from[attr].length; i < ii; i++) {\\n                                        now[i] = [from[attr][i][0]];\\n                                        for (j = 1, jj = from[attr][i].length; j < jj; j++) {\\n                                            now[i][j] = from[attr][i][j] + pos * ms * diff[attr][i][j];\\n                                        }\\n                                    }\\n                                } else {\\n                                    var get = function (i) {\\n                                        return +from[attr][i] + pos * ms * diff[attr][i];\\n                                    };\\n                                    // now = [[\\\"r\\\", get(2), 0, 0], [\\\"t\\\", get(3), get(4)], [\\\"s\\\", get(0), get(1), 0, 0]];\\n                                    now = [[\\\"m\\\", get(0), get(1), get(2), get(3), get(4), get(5)]];\\n                                }\\n                                break;\\n                            case \\\"csv\\\":\\n                                if (attr == \\\"clip-rect\\\") {\\n                                    now = [];\\n                                    i = 4;\\n                                    while (i--) {\\n                                        now[i] = +from[attr][i] + pos * ms * diff[attr][i];\\n                                    }\\n                                }\\n                                break;\\n                            default:\\n                                var from2 = [][concat](from[attr]);\\n                                now = [];\\n                                i = that.paper.customAttributes[attr].length;\\n                                while (i--) {\\n                                    now[i] = +from2[i] + pos * ms * diff[attr][i];\\n                                }\\n                                break;\\n                        }\\n                        set[attr] = now;\\n                    }\\n                    that.attr(set);\\n                    (function (id, that, anim) {\\n                        setTimeout(function () {\\n                            eve(\\\"raphael.anim.frame.\\\" + id, that, anim);\\n                        });\\n                    })(that.id, that, e.anim);\\n                } else {\\n                    (function(f, el, a) {\\n                        setTimeout(function() {\\n                            eve(\\\"raphael.anim.frame.\\\" + el.id, el, a);\\n                            eve(\\\"raphael.anim.finish.\\\" + el.id, el, a);\\n                            R.is(f, \\\"function\\\") && f.call(el);\\n                        });\\n                    })(e.callback, that, e.anim);\\n                    that.attr(to);\\n                    animationElements.splice(l--, 1);\\n                    if (e.repeat > 1 && !e.next) {\\n                        for (key in to) if (to[has](key)) {\\n                            init[key] = e.totalOrigin[key];\\n                        }\\n                        e.el.attr(init);\\n                        runAnimation(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1);\\n                    }\\n                    if (e.next && !e.stop) {\\n                        runAnimation(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat);\\n                    }\\n                }\\n            }\\n            animationElements.length && requestAnimFrame(animation);\\n        },\\n        upto255 = function (color) {\\n            return color > 255 ? 255 : color < 0 ? 0 : color;\\n        };\\n    /*\\\\\\n     * Element.animateWith\\n     [ method ]\\n     **\\n     * Acts similar to @Element.animate, but ensure that given animation runs in sync with another given element.\\n     **\\n     > Parameters\\n     **\\n     - el (object) element to sync with\\n     - anim (object) animation to sync with\\n     - params (object) #optional final attributes for the element, see also @Element.attr\\n     - ms (number) #optional number of milliseconds for animation to run\\n     - easing (string) #optional easing type. Accept on of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\\n     - callback (function) #optional callback function. Will be called at the end of animation.\\n     * or\\n     - element (object) element to sync with\\n     - anim (object) animation to sync with\\n     - animation (object) #optional animation object, see @Raphael.animation\\n     **\\n     = (object) original element\\n     \\\\*/\\n    elproto.animateWith = function (el, anim, params, ms, easing, callback) {\\n        var element = this;\\n        if (element.removed) {\\n            callback && callback.call(element);\\n            return element;\\n        }\\n        var a = params instanceof Animation ? params : R.animation(params, ms, easing, callback),\\n            x, y;\\n        runAnimation(a, element, a.percents[0], null, element.attr());\\n        for (var i = 0, ii = animationElements.length; i < ii; i++) {\\n            if (animationElements[i].anim == anim && animationElements[i].el == el) {\\n                animationElements[ii - 1].start = animationElements[i].start;\\n                break;\\n            }\\n        }\\n        return element;\\n        //\\n        //\\n        // var a = params ? R.animation(params, ms, easing, callback) : anim,\\n        //     status = element.status(anim);\\n        // return this.animate(a).status(a, status * anim.ms / a.ms);\\n    };\\n    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {\\n        var cx = 3 * p1x,\\n            bx = 3 * (p2x - p1x) - cx,\\n            ax = 1 - cx - bx,\\n            cy = 3 * p1y,\\n            by = 3 * (p2y - p1y) - cy,\\n            ay = 1 - cy - by;\\n        function sampleCurveX(t) {\\n            return ((ax * t + bx) * t + cx) * t;\\n        }\\n        function solve(x, epsilon) {\\n            var t = solveCurveX(x, epsilon);\\n            return ((ay * t + by) * t + cy) * t;\\n        }\\n        function solveCurveX(x, epsilon) {\\n            var t0, t1, t2, x2, d2, i;\\n            for(t2 = x, i = 0; i < 8; i++) {\\n                x2 = sampleCurveX(t2) - x;\\n                if (abs(x2) < epsilon) {\\n                    return t2;\\n                }\\n                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;\\n                if (abs(d2) < 1e-6) {\\n                    break;\\n                }\\n                t2 = t2 - x2 / d2;\\n            }\\n            t0 = 0;\\n            t1 = 1;\\n            t2 = x;\\n            if (t2 < t0) {\\n                return t0;\\n            }\\n            if (t2 > t1) {\\n                return t1;\\n            }\\n            while (t0 < t1) {\\n                x2 = sampleCurveX(t2);\\n                if (abs(x2 - x) < epsilon) {\\n                    return t2;\\n                }\\n                if (x > x2) {\\n                    t0 = t2;\\n                } else {\\n                    t1 = t2;\\n                }\\n                t2 = (t1 - t0) / 2 + t0;\\n            }\\n            return t2;\\n        }\\n        return solve(t, 1 / (200 * duration));\\n    }\\n    elproto.onAnimation = function (f) {\\n        f ? eve.on(\\\"raphael.anim.frame.\\\" + this.id, f) : eve.unbind(\\\"raphael.anim.frame.\\\" + this.id);\\n        return this;\\n    };\\n    function Animation(anim, ms) {\\n        var percents = [],\\n            newAnim = {};\\n        this.ms = ms;\\n        this.times = 1;\\n        if (anim) {\\n            for (var attr in anim) if (anim[has](attr)) {\\n                newAnim[toFloat(attr)] = anim[attr];\\n                percents.push(toFloat(attr));\\n            }\\n            percents.sort(sortByNumber);\\n        }\\n        this.anim = newAnim;\\n        this.top = percents[percents.length - 1];\\n        this.percents = percents;\\n    }\\n    /*\\\\\\n     * Animation.delay\\n     [ method ]\\n     **\\n     * Creates a copy of existing animation object with given delay.\\n     **\\n     > Parameters\\n     **\\n     - delay (number) number of ms to pass between animation start and actual animation\\n     **\\n     = (object) new altered Animation object\\n     | var anim = Raphael.animation({cx: 10, cy: 20}, 2e3);\\n     | circle1.animate(anim); // run the given animation immediately\\n     | circle2.animate(anim.delay(500)); // run the given animation after 500 ms\\n     \\\\*/\\n    Animation.prototype.delay = function (delay) {\\n        var a = new Animation(this.anim, this.ms);\\n        a.times = this.times;\\n        a.del = +delay || 0;\\n        return a;\\n    };\\n    /*\\\\\\n     * Animation.repeat\\n     [ method ]\\n     **\\n     * Creates a copy of existing animation object with given repetition.\\n     **\\n     > Parameters\\n     **\\n     - repeat (number) number iterations of animation. For infinite animation pass `Infinity`\\n     **\\n     = (object) new altered Animation object\\n     \\\\*/\\n    Animation.prototype.repeat = function (times) {\\n        var a = new Animation(this.anim, this.ms);\\n        a.del = this.del;\\n        a.times = math.floor(mmax(times, 0)) || 1;\\n        return a;\\n    };\\n    function runAnimation(anim, element, percent, status, totalOrigin, times) {\\n        percent = toFloat(percent);\\n        var params,\\n            isInAnim,\\n            isInAnimSet,\\n            percents = [],\\n            next,\\n            prev,\\n            timestamp,\\n            ms = anim.ms,\\n            from = {},\\n            to = {},\\n            diff = {};\\n        if (status) {\\n            for (i = 0, ii = animationElements.length; i < ii; i++) {\\n                var e = animationElements[i];\\n                if (e.el.id == element.id && e.anim == anim) {\\n                    if (e.percent != percent) {\\n                        animationElements.splice(i, 1);\\n                        isInAnimSet = 1;\\n                    } else {\\n                        isInAnim = e;\\n                    }\\n                    element.attr(e.totalOrigin);\\n                    break;\\n                }\\n            }\\n        } else {\\n            status = +to; // NaN\\n        }\\n        for (var i = 0, ii = anim.percents.length; i < ii; i++) {\\n            if (anim.percents[i] == percent || anim.percents[i] > status * anim.top) {\\n                percent = anim.percents[i];\\n                prev = anim.percents[i - 1] || 0;\\n                ms = ms / anim.top * (percent - prev);\\n                next = anim.percents[i + 1];\\n                params = anim.anim[percent];\\n                break;\\n            } else if (status) {\\n                element.attr(anim.anim[anim.percents[i]]);\\n            }\\n        }\\n        if (!params) {\\n            return;\\n        }\\n        if (!isInAnim) {\\n            for (var attr in params) if (params[has](attr)) {\\n                if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {\\n                    from[attr] = element.attr(attr);\\n                    (from[attr] == null) && (from[attr] = availableAttrs[attr]);\\n                    to[attr] = params[attr];\\n                    switch (availableAnimAttrs[attr]) {\\n                        case nu:\\n                            diff[attr] = (to[attr] - from[attr]) / ms;\\n                            break;\\n                        case \\\"colour\\\":\\n                            from[attr] = R.getRGB(from[attr]);\\n                            var toColour = R.getRGB(to[attr]);\\n                            diff[attr] = {\\n                                r: (toColour.r - from[attr].r) / ms,\\n                                g: (toColour.g - from[attr].g) / ms,\\n                                b: (toColour.b - from[attr].b) / ms\\n                            };\\n                            break;\\n                        case \\\"path\\\":\\n                            var pathes = path2curve(from[attr], to[attr]),\\n                                toPath = pathes[1];\\n                            from[attr] = pathes[0];\\n                            diff[attr] = [];\\n                            for (i = 0, ii = from[attr].length; i < ii; i++) {\\n                                diff[attr][i] = [0];\\n                                for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\\n                                    diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;\\n                                }\\n                            }\\n                            break;\\n                        case \\\"transform\\\":\\n                            var _ = element._,\\n                                eq = equaliseTransform(_[attr], to[attr]);\\n                            if (eq) {\\n                                from[attr] = eq.from;\\n                                to[attr] = eq.to;\\n                                diff[attr] = [];\\n                                diff[attr].real = true;\\n                                for (i = 0, ii = from[attr].length; i < ii; i++) {\\n                                    diff[attr][i] = [from[attr][i][0]];\\n                                    for (j = 1, jj = from[attr][i].length; j < jj; j++) {\\n                                        diff[attr][i][j] = (to[attr][i][j] - from[attr][i][j]) / ms;\\n                                    }\\n                                }\\n                            } else {\\n                                var m = (element.matrix || new Matrix),\\n                                    to2 = {\\n                                        _: {transform: _.transform},\\n                                        getBBox: function () {\\n                                            return element.getBBox(1);\\n                                        }\\n                                    };\\n                                from[attr] = [\\n                                    m.a,\\n                                    m.b,\\n                                    m.c,\\n                                    m.d,\\n                                    m.e,\\n                                    m.f\\n                                ];\\n                                extractTransform(to2, to[attr]);\\n                                to[attr] = to2._.transform;\\n                                diff[attr] = [\\n                                    (to2.matrix.a - m.a) / ms,\\n                                    (to2.matrix.b - m.b) / ms,\\n                                    (to2.matrix.c - m.c) / ms,\\n                                    (to2.matrix.d - m.d) / ms,\\n                                    (to2.matrix.e - m.e) / ms,\\n                                    (to2.matrix.f - m.f) / ms\\n                                ];\\n                                // from[attr] = [_.sx, _.sy, _.deg, _.dx, _.dy];\\n                                // var to2 = {_:{}, getBBox: function () { return element.getBBox(); }};\\n                                // extractTransform(to2, to[attr]);\\n                                // diff[attr] = [\\n                                //     (to2._.sx - _.sx) / ms,\\n                                //     (to2._.sy - _.sy) / ms,\\n                                //     (to2._.deg - _.deg) / ms,\\n                                //     (to2._.dx - _.dx) / ms,\\n                                //     (to2._.dy - _.dy) / ms\\n                                // ];\\n                            }\\n                            break;\\n                        case \\\"csv\\\":\\n                            var values = Str(params[attr])[split](separator),\\n                                from2 = Str(from[attr])[split](separator);\\n                            if (attr == \\\"clip-rect\\\") {\\n                                from[attr] = from2;\\n                                diff[attr] = [];\\n                                i = from2.length;\\n                                while (i--) {\\n                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;\\n                                }\\n                            }\\n                            to[attr] = values;\\n                            break;\\n                        default:\\n                            values = [][concat](params[attr]);\\n                            from2 = [][concat](from[attr]);\\n                            diff[attr] = [];\\n                            i = element.paper.customAttributes[attr].length;\\n                            while (i--) {\\n                                diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;\\n                            }\\n                            break;\\n                    }\\n                }\\n            }\\n            var easing = params.easing,\\n                easyeasy = R.easing_formulas[easing];\\n            if (!easyeasy) {\\n                easyeasy = Str(easing).match(bezierrg);\\n                if (easyeasy && easyeasy.length == 5) {\\n                    var curve = easyeasy;\\n                    easyeasy = function (t) {\\n                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);\\n                    };\\n                } else {\\n                    easyeasy = pipe;\\n                }\\n            }\\n            timestamp = params.start || anim.start || +new Date;\\n            e = {\\n                anim: anim,\\n                percent: percent,\\n                timestamp: timestamp,\\n                start: timestamp + (anim.del || 0),\\n                status: 0,\\n                initstatus: status || 0,\\n                stop: false,\\n                ms: ms,\\n                easing: easyeasy,\\n                from: from,\\n                diff: diff,\\n                to: to,\\n                el: element,\\n                callback: params.callback,\\n                prev: prev,\\n                next: next,\\n                repeat: times || anim.times,\\n                origin: element.attr(),\\n                totalOrigin: totalOrigin\\n            };\\n            animationElements.push(e);\\n            if (status && !isInAnim && !isInAnimSet) {\\n                e.stop = true;\\n                e.start = new Date - ms * status;\\n                if (animationElements.length == 1) {\\n                    return animation();\\n                }\\n            }\\n            if (isInAnimSet) {\\n                e.start = new Date - e.ms * status;\\n            }\\n            animationElements.length == 1 && requestAnimFrame(animation);\\n        } else {\\n            isInAnim.initstatus = status;\\n            isInAnim.start = new Date - isInAnim.ms * status;\\n        }\\n        eve(\\\"raphael.anim.start.\\\" + element.id, element, anim);\\n    }\\n    /*\\\\\\n     * Raphael.animation\\n     [ method ]\\n     **\\n     * Creates an animation object that can be passed to the @Element.animate or @Element.animateWith methods.\\n     * See also @Animation.delay and @Animation.repeat methods.\\n     **\\n     > Parameters\\n     **\\n     - params (object) final attributes for the element, see also @Element.attr\\n     - ms (number) number of milliseconds for animation to run\\n     - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\\n     - callback (function) #optional callback function. Will be called at the end of animation.\\n     **\\n     = (object) @Animation\\n     \\\\*/\\n    R.animation = function (params, ms, easing, callback) {\\n        if (params instanceof Animation) {\\n            return params;\\n        }\\n        if (R.is(easing, \\\"function\\\") || !easing) {\\n            callback = callback || easing || null;\\n            easing = null;\\n        }\\n        params = Object(params);\\n        ms = +ms || 0;\\n        var p = {},\\n            json,\\n            attr;\\n        for (attr in params) if (params[has](attr) && toFloat(attr) != attr && toFloat(attr) + \\\"%\\\" != attr) {\\n            json = true;\\n            p[attr] = params[attr];\\n        }\\n        if (!json) {\\n            // if percent-like syntax is used and end-of-all animation callback used\\n            if(callback){\\n                // find the last one\\n                var lastKey = 0;\\n                for(var i in params){\\n                    var percent = toInt(i);\\n                    if(params[has](i) && percent > lastKey){\\n                        lastKey = percent;\\n                    }\\n                }\\n                lastKey += '%';\\n                // if already defined callback in the last keyframe, skip\\n                !params[lastKey].callback && (params[lastKey].callback = callback);\\n            }\\n            return new Animation(params, ms);\\n        } else {\\n            easing && (p.easing = easing);\\n            callback && (p.callback = callback);\\n            return new Animation({100: p}, ms);\\n        }\\n    };\\n    /*\\\\\\n     * Element.animate\\n     [ method ]\\n     **\\n     * Creates and starts animation for given element.\\n     **\\n     > Parameters\\n     **\\n     - params (object) final attributes for the element, see also @Element.attr\\n     - ms (number) number of milliseconds for animation to run\\n     - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\\n     - callback (function) #optional callback function. Will be called at the end of animation.\\n     * or\\n     - animation (object) animation object, see @Raphael.animation\\n     **\\n     = (object) original element\\n     \\\\*/\\n    elproto.animate = function (params, ms, easing, callback) {\\n        var element = this;\\n        if (element.removed) {\\n            callback && callback.call(element);\\n            return element;\\n        }\\n        var anim = params instanceof Animation ? params : R.animation(params, ms, easing, callback);\\n        runAnimation(anim, element, anim.percents[0], null, element.attr());\\n        return element;\\n    };\\n    /*\\\\\\n     * Element.setTime\\n     [ method ]\\n     **\\n     * Sets the status of animation of the element in milliseconds. Similar to @Element.status method.\\n     **\\n     > Parameters\\n     **\\n     - anim (object) animation object\\n     - value (number) number of milliseconds from the beginning of the animation\\n     **\\n     = (object) original element if `value` is specified\\n     * Note, that during animation following events are triggered:\\n     *\\n     * On each animation frame event `anim.frame.<id>`, on start `anim.start.<id>` and on end `anim.finish.<id>`.\\n     \\\\*/\\n    elproto.setTime = function (anim, value) {\\n        if (anim && value != null) {\\n            this.status(anim, mmin(value, anim.ms) / anim.ms);\\n        }\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.status\\n     [ method ]\\n     **\\n     * Gets or sets the status of animation of the element.\\n     **\\n     > Parameters\\n     **\\n     - anim (object) #optional animation object\\n     - value (number) #optional 0 – 1. If specified, method works like a setter and sets the status of a given animation to the value. This will cause animation to jump to the given position.\\n     **\\n     = (number) status\\n     * or\\n     = (array) status if `anim` is not specified. Array of objects in format:\\n     o {\\n     o     anim: (object) animation object\\n     o     status: (number) status\\n     o }\\n     * or\\n     = (object) original element if `value` is specified\\n     \\\\*/\\n    elproto.status = function (anim, value) {\\n        var out = [],\\n            i = 0,\\n            len,\\n            e;\\n        if (value != null) {\\n            runAnimation(anim, this, -1, mmin(value, 1));\\n            return this;\\n        } else {\\n            len = animationElements.length;\\n            for (; i < len; i++) {\\n                e = animationElements[i];\\n                if (e.el.id == this.id && (!anim || e.anim == anim)) {\\n                    if (anim) {\\n                        return e.status;\\n                    }\\n                    out.push({\\n                        anim: e.anim,\\n                        status: e.status\\n                    });\\n                }\\n            }\\n            if (anim) {\\n                return 0;\\n            }\\n            return out;\\n        }\\n    };\\n    /*\\\\\\n     * Element.pause\\n     [ method ]\\n     **\\n     * Stops animation of the element with ability to resume it later on.\\n     **\\n     > Parameters\\n     **\\n     - anim (object) #optional animation object\\n     **\\n     = (object) original element\\n     \\\\*/\\n    elproto.pause = function (anim) {\\n        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\\n            if (eve(\\\"raphael.anim.pause.\\\" + this.id, this, animationElements[i].anim) !== false) {\\n                animationElements[i].paused = true;\\n            }\\n        }\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.resume\\n     [ method ]\\n     **\\n     * Resumes animation if it was paused with @Element.pause method.\\n     **\\n     > Parameters\\n     **\\n     - anim (object) #optional animation object\\n     **\\n     = (object) original element\\n     \\\\*/\\n    elproto.resume = function (anim) {\\n        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\\n            var e = animationElements[i];\\n            if (eve(\\\"raphael.anim.resume.\\\" + this.id, this, e.anim) !== false) {\\n                delete e.paused;\\n                this.status(e.anim, e.status);\\n            }\\n        }\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.stop\\n     [ method ]\\n     **\\n     * Stops animation of the element.\\n     **\\n     > Parameters\\n     **\\n     - anim (object) #optional animation object\\n     **\\n     = (object) original element\\n     \\\\*/\\n    elproto.stop = function (anim) {\\n        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\\n            if (eve(\\\"raphael.anim.stop.\\\" + this.id, this, animationElements[i].anim) !== false) {\\n                animationElements.splice(i--, 1);\\n            }\\n        }\\n        return this;\\n    };\\n    function stopAnimation(paper) {\\n        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.paper == paper) {\\n            animationElements.splice(i--, 1);\\n        }\\n    }\\n    eve.on(\\\"raphael.remove\\\", stopAnimation);\\n    eve.on(\\\"raphael.clear\\\", stopAnimation);\\n    elproto.toString = function () {\\n        return \\\"Rapha\\\\xebl\\\\u2019s object\\\";\\n    };\\n\\n    // Set\\n    var Set = function (items) {\\n            this.items = [];\\n            this.length = 0;\\n            this.type = \\\"set\\\";\\n            if (items) {\\n                for (var i = 0, ii = items.length; i < ii; i++) {\\n                    if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) {\\n                        this[this.items.length] = this.items[this.items.length] = items[i];\\n                        this.length++;\\n                    }\\n                }\\n            }\\n        },\\n        setproto = Set.prototype;\\n    /*\\\\\\n     * Set.push\\n     [ method ]\\n     **\\n     * Adds each argument to the current set.\\n     = (object) original element\\n     \\\\*/\\n    setproto.push = function () {\\n        var item,\\n            len;\\n        for (var i = 0, ii = arguments.length; i < ii; i++) {\\n            item = arguments[i];\\n            if (item && (item.constructor == elproto.constructor || item.constructor == Set)) {\\n                len = this.items.length;\\n                this[len] = this.items[len] = item;\\n                this.length++;\\n            }\\n        }\\n        return this;\\n    };\\n    /*\\\\\\n     * Set.pop\\n     [ method ]\\n     **\\n     * Removes last element and returns it.\\n     = (object) element\\n     \\\\*/\\n    setproto.pop = function () {\\n        this.length && delete this[this.length--];\\n        return this.items.pop();\\n    };\\n    /*\\\\\\n     * Set.forEach\\n     [ method ]\\n     **\\n     * Executes given function for each element in the set.\\n     *\\n     * If function returns `false` it will stop loop running.\\n     **\\n     > Parameters\\n     **\\n     - callback (function) function to run\\n     - thisArg (object) context object for the callback\\n     = (object) Set object\\n     \\\\*/\\n    setproto.forEach = function (callback, thisArg) {\\n        for (var i = 0, ii = this.items.length; i < ii; i++) {\\n            if (callback.call(thisArg, this.items[i], i) === false) {\\n                return this;\\n            }\\n        }\\n        return this;\\n    };\\n    for (var method in elproto) if (elproto[has](method)) {\\n        setproto[method] = (function (methodname) {\\n            return function () {\\n                var arg = arguments;\\n                return this.forEach(function (el) {\\n                    el[methodname][apply](el, arg);\\n                });\\n            };\\n        })(method);\\n    }\\n    setproto.attr = function (name, value) {\\n        if (name && R.is(name, array) && R.is(name[0], \\\"object\\\")) {\\n            for (var j = 0, jj = name.length; j < jj; j++) {\\n                this.items[j].attr(name[j]);\\n            }\\n        } else {\\n            for (var i = 0, ii = this.items.length; i < ii; i++) {\\n                this.items[i].attr(name, value);\\n            }\\n        }\\n        return this;\\n    };\\n    /*\\\\\\n     * Set.clear\\n     [ method ]\\n     **\\n     * Removes all elements from the set\\n     \\\\*/\\n    setproto.clear = function () {\\n        while (this.length) {\\n            this.pop();\\n        }\\n    };\\n    /*\\\\\\n     * Set.splice\\n     [ method ]\\n     **\\n     * Removes given element from the set\\n     **\\n     > Parameters\\n     **\\n     - index (number) position of the deletion\\n     - count (number) number of element to remove\\n     - insertion… (object) #optional elements to insert\\n     = (object) set elements that were deleted\\n     \\\\*/\\n    setproto.splice = function (index, count, insertion) {\\n        index = index < 0 ? mmax(this.length + index, 0) : index;\\n        count = mmax(0, mmin(this.length - index, count));\\n        var tail = [],\\n            todel = [],\\n            args = [],\\n            i;\\n        for (i = 2; i < arguments.length; i++) {\\n            args.push(arguments[i]);\\n        }\\n        for (i = 0; i < count; i++) {\\n            todel.push(this[index + i]);\\n        }\\n        for (; i < this.length - index; i++) {\\n            tail.push(this[index + i]);\\n        }\\n        var arglen = args.length;\\n        for (i = 0; i < arglen + tail.length; i++) {\\n            this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];\\n        }\\n        i = this.items.length = this.length -= count - arglen;\\n        while (this[i]) {\\n            delete this[i++];\\n        }\\n        return new Set(todel);\\n    };\\n    /*\\\\\\n     * Set.exclude\\n     [ method ]\\n     **\\n     * Removes given element from the set\\n     **\\n     > Parameters\\n     **\\n     - element (object) element to remove\\n     = (boolean) `true` if object was found & removed from the set\\n     \\\\*/\\n    setproto.exclude = function (el) {\\n        for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) {\\n            this.splice(i, 1);\\n            return true;\\n        }\\n    };\\n    setproto.animate = function (params, ms, easing, callback) {\\n        (R.is(easing, \\\"function\\\") || !easing) && (callback = easing || null);\\n        var len = this.items.length,\\n            i = len,\\n            item,\\n            set = this,\\n            collector;\\n        if (!len) {\\n            return this;\\n        }\\n        callback && (collector = function () {\\n            !--len && callback.call(set);\\n        });\\n        easing = R.is(easing, string) ? easing : collector;\\n        var anim = R.animation(params, ms, easing, collector);\\n        item = this.items[--i].animate(anim);\\n        while (i--) {\\n            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, anim, anim);\\n            (this.items[i] && !this.items[i].removed) || len--;\\n        }\\n        return this;\\n    };\\n    setproto.insertAfter = function (el) {\\n        var i = this.items.length;\\n        while (i--) {\\n            this.items[i].insertAfter(el);\\n        }\\n        return this;\\n    };\\n\\n    // FREEGROUP Fix: RaphaelJS changes the order of the elements of the 'set' by calling the toBack method.\\n    //                \\\"toBack\\\" must be called reverse to care about the rendering order. In this case we override\\n    //                the buggy default implementation here.\\n    //\\n    setproto.toBack = function () {\\n        var i = this.items.length;\\n        while (i--) {\\n            this.items[i].toBack();\\n        }\\n        return this;\\n    };\\n\\n    // FREEGROUP Fix: Unfortunately raphael didn'T expose the \\\"set.prototype\\\". In this case\\n    //                I must add all extension to the raphael implementation itself.\\n    //                Provide support method for easy check if the elements are visible.\\n    setproto.isVisible = function () {\\n        var i = this.items.length;\\n        var visible = false;\\n        while (i--) {\\n            visible = visible ||this.items[i].isVisible();\\n        }\\n        return visible;\\n    };\\n\\n\\n    // FREEGROUP FIX: Adding \\\"isWithoutTransform\\\" to the function and redirect them to the elements\\n    setproto.getBBox = function (isWithoutTransform) {\\n        var x = [],\\n            y = [],\\n            x2 = [],\\n            y2 = [];\\n        for (var i = this.items.length; i--;) if (!this.items[i].removed) {\\n            var box = this.items[i].getBBox(isWithoutTransform);\\n            x.push(box.x);\\n            y.push(box.y);\\n            x2.push(box.x + box.width);\\n            y2.push(box.y + box.height);\\n        }\\n        x = mmin[apply](0, x);\\n        y = mmin[apply](0, y);\\n        x2 = mmax[apply](0, x2);\\n        y2 = mmax[apply](0, y2);\\n        return {\\n            x: x,\\n            y: y,\\n            x2: x2,\\n            y2: y2,\\n            width: x2 - x,\\n            height: y2 - y\\n        };\\n    };\\n    setproto.clone = function (s) {\\n        s = this.paper.set();\\n        for (var i = 0, ii = this.items.length; i < ii; i++) {\\n            s.push(this.items[i].clone());\\n        }\\n        return s;\\n    };\\n    setproto.toString = function () {\\n        return \\\"Rapha\\\\xebl\\\\u2018s set\\\";\\n    };\\n\\n    setproto.glow = function(glowConfig) {\\n        var ret = this.paper.set();\\n        this.forEach(function(shape, index){\\n            var g = shape.glow(glowConfig);\\n            if(g != null){\\n                g.forEach(function(shape2, index2){\\n                    ret.push(shape2);\\n                });\\n            }\\n        });\\n        return ret;\\n    };\\n\\n\\n    /*\\\\\\n     * Set.isPointInside\\n     [ method ]\\n     **\\n     * Determine if given point is inside this set’s elements\\n     **\\n     > Parameters\\n     **\\n     - x (number) x coordinate of the point\\n     - y (number) y coordinate of the point\\n     = (boolean) `true` if point is inside any of the set's elements\\n     \\\\*/\\n    setproto.isPointInside = function (x, y) {\\n        var isPointInside = false;\\n        this.forEach(function (el) {\\n            if (el.isPointInside(x, y)) {\\n                isPointInside = true;\\n                return false; // stop loop\\n            }\\n        });\\n        return isPointInside;\\n    };\\n\\n    /*\\\\\\n     * Raphael.registerFont\\n     [ method ]\\n     **\\n     * Adds given font to the registered set of fonts for Raphaël. Should be used as an internal call from within Cufón’s font file.\\n     * Returns original parameter, so it could be used with chaining.\\n     # <a href=\\\"http://wiki.github.com/sorccu/cufon/about\\\">More about Cufón and how to convert your font form TTF, OTF, etc to JavaScript file.</a>\\n     **\\n     > Parameters\\n     **\\n     - font (object) the font to register\\n     = (object) the font you passed in\\n     > Usage\\n     | Cufon.registerFont(Raphael.registerFont({…}));\\n     \\\\*/\\n    R.registerFont = function (font) {\\n        if (!font.face) {\\n            return font;\\n        }\\n        this.fonts = this.fonts || {};\\n        var fontcopy = {\\n                w: font.w,\\n                face: {},\\n                glyphs: {}\\n            },\\n            family = font.face[\\\"font-family\\\"];\\n        for (var prop in font.face) if (font.face[has](prop)) {\\n            fontcopy.face[prop] = font.face[prop];\\n        }\\n        if (this.fonts[family]) {\\n            this.fonts[family].push(fontcopy);\\n        } else {\\n            this.fonts[family] = [fontcopy];\\n        }\\n        if (!font.svg) {\\n            fontcopy.face[\\\"units-per-em\\\"] = toInt(font.face[\\\"units-per-em\\\"], 10);\\n            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {\\n                var path = font.glyphs[glyph];\\n                fontcopy.glyphs[glyph] = {\\n                    w: path.w,\\n                    k: {},\\n                    d: path.d && \\\"M\\\" + path.d.replace(/[mlcxtrv]/g, function (command) {\\n                        return {l: \\\"L\\\", c: \\\"C\\\", x: \\\"z\\\", t: \\\"m\\\", r: \\\"l\\\", v: \\\"c\\\"}[command] || \\\"M\\\";\\n                    }) + \\\"z\\\"\\n                };\\n                if (path.k) {\\n                    for (var k in path.k) if (path[has](k)) {\\n                        fontcopy.glyphs[glyph].k[k] = path.k[k];\\n                    }\\n                }\\n            }\\n        }\\n        return font;\\n    };\\n    /*\\\\\\n     * Paper.getFont\\n     [ method ]\\n     **\\n     * Finds font object in the registered fonts by given parameters. You could specify only one word from the font name, like “Myriad” for “Myriad Pro”.\\n     **\\n     > Parameters\\n     **\\n     - family (string) font family name or any word from it\\n     - weight (string) #optional font weight\\n     - style (string) #optional font style\\n     - stretch (string) #optional font stretch\\n     = (object) the font object\\n     > Usage\\n     | paper.print(100, 100, \\\"Test string\\\", paper.getFont(\\\"Times\\\", 800), 30);\\n     \\\\*/\\n    paperproto.getFont = function (family, weight, style, stretch) {\\n        stretch = stretch || \\\"normal\\\";\\n        style = style || \\\"normal\\\";\\n        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;\\n        if (!R.fonts) {\\n            return;\\n        }\\n        var font = R.fonts[family];\\n        if (!font) {\\n            var name = new RegExp(\\\"(^|\\\\\\\\s)\\\" + family.replace(/[^\\\\w\\\\d\\\\s+!~.:_-]/g, E) + \\\"(\\\\\\\\s|$)\\\", \\\"i\\\");\\n            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {\\n                if (name.test(fontName)) {\\n                    font = R.fonts[fontName];\\n                    break;\\n                }\\n            }\\n        }\\n        var thefont;\\n        if (font) {\\n            for (var i = 0, ii = font.length; i < ii; i++) {\\n                thefont = font[i];\\n                if (thefont.face[\\\"font-weight\\\"] == weight && (thefont.face[\\\"font-style\\\"] == style || !thefont.face[\\\"font-style\\\"]) && thefont.face[\\\"font-stretch\\\"] == stretch) {\\n                    break;\\n                }\\n            }\\n        }\\n        return thefont;\\n    };\\n    /*\\\\\\n     * Paper.print\\n     [ method ]\\n     **\\n     * Creates path that represent given text written using given font at given position with given size.\\n     * Result of the method is path element that contains whole text as a separate path.\\n     **\\n     > Parameters\\n     **\\n     - x (number) x position of the text\\n     - y (number) y position of the text\\n     - string (string) text to print\\n     - font (object) font object, see @Paper.getFont\\n     - size (number) #optional size of the font, default is `16`\\n     - origin (string) #optional could be `\\\"baseline\\\"` or `\\\"middle\\\"`, default is `\\\"middle\\\"`\\n     - letter_spacing (number) #optional number in range `-1..1`, default is `0`\\n     - line_spacing (number) #optional number in range `1..3`, default is `1`\\n     = (object) resulting path element, which consist of all letters\\n     > Usage\\n     | var txt = r.print(10, 50, \\\"print\\\", r.getFont(\\\"Museo\\\"), 30).attr({fill: \\\"#fff\\\"});\\n     \\\\*/\\n    paperproto.print = function (x, y, string, font, size, origin, letter_spacing, line_spacing) {\\n        origin = origin || \\\"middle\\\"; // baseline|middle\\n        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);\\n        line_spacing = mmax(mmin(line_spacing || 1, 3), 1);\\n        var letters = Str(string)[split](E),\\n            shift = 0,\\n            notfirst = 0,\\n            path = E,\\n            scale;\\n        R.is(font, \\\"string\\\") && (font = this.getFont(font));\\n        if (font) {\\n            scale = (size || 16) / font.face[\\\"units-per-em\\\"];\\n            var bb = font.face.bbox[split](separator),\\n                top = +bb[0],\\n                lineHeight = bb[3] - bb[1],\\n                shifty = 0,\\n                height = +bb[1] + (origin == \\\"baseline\\\" ? lineHeight + (+font.face.descent) : lineHeight / 2);\\n            for (var i = 0, ii = letters.length; i < ii; i++) {\\n                if (letters[i] == \\\"\\\\n\\\") {\\n                    shift = 0;\\n                    curr = 0;\\n                    notfirst = 0;\\n                    shifty += lineHeight * line_spacing;\\n                } else {\\n                    var prev = notfirst && font.glyphs[letters[i - 1]] || {},\\n                        curr = font.glyphs[letters[i]];\\n                    shift += notfirst ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;\\n                    notfirst = 1;\\n                }\\n                if (curr && curr.d) {\\n                    path += R.transformPath(curr.d, [\\\"t\\\", shift * scale, shifty * scale, \\\"s\\\", scale, scale, top, height, \\\"t\\\", (x - top) / scale, (y - height) / scale]);\\n                }\\n            }\\n        }\\n        return this.path(path).attr({\\n            fill: \\\"#000\\\",\\n            stroke: \\\"none\\\"\\n        });\\n    };\\n\\n    /*\\\\\\n     * Paper.add\\n     [ method ]\\n     **\\n     * Imports elements in JSON array in format `{type: type, <attributes>}`\\n     **\\n     > Parameters\\n     **\\n     - json (array)\\n     = (object) resulting set of imported elements\\n     > Usage\\n     | paper.add([\\n     |     {\\n     |         type: \\\"circle\\\",\\n     |         cx: 10,\\n     |         cy: 10,\\n     |         r: 5\\n     |     },\\n     |     {\\n     |         type: \\\"rect\\\",\\n     |         x: 10,\\n     |         y: 10,\\n     |         width: 10,\\n     |         height: 10,\\n     |         fill: \\\"#fc0\\\"\\n     |     }\\n     | ]);\\n     \\\\*/\\n    paperproto.add = function (json) {\\n        if (R.is(json, \\\"array\\\")) {\\n            var res = this.set(),\\n                i = 0,\\n                ii = json.length,\\n                j;\\n            for (; i < ii; i++) {\\n                j = json[i] || {};\\n                elements[has](j.type) && res.push(this[j.type]().attr(j));\\n            }\\n        }\\n        return res;\\n    };\\n\\n    /*\\\\\\n     * Raphael.format\\n     [ method ]\\n     **\\n     * Simple format function. Replaces construction of type “`{<number>}`” to the corresponding argument.\\n     **\\n     > Parameters\\n     **\\n     - token (string) string to format\\n     - … (string) rest of arguments will be treated as parameters for replacement\\n     = (string) formated string\\n     > Usage\\n     | var x = 10,\\n     |     y = 20,\\n     |     width = 40,\\n     |     height = 50;\\n     | // this will draw a rectangular shape equivalent to \\\"M10,20h40v50h-40z\\\"\\n     | paper.path(Raphael.format(\\\"M{0},{1}h{2}v{3}h{4}z\\\", x, y, width, height, -width));\\n     \\\\*/\\n    R.format = function (token, params) {\\n        var args = R.is(params, array) ? [0][concat](params) : arguments;\\n        token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) {\\n            return args[++i] == null ? E : args[i];\\n        }));\\n        return token || E;\\n    };\\n    /*\\\\\\n     * Raphael.fullfill\\n     [ method ]\\n     **\\n     * A little bit more advanced format function than @Raphael.format. Replaces construction of type “`{<name>}`” to the corresponding argument.\\n     **\\n     > Parameters\\n     **\\n     - token (string) string to format\\n     - json (object) object which properties will be used as a replacement\\n     = (string) formated string\\n     > Usage\\n     | // this will draw a rectangular shape equivalent to \\\"M10,20h40v50h-40z\\\"\\n     | paper.path(Raphael.fullfill(\\\"M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z\\\", {\\n     |     x: 10,\\n     |     y: 20,\\n     |     dim: {\\n     |         width: 40,\\n     |         height: 50,\\n     |         \\\"negative width\\\": -40\\n     |     }\\n     | }));\\n     \\\\*/\\n    R.fullfill = (function () {\\n        var tokenRegex = /\\\\{([^\\\\}]+)\\\\}/g,\\n            objNotationRegex = /(?:(?:^|\\\\.)(.+?)(?=\\\\[|\\\\.|$|\\\\()|\\\\[('|\\\")(.+?)\\\\2\\\\])(\\\\(\\\\))?/g, // matches .xxxxx or [\\\"xxxxx\\\"] to run over object properties\\n            replacer = function (all, key, obj) {\\n                var res = obj;\\n                key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {\\n                    name = name || quotedName;\\n                    if (res) {\\n                        if (name in res) {\\n                            res = res[name];\\n                        }\\n                        typeof res == \\\"function\\\" && isFunc && (res = res());\\n                    }\\n                });\\n                res = (res == null || res == obj ? all : res) + \\\"\\\";\\n                return res;\\n            };\\n        return function (str, obj) {\\n            return String(str).replace(tokenRegex, function (all, key) {\\n                return replacer(all, key, obj);\\n            });\\n        };\\n    })();\\n    /*\\\\\\n     * Raphael.ninja\\n     [ method ]\\n     **\\n     * If you want to leave no trace of Raphaël (Well, Raphaël creates only one global variable `Raphael`, but anyway.) You can use `ninja` method.\\n     * Beware, that in this case plugins could stop working, because they are depending on global variable existence.\\n     **\\n     = (object) Raphael object\\n     > Usage\\n     | (function (local_raphael) {\\n     |     var paper = local_raphael(10, 10, 320, 200);\\n     |     …\\n     | })(Raphael.ninja());\\n     \\\\*/\\n    R.ninja = function () {\\n        oldRaphael.was ? (g.win.Raphael = oldRaphael.is) : delete Raphael;\\n        return R;\\n    };\\n    /*\\\\\\n     * Raphael.st\\n     [ property (object) ]\\n     **\\n     * You can add your own method to elements and sets. It is wise to add a set method for each element method\\n     * you added, so you will be able to call the same method on sets too.\\n     **\\n     * See also @Raphael.el.\\n     > Usage\\n     | Raphael.el.red = function () {\\n     |     this.attr({fill: \\\"#f00\\\"});\\n     | };\\n     | Raphael.st.red = function () {\\n     |     this.forEach(function (el) {\\n     |         el.red();\\n     |     });\\n     | };\\n     | // then use it\\n     | paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();\\n     \\\\*/\\n    R.st = setproto;\\n\\n    eve.on(\\\"raphael.DOMload\\\", function () {\\n        loaded = true;\\n    });\\n\\n    // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\\n    (function (doc, loaded, f) {\\n        if (doc.readyState == null && doc.addEventListener){\\n            doc.addEventListener(loaded, f = function () {\\n                doc.removeEventListener(loaded, f, false);\\n                doc.readyState = \\\"complete\\\";\\n            }, false);\\n            doc.readyState = \\\"loading\\\";\\n        }\\n        function isLoaded() {\\n            (/in/).test(doc.readyState) ? setTimeout(isLoaded, 9) : R.eve(\\\"raphael.DOMload\\\");\\n        }\\n        isLoaded();\\n    })(document, \\\"DOMContentLoaded\\\");\\n\\n    return R;\\n}));\\n\\n// ┌─────────────────────────────────────────────────────────────────────┐ \\\\\\\\\\n// │ Raphaël 2.1.4 - JavaScript Vector Library                       │ \\\\\\\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ SVG Module                                                          │ \\\\\\\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\\\\\\\\\n// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\\\\\\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\\\\\\\\\n// └─────────────────────────────────────────────────────────────────────┘ \\\\\\\\\\n\\n(function (glob, factory) {\\n    if (typeof define === \\\"function\\\" && define.amd) {\\n        define(\\\"raphael.svg\\\", [\\\"raphael.core\\\"], function(raphael) {\\n            return factory(raphael);\\n        });\\n    } else if (typeof exports === \\\"object\\\") {\\n        factory(require(\\\"./raphael.core\\\"));\\n    } else {\\n        factory(glob.Raphael);\\n    }\\n}(this, function(R) {\\n    if (R && !R.svg) {\\n        return;\\n    }\\n\\n    var has = \\\"hasOwnProperty\\\",\\n        Str = String,\\n        toFloat = parseFloat,\\n        toInt = parseInt,\\n        math = Math,\\n        mmax = math.max,\\n        abs = math.abs,\\n        pow = math.pow,\\n        separator = /[, ]+/,\\n        eve = R.eve,\\n        E = \\\"\\\",\\n        S = \\\" \\\";\\n    var xlink = \\\"http://www.w3.org/1999/xlink\\\",\\n        markers = {\\n            block: \\\"M5,0 0,2.5 5,5z\\\",\\n            classic: \\\"M5,0 0,2.5 5,5 3.5,3 3.5,2z\\\",\\n            diamond: \\\"M2.5,0 5,2.5 2.5,5 0,2.5z\\\",\\n            open: \\\"M6,1 1,3.5 6,6\\\",\\n            oval: \\\"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\\\"\\n        },\\n        markerCounter = {};\\n    R.toString = function () {\\n        return  \\\"Your browser supports SVG.\\\\nYou are running Rapha\\\\xebl \\\" + this.version;\\n    };\\n    var $ = function (el, attr) {\\n            if (attr) {\\n                if (typeof el == \\\"string\\\") {\\n                    el = $(el);\\n                }\\n                for (var key in attr) if (attr[has](key)) {\\n                    if (key.substring(0, 6) == \\\"xlink:\\\") {\\n                        el.setAttributeNS(xlink, key.substring(6), Str(attr[key]));\\n                    } else {\\n                        el.setAttribute(key, Str(attr[key]));\\n                    }\\n                }\\n            } else {\\n                el = R._g.doc.createElementNS(\\\"http://www.w3.org/2000/svg\\\", el);\\n                el.style && (el.style.webkitTapHighlightColor = \\\"rgba(0,0,0,0)\\\");\\n            }\\n            return el;\\n        },\\n        addGradientFill = function (element, gradient) {\\n            var type = \\\"linear\\\",\\n                id = element.id + gradient,\\n                fx = .5, fy = .5,\\n                o = element.node,\\n                SVG = element.paper,\\n                s = o.style,\\n                el = R._g.doc.getElementById(id);\\n            if (!el) {\\n                gradient = Str(gradient).replace(R._radial_gradient, function (all, _fx, _fy) {\\n                    type = \\\"radial\\\";\\n                    if (_fx && _fy) {\\n                        fx = toFloat(_fx);\\n                        fy = toFloat(_fy);\\n                        var dir = ((fy > .5) * 2 - 1);\\n                        pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&\\n                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&\\n                        fy != .5 &&\\n                        (fy = fy.toFixed(5) - 1e-5 * dir);\\n                    }\\n                    return E;\\n                });\\n                gradient = gradient.split(/\\\\s*\\\\-\\\\s*/);\\n                if (type == \\\"linear\\\") {\\n                    var angle = gradient.shift();\\n                    angle = -toFloat(angle);\\n                    if (isNaN(angle)) {\\n                        return null;\\n                    }\\n                    var vector = [0, 0, math.cos(R.rad(angle)), math.sin(R.rad(angle))],\\n                        max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);\\n                    vector[2] *= max;\\n                    vector[3] *= max;\\n                    if (vector[2] < 0) {\\n                        vector[0] = -vector[2];\\n                        vector[2] = 0;\\n                    }\\n                    if (vector[3] < 0) {\\n                        vector[1] = -vector[3];\\n                        vector[3] = 0;\\n                    }\\n                }\\n                var dots = R._parseDots(gradient);\\n                if (!dots) {\\n                    return null;\\n                }\\n                id = id.replace(/[\\\\(\\\\)\\\\s,\\\\xb0#]/g, \\\"_\\\");\\n\\n                if (element.gradient && id != element.gradient.id) {\\n                    SVG.defs.removeChild(element.gradient);\\n                    delete element.gradient;\\n                }\\n\\n                if (!element.gradient) {\\n                    el = $(type + \\\"Gradient\\\", {id: id});\\n                    element.gradient = el;\\n                    $(el, type == \\\"radial\\\" ? {\\n                        fx: fx,\\n                        fy: fy\\n                    } : {\\n                        x1: vector[0],\\n                        y1: vector[1],\\n                        x2: vector[2],\\n                        y2: vector[3],\\n                        gradientTransform: element.matrix.invert()\\n                    });\\n                    SVG.defs.appendChild(el);\\n                    for (var i = 0, ii = dots.length; i < ii; i++) {\\n                        el.appendChild($(\\\"stop\\\", {\\n                            offset: dots[i].offset ? dots[i].offset : i ? \\\"100%\\\" : \\\"0%\\\",\\n                            \\\"stop-color\\\": dots[i].color || \\\"#fff\\\",\\n                            \\\"stop-opacity\\\": isFinite(dots[i].opacity) ? dots[i].opacity : 1\\n                        }));\\n                    }\\n                }\\n            }\\n            /* FREEGROUP: don't push URL parameter into the drawing. This will break Apps with \\\"?\\\" in the URL\\n             * see: https://github.com/DmitryBaranovskiy/raphael/issues/693\\n             **/\\n            var url =\\\"\\\";//document.location.protocol + \\\"//\\\" + document.location.host  + document.location.pathname;\\n            $(o, {\\n                fill: \\\"url('\\\" + url + \\\"#\\\" + id + \\\"')\\\",\\n                opacity: 1,\\n                \\\"fill-opacity\\\": 1\\n            });\\n\\n            s.fill = E;\\n            s.opacity = 1;\\n            s.fillOpacity = 1;\\n            return 1;\\n        },\\n        updatePosition = function (o) {\\n            var bbox = o.getBBox(1);\\n            $(o.pattern, {patternTransform: o.matrix.invert() + \\\" translate(\\\" + bbox.x + \\\",\\\" + bbox.y + \\\")\\\"});\\n        },\\n        addArrow = function (o, value, isEnd) {\\n            if (o.type == \\\"path\\\") {\\n                var values = Str(value).toLowerCase().split(\\\"-\\\"),\\n                    p = o.paper,\\n                    se = isEnd ? \\\"end\\\" : \\\"start\\\",\\n                    node = o.node,\\n                    attrs = o.attrs,\\n                    stroke = attrs[\\\"stroke-width\\\"],\\n                    i = values.length,\\n                    type = \\\"classic\\\",\\n                    from,\\n                    to,\\n                    dx,\\n                    refX,\\n                    attr,\\n                    w = 3,\\n                    h = 3,\\n                    t = 5;\\n                while (i--) {\\n                    switch (values[i]) {\\n                        case \\\"block\\\":\\n                        case \\\"classic\\\":\\n                        case \\\"oval\\\":\\n                        case \\\"diamond\\\":\\n                        case \\\"open\\\":\\n                        case \\\"none\\\":\\n                            type = values[i];\\n                            break;\\n                        case \\\"wide\\\": h = 5; break;\\n                        case \\\"narrow\\\": h = 2; break;\\n                        case \\\"long\\\": w = 5; break;\\n                        case \\\"short\\\": w = 2; break;\\n                    }\\n                }\\n                if (type == \\\"open\\\") {\\n                    w += 2;\\n                    h += 2;\\n                    t += 2;\\n                    dx = 1;\\n                    refX = isEnd ? 4 : 1;\\n                    attr = {\\n                        fill: \\\"none\\\",\\n                        stroke: attrs.stroke\\n                    };\\n                } else {\\n                    refX = dx = w / 2;\\n                    attr = {\\n                        fill: attrs.stroke,\\n                        stroke: \\\"none\\\"\\n                    };\\n                }\\n                if (o._.arrows) {\\n                    if (isEnd) {\\n                        o._.arrows.endPath && markerCounter[o._.arrows.endPath]--;\\n                        o._.arrows.endMarker && markerCounter[o._.arrows.endMarker]--;\\n                    } else {\\n                        o._.arrows.startPath && markerCounter[o._.arrows.startPath]--;\\n                        o._.arrows.startMarker && markerCounter[o._.arrows.startMarker]--;\\n                    }\\n                } else {\\n                    o._.arrows = {};\\n                }\\n                if (type != \\\"none\\\") {\\n                    var pathId = \\\"raphael-marker-\\\" + type,\\n                        markerId = \\\"raphael-marker-\\\" + se + type + w + h + \\\"-obj\\\" + o.id;\\n                    if (!R._g.doc.getElementById(pathId)) {\\n                        p.defs.appendChild($($(\\\"path\\\"), {\\n                            \\\"stroke-linecap\\\": \\\"round\\\",\\n                            d: markers[type],\\n                            id: pathId\\n                        }));\\n                        markerCounter[pathId] = 1;\\n                    } else {\\n                        markerCounter[pathId]++;\\n                    }\\n                    var marker = R._g.doc.getElementById(markerId),\\n                        use;\\n                    if (!marker) {\\n                        marker = $($(\\\"marker\\\"), {\\n                            id: markerId,\\n                            markerHeight: h,\\n                            markerWidth: w,\\n                            orient: \\\"auto\\\",\\n                            refX: refX,\\n                            refY: h / 2\\n                        });\\n                        use = $($(\\\"use\\\"), {\\n                            \\\"xlink:href\\\": \\\"#\\\" + pathId,\\n                            transform: (isEnd ? \\\"rotate(180 \\\" + w / 2 + \\\" \\\" + h / 2 + \\\") \\\" : E) + \\\"scale(\\\" + w / t + \\\",\\\" + h / t + \\\")\\\",\\n                            \\\"stroke-width\\\": (1 / ((w / t + h / t) / 2)).toFixed(4)\\n                        });\\n                        marker.appendChild(use);\\n                        p.defs.appendChild(marker);\\n                        markerCounter[markerId] = 1;\\n                    } else {\\n                        markerCounter[markerId]++;\\n                        use = marker.getElementsByTagName(\\\"use\\\")[0];\\n                    }\\n                    $(use, attr);\\n                    var delta = dx * (type != \\\"diamond\\\" && type != \\\"oval\\\");\\n                    if (isEnd) {\\n                        from = o._.arrows.startdx * stroke || 0;\\n                        to = R.getTotalLength(attrs.path) - delta * stroke;\\n                    } else {\\n                        from = delta * stroke;\\n                        to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\\n                    }\\n                    attr = {};\\n                    attr[\\\"marker-\\\" + se] = \\\"url(#\\\" + markerId + \\\")\\\";\\n                    if (to || from) {\\n                        attr.d = R.getSubpath(attrs.path, from, to);\\n                    }\\n                    $(node, attr);\\n                    o._.arrows[se + \\\"Path\\\"] = pathId;\\n                    o._.arrows[se + \\\"Marker\\\"] = markerId;\\n                    o._.arrows[se + \\\"dx\\\"] = delta;\\n                    o._.arrows[se + \\\"Type\\\"] = type;\\n                    o._.arrows[se + \\\"String\\\"] = value;\\n                } else {\\n                    if (isEnd) {\\n                        from = o._.arrows.startdx * stroke || 0;\\n                        to = R.getTotalLength(attrs.path) - from;\\n                    } else {\\n                        from = 0;\\n                        to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\\n                    }\\n                    o._.arrows[se + \\\"Path\\\"] && $(node, {d: R.getSubpath(attrs.path, from, to)});\\n                    delete o._.arrows[se + \\\"Path\\\"];\\n                    delete o._.arrows[se + \\\"Marker\\\"];\\n                    delete o._.arrows[se + \\\"dx\\\"];\\n                    delete o._.arrows[se + \\\"Type\\\"];\\n                    delete o._.arrows[se + \\\"String\\\"];\\n                }\\n                for (attr in markerCounter) if (markerCounter[has](attr) && !markerCounter[attr]) {\\n                    var item = R._g.doc.getElementById(attr);\\n                    item && item.parentNode.removeChild(item);\\n                }\\n            }\\n        },\\n        dasharray = {\\n            \\\"-\\\": [3, 1],\\n            \\\".\\\": [1, 1],\\n            \\\"-.\\\": [3, 1, 1, 1],\\n            \\\"-..\\\": [3, 1, 1, 1, 1, 1],\\n            \\\". \\\": [1, 3],\\n            \\\"- \\\": [4, 3],\\n            \\\"--\\\": [8, 3],\\n            \\\"- .\\\": [4, 3, 1, 3],\\n            \\\"--.\\\": [8, 3, 1, 3],\\n            \\\"--..\\\": [8, 3, 1, 3, 1, 3]\\n        },\\n        addDashes = function (o, value, params) {\\n            value = dasharray[Str(value).toLowerCase()];\\n            if (value) {\\n                var width = o.attrs[\\\"stroke-width\\\"] || \\\"1\\\",\\n                    butt = {round: width, square: width, butt: 0}[o.attrs[\\\"stroke-linecap\\\"] || params[\\\"stroke-linecap\\\"]] || 0,\\n                    dashes = [],\\n                    i = value.length;\\n                while (i--) {\\n                    dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;\\n                }\\n                $(o.node, {\\\"stroke-dasharray\\\": dashes.join(\\\",\\\")});\\n            }\\n            else {\\n                $(o.node, {\\\"stroke-dasharray\\\": \\\"none\\\"});\\n            }\\n        },\\n        setFillAndStroke = function (o, params) {\\n            var node = o.node,\\n                attrs = o.attrs,\\n                vis = node.style.visibility;\\n            node.style.visibility = \\\"hidden\\\";\\n            for (var att in params) {\\n                if (params[has](att)) {\\n                    if (!R._availableAttrs[has](att)) {\\n                        continue;\\n                    }\\n                    var value = params[att];\\n                    attrs[att] = value;\\n                    switch (att) {\\n                        case \\\"blur\\\":\\n                            o.blur(value);\\n                            break;\\n                        case \\\"title\\\":\\n                            var title = node.getElementsByTagName(\\\"title\\\");\\n\\n                            // Use the existing <title>.\\n                            if (title.length && (title = title[0])) {\\n                                title.firstChild.nodeValue = value;\\n                            } else {\\n                                title = $(\\\"title\\\");\\n                                var val = R._g.doc.createTextNode(value);\\n                                title.appendChild(val);\\n                                node.appendChild(title);\\n                            }\\n                            break;\\n                        case \\\"href\\\":\\n                        case \\\"target\\\":\\n                            var pn = node.parentNode;\\n                            if (pn.tagName.toLowerCase() != \\\"a\\\") {\\n                                var hl = $(\\\"a\\\");\\n                                pn.insertBefore(hl, node);\\n                                hl.appendChild(node);\\n                                pn = hl;\\n                            }\\n                            if (att == \\\"target\\\") {\\n                                pn.setAttributeNS(xlink, \\\"show\\\", value == \\\"blank\\\" ? \\\"new\\\" : value);\\n                            } else {\\n                                pn.setAttributeNS(xlink, att, value);\\n                            }\\n                            break;\\n                        case \\\"cursor\\\":\\n                            node.style.cursor = value;\\n                            break;\\n                        case \\\"transform\\\":\\n                            o.transform(value);\\n                            break;\\n                        case \\\"arrow-start\\\":\\n                            addArrow(o, value);\\n                            break;\\n                        case \\\"arrow-end\\\":\\n                            addArrow(o, value, 1);\\n                            break;\\n                        case \\\"clip-rect\\\":\\n                            var rect = Str(value).split(separator);\\n                            if (rect.length == 4) {\\n                                o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);\\n                                var el = $(\\\"clipPath\\\"),\\n                                    rc = $(\\\"rect\\\");\\n                                el.id = R.createUUID();\\n                                $(rc, {\\n                                    x: rect[0],\\n                                    y: rect[1],\\n                                    width: rect[2],\\n                                    height: rect[3]\\n                                });\\n                                el.appendChild(rc);\\n                                o.paper.defs.appendChild(el);\\n                                $(node, {\\\"clip-path\\\": \\\"url(#\\\" + el.id + \\\")\\\"});\\n                                o.clip = rc;\\n                            }\\n                            if (!value) {\\n                                var path = node.getAttribute(\\\"clip-path\\\");\\n                                if (path) {\\n                                    var clip = R._g.doc.getElementById(path.replace(/(^url\\\\(#|\\\\)$)/g, E));\\n                                    clip && clip.parentNode.removeChild(clip);\\n                                    $(node, {\\\"clip-path\\\": E});\\n                                    delete o.clip;\\n                                }\\n                            }\\n                            break;\\n                        case \\\"path\\\":\\n                            if (o.type == \\\"path\\\") {\\n                                $(node, {d: value ? attrs.path = R._pathToAbsolute(value) : \\\"M0,0\\\"});\\n                                o._.dirty = 1;\\n                                if (o._.arrows) {\\n                                    \\\"startString\\\" in o._.arrows && addArrow(o, o._.arrows.startString);\\n                                    \\\"endString\\\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\\n                                }\\n                            }\\n                            break;\\n                        case \\\"width\\\":\\n                            node.setAttribute(att, value);\\n                            o._.dirty = 1;\\n                            if (attrs.fx) {\\n                                att = \\\"x\\\";\\n                                value = attrs.x;\\n                            } else {\\n                                break;\\n                            }\\n                        case \\\"x\\\":\\n                            if (attrs.fx) {\\n                                value = -attrs.x - (attrs.width || 0);\\n                            }\\n                        case \\\"rx\\\":\\n                            if (att == \\\"rx\\\" && o.type == \\\"rect\\\") {\\n                                break;\\n                            }\\n                        case \\\"cx\\\":\\n                            node.setAttribute(att, value);\\n                            o.pattern && updatePosition(o);\\n                            o._.dirty = 1;\\n                            break;\\n                        case \\\"height\\\":\\n                            node.setAttribute(att, value);\\n                            o._.dirty = 1;\\n                            if (attrs.fy) {\\n                                att = \\\"y\\\";\\n                                value = attrs.y;\\n                            } else {\\n                                break;\\n                            }\\n                        case \\\"y\\\":\\n                            if (attrs.fy) {\\n                                value = -attrs.y - (attrs.height || 0);\\n                            }\\n                        case \\\"ry\\\":\\n                            if (att == \\\"ry\\\" && o.type == \\\"rect\\\") {\\n                                break;\\n                            }\\n                        case \\\"cy\\\":\\n                            node.setAttribute(att, value);\\n                            o.pattern && updatePosition(o);\\n                            o._.dirty = 1;\\n                            break;\\n                        case \\\"r\\\":\\n                            if (o.type == \\\"rect\\\") {\\n                                $(node, {rx: value, ry: value});\\n                            } else {\\n                                node.setAttribute(att, value);\\n                            }\\n                            o._.dirty = 1;\\n                            break;\\n                        case \\\"src\\\":\\n                            if (o.type == \\\"image\\\") {\\n                                node.setAttributeNS(xlink, \\\"href\\\", value);\\n                            }\\n                            break;\\n                        case \\\"stroke-width\\\":\\n                            /* FREEGROUP fix\\n                             * draw2d version 3.0.3\\n                             *\\n                             * don't scale the line width if the user resize an shape/element.\\n                             * Obscure stroke-width in case of \\\"Draw2D touch\\\" usage\\n                             */\\n                            if(!attrs[\\\"stroke-scale\\\"]){\\n                                if (o._.sx != 1 || o._.sy != 1) {\\n                                    value /= mmax(abs(o._.sx), abs(o._.sy)) || 1;\\n                                }\\n                                if (o.paper._vbSize) {\\n                                //    value *= o.paper._vbSize;\\n                                }\\n                            }\\n\\n\\n                            node.setAttribute(att, value);\\n                            if (attrs[\\\"stroke-dasharray\\\"]) {\\n                                addDashes(o, attrs[\\\"stroke-dasharray\\\"], params);\\n                            }\\n                            if (o._.arrows) {\\n                                \\\"startString\\\" in o._.arrows && addArrow(o, o._.arrows.startString);\\n                                \\\"endString\\\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\\n                            }\\n                            break;\\n                        case \\\"stroke-dasharray\\\":\\n                            addDashes(o, value, params);\\n                            break;\\n                        case \\\"fill\\\":\\n                            var isURL = Str(value).match(R._ISURL);\\n                            if (isURL) {\\n                                el = $(\\\"pattern\\\");\\n                                var ig = $(\\\"image\\\");\\n                                el.id = R.createUUID();\\n                                $(el, {x: 0, y: 0, patternUnits: \\\"userSpaceOnUse\\\", height: 1, width: 1});\\n                                $(ig, {x: 0, y: 0, \\\"xlink:href\\\": isURL[1]});\\n                                el.appendChild(ig);\\n\\n                                (function (el) {\\n                                    R._preload(isURL[1], function () {\\n                                        var w = this.offsetWidth,\\n                                            h = this.offsetHeight;\\n                                        $(el, {width: w, height: h});\\n                                        $(ig, {width: w, height: h});\\n                                    });\\n                                })(el);\\n                                o.paper.defs.appendChild(el);\\n                                $(node, {fill: \\\"url(#\\\" + el.id + \\\")\\\"});\\n                                o.pattern = el;\\n                                o.pattern && updatePosition(o);\\n                                break;\\n                            }\\n                            var clr = R.getRGB(value);\\n                            if (!clr.error) {\\n                                delete params.gradient;\\n                                delete attrs.gradient;\\n                                !R.is(attrs.opacity, \\\"undefined\\\") &&\\n                                R.is(params.opacity, \\\"undefined\\\") &&\\n                                $(node, {opacity: attrs.opacity});\\n                                !R.is(attrs[\\\"fill-opacity\\\"], \\\"undefined\\\") &&\\n                                R.is(params[\\\"fill-opacity\\\"], \\\"undefined\\\") &&\\n                                $(node, {\\\"fill-opacity\\\": attrs[\\\"fill-opacity\\\"]});\\n                            } else if ((o.type == \\\"circle\\\" || o.type == \\\"ellipse\\\" || Str(value).charAt() != \\\"r\\\") && addGradientFill(o, value)) {\\n                                if (\\\"opacity\\\" in attrs || \\\"fill-opacity\\\" in attrs) {\\n                                    var gradient = R._g.doc.getElementById(node.getAttribute(\\\"fill\\\").replace(/^url\\\\(#|\\\\)$/g, E));\\n                                    if (gradient) {\\n                                        var stops = gradient.getElementsByTagName(\\\"stop\\\");\\n                                        $(stops[stops.length - 1], {\\\"stop-opacity\\\": (\\\"opacity\\\" in attrs ? attrs.opacity : 1) * (\\\"fill-opacity\\\" in attrs ? attrs[\\\"fill-opacity\\\"] : 1)});\\n                                    }\\n                                }\\n                                attrs.gradient = value;\\n                                attrs.fill = \\\"none\\\";\\n                                break;\\n                            }\\n                            clr[has](\\\"opacity\\\") && $(node, {\\\"fill-opacity\\\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\\n                        case \\\"stroke\\\":\\n                            clr = R.getRGB(value);\\n                            node.setAttribute(att, clr.hex);\\n                            att == \\\"stroke\\\" && clr[has](\\\"opacity\\\") && $(node, {\\\"stroke-opacity\\\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\\n                            if (att == \\\"stroke\\\" && o._.arrows) {\\n                                \\\"startString\\\" in o._.arrows && addArrow(o, o._.arrows.startString);\\n                                \\\"endString\\\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\\n                            }\\n                            break;\\n                        case \\\"gradient\\\":\\n                            (o.type == \\\"circle\\\" || o.type == \\\"ellipse\\\" || Str(value).charAt() != \\\"r\\\") && addGradientFill(o, value);\\n                            break;\\n                        case \\\"opacity\\\":\\n                            if (attrs.gradient && !attrs[has](\\\"stroke-opacity\\\")) {\\n                                $(node, {\\\"stroke-opacity\\\": value > 1 ? value / 100 : value});\\n                            }\\n                        // fall\\n                        case \\\"fill-opacity\\\":\\n                            if (attrs.gradient) {\\n                                gradient = R._g.doc.getElementById(node.getAttribute(\\\"fill\\\").replace(/^url\\\\(#|\\\\)$/g, E));\\n                                if (gradient) {\\n                                    stops = gradient.getElementsByTagName(\\\"stop\\\");\\n                                    // FREEGROUP FIX\\n                                    for (gri = 0, grii = stops.length; gri < grii; gri++) {\\n                                        $(stops[gri], {\\\"stop-opacity\\\": value});\\n                                    }\\n                                    // END FIX\\n                                }\\n                                break;\\n                            }\\n                        default:\\n                            att == \\\"font-size\\\" && (value = toInt(value, 10) + \\\"px\\\");\\n                            var cssrule = att.replace(/(\\\\-.)/g, function (w) {\\n                                return w.substring(1).toUpperCase();\\n                            });\\n                            node.style[cssrule] = value;\\n                            o._.dirty = 1;\\n                            node.setAttribute(att, value);\\n                            break;\\n                    }\\n                }\\n            }\\n\\n            tuneText(o, params);\\n            node.style.visibility = vis;\\n        },\\n        leading = 1.2,\\n        tuneText = function (el, params) {\\n            if (el.type != \\\"text\\\" || !(params[has](\\\"text\\\") || params[has](\\\"font\\\") || params[has](\\\"font-size\\\") || params[has](\\\"x\\\") || params[has](\\\"y\\\"))) {\\n                return;\\n            }\\n            var a = el.attrs,\\n                node = el.node,\\n                fontSize = node.firstChild ? toInt(R._g.doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue(\\\"font-size\\\"), 10) : 10;\\n\\n            if (params[has](\\\"text\\\")) {\\n                a.text = params.text;\\n                while (node.firstChild) {\\n                    node.removeChild(node.firstChild);\\n                }\\n                var texts = Str(params.text).split(\\\"\\\\n\\\"),\\n                    tspans = [],\\n                    tspan;\\n                for (var i = 0, ii = texts.length; i < ii; i++) {\\n                    tspan = $(\\\"tspan\\\");\\n                    i && $(tspan, {dy: fontSize * leading, x: a.x});\\n                    tspan.appendChild(R._g.doc.createTextNode(texts[i]));\\n                    node.appendChild(tspan);\\n                    tspans[i] = tspan;\\n                }\\n            } else {\\n                tspans = node.getElementsByTagName(\\\"tspan\\\");\\n                for (i = 0, ii = tspans.length; i < ii; i++) if (i) {\\n                    $(tspans[i], {dy: fontSize * leading, x: a.x});\\n                } else {\\n                    $(tspans[0], {dy: 0});\\n                }\\n            }\\n            $(node, {x: a.x, y: a.y});\\n            el._.dirty = 1;\\n            var bb = el._getBBox(),\\n                dif = a.y - (bb.y + bb.height / 2);\\n            dif && R.is(dif, \\\"finite\\\") && $(tspans[0], {dy: dif});\\n        },\\n        getRealNode = function (node) {\\n            if (node.parentNode && node.parentNode.tagName.toLowerCase() === \\\"a\\\") {\\n                return node.parentNode;\\n            } else {\\n                return node;\\n            }\\n        },\\n        Element = function (node, svg) {\\n            var X = 0,\\n                Y = 0;\\n            /*\\\\\\n             * Element.node\\n             [ property (object) ]\\n             **\\n             * Gives you a reference to the DOM object, so you can assign event handlers or just mess around.\\n             **\\n             * Note: Don’t mess with it.\\n             > Usage\\n             | // draw a circle at coordinate 10,10 with radius of 10\\n             | var c = paper.circle(10, 10, 10);\\n             | c.node.onclick = function () {\\n             |     c.attr(\\\"fill\\\", \\\"red\\\");\\n             | };\\n             \\\\*/\\n            this[0] = this.node = node;\\n            /*\\\\\\n             * Element.raphael\\n             [ property (object) ]\\n             **\\n             * Internal reference to @Raphael object. In case it is not available.\\n             > Usage\\n             | Raphael.el.red = function () {\\n             |     var hsb = this.paper.raphael.rgb2hsb(this.attr(\\\"fill\\\"));\\n             |     hsb.h = 1;\\n             |     this.attr({fill: this.paper.raphael.hsb2rgb(hsb).hex});\\n             | }\\n             \\\\*/\\n            node.raphael = true;\\n            /*\\\\\\n             * Element.id\\n             [ property (number) ]\\n             **\\n             * Unique id of the element. Especially useful when you want to listen to events of the element,\\n             * because all events are fired in format `<module>.<action>.<id>`. Also useful for @Paper.getById method.\\n             \\\\*/\\n            this.id = R._oid++;\\n            node.raphaelid = this.id;\\n            this.matrix = R.matrix();\\n            this.realPath = null;\\n            /*\\\\\\n             * Element.paper\\n             [ property (object) ]\\n             **\\n             * Internal reference to “paper” where object drawn. Mainly for use in plugins and element extensions.\\n             > Usage\\n             | Raphael.el.cross = function () {\\n             |     this.attr({fill: \\\"red\\\"});\\n             |     this.paper.path(\\\"M10,10L50,50M50,10L10,50\\\")\\n             |         .attr({stroke: \\\"red\\\"});\\n             | }\\n             \\\\*/\\n            this.paper = svg;\\n            this.attrs = this.attrs || {};\\n            this._ = {\\n                transform: [],\\n                sx: 1,\\n                sy: 1,\\n                deg: 0,\\n                dx: 0,\\n                dy: 0,\\n                dirty: 1\\n            };\\n            !svg.bottom && (svg.bottom = this);\\n            /*\\\\\\n             * Element.prev\\n             [ property (object) ]\\n             **\\n             * Reference to the previous element in the hierarchy.\\n             \\\\*/\\n            this.prev = svg.top;\\n            svg.top && (svg.top.next = this);\\n            svg.top = this;\\n            /*\\\\\\n             * Element.next\\n             [ property (object) ]\\n             **\\n             * Reference to the next element in the hierarchy.\\n             \\\\*/\\n            this.next = null;\\n        },\\n        elproto = R.el;\\n\\n    Element.prototype = elproto;\\n    elproto.constructor = Element;\\n\\n    R._engine.path = function (pathString, SVG) {\\n        var el = $(\\\"path\\\");\\n        SVG.canvas && SVG.canvas.appendChild(el);\\n        var p = new Element(el, SVG);\\n        p.type = \\\"path\\\";\\n        setFillAndStroke(p, {\\n            fill: \\\"none\\\",\\n            stroke: \\\"#000\\\",\\n            path: pathString\\n        });\\n        return p;\\n    };\\n    /*\\\\\\n     * Element.rotate\\n     [ method ]\\n     **\\n     * Deprecated! Use @Element.transform instead.\\n     * Adds rotation by given angle around given point to the list of\\n     * transformations of the element.\\n     > Parameters\\n     - deg (number) angle in degrees\\n     - cx (number) #optional x coordinate of the centre of rotation\\n     - cy (number) #optional y coordinate of the centre of rotation\\n     * If cx & cy aren’t specified centre of the shape is used as a point of rotation.\\n     = (object) @Element\\n     \\\\*/\\n    elproto.rotate = function (deg, cx, cy) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        deg = Str(deg).split(separator);\\n        if (deg.length - 1) {\\n            cx = toFloat(deg[1]);\\n            cy = toFloat(deg[2]);\\n        }\\n        deg = toFloat(deg[0]);\\n        (cy == null) && (cx = cy);\\n        if (cx == null || cy == null) {\\n            var bbox = this.getBBox(1);\\n            cx = bbox.x + bbox.width / 2;\\n            cy = bbox.y + bbox.height / 2;\\n        }\\n        this.transform(this._.transform.concat([[\\\"r\\\", deg, cx, cy]]));\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.scale\\n     [ method ]\\n     **\\n     * Deprecated! Use @Element.transform instead.\\n     * Adds scale by given amount relative to given point to the list of\\n     * transformations of the element.\\n     > Parameters\\n     - sx (number) horisontal scale amount\\n     - sy (number) vertical scale amount\\n     - cx (number) #optional x coordinate of the centre of scale\\n     - cy (number) #optional y coordinate of the centre of scale\\n     * If cx & cy aren’t specified centre of the shape is used instead.\\n     = (object) @Element\\n     \\\\*/\\n    elproto.scale = function (sx, sy, cx, cy) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        sx = Str(sx).split(separator);\\n        if (sx.length - 1) {\\n            sy = toFloat(sx[1]);\\n            cx = toFloat(sx[2]);\\n            cy = toFloat(sx[3]);\\n        }\\n        sx = toFloat(sx[0]);\\n        (sy == null) && (sy = sx);\\n        (cy == null) && (cx = cy);\\n        if (cx == null || cy == null) {\\n            var bbox = this.getBBox(1);\\n        }\\n        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\\n        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\\n        this.transform(this._.transform.concat([[\\\"s\\\", sx, sy, cx, cy]]));\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.translate\\n     [ method ]\\n     **\\n     * Deprecated! Use @Element.transform instead.\\n     * Adds translation by given amount to the list of transformations of the element.\\n     > Parameters\\n     - dx (number) horisontal shift\\n     - dy (number) vertical shift\\n     = (object) @Element\\n     \\\\*/\\n    elproto.translate = function (dx, dy) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        dx = Str(dx).split(separator);\\n        if (dx.length - 1) {\\n            dy = toFloat(dx[1]);\\n        }\\n        dx = toFloat(dx[0]) || 0;\\n        dy = +dy || 0;\\n        this.transform(this._.transform.concat([[\\\"t\\\", dx, dy]]));\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.transform\\n     [ method ]\\n     **\\n     * Adds transformation to the element which is separate to other attributes,\\n     * i.e. translation doesn’t change `x` or `y` of the rectange. The format\\n     * of transformation string is similar to the path string syntax:\\n     | \\\"t100,100r30,100,100s2,2,100,100r45s1.5\\\"\\n     * Each letter is a command. There are four commands: `t` is for translate, `r` is for rotate, `s` is for\\n     * scale and `m` is for matrix.\\n     *\\n     * There are also alternative “absolute” translation, rotation and scale: `T`, `R` and `S`. They will not take previous transformation into account. For example, `...T100,0` will always move element 100 px horisontally, while `...t100,0` could move it vertically if there is `r90` before. Just compare results of `r90t100,0` and `r90T100,0`.\\n     *\\n     * So, the example line above could be read like “translate by 100, 100; rotate 30° around 100, 100; scale twice around 100, 100;\\n     * rotate 45° around centre; scale 1.5 times relative to centre”. As you can see rotate and scale commands have origin\\n     * coordinates as optional parameters, the default is the centre point of the element.\\n     * Matrix accepts six parameters.\\n     > Usage\\n     | var el = paper.rect(10, 20, 300, 200);\\n     | // translate 100, 100, rotate 45°, translate -100, 0\\n     | el.transform(\\\"t100,100r45t-100,0\\\");\\n     | // if you want you can append or prepend transformations\\n     | el.transform(\\\"...t50,50\\\");\\n     | el.transform(\\\"s2...\\\");\\n     | // or even wrap\\n     | el.transform(\\\"t50,50...t-50-50\\\");\\n     | // to reset transformation call method with empty string\\n     | el.transform(\\\"\\\");\\n     | // to get current value call it without parameters\\n     | console.log(el.transform());\\n     > Parameters\\n     - tstr (string) #optional transformation string\\n     * If tstr isn’t specified\\n     = (string) current transformation string\\n     * else\\n     = (object) @Element\\n     \\\\*/\\n    elproto.transform = function (tstr) {\\n        var _ = this._;\\n        if (tstr == null) {\\n            return _.transform;\\n        }\\n        R._extractTransform(this, tstr);\\n\\n        this.clip && $(this.clip, {transform: this.matrix.invert()});\\n        this.pattern && updatePosition(this);\\n        this.node && $(this.node, {transform: this.matrix});\\n\\n        if (_.sx != 1 || _.sy != 1) {\\n            var sw = this.attrs[has](\\\"stroke-width\\\") ? this.attrs[\\\"stroke-width\\\"] : 1;\\n            this.attr({\\\"stroke-width\\\": sw});\\n        }\\n\\n        //Reduce transform string\\n        _.transform = this.matrix.toTransformString();\\n\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.hide\\n     [ method ]\\n     **\\n     * Makes element invisible. See @Element.show.\\n     = (object) @Element\\n     \\\\*/\\n    elproto.hide = function () {\\n        if(!this.removed) this.node.style.display = \\\"none\\\";\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.show\\n     [ method ]\\n     **\\n     * Makes element visible. See @Element.hide.\\n     = (object) @Element\\n     \\\\*/\\n    elproto.show = function () {\\n        if(!this.removed) this.node.style.display = \\\"\\\";\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.remove\\n     [ method ]\\n     **\\n     * Removes element from the paper.\\n     \\\\*/\\n    elproto.remove = function () {\\n        var node = getRealNode(this.node);\\n        if (this.removed || !node.parentNode) {\\n            return;\\n        }\\n        var paper = this.paper;\\n        paper.__set__ && paper.__set__.exclude(this);\\n        eve.unbind(\\\"raphael.*.*.\\\" + this.id);\\n        if (this.gradient) {\\n            paper.defs.removeChild(this.gradient);\\n        }\\n        R._tear(this, paper);\\n\\n        node.parentNode.removeChild(node);\\n\\n        // Remove custom data for element\\n        this.removeData();\\n\\n        for (var i in this) {\\n            this[i] = typeof this[i] == \\\"function\\\" ? R._removedFactory(i) : null;\\n        }\\n        this.removed = true;\\n    };\\n    elproto._getBBox = function () {\\n        if (this.node.style.display == \\\"none\\\") {\\n            this.show();\\n            var hide = true;\\n        }\\n        var canvasHidden = false,\\n            containerStyle;\\n        if (this.paper.canvas.parentElement) {\\n            containerStyle = this.paper.canvas.parentElement.style;\\n        } //IE10+ can't find parentElement\\n        else if (this.paper.canvas.parentNode) {\\n            containerStyle = this.paper.canvas.parentNode.style;\\n        }\\n\\n        if(containerStyle && containerStyle.display == \\\"none\\\") {\\n            canvasHidden = true;\\n            containerStyle.display = \\\"\\\";\\n        }\\n        var bbox = {};\\n        try {\\n            bbox = this.node.getBBox();\\n        } catch(e) {\\n            // Firefox 3.0.x, 25.0.1 (probably more versions affected) play badly here - possible fix\\n            bbox = {\\n                x: this.node.clientLeft,\\n                y: this.node.clientTop,\\n                width: this.node.clientWidth,\\n                height: this.node.clientHeight\\n            }\\n        } finally {\\n            bbox = bbox || {};\\n            if(canvasHidden){\\n                containerStyle.display = \\\"none\\\";\\n            }\\n        }\\n        hide && this.hide();\\n        return bbox;\\n    };\\n    /*\\\\\\n     * Element.attr\\n     [ method ]\\n     **\\n     * Sets the attributes of the element.\\n     > Parameters\\n     - attrName (string) attribute’s name\\n     - value (string) value\\n     * or\\n     - params (object) object of name/value pairs\\n     * or\\n     - attrName (string) attribute’s name\\n     * or\\n     - attrNames (array) in this case method returns array of current values for given attribute names\\n     = (object) @Element if attrsName & value or params are passed in.\\n     = (...) value of the attribute if only attrsName is passed in.\\n     = (array) array of values of the attribute if attrsNames is passed in.\\n     = (object) object of attributes if nothing is passed in.\\n     > Possible parameters\\n     # <p>Please refer to the <a href=\\\"http://www.w3.org/TR/SVG/\\\" title=\\\"The W3C Recommendation for the SVG language describes these properties in detail.\\\">SVG specification</a> for an explanation of these parameters.</p>\\n     o arrow-end (string) arrowhead on the end of the path. The format for string is `<type>[-<width>[-<length>]]`. Possible types: `classic`, `block`, `open`, `oval`, `diamond`, `none`, width: `wide`, `narrow`, `medium`, length: `long`, `short`, `midium`.\\n     o clip-rect (string) comma or space separated values: x, y, width and height\\n     o cursor (string) CSS type of the cursor\\n     o cx (number) the x-axis coordinate of the center of the circle, or ellipse\\n     o cy (number) the y-axis coordinate of the center of the circle, or ellipse\\n     o fill (string) colour, gradient or image\\n     o fill-opacity (number)\\n     o font (string)\\n     o font-family (string)\\n     o font-size (number) font size in pixels\\n     o font-weight (string)\\n     o height (number)\\n     o href (string) URL, if specified element behaves as hyperlink\\n     o opacity (number)\\n     o path (string) SVG path string format\\n     o r (number) radius of the circle, ellipse or rounded corner on the rect\\n     o rx (number) horisontal radius of the ellipse\\n     o ry (number) vertical radius of the ellipse\\n     o src (string) image URL, only works for @Element.image element\\n     o stroke (string) stroke colour\\n     o stroke-dasharray (string) [“”, “none”, “`-`”, “`.`”, “`-.`”, “`-..`”, “`. `”, “`- `”, “`--`”, “`- .`”, “`--.`”, “`--..`”]\\n     o stroke-linecap (string) [“`butt`”, “`square`”, “`round`”]\\n     o stroke-linejoin (string) [“`bevel`”, “`round`”, “`miter`”]\\n     o stroke-miterlimit (number)\\n     o stroke-opacity (number)\\n     o stroke-width (number) stroke width in pixels, default is '1'\\n     o target (string) used with href\\n     o text (string) contents of the text element. Use `\\\\n` for multiline text\\n     o text-anchor (string) [“`start`”, “`middle`”, “`end`”], default is “`middle`”\\n     o title (string) will create tooltip with a given text\\n     o transform (string) see @Element.transform\\n     o width (number)\\n     o x (number)\\n     o y (number)\\n     > Gradients\\n     * Linear gradient format: “`‹angle›-‹colour›[-‹colour›[:‹offset›]]*-‹colour›`”, example: “`90-#fff-#000`” – 90°\\n     * gradient from white to black or “`0-#fff-#f00:20-#000`” – 0° gradient from white via red (at 20%) to black.\\n     *\\n     * radial gradient: “`r[(‹fx›, ‹fy›)]‹colour›[-‹colour›[:‹offset›]]*-‹colour›`”, example: “`r#fff-#000`” –\\n     * gradient from white to black or “`r(0.25, 0.75)#fff-#000`” – gradient from white to black with focus point\\n     * at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can only be applied to circles and ellipses.\\n     > Path String\\n     # <p>Please refer to <a href=\\\"http://www.w3.org/TR/SVG/paths.html#PathData\\\" title=\\\"Details of a path’s data attribute’s format are described in the SVG specification.\\\">SVG documentation regarding path string</a>. Raphaël fully supports it.</p>\\n     > Colour Parsing\\n     # <ul>\\n     #     <li>Colour name (“<code>red</code>”, “<code>green</code>”, “<code>cornflowerblue</code>”, etc)</li>\\n     #     <li>#••• — shortened HTML colour: (“<code>#000</code>”, “<code>#fc0</code>”, etc)</li>\\n     #     <li>#•••••• — full length HTML colour: (“<code>#000000</code>”, “<code>#bd2300</code>”)</li>\\n     #     <li>rgb(•••, •••, •••) — red, green and blue channels’ values: (“<code>rgb(200,&nbsp;100,&nbsp;0)</code>”)</li>\\n     #     <li>rgb(•••%, •••%, •••%) — same as above, but in %: (“<code>rgb(100%,&nbsp;175%,&nbsp;0%)</code>”)</li>\\n     #     <li>rgba(•••, •••, •••, •••) — red, green and blue channels’ values: (“<code>rgba(200,&nbsp;100,&nbsp;0, .5)</code>”)</li>\\n     #     <li>rgba(•••%, •••%, •••%, •••%) — same as above, but in %: (“<code>rgba(100%,&nbsp;175%,&nbsp;0%, 50%)</code>”)</li>\\n     #     <li>hsb(•••, •••, •••) — hue, saturation and brightness values: (“<code>hsb(0.5,&nbsp;0.25,&nbsp;1)</code>”)</li>\\n     #     <li>hsb(•••%, •••%, •••%) — same as above, but in %</li>\\n     #     <li>hsba(•••, •••, •••, •••) — same as above, but with opacity</li>\\n     #     <li>hsl(•••, •••, •••) — almost the same as hsb, see <a href=\\\"http://en.wikipedia.org/wiki/HSL_and_HSV\\\" title=\\\"HSL and HSV - Wikipedia, the free encyclopedia\\\">Wikipedia page</a></li>\\n     #     <li>hsl(•••%, •••%, •••%) — same as above, but in %</li>\\n     #     <li>hsla(•••, •••, •••, •••) — same as above, but with opacity</li>\\n     #     <li>Optionally for hsb and hsl you could specify hue as a degree: “<code>hsl(240deg,&nbsp;1,&nbsp;.5)</code>” or, if you want to go fancy, “<code>hsl(240°,&nbsp;1,&nbsp;.5)</code>”</li>\\n     # </ul>\\n     \\\\*/\\n    elproto.attr = function (name, value) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        if (name == null) {\\n            var res = {};\\n            for (var a in this.attrs) if (this.attrs[has](a)) {\\n                res[a] = this.attrs[a];\\n            }\\n            res.gradient && res.fill == \\\"none\\\" && (res.fill = res.gradient) && delete res.gradient;\\n            res.transform = this._.transform;\\n            return res;\\n        }\\n        if (value == null && R.is(name, \\\"string\\\")) {\\n            if (name == \\\"fill\\\" && this.attrs.fill == \\\"none\\\" && this.attrs.gradient) {\\n                return this.attrs.gradient;\\n            }\\n            if (name == \\\"transform\\\") {\\n                return this._.transform;\\n            }\\n            var names = name.split(separator),\\n                out = {};\\n            for (var i = 0, ii = names.length; i < ii; i++) {\\n                name = names[i];\\n                if (name in this.attrs) {\\n                    out[name] = this.attrs[name];\\n                } else if (R.is(this.paper.customAttributes[name], \\\"function\\\")) {\\n                    out[name] = this.paper.customAttributes[name].def;\\n                } else {\\n                    out[name] = R._availableAttrs[name];\\n                }\\n            }\\n            return ii - 1 ? out : out[names[0]];\\n        }\\n        if (value == null && R.is(name, \\\"array\\\")) {\\n            out = {};\\n            for (i = 0, ii = name.length; i < ii; i++) {\\n                out[name[i]] = this.attr(name[i]);\\n            }\\n            return out;\\n        }\\n        if (value != null) {\\n            var params = {};\\n            params[name] = value;\\n        } else if (name != null && R.is(name, \\\"object\\\")) {\\n            params = name;\\n        }\\n        for (var key in params) {\\n            eve(\\\"raphael.attr.\\\" + key + \\\".\\\" + this.id, this, params[key]);\\n        }\\n        for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \\\"function\\\")) {\\n            var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\\n            this.attrs[key] = params[key];\\n            for (var subkey in par) if (par[has](subkey)) {\\n                params[subkey] = par[subkey];\\n            }\\n        }\\n        setFillAndStroke(this, params);\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.toFront\\n     [ method ]\\n     **\\n     * Moves the element so it is the closest to the viewer’s eyes, on top of other elements.\\n     = (object) @Element\\n     \\\\*/\\n    elproto.toFront = function () {\\n        if (this.removed) {\\n            return this;\\n        }\\n        var node = getRealNode(this.node);\\n        node.parentNode.appendChild(node);\\n        var svg = this.paper;\\n        svg.top != this && R._tofront(this, svg);\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.toBack\\n     [ method ]\\n     **\\n     * Moves the element so it is the furthest from the viewer’s eyes, behind other elements.\\n     = (object) @Element\\n     \\\\*/\\n    elproto.toBack = function () {\\n        if (this.removed) {\\n            return this;\\n        }\\n        var node = getRealNode(this.node);\\n        var parentNode = node.parentNode;\\n        parentNode.insertBefore(node, parentNode.firstChild);\\n        R._toback(this, this.paper);\\n        var svg = this.paper;\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.insertAfter\\n     [ method ]\\n     **\\n     * Inserts current object after the given one.\\n     = (object) @Element\\n     \\\\*/\\n    elproto.insertAfter = function (element) {\\n        if (this.removed || !element) {\\n            return this;\\n        }\\n\\n        var node = getRealNode(this.node);\\n        var afterNode = getRealNode(element.node || element[element.length - 1].node);\\n        if (afterNode.nextSibling) {\\n            afterNode.parentNode.insertBefore(node, afterNode.nextSibling);\\n        } else {\\n            afterNode.parentNode.appendChild(node);\\n        }\\n        R._insertafter(this, element, this.paper);\\n        return this;\\n    };\\n    /*\\\\\\n     * Element.insertBefore\\n     [ method ]\\n     **\\n     * Inserts current object before the given one.\\n     = (object) @Element\\n     \\\\*/\\n    elproto.insertBefore = function (element) {\\n        if (this.removed || !element) {\\n            return this;\\n        }\\n\\n        var node = getRealNode(this.node);\\n        var beforeNode = getRealNode(element.node || element[0].node);\\n        beforeNode.parentNode.insertBefore(node, beforeNode);\\n        R._insertbefore(this, element, this.paper);\\n        return this;\\n    };\\n    elproto.blur = function (size) {\\n        // Experimental. No Safari support. Use it on your own risk.\\n        var t = this;\\n        if (+size !== 0) {\\n            var fltr = $(\\\"filter\\\"),\\n                blur = $(\\\"feGaussianBlur\\\");\\n            t.attrs.blur = size;\\n            fltr.id = R.createUUID();\\n            $(blur, {stdDeviation: +size || 1.5});\\n            fltr.appendChild(blur);\\n            t.paper.defs.appendChild(fltr);\\n            t._blur = fltr;\\n            $(t.node, {filter: \\\"url(#\\\" + fltr.id + \\\")\\\"});\\n        } else {\\n            if (t._blur) {\\n                t._blur.parentNode.removeChild(t._blur);\\n                delete t._blur;\\n                delete t.attrs.blur;\\n            }\\n            t.node.removeAttribute(\\\"filter\\\");\\n        }\\n        return t;\\n    };\\n    R._engine.circle = function (svg, x, y, r) {\\n        var el = $(\\\"circle\\\");\\n        svg.canvas && svg.canvas.appendChild(el);\\n        var res = new Element(el, svg);\\n        res.attrs = {cx: x, cy: y, r: r, fill: \\\"none\\\", stroke: \\\"#000\\\"};\\n        res.type = \\\"circle\\\";\\n        $(el, res.attrs);\\n        return res;\\n    };\\n    R._engine.rect = function (svg, x, y, w, h, r) {\\n        var el = $(\\\"rect\\\");\\n        svg.canvas && svg.canvas.appendChild(el);\\n        var res = new Element(el, svg);\\n        res.attrs = {x: x, y: y, width: w, height: h, rx: r || 0, ry: r || 0, fill: \\\"none\\\", stroke: \\\"#000\\\"};\\n        res.type = \\\"rect\\\";\\n        $(el, res.attrs);\\n        return res;\\n    };\\n    R._engine.ellipse = function (svg, x, y, rx, ry) {\\n        var el = $(\\\"ellipse\\\");\\n        svg.canvas && svg.canvas.appendChild(el);\\n        var res = new Element(el, svg);\\n        res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: \\\"none\\\", stroke: \\\"#000\\\"};\\n        res.type = \\\"ellipse\\\";\\n        $(el, res.attrs);\\n        return res;\\n    };\\n    R._engine.image = function (svg, src, x, y, w, h) {\\n        var el = $(\\\"image\\\");\\n        $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: \\\"none\\\"});\\n        el.setAttributeNS(xlink, \\\"href\\\", src);\\n        svg.canvas && svg.canvas.appendChild(el);\\n        var res = new Element(el, svg);\\n        res.attrs = {x: x, y: y, width: w, height: h, src: src};\\n        res.type = \\\"image\\\";\\n        return res;\\n    };\\n    R._engine.text = function (svg, x, y, text) {\\n        var el = $(\\\"text\\\");\\n        svg.canvas && svg.canvas.appendChild(el);\\n        var res = new Element(el, svg);\\n        res.attrs = {\\n            x: x,\\n            y: y,\\n            \\\"text-anchor\\\": \\\"middle\\\",\\n            text: text,\\n            \\\"font-family\\\": R._availableAttrs[\\\"font-family\\\"],\\n            \\\"font-size\\\": R._availableAttrs[\\\"font-size\\\"],\\n            stroke: \\\"none\\\",\\n            fill: \\\"#000\\\"\\n        };\\n        res.type = \\\"text\\\";\\n        setFillAndStroke(res, res.attrs);\\n        return res;\\n    };\\n    R._engine.setSize = function (width, height) {\\n        this.width = width || this.width;\\n        this.height = height || this.height;\\n        this.canvas.setAttribute(\\\"width\\\", this.width);\\n        this.canvas.setAttribute(\\\"height\\\", this.height);\\n        if (this._viewBox) {\\n            this.setViewBox.apply(this, this._viewBox);\\n        }\\n        return this;\\n    };\\n    R._engine.create = function () {\\n        var con = R._getContainer.apply(0, arguments),\\n            container = con && con.container,\\n            x = con.x,\\n            y = con.y,\\n            width = con.width,\\n            height = con.height;\\n        if (!container) {\\n            throw new Error(\\\"SVG container not found.\\\");\\n        }\\n        var cnvs = $(\\\"svg\\\"),\\n            css = \\\"overflow:hidden;\\\",\\n            isFloating;\\n        x = x || 0;\\n        y = y || 0;\\n        width = width || 512;\\n        height = height || 342;\\n        $(cnvs, {\\n            height: height,\\n            version: 1.1,\\n            width: width,\\n            xmlns: \\\"http://www.w3.org/2000/svg\\\",\\n            \\\"xmlns:xlink\\\": \\\"http://www.w3.org/1999/xlink\\\"\\n        });\\n        if (container == 1) {\\n            cnvs.style.cssText = css + \\\"position:absolute;left:\\\" + x + \\\"px;top:\\\" + y + \\\"px\\\";\\n            R._g.doc.body.appendChild(cnvs);\\n            isFloating = 1;\\n        } else {\\n            cnvs.style.cssText = css + \\\"position:relative\\\";\\n            if (container.firstChild) {\\n                container.insertBefore(cnvs, container.firstChild);\\n            } else {\\n                container.appendChild(cnvs);\\n            }\\n        }\\n        container = new R._Paper;\\n        container.width = width;\\n        container.height = height;\\n        container.canvas = cnvs;\\n        container.clear();\\n        container._left = container._top = 0;\\n        isFloating && (container.renderfix = function () {});\\n        container.renderfix();\\n        return container;\\n    };\\n    R._engine.setViewBox = function (x, y, w, h, fit) {\\n        eve(\\\"raphael.setViewBox\\\", this, this._viewBox, [x, y, w, h, fit]);\\n        var paperSize = this.getSize(),\\n            size = mmax(w / paperSize.width, h / paperSize.height),\\n            top = this.top,\\n            aspectRatio = fit ? \\\"xMidYMid meet\\\" : \\\"xMinYMin\\\",\\n            vb,\\n            sw;\\n        if (x == null) {\\n            if (this._vbSize) {\\n                size = 1;\\n            }\\n            delete this._vbSize;\\n            vb = \\\"0 0 \\\" + this.width + S + this.height;\\n        } else {\\n            this._vbSize = size;\\n            vb = x + S + y + S + w + S + h;\\n        }\\n        $(this.canvas, {\\n            viewBox: vb,\\n            preserveAspectRatio: aspectRatio\\n        });\\n        while (size && top) {\\n            sw = \\\"stroke-width\\\" in top.attrs ? top.attrs[\\\"stroke-width\\\"] : 1;\\n            top.attr({\\\"stroke-width\\\": sw});\\n            top._.dirty = 1;\\n            top._.dirtyT = 1;\\n            top = top.prev;\\n        }\\n        this._viewBox = [x, y, w, h, !!fit];\\n        return this;\\n    };\\n    /*\\\\\\n     * Paper.renderfix\\n     [ method ]\\n     **\\n     * Fixes the issue of Firefox and IE9 regarding subpixel rendering. If paper is dependant\\n     * on other elements after reflow it could shift half pixel which cause for lines to lost their crispness.\\n     * This method fixes the issue.\\n     **\\n     Special thanks to Mariusz Nowak (http://www.medikoo.com/) for this method.\\n     \\\\*/\\n    R.prototype.renderfix = function () {\\n        var cnvs = this.canvas,\\n            s = cnvs.style,\\n            pos;\\n        try {\\n            pos = cnvs.getScreenCTM() || cnvs.createSVGMatrix();\\n        } catch (e) {\\n            pos = cnvs.createSVGMatrix();\\n        }\\n        var left = -pos.e % 1,\\n            top = -pos.f % 1;\\n        if (left || top) {\\n            if (left) {\\n                this._left = (this._left + left) % 1;\\n                s.left = this._left + \\\"px\\\";\\n            }\\n            if (top) {\\n                this._top = (this._top + top) % 1;\\n                s.top = this._top + \\\"px\\\";\\n            }\\n        }\\n    };\\n    /*\\\\\\n     * Paper.clear\\n     [ method ]\\n     **\\n     * Clears the paper, i.e. removes all the elements.\\n     \\\\*/\\n    R.prototype.clear = function () {\\n        R.eve(\\\"raphael.clear\\\", this);\\n        var c = this.canvas;\\n        while (c.firstChild) {\\n            c.removeChild(c.firstChild);\\n        }\\n        this.bottom = this.top = null;\\n        (this.desc = $(\\\"desc\\\")).appendChild(R._g.doc.createTextNode(\\\"Created with Rapha\\\\xebl \\\" + R.version));\\n        c.appendChild(this.desc);\\n        c.appendChild(this.defs = $(\\\"defs\\\"));\\n    };\\n    /*\\\\\\n     * Paper.remove\\n     [ method ]\\n     **\\n     * Removes the paper from the DOM.\\n     \\\\*/\\n    R.prototype.remove = function () {\\n        eve(\\\"raphael.remove\\\", this);\\n        this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);\\n        for (var i in this) {\\n            this[i] = typeof this[i] == \\\"function\\\" ? R._removedFactory(i) : null;\\n        }\\n    };\\n    var setproto = R.st;\\n    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\\n        setproto[method] = (function (methodname) {\\n            return function () {\\n                var arg = arguments;\\n                return this.forEach(function (el) {\\n                    el[methodname].apply(el, arg);\\n                });\\n            };\\n        })(method);\\n    }\\n}));\\n\\n// ┌─────────────────────────────────────────────────────────────────────┐ \\\\\\\\\\n// │ Raphaël 2.1.4 - JavaScript Vector Library                       │ \\\\\\\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ VML Module                                                          │ \\\\\\\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\\\\\\\\\n// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\\\\\\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\\\\\\\\\n// └─────────────────────────────────────────────────────────────────────┘ \\\\\\\\\\n\\n(function (glob, factory) {\\n    if (typeof define === \\\"function\\\" && define.amd) {\\n        define(\\\"raphael.vml\\\", [\\\"raphael.core\\\"], function(raphael) {\\n            return factory(raphael);\\n        });\\n    } else if (typeof exports === \\\"object\\\") {\\n        factory(require(\\\"./raphael.core\\\"));\\n    } else {\\n        factory(glob.Raphael);\\n    }\\n}(this, function(R) {\\n    if (R && !R.vml) {\\n        return;\\n    }\\n\\n    var has = \\\"hasOwnProperty\\\",\\n        Str = String,\\n        toFloat = parseFloat,\\n        math = Math,\\n        round = math.round,\\n        mmax = math.max,\\n        mmin = math.min,\\n        abs = math.abs,\\n        fillString = \\\"fill\\\",\\n        separator = /[, ]+/,\\n        eve = R.eve,\\n        ms = \\\" progid:DXImageTransform.Microsoft\\\",\\n        S = \\\" \\\",\\n        E = \\\"\\\",\\n        map = {M: \\\"m\\\", L: \\\"l\\\", C: \\\"c\\\", Z: \\\"x\\\", m: \\\"t\\\", l: \\\"r\\\", c: \\\"v\\\", z: \\\"x\\\"},\\n        bites = /([clmz]),?([^clmz]*)/gi,\\n        blurregexp = / progid:\\\\S+Blur\\\\([^\\\\)]+\\\\)/g,\\n        val = /-?[^,\\\\s-]+/g,\\n        cssDot = \\\"position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)\\\",\\n        zoom = 21600,\\n        pathTypes = {path: 1, rect: 1, image: 1},\\n        ovalTypes = {circle: 1, ellipse: 1},\\n        path2vml = function (path) {\\n            var total =  /[ahqstv]/ig,\\n                command = R._pathToAbsolute;\\n            Str(path).match(total) && (command = R._path2curve);\\n            total = /[clmz]/g;\\n            if (command == R._pathToAbsolute && !Str(path).match(total)) {\\n                var res = Str(path).replace(bites, function (all, command, args) {\\n                    var vals = [],\\n                        isMove = command.toLowerCase() == \\\"m\\\",\\n                        res = map[command];\\n                    args.replace(val, function (value) {\\n                        if (isMove && vals.length == 2) {\\n                            res += vals + map[command == \\\"m\\\" ? \\\"l\\\" : \\\"L\\\"];\\n                            vals = [];\\n                        }\\n                        vals.push(round(value * zoom));\\n                    });\\n                    return res + vals;\\n                });\\n                return res;\\n            }\\n            var pa = command(path), p, r;\\n            res = [];\\n            for (var i = 0, ii = pa.length; i < ii; i++) {\\n                p = pa[i];\\n                r = pa[i][0].toLowerCase();\\n                r == \\\"z\\\" && (r = \\\"x\\\");\\n                for (var j = 1, jj = p.length; j < jj; j++) {\\n                    r += round(p[j] * zoom) + (j != jj - 1 ? \\\",\\\" : E);\\n                }\\n                res.push(r);\\n            }\\n            return res.join(S);\\n        },\\n        compensation = function (deg, dx, dy) {\\n            var m = R.matrix();\\n            m.rotate(-deg, .5, .5);\\n            return {\\n                dx: m.x(dx, dy),\\n                dy: m.y(dx, dy)\\n            };\\n        },\\n        setCoords = function (p, sx, sy, dx, dy, deg) {\\n            var _ = p._,\\n                m = p.matrix,\\n                fillpos = _.fillpos,\\n                o = p.node,\\n                s = o.style,\\n                y = 1,\\n                flip = \\\"\\\",\\n                dxdy,\\n                kx = zoom / sx,\\n                ky = zoom / sy;\\n            s.visibility = \\\"hidden\\\";\\n            if (!sx || !sy) {\\n                return;\\n            }\\n            o.coordsize = abs(kx) + S + abs(ky);\\n            s.rotation = deg * (sx * sy < 0 ? -1 : 1);\\n            if (deg) {\\n                var c = compensation(deg, dx, dy);\\n                dx = c.dx;\\n                dy = c.dy;\\n            }\\n            sx < 0 && (flip += \\\"x\\\");\\n            sy < 0 && (flip += \\\" y\\\") && (y = -1);\\n            s.flip = flip;\\n            o.coordorigin = (dx * -kx) + S + (dy * -ky);\\n            if (fillpos || _.fillsize) {\\n                var fill = o.getElementsByTagName(fillString);\\n                fill = fill && fill[0];\\n                o.removeChild(fill);\\n                if (fillpos) {\\n                    c = compensation(deg, m.x(fillpos[0], fillpos[1]), m.y(fillpos[0], fillpos[1]));\\n                    fill.position = c.dx * y + S + c.dy * y;\\n                }\\n                if (_.fillsize) {\\n                    fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy);\\n                }\\n                o.appendChild(fill);\\n            }\\n            s.visibility = \\\"visible\\\";\\n        };\\n    R.toString = function () {\\n        return  \\\"Your browser doesn\\\\u2019t support SVG. Falling down to VML.\\\\nYou are running Rapha\\\\xebl \\\" + this.version;\\n    };\\n    var addArrow = function (o, value, isEnd) {\\n            var values = Str(value).toLowerCase().split(\\\"-\\\"),\\n                se = isEnd ? \\\"end\\\" : \\\"start\\\",\\n                i = values.length,\\n                type = \\\"classic\\\",\\n                w = \\\"medium\\\",\\n                h = \\\"medium\\\";\\n            while (i--) {\\n                switch (values[i]) {\\n                    case \\\"block\\\":\\n                    case \\\"classic\\\":\\n                    case \\\"oval\\\":\\n                    case \\\"diamond\\\":\\n                    case \\\"open\\\":\\n                    case \\\"none\\\":\\n                        type = values[i];\\n                        break;\\n                    case \\\"wide\\\":\\n                    case \\\"narrow\\\": h = values[i]; break;\\n                    case \\\"long\\\":\\n                    case \\\"short\\\": w = values[i]; break;\\n                }\\n            }\\n            var stroke = o.node.getElementsByTagName(\\\"stroke\\\")[0];\\n            stroke[se + \\\"arrow\\\"] = type;\\n            stroke[se + \\\"arrowlength\\\"] = w;\\n            stroke[se + \\\"arrowwidth\\\"] = h;\\n        },\\n        setFillAndStroke = function (o, params) {\\n            // o.paper.canvas.style.display = \\\"none\\\";\\n            o.attrs = o.attrs || {};\\n            var node = o.node,\\n                a = o.attrs,\\n                s = node.style,\\n                xy,\\n                newpath = pathTypes[o.type] && (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.cx != a.cx || params.cy != a.cy || params.rx != a.rx || params.ry != a.ry || params.r != a.r),\\n                isOval = ovalTypes[o.type] && (a.cx != params.cx || a.cy != params.cy || a.r != params.r || a.rx != params.rx || a.ry != params.ry),\\n                res = o;\\n\\n\\n            for (var par in params) if (params[has](par)) {\\n                a[par] = params[par];\\n            }\\n            if (newpath) {\\n                a.path = R._getPath[o.type](o);\\n                o._.dirty = 1;\\n            }\\n            params.href && (node.href = params.href);\\n            params.title && (node.title = params.title);\\n            params.target && (node.target = params.target);\\n            params.cursor && (s.cursor = params.cursor);\\n            \\\"blur\\\" in params && o.blur(params.blur);\\n            if (params.path && o.type == \\\"path\\\" || newpath) {\\n                node.path = path2vml(~Str(a.path).toLowerCase().indexOf(\\\"r\\\") ? R._pathToAbsolute(a.path) : a.path);\\n                o._.dirty = 1;\\n                if (o.type == \\\"image\\\") {\\n                    o._.fillpos = [a.x, a.y];\\n                    o._.fillsize = [a.width, a.height];\\n                    setCoords(o, 1, 1, 0, 0, 0);\\n                }\\n            }\\n            \\\"transform\\\" in params && o.transform(params.transform);\\n            if (isOval) {\\n                var cx = +a.cx,\\n                    cy = +a.cy,\\n                    rx = +a.rx || +a.r || 0,\\n                    ry = +a.ry || +a.r || 0;\\n                node.path = R.format(\\\"ar{0},{1},{2},{3},{4},{1},{4},{1}x\\\", round((cx - rx) * zoom), round((cy - ry) * zoom), round((cx + rx) * zoom), round((cy + ry) * zoom), round(cx * zoom));\\n                o._.dirty = 1;\\n            }\\n            if (\\\"clip-rect\\\" in params) {\\n                var rect = Str(params[\\\"clip-rect\\\"]).split(separator);\\n                if (rect.length == 4) {\\n                    rect[2] = +rect[2] + (+rect[0]);\\n                    rect[3] = +rect[3] + (+rect[1]);\\n                    var div = node.clipRect || R._g.doc.createElement(\\\"div\\\"),\\n                        dstyle = div.style;\\n                    dstyle.clip = R.format(\\\"rect({1}px {2}px {3}px {0}px)\\\", rect);\\n                    if (!node.clipRect) {\\n                        dstyle.position = \\\"absolute\\\";\\n                        dstyle.top = 0;\\n                        dstyle.left = 0;\\n                        dstyle.width = o.paper.width + \\\"px\\\";\\n                        dstyle.height = o.paper.height + \\\"px\\\";\\n                        node.parentNode.insertBefore(div, node);\\n                        div.appendChild(node);\\n                        node.clipRect = div;\\n                    }\\n                }\\n                if (!params[\\\"clip-rect\\\"]) {\\n                    node.clipRect && (node.clipRect.style.clip = \\\"auto\\\");\\n                }\\n            }\\n            if (o.textpath) {\\n                var textpathStyle = o.textpath.style;\\n                params.font && (textpathStyle.font = params.font);\\n                params[\\\"font-family\\\"] && (textpathStyle.fontFamily = '\\\"' + params[\\\"font-family\\\"].split(\\\",\\\")[0].replace(/^['\\\"]+|['\\\"]+$/g, E) + '\\\"');\\n                params[\\\"font-size\\\"] && (textpathStyle.fontSize = params[\\\"font-size\\\"]);\\n                params[\\\"font-weight\\\"] && (textpathStyle.fontWeight = params[\\\"font-weight\\\"]);\\n                params[\\\"font-style\\\"] && (textpathStyle.fontStyle = params[\\\"font-style\\\"]);\\n            }\\n            if (\\\"arrow-start\\\" in params) {\\n                addArrow(res, params[\\\"arrow-start\\\"]);\\n            }\\n            if (\\\"arrow-end\\\" in params) {\\n                addArrow(res, params[\\\"arrow-end\\\"], 1);\\n            }\\n            if (params.opacity != null ||\\n                params[\\\"stroke-width\\\"] != null ||\\n                params.fill != null ||\\n                params.src != null ||\\n                params.stroke != null ||\\n                params[\\\"stroke-width\\\"] != null ||\\n                params[\\\"stroke-opacity\\\"] != null ||\\n                params[\\\"fill-opacity\\\"] != null ||\\n                params[\\\"stroke-dasharray\\\"] != null ||\\n                params[\\\"stroke-miterlimit\\\"] != null ||\\n                params[\\\"stroke-linejoin\\\"] != null ||\\n                params[\\\"stroke-linecap\\\"] != null) {\\n                var fill = node.getElementsByTagName(fillString),\\n                    newfill = false;\\n                fill = fill && fill[0];\\n                !fill && (newfill = fill = createNode(fillString));\\n                if (o.type == \\\"image\\\" && params.src) {\\n                    fill.src = params.src;\\n                }\\n                params.fill && (fill.on = true);\\n                if (fill.on == null || params.fill == \\\"none\\\" || params.fill === null) {\\n                    fill.on = false;\\n                }\\n                if (fill.on && params.fill) {\\n                    var isURL = Str(params.fill).match(R._ISURL);\\n                    if (isURL) {\\n                        fill.parentNode == node && node.removeChild(fill);\\n                        fill.rotate = true;\\n                        fill.src = isURL[1];\\n                        fill.type = \\\"tile\\\";\\n                        var bbox = o.getBBox(1);\\n                        fill.position = bbox.x + S + bbox.y;\\n                        o._.fillpos = [bbox.x, bbox.y];\\n\\n                        R._preload(isURL[1], function () {\\n                            o._.fillsize = [this.offsetWidth, this.offsetHeight];\\n                        });\\n                    } else {\\n                        fill.color = R.getRGB(params.fill).hex;\\n                        fill.src = E;\\n                        fill.type = \\\"solid\\\";\\n                        if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != \\\"r\\\") && addGradientFill(res, params.fill, fill)) {\\n                            a.fill = \\\"none\\\";\\n                            a.gradient = params.fill;\\n                            fill.rotate = false;\\n                        }\\n                    }\\n                }\\n                if (\\\"fill-opacity\\\" in params || \\\"opacity\\\" in params) {\\n                    var opacity = ((+a[\\\"fill-opacity\\\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);\\n                    opacity = mmin(mmax(opacity, 0), 1);\\n                    fill.opacity = opacity;\\n                    if (fill.src) {\\n                        fill.color = \\\"none\\\";\\n                    }\\n                }\\n                node.appendChild(fill);\\n                var stroke = (node.getElementsByTagName(\\\"stroke\\\") && node.getElementsByTagName(\\\"stroke\\\")[0]),\\n                    newstroke = false;\\n                !stroke && (newstroke = stroke = createNode(\\\"stroke\\\"));\\n                if ((params.stroke && params.stroke != \\\"none\\\") ||\\n                    params[\\\"stroke-width\\\"] ||\\n                    params[\\\"stroke-opacity\\\"] != null ||\\n                    params[\\\"stroke-dasharray\\\"] ||\\n                    params[\\\"stroke-miterlimit\\\"] ||\\n                    params[\\\"stroke-linejoin\\\"] ||\\n                    params[\\\"stroke-linecap\\\"]) {\\n                    stroke.on = true;\\n                }\\n                (params.stroke == \\\"none\\\" || params.stroke === null || stroke.on == null || params.stroke == 0 || params[\\\"stroke-width\\\"] == 0) && (stroke.on = false);\\n                var strokeColor = R.getRGB(params.stroke);\\n                stroke.on && params.stroke && (stroke.color = strokeColor.hex);\\n                opacity = ((+a[\\\"stroke-opacity\\\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);\\n                var width = (toFloat(params[\\\"stroke-width\\\"]) || 1) * .75;\\n                opacity = mmin(mmax(opacity, 0), 1);\\n                params[\\\"stroke-width\\\"] == null && (width = a[\\\"stroke-width\\\"]);\\n                params[\\\"stroke-width\\\"] && (stroke.weight = width);\\n                width && width < 1 && (opacity *= width) && (stroke.weight = 1);\\n                stroke.opacity = opacity;\\n\\n                params[\\\"stroke-linejoin\\\"] && (stroke.joinstyle = params[\\\"stroke-linejoin\\\"] || \\\"miter\\\");\\n                stroke.miterlimit = params[\\\"stroke-miterlimit\\\"] || 8;\\n                params[\\\"stroke-linecap\\\"] && (stroke.endcap = params[\\\"stroke-linecap\\\"] == \\\"butt\\\" ? \\\"flat\\\" : params[\\\"stroke-linecap\\\"] == \\\"square\\\" ? \\\"square\\\" : \\\"round\\\");\\n                if (\\\"stroke-dasharray\\\" in params) {\\n                    var dasharray = {\\n                        \\\"-\\\": \\\"shortdash\\\",\\n                        \\\".\\\": \\\"shortdot\\\",\\n                        \\\"-.\\\": \\\"shortdashdot\\\",\\n                        \\\"-..\\\": \\\"shortdashdotdot\\\",\\n                        \\\". \\\": \\\"dot\\\",\\n                        \\\"- \\\": \\\"dash\\\",\\n                        \\\"--\\\": \\\"longdash\\\",\\n                        \\\"- .\\\": \\\"dashdot\\\",\\n                        \\\"--.\\\": \\\"longdashdot\\\",\\n                        \\\"--..\\\": \\\"longdashdotdot\\\"\\n                    };\\n                    stroke.dashstyle = dasharray[has](params[\\\"stroke-dasharray\\\"]) ? dasharray[params[\\\"stroke-dasharray\\\"]] : E;\\n                }\\n                newstroke && node.appendChild(stroke);\\n            }\\n            if (res.type == \\\"text\\\") {\\n                res.paper.canvas.style.display = E;\\n                var span = res.paper.span,\\n                    m = 100,\\n                    fontSize = a.font && a.font.match(/\\\\d+(?:\\\\.\\\\d*)?(?=px)/);\\n                s = span.style;\\n                a.font && (s.font = a.font);\\n                a[\\\"font-family\\\"] && (s.fontFamily = a[\\\"font-family\\\"]);\\n                a[\\\"font-weight\\\"] && (s.fontWeight = a[\\\"font-weight\\\"]);\\n                a[\\\"font-style\\\"] && (s.fontStyle = a[\\\"font-style\\\"]);\\n                fontSize = toFloat(a[\\\"font-size\\\"] || fontSize && fontSize[0]) || 10;\\n                s.fontSize = fontSize * m + \\\"px\\\";\\n                res.textpath.string && (span.innerHTML = Str(res.textpath.string).replace(/</g, \\\"&#60;\\\").replace(/&/g, \\\"&#38;\\\").replace(/\\\\n/g, \\\"<br>\\\"));\\n                var brect = span.getBoundingClientRect();\\n                res.W = a.w = (brect.right - brect.left) / m;\\n                res.H = a.h = (brect.bottom - brect.top) / m;\\n                // res.paper.canvas.style.display = \\\"none\\\";\\n                res.X = a.x;\\n                res.Y = a.y + res.H / 2;\\n\\n                (\\\"x\\\" in params || \\\"y\\\" in params) && (res.path.v = R.format(\\\"m{0},{1}l{2},{1}\\\", round(a.x * zoom), round(a.y * zoom), round(a.x * zoom) + 1));\\n                var dirtyattrs = [\\\"x\\\", \\\"y\\\", \\\"text\\\", \\\"font\\\", \\\"font-family\\\", \\\"font-weight\\\", \\\"font-style\\\", \\\"font-size\\\"];\\n                for (var d = 0, dd = dirtyattrs.length; d < dd; d++) if (dirtyattrs[d] in params) {\\n                    res._.dirty = 1;\\n                    break;\\n                }\\n\\n                // text-anchor emulation\\n                switch (a[\\\"text-anchor\\\"]) {\\n                    case \\\"start\\\":\\n                        res.textpath.style[\\\"v-text-align\\\"] = \\\"left\\\";\\n                        res.bbx = res.W / 2;\\n                        break;\\n                    case \\\"end\\\":\\n                        res.textpath.style[\\\"v-text-align\\\"] = \\\"right\\\";\\n                        res.bbx = -res.W / 2;\\n                        break;\\n                    default:\\n                        res.textpath.style[\\\"v-text-align\\\"] = \\\"center\\\";\\n                        res.bbx = 0;\\n                        break;\\n                }\\n                res.textpath.style[\\\"v-text-kern\\\"] = true;\\n            }\\n            // res.paper.canvas.style.display = E;\\n        },\\n        addGradientFill = function (o, gradient, fill) {\\n            o.attrs = o.attrs || {};\\n            var attrs = o.attrs,\\n                pow = Math.pow,\\n                opacity,\\n                oindex,\\n                type = \\\"linear\\\",\\n                fxfy = \\\".5 .5\\\";\\n            o.attrs.gradient = gradient;\\n            gradient = Str(gradient).replace(R._radial_gradient, function (all, fx, fy) {\\n                type = \\\"radial\\\";\\n                if (fx && fy) {\\n                    fx = toFloat(fx);\\n                    fy = toFloat(fy);\\n                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);\\n                    fxfy = fx + S + fy;\\n                }\\n                return E;\\n            });\\n            gradient = gradient.split(/\\\\s*\\\\-\\\\s*/);\\n            if (type == \\\"linear\\\") {\\n                var angle = gradient.shift();\\n                angle = -toFloat(angle);\\n                if (isNaN(angle)) {\\n                    return null;\\n                }\\n            }\\n            var dots = R._parseDots(gradient);\\n            if (!dots) {\\n                return null;\\n            }\\n            o = o.shape || o.node;\\n            if (dots.length) {\\n                o.removeChild(fill);\\n                fill.on = true;\\n                fill.method = \\\"none\\\";\\n                fill.color = dots[0].color;\\n                fill.color2 = dots[dots.length - 1].color;\\n                var clrs = [];\\n                for (var i = 0, ii = dots.length; i < ii; i++) {\\n                    dots[i].offset && clrs.push(dots[i].offset + S + dots[i].color);\\n                }\\n                fill.colors = clrs.length ? clrs.join() : \\\"0% \\\" + fill.color;\\n                if (type == \\\"radial\\\") {\\n                    fill.type = \\\"gradientTitle\\\";\\n                    fill.focus = \\\"100%\\\";\\n                    fill.focussize = \\\"0 0\\\";\\n                    fill.focusposition = fxfy;\\n                    fill.angle = 0;\\n                } else {\\n                    // fill.rotate= true;\\n                    fill.type = \\\"gradient\\\";\\n                    fill.angle = (270 - angle) % 360;\\n                }\\n                o.appendChild(fill);\\n            }\\n            return 1;\\n        },\\n        Element = function (node, vml) {\\n            this[0] = this.node = node;\\n            node.raphael = true;\\n            this.id = R._oid++;\\n            node.raphaelid = this.id;\\n            this.X = 0;\\n            this.Y = 0;\\n            this.attrs = {};\\n            this.paper = vml;\\n            this.matrix = R.matrix();\\n            this._ = {\\n                transform: [],\\n                sx: 1,\\n                sy: 1,\\n                dx: 0,\\n                dy: 0,\\n                deg: 0,\\n                dirty: 1,\\n                dirtyT: 1\\n            };\\n            !vml.bottom && (vml.bottom = this);\\n            this.prev = vml.top;\\n            vml.top && (vml.top.next = this);\\n            vml.top = this;\\n            this.next = null;\\n        };\\n    var elproto = R.el;\\n\\n    Element.prototype = elproto;\\n    elproto.constructor = Element;\\n    elproto.transform = function (tstr) {\\n        if (tstr == null) {\\n            return this._.transform;\\n        }\\n        var vbs = this.paper._viewBoxShift,\\n            vbt = vbs ? \\\"s\\\" + [vbs.scale, vbs.scale] + \\\"-1-1t\\\" + [vbs.dx, vbs.dy] : E,\\n            oldt;\\n        if (vbs) {\\n            oldt = tstr = Str(tstr).replace(/\\\\.{3}|\\\\u2026/g, this._.transform || E);\\n        }\\n        R._extractTransform(this, vbt + tstr);\\n        var matrix = this.matrix.clone(),\\n            skew = this.skew,\\n            o = this.node,\\n            split,\\n            isGrad = ~Str(this.attrs.fill).indexOf(\\\"-\\\"),\\n            isPatt = !Str(this.attrs.fill).indexOf(\\\"url(\\\");\\n        matrix.translate(1, 1);\\n        if (isPatt || isGrad || this.type == \\\"image\\\") {\\n            skew.matrix = \\\"1 0 0 1\\\";\\n            skew.offset = \\\"0 0\\\";\\n            split = matrix.split();\\n            if ((isGrad && split.noRotation) || !split.isSimple) {\\n                o.style.filter = matrix.toFilter();\\n                var bb = this.getBBox(),\\n                    bbt = this.getBBox(1),\\n                    dx = bb.x - bbt.x,\\n                    dy = bb.y - bbt.y;\\n                o.coordorigin = (dx * -zoom) + S + (dy * -zoom);\\n                setCoords(this, 1, 1, dx, dy, 0);\\n            } else {\\n                o.style.filter = E;\\n                setCoords(this, split.scalex, split.scaley, split.dx, split.dy, split.rotate);\\n            }\\n        } else {\\n            o.style.filter = E;\\n            skew.matrix = Str(matrix);\\n            skew.offset = matrix.offset();\\n        }\\n        if (oldt !== null) { // empty string value is true as well\\n            this._.transform = oldt;\\n            R._extractTransform(this, oldt);\\n        }\\n        return this;\\n    };\\n    elproto.rotate = function (deg, cx, cy) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        if (deg == null) {\\n            return;\\n        }\\n        deg = Str(deg).split(separator);\\n        if (deg.length - 1) {\\n            cx = toFloat(deg[1]);\\n            cy = toFloat(deg[2]);\\n        }\\n        deg = toFloat(deg[0]);\\n        (cy == null) && (cx = cy);\\n        if (cx == null || cy == null) {\\n            var bbox = this.getBBox(1);\\n            cx = bbox.x + bbox.width / 2;\\n            cy = bbox.y + bbox.height / 2;\\n        }\\n        this._.dirtyT = 1;\\n        this.transform(this._.transform.concat([[\\\"r\\\", deg, cx, cy]]));\\n        return this;\\n    };\\n    elproto.translate = function (dx, dy) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        dx = Str(dx).split(separator);\\n        if (dx.length - 1) {\\n            dy = toFloat(dx[1]);\\n        }\\n        dx = toFloat(dx[0]) || 0;\\n        dy = +dy || 0;\\n        if (this._.bbox) {\\n            this._.bbox.x += dx;\\n            this._.bbox.y += dy;\\n        }\\n        this.transform(this._.transform.concat([[\\\"t\\\", dx, dy]]));\\n        return this;\\n    };\\n    elproto.scale = function (sx, sy, cx, cy) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        sx = Str(sx).split(separator);\\n        if (sx.length - 1) {\\n            sy = toFloat(sx[1]);\\n            cx = toFloat(sx[2]);\\n            cy = toFloat(sx[3]);\\n            isNaN(cx) && (cx = null);\\n            isNaN(cy) && (cy = null);\\n        }\\n        sx = toFloat(sx[0]);\\n        (sy == null) && (sy = sx);\\n        (cy == null) && (cx = cy);\\n        if (cx == null || cy == null) {\\n            var bbox = this.getBBox(1);\\n        }\\n        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\\n        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\\n\\n        this.transform(this._.transform.concat([[\\\"s\\\", sx, sy, cx, cy]]));\\n        this._.dirtyT = 1;\\n        return this;\\n    };\\n    elproto.hide = function () {\\n        !this.removed && (this.node.style.display = \\\"none\\\");\\n        return this;\\n    };\\n    elproto.show = function () {\\n        !this.removed && (this.node.style.display = E);\\n        return this;\\n    };\\n    // Needed to fix the vml setViewBox issues\\n    elproto.auxGetBBox = R.el.getBBox;\\n    elproto.getBBox = function(){\\n        var b = this.auxGetBBox();\\n        if (this.paper && this.paper._viewBoxShift)\\n        {\\n            var c = {};\\n            var z = 1/this.paper._viewBoxShift.scale;\\n            c.x = b.x - this.paper._viewBoxShift.dx;\\n            c.x *= z;\\n            c.y = b.y - this.paper._viewBoxShift.dy;\\n            c.y *= z;\\n            c.width  = b.width  * z;\\n            c.height = b.height * z;\\n            c.x2 = c.x + c.width;\\n            c.y2 = c.y + c.height;\\n            return c;\\n        }\\n        return b;\\n    };\\n    elproto._getBBox = function () {\\n        if (this.removed) {\\n            return {};\\n        }\\n        return {\\n            x: this.X + (this.bbx || 0) - this.W / 2,\\n            y: this.Y - this.H,\\n            width: this.W,\\n            height: this.H\\n        };\\n    };\\n    elproto.remove = function () {\\n        if (this.removed || !this.node.parentNode) {\\n            return;\\n        }\\n        this.paper.__set__ && this.paper.__set__.exclude(this);\\n        R.eve.unbind(\\\"raphael.*.*.\\\" + this.id);\\n        R._tear(this, this.paper);\\n        this.node.parentNode.removeChild(this.node);\\n        this.shape && this.shape.parentNode.removeChild(this.shape);\\n        for (var i in this) {\\n            this[i] = typeof this[i] == \\\"function\\\" ? R._removedFactory(i) : null;\\n        }\\n        this.removed = true;\\n    };\\n    elproto.attr = function (name, value) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        if (name == null) {\\n            var res = {};\\n            for (var a in this.attrs) if (this.attrs[has](a)) {\\n                res[a] = this.attrs[a];\\n            }\\n            res.gradient && res.fill == \\\"none\\\" && (res.fill = res.gradient) && delete res.gradient;\\n            res.transform = this._.transform;\\n            return res;\\n        }\\n        if (value == null && R.is(name, \\\"string\\\")) {\\n            if (name == fillString && this.attrs.fill == \\\"none\\\" && this.attrs.gradient) {\\n                return this.attrs.gradient;\\n            }\\n            var names = name.split(separator),\\n                out = {};\\n            for (var i = 0, ii = names.length; i < ii; i++) {\\n                name = names[i];\\n                if (name in this.attrs) {\\n                    out[name] = this.attrs[name];\\n                } else if (R.is(this.paper.customAttributes[name], \\\"function\\\")) {\\n                    out[name] = this.paper.customAttributes[name].def;\\n                } else {\\n                    out[name] = R._availableAttrs[name];\\n                }\\n            }\\n            return ii - 1 ? out : out[names[0]];\\n        }\\n        if (this.attrs && value == null && R.is(name, \\\"array\\\")) {\\n            out = {};\\n            for (i = 0, ii = name.length; i < ii; i++) {\\n                out[name[i]] = this.attr(name[i]);\\n            }\\n            return out;\\n        }\\n        var params;\\n        if (value != null) {\\n            params = {};\\n            params[name] = value;\\n        }\\n        value == null && R.is(name, \\\"object\\\") && (params = name);\\n        for (var key in params) {\\n            eve(\\\"raphael.attr.\\\" + key + \\\".\\\" + this.id, this, params[key]);\\n        }\\n        if (params) {\\n            for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \\\"function\\\")) {\\n                var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\\n                this.attrs[key] = params[key];\\n                for (var subkey in par) if (par[has](subkey)) {\\n                    params[subkey] = par[subkey];\\n                }\\n            }\\n            // this.paper.canvas.style.display = \\\"none\\\";\\n            if (params.text && this.type == \\\"text\\\") {\\n                this.textpath.string = params.text;\\n            }\\n            setFillAndStroke(this, params);\\n            // this.paper.canvas.style.display = E;\\n        }\\n        return this;\\n    };\\n    elproto.toFront = function () {\\n        !this.removed && this.node.parentNode.appendChild(this.node);\\n        this.paper && this.paper.top != this && R._tofront(this, this.paper);\\n        return this;\\n    };\\n    elproto.toBack = function () {\\n        if (this.removed) {\\n            return this;\\n        }\\n        if (this.node.parentNode.firstChild != this.node) {\\n            this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);\\n            R._toback(this, this.paper);\\n        }\\n        return this;\\n    };\\n    elproto.insertAfter = function (element) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        if (element.constructor == R.st.constructor) {\\n            element = element[element.length - 1];\\n        }\\n        if (element.node.nextSibling) {\\n            element.node.parentNode.insertBefore(this.node, element.node.nextSibling);\\n        } else {\\n            element.node.parentNode.appendChild(this.node);\\n        }\\n        R._insertafter(this, element, this.paper);\\n        return this;\\n    };\\n    elproto.insertBefore = function (element) {\\n        if (this.removed) {\\n            return this;\\n        }\\n        if (element.constructor == R.st.constructor) {\\n            element = element[0];\\n        }\\n        element.node.parentNode.insertBefore(this.node, element.node);\\n        R._insertbefore(this, element, this.paper);\\n        return this;\\n    };\\n    elproto.blur = function (size) {\\n        var s = this.node.runtimeStyle,\\n            f = s.filter;\\n        f = f.replace(blurregexp, E);\\n        if (+size !== 0) {\\n            this.attrs.blur = size;\\n            s.filter = f + S + ms + \\\".Blur(pixelradius=\\\" + (+size || 1.5) + \\\")\\\";\\n            s.margin = R.format(\\\"-{0}px 0 0 -{0}px\\\", round(+size || 1.5));\\n        } else {\\n            s.filter = f;\\n            s.margin = 0;\\n            delete this.attrs.blur;\\n        }\\n        return this;\\n    };\\n\\n    R._engine.path = function (pathString, vml) {\\n        var el = createNode(\\\"shape\\\");\\n        el.style.cssText = cssDot;\\n        el.coordsize = zoom + S + zoom;\\n        el.coordorigin = vml.coordorigin;\\n        var p = new Element(el, vml),\\n            attr = {fill: \\\"none\\\", stroke: \\\"#000\\\"};\\n        pathString && (attr.path = pathString);\\n        p.type = \\\"path\\\";\\n        p.path = [];\\n        p.Path = E;\\n        setFillAndStroke(p, attr);\\n        vml.canvas.appendChild(el);\\n        var skew = createNode(\\\"skew\\\");\\n        skew.on = true;\\n        el.appendChild(skew);\\n        p.skew = skew;\\n        p.transform(E);\\n        return p;\\n    };\\n    R._engine.rect = function (vml, x, y, w, h, r) {\\n        var path = R._rectPath(x, y, w, h, r),\\n            res = vml.path(path),\\n            a = res.attrs;\\n        res.X = a.x = x;\\n        res.Y = a.y = y;\\n        res.W = a.width = w;\\n        res.H = a.height = h;\\n        a.r = r;\\n        a.path = path;\\n        res.type = \\\"rect\\\";\\n        return res;\\n    };\\n    R._engine.ellipse = function (vml, x, y, rx, ry) {\\n        var res = vml.path(),\\n            a = res.attrs;\\n        res.X = x - rx;\\n        res.Y = y - ry;\\n        res.W = rx * 2;\\n        res.H = ry * 2;\\n        res.type = \\\"ellipse\\\";\\n        setFillAndStroke(res, {\\n            cx: x,\\n            cy: y,\\n            rx: rx,\\n            ry: ry\\n        });\\n        return res;\\n    };\\n    R._engine.circle = function (vml, x, y, r) {\\n        var res = vml.path(),\\n            a = res.attrs;\\n        res.X = x - r;\\n        res.Y = y - r;\\n        res.W = res.H = r * 2;\\n        res.type = \\\"circle\\\";\\n        setFillAndStroke(res, {\\n            cx: x,\\n            cy: y,\\n            r: r\\n        });\\n        return res;\\n    };\\n    R._engine.image = function (vml, src, x, y, w, h) {\\n        var path = R._rectPath(x, y, w, h),\\n            res = vml.path(path).attr({stroke: \\\"none\\\"}),\\n            a = res.attrs,\\n            node = res.node,\\n            fill = node.getElementsByTagName(fillString)[0];\\n        a.src = src;\\n        res.X = a.x = x;\\n        res.Y = a.y = y;\\n        res.W = a.width = w;\\n        res.H = a.height = h;\\n        a.path = path;\\n        res.type = \\\"image\\\";\\n        fill.parentNode == node && node.removeChild(fill);\\n        fill.rotate = true;\\n        fill.src = src;\\n        fill.type = \\\"tile\\\";\\n        res._.fillpos = [x, y];\\n        res._.fillsize = [w, h];\\n        node.appendChild(fill);\\n        setCoords(res, 1, 1, 0, 0, 0);\\n        return res;\\n    };\\n    R._engine.text = function (vml, x, y, text) {\\n        var el = createNode(\\\"shape\\\"),\\n            path = createNode(\\\"path\\\"),\\n            o = createNode(\\\"textpath\\\");\\n        x = x || 0;\\n        y = y || 0;\\n        text = text || \\\"\\\";\\n        path.v = R.format(\\\"m{0},{1}l{2},{1}\\\", round(x * zoom), round(y * zoom), round(x * zoom) + 1);\\n        path.textpathok = true;\\n        o.string = Str(text);\\n        o.on = true;\\n        el.style.cssText = cssDot;\\n        el.coordsize = zoom + S + zoom;\\n        el.coordorigin = \\\"0 0\\\";\\n        var p = new Element(el, vml),\\n            attr = {\\n                fill: \\\"#000\\\",\\n                stroke: \\\"none\\\",\\n                font: R._availableAttrs.font,\\n                text: text\\n            };\\n        p.shape = el;\\n        p.path = path;\\n        p.textpath = o;\\n        p.type = \\\"text\\\";\\n        p.attrs.text = Str(text);\\n        p.attrs.x = x;\\n        p.attrs.y = y;\\n        p.attrs.w = 1;\\n        p.attrs.h = 1;\\n        setFillAndStroke(p, attr);\\n        el.appendChild(o);\\n        el.appendChild(path);\\n        vml.canvas.appendChild(el);\\n        var skew = createNode(\\\"skew\\\");\\n        skew.on = true;\\n        el.appendChild(skew);\\n        p.skew = skew;\\n        p.transform(E);\\n        return p;\\n    };\\n    R._engine.setSize = function (width, height) {\\n        var cs = this.canvas.style;\\n        this.width = width;\\n        this.height = height;\\n        width == +width && (width += \\\"px\\\");\\n        height == +height && (height += \\\"px\\\");\\n        cs.width = width;\\n        cs.height = height;\\n        cs.clip = \\\"rect(0 \\\" + width + \\\" \\\" + height + \\\" 0)\\\";\\n        if (this._viewBox) {\\n            R._engine.setViewBox.apply(this, this._viewBox);\\n        }\\n        return this;\\n    };\\n    R._engine.setViewBox = function (x, y, w, h, fit) {\\n        R.eve(\\\"raphael.setViewBox\\\", this, this._viewBox, [x, y, w, h, fit]);\\n        var paperSize = this.getSize(),\\n            width = paperSize.width,\\n            height = paperSize.height,\\n            H, W;\\n        if (fit) {\\n            H = height / h;\\n            W = width / w;\\n            if (w * H < width) {\\n                x -= (width - w * H) / 2 / H;\\n            }\\n            if (h * W < height) {\\n                y -= (height - h * W) / 2 / W;\\n            }\\n        }\\n        this._viewBox = [x, y, w, h, !!fit];\\n        this._viewBoxShift = {\\n            dx: -x,\\n            dy: -y,\\n            scale: paperSize\\n        };\\n        this.forEach(function (el) {\\n            el.transform(\\\"...\\\");\\n        });\\n        return this;\\n    };\\n    var createNode;\\n    R._engine.initWin = function (win) {\\n        var doc = win.document;\\n        if (doc.styleSheets.length < 31) {\\n            doc.createStyleSheet().addRule(\\\".rvml\\\", \\\"behavior:url(#default#VML)\\\");\\n        } else {\\n            // no more room, add to the existing one\\n            // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\\n            doc.styleSheets[0].addRule(\\\".rvml\\\", \\\"behavior:url(#default#VML)\\\");\\n        }\\n        try {\\n            !doc.namespaces.rvml && doc.namespaces.add(\\\"rvml\\\", \\\"urn:schemas-microsoft-com:vml\\\");\\n            createNode = function (tagName) {\\n                return doc.createElement('<rvml:' + tagName + ' class=\\\"rvml\\\">');\\n            };\\n        } catch (e) {\\n            createNode = function (tagName) {\\n                return doc.createElement('<' + tagName + ' xmlns=\\\"urn:schemas-microsoft.com:vml\\\" class=\\\"rvml\\\">');\\n            };\\n        }\\n    };\\n    R._engine.initWin(R._g.win);\\n    R._engine.create = function () {\\n        var con = R._getContainer.apply(0, arguments),\\n            container = con.container,\\n            height = con.height,\\n            s,\\n            width = con.width,\\n            x = con.x,\\n            y = con.y;\\n        if (!container) {\\n            throw new Error(\\\"VML container not found.\\\");\\n        }\\n        var res = new R._Paper,\\n            c = res.canvas = R._g.doc.createElement(\\\"div\\\"),\\n            cs = c.style;\\n        x = x || 0;\\n        y = y || 0;\\n        width = width || 512;\\n        height = height || 342;\\n        res.width = width;\\n        res.height = height;\\n        width == +width && (width += \\\"px\\\");\\n        height == +height && (height += \\\"px\\\");\\n        res.coordsize = zoom * 1e3 + S + zoom * 1e3;\\n        res.coordorigin = \\\"0 0\\\";\\n        res.span = R._g.doc.createElement(\\\"span\\\");\\n        res.span.style.cssText = \\\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\\\";\\n        c.appendChild(res.span);\\n        cs.cssText = R.format(\\\"top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden\\\", width, height);\\n        if (container == 1) {\\n            R._g.doc.body.appendChild(c);\\n            cs.left = x + \\\"px\\\";\\n            cs.top = y + \\\"px\\\";\\n            cs.position = \\\"absolute\\\";\\n        } else {\\n            if (container.firstChild) {\\n                container.insertBefore(c, container.firstChild);\\n            } else {\\n                container.appendChild(c);\\n            }\\n        }\\n        res.renderfix = function () {};\\n        return res;\\n    };\\n    R.prototype.clear = function () {\\n        R.eve(\\\"raphael.clear\\\", this);\\n        this.canvas.innerHTML = E;\\n        this.span = R._g.doc.createElement(\\\"span\\\");\\n        this.span.style.cssText = \\\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\\\";\\n        this.canvas.appendChild(this.span);\\n        this.bottom = this.top = null;\\n    };\\n    R.prototype.remove = function () {\\n        R.eve(\\\"raphael.remove\\\", this);\\n        this.canvas.parentNode.removeChild(this.canvas);\\n        for (var i in this) {\\n            this[i] = typeof this[i] == \\\"function\\\" ? R._removedFactory(i) : null;\\n        }\\n        return true;\\n    };\\n\\n    var setproto = R.st;\\n    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\\n        setproto[method] = (function (methodname) {\\n            return function () {\\n                var arg = arguments;\\n                return this.forEach(function (el) {\\n                    el[methodname].apply(el, arg);\\n                });\\n            };\\n        })(method);\\n    }\\n}));\\n\\n// ┌────────────────────────────────────────────────────────────────────┐ \\\\\\\\\\n// │ Raphaël @VERSION - JavaScript Vector Library                       │ \\\\\\\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com)    │ \\\\\\\\\\n// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com)              │ \\\\\\\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\\\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\\\\\\\\\n// └────────────────────────────────────────────────────────────────────┘ \\\\\\\\\\n\\n(function (glob, factory) {\\n    if (typeof define === \\\"function\\\" && define.amd) {\\n        define(\\\"raphael\\\", [\\\"raphael.core\\\", \\\"raphael.svg\\\", \\\"raphael.vml\\\"], function(Raphael) {\\n            return (glob.Raphael = factory(Raphael));\\n        });\\n    } else if (typeof exports === \\\"object\\\") {\\n        var raphael = require(\\\"raphael.core\\\");\\n\\n        require(\\\"raphael.svg\\\");\\n        require(\\\"raphael.vml\\\");\\n\\n        module.exports = factory(raphael);\\n    } else {\\n        glob.Raphael = factory(glob.Raphael);\\n    }\\n}(this, function (Raphael) {\\n    return Raphael.ninja();\\n}));\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n/**\\n * FRaphael\\n * \\tAn extension for Raphael.js to make it easier to work with Filter Effects\\n *\\n * Copyright © 2013 Chris Scott <chris.scott@factmint.com>\\n * Delivered with and licensed under the MIT licence\\n *\\n */\\n\\n// Create the global FRaphael object\\n(function(scope) {\\n    var\\tversion = \\\"0.0.1\\\",\\n        license = \\\"MIT\\\";\\n\\n    var\\tns = \\\"http://www.w3.org/2000/svg\\\",\\n        idCounter = 0;\\n\\n    var FR = {\\n        // Object prototype for a filter\\n        Filter: function(id) {\\n            if (id == undefined) {\\n                id = \\\"filter-\\\" + idCounter++;\\n                while(FR.filters[id] != undefined) {\\n                    id = \\\"filter-\\\" + idCounter++;\\n                }\\n            }\\n\\n            if (FR.filters[id] != undefined) {\\n                throw \\\"A filter with id \\\" + id + \\\" already exists\\\";\\n            }\\n\\n            this.element = document.createElementNS(ns, \\\"filter\\\");\\n            this.element.setAttribute(\\\"id\\\", id);\\n            this.element.setAttribute(\\\"x\\\", \\\"-25%\\\");\\n            this.element.setAttribute(\\\"y\\\", \\\"-25%\\\");\\n            this.element.setAttribute(\\\"width\\\", \\\"150%\\\");\\n            this.element.setAttribute(\\\"height\\\", \\\"150%\\\");\\n\\n            this.lastFEResult = null;\\n\\n            FR.filters[id] = this;\\n            this.id = id;\\n        },\\n\\n        // Object prototype for an effect\\n        FilterEffect: function(type, attributes) {\\n            this.element = document.createElementNS(ns, type);\\n            for (var key in attributes) {\\n                this.element.setAttribute(key, attributes[key]);\\n            }\\n        },\\n\\n        // Return the filter applied to an element or a new filter if none are currently applied\\n        getFilter: function(element) {\\n            var filterId = element.data(\\\"filterId\\\");\\n            var filter = null;\\n\\n            if (filterId == undefined) {\\n                filterId = \\\"element-filter-\\\" + element.id;\\n                filter = element.paper.createFilter(filterId);\\n                element.filter(filterId);\\n            } else {\\n                filter = FR.filters[filterId];\\n            }\\n\\n            return filter;\\n        },\\n\\n        // maintain a list of filters by id\\n        filters: {}\\n    };\\n\\n    FR.Filter.prototype = {\\n        addEffect: function(type, attributes, children) {\\n            var effect = new FR.FilterEffect(type, attributes);\\n\\n            if (children) {\\n                if (children instanceof Array) {\\n                    for (var x in children) {\\n                        if (!children.hasOwnProperty(x)) continue;\\n\\n                        effect.element.appendChild(children[x].element);\\n                    }\\n                } else {\\n                    effect.element.appendChild(children.element);\\n                }\\n            }\\n\\n            this.element.appendChild(effect.element);\\n\\n            return this;\\n        },\\n\\n        chainEffect: function(type, attributes, children) {\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n\\n            var inId;\\n            var outId;\\n            if (attributes.in == undefined) {\\n                inId = this.getLastResult();\\n            } else {\\n                inId = attributes.in;\\n            }\\n            if (attributes.result == undefined) {\\n                outId = idCounter++;\\n            } else {\\n                outId = attributes.result;\\n            }\\n\\n            this.lastFEResult = outId;\\n\\n            attributes.in = inId;\\n            attributes.result = outId;\\n\\n            this.addEffect(type, attributes, children);\\n\\n            return this;\\n        },\\n\\n        getLastResult: function() {\\n            return (this.lastFEResult == undefined) ? \\\"SourceGraphic\\\" : this.lastFEResult;\\n        },\\n\\n        merge: function(in1, in2, attributes) {\\n            var mergeNode1 = new FR.FilterEffect(\\\"feMergeNode\\\", {\\n                in: in1\\n            });\\n            var mergeNode2 = new FR.FilterEffect(\\\"feMergeNode\\\", {\\n                in: in2\\n            });\\n\\n            this.chainEffect(\\\"feMerge\\\", attributes, [mergeNode1, mergeNode2]);\\n\\n            return this;\\n        },\\n\\n        compose: function(in1, in2, operator, attributes) {\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n\\n            if (operator == undefined) {\\n                operator = \\\"over\\\";\\n            }\\n\\n            attributes.in = in1;\\n            attributes.in2 = in2;\\n            attributes.operator = operator;\\n\\n            this.chainEffect(\\\"feComposite\\\", attributes);\\n\\n            return this;\\n        },\\n\\n        arithmeticCompose: function(in1, in2, k1, k2, k3, k4) {\\n            if (k1 == undefined) {\\n                k1 = 0;\\n            }\\n            if (k2 == undefined) {\\n                k2 = 0;\\n            }\\n            if (k3 == undefined) {\\n                k3 = 0;\\n            }\\n            if (k4 == undefined) {\\n                k4 = 0;\\n            }\\n\\n            this.compose(in1, in2, \\\"arithmetic\\\", {\\n                k1: k1,\\n                k2: k2,\\n                k3: k3,\\n                k4: k4\\n            });\\n\\n            return this;\\n        },\\n\\n        addBlur: function(stdDeviation, attributes) {\\n            if (!stdDeviation) {\\n                throw \\\"Standard deviation is required to perform a blur filter\\\";\\n            }\\n\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n            attributes.stdDeviation = stdDeviation;\\n\\n            this.chainEffect(\\\"feGaussianBlur\\\", attributes);\\n\\n            return this;\\n        },\\n\\n        addOffset: function(dx, dy, attributes) {\\n            if (dx == undefined | dy == undefined) {\\n                throw \\\"dx and dy values are required to perform an offset FE\\\";\\n            }\\n\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n            attributes.dx = dx;\\n            attributes.dy = dy;\\n\\n            this.chainEffect(\\\"feOffset\\\", attributes);\\n\\n            return this;\\n        },\\n\\n        addLighting: function(x, y, z, color, type, attributes) {\\n            if (x == undefined | y == undefined | z == undefined) {\\n                throw \\\"Three co-ordinates are required to create a light source\\\";\\n            }\\n\\n            var previousResult = this.getLastResult();\\n\\n            var id = idCounter++;\\n\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n\\n            attributes.result = id;\\n            if (color != undefined) {\\n                attributes[\\\"lighting-color\\\"] = color;\\n            }\\n\\n            if (type == undefined || type == \\\"diffuse\\\") {\\n                type = \\\"feDiffuseLighting\\\";\\n            } else if (type == \\\"specular\\\") {\\n                type = \\\"feSpecularLighting\\\";\\n            }\\n\\n            var lightSource = new FR.FilterEffect(\\\"fePointLight\\\", {\\n                x: x,\\n                y: y,\\n                z: z\\n            });\\n\\n            this.chainEffect(type, attributes, lightSource).arithmeticCompose(previousResult, id, 3, 0.2, 0, 0);\\n\\n            return this;\\n        },\\n\\n        addShiftToColor: function(color, moveBy, attributes) {\\n            if (color == undefined) {\\n                throw \\\"A colour string is a required argument to create a colorMatrix\\\";\\n            }\\n            if (moveBy == undefined) {\\n                moveBy = 0.5;\\n            }\\n\\n            var remainingColor = 1 - moveBy, x = remainingColor;\\n\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n\\n            var colorObject = Raphael.color(color);\\n            var\\tr = colorObject.r * moveBy / 255,\\n                g = colorObject.g * moveBy / 255,\\n                b = colorObject.b * moveBy / 255;\\n\\n            /**\\n             * r'\\tx 0 0 0 r\\t\\tr\\n             * g'\\t0 x 0 0 g\\t\\tg\\n             * b' =\\t0 0 x 0 b\\t.\\tb\\n             * a'\\t0 0 0 1 0\\t\\to\\n             * 1\\t\\t\\t\\t\\t1\\n             */\\n            attributes.values = x + \\\" 0 0 0 \\\" + r + \\\" 0 \\\" + x + \\\" 0 0 \\\" + g + \\\" 0 0 \\\" + x + \\\" 0 \\\" + b + \\\" 0 0 0 1 0 \\\";\\n\\n            this.chainEffect(\\\"feColorMatrix\\\", attributes);\\n\\n            return this;\\n        },\\n\\n        addRecolor: function(color, opacity, attributes) {\\n            if (color == undefined) {\\n                throw \\\"A colour string is a required argument to create a colorMatrix\\\";\\n            }\\n            if (opacity == undefined) {\\n                opacity = 1;\\n            }\\n\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n\\n            var colorObject = Raphael.color(color);\\n            var\\tr = colorObject.r / 255,\\n                g = colorObject.g / 255,\\n                b = colorObject.b / 255;\\n\\n            /**\\n             * r'\\t0 0 0 0 r\\t\\tr\\n             * g'\\t0 0 0 0 g\\t\\tg\\n             * b' =\\t0 0 0 0 b\\t.\\tb\\n             * a'\\t0 0 0 a 0\\t\\ta\\n             * 1\\t\\t\\t\\t\\t1\\n             */\\n            attributes.values = \\\"0 0 0 0 \\\" + r + \\\" 0 0 0 0 \\\" + g + \\\" 0 0 0 0 \\\" + b + \\\" 0 0 0 \\\" + opacity + \\\" 0 \\\";\\n\\n            this.chainEffect(\\\"feColorMatrix\\\", attributes);\\n\\n            return this;\\n        },\\n\\n        addDesaturate: function(saturation, attributes) {\\n            if (saturation == undefined) {\\n                saturnation = 0;\\n            }\\n\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n\\n            attributes.values = saturation;\\n            attributes.type = \\\"saturate\\\";\\n\\n            this.chainEffect(\\\"feColorMatrix\\\", attributes);\\n\\n            return this;\\n        },\\n\\n        addConvolveMatrix: function(matrix, attributes) {\\n            if (matrix == undefined) {\\n                throw \\\"A matrix (usually 9 numbers) must be provided to apply a convolve matrix transform\\\";\\n            }\\n\\n            if (attributes == undefined) {\\n                attributes = {};\\n            }\\n\\n            attributes.kernelMatrix = matrix;\\n\\n            this.chainEffect(\\\"feConvolveMatrix\\\", attributes);\\n\\n            return this;\\n        },\\n\\n        createShadow: function(dx, dy, blur, opacity, color) {\\n            if (dx == undefined) {\\n                throw \\\"dx is required for the shadow effect\\\";\\n            }\\n            if (dy == undefined) {\\n                throw \\\"dy is required for the shadow effect\\\";\\n            }\\n            if (blur == undefined) {\\n                throw \\\"blur (stdDeviation) is required for the shadow effect\\\";\\n            }\\n\\n            if (opacity == undefined) {\\n                opacity = 0.6;\\n            }\\n\\n            var previousResult = this.getLastResult();\\n\\n            if (color == undefined) {\\n                color = \\\"#000000\\\";\\n            }\\n\\n            this.addOffset(dx, dy, {\\n                in: \\\"SourceAlpha\\\"\\n            });\\n\\n            this.addRecolor(color, opacity);\\n\\n            this.addBlur(blur);\\n\\n            this.merge(this.getLastResult(), previousResult);\\n\\n            return this;\\n        },\\n\\n        createEmboss: function(height, x, y, z) {\\n            if (height == undefined) {\\n                height = 2;\\n            }\\n            if (x == undefined) {\\n                x = -1000;\\n            }\\n            if (y == undefined) {\\n                y = -5000;\\n            }\\n            if (z == undefined) {\\n                z = 300;\\n            }\\n\\n            // Create the highlight\\n\\n            this.addOffset(height * x / (x + y), height * y / (x + y), {\\n                in: \\\"SourceAlpha\\\"\\n            });\\n\\n            this.addBlur(height * 0.5);\\n\\n            var whiteLightSource = new FR.FilterEffect(\\\"fePointLight\\\", {\\n                x: x,\\n                y: y,\\n                z: z\\n            });\\n\\n            this.chainEffect(\\\"feSpecularLighting\\\", {\\n                surfaceScale: height,\\n                specularConstant: 0.8,\\n                specularExponent: 15\\n            }, whiteLightSource);\\n\\n            this.compose(this.getLastResult(), \\\"SourceAlpha\\\", \\\"in\\\");\\n            var whiteLight = this.getLastResult();\\n\\n            // Create the lowlight\\n\\n            this.addOffset(height * -1 * x / (x + y), height * -1 * y / (x + y), {\\n                in: \\\"SourceAlpha\\\"\\n            });\\n\\n            this.addBlur(height * 0.5);\\n\\n            var darkLightSource = new FR.FilterEffect(\\\"fePointLight\\\", {\\n                x: -1 * x,\\n                y: -1 * y,\\n                z:      z\\n            });\\n\\n            this.chainEffect(\\\"feSpecularLighting\\\", {\\n                surfaceScale: height,\\n                specularConstant: 1.8,\\n                specularExponent: 6\\n            }, darkLightSource);\\n\\n            this.compose(this.getLastResult(), \\\"SourceAlpha\\\", \\\"in\\\");\\n            this.chainEffect(\\\"feColorMatrix\\\", {\\n                values: \\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\\\"\\n            });\\n            var darkLight = this.getLastResult();\\n\\n            this.arithmeticCompose(whiteLight, darkLight, 0, 0.8, 0.5, 0);\\n\\n            this.merge(\\\"SourceGraphic\\\", this.getLastResult());\\n\\n            return this;\\n        }\\n    };\\n\\n    scope.FRaphael = FR;\\n})(this);\\n\\n/**\\n * add a filter to the paper by id\\n */\\nRaphael.fn.createFilter = function(id) {\\n    var paper = this;\\n    var filter = new FRaphael.Filter(id);\\n    paper.defs.appendChild(filter.element);\\n\\n    return filter;\\n};\\n\\n/**\\n * Apply a filter to an element by id\\n */\\nRaphael.el.filter = function(filter) {\\n    var id = (filter instanceof FRaphael.Filter) ? filter.id : filter;\\n\\n    this.node.setAttribute(\\\"filter\\\", \\\"url(#\\\" + id + \\\")\\\");\\n    this.data(\\\"filterId\\\", id);\\n\\n    return this;\\n};\\n\\n/**\\n * Get the current filter for an element or a new one if not\\n */\\nRaphael.el.getFilter = function() {\\n    return FRaphael.getFilter(this);\\n};\\n\\n/**\\n * A shorthand method for applying blur\\n */\\nRaphael.el.blur = function(stdDeviation) {\\n    if (stdDeviation == undefined) {\\n        stdDeviation = 3;\\n    }\\n\\n    this.getFilter().addBlur(stdDeviation);\\n\\n    return this;\\n};\\n\\n/**\\n * A shorthand method for applying a drop shadow\\n */\\nRaphael.el.shadow = function(dx, dy, blur, opacity, color) {\\n    if (dx == undefined) {\\n        dx = 3;\\n    }\\n    if (dy == undefined) {\\n        dy = 3;\\n    }\\n    if (blur == undefined) {\\n        blur = 3;\\n    }\\n\\n    this.getFilter().createShadow(dx, dy, blur, opacity, color);\\n\\n    return this;\\n};\\n\\n/**\\n * A shorthand method for applying lighting\\n */\\nRaphael.el.light = function(x, y, z, color, type) {\\n    if (x == undefined) {\\n        x = this.paper.width;\\n    }\\n    if (y == undefined) {\\n        y = 0;\\n    }\\n    if (z == undefined) {\\n        z = 20;\\n    }\\n\\n    this.getFilter().addLighting(x, y, z, color, type);\\n\\n    return this;\\n};\\n\\n/**\\n * A shorthand method for applying a colour shift\\n */\\nRaphael.el.colorShift = function(color, shift) {\\n    if (color == undefined) {\\n        color = \\\"black\\\";\\n    }\\n    if (shift == undefined) {\\n        shift = 0.5;\\n    }\\n\\n    this.getFilter().addShiftToColor(color, shift);\\n\\n    return this;\\n};\\n\\n/**\\n * A shorthand method for embossing\\n */\\nRaphael.el.emboss = function(height) {\\n    this.getFilter().createEmboss(height);\\n\\n    return this;\\n};\\n\\n/**\\n * A shorthand method for desaturating\\n */\\nRaphael.el.desaturate = function(saturation) {\\n    this.getFilter().addDesaturate(saturation);\\n\\n    return this;\\n};\\n\\n/**\\n * A shorthand method for complete desaturation\\n */\\nRaphael.el.greyScale = function() {\\n    this.getFilter().addDesaturate(0);\\n\\n    return this;\\n};\\n\"","/*\n\tBased on rgbcolor.js by Stoyan Stefanov <sstoo@gmail.com>\n\thttp://www.phpied.com/rgb-color-parser-in-javascript/\n*/\n\nmodule.exports = function(color_string) {\n    this.ok = false;\n    this.alpha = 1.0;\n\n    // strip any leading #\n    if (color_string.charAt(0) == '#') { // remove # if any\n        color_string = color_string.substr(1,6);\n    }\n\n    color_string = color_string.replace(/ /g,'');\n    color_string = color_string.toLowerCase();\n\n    // before getting into regexps, try simple matches\n    // and overwrite the input\n    var simple_colors = {\n        aliceblue: 'f0f8ff',\n        antiquewhite: 'faebd7',\n        aqua: '00ffff',\n        aquamarine: '7fffd4',\n        azure: 'f0ffff',\n        beige: 'f5f5dc',\n        bisque: 'ffe4c4',\n        black: '000000',\n        blanchedalmond: 'ffebcd',\n        blue: '0000ff',\n        blueviolet: '8a2be2',\n        brown: 'a52a2a',\n        burlywood: 'deb887',\n        cadetblue: '5f9ea0',\n        chartreuse: '7fff00',\n        chocolate: 'd2691e',\n        coral: 'ff7f50',\n        cornflowerblue: '6495ed',\n        cornsilk: 'fff8dc',\n        crimson: 'dc143c',\n        cyan: '00ffff',\n        darkblue: '00008b',\n        darkcyan: '008b8b',\n        darkgoldenrod: 'b8860b',\n        darkgray: 'a9a9a9',\n        darkgreen: '006400',\n        darkkhaki: 'bdb76b',\n        darkmagenta: '8b008b',\n        darkolivegreen: '556b2f',\n        darkorange: 'ff8c00',\n        darkorchid: '9932cc',\n        darkred: '8b0000',\n        darksalmon: 'e9967a',\n        darkseagreen: '8fbc8f',\n        darkslateblue: '483d8b',\n        darkslategray: '2f4f4f',\n        darkturquoise: '00ced1',\n        darkviolet: '9400d3',\n        deeppink: 'ff1493',\n        deepskyblue: '00bfff',\n        dimgray: '696969',\n        dodgerblue: '1e90ff',\n        feldspar: 'd19275',\n        firebrick: 'b22222',\n        floralwhite: 'fffaf0',\n        forestgreen: '228b22',\n        fuchsia: 'ff00ff',\n        gainsboro: 'dcdcdc',\n        ghostwhite: 'f8f8ff',\n        gold: 'ffd700',\n        goldenrod: 'daa520',\n        gray: '808080',\n        green: '008000',\n        greenyellow: 'adff2f',\n        honeydew: 'f0fff0',\n        hotpink: 'ff69b4',\n        indianred : 'cd5c5c',\n        indigo : '4b0082',\n        ivory: 'fffff0',\n        khaki: 'f0e68c',\n        lavender: 'e6e6fa',\n        lavenderblush: 'fff0f5',\n        lawngreen: '7cfc00',\n        lemonchiffon: 'fffacd',\n        lightblue: 'add8e6',\n        lightcoral: 'f08080',\n        lightcyan: 'e0ffff',\n        lightgoldenrodyellow: 'fafad2',\n        lightgrey: 'd3d3d3',\n        lightgreen: '90ee90',\n        lightpink: 'ffb6c1',\n        lightsalmon: 'ffa07a',\n        lightseagreen: '20b2aa',\n        lightskyblue: '87cefa',\n        lightslateblue: '8470ff',\n        lightslategray: '778899',\n        lightsteelblue: 'b0c4de',\n        lightyellow: 'ffffe0',\n        lime: '00ff00',\n        limegreen: '32cd32',\n        linen: 'faf0e6',\n        magenta: 'ff00ff',\n        maroon: '800000',\n        mediumaquamarine: '66cdaa',\n        mediumblue: '0000cd',\n        mediumorchid: 'ba55d3',\n        mediumpurple: '9370d8',\n        mediumseagreen: '3cb371',\n        mediumslateblue: '7b68ee',\n        mediumspringgreen: '00fa9a',\n        mediumturquoise: '48d1cc',\n        mediumvioletred: 'c71585',\n        midnightblue: '191970',\n        mintcream: 'f5fffa',\n        mistyrose: 'ffe4e1',\n        moccasin: 'ffe4b5',\n        navajowhite: 'ffdead',\n        navy: '000080',\n        oldlace: 'fdf5e6',\n        olive: '808000',\n        olivedrab: '6b8e23',\n        orange: 'ffa500',\n        orangered: 'ff4500',\n        orchid: 'da70d6',\n        palegoldenrod: 'eee8aa',\n        palegreen: '98fb98',\n        paleturquoise: 'afeeee',\n        palevioletred: 'd87093',\n        papayawhip: 'ffefd5',\n        peachpuff: 'ffdab9',\n        peru: 'cd853f',\n        pink: 'ffc0cb',\n        plum: 'dda0dd',\n        powderblue: 'b0e0e6',\n        purple: '800080',\n        red: 'ff0000',\n        rosybrown: 'bc8f8f',\n        royalblue: '4169e1',\n        saddlebrown: '8b4513',\n        salmon: 'fa8072',\n        sandybrown: 'f4a460',\n        seagreen: '2e8b57',\n        seashell: 'fff5ee',\n        sienna: 'a0522d',\n        silver: 'c0c0c0',\n        skyblue: '87ceeb',\n        slateblue: '6a5acd',\n        slategray: '708090',\n        snow: 'fffafa',\n        springgreen: '00ff7f',\n        steelblue: '4682b4',\n        tan: 'd2b48c',\n        teal: '008080',\n        thistle: 'd8bfd8',\n        tomato: 'ff6347',\n        turquoise: '40e0d0',\n        violet: 'ee82ee',\n        violetred: 'd02090',\n        wheat: 'f5deb3',\n        white: 'ffffff',\n        whitesmoke: 'f5f5f5',\n        yellow: 'ffff00',\n        yellowgreen: '9acd32'\n    };\n    color_string = simple_colors[color_string] || color_string;\n    // emd of simple type-in colors\n\n    // array of color definition objects\n    var color_defs = [\n        {\n            re: /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*((?:\\d?\\.)?\\d)\\)$/,\n            example: ['rgba(123, 234, 45, 0.8)', 'rgba(255,234,245,1.0)'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1]),\n                    parseInt(bits[2]),\n                    parseInt(bits[3]),\n                    parseFloat(bits[4])\n                ];\n            }\n        },\n        {\n            re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1]),\n                    parseInt(bits[2]),\n                    parseInt(bits[3])\n                ];\n            }\n        },\n        {\n            re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n            example: ['#00ff00', '336699'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1], 16),\n                    parseInt(bits[2], 16),\n                    parseInt(bits[3], 16)\n                ];\n            }\n        },\n        {\n            re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n            example: ['#fb0', 'f0f'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1] + bits[1], 16),\n                    parseInt(bits[2] + bits[2], 16),\n                    parseInt(bits[3] + bits[3], 16)\n                ];\n            }\n        }\n    ];\n\n    // search through the definitions to find a match\n    for (var i = 0; i < color_defs.length; i++) {\n        var re = color_defs[i].re;\n        var processor = color_defs[i].process;\n        var bits = re.exec(color_string);\n        if (bits) {\n            var channels = processor(bits);\n            this.r = channels[0];\n            this.g = channels[1];\n            this.b = channels[2];\n            if (channels.length > 3) {\n                this.alpha = channels[3];\n            }\n            this.ok = true;\n        }\n\n    }\n\n    // validate/cleanup values\n    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);\n    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);\n    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);\n    this.alpha = (this.alpha < 0) ? 0 : ((this.alpha > 1.0 || isNaN(this.alpha)) ? 1.0 : this.alpha);\n\n    // some getters\n    this.toRGB = function () {\n        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\n    }\n    this.toRGBA = function () {\n        return 'rgba(' + this.r + ', ' + this.g + ', ' + this.b + ', ' + this.alpha + ')';\n    }\n    this.toHex = function () {\n        var r = this.r.toString(16);\n        var g = this.g.toString(16);\n        var b = this.b.toString(16);\n        if (r.length == 1) r = '0' + r;\n        if (g.length == 1) g = '0' + g;\n        if (b.length == 1) b = '0' + b;\n        return '#' + r + g + b;\n    }\n\n    // help\n    this.getHelpXML = function () {\n\n        var examples = new Array();\n        // add regexps\n        for (var i = 0; i < color_defs.length; i++) {\n            var example = color_defs[i].example;\n            for (var j = 0; j < example.length; j++) {\n                examples[examples.length] = example[j];\n            }\n        }\n        // add type-in colors\n        for (var sc in simple_colors) {\n            examples[examples.length] = sc;\n        }\n\n        var xml = document.createElement('ul');\n        xml.setAttribute('id', 'rgbcolor-examples');\n        for (var i = 0; i < examples.length; i++) {\n            try {\n                var list_item = document.createElement('li');\n                var list_color = new RGBColor(examples[i]);\n                var example_div = document.createElement('div');\n                example_div.style.cssText =\n                        'margin: 3px; '\n                        + 'border: 1px solid black; '\n                        + 'background:' + list_color.toHex() + '; '\n                        + 'color:' + list_color.toHex()\n                ;\n                example_div.appendChild(document.createTextNode('test'));\n                var list_item_value = document.createTextNode(\n                    ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()\n                );\n                list_item.appendChild(example_div);\n                list_item.appendChild(list_item_value);\n                xml.appendChild(list_item);\n\n            } catch(e){}\n        }\n        return xml;\n\n    }\n\n}\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n","/*! 2.3.1 */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(\"shifty\",[],e):\"object\"==typeof exports?exports.shifty=e():t.shifty=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"/assets/\",e(e.s=6)}([function(t,e,n){\"use strict\";(function(t){function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function i(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function o(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=new j,n=e.tween(t);return n.tweenable=e,n}Object.defineProperty(e,\"__esModule\",{value:!0}),e.Tweenable=e.composeEasingObject=e.tweenProps=e.clone=e.each=void 0;var u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t};e.tween=o;var c=n(5),s=r(c),f=n(1),h=function(t){return t&&t.__esModule?t:{default:t}}(f),l=n(7),p=r(l),d=\"undefined\"!=typeof window?window:t,m=d.cancelAnimationFrame||d.webkitCancelAnimationFrame||d.oCancelAnimationFrame||d.msCancelAnimationFrame||d.mozCancelRequestAnimationFrame||d.clearTimeout,_=d.requestAnimationFrame||d.webkitRequestAnimationFrame||d.oRequestAnimationFrame||d.msRequestAnimationFrame||d.mozCancelRequestAnimationFrame&&d.mozRequestAnimationFrame||setTimeout,v=function(){},y=e.each=function(t,e){return Object.keys(t).forEach(e)},w=e.clone=function(t){return(0,h.default)({},t)},g=w(s),b=function(t,e,n,r){return t+(e-t)*n(r)},O=e.tweenProps=function(t,e,n,r,i,o,u){var a=t<o?0:(t-o)/i;return y(e,function(t){var i=u[t],o=\"function\"==typeof i?i:g[i];e[t]=b(n[t],r[t],o,a)}),e},M=e.composeEasingObject=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"linear\",n={},r=void 0===e?\"undefined\":a(e);return\"string\"===r||\"function\"===r?y(t,function(t){return n[t]=e}):y(t,function(t){return n[t]=n[t]||e[t]||\"linear\"}),n},j=e.Tweenable=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;i(this,t),this._currentState=e,this._configured=!1,this._scheduleFunction=_,void 0!==n&&this.setConfig(n)}return u(t,[{key:\"_applyFilter\",value:function(e){var n=this,r=t.filters,i=this._filterArgs;y(r,function(t){var o=r[t][e];void 0!==o&&o.apply(n,i)})}},{key:\"_timeoutHandler\",value:function(e){var n=this,r=arguments,i=this._currentState,o=this._delay,u=this._duration,a=this._step,c=this._targetState,s=this._timestamp,f=s+o+u,h=Math.min(e||t.now(),f),l=h>=f,p=u-(f-h);this.isPlaying()&&(l?(a(c,this._attachment,p),this.stop(!0)):(this._scheduleId=this._scheduleFunction.call(d,function(){return n._timeoutHandler.apply(n,r)},1e3/60),this._applyFilter(\"beforeTween\"),h<s+o?(h=1,u=1,s=1):s+=o,O(h,i,this._originalState,c,u,s,this._easing),this._applyFilter(\"afterTween\"),a(i,this._attachment,p)))}},{key:\"tween\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,n=this._attachment,r=this._configured;return this._isTweening?this:(void 0===e&&r||this.setConfig(e),this._timestamp=t.now(),this._start(this.get(),n),this.resume())}},{key:\"setConfig\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._configured=!0,this._attachment=e.attachment,(0,h.default)(this,{_pausedAtTime:null,_scheduleId:null,_delay:e.delay||0,_start:e.start||v,_step:e.step||v,_duration:e.duration||500,_currentState:w(e.from||this.get())}),(0,h.default)(this,{_originalState:this.get(),_targetState:w(e.to||this.get())});var n=this._currentState;this._targetState=(0,h.default)({},n,this._targetState),this._easing=M(n,e.easing),this._filterArgs=[n,this._originalState,this._targetState,this._easing],this._applyFilter(\"tweenCreated\");var r=e.promise||Promise;return this._promise=new r(function(e,n){t._resolve=e,t._reject=n}),this._promise.catch(v),this}},{key:\"get\",value:function(){return w(this._currentState)}},{key:\"set\",value:function(t){this._currentState=t}},{key:\"pause\",value:function(){return this._pausedAtTime=t.now(),this._isPaused=!0,this}},{key:\"resume\",value:function(){return this._isPaused&&(this._timestamp+=t.now()-this._pausedAtTime),this._isPaused=!1,this._isTweening=!0,this._timeoutHandler(),this._promise}},{key:\"seek\",value:function(e){e=Math.max(e,0);var n=t.now();return this._timestamp+e===0?this:(this._timestamp=n-e,this.isPlaying()||(this._isTweening=!0,this._isPaused=!1,this._timeoutHandler(n),this.pause()),this)}},{key:\"stop\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this._attachment,n=this._currentState,r=this._easing,i=this._originalState,o=this._targetState;return this._isTweening=!1,this._isPaused=!1,m(this._scheduleId),t?(this._applyFilter(\"beforeTween\"),O(1,n,i,o,1,0,r),this._applyFilter(\"afterTween\"),this._applyFilter(\"afterTweenEnd\"),this._resolve(n,e)):this._reject(n,e),this}},{key:\"isPlaying\",value:function(){return this._isTweening&&!this._isPaused}},{key:\"setScheduleFunction\",value:function(t){this._scheduleFunction=t}},{key:\"dispose\",value:function(){var t=this;y(this,function(e){return delete t[e]})}}]),t}();(0,h.default)(j,{formulas:g,filters:{token:p},now:Date.now||function(t){return+new Date}})}).call(e,n(4))},function(t,e,n){\"use strict\";function r(t){if(null===t||void 0===t)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(t)}var i=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,u=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String(\"abc\");if(t[5]=\"de\",\"5\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(t){r[t]=t}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(t){return!1}}()?Object.assign:function(t,e){for(var n,a,c=r(t),s=1;s<arguments.length;s++){n=Object(arguments[s]);for(var f in n)o.call(n,f)&&(c[f]=n[f]);if(i){a=i(n);for(var h=0;h<a.length;h++)u.call(n,a[h])&&(c[a[h]]=n[a[h]])}}return c}},function(t,e,n){\"use strict\";function r(t,e,n,r,i,o){var u=0,a=0,c=0,s=0,f=0,h=0,l=function(t){return((u*t+a)*t+c)*t},p=function(t){return((s*t+f)*t+h)*t},d=function(t){return(3*u*t+2*a)*t+c},m=function(t){return t>=0?t:0-t},_=function(t,e){var n=void 0,r=void 0,i=void 0,o=void 0,u=void 0,a=void 0;for(i=t,a=0;a<8;a++){if(o=l(i)-t,m(o)<e)return i;if(u=d(i),m(u)<1e-6)break;i-=o/u}if(n=0,r=1,(i=t)<n)return n;if(i>r)return r;for(;n<r;){if(o=l(i),m(o-t)<e)return i;t>o?n=i:r=i,i=.5*(r-n)+n}return i};return c=3*e,a=3*(r-e)-c,u=1-c-a,h=3*n,f=3*(i-n)-h,s=1-h-f,function(t,e){return p(_(t,e))}(t,function(t){return 1/(200*t)}(o))}Object.defineProperty(e,\"__esModule\",{value:!0}),e.unsetBezierFunction=e.setBezierFunction=void 0;var i=n(0),o=n(1),u=function(t){return t&&t.__esModule?t:{default:t}}(o),a=function(t,e,n,i){return function(o){return r(o,t,e,n,i,1)}};e.setBezierFunction=function(t,e,n,r,o){return i.Tweenable.formulas[t]=(0,u.default)(a(e,n,r,o),{displayName:t,x1:e,y1:n,x2:r,y2:o})},e.unsetBezierFunction=function(t){return delete i.Tweenable.formulas[t]}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.interpolate=void 0;var r=n(0),i=new r.Tweenable;i._filterArgs=[];e.interpolate=function(t,e,n,o){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=(0,r.clone)(t),c=(0,r.composeEasingObject)(t,o);i.set({}),i._filterArgs=[a,t,e,c],i._applyFilter(\"tweenCreated\"),i._applyFilter(\"beforeTween\");var s=(0,r.tweenProps)(n,a,t,e,1,u,c);return i._applyFilter(\"afterTween\"),s}},function(t,e,n){\"use strict\";var r,i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t};r=function(){return this}();try{r=r||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"===(\"undefined\"==typeof window?\"undefined\":i(window))&&(r=window)}t.exports=r},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});e.linear=function(t){return t},e.easeInQuad=function(t){return Math.pow(t,2)},e.easeOutQuad=function(t){return-(Math.pow(t-1,2)-1)},e.easeInOutQuad=function(t){return(t/=.5)<1?.5*Math.pow(t,2):-.5*((t-=2)*t-2)},e.easeInCubic=function(t){return Math.pow(t,3)},e.easeOutCubic=function(t){return Math.pow(t-1,3)+1},e.easeInOutCubic=function(t){return(t/=.5)<1?.5*Math.pow(t,3):.5*(Math.pow(t-2,3)+2)},e.easeInQuart=function(t){return Math.pow(t,4)},e.easeOutQuart=function(t){return-(Math.pow(t-1,4)-1)},e.easeInOutQuart=function(t){return(t/=.5)<1?.5*Math.pow(t,4):-.5*((t-=2)*Math.pow(t,3)-2)},e.easeInQuint=function(t){return Math.pow(t,5)},e.easeOutQuint=function(t){return Math.pow(t-1,5)+1},e.easeInOutQuint=function(t){return(t/=.5)<1?.5*Math.pow(t,5):.5*(Math.pow(t-2,5)+2)},e.easeInSine=function(t){return 1-Math.cos(t*(Math.PI/2))},e.easeOutSine=function(t){return Math.sin(t*(Math.PI/2))},e.easeInOutSine=function(t){return-.5*(Math.cos(Math.PI*t)-1)},e.easeInExpo=function(t){return 0===t?0:Math.pow(2,10*(t-1))},e.easeOutExpo=function(t){return 1===t?1:1-Math.pow(2,-10*t)},e.easeInOutExpo=function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},e.easeInCirc=function(t){return-(Math.sqrt(1-t*t)-1)},e.easeOutCirc=function(t){return Math.sqrt(1-Math.pow(t-1,2))},e.easeInOutCirc=function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},e.easeOutBounce=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},e.easeInBack=function(t){var e=1.70158;return t*t*((e+1)*t-e)},e.easeOutBack=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},e.easeInOutBack=function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},e.elastic=function(t){return-1*Math.pow(4,-8*t)*Math.sin((6*t-1)*(2*Math.PI)/2)+1},e.swingFromTo=function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},e.swingFrom=function(t){var e=1.70158;return t*t*((e+1)*t-e)},e.swingTo=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},e.bounce=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},e.bouncePast=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?2-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?2-(7.5625*(t-=2.25/2.75)*t+.9375):2-(7.5625*(t-=2.625/2.75)*t+.984375)},e.easeFromTo=function(t){return(t/=.5)<1?.5*Math.pow(t,4):-.5*((t-=2)*Math.pow(t,3)-2)},e.easeFrom=function(t){return Math.pow(t,4)},e.easeTo=function(t){return Math.pow(t,.25)}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=n(0);Object.defineProperty(e,\"Tweenable\",{enumerable:!0,get:function(){return r.Tweenable}}),Object.defineProperty(e,\"tween\",{enumerable:!0,get:function(){return r.tween}});var i=n(3);Object.defineProperty(e,\"interpolate\",{enumerable:!0,get:function(){return i.interpolate}});var o=n(2);Object.defineProperty(e,\"setBezierFunction\",{enumerable:!0,get:function(){return o.setBezierFunction}}),Object.defineProperty(e,\"unsetBezierFunction\",{enumerable:!0,get:function(){return o.unsetBezierFunction}})},function(t,e,n){\"use strict\";function r(t){return parseInt(t,16)}function i(t,e,n){[t,e,n].forEach(_),this._tokenData=g(t)}function o(t,e,n,r){var i=this._tokenData;P(r,i),[t,e,n].forEach(function(t){return b(t,i)})}function u(t,e,n,r){var i=this._tokenData;[t,e,n].forEach(function(t){return F(t,i)}),S(r,i)}Object.defineProperty(e,\"__esModule\",{value:!0}),e.tweenCreated=i,e.beforeTween=o,e.afterTween=u;var a=n(0),c=function(){var t=/[0-9.\\-]+/g.source,e=/,\\s*/.source;return new RegExp(\"rgb\\\\(\"+t+e+t+e+t+\"\\\\)\",\"g\")}(),s=/#([0-9]|[a-f]){3,6}/gi,f=function(t,e){return t.map(function(t,n){return\"_\"+e+\"_\"+n})},h=function(t){var e=t.match(/([^\\-0-9\\.]+)/g);return e?(1===e.length||t.charAt(0).match(/(\\d|\\-|\\.)/))&&e.unshift(\"\"):e=[\"\",\"\"],e.join(\"VAL\")},l=function(t){return t=t.replace(/#/,\"\"),3===t.length&&(t=t.split(\"\"),t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),[r(t.substr(0,2)),r(t.substr(2,2)),r(t.substr(4,2))]},p=function(t){return\"rgb(\"+l(t).join(\",\")+\")\"},d=function(t,e,n){var r=e.match(t),i=e.replace(t,\"VAL\");return r&&r.forEach(function(t){return i=i.replace(\"VAL\",n(t))}),i},m=function(t){return d(s,t,p)},_=function(t){(0,a.each)(t,function(e){var n=t[e];\"string\"==typeof n&&n.match(s)&&(t[e]=m(n))})},v=function(t){var e=t.match(/[0-9.\\-]+/g).map(Math.floor);return\"\"+t.match(/^.*\\(/)[0]+e.join(\",\")+\")\"},y=function(t){return d(c,t,v)},w=function(t){return t.match(/[0-9.\\-]+/g)},g=function(t){var e={};return(0,a.each)(t,function(n){var r=t[n];\"string\"==typeof r&&(e[n]={formatString:h(r),chunkNames:f(w(r),n)})}),e},b=function(t,e){(0,a.each)(e,function(n){w(t[n]).forEach(function(r,i){return t[e[n].chunkNames[i]]=+r}),delete t[n]})},O=function(t,e){var n={};return e.forEach(function(e){n[e]=t[e],delete t[e]}),n},M=function(t,e){return e.map(function(e){return t[e]})},j=function(t,e){return e.forEach(function(e){return t=t.replace(\"VAL\",+e.toFixed(4))}),t},F=function(t,e){(0,a.each)(e,function(n){var r=e[n],i=r.chunkNames,o=r.formatString,u=j(o,M(O(t,i),i));t[n]=y(u)})},P=function(t,e){(0,a.each)(e,function(n){var r=e[n].chunkNames,i=t[n];\"string\"==typeof i?function(){var e=i.split(\" \"),n=e[e.length-1];r.forEach(function(r,i){return t[r]=e[i]||n})}():r.forEach(function(e){return t[e]=i}),delete t[n]})},S=function(t,e){(0,a.each)(e,function(n){var r=e[n].chunkNames,i=(r.length,t[r[0]]);t[n]=\"string\"==typeof i?r.map(function(e){var n=t[e];return delete t[e],n}).join(\" \"):i})}}])});\n//# sourceMappingURL=shifty.js.map","/*\n\nStackBlur - a fast almost Gaussian Blur For Canvas\n\nVersion: \t0.5\nAuthor:\t\tMario Klingemann\nContact: \tmario@quasimondo.com\nWebsite:\thttp://www.quasimondo.com/StackBlurForCanvas\nTwitter:\t@quasimondo\n\nIn case you find this class useful - especially in commercial projects -\nI am not totally unhappy for a small donation to my PayPal account\nmario@quasimondo.de\n\nOr support me on flattr: \nhttps://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript\n\nCopyright (c) 2010 Mario Klingemann\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n*/\n\nvar mul_table = [\n        512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,\n        454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,\n        482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,\n        437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,\n        497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,\n        320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,\n        446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,\n        329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,\n        505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,\n        399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,\n        324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,\n        268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,\n        451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,\n        385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,\n        332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,\n        289,287,285,282,280,278,275,273,271,269,267,265,263,261,259];\n        \n   \nvar shg_table = [\n\t     9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, \n\t\t17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, \n\t\t19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,\n\t\t20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,\n\t\t21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n\t\t21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, \n\t\t22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n\t\t22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, \n\t\t23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n\t\t23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n\t\t23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, \n\t\t23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, \n\t\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n\t\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n\t\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n\t\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 ];\n\nfunction blur( pixels, width, height, radius )\n{\n\tif ( isNaN(radius) || radius < 1 ) return;\n\tradius |= 0;\n\n\tvar x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum, \n\tr_out_sum, g_out_sum, b_out_sum, a_out_sum,\n\tr_in_sum, g_in_sum, b_in_sum, a_in_sum, \n\tpr, pg, pb, pa, rbs;\n\t\t\t\n\tvar div = radius + radius + 1;\n\tvar w4 = width << 2;\n\tvar widthMinus1  = width - 1;\n\tvar heightMinus1 = height - 1;\n\tvar radiusPlus1  = radius + 1;\n\tvar sumFactor = radiusPlus1 * ( radiusPlus1 + 1 ) / 2;\n\t\n\tvar stackStart = new BlurStack();\n\tvar stack = stackStart;\n\tfor ( i = 1; i < div; i++ )\n\t{\n\t\tstack = stack.next = new BlurStack();\n\t\tif ( i == radiusPlus1 ) var stackEnd = stack;\n\t}\n\tstack.next = stackStart;\n\tvar stackIn = null;\n\tvar stackOut = null;\n\t\n\tyw = yi = 0;\n\t\n\tvar mul_sum = mul_table[radius];\n\tvar shg_sum = shg_table[radius];\n\t\n\tfor ( y = 0; y < height; y++ )\n\t{\n\t\tr_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;\n\t\t\n\t\tr_out_sum = radiusPlus1 * ( pr = pixels[yi] );\n\t\tg_out_sum = radiusPlus1 * ( pg = pixels[yi+1] );\n\t\tb_out_sum = radiusPlus1 * ( pb = pixels[yi+2] );\n\t\ta_out_sum = radiusPlus1 * ( pa = pixels[yi+3] );\n\t\t\n\t\tr_sum += sumFactor * pr;\n\t\tg_sum += sumFactor * pg;\n\t\tb_sum += sumFactor * pb;\n\t\ta_sum += sumFactor * pa;\n\t\t\n\t\tstack = stackStart;\n\t\t\n\t\tfor( i = 0; i < radiusPlus1; i++ )\n\t\t{\n\t\t\tstack.r = pr;\n\t\t\tstack.g = pg;\n\t\t\tstack.b = pb;\n\t\t\tstack.a = pa;\n\t\t\tstack = stack.next;\n\t\t}\n\t\t\n\t\tfor( i = 1; i < radiusPlus1; i++ )\n\t\t{\n\t\t\tp = yi + (( widthMinus1 < i ? widthMinus1 : i ) << 2 );\n\t\t\tr_sum += ( stack.r = ( pr = pixels[p])) * ( rbs = radiusPlus1 - i );\n\t\t\tg_sum += ( stack.g = ( pg = pixels[p+1])) * rbs;\n\t\t\tb_sum += ( stack.b = ( pb = pixels[p+2])) * rbs;\n\t\t\ta_sum += ( stack.a = ( pa = pixels[p+3])) * rbs;\n\t\t\t\n\t\t\tr_in_sum += pr;\n\t\t\tg_in_sum += pg;\n\t\t\tb_in_sum += pb;\n\t\t\ta_in_sum += pa;\n\t\t\t\n\t\t\tstack = stack.next;\n\t\t}\n\t\t\n\t\t\n\t\tstackIn = stackStart;\n\t\tstackOut = stackEnd;\n\t\tfor ( x = 0; x < width; x++ )\n\t\t{\n\t\t\tpixels[yi+3] = pa = (a_sum * mul_sum) >> shg_sum;\n\t\t\tif ( pa != 0 )\n\t\t\t{\n\t\t\t\tpa = 255 / pa;\n\t\t\t\tpixels[yi]   = ((r_sum * mul_sum) >> shg_sum) * pa;\n\t\t\t\tpixels[yi+1] = ((g_sum * mul_sum) >> shg_sum) * pa;\n\t\t\t\tpixels[yi+2] = ((b_sum * mul_sum) >> shg_sum) * pa;\n\t\t\t} else {\n\t\t\t\tpixels[yi] = pixels[yi+1] = pixels[yi+2] = 0;\n\t\t\t}\n\t\t\t\n\t\t\tr_sum -= r_out_sum;\n\t\t\tg_sum -= g_out_sum;\n\t\t\tb_sum -= b_out_sum;\n\t\t\ta_sum -= a_out_sum;\n\t\t\t\n\t\t\tr_out_sum -= stackIn.r;\n\t\t\tg_out_sum -= stackIn.g;\n\t\t\tb_out_sum -= stackIn.b;\n\t\t\ta_out_sum -= stackIn.a;\n\t\t\t\n\t\t\tp =  ( yw + ( ( p = x + radius + 1 ) < widthMinus1 ? p : widthMinus1 ) ) << 2;\n\t\t\t\n\t\t\tr_in_sum += ( stackIn.r = pixels[p]);\n\t\t\tg_in_sum += ( stackIn.g = pixels[p+1]);\n\t\t\tb_in_sum += ( stackIn.b = pixels[p+2]);\n\t\t\ta_in_sum += ( stackIn.a = pixels[p+3]);\n\t\t\t\n\t\t\tr_sum += r_in_sum;\n\t\t\tg_sum += g_in_sum;\n\t\t\tb_sum += b_in_sum;\n\t\t\ta_sum += a_in_sum;\n\t\t\t\n\t\t\tstackIn = stackIn.next;\n\t\t\t\n\t\t\tr_out_sum += ( pr = stackOut.r );\n\t\t\tg_out_sum += ( pg = stackOut.g );\n\t\t\tb_out_sum += ( pb = stackOut.b );\n\t\t\ta_out_sum += ( pa = stackOut.a );\n\t\t\t\n\t\t\tr_in_sum -= pr;\n\t\t\tg_in_sum -= pg;\n\t\t\tb_in_sum -= pb;\n\t\t\ta_in_sum -= pa;\n\t\t\t\n\t\t\tstackOut = stackOut.next;\n\n\t\t\tyi += 4;\n\t\t}\n\t\tyw += width;\n\t}\n\n\t\n\tfor ( x = 0; x < width; x++ )\n\t{\n\t\tg_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;\n\t\t\n\t\tyi = x << 2;\n\t\tr_out_sum = radiusPlus1 * ( pr = pixels[yi]);\n\t\tg_out_sum = radiusPlus1 * ( pg = pixels[yi+1]);\n\t\tb_out_sum = radiusPlus1 * ( pb = pixels[yi+2]);\n\t\ta_out_sum = radiusPlus1 * ( pa = pixels[yi+3]);\n\t\t\n\t\tr_sum += sumFactor * pr;\n\t\tg_sum += sumFactor * pg;\n\t\tb_sum += sumFactor * pb;\n\t\ta_sum += sumFactor * pa;\n\t\t\n\t\tstack = stackStart;\n\t\t\n\t\tfor( i = 0; i < radiusPlus1; i++ )\n\t\t{\n\t\t\tstack.r = pr;\n\t\t\tstack.g = pg;\n\t\t\tstack.b = pb;\n\t\t\tstack.a = pa;\n\t\t\tstack = stack.next;\n\t\t}\n\t\t\n\t\typ = width;\n\t\t\n\t\tfor( i = 1; i <= radius; i++ )\n\t\t{\n\t\t\tyi = ( yp + x ) << 2;\n\t\t\t\n\t\t\tr_sum += ( stack.r = ( pr = pixels[yi])) * ( rbs = radiusPlus1 - i );\n\t\t\tg_sum += ( stack.g = ( pg = pixels[yi+1])) * rbs;\n\t\t\tb_sum += ( stack.b = ( pb = pixels[yi+2])) * rbs;\n\t\t\ta_sum += ( stack.a = ( pa = pixels[yi+3])) * rbs;\n\t\t   \n\t\t\tr_in_sum += pr;\n\t\t\tg_in_sum += pg;\n\t\t\tb_in_sum += pb;\n\t\t\ta_in_sum += pa;\n\t\t\t\n\t\t\tstack = stack.next;\n\t\t\n\t\t\tif( i < heightMinus1 )\n\t\t\t{\n\t\t\t\typ += width;\n\t\t\t}\n\t\t}\n\t\t\n\t\tyi = x;\n\t\tstackIn = stackStart;\n\t\tstackOut = stackEnd;\n\t\tfor ( y = 0; y < height; y++ )\n\t\t{\n\t\t\tp = yi << 2;\n\t\t\tpixels[p+3] = pa = (a_sum * mul_sum) >> shg_sum;\n\t\t\tif ( pa > 0 )\n\t\t\t{\n\t\t\t\tpa = 255 / pa;\n\t\t\t\tpixels[p]   = ((r_sum * mul_sum) >> shg_sum ) * pa;\n\t\t\t\tpixels[p+1] = ((g_sum * mul_sum) >> shg_sum ) * pa;\n\t\t\t\tpixels[p+2] = ((b_sum * mul_sum) >> shg_sum ) * pa;\n\t\t\t} else {\n\t\t\t\tpixels[p] = pixels[p+1] = pixels[p+2] = 0;\n\t\t\t}\n\t\t\t\n\t\t\tr_sum -= r_out_sum;\n\t\t\tg_sum -= g_out_sum;\n\t\t\tb_sum -= b_out_sum;\n\t\t\ta_sum -= a_out_sum;\n\t\t   \n\t\t\tr_out_sum -= stackIn.r;\n\t\t\tg_out_sum -= stackIn.g;\n\t\t\tb_out_sum -= stackIn.b;\n\t\t\ta_out_sum -= stackIn.a;\n\t\t\t\n\t\t\tp = ( x + (( ( p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1 ) * width )) << 2;\n\t\t\t\n\t\t\tr_sum += ( r_in_sum += ( stackIn.r = pixels[p]));\n\t\t\tg_sum += ( g_in_sum += ( stackIn.g = pixels[p+1]));\n\t\t\tb_sum += ( b_in_sum += ( stackIn.b = pixels[p+2]));\n\t\t\ta_sum += ( a_in_sum += ( stackIn.a = pixels[p+3]));\n\t\t   \n\t\t\tstackIn = stackIn.next;\n\t\t\t\n\t\t\tr_out_sum += ( pr = stackOut.r );\n\t\t\tg_out_sum += ( pg = stackOut.g );\n\t\t\tb_out_sum += ( pb = stackOut.b );\n\t\t\ta_out_sum += ( pa = stackOut.a );\n\t\t\t\n\t\t\tr_in_sum -= pr;\n\t\t\tg_in_sum -= pg;\n\t\t\tb_in_sum -= pb;\n\t\t\ta_in_sum -= pa;\n\t\t\t\n\t\t\tstackOut = stackOut.next;\n\t\t\t\n\t\t\tyi += width;\n\t\t}\n\t}\n}\n\nfunction BlurStack()\n{\n\tthis.r = 0;\n\tthis.g = 0;\n\tthis.b = 0;\n\tthis.a = 0;\n\tthis.next = null;\n}\n\nmodule.exports = blur;","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target) {\n  return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target) {\n                // If passing function in options, then use it for resolve \"head\" element.\n                // Useful for Shadow Root style i.e\n                // {\n                //   insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n                // }\n                if (typeof target === 'function') {\n                        return target();\n                }\n                if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n        if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertInto + \" \" + options.insertAt.before);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t    result = options.transform(obj.css);\n\n\t    if (result) {\n\t    \t// If transform returns a value, use that instead of the original css.\n\t    \t// This allows running runtime transformations on the css.\n\t    \tobj.css = result;\n\t    } else {\n\t    \t// If the transform function returns a falsy value, don't add this css.\n\t    \t// This allows conditional loading of css\n\t    \treturn function() {\n\t    \t\t// noop\n\t    \t};\n\t    }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default.  Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n  // get current location\n  var location = typeof window !== \"undefined\" && window.location;\n\n  if (!location) {\n    throw new Error(\"fixUrls requires window.location\");\n  }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t  return css;\n  }\n\n  var baseUrl = location.protocol + \"//\" + location.host;\n  var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\(  = Match on the word \"url\" with any whitespace after it and then a parens\n\t   (  = Start a capturing group\n\t     (?:  = Start a non-capturing group\n\t         [^)(]  = Match anything that isn't a parentheses\n\t         |  = OR\n\t         \\(  = Match a start parentheses\n\t             (?:  = Start another non-capturing groups\n\t                 [^)(]+  = Match anything that isn't a parentheses\n\t                 |  = OR\n\t                 \\(  = Match a start parentheses\n\t                     [^)(]*  = Match anything that isn't a parentheses\n\t                 \\)  = Match a end parentheses\n\t             )  = End Group\n              *\\) = Match anything and then a close parens\n          )  = Close non-capturing group\n          *  = Match anything\n       )  = Close capturing group\n\t \\)  = Match a close parens\n\n\t /gi  = Get all matches, not the first.  Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t  return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t  \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","function DOMParser(options){\r\n\tthis.options = options ||{locator:{}};\r\n\t\r\n}\r\nDOMParser.prototype.parseFromString = function(source,mimeType){\r\n\tvar options = this.options;\r\n\tvar sax =  new XMLReader();\r\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\r\n\tvar errorHandler = options.errorHandler;\r\n\tvar locator = options.locator;\r\n\tvar defaultNSMap = options.xmlns||{};\r\n\tvar entityMap = {'lt':'<','gt':'>','amp':'&','quot':'\"','apos':\"'\"}\r\n\tif(locator){\r\n\t\tdomBuilder.setDocumentLocator(locator)\r\n\t}\r\n\t\r\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\r\n\tsax.domBuilder = options.domBuilder || domBuilder;\r\n\tif(/\\/x?html?$/.test(mimeType)){\r\n\t\tentityMap.nbsp = '\\xa0';\r\n\t\tentityMap.copy = '\\xa9';\r\n\t\tdefaultNSMap['']= 'http://www.w3.org/1999/xhtml';\r\n\t}\r\n\tdefaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';\r\n\tif(source){\r\n\t\tsax.parse(source,defaultNSMap,entityMap);\r\n\t}else{\r\n\t\tsax.errorHandler.error(\"invalid doc source\");\r\n\t}\r\n\treturn domBuilder.doc;\r\n}\r\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\r\n\tif(!errorImpl){\r\n\t\tif(domBuilder instanceof DOMHandler){\r\n\t\t\treturn domBuilder;\r\n\t\t}\r\n\t\terrorImpl = domBuilder ;\r\n\t}\r\n\tvar errorHandler = {}\r\n\tvar isCallback = errorImpl instanceof Function;\r\n\tlocator = locator||{}\r\n\tfunction build(key){\r\n\t\tvar fn = errorImpl[key];\r\n\t\tif(!fn && isCallback){\r\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\r\n\t\t}\r\n\t\terrorHandler[key] = fn && function(msg){\r\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\r\n\t\t}||function(){};\r\n\t}\r\n\tbuild('warning');\r\n\tbuild('error');\r\n\tbuild('fatalError');\r\n\treturn errorHandler;\r\n}\r\n\r\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\r\n/**\r\n * +ContentHandler+ErrorHandler\r\n * +LexicalHandler+EntityResolver2\r\n * -DeclHandler-DTDHandler \r\n * \r\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\r\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\r\n */\r\nfunction DOMHandler() {\r\n    this.cdata = false;\r\n}\r\nfunction position(locator,node){\r\n\tnode.lineNumber = locator.lineNumber;\r\n\tnode.columnNumber = locator.columnNumber;\r\n}\r\n/**\r\n * @see org.xml.sax.ContentHandler#startDocument\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\r\n */ \r\nDOMHandler.prototype = {\r\n\tstartDocument : function() {\r\n    \tthis.doc = new DOMImplementation().createDocument(null, null, null);\r\n    \tif (this.locator) {\r\n        \tthis.doc.documentURI = this.locator.systemId;\r\n    \t}\r\n\t},\r\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\r\n\t\tvar doc = this.doc;\r\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\r\n\t    var len = attrs.length;\r\n\t    appendElement(this, el);\r\n\t    this.currentElement = el;\r\n\t    \r\n\t\tthis.locator && position(this.locator,el)\r\n\t    for (var i = 0 ; i < len; i++) {\r\n\t        var namespaceURI = attrs.getURI(i);\r\n\t        var value = attrs.getValue(i);\r\n\t        var qName = attrs.getQName(i);\r\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\r\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\r\n\t\t\tattr.value = attr.nodeValue = value;\r\n\t\t\tel.setAttributeNode(attr)\r\n\t    }\r\n\t},\r\n\tendElement:function(namespaceURI, localName, qName) {\r\n\t\tvar current = this.currentElement\r\n\t\tvar tagName = current.tagName;\r\n\t\tthis.currentElement = current.parentNode;\r\n\t},\r\n\tstartPrefixMapping:function(prefix, uri) {\r\n\t},\r\n\tendPrefixMapping:function(prefix) {\r\n\t},\r\n\tprocessingInstruction:function(target, data) {\r\n\t    var ins = this.doc.createProcessingInstruction(target, data);\r\n\t    this.locator && position(this.locator,ins)\r\n\t    appendElement(this, ins);\r\n\t},\r\n\tignorableWhitespace:function(ch, start, length) {\r\n\t},\r\n\tcharacters:function(chars, start, length) {\r\n\t\tchars = _toString.apply(this,arguments)\r\n\t\t//console.log(chars)\r\n\t\tif(chars){\r\n\t\t\tif (this.cdata) {\r\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\r\n\t\t\t} else {\r\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\r\n\t\t\t}\r\n\t\t\tif(this.currentElement){\r\n\t\t\t\tthis.currentElement.appendChild(charNode);\r\n\t\t\t}else if(/^\\s*$/.test(chars)){\r\n\t\t\t\tthis.doc.appendChild(charNode);\r\n\t\t\t\t//process xml\r\n\t\t\t}\r\n\t\t\tthis.locator && position(this.locator,charNode)\r\n\t\t}\r\n\t},\r\n\tskippedEntity:function(name) {\r\n\t},\r\n\tendDocument:function() {\r\n\t\tthis.doc.normalize();\r\n\t},\r\n\tsetDocumentLocator:function (locator) {\r\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\r\n\t    \tlocator.lineNumber = 0;\r\n\t    }\r\n\t},\r\n\t//LexicalHandler\r\n\tcomment:function(chars, start, length) {\r\n\t\tchars = _toString.apply(this,arguments)\r\n\t    var comm = this.doc.createComment(chars);\r\n\t    this.locator && position(this.locator,comm)\r\n\t    appendElement(this, comm);\r\n\t},\r\n\t\r\n\tstartCDATA:function() {\r\n\t    //used in characters() methods\r\n\t    this.cdata = true;\r\n\t},\r\n\tendCDATA:function() {\r\n\t    this.cdata = false;\r\n\t},\r\n\t\r\n\tstartDTD:function(name, publicId, systemId) {\r\n\t\tvar impl = this.doc.implementation;\r\n\t    if (impl && impl.createDocumentType) {\r\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\r\n\t        this.locator && position(this.locator,dt)\r\n\t        appendElement(this, dt);\r\n\t    }\r\n\t},\r\n\t/**\r\n\t * @see org.xml.sax.ErrorHandler\r\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\r\n\t */\r\n\twarning:function(error) {\r\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\r\n\t},\r\n\terror:function(error) {\r\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\r\n\t},\r\n\tfatalError:function(error) {\r\n\t\tconsole.error('[xmldom fatalError]\\t'+error,_locator(this.locator));\r\n\t    throw error;\r\n\t}\r\n}\r\nfunction _locator(l){\r\n\tif(l){\r\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\r\n\t}\r\n}\r\nfunction _toString(chars,start,length){\r\n\tif(typeof chars == 'string'){\r\n\t\treturn chars.substr(start,length)\r\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\r\n\t\tif(chars.length >= start+length || start){\r\n\t\t\treturn new java.lang.String(chars,start,length)+'';\r\n\t\t}\r\n\t\treturn chars;\r\n\t}\r\n}\r\n\r\n/*\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\r\n * used method of org.xml.sax.ext.LexicalHandler:\r\n *  #comment(chars, start, length)\r\n *  #startCDATA()\r\n *  #endCDATA()\r\n *  #startDTD(name, publicId, systemId)\r\n *\r\n *\r\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\r\n *  #endDTD()\r\n *  #startEntity(name)\r\n *  #endEntity(name)\r\n *\r\n *\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\r\n * IGNORED method of org.xml.sax.ext.DeclHandler\r\n * \t#attributeDecl(eName, aName, type, mode, value)\r\n *  #elementDecl(name, model)\r\n *  #externalEntityDecl(name, publicId, systemId)\r\n *  #internalEntityDecl(name, value)\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\r\n * IGNORED method of org.xml.sax.EntityResolver2\r\n *  #resolveEntity(String name,String publicId,String baseURI,String systemId)\r\n *  #resolveEntity(publicId, systemId)\r\n *  #getExternalSubset(name, baseURI)\r\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\r\n * IGNORED method of org.xml.sax.DTDHandler\r\n *  #notationDecl(name, publicId, systemId) {};\r\n *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};\r\n */\r\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\r\n\tDOMHandler.prototype[key] = function(){return null}\r\n})\r\n\r\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\r\nfunction appendElement (hander,node) {\r\n    if (!hander.currentElement) {\r\n        hander.doc.appendChild(node);\r\n    } else {\r\n        hander.currentElement.appendChild(node);\r\n    }\r\n}//appendChild and setAttributeNS are preformance key\r\n\r\n//if(typeof require == 'function'){\r\n\tvar XMLReader = require('./sax').XMLReader;\r\n\tvar DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation;\r\n\texports.XMLSerializer = require('./dom').XMLSerializer ;\r\n\texports.DOMParser = DOMParser;\r\n//}\r\n","/*\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n */\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tdest[p] = src[p];\n\t}\n}\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(Object.create){\n\t\tvar ppt = Object.create(Super.prototype)\n\t\tpt.__proto__ = ppt;\n\t}\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknow Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\nvar htmlns = 'http://www.w3.org/1999/xhtml' ;\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0, \n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index  unsigned long \n\t *   Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index. \n\t */\n\titem: function(index) {\n\t\treturn this[index] || null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i<this.length;i++){\n\t\t\tserializeToString(this[i],buf,isHTML,nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t}\n};\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif(list._inc != inc){\n\t\tvar ls = list._refresh(list._node);\n\t\t//console.log(ls.length)\n\t\t__set__(list,'length',ls.length);\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i];\n}\n\n_extends(LiveNodeList,NodeList);\n/**\n * \n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities \n */\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i]\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n//\t\tif(key.indexOf(':')>0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t\t\n\t\t\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\t\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n/**\n * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation(/* Object */ features) {\n\tthis._features = {};\n\tif (features) {\n\t\tfor (var feature in features) {\n\t\t\t this._features = features[feature];\n\t\t}\n\t}\n};\n\nDOMImplementation.prototype = {\n\thasFeature: function(/* string */ feature, /* string */ version) {\n\t\tvar versions = this._features[feature.toLowerCase()];\n\t\tif (versions && (!version || version in versions)) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype;\n\t\tif(doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif(qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI,qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId;\n\t\tnode.systemId = systemId;\n\t\t// Introduced in DOM Level 2:\n\t\t//readonly attribute DOMString        internalSubset;\n\t\t\n\t\t//TODO:..\n\t\t//  readonly attribute NamedNodeMap     entities;\n\t\t//  readonly attribute NamedNodeMap     notations;\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises \n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises \n\t\tthis.insertBefore(newChild,oldChild);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n  \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    // Introduced in DOM Level 2:\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n    \t\t\t\tif(map[n] == namespaceURI){\n    \t\t\t\t\treturn n;\n    \t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tif(prefix in map){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n}\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\nfunction _onUpdateChild(doc,el,newChild){\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif(newChild){\n\t\t\tcs[cs.length++] = newChild;\n\t\t}else{\n\t\t\t//console.log(1)\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile(child){\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild =child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t}\n\t}\n}\n\n/**\n * attributes;\n * children;\n * \n * writeable properties:\n * nodeValue,Attr:value,CharacterData:data\n * prefix\n */\nfunction _removeChild(parentNode,child){\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif(previous){\n\t\tprevious.nextSibling = next;\n\t}else{\n\t\tparentNode.firstChild = next\n\t}\n\tif(next){\n\t\tnext.previousSibling = previous;\n\t}else{\n\t\tparentNode.lastChild = previous;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument,parentNode);\n\treturn child;\n}\n/**\n * preformance key(refChild == null)\n */\nfunction _insertBefore(parentNode,newChild,nextChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tcp.removeChild(newChild);//remove and update\n\t}\n\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = newChild.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn newChild;\n\t\t}\n\t\tvar newLast = newChild.lastChild;\n\t}else{\n\t\tnewFirst = newLast = newChild;\n\t}\n\tvar pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = nextChild;\n\t\n\t\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparentNode.firstChild = newFirst;\n\t}\n\tif(nextChild == null){\n\t\tparentNode.lastChild = newLast;\n\t}else{\n\t\tnextChild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parentNode;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);\n\t//console.log(parentNode.lastChild.nextSibling == null)\n\tif (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnewChild.firstChild = newChild.lastChild = null;\n\t}\n\treturn newChild;\n}\nfunction _appendSingleChild(parentNode,newChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tvar pre = parentNode.lastChild;\n\t\tcp.removeChild(newChild);//remove and update\n\t\tvar pre = parentNode.lastChild;\n\t}\n\tvar pre = parentNode.lastChild;\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = pre;\n\tnewChild.nextSibling = null;\n\tif(pre){\n\t\tpre.nextSibling = newChild;\n\t}else{\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);\n\treturn newChild;\n\t//console.log(\"__aa\",parentNode.lastChild.nextSibling == null)\n}\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\t\n\tinsertBefore :  function(newChild, refChild){//raises \n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\tif(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t\t\n\t\treturn _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\t\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.target = target;\n\t\tnode.nodeValue= node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\t\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\t\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\t\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t\t\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\t\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9?this.documentElement:this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\t\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\nfunction needNamespaceDefine(node,isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix||'';\n\tvar uri = node.namespaceURI;\n\tif (!prefix && !uri){\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === \"http://www.w3.org/XML/1998/namespace\" \n\t\t|| uri == 'http://www.w3.org/2000/xmlns/'){\n\t\treturn false;\n\t}\n\t\n\tvar i = visibleNamespaces.length \n\t//console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\t//console.log(node.nodeType,node.tagName,ns.prefix,prefix)\n\t\tif (ns.prefix == prefix){\n\t\t\treturn ns.namespace != uri;\n\t\t}\n\t}\n\t//console.log(isHTML,uri,prefix=='')\n\t//if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){\n\t//\treturn false;\n\t//}\n\t//node.flag = '11111'\n\t//console.error(3,true,node.flag,node.prefix,node.namespaceURI)\n\treturn true;\n}\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tif (!visibleNamespaces) visibleNamespaces = [];\n\t\tvar startVisibleNamespaces = visibleNamespaces.length;\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\t\t\n\t\tisHTML =  (htmlns === node.namespaceURI) ||isHTML \n\t\tbuf.push('<',nodeName);\n\t\t\n\t\t\n\t\t\n\t\tfor(var i=0;i<len;i++){\n\t\t\t// add namespaces for attributes\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\tvisibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });\n\t\t\t}else if(attr.nodeName == 'xmlns'){\n\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t}\n\t\t}\n\t\tfor(var i=0;i<len;i++){\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = attr.prefix||'';\n\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\tvar ns = prefix ? ' xmlns:' + prefix : \" xmlns\";\n\t\t\t\tbuf.push(ns, '=\"' , uri , '\"');\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t\t}\n\t\t\tserializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t}\n\t\t// add namespace for current node\t\t\n\t\tif (needNamespaceDefine(node,isHTML, visibleNamespaces)) {\n\t\t\tvar prefix = node.prefix||'';\n\t\t\tvar uri = node.namespaceURI;\n\t\t\tvar ns = prefix ? ' xmlns:' + prefix : \" xmlns\";\n\t\t\tbuf.push(ns, '=\"' , uri , '\"');\n\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t}\n\t\t\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',nodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn buf.push(' ',node.name,'=\"',node.value.replace(/[<&\"]/g,_xmlEncoder),'\"');\n\tcase TEXT_NODE:\n\t\treturn buf.push(node.data.replace(/[<&]/g,_xmlEncoder));\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC \"',pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push( '\" \"',sysid);\n\t\t\t}\n\t\t\tbuf.push('\">');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM \"',sysid,'\">');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i<len;i++){\n\t\t\t//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));\n\t\t//}\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t//case ENTITY_REFERENCE_NODE:\n\t//case PROCESSING_INSTRUCTION_NODE:\n\t////case TEXT_NODE:\n\t//case CDATA_SECTION_NODE:\n\t//case COMMENT_NODE:\n\t//\tdeep = false;\n\t//\tbreak;\n\t//case DOCUMENT_NODE:\n\t//case DOCUMENT_TYPE_NODE:\n\t//cannot be imported.\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE：\n\t//can not hit in level3\n\t//default:throw e;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n//\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\n//\t\t\t\t\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor(var n in node){\n\t\tvar v = node[n];\n\t\tif(typeof v != 'object' ){\n\t\t\tif(v != node2[n]){\n\t\t\t\tnode2[n] = v;\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value\n}\n//do dynamic\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//TODO:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = data;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t\n\t\tfunction getTextContent(node){\n\t\t\tswitch(node.nodeType){\n\t\t\tcase ELEMENT_NODE:\n\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\tvar buf = [];\n\t\t\t\tnode = node.firstChild;\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\t\t\t\treturn buf.join('');\n\t\t\tdefault:\n\t\t\t\treturn node.nodeValue;\n\t\t\t}\n\t\t}\n\t\t__set__ = function(object,key,value){\n\t\t\t//console.log(value)\n\t\t\tobject['$$'+key] = value\n\t\t}\n\t}\n}catch(e){//ie8\n}\n\n//if(typeof require == 'function'){\n\texports.DOMImplementation = DOMImplementation;\n\texports.XMLSerializer = XMLSerializer;\n//}\n","//[4]   \tNameStartChar\t   ::=   \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\r\n//[4a]   \tNameChar\t   ::=   \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\r\n//[5]   \tName\t   ::=   \tNameStartChar (NameChar)*\r\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\r\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\r\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\r\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\r\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\r\n\r\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\r\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\r\nvar S_TAG = 0;//tag name offerring\r\nvar S_ATTR = 1;//attr name offerring \r\nvar S_ATTR_SPACE=2;//attr name end and space offer\r\nvar S_EQ = 3;//=space?\r\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\r\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\r\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\r\nvar S_TAG_CLOSE = 7;//closed el<el />\r\n\r\nfunction XMLReader(){\r\n\t\r\n}\r\n\r\nXMLReader.prototype = {\r\n\tparse:function(source,defaultNSMap,entityMap){\r\n\t\tvar domBuilder = this.domBuilder;\r\n\t\tdomBuilder.startDocument();\r\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\r\n\t\tparse(source,defaultNSMap,entityMap,\r\n\t\t\t\tdomBuilder,this.errorHandler);\r\n\t\tdomBuilder.endDocument();\r\n\t}\r\n}\r\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\r\n\tfunction fixedFromCharCode(code) {\r\n\t\t// String.prototype.fromCharCode does not supports\r\n\t\t// > 2 bytes unicode chars directly\r\n\t\tif (code > 0xffff) {\r\n\t\t\tcode -= 0x10000;\r\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\r\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\r\n\r\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\r\n\t\t} else {\r\n\t\t\treturn String.fromCharCode(code);\r\n\t\t}\r\n\t}\r\n\tfunction entityReplacer(a){\r\n\t\tvar k = a.slice(1,-1);\r\n\t\tif(k in entityMap){\r\n\t\t\treturn entityMap[k]; \r\n\t\t}else if(k.charAt(0) === '#'){\r\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\r\n\t\t}else{\r\n\t\t\terrorHandler.error('entity not found:'+a);\r\n\t\t\treturn a;\r\n\t\t}\r\n\t}\r\n\tfunction appendText(end){//has some bugs\r\n\t\tif(end>start){\r\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\tlocator&&position(start);\r\n\t\t\tdomBuilder.characters(xt,0,end-start);\r\n\t\t\tstart = end\r\n\t\t}\r\n\t}\r\n\tfunction position(p,m){\r\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\r\n\t\t\tlineStart = m.index;\r\n\t\t\tlineEnd = lineStart + m[0].length;\r\n\t\t\tlocator.lineNumber++;\r\n\t\t\t//console.log('line++:',locator,startPos,endPos)\r\n\t\t}\r\n\t\tlocator.columnNumber = p-lineStart+1;\r\n\t}\r\n\tvar lineStart = 0;\r\n\tvar lineEnd = 0;\r\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\r\n\tvar locator = domBuilder.locator;\r\n\t\r\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\r\n\tvar closeMap = {};\r\n\tvar start = 0;\r\n\twhile(true){\r\n\t\ttry{\r\n\t\t\tvar tagStart = source.indexOf('<',start);\r\n\t\t\tif(tagStart<0){\r\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\r\n\t\t\t\t\tvar doc = domBuilder.doc;\r\n\t    \t\t\tvar text = doc.createTextNode(source.substr(start));\r\n\t    \t\t\tdoc.appendChild(text);\r\n\t    \t\t\tdomBuilder.currentElement = text;\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(tagStart>start){\r\n\t\t\t\tappendText(tagStart);\r\n\t\t\t}\r\n\t\t\tswitch(source.charAt(tagStart+1)){\r\n\t\t\tcase '/':\r\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\r\n\t\t\t\tvar tagName = source.substring(tagStart+2,end);\r\n\t\t\t\tvar config = parseStack.pop();\r\n\t\t\t\tif(end<0){\r\n\t\t\t\t\t\r\n\t        \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\r\n\t        \t\t//console.error('#@@@@@@'+tagName)\r\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\r\n\t        \t\tend = tagStart+1+tagName.length;\r\n\t        \t}else if(tagName.match(/\\s</)){\r\n\t        \t\ttagName = tagName.replace(/[\\s<].*/,'');\r\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' maybe not complete');\r\n\t        \t\tend = tagStart+1+tagName.length;\r\n\t\t\t\t}\r\n\t\t\t\t//console.error(parseStack.length,parseStack)\r\n\t\t\t\t//console.error(config);\r\n\t\t\t\tvar localNSMap = config.localNSMap;\r\n\t\t\t\tvar endMatch = config.tagName == tagName;\r\n\t\t\t\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\r\n\t\t        if(endIgnoreCaseMach){\r\n\t\t        \tdomBuilder.endElement(config.uri,config.localName,tagName);\r\n\t\t\t\t\tif(localNSMap){\r\n\t\t\t\t\t\tfor(var prefix in localNSMap){\r\n\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix) ;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!endMatch){\r\n\t\t            \terrorHandler.fatalError(\"end tag name: \"+tagName+' is not match the current start tagName:'+config.tagName );\r\n\t\t\t\t\t}\r\n\t\t        }else{\r\n\t\t        \tparseStack.push(config)\r\n\t\t        }\r\n\t\t\t\t\r\n\t\t\t\tend++;\r\n\t\t\t\tbreak;\r\n\t\t\t\t// end elment\r\n\t\t\tcase '?':// <?...?>\r\n\t\t\t\tlocator&&position(tagStart);\r\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\r\n\t\t\t\tbreak;\r\n\t\t\tcase '!':// <!doctype,<![CDATA,<!--\r\n\t\t\t\tlocator&&position(tagStart);\r\n\t\t\t\tend = parseDCC(source,tagStart,domBuilder,errorHandler);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tlocator&&position(tagStart);\r\n\t\t\t\tvar el = new ElementAttributes();\r\n\t\t\t\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\r\n\t\t\t\t//elStartEnd\r\n\t\t\t\tvar end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);\r\n\t\t\t\tvar len = el.length;\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\r\n\t\t\t\t\tel.closed = true;\r\n\t\t\t\t\tif(!entityMap.nbsp){\r\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(locator && len){\r\n\t\t\t\t\tvar locator2 = copyLocator(locator,{});\r\n\t\t\t\t\t//try{//attribute position fixed\r\n\t\t\t\t\tfor(var i = 0;i<len;i++){\r\n\t\t\t\t\t\tvar a = el[i];\r\n\t\t\t\t\t\tposition(a.offset);\r\n\t\t\t\t\t\ta.locator = copyLocator(locator,{});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//}catch(e){console.error('@@@@@'+e)}\r\n\t\t\t\t\tdomBuilder.locator = locator2\r\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\r\n\t\t\t\t\t\tparseStack.push(el)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdomBuilder.locator = locator;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\r\n\t\t\t\t\t\tparseStack.push(el)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){\r\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\r\n\t\t\t\t}else{\r\n\t\t\t\t\tend++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}catch(e){\r\n\t\t\terrorHandler.error('element parse error: '+e)\r\n\t\t\t//errorHandler.error('element parse error: '+e);\r\n\t\t\tend = -1;\r\n\t\t\t//throw e;\r\n\t\t}\r\n\t\tif(end>start){\r\n\t\t\tstart = end;\r\n\t\t}else{\r\n\t\t\t//TODO: 这里有可能sax回退，有位置错误风险\r\n\t\t\tappendText(Math.max(tagStart,start)+1);\r\n\t\t}\r\n\t}\r\n}\r\nfunction copyLocator(f,t){\r\n\tt.lineNumber = f.lineNumber;\r\n\tt.columnNumber = f.columnNumber;\r\n\treturn t;\r\n}\r\n\r\n/**\r\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\r\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\r\n */\r\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\r\n\tvar attrName;\r\n\tvar value;\r\n\tvar p = ++start;\r\n\tvar s = S_TAG;//status\r\n\twhile(true){\r\n\t\tvar c = source.charAt(p);\r\n\t\tswitch(c){\r\n\t\tcase '=':\r\n\t\t\tif(s === S_ATTR){//attrName\r\n\t\t\t\tattrName = source.slice(start,p);\r\n\t\t\t\ts = S_EQ;\r\n\t\t\t}else if(s === S_ATTR_SPACE){\r\n\t\t\t\ts = S_EQ;\r\n\t\t\t}else{\r\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\r\n\t\t\t\tthrow new Error('attribute equal must after attrName');\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase '\\'':\r\n\t\tcase '\"':\r\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\r\n\t\t\t\t){//equal\r\n\t\t\t\tif(s === S_ATTR){\r\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\r\n\t\t\t\t\tattrName = source.slice(start,p)\r\n\t\t\t\t}\r\n\t\t\t\tstart = p+1;\r\n\t\t\t\tp = source.indexOf(c,start)\r\n\t\t\t\tif(p>0){\r\n\t\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\t\t\tel.add(attrName,value,start-1);\r\n\t\t\t\t\ts = S_ATTR_END;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t//fatalError: no end quot match\r\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\r\n\t\t\t\t}\r\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\r\n\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\t\t//console.log(attrName,value,start,p)\r\n\t\t\t\tel.add(attrName,value,start);\r\n\t\t\t\t//console.dir(el)\r\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\r\n\t\t\t\tstart = p+1;\r\n\t\t\t\ts = S_ATTR_END\r\n\t\t\t}else{\r\n\t\t\t\t//fatalError: no equal before\r\n\t\t\t\tthrow new Error('attribute value must after \"=\"');\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase '/':\r\n\t\t\tswitch(s){\r\n\t\t\tcase S_TAG:\r\n\t\t\t\tel.setTagName(source.slice(start,p));\r\n\t\t\tcase S_ATTR_END:\r\n\t\t\tcase S_TAG_SPACE:\r\n\t\t\tcase S_TAG_CLOSE:\r\n\t\t\t\ts =S_TAG_CLOSE;\r\n\t\t\t\tel.closed = true;\r\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\r\n\t\t\tcase S_ATTR:\r\n\t\t\tcase S_ATTR_SPACE:\r\n\t\t\t\tbreak;\r\n\t\t\t//case S_EQ:\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\")\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase ''://end document\r\n\t\t\t//throw new Error('unexpected end of input')\r\n\t\t\terrorHandler.error('unexpected end of input');\r\n\t\t\tif(s == S_TAG){\r\n\t\t\t\tel.setTagName(source.slice(start,p));\r\n\t\t\t}\r\n\t\t\treturn p;\r\n\t\tcase '>':\r\n\t\t\tswitch(s){\r\n\t\t\tcase S_TAG:\r\n\t\t\t\tel.setTagName(source.slice(start,p));\r\n\t\t\tcase S_ATTR_END:\r\n\t\t\tcase S_TAG_SPACE:\r\n\t\t\tcase S_TAG_CLOSE:\r\n\t\t\t\tbreak;//normal\r\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\r\n\t\t\tcase S_ATTR:\r\n\t\t\t\tvalue = source.slice(start,p);\r\n\t\t\t\tif(value.slice(-1) === '/'){\r\n\t\t\t\t\tel.closed  = true;\r\n\t\t\t\t\tvalue = value.slice(0,-1)\r\n\t\t\t\t}\r\n\t\t\tcase S_ATTR_SPACE:\r\n\t\t\t\tif(s === S_ATTR_SPACE){\r\n\t\t\t\t\tvalue = attrName;\r\n\t\t\t\t}\r\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\r\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\r\n\t\t\t\t\tel.add(attrName,value.replace(/&#?\\w+;/g,entityReplacer),start)\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){\r\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\r\n\t\t\t\t\t}\r\n\t\t\t\t\tel.add(value,value,start)\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase S_EQ:\r\n\t\t\t\tthrow new Error('attribute value missed!!');\r\n\t\t\t}\r\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\r\n\t\t\treturn p;\r\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\r\n\t\tcase '\\u0080':\r\n\t\t\tc = ' ';\r\n\t\tdefault:\r\n\t\t\tif(c<= ' '){//space\r\n\t\t\t\tswitch(s){\r\n\t\t\t\tcase S_TAG:\r\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\r\n\t\t\t\t\ts = S_TAG_SPACE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_ATTR:\r\n\t\t\t\t\tattrName = source.slice(start,p)\r\n\t\t\t\t\ts = S_ATTR_SPACE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\r\n\t\t\t\t\tvar value = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\r\n\t\t\t\t\tel.add(attrName,value,start)\r\n\t\t\t\tcase S_ATTR_END:\r\n\t\t\t\t\ts = S_TAG_SPACE;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t//case S_TAG_SPACE:\r\n\t\t\t\t//case S_EQ:\r\n\t\t\t\t//case S_ATTR_SPACE:\r\n\t\t\t\t//\tvoid();break;\r\n\t\t\t\t//case S_TAG_CLOSE:\r\n\t\t\t\t\t//ignore warning\r\n\t\t\t\t}\r\n\t\t\t}else{//not space\r\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\r\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\r\n\t\t\t\tswitch(s){\r\n\t\t\t\t//case S_TAG:void();break;\r\n\t\t\t\t//case S_ATTR:void();break;\r\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\r\n\t\t\t\tcase S_ATTR_SPACE:\r\n\t\t\t\t\tvar tagName =  el.tagName;\r\n\t\t\t\t\tif(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){\r\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\r\n\t\t\t\t\t}\r\n\t\t\t\t\tel.add(attrName,attrName,start);\r\n\t\t\t\t\tstart = p;\r\n\t\t\t\t\ts = S_ATTR;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_ATTR_END:\r\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\r\n\t\t\t\tcase S_TAG_SPACE:\r\n\t\t\t\t\ts = S_ATTR;\r\n\t\t\t\t\tstart = p;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_EQ:\r\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\r\n\t\t\t\t\tstart = p;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase S_TAG_CLOSE:\r\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}//end outer switch\r\n\t\t//console.log('p++',p)\r\n\t\tp++;\r\n\t}\r\n}\r\n/**\r\n * @return true if has new namespace define\r\n */\r\nfunction appendElement(el,domBuilder,currentNSMap){\r\n\tvar tagName = el.tagName;\r\n\tvar localNSMap = null;\r\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\r\n\tvar i = el.length;\r\n\twhile(i--){\r\n\t\tvar a = el[i];\r\n\t\tvar qName = a.qName;\r\n\t\tvar value = a.value;\r\n\t\tvar nsp = qName.indexOf(':');\r\n\t\tif(nsp>0){\r\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\r\n\t\t\tvar localName = qName.slice(nsp+1);\r\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\r\n\t\t}else{\r\n\t\t\tlocalName = qName;\r\n\t\t\tprefix = null\r\n\t\t\tnsPrefix = qName === 'xmlns' && ''\r\n\t\t}\r\n\t\t//can not set prefix,because prefix !== ''\r\n\t\ta.localName = localName ;\r\n\t\t//prefix == null for no ns prefix attribute \r\n\t\tif(nsPrefix !== false){//hack!!\r\n\t\t\tif(localNSMap == null){\r\n\t\t\t\tlocalNSMap = {}\r\n\t\t\t\t//console.log(currentNSMap,0)\r\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\r\n\t\t\t\t//console.log(currentNSMap,1)\r\n\t\t\t}\r\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\r\n\t\t\ta.uri = 'http://www.w3.org/2000/xmlns/'\r\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value) \r\n\t\t}\r\n\t}\r\n\tvar i = el.length;\r\n\twhile(i--){\r\n\t\ta = el[i];\r\n\t\tvar prefix = a.prefix;\r\n\t\tif(prefix){//no prefix attribute has no namespace\r\n\t\t\tif(prefix === 'xml'){\r\n\t\t\t\ta.uri = 'http://www.w3.org/XML/1998/namespace';\r\n\t\t\t}if(prefix !== 'xmlns'){\r\n\t\t\t\ta.uri = currentNSMap[prefix || '']\r\n\t\t\t\t\r\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tvar nsp = tagName.indexOf(':');\r\n\tif(nsp>0){\r\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\r\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\r\n\t}else{\r\n\t\tprefix = null;//important!!\r\n\t\tlocalName = el.localName = tagName;\r\n\t}\r\n\t//no prefix element has default namespace\r\n\tvar ns = el.uri = currentNSMap[prefix || ''];\r\n\tdomBuilder.startElement(ns,localName,tagName,el);\r\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\r\n\t//localNSMap = null\r\n\tif(el.closed){\r\n\t\tdomBuilder.endElement(ns,localName,tagName);\r\n\t\tif(localNSMap){\r\n\t\t\tfor(prefix in localNSMap){\r\n\t\t\t\tdomBuilder.endPrefixMapping(prefix) \r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tel.currentNSMap = currentNSMap;\r\n\t\tel.localNSMap = localNSMap;\r\n\t\t//parseStack.push(el);\r\n\t\treturn true;\r\n\t}\r\n}\r\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\r\n\tif(/^(?:script|textarea)$/i.test(tagName)){\r\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\r\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\r\n\t\tif(/[&<]/.test(text)){\r\n\t\t\tif(/^script$/i.test(tagName)){\r\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\r\n\t\t\t\t\t//lexHandler.startCDATA();\r\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\r\n\t\t\t\t\t//lexHandler.endCDATA();\r\n\t\t\t\t\treturn elEndStart;\r\n\t\t\t\t//}\r\n\t\t\t}//}else{//text area\r\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\r\n\t\t\t\tdomBuilder.characters(text,0,text.length);\r\n\t\t\t\treturn elEndStart;\r\n\t\t\t//}\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\treturn elStartEnd+1;\r\n}\r\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\r\n\t//if(tagName in closeMap){\r\n\tvar pos = closeMap[tagName];\r\n\tif(pos == null){\r\n\t\t//console.log(tagName)\r\n\t\tpos =  source.lastIndexOf('</'+tagName+'>')\r\n\t\tif(pos<elStartEnd){//忘记闭合\r\n\t\t\tpos = source.lastIndexOf('</'+tagName)\r\n\t\t}\r\n\t\tcloseMap[tagName] =pos\r\n\t}\r\n\treturn pos<elStartEnd;\r\n\t//} \r\n}\r\nfunction _copy(source,target){\r\n\tfor(var n in source){target[n] = source[n]}\r\n}\r\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\r\n\tvar next= source.charAt(start+2)\r\n\tswitch(next){\r\n\tcase '-':\r\n\t\tif(source.charAt(start + 3) === '-'){\r\n\t\t\tvar end = source.indexOf('-->',start+4);\r\n\t\t\t//append comment source.substring(4,end)//<!--\r\n\t\t\tif(end>start){\r\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\r\n\t\t\t\treturn end+3;\r\n\t\t\t}else{\r\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\t//error\r\n\t\t\treturn -1;\r\n\t\t}\r\n\tdefault:\r\n\t\tif(source.substr(start+3,6) == 'CDATA['){\r\n\t\t\tvar end = source.indexOf(']]>',start+9);\r\n\t\t\tdomBuilder.startCDATA();\r\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\r\n\t\t\tdomBuilder.endCDATA() \r\n\t\t\treturn end+3;\r\n\t\t}\r\n\t\t//<!DOCTYPE\r\n\t\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) \r\n\t\tvar matchs = split(source,start);\r\n\t\tvar len = matchs.length;\r\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\r\n\t\t\tvar name = matchs[1][0];\r\n\t\t\tvar pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]\r\n\t\t\tvar sysid = len>4 && matchs[4][0];\r\n\t\t\tvar lastMatch = matchs[len-1]\r\n\t\t\tdomBuilder.startDTD(name,pubid && pubid.replace(/^(['\"])(.*?)\\1$/,'$2'),\r\n\t\t\t\t\tsysid && sysid.replace(/^(['\"])(.*?)\\1$/,'$2'));\r\n\t\t\tdomBuilder.endDTD();\r\n\t\t\t\r\n\t\t\treturn lastMatch.index+lastMatch[0].length\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n\r\n\r\nfunction parseInstruction(source,start,domBuilder){\r\n\tvar end = source.indexOf('?>',start);\r\n\tif(end){\r\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\r\n\t\tif(match){\r\n\t\t\tvar len = match[0].length;\r\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\r\n\t\t\treturn end+2;\r\n\t\t}else{//error\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n/**\r\n * @param source\r\n */\r\nfunction ElementAttributes(source){\r\n\t\r\n}\r\nElementAttributes.prototype = {\r\n\tsetTagName:function(tagName){\r\n\t\tif(!tagNamePattern.test(tagName)){\r\n\t\t\tthrow new Error('invalid tagName:'+tagName)\r\n\t\t}\r\n\t\tthis.tagName = tagName\r\n\t},\r\n\tadd:function(qName,value,offset){\r\n\t\tif(!tagNamePattern.test(qName)){\r\n\t\t\tthrow new Error('invalid attribute:'+qName)\r\n\t\t}\r\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\r\n\t},\r\n\tlength:0,\r\n\tgetLocalName:function(i){return this[i].localName},\r\n\tgetLocator:function(i){return this[i].locator},\r\n\tgetQName:function(i){return this[i].qName},\r\n\tgetURI:function(i){return this[i].uri},\r\n\tgetValue:function(i){return this[i].value}\r\n//\t,getIndex:function(uri, localName)){\r\n//\t\tif(localName){\r\n//\t\t\t\r\n//\t\t}else{\r\n//\t\t\tvar qName = uri\r\n//\t\t}\r\n//\t},\r\n//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\r\n//\tgetType:function(uri,localName){}\r\n//\tgetType:function(i){},\r\n}\r\n\r\n\r\n\r\n\r\nfunction _set_proto_(thiz,parent){\r\n\tthiz.__proto__ = parent;\r\n\treturn thiz;\r\n}\r\nif(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){\r\n\t_set_proto_ = function(thiz,parent){\r\n\t\tfunction p(){};\r\n\t\tp.prototype = parent;\r\n\t\tp = new p();\r\n\t\tfor(parent in thiz){\r\n\t\t\tp[parent] = thiz[parent];\r\n\t\t}\r\n\t\treturn p;\r\n\t}\r\n}\r\n\r\nfunction split(source,start){\r\n\tvar match;\r\n\tvar buf = [];\r\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\r\n\treg.lastIndex = start;\r\n\treg.exec(source);//skip <\r\n\twhile(match = reg.exec(source)){\r\n\t\tbuf.push(match);\r\n\t\tif(match[1])return buf;\r\n\t}\r\n}\r\n\r\nexports.XMLReader = XMLReader;\r\n\r\n","import draw2d from 'packages'\n\n\n/**\n * @class\n * A scrolling Canvas that contains Figures. Call `add(draw2d.Figure)` to add shapes to the Viewport.\n *\n *\n * @author Andreas Herz\n */\ndraw2d.Canvas = Class.extend(\n  /** @lends draw2d.Canvas.prototype */\n  {\n\n    NAME: \"draw2d.Canvas\",\n\n    /**\n     * Create a new canvas with the given HTML DOM references.\n     *\n     * @param {String} canvasId the id of the DOM element to use a parent container\n     */\n    init: function (canvasId, width, height) {\n      let _this = this\n\n\n      this.setScrollArea(document.body)\n      this.canvasId = canvasId\n      this.html = $(\"#\" + canvasId)\n      this.html.css({\"cursor\": \"default\"})\n      if (!isNaN(parseFloat(width)) && !isNaN(parseFloat(height))) {\n        this.initialWidth = parseInt(width)\n        this.initialHeight = parseInt(height)\n        this.html\n          .height(this.initialHeight)\n          .width(this.initialWidth)\n      } else {\n        this.initialWidth = this.getWidth()\n        this.initialHeight = this.getHeight()\n      }\n\n      // avoid the \"highlighting\" in iPad, iPhone if the user tab/touch on the canvas.\n      // .... I didn't like this.\n      this.html.css({\"-webkit-tap-highlight-color\": \"rgba(0,0,0,0)\"})\n\n      // Drag&Drop handling from foreign DIV into the Canvas\n      // Only available in combination with jQuery-UI\n      //\n      // Create the droppable area for the css class \"draw2d_droppable\"\n      // This can be done by a palette of toolbar or something else.\n      // For more information see : http://jqueryui.com/demos/droppable/\n      //\n      $(this.html).droppable({\n        accept: '.draw2d_droppable',\n        over: function (event, ui) {\n          _this.onDragEnter(ui.draggable)\n        },\n        out: function (event, ui) {\n          _this.onDragLeave(ui.draggable)\n        },\n        drop: function (event, ui) {\n          event = _this._getEvent(event)\n          let pos = _this.fromDocumentToCanvasCoordinate(event.clientX, event.clientY)\n          _this.onDrop(ui.draggable, pos.getX(), pos.getY(), event.shiftKey, event.ctrlKey)\n        }\n      })\n\n\n      // Create the jQuery-Draggable for the palette -> canvas drag&drop interaction\n      //\n      $(\".draw2d_droppable\").draggable({\n        appendTo: \"body\",\n        stack: \"body\",\n        zIndex: 27000,\n        helper: \"clone\",\n        drag: function (event, ui) {\n          event = _this._getEvent(event)\n          let pos = _this.fromDocumentToCanvasCoordinate(event.clientX, event.clientY)\n          _this.onDrag(ui.draggable, pos.getX(), pos.getY(), event.shiftKey, event.ctrlKey)\n        },\n        stop: function (e, ui) {\n        },\n        start: function (e, ui) {\n          $(ui.helper).addClass(\"shadow\")\n        }\n      })\n\n\n      // painting stuff\n      //\n      if (!isNaN(parseFloat(height))) {\n        this.paper = Raphael(canvasId, width, height)\n      } else {\n        this.paper = Raphael(canvasId, this.getWidth(), this.getHeight())\n      }\n      this.paper.canvas.style.position = \"absolute\"\n\n      // Status handling\n      //\n      this.zoomPolicy = null // default ZoomEditPolicy\n      this.zoomFactor = 1.0 // range [0.001..10]\n      this.selection = new draw2d.Selection()\n      this.currentDropTarget = null\n      this.currentHoverFigure = null\n\n      // installed to all added figures to avoid that a figure can be placed outside the canvas area\n      // during a drag&drop operation\n      this.regionDragDropConstraint = new draw2d.policy.figure.RegionEditPolicy(0, 0, this.getWidth(), this.getHeight())\n\n      // event handling since version 5.0.0\n      this.eventSubscriptions = {}\n\n      this.editPolicy = new draw2d.util.ArrayList()\n\n      // internal document with all figures, ports, ....\n      //\n      this.figures = new draw2d.util.ArrayList()\n      this.lines = new draw2d.util.ArrayList() // crap - why are connections not just figures. Design by accident\n      this.commonPorts = new draw2d.util.ArrayList()\n\n      // all visible resize handles which can be drag&drop around. Selection handles like AntRectangleSelectionFeedback\n      // are not part of this collection. Required for hitTest only\n      this.resizeHandles = new draw2d.util.ArrayList()\n\n      // The CommandStack for undo/redo operations\n      //\n      this.commandStack = new draw2d.command.CommandStack()\n\n      // INTERSECTION/CROSSING handling for connections and lines\n      //\n      this.linesToRepaintAfterDragDrop = new draw2d.util.ArrayList()\n      this.lineIntersections = new draw2d.util.ArrayList()\n\n      // alternative/legacy zoom implementation\n      // this.installEditPolicy( new draw2d.policy.canvas.ZoomPolicy());                  // Responsible for zooming\n      this.installEditPolicy(new draw2d.policy.canvas.WheelZoomPolicy())                // Responsible for zooming with mouse wheel\n      this.installEditPolicy(new draw2d.policy.canvas.DefaultKeyboardPolicy())          // Handles the keyboard interaction\n      this.installEditPolicy(new draw2d.policy.canvas.BoundingboxSelectionPolicy())     // Responsible for selection handling\n      this.installEditPolicy(new draw2d.policy.canvas.DropInterceptorPolicy())          // Responsible for drop operations\n      this.installEditPolicy(new draw2d.policy.connection.ComposedConnectionCreatePolicy(// Responsible for connection creation....\n        [\n          new draw2d.policy.connection.DragConnectionCreatePolicy(),  // ....via drag/´drop\n          new draw2d.policy.connection.ClickConnectionCreatePolicy()  // or clicking on the ports and canvas.\n        ])\n      )\n\n      // Calculate all intersection between the different lines\n      //\n      this.commandStack.addEventListener(function (event) {\n        if (event.isPostChangeEvent() === true) {\n          _this.calculateConnectionIntersection()\n          _this.linesToRepaintAfterDragDrop.each(function (i, line) {\n            line.svgPathString = null\n            line.repaint()\n          })\n          _this.linesToRepaintAfterDragDrop = new draw2d.util.ArrayList()\n        }\n      })\n\n      // DragDrop status handling\n      //\n      this.mouseDown = false\n      this.mouseDownX = 0\n      this.mouseDownY = 0\n      this.mouseDragDiffX = 0\n      this.mouseDragDiffY = 0\n\n      this.html.bind(\"mouseup touchend\", function (event) {\n        if (_this.mouseDown === false) {\n          return\n        }\n\n        event = _this._getEvent(event)\n        _this.calculateConnectionIntersection()\n\n        _this.mouseDown = false\n        let pos = _this.fromDocumentToCanvasCoordinate(event.clientX, event.clientY)\n        _this.editPolicy.each(function (i, policy) {\n          policy.onMouseUp(_this, pos.x, pos.y, event.shiftKey, event.ctrlKey)\n        })\n\n        _this.mouseDragDiffX = 0\n        _this.mouseDragDiffY = 0\n      })\n\n      this.html.bind(\"mousemove touchmove\", function (event) {\n        event = _this._getEvent(event)\n        let pos = _this.fromDocumentToCanvasCoordinate(event.clientX, event.clientY)\n        if (_this.mouseDown === false) {\n          // mouseEnter/mouseLeave events for Figures. Don't use the Raphael or DOM native functions.\n          // Raphael didn't work for Rectangle with transparent fill (events only fired for the border line)\n          // DOM didn't work well for lines. No eclipse area - you must hit the line exact to retrieve the event.\n          // In this case I implement my own stuff...again and again.\n          //\n          // don't break the main event loop if one element fires an error during enter/leave event.\n          try {\n            let hover = _this.getBestFigure(pos.x, pos.y)\n            if (hover !== _this.currentHoverFigure && _this.currentHoverFigure !== null) {\n              _this.currentHoverFigure.onMouseLeave() // deprecated\n              _this.currentHoverFigure.fireEvent(\"mouseleave\")\n              _this.fireEvent(\"mouseleave\", {figure: _this.currentHoverFigure})\n            }\n            if (hover !== _this.currentHoverFigure && hover !== null) {\n              hover.onMouseEnter()\n              hover.fireEvent(\"mouseenter\")\n              _this.fireEvent(\"mouseenter\", {figure: hover})\n            }\n            _this.currentHoverFigure = hover\n          } catch (exc) {\n            // just write it to the console\n            console.log(exc)\n          }\n\n          _this.editPolicy.each(function (i, policy) {\n            policy.onMouseMove(_this, pos.x, pos.y, event.shiftKey, event.ctrlKey)\n          })\n          _this.fireEvent(\"mousemove\", {\n            x: pos.x,\n            y: pos.y,\n            shiftKey: event.shiftKey,\n            ctrlKey: event.ctrlKey,\n            hoverFigure: _this.currentHoverFigure\n          })\n        } else {\n          let diffXAbs = (event.clientX - _this.mouseDownX) * _this.zoomFactor\n          let diffYAbs = (event.clientY - _this.mouseDownY) * _this.zoomFactor\n          _this.editPolicy.each(function (i, policy) {\n            policy.onMouseDrag(_this, diffXAbs, diffYAbs, diffXAbs - _this.mouseDragDiffX, diffYAbs - _this.mouseDragDiffY, event.shiftKey, event.ctrlKey)\n          })\n          _this.mouseDragDiffX = diffXAbs\n          _this.mouseDragDiffY = diffYAbs\n          _this.fireEvent(\"mousemove\", {\n            x: pos.x,\n            y: pos.y,\n            shiftKey: event.shiftKey,\n            ctrlKey: event.ctrlKey,\n            hoverFigure: _this.currentHoverFigure\n          })\n        }\n      })\n\n      this.html.bind(\"mousedown touchstart\", function (event) {\n        try {\n          let pos = null\n          switch (event.which) {\n            case 1: //touch pressed\n            case 0: //Left mouse button pressed\n              try {\n                event.preventDefault()\n                event = _this._getEvent(event)\n                _this.mouseDownX = event.clientX\n                _this.mouseDownY = event.clientY\n                _this.mouseDragDiffX = 0\n                _this.mouseDragDiffY = 0\n                pos = _this.fromDocumentToCanvasCoordinate(event.clientX, event.clientY)\n                _this.mouseDown = true\n                _this.editPolicy.each(function (i, policy) {\n                  policy.onMouseDown(_this, pos.x, pos.y, event.shiftKey, event.ctrlKey)\n                })\n              } catch (exc) {\n                console.log(exc)\n              }\n              break\n            case 3: //Right mouse button pressed\n              event.preventDefault()\n              if (typeof event.stopPropagation !== \"undefined\")\n                event.stopPropagation()\n              event = _this._getEvent(event)\n              pos = _this.fromDocumentToCanvasCoordinate(event.clientX, event.clientY)\n              _this.onRightMouseDown(pos.x, pos.y, event.shiftKey, event.ctrlKey)\n              return false\n              break\n            case 2:\n              //Middle mouse button pressed\n              break\n            default:\n            //You have a strange mouse\n          }\n        } catch (exc) {\n          console.log(exc)\n        }\n      })\n\n\n      // Catch the dblclick and route them to the Canvas hook.\n      //\n      this.html.on(\"dblclick\", function (event) {\n        event = _this._getEvent(event)\n\n        _this.mouseDownX = event.clientX\n        _this.mouseDownY = event.clientY\n        let pos = _this.fromDocumentToCanvasCoordinate(event.clientX, event.clientY)\n        _this.onDoubleClick(pos.x, pos.y, event.shiftKey, event.ctrlKey)\n      })\n\n\n      // Catch the click event and route them to the canvas hook\n      //\n      this.html.on(\"click\", function (event) {\n        event = _this._getEvent(event)\n\n        // fire only the click event if we didn't move the mouse (drag&drop)\n        //\n        if (_this.mouseDownX === event.clientX || _this.mouseDownY === event.clientY) {\n          let pos = _this.fromDocumentToCanvasCoordinate(event.clientX, event.clientY)\n          _this.onClick(pos.x, pos.y, event.shiftKey, event.ctrlKey)\n        }\n      })\n\n      // Important: MozMousePixelScroll is required to prevent 1px scrolling\n      // in FF event if we call \"e.preventDefault()\"\n      this.html.on('MozMousePixelScroll DOMMouseScroll mousewheel', function (e) {\n        let event = _this._getEvent(e)\n        let pos = _this.fromDocumentToCanvasCoordinate(event.originalEvent.clientX, event.originalEvent.clientY)\n\n        let delta = 0\n        if (e.type === 'mousewheel') {\n          delta = (e.originalEvent.wheelDelta * -1)\n        } else if (e.type === 'DOMMouseScroll') {\n          delta = 40 * e.originalEvent.detail\n        }\n\n        let returnValue = _this.onMouseWheel(delta, pos.x, pos.y, event.shiftKey, event.ctrlKey)\n\n        if (returnValue === false) {\n          e.preventDefault()\n        }\n      })\n\n      // Catch the keyUp and CTRL-key and route them to the Canvas hook.\n      //\n      this.keyupCallback = function (event) {\n        // don't initiate the delete command if the event comes from an INPUT field. In this case the user want delete\n        // a character in the input field and not the related shape\n        let target = $(event.target)\n        if (!target.is(\"input\") && !target.is(\"textarea\")) {\n          _this.editPolicy.each(function (i, policy) {\n            if (policy instanceof draw2d.policy.canvas.KeyboardPolicy) {\n              policy.onKeyUp(_this, event.keyCode, event.shiftKey, event.ctrlKey)\n            }\n          })\n        }\n      }\n      $(document).bind(\"keyup\", this.keyupCallback)\n\n      // Catch the keyDown and CTRL-key and route them to the Canvas hook.\n      //\n      this.keydownCallback = function (event) {\n        // don't initiate the delete command if the event comes from an INPUT field. In this case the user want delete\n        // a character in the input field and not the related shape\n        let target = $(event.target)\n        if (!target.is(\"input\") && !target.is(\"textarea\")) {\n          _this.editPolicy.each(function (i, policy) {\n            if (policy instanceof draw2d.policy.canvas.KeyboardPolicy) {\n              policy.onKeyDown(_this, event.keyCode, event.shiftKey, event.ctrlKey)\n            }\n          })\n        }\n      }\n      $(document).bind(\"keydown\", this.keydownCallback)\n\n    },\n\n    /**\n     *\n     * Call this method if you didn't need the canvas anymore. The method unregister all even handlers\n     * and frees all resources. The canvas is unusable after this call\n     *\n     * @since. 4.7.4\n     */\n    destroy: function () {\n      this.clear()\n      $(document).unbind(\"keydown\", this.keydownCallback)\n      $(document).unbind(\"keyup\", this.keyupCallback)\n      // reset the event handlers of the canvas without any notice\n      //\n      this.eventSubscriptions = {}\n\n      try {\n        this.paper.remove()\n      } catch (exc) {\n        // breaks in some ie7 version....don't care about this because ie7/8 isn't a state of the art browser  ;-)\n      }\n    },\n\n    /**\n     *\n     * Reset the canvas and delete all model elements.<br>\n     * You can now reload another model to the canvas with a {@link draw2d.io.Reader}\n     *\n     * @since 1.1.0\n     * @returns {this}\n     */\n    clear: function () {\n      // notice all listener that the canvas will be cleared\n      this.fireEvent(\"clear\")\n\n      let _this = this\n\n      this.lines.clone().each(function (i, e) {\n        _this.remove(e)\n      })\n\n      this.figures.clone().each(function (i, e) {\n        _this.remove(e)\n      })\n\n      this.zoomFactor = 1.0\n      this.selection.clear()\n      this.currentDropTarget = null\n\n      // internal document with all figures, ports, ....\n      //\n      this.figures = new draw2d.util.ArrayList()\n      this.lines = new draw2d.util.ArrayList()\n      this.commonPorts = new draw2d.util.ArrayList()\n\n      this.commandStack.markSaveLocation()\n\n      // INTERSECTION/CROSSING handling for connections and lines\n      //\n      this.linesToRepaintAfterDragDrop = new draw2d.util.ArrayList()\n      this.lineIntersections = new draw2d.util.ArrayList()\n\n      // Inform all listener that the selection has been cleanup. Normally this will be done\n      // by the edit policies of the canvas..but exceptional this is done in the clear method as well -\n      // Design flaw.\n      this.fireEvent(\"select\", {figure: null})\n\n      return this\n    },\n\n    /**\n     *\n     * Callback for any kind of image export tools to trigger the canvas to hide all unwanted\n     * decorations. The method is called e.g. from the draw2d.io.png.Writer\n     *\n     * @since 4.0.0\n     * @@interface\n     */\n    hideDecoration: function () {\n    },\n\n    /**\n     *\n     * callback method for any image export writer to reactivate the decoration\n     * of the canvas. e.g. grids, rulers,...\n     *\n     *\n     * @since 4.0.0\n     * @template\n     */\n    showDecoration: function () {\n    },\n\n    /**\n     *\n     * Calculate all connection intersection of the canvas.\n     * Required for \"bridging\" or \"crossing decoration\"\n     *\n     * @private\n     */\n    calculateConnectionIntersection: function () {\n\n      this.lineIntersections = new draw2d.util.ArrayList()\n      let lines = this.getLines().clone()\n      while (lines.getSize() > 0) {\n        let l1 = lines.removeElementAt(0)\n        lines.each((ii, l2) => {\n          let partInter = l1.intersection(l2)\n          if (partInter.getSize() > 0) {\n            this.lineIntersections.add({line: l1, other: l2, intersection: partInter})\n            this.lineIntersections.add({line: l2, other: l1, intersection: partInter})\n          }\n        })\n      }\n\n      return this\n    },\n\n\n    /**\n     *\n     *\n     * Install a new selection and edit policy into the canvas\n     *\n     * @since 2.2.0\n     * @param {draw2d.policy.EditPolicy} policy\n     */\n    installEditPolicy: function (policy) {\n\n      // a canvas can handle only one selection policy\n      //\n      if (policy instanceof draw2d.policy.canvas.SelectionPolicy) {\n        // reset old selection before install new selection strategy\n        this.getSelection().getAll().each((i, figure) => {\n          figure.unselect()\n        })\n\n        // remove existing selection policy\n        this.editPolicy.grep((p) => {\n          let stay = !(p instanceof draw2d.policy.canvas.SelectionPolicy)\n          if (stay === false) {\n            p.onUninstall(this)\n          }\n          return stay\n        })\n      }\n      // only one zoom policy at once\n      //\n      else if (policy instanceof draw2d.policy.canvas.ZoomPolicy) {\n        // remove existing zoom policy\n        this.editPolicy.grep((p) => {\n          let stay = !(p instanceof draw2d.policy.canvas.ZoomPolicy)\n          if (stay === false) {\n            p.onUninstall(this)\n          }\n          return stay\n        })\n        // replace the short cut handle for faster access\n        this.zoomPolicy = policy\n      } else if (policy instanceof draw2d.policy.connection.ConnectionCreatePolicy) {\n        this.editPolicy.grep((p) => {\n          let stay = !(p instanceof draw2d.policy.connection.ConnectionCreatePolicy)\n          if (stay === false) {\n            p.onUninstall(this)\n          }\n          return stay\n        })\n      } else if (policy instanceof draw2d.policy.canvas.DropInterceptorPolicy) {\n        // think about if I allow to install only one drop policy\n      }\n\n      policy.onInstall(this)\n      this.editPolicy.add(policy)\n\n      return this\n    },\n\n    /**\n     *\n     *\n     * UnInstall the selection and edit policy from the canvas.\n     *\n     * @since 2.2.0\n     * @param {draw2d.policy.EditPolicy|String} policy\n     */\n    uninstallEditPolicy: function (policy) {\n      if (policy === null) {\n        return //silently\n      }\n\n      // either remove exact the policy instance...\n      //\n      let removed = this.editPolicy.remove(policy)\n      if (removed !== null) {\n        removed.onUninstall(this)\n        if (removed instanceof draw2d.policy.canvas.ZoomPolicy) {\n          this.zoomPolicy = null\n        }\n      } else {\n        // ..or all of the same class if the policy isn't installed before\n        // With this kind of behaviour it is possible to deinstall all policies with\n        // the same class at once\n        //\n        let _this = this\n        let name = (typeof policy === \"string\") ? policy : policy.NAME\n        this.editPolicy.grep(function (p) {\n          if (p.NAME === name) {\n            p.onUninstall(_this)\n            // remove short cut handle to the zoom policy\n            if (p instanceof draw2d.policy.canvas.ZoomPolicy) {\n              _this.zoomPolicy = null\n            }\n            return false\n          }\n          return true\n        })\n      }\n      return this\n    },\n\n    getDropInterceptorPolicies: function () {\n      return this.editPolicy.clone().grep(function (p) {\n        return (p instanceof draw2d.policy.canvas.DropInterceptorPolicy)\n      })\n    },\n\n    /**\n     *\n     * Set the new zoom factor for the canvas. The value must be between [0.01..10]\n     *\n     *     // you can register an eventhandler if the zoom factor did change\n     *     canvas.on(\"zoom\", function(emitterFigure, zoomData){\n     *         alert(\"canvas zoomed to:\"+zoomData.value);\n     *     });\n     *\n     * @param {Number} zoomFactor new zoom factor.\n     * @param {Boolean} [animated] set it to true for smooth zoom in/out\n     */\n    setZoom: function (zoomFactor, animated) {\n      // redirect this legacy method to the new CanvasEditPolicy\n      //\n      if (this.zoomPolicy) {\n        this.zoomPolicy.setZoom(zoomFactor, animated)\n      }\n    },\n\n    /**\n     *\n     * Return the current zoom factor of the canvas.\n     *\n     * @returns {Number}\n     */\n    getZoom: function () {\n      return this.zoomFactor\n    },\n\n    /**\n     *\n     * Return the dimension of the drawing area\n     *\n     * @since 4.4.0\n     * @returns {draw2d.geo.Rectangle}\n     */\n    getDimension: function () {\n      return new draw2d.geo.Rectangle(0, 0, this.initialWidth, this.initialHeight)\n    },\n\n    /**\n     *\n     * Tells the canvas to resize. If you do not specific any parameters\n     * the canvas will attempt to determine the height and width by the enclosing bounding box\n     * of all elements and set the dimension accordingly. If you would like to set the dimension\n     * explicitly pass in an draw2d.geo.Rectangle or an object with <b>height</b> and <b>width</b> properties.\n     *\n     * @since 4.4.0\n     * @param {draw2d.geo.Rectangle} [dim] the dimension to set or null for autodetect\n     */\n    setDimension: function (dim, height) {\n      if (typeof dim === \"undefined\") {\n        let widths = this.getFigures().clone().map(function (f) {\n          return f.getAbsoluteX() + f.getWidth()\n        })\n        let heights = this.getFigures().clone().map(function (f) {\n          return f.getAbsoluteY() + f.getHeight()\n        })\n        this.initialHeight = Math.max(...heights.asArray())\n        this.initialWidth = Math.max(...widths.asArray())\n      } else if (dim instanceof draw2d.geo.Rectangle) {\n        this.initialWidth = dim.w\n        this.initialHeight = dim.h\n      } else if (typeof dim.width === \"number\" && typeof dim.height === \"number\") {\n        this.initialWidth = dim.width\n        this.initialHeight = dim.height\n      } else if (typeof dim === \"number\" && typeof height === \"number\") {\n        this.initialWidth = dim\n        this.initialHeight = height\n      }\n      this.html.css({\"width\": this.initialWidth + \"px\", \"height\": this.initialHeight + \"px\"})\n      this.paper.setSize(this.initialWidth, this.initialHeight)\n      this.setZoom(this.zoomFactor, false)\n\n      return this\n    },\n\n\n    /**\n     *\n     * Transforms a document coordinate to canvas coordinate.\n     *\n     * @param {Number} x the x coordinate relative to the window\n     * @param {Number} y the y coordinate relative to the window\n     *\n     * @returns {draw2d.geo.Point} The coordinate in relation to the canvas [0,0] position\n     */\n    fromDocumentToCanvasCoordinate: function (x, y) {\n      return new draw2d.geo.Point(\n        (x - this.getAbsoluteX() + this.getScrollLeft()) * this.zoomFactor,\n        (y - this.getAbsoluteY() + this.getScrollTop()) * this.zoomFactor)\n    },\n\n    /**\n     *\n     * Transforms a canvas coordinate to document coordinate.\n     *\n     * @param {Number} x the x coordinate in the canvas\n     * @param {Number} y the y coordinate in the canvas\n     *\n     * @returns {draw2d.geo.Point} the coordinate in relation to the document [0,0] position\n     */\n    fromCanvasToDocumentCoordinate: function (x, y) {\n      return new draw2d.geo.Point(\n        ((x * (1 / this.zoomFactor)) + this.getAbsoluteX() - this.getScrollLeft()),\n        ((y * (1 / this.zoomFactor)) + this.getAbsoluteY() - this.getScrollTop()))\n    },\n\n    /**\n     *\n     * The DOM host of the canvas\n     *\n     * @returns {HTMLElement}\n     */\n    getHtmlContainer: function () {\n      return this.html\n    },\n\n\n    /**\n     *\n     * Return a common event object independed if we run on an iPad or desktop.\n     *\n     * @param event\n     * @returns {DOMEventObject}\n     * @private\n     */\n    _getEvent: function (event) {\n      // check for iPad, Android touch events\n      //\n      if (typeof event.originalEvent !== \"undefined\") {\n        if (event.originalEvent.touches && event.originalEvent.touches.length) {\n          return event.originalEvent.touches[0]\n        } else if (event.originalEvent.changedTouches && event.originalEvent.changedTouches.length) {\n          return event.originalEvent.changedTouches[0]\n        }\n      }\n      return event\n    },\n\n    /**\n     *\n     *\n     * Set the area which are scrolling the canvas. This can be a jquery selector or\n     * a jQuery node.\n     *\n     * @param {String/HTMLElement} elementSelector\n     * @returns {this}\n     **/\n    setScrollArea: function (elementSelector) {\n      this.scrollArea = $(elementSelector)\n\n      return this\n    },\n\n    /**\n     *\n     *\n     * return the scrolling area of the canvas. This is jQuery object\n     *\n     * @returns {JQueryElement}\n     **/\n    getScrollArea: function () {\n      return this.scrollArea\n    },\n\n    /**\n     *\n     * The left scroll position.\n     *\n     * @returns {Number} the left scroll offset of the canvas\n     **/\n    getScrollLeft: function () {\n      return this.getScrollArea().scrollLeft()\n    },\n\n    /**\n     *\n     * The top scroll position\n     *\n     * @returns {Number} the top scroll offset of the cnavas.\n     **/\n    getScrollTop: function () {\n      return this.getScrollArea().scrollTop()\n    },\n\n    /**\n     *\n     * Set left scroll position.\n     *\n     * @param {Number} left the left scroll offset of the canvas\n     **/\n    setScrollLeft: function (left) {\n      this.getScrollArea().scrollLeft(left)\n\n      return this\n    },\n\n    /**\n     *\n     * set top scroll position\n     *\n     * @param {Number} top the top scroll offset of the canvas.\n     **/\n    setScrollTop: function (top) {\n      this.getScrollArea().scrollTop(top)\n\n      return this\n    },\n\n    /**\n     *\n     * set the new scroll position of the canvas\n     *\n     * @param {Number} top the top scroll offset of the canvas.\n     * @param {Number} left the left scroll offset of the canvas\n     * @since 5.8.0\n     **/\n    scrollTo: function (top, left) {\n      this.getScrollArea().scrollTop(top)\n      this.getScrollArea().scrollLeft(left)\n\n      return this\n    },\n\n    /**\n     *\n     * The absolute document x offset.\n     *\n     * @returns {Number}\n     **/\n    getAbsoluteX: function () {\n      return this.html.offset().left\n    },\n\n    /**\n     *\n     * The absolute document y offset.\n     *\n     * @returns {Number}\n     **/\n    getAbsoluteY: function () {\n      return this.html.offset().top\n    },\n\n\n    /**\n     *\n     * Return the width of the canvas\n     *\n     * @returns {Number}\n     **/\n    getWidth: function () {\n      return this.html.width()\n    },\n\n\n    /**\n     *\n     * Return the height of the canvas.\n     *\n     * @returns {Number}\n     **/\n    getHeight: function () {\n      return this.html.height()\n    },\n\n\n    /**\n     *\n     * Add a figure at the given x/y coordinate. This method fires an event.\n     *\n     * Example:\n     *\n     *     canvas.on(\"figure:add\", function(emitter, event){\n     *        alert(\"figure added:\");\n     *     });\n     *\n     *     // or more general if you want catch all figure related events\n     *     //\n     *     canvas.on(\"figure\", function(emitter, event){\n     *        // use event.figure.getCanvas()===null to determine if the\n     *        // figure part of the canvas\n     *\n     *        alert(\"figure added or removed:\");\n     *     });\n     *\n     * @param {draw2d.Figure} figure The figure to add.\n     * @param {Number/draw2d.geo.Point} [x] The new x coordinate of the figure or the x/y coordinate if it is an draw2d.geo.Point\n     * @param {Number} [y] The y position.\n     **/\n    add: function (figure, x, y) {\n      if (figure.getCanvas() === this) {\n        return\n      }\n\n      if (figure instanceof draw2d.shape.basic.Line) {\n        this.lines.add(figure)\n        this.linesToRepaintAfterDragDrop = this.lines\n      } else {\n        this.figures.add(figure)\n        if (typeof y !== \"undefined\") {\n          figure.setPosition(x, y)\n        } else if (typeof x !== \"undefined\") {\n          figure.setPosition(x)\n        }\n      }\n      figure.setCanvas(this)\n\n      // to avoid drag&drop outside of this canvas\n      figure.installEditPolicy(this.regionDragDropConstraint)\n\n      // important inital call\n      figure.getShapeElement()\n\n      // init a repaint of the figure. This enforce that all properties\n      // ( color, dim, stroke,...) will be set and pushed to SVG node.\n      figure.repaint()\n\n      // fire the figure:add event before the \"move\" event and after the figure.repaint() call!\n      //   - the move event can only be fired if the figure part of the canvas.\n      //     and in this case the notification event should be fired to the listener before\n      this.fireEvent(\"figure:add\", {figure: figure, canvas: this})\n\n      // fire the event that the figure is part of the canvas\n      figure.fireEvent(\"added\", {figure: figure, canvas: this})\n\n      // ...now we can fire the initial move event\n      figure.fireEvent(\"move\", {figure: figure, dx: 0, dy: 0})\n\n      // this is only required if the used router requires the crossing information\n      // of the connections\n      if (figure instanceof draw2d.shape.basic.PolyLine) {\n        this.calculateConnectionIntersection()\n        this.linesToRepaintAfterDragDrop.each(function (i, line) {\n          line.svgPathString = null\n          line.repaint()\n        })\n        this.linesToRepaintAfterDragDrop = new draw2d.util.ArrayList()\n      }\n\n      return this\n    },\n\n\n    /**\n     *\n     * Remove a figure or connection from the Canvas. This method fires an event\n     * which can be catched.\n     *\n     * Example:\n     *\n     *     canvas.on(\"figure:remove\", function(emitter, event){\n     *        alert(\"figure removed:\");\n     *     });\n     *\n     *     // or more general if you want catch all figure related events\n     *     //\n     *     canvas.on(\"figure\", function(emitter, event){\n     *        // use event.figure.getCanvas()===null to determine if the\n     *        // figure part of the canvas\n     *\n     *        alert(\"figure added or removed:\");\n     *     });\n     *\n     *\n     * @param {draw2d.Figure} figure The figure to remove\n     **/\n    remove: function (figure) {\n      // don't fire events of calll callbacks if the fire isn'T part of this canvas\n      //\n      if (figure.getCanvas() !== this) {\n        return this\n      }\n\n      // remove the figure from a selection handler as well and cleanup the\n      // selection feedback\n      if (this.getSelection().contains(figure)) {\n        this.editPolicy.each((i, policy) => {\n          if (typeof policy.unselect === \"function\") {\n            policy.unselect(this, figure)\n          }\n        })\n      }\n\n      if (figure instanceof draw2d.shape.basic.Line) {\n        this.lines.remove(figure)\n      } else {\n        this.figures.remove(figure)\n      }\n\n      figure.setCanvas(null)\n\n      if (figure instanceof draw2d.Connection) {\n        figure.disconnect()\n      }\n\n      this.fireEvent(\"figure:remove\", {figure: figure})\n\n      figure.fireEvent(\"removed\", {figure: figure, canvas: this})\n\n      return this\n    },\n\n    /**\n     *\n     * Returns all lines/connections in this workflow/canvas.<br>\n     *\n     * @returns {draw2d.util.ArrayList}\n     **/\n    getLines: function () {\n      return this.lines\n    },\n\n    /**\n     *\n     * Returns the internal figures.<br>\n     *\n     * @returns {draw2d.util.ArrayList}\n     **/\n    getFigures: function () {\n      return this.figures\n    },\n\n    /**\n     *\n     * Returns the line or connection with the given id.\n     *\n     * @param {String} id The id of the line.\n     *\n     * @returns {draw2d.shape.basic.Line}\n     **/\n    getLine: function (id) {\n      let count = this.lines.getSize()\n      for (let i = 0; i < count; i++) {\n        let line = this.lines.get(i)\n        if (line.getId() === id) {\n          return line\n        }\n      }\n      return null\n    },\n\n    /**\n     *\n     * Returns the figure with the given id.\n     *\n     * @param {String} id The id of the figure.\n     * @returns {draw2d.Figure}\n     **/\n    getFigure: function (id) {\n      let figure = null\n      this.figures.each((i, e) => {\n        if (e.id === id) {\n          figure = e\n          return false\n        }\n      })\n      return figure\n    },\n\n    /**\n     *\n     * Return all intersections draw2d.geo.Point between the given line and all other\n     * lines in the canvas.\n     *\n     * @param {draw2d.shape.basic.Line} line the line for the intersection test\n     * @returns {draw2d.util.ArrayList}\n     */\n    getIntersection: function (line) {\n      let result = new draw2d.util.ArrayList()\n\n      this.lineIntersections.each((i, entry) => {\n        if (entry.line === line) {\n          entry.intersection.each((j, p) => {\n            result.add({x: p.x, y: p.y, justTouching: p.justTouching, other: entry.other})\n          })\n        }\n      })\n\n      return result\n    },\n\n\n    /**\n     *\n     *  Adjust the coordinate with the installed SnapToHelper.\n     *\n     * @param  {draw2d.Figure} figure The related figure\n     * @param  {draw2d.geo.Point} pos The position to adjust\n     *\n     * @returns {draw2d.geo.Point} the adjusted position\n     * @private\n     **/\n    snapToHelper: function (figure, pos) {\n      // disable snapToPos if we have select more than one element\n      // which are currently in Drag&Drop operation\n      //\n      if (this.getSelection().getSize() > 1) {\n        return pos\n      }\n\n      let orig = pos.clone()\n      this.editPolicy.each((i, policy) => {\n        if (policy instanceof draw2d.policy.canvas.SnapToEditPolicy) {\n          pos = policy.snap(this, figure, pos, orig)\n        }\n      })\n\n      return pos\n    },\n\n\n    /**\n     *\n     * Register a port to the canvas. This is required for other ports to find a valid drop target.\n     *\n     * @param {draw2d.Port} port The new port which has been added to the Canvas.\n     **/\n    registerPort: function (port) {\n      // All elements have the same drop targets.\n      //\n      if (!this.commonPorts.contains(port)) {\n        this.commonPorts.add(port)\n      }\n\n      return this\n    },\n\n    /**\n     *\n     * Remove a port from the internal cnavas registration. Now other ports can't find the\n     * port anymore as drop target. The port itself is still visible.\n     *\n     * @param {draw2d.Port} port The port to unregister as potential drop target\n     * @private\n     * @returns {this}\n     **/\n    unregisterPort: function (port) {\n      this.commonPorts.remove(port)\n\n      return this\n    },\n\n    /**\n     *\n     * Return all ports in the canvas\n     *\n     * @returns {draw2d.util.ArrayList} all ports from all figures\n     */\n    getAllPorts: function () {\n      return this.commonPorts\n    },\n\n    /**\n     *\n     * Returns the command stack for the Canvas. Required for undo/redo support.\n     *\n     * @returns {draw2d.command.CommandStack}\n     **/\n    getCommandStack: function () {\n      return this.commandStack\n    },\n\n    /**\n     *\n     * Returns the current selected figure in the Canvas.\n     *\n     * @returns {draw2d.Figure}\n     **/\n    getPrimarySelection: function () {\n      return this.selection.getPrimary()\n    },\n\n    /**\n     *\n     * Returns the current selection.\n     *\n     * @returns {draw2d.Selection}\n     **/\n    getSelection: function () {\n      return this.selection\n    },\n\n    /**\n     *\n     * Set the current selected figure or figures in the canvas.<br>\n     * <br>\n     * You can hand over a draw2d.util.ArrayList since version 4.8.0 for multiple selection.\n     *\n     * @param {draw2d.Figure| draw2d.util.ArrayList} object The figure or list of figures to select.\n     * @returns {this}\n     **/\n    setCurrentSelection: function (object) {\n      // deselect the current selected figures\n      //\n      // clone the array (getAll) before iterate and modify the initial array\n      this.selection.getAll().each((i, e) => {\n        this.editPolicy.each((i, policy) => {\n          if (typeof policy.unselect === \"function\") {\n            policy.unselect(this, e)\n          }\n        })\n      })\n      this.addSelection(object)\n\n      return this\n    },\n\n    /**\n     *\n     * Add the current figure to the selection. If a single selection policy is installed in the\n     * canvas the selection before is reseted and the figure is the one and only selection.\n     *\n     * @param {draw2d.Figure | draw2d.util.ArrayList} object The figure(s) to add to the selection\n     * @since 4.6.0\n     * @returns {this}\n     **/\n    addSelection: function (object) {\n      let _this = this\n\n      let add = function (i, figure) {\n        _this.editPolicy.each(function (i, policy) {\n          if (typeof policy.select === \"function\") {\n            policy.select(_this, figure)\n          }\n        })\n      }\n\n      if (object instanceof draw2d.util.ArrayList) {\n        object.each(add)\n      } else {\n        add(0, object)\n      }\n\n      return this\n    },\n\n\n    /**\n     *\n     * Returns the best figure at the location [x,y]. It is a simple hit test. Keep in mind that only visible objects\n     * are returned.\n     *\n     *\n     * @param {Number} x The x position.\n     * @param {Number} y The y position.\n     * @param {draw2d.Figure|Array|Class} [blacklist] The figures or class which should be ignored.\n     * @param {draw2d.Figure|Array|Class} [whitelist] The figures or class should be considered.\n     *\n     * @returns {draw2d.Figure}\n     **/\n    getBestFigure: function (x, y, blacklist, whitelist) {\n      if (!Array.isArray(blacklist)) {\n        if (blacklist)\n          blacklist = [blacklist]\n        else\n          blacklist = []\n      }\n\n      if (!Array.isArray(whitelist)) {\n        if (whitelist)\n          whitelist = [whitelist]\n        else\n          whitelist = []\n      }\n\n      let result = null\n      let testFigure = null\n\n\n      let isInList = function (testFigure, list) {\n        for (let i = 0, len = list.length; i < len; i++) {\n          let considering = list[i]\n          if (typeof considering === \"function\") {\n            if (testFigure instanceof considering) {\n              return true\n            }\n          } else if ((considering === testFigure) || (considering.contains(testFigure))) {\n            return true\n          }\n        }\n        return false\n      }\n      let isInBlacklist = function (item) {\n        return isInList(item, blacklist)\n      }\n      // empty whitelist means that every kind of object is allowed\n      let isInWhitelist = whitelist.length === 0 ? function () {\n        return true\n      } : function (item) {\n        return isInList(item, whitelist)\n      }\n\n\n      // tool method to check recursive a figure for hitTest\n      //\n      let checkRecursive = function (children) {\n        children.each(function (i, e) {\n          let c = e.figure\n          checkRecursive(c.children)\n          if (result === null && c.isVisible() && c.hitTest(x, y) && !isInBlacklist(c) && isInWhitelist(c)) {\n            result = c\n          }\n          return result === null // break the each-loop if we found an element\n        })\n      }\n\n\n      // ResizeHandles\n      //\n      for (let i = 0, len = this.resizeHandles.getSize(); i < len; i++) {\n        testFigure = this.resizeHandles.get(i)\n        if (testFigure.isVisible() && testFigure.hitTest(x, y) && !isInBlacklist(testFigure) && isInWhitelist(testFigure)) {\n          return testFigure\n        }\n      }\n\n      // Checking ports\n      //\n      for (let i = 0, len = this.commonPorts.getSize(); i < len; i++) {\n        let port = this.commonPorts.get(i)\n        // check first a children of the figure\n        //\n        checkRecursive(port.children)\n\n        if (result === null && port.isVisible() && port.hitTest(x, y) && !isInBlacklist(port) && isInWhitelist(port)) {\n          result = port\n        }\n\n        if (result !== null) {\n          return result\n        }\n      }\n\n\n      //  Check now the common objects.\n      //  run reverse to aware the z-oder of the figures\n      for (let i = (this.figures.getSize() - 1); i >= 0; i--) {\n        let figure = this.figures.get(i)\n        // check first a children of the figure\n        //\n        checkRecursive(figure.children)\n\n        // ...and the figure itself\n        //\n        if (result === null && figure.isVisible() && figure.hitTest(x, y) && !isInBlacklist(figure) && isInWhitelist(figure)) {\n          result = figure\n          break\n        }\n      }\n\n      let figureResult = result\n      let childResult = null\n      let lineResult = null\n      result = null;\n\n\n      // Check the children of the lines as well\n      // Not selectable/draggable. But should receive onClick/onDoubleClick events\n      // as well.\n      let count = this.lines.getSize()\n      for (let i = 0; i < count; i++) {\n        let line = this.lines.get(i)\n        // check first a children of the figure\n        //\n        checkRecursive(line.children)\n\n        if (result !== null) {\n          childResult = result\n          break\n        }\n      }\n\n\n      lineResult = this.getBestLine(x, y, blacklist, whitelist)\n\n      let figureIndex = figureResult !== null ? $(figureResult.shape.node).index() : -1\n      let childIndex = childResult !== null ? $(childResult.shape.node).index() : -1\n      let lineIndex = lineResult !== null ? $(lineResult.shape.node).index() : -1\n      let array = [\n        {i: figureIndex, f: figureResult},\n        {i: childIndex, f: childResult},\n        {i: lineIndex, f: lineResult}\n      ]\n      array = array.filter((e) => e.i !== -1);\n      array = array.sort((a, b) => b.i - a.i)\n\n      //console.log(array)\n      if (array.length > 0) {\n        result = array[0].f\n      }\n\n      return result\n    },\n\n\n    /**\n     *\n     * Return the line which match the hands over coordinate\n     *\n     * @param {Number} x the x-coordinate for the hit test\n     * @param {Number} y the x-coordinate for the hit test\n     * @param {draw2d.shape.basic.Line} [lineToIgnore] a possible line which should be ignored for the hit test\n     *\n     * @private\n     * @returns {draw2d.shape.basic.Line}\n     **/\n    getBestLine: function (x, y, lineToIgnore) {\n      if (!Array.isArray(lineToIgnore)) {\n        if (lineToIgnore instanceof draw2d.Figure) {\n          lineToIgnore = [lineToIgnore]\n        } else {\n          lineToIgnore = []\n        }\n      }\n      let count = this.lines.getSize()\n\n      for (let i = 0; i < count; i++) {\n        let line = this.lines.get(i)\n        if (line.isVisible() === true && line.hitTest(x, y) === true && $.inArray(line, lineToIgnore) === -1) {\n          return line\n        }\n      }\n      return null\n    },\n\n\n    /**\n     *\n     * Called by the framework during drag&drop operations.<br>\n     * Droppable can be setup with:\n     * <pre>\n     *    $(\".draw2d_droppable\").draggable({\n     *         appendTo:\"#container\",\n     *         stack:\"#container\",\n     *         zIndex: 27000,\n     *         helper:\"clone\",\n     *         start: function(e, ui){$(ui.helper).addClass(\"shadow\");}\n     *    });\n     * </pre>\n     * Draw2D use the jQuery draggable/droppable lib. Please inspect\n     * http://jqueryui.com/demos/droppable/ for further information.\n     *\n     * @param {HTMLElement} draggedDomNode The DOM element which is currently dragging\n     *\n     * @template\n     **/\n    onDragEnter: function (draggedDomNode) {\n    },\n\n\n    /**\n     *\n     * Called if the DragDrop object is moving around.<br>\n     * <br>\n     * Draw2D use the jQuery draggable/droppable lib. Please inspect\n     * http://jqueryui.com/demos/droppable/ for further information.\n     *\n     * @param {HTMLElement} draggedDomNode The dragged DOM element.\n     * @param {Number} x the x coordinate of the drag\n     * @param {Number} y the y coordinate of the drag\n     *\n     * @template\n     **/\n    onDrag: function (draggedDomNode, x, y) {\n    },\n\n\n    /**\n     *\n     * Called if the DragDrop object leaving the current hover figure.<br>\n     * <br>\n     * Graphiti use the jQuery draggable/droppable lib. Please inspect\n     * http://jqueryui.com/demos/droppable/ for further information.\n     *\n     * @param {HTMLElement} draggedDomNode The figure which is currently dragging\n     *\n     * @template\n     **/\n    onDragLeave: function (draggedDomNode) {\n    },\n\n\n    /**\n     *\n     * Called if the user drop the droppedDomNode onto the canvas.<br>\n     * <br>\n     * Draw2D use the jQuery draggable/droppable lib. Please inspect\n     * http://jqueryui.com/demos/droppable/ for further information.\n     *\n     * @param {HTMLElement} droppedDomNode The dropped DOM element.\n     * @param {Number} x the x-coordinate of the mouse up event\n     * @param {Number} y the y-coordinate of the mouse up event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @template\n     **/\n    onDrop: function (droppedDomNode, x, y, shiftKey, ctrlKey) {\n    },\n\n\n    /**\n     *\n     * Callback method for the double click event. The x/y coordinates are relative to the top left\n     * corner of the canvas.\n     *\n     * @private\n     **/\n    onDoubleClick: function (x, y, shiftKey, ctrlKey) {\n      // check if a line has been hit\n      //\n      let figure = this.getBestFigure(x, y)\n\n      // or a line/connection. May we should test the line before a figure..?\n      // (since 4.0.0)\n      if (figure === null) {\n        figure = this.getBestLine(x, y)\n      }\n\n      this.fireEvent(\"dblclick\", {figure: figure, x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n\n      // forward the event to all install policies as well.\n      // (since 4.0.0)\n      this.editPolicy.each(function (i, policy) {\n        policy.onDoubleClick(figure, x, y, shiftKey, ctrlKey)\n      })\n    },\n\n    /**\n     *\n     * @param {Number} x the x coordinate of the event\n     * @param {Number} y the y coordinate of the event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     * @private\n     **/\n    onClick: function (x, y, shiftKey, ctrlKey) {\n      // check if a figure has been hit\n      //\n      let figure = this.getBestFigure(x, y)\n\n      this.fireEvent(\"click\", {\n        figure: figure,\n        x: x,\n        y: y,\n        relX: figure !== null ? x - figure.getAbsoluteX() : 0,\n        relY: figure !== null ? y - figure.getAbsoluteY() : 0,\n        shiftKey: shiftKey,\n        ctrlKey: ctrlKey\n      })\n\n      // forward the event to all install policies as well.\n      // (since 3.0.0)\n      this.editPolicy.each(function (i, policy) {\n        policy.onClick(figure, x, y, shiftKey, ctrlKey)\n      })\n    },\n\n    /**\n     *\n     * The user has triggered a right click. Redirect them to a responsible figure.\n     *\n     * @param {Number} x The x-coordinate of the click\n     * @param {Number} y The y-coordinate of the click\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @private\n     * @since 1.1.0\n     **/\n    onRightMouseDown: function (x, y, shiftKey, ctrlKey) {\n      let figure = this.getBestFigure(x, y)\n      this.fireEvent(\"contextmenu\", {figure: figure, x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n\n      if (figure !== null) {\n        figure.fireEvent(\"contextmenu\", {figure: figure, x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n        // @deprecated legacy call\n        figure.onContextMenu(x, y)\n\n        // forward the event to all installed policies of the figure\n        // soft migration from onHookXYZ to Policies.\n        // since 4.4.0\n        figure.editPolicy.each(function (i, policy) {\n          policy.onRightMouseDown(figure, x, y, shiftKey, ctrlKey)\n        })\n      }\n\n      // forward the event to all install policies as well.\n      // (since 4.4.0)\n      this.editPolicy.each(function (i, policy) {\n        policy.onRightMouseDown(figure, x, y, shiftKey, ctrlKey)\n      })\n\n    },\n\n    /**\n     *\n     * @param {Number} wheelDelta the delata of the wheel rotation\n     * @param {Number} x the x coordinate of the event\n     * @param {Number} y the y coordinate of the event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     * @private\n     **/\n    onMouseWheel: function (wheelDelta, x, y, shiftKey, ctrlKey) {\n      let returnValue = true\n      this.fireEvent(\"wheel\", {wheelDelta: wheelDelta, x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n\n      // forward the event to all install policies as well.\n      // (since 3.0.0)\n      this.editPolicy.each(function (i, policy) {\n        returnValue = policy.onMouseWheel(wheelDelta, x, y, shiftKey, ctrlKey) && returnValue\n      })\n\n      return returnValue\n    },\n\n\n    // NEW EVENT HANDLING SINCE VERSION 5.0.0\n    /**\n     *\n     * Execute all handlers and behaviors attached to the canvas for the given event type.\n     *\n     *\n     * @param {String} event the event to trigger\n     * @param {Object} [args] optional parameters for the triggered event callback\n     * @private\n     * @since 5.0.0\n     */\n    fireEvent: function (event, args) {\n      if (typeof this.eventSubscriptions[event] === 'undefined') {\n        return\n      }\n\n      let subscribers = this.eventSubscriptions[event]\n      for (let i = 0; i < subscribers.length; i++) {\n        try {\n          subscribers[i](this, args)\n        } catch (exc) {\n          console.log(exc)\n          console.log(subscribers[i])\n          debugger\n        }\n      }\n    },\n\n    /**\n     *\n     * Attach an event handler function for one or more events to the canvas.\n     * To remove events bound with .on(), see {@link #off}.\n     *\n     * possible events are:<br>\n     * <ul>\n     *   <li>reset</li>\n     *   <li>select</li>\n     * </ul>\n     *\n     * Example:\n     *\n     *     canvas.on(\"clear\", function(emitter, event){\n     *        alert(\"canvas.clear() called.\");\n     *     });\n     *\n     *     canvas.on(\"select\", function(emitter,event){\n     *        alert(\"figure selected\");\n     *     });\n     *\n     *     canvas.on(\"unselect\", function(emitter,event){\n     *        alert(\"figure unselected\");\n     *     });\n     * \n     * @param {String}   event One or more space-separated event types\n     * @param {Function} callback A function to execute when the event is triggered.\n     * @param {draw2d.Canvas} callback.emitter the emitter of the event\n     * @param {Object} [callback.obj] optional event related data\n     *\n     * @since 5.0.0\n     */\n    on: function (event, callback) {\n      let events = event.split(\" \")\n      for (let i = 0; i < events.length; i++) {\n        if (typeof this.eventSubscriptions[events[i]] === 'undefined') {\n          this.eventSubscriptions[events[i]] = []\n        }\n        this.eventSubscriptions[events[i]].push(callback)\n      }\n      return this\n    },\n\n    /**\n     *\n     * The `off()` method removes event handlers that were attached with {@link #on}.<br>\n     * Calling .off() with no arguments removes all handlers attached to the canvas.<br>\n     * <br>\n     * If a simple event name such as \"reset\" is provided, all events of that type are removed from the canvas.\n     *\n     *\n     * @param {String|Function} eventOrFunction the event name of the registerd function\n     * @since 5.0.0\n     */\n    off: function (eventOrFunction) {\n      if (typeof eventOrFunction === \"undefined\") {\n        this.eventSubscriptions = {}\n      } else if (typeof eventOrFunction === 'string') {\n        this.eventSubscriptions[eventOrFunction] = []\n      } else {\n        for (let event in this.eventSubscriptions) {\n          this.eventSubscriptions[event] = this.eventSubscriptions[event].filter(function (callback) {\n            return callback !== eventOrFunction\n          })\n        }\n      }\n\n      return this\n    }\n  })\n","import draw2d from 'packages'\n\ndraw2d.Configuration = {\n    version : \"@VERSION@\",\n    i18n : {\n        command : {\n            move : \"Move Shape\",\n            assignShape : \"Add Shapes to Composite\",\n            groupShapes : \"Group Shapes\",\n            ungroupShapes : \"Ungroup Shapes\",\n            deleteShape : \"Delete Shape\",\n            moveShape : \"Move Shape\",\n            moveLine : \"Move Line\",\n            addShape : \"Add Shape\",\n            moveVertex : \"Move Vertex\",\n            moveVertices : \"Move Vertices\",\n            deleteVertex : \"Delete Vertex\",\n            resizeShape : \"Resize Shape\",\n            rotateShape : \"Rotate Shape\",\n            collection : \"Execute Commands\",\n            addVertex : \"Add Vertex\",\n            changeAttributes:\"Change Attributes\",\n            connectPorts : \"Connect Ports\"\n        },\n        menu : {\n            deleteSegment : \"Delete Segment\",\n            addSegment : \"Add Segment\"\n        },\n        dialog : {\n            filenamePrompt : \"Enter Filename:\"\n        }\n    },\n\n    factory:{\n    \t// all selection policies calles this method to create a ResizeHandle.\n    \t// It is possible to replace this method with a custom implementation\n    \t// @since 5.2.0\n    \tcreateResizeHandle: function(owner, type, width, height){\n        // create a custom SelectionPolicy instead\n        console.log(\"deprecated call factory.createResizeHandle\");\n\n    \t\treturn new draw2d.ResizeHandle({ owner, type, width, height });\n    \t},\n    \t// The commands an canvas calles this method to create a new connection.\n    \t// all parameters are optional.\n    \t// @since 5.3.0\n        // @deprecated\n    \tcreateConnection: function(sourcePort, targetPort, callback, dropTarget){\n            console.log(\"deprecated call factory.createConnection\");\n            debugger;\n    \t    return new draw2d.Connection();\n    \t},\n        // @since 5.3.0\n    \tcreateInputPort: function(relatedFigure){\n    \t    return new draw2d.InputPort();\n    \t},\n        // @since 5.3.0\n        createOutputPort: function(relatedFigure){\n            return new draw2d.OutputPort();\n        },\n        // @since 5.3.0\n        createHybridPort: function(relatedFigure){\n            return new draw2d.HybridPort();\n        }\n    }\n};\n","import draw2d from 'packages'\nimport extend from 'util/extend'\n\n/**\n * @class\n *\n * Connections figures are used to display a line between two points. The Connection interface extends\n * {@link draw2d.shape.basic.PolyLine PolyLine}.<br>\n * The source and target endpoints of a connection are each defined using a {@link draw2d.layout.anchor.ConnectionAnchor ConnectionAnchor}.\n * These endpoints, along with any other points on the connection, are set by the connection's  {@link draw2d.layout.connection.ConnectionRouter ConnectionRouter}.\n * <br>\n * Usually every connection in a drawing has the same router instance. Connections with\n * common endpoints can share anchor instances as well.\n *\n * <h2>Connection Usage</h2>\n *\n * Connections are created and added just like any other figure. Unlike normal figures, you must not set the\n * bounds of a connection. Instead, you must provide the source and target port and let the connection router\n * calculate the connection's points. The connection then determines its own bounding box.<br>\n * <br>\n * A connection has a simple router by default - one that can connect the source and target anchors. But additional routers\n * are available and can be set on the connection. Some routers can handle constraints for the connection. Note that when\n * setting a routing constraint on a connection, you must first set the router which will use that constraint.<br>\n * <br>\n *\n * <b>TODO:<br></b>\n * <i>\n * A convenient way to share the router with all connections and to place connections above the drawing is to use a\n * ConnectionLayer. The layer has a connection router property which it shares with every child that's a connection.\n * You can update this property and easily change every connection's router at once.\n * </i>\n * <br>\n * <br>\n * <h2>Routing and Anchors</h2>\n * A connection always has a router and it must set at least two ports on the connection: the source and target\n * endpoints. By default, or when set to null, the connection's routing will be performed by an internal default router.\n * The ends are placed with the help of {@link draw2d.layout.anchor.ConnectionAnchor anchors}. An\n * {@link draw2d.layout.anchor.ConnectionAnchor anchors} is a fixed or calculated location, usually associated with some\n * figure. For example, the {@link draw2d.layout.anchor.ChopboxConnectionAnchor ChopboxAnchor} finds the point at which a\n * line going to the reference point intersects a box, such as the bounds of a figure. The reference point is either\n * the anchor at the opposite end, or a bendpoint or some other point nearest to the anchor.\n * <br>\n * {@img jsdoc_chopbox.gif ChopboxAnchor}\n * <br>\n * The router calculates the endpoints and any other points in the middle of the connection. It then sets the points on the\n * connection by calling {@link draw2d.shape.basic.PolyLine#addPoint Polyline.addPoint}. The connection's existing point list\n * can be reused to reduce garbage, but the points must be set on the connection anyway so that it knows about any changes made.\n * <br>\n * <h2>Adding Decorations and Children to Connections</h2>\n * Like most figures, Connection supports the addition of children. The children might be a label that\n * decorate the connection. The placement of each type of decoration can vary, so a {@link draw2d.layout.locator.ConnectionLocator ConnectionLocator}\n * is used to delegate to each child's constraint object, a Locator. <br>\n * <br>\n * {@link draw2d.decoration.connection.Decorator Decorator} can be used to create and render a rotatable shape at\n * the end or start of a connection like arrows or boxes. Examples are {@link draw2d.decoration.connection.ArrowDecorator ArrowDecorator}, {@link draw2d.decoration.connection.BarDecorator BarDecorator} or {@link draw2d.decoration.connection.CircleDecorator CircleDecorator}\n * <br>\n * <h2>Connection Layout</h2>\n * Connections extend the process of validation and layout to include routing. Since layout is the process of positioning children, routing must\n * come first. This allows a child's locator to operate on the connection's newly-routed points.<br>\n * Check out [Class System Guide](#!/guide/class_system) for additional reading.\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.basic.PolyLine\n */\n\ndraw2d.Connection = draw2d.shape.basic.PolyLine.extend(\n  /** @lends draw2d.Connection.prototype */\n  {\n\n    NAME: \"draw2d.Connection\",\n\n    /**\n     * Creates a new figure element which are not assigned to any canvas.\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function (attr, setter, getter) {\n      this.sourcePort = null\n      this.targetPort = null\n\n      this.oldPoint = null\n\n      this.sourceDecorator = null\n      /*:draw2d.ConnectionDecorator*/\n      this.targetDecorator = null\n      /*:draw2d.ConnectionDecorator*/\n\n      // decoration of the polyline\n      //\n      this.sourceDecoratorNode = null\n      this.targetDecoratorNode = null\n\n      // helper let to restore the initial visual representation if the user drag&drop\n      // the port outside of the browser window. In this case some events get lost and\n      // I can restore the initial state of the connection if the mouse comes in the browser window\n      // again.\n      this.isMoving = false\n\n      let _this = this\n      this.moveListener = function (figure) {\n        if (figure === _this.sourcePort) {\n          _this.setStartPoint(_this.sourcePort.getAbsoluteX(), _this.sourcePort.getAbsoluteY())\n        } else {\n          _this.setEndPoint(_this.targetPort.getAbsoluteX(), _this.targetPort.getAbsoluteY())\n        }\n      }\n\n      this._super(\n        extend({\n          color: \"#129CE4\",\n          stroke: 2,\n          //    outlineStroke:1,\n          //    outlineColor:\"#ffffff\",\n          radius: 3\n        }, attr),\n        extend({\n          sourceDecorator: this.setSourceDecorator,\n          targetDecorator: this.setTargetDecorator,\n          source: this.setSource,\n          target: this.setTarget\n        }, setter),\n        extend({\n          sourceDecorator: this.getSourceDecorator,\n          targetDecorator: this.getTargetDecorator,\n          source: this.getSource,\n          target: this.getTarget\n        }, getter)\n      )\n    },\n\n\n    /**\n     * @private\n     **/\n    disconnect: function () {\n      if (this.sourcePort !== null) {\n        this.sourcePort.off(this.moveListener)\n        this.sourcePort.connections.remove(this)\n\n        // fire the events to all listener\n        this.sourcePort.fireEvent(\"disconnect\", {port: this.sourcePort, connection: this})\n        if (this.canvas !== null) {\n          this.canvas.fireEvent(\"disconnect\", {\"port\": this.sourcePort, \"connection\": this})\n        }\n        this.sourcePort.onDisconnect(this)\n\n        this.fireSourcePortRouteEvent()\n      }\n\n      if (this.targetPort !== null) {\n        this.targetPort.off(this.moveListener)\n        this.targetPort.connections.remove(this)\n\n        // fire the events to all listener\n        this.targetPort.fireEvent(\"disconnect\", {port: this.targetPort, connection: this})\n        if (this.canvas !== null) {\n          this.canvas.fireEvent(\"disconnect\", {\"port\": this.targetPort, \"connection\": this})\n        }\n        this.targetPort.onDisconnect(this)\n\n        this.fireTargetPortRouteEvent()\n      }\n    },\n\n\n    /**\n     * @private\n     **/\n    reconnect: function () {\n      if (this.sourcePort !== null) {\n        this.sourcePort.on(\"move\", this.moveListener)\n        this.sourcePort.connections.add(this)\n\n        // fire the events to all listener\n        this.sourcePort.fireEvent(\"connect\", {port: this.sourcePort, connection: this})\n        if (this.canvas !== null) {\n          this.canvas.fireEvent(\"connect\", {\"port\": this.sourcePort, \"connection\": this})\n        }\n        this.sourcePort.onConnect(this)\n\n        this.fireSourcePortRouteEvent()\n      }\n\n      if (this.targetPort !== null) {\n        this.targetPort.on(\"move\", this.moveListener)\n        this.targetPort.connections.add(this)\n\n        // fire the events to all listener\n        this.targetPort.fireEvent(\"connect\", {port: this.targetPort, connection: this})\n        if (this.canvas !== null) {\n          this.canvas.fireEvent(\"connect\", {\"port\": this.targetPort, \"connection\": this})\n        }\n        this.targetPort.onConnect(this)\n\n        this.fireTargetPortRouteEvent()\n      }\n      this.routingRequired = true\n      this.repaint()\n    },\n\n\n    /**\n     * You can't drag&drop the resize handles of a connector.\n     * @type boolean\n     **/\n    isResizeable: function () {\n      return this.isDraggable()\n    },\n\n\n    /**\n     *\n     * Add a child figure to the Connection. The hands over figure doesn't support drag&drop\n     * operations. It's only a decorator for the connection.<br>\n     * Mainly for labels or other fancy decorations :-)\n     *\n     * @param {draw2d.Figure} child the figure to add as decoration to the connection.\n     * @param {draw2d.layout.locator.ConnectionLocator} locator the locator for the child.\n     * @param {Number} [index] optional index where to insert the figure\n     **/\n    add: function (child, locator, index) {\n      // just to ensure the right interface for the locator.\n      // The base class needs only 'draw2d.layout.locator.Locator'.\n      if (!(locator instanceof draw2d.layout.locator.ConnectionLocator)) {\n        throw \"Locator must implement the class draw2d.layout.locator.ConnectionLocator\"\n      }\n\n      this._super(child, locator, index)\n    },\n\n\n    /**\n     *\n     * Set the ConnectionDecorator for this object.\n     *\n     * @param {draw2d.decoration.connection.Decorator} decorator the new source decorator for the connection\n     * @returns {this}\n     **/\n    setSourceDecorator: function (decorator) {\n      if(this.sourceDecorator){\n        this.sourceDecorator.setParent(null)\n      }\n      this.sourceDecorator = decorator\n      this.routingRequired = true\n      this.sourceDecorator.setParent(this)\n      if (this.sourceDecoratorNode !== null) {\n        this.sourceDecoratorNode.remove()\n        this.sourceDecoratorNode = null\n      }\n      this.repaint()\n\n      return this\n    },\n\n    /**\n     *\n     * Get the current source ConnectionDecorator for this object.\n     *\n     * @returns draw2d.decoration.connection.Decorator\n     **/\n    getSourceDecorator: function () {\n      return this.sourceDecorator\n    },\n\n    /**\n     *\n     * Set the ConnectionDecorator for this object.\n     *\n     * @param {draw2d.decoration.connection.Decorator} decorator the new target decorator for the connection\n     * @returns {this}\n     **/\n    setTargetDecorator: function (decorator) {\n      if(this.targetDecorator){\n        this.targetDecorator.setParent(null)\n      }\n      this.targetDecorator = decorator\n      this.routingRequired = true\n      this.targetDecorator.setParent(this)\n      if (this.targetDecoratorNode !== null) {\n        this.targetDecoratorNode.remove()\n        this.targetDecoratorNode = null\n      }\n      this.repaint()\n\n      return this\n    },\n\n    /**\n     *\n     * Get the current target ConnectionDecorator for this object.\n     *\n     * @returns draw2d.decoration.connection.Decorator\n     **/\n    getTargetDecorator: function () {\n      return this.targetDecorator\n    },\n\n\n    /**\n     *\n     * Calculate the path of the polyline.\n     *\n     * @param {Object} routingHints some helper attributes for the router\n     * @param {Boolean} routingHints.startMoved is true if just the start location has moved\n     * @param {Boolean} routingHints.destMoved is true if the destination location has changed\n     * @private\n     */\n    calculatePath: function (routingHints) {\n\n      if (this.sourcePort === null || this.targetPort === null) {\n        return this\n      }\n\n      this._super(routingHints)\n\n      if (this.shape !== null) {\n        let z1 = this.sourcePort.getZOrder()\n        let z2 = this.targetPort.getZOrder()\n        z1 < z2 ? this.toBack(this.sourcePort) : this.toBack(this.targetPort)\n      }\n\n      return this\n    },\n\n    /**\n     * @private\n     **/\n    repaint: function (attributes) {\n      if (this.repaintBlocked === true || this.shape === null) {\n        return\n      }\n\n      if (this.sourcePort === null || this.targetPort === null) {\n        return\n      }\n\n\n      this._super(attributes)\n\n      // paint the decorator if any exists\n      //\n      if (this.targetDecorator !== null && this.targetDecoratorNode === null) {\n        this.targetDecoratorNode = this.targetDecorator.paint(this.getCanvas().paper)\n      }\n\n      if (this.sourceDecorator !== null && this.sourceDecoratorNode === null) {\n        this.sourceDecoratorNode = this.sourceDecorator.paint(this.getCanvas().paper)\n      }\n\n      // translate/transform the decorations to the end/start of the connection\n      // and rotate them as well\n      //\n      if (this.sourceDecoratorNode !== null) {\n        let start = this.getVertices().first()\n        this.sourceDecoratorNode.transform(\"r\" + this.getStartAngle() + \",\" + start.x + \",\" + start.y + \" t\" + start.x + \",\" + start.y)\n        // propagate the color and the opacity to the decoration as well\n        this.sourceDecoratorNode.attr({opacity: this.alpha})\n        // apply the color of the connection if the decoration doesn't have any\n        if (this.sourceDecorator.getColor() === null) {\n          this.sourceDecoratorNode.attr({\"stroke\": \"#\" + this.lineColor.hex()})\n        } else {\n          this.sourceDecoratorNode.attr({\"stroke\": \"#\" + this.sourceDecorator.getColor().hex()})\n        }\n        this.sourceDecoratorNode.forEach(shape => {\n          shape.node.setAttribute(\"class\", this.cssClass !== null ? this.cssClass : \"\")\n        })\n      }\n\n      if (this.targetDecoratorNode !== null) {\n        let end = this.getVertices().last()\n        this.targetDecoratorNode.transform(\"r\" + this.getEndAngle() + \",\" + end.x + \",\" + end.y + \" t\" + end.x + \",\" + end.y)\n        this.targetDecoratorNode.attr({opacity: this.alpha})\n        // apply the color of the connection if the decoration doesn't have any\n        if (this.targetDecorator.getColor() === null) {\n          this.targetDecoratorNode.attr({\"stroke\": \"#\" + this.lineColor.hex()})\n        } else {\n          this.targetDecoratorNode.attr({\"stroke\": \"#\" + this.targetDecorator.getColor().hex()})\n        }\n        this.targetDecoratorNode.forEach(shape => {\n          shape.node.setAttribute(\"class\", this.cssClass !== null ? this.cssClass : \"\")\n        })\n      }\n    },\n\n    /**\n     *\n     * The x-offset related to the canvas.\n     * Didn't provided by a connection. Return always '0'. This is required\n     * for children position calculation. (e.g. Label decoration)\n     *\n     * @returns {Number} the x-offset to the parent figure\n     **/\n    getAbsoluteX: function () {\n      return 0\n    },\n\n\n    /**\n     *\n     * The y-offset related to the canvas.\n     * Didn't provided by a connection. Return always '0'. This is required\n     * for children position calculation. (e.g. Label decoration)\n     *\n     * @returns {Number} The y-offset to the parent figure.\n     **/\n    getAbsoluteY: function () {\n      return 0\n    },\n\n\n    postProcess: function (postProcessCache) {\n      this.router.postProcess(this, this.getCanvas(), postProcessCache)\n    },\n\n\n    /**\n     *\n     * Don't call them manually. This will be done by the framework.<br>\n     * Will be called if the object are moved via drag and drop.\n     * Sub classes can override this method to implement additional stuff. Don't forget to call\n     * the super implementation via <code>this._super(dx, dy, dx2, dy2);</code>\n     * @private\n     * @param {Number} dx the x difference between the start of the drag drop operation and now\n     * @param {Number} dy the y difference between the start of the drag drop operation and now\n     * @param {Number} dx2 The x diff since the last call of this dragging operation\n     * @param {Number} dy2 The y diff since the last call of this dragging operation\n     **/\n    onDrag: function (dx, dy, dx2, dy2) {\n      if (this.command === null) {\n        return\n      }\n\n      // Delegate the drag&drop operation to the router. The router has\n      // all the meta information how to update start/end vertices\n      //\n      this.router.onDrag(this, dx, dy, dx2, dy2)\n\n      this.command.updateVertices(this.getVertices().clone())\n\n      let _this = this\n\n      // notify all installed policies\n      //\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n          e.onDrag(_this.canvas, _this)\n        }\n      })\n\n      this.svgPathString = null\n      this.repaint()\n\n      // Update the resize handles if the user change the position of the\n      // element via an API call.\n      //\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n          e.moved(_this.canvas, _this)\n        }\n      })\n\n      this.fireEvent(\"move\", {figure: this, dx: dx, dy: dx})\n    },\n\n\n    /**\n     *\n     * Moves the element so it is the closest to the viewer’s eyes, on top of other elements. Additional\n     * the internal model changed as well.\n     *\n     * Optional: Inserts current object in front of the given one.\n     *\n     * @param {draw2d.Figure} [figure] move current object in front of the given one.\n     * @since 3.0.0\n     */\n    toFront: function (figure) {\n      this._super(figure)\n\n      // ensure that the decoration is always in front of the connection\n      //\n      if (this.shape !== null) {\n        if (this.targetDecoratorNode !== null) {\n          this.targetDecoratorNode.insertAfter(this.shape)\n        }\n        if (this.sourceDecoratorNode !== null) {\n          this.sourceDecoratorNode.insertAfter(this.shape)\n        }\n      }\n\n      return this\n    },\n\n    /**\n     *\n     * Moves the element to the background. Additional\n     * the internal model changed as well.\n     *\n     * @param {draw2d.Figure} [figure] move this object behind of the 'figure'.\n     * @since 4.7.2\n     */\n    toBack: function (figure) {\n      this._super(figure)\n\n      if (this.shape !== null) {\n        if (this.targetDecoratorNode !== null) {\n          this.targetDecoratorNode.insertAfter(this.shape)\n        }\n        if (this.sourceDecoratorNode !== null) {\n          this.sourceDecoratorNode.insertAfter(this.shape)\n        }\n      }\n\n\n      return this\n    },\n\n\n    /**\n     *\n     * Return the recalculated position of the start point with the usage of\n     * the installed connection anchor locator.\n     *\n     * @returns {draw2d.geo.Point}\n     * @deprecated\n     **/\n    getStartPoint: function (refPoint) {\n      return this.getStartPosition(refPoint)\n    },\n\n    getStartPosition: function (refPoint) {\n      if (this.isMoving === false) {\n        if (refPoint) {\n          return this.sourcePort.getConnectionAnchorLocation(refPoint, this)\n        }\n        return this.sourcePort.getConnectionAnchorLocation(this.targetPort.getConnectionAnchorReferencePoint(this), this)\n      }\n\n      return this._super()\n    },\n\n    /**\n     *\n     * Return the recalculated position of the start point with the usage of\n     * the installed connection anchor locator.\n     *\n     * @returns {draw2d.geo.Point}\n     * @deprecated\n     **/\n    getEndPoint: function (refPoint) {\n      return this.getEndPosition(refPoint)\n    },\n\n    getEndPosition: function (refPoint) {\n      if (this.isMoving === false) {\n        if (refPoint) {\n          return this.targetPort.getConnectionAnchorLocation(refPoint, this)\n        }\n        return this.targetPort.getConnectionAnchorLocation(this.sourcePort.getConnectionAnchorReferencePoint(this), this)\n      }\n\n      return this._super()\n    },\n\n    /**\n     *\n     * Set the new source port of this connection. This enforce a repaint of the connection.\n     *\n     * @param {draw2d.Port} port The new source port of this connection.\n     *\n     **/\n    setSource: function (port) {\n      if (this.sourcePort !== null) {\n        this.sourcePort.off(this.moveListener)\n        this.sourcePort.connections.remove(this)\n        this.sourcePort.fireEvent(\"disconnect\", {port: this.sourcePort, connection: this})\n        // it is possible that a connection has already a port but is not assigned to\n        // a canvas. In this case we must check if the canvas set correct before we fire this event\n        if (this.canvas !== null) {\n          this.canvas.fireEvent(\"disconnect\", {\"port\": this.sourcePort, \"connection\": this})\n        }\n        this.sourcePort.onDisconnect(this)\n      }\n\n      this.sourcePort = port\n      if (this.sourcePort === null) {\n        return\n      }\n\n      this.routingRequired = true\n      this.fireSourcePortRouteEvent()\n      this.sourcePort.connections.add(this)\n      this.sourcePort.on(\"move\", this.moveListener)\n      if (this.canvas !== null) {\n        this.canvas.fireEvent(\"connect\", {\"port\": this.sourcePort, \"connection\": this})\n      }\n      this.sourcePort.fireEvent(\"connect\", {port: this.sourcePort, connection: this})\n      this.sourcePort.onConnect(this)\n\n      this.setStartPoint(port.getAbsoluteX(), port.getAbsoluteY())\n      this.fireEvent(\"connect\", {\"port\": this.sourcePort, \"connection\": this})\n    },\n\n    /**\n     *\n     * Returns the source port of this connection.\n     *\n     * @returns {draw2d.Port}\n     **/\n    getSource: function () {\n      return this.sourcePort\n    },\n\n    /**\n     *\n     * Set the target port of this connection. This enforce a repaint of the connection.\n     *\n     * @param {draw2d.Port} port The new target port of this connection\n     **/\n    setTarget: function (port) {\n      if (this.targetPort !== null) {\n        this.targetPort.off(this.moveListener)\n        this.targetPort.connections.remove(this)\n        this.targetPort.fireEvent(\"disconnect\", {port: this.targetPort, connection: this})\n        // it is possible that a connection has already a port but is not assigned to\n        // a canvas. In this case we must check if the canvas set correct before we fire this event\n        if (this.canvas !== null) {\n          this.canvas.fireEvent(\"disconnect\", {\"port\": this.targetPort, \"connection\": this})\n        }\n        this.targetPort.onDisconnect(this)\n      }\n\n      this.targetPort = port\n      if (this.targetPort === null) {\n        return\n      }\n\n      this.routingRequired = true\n      this.fireTargetPortRouteEvent()\n      this.targetPort.connections.add(this)\n      this.targetPort.on(\"move\", this.moveListener)\n      if (this.canvas !== null) {\n        this.canvas.fireEvent(\"connect\", {\"port\": this.targetPort, \"connection\": this})\n      }\n      this.targetPort.fireEvent(\"connect\", {port: this.targetPort, connection: this})\n      this.targetPort.onConnect(this)\n\n      this.setEndPoint(port.getAbsoluteX(), port.getAbsoluteY())\n      this.fireEvent(\"connect\", {\"port\": this.targetPort, \"connection\": this})\n    },\n\n    /**\n     *\n     * Returns the target port of this connection.\n     *\n     * @returns {draw2d.Port}\n     **/\n    getTarget: function () {\n      return this.targetPort\n    },\n\n    /**\n     *\n     * Method returns true if the connection has at least one common draw2d.Port with the given connection.\n     *\n     * @param {draw2d.Connection} other\n     *\n     * @returns {Boolean}\n     */\n    sharingPorts: function (other) {\n      return this.sourcePort == other.sourcePort ||\n        this.sourcePort == other.targetPort ||\n        this.targetPort == other.sourcePort ||\n        this.targetPort == other.targetPort\n    },\n\n\n    /**\n     *\n     * Set the canvas element of this figures.\n     *\n     * @param {draw2d.Canvas} canvas the new parent of the figure or null\n     */\n    setCanvas: function (canvas) {\n      if (this.canvas === canvas) {\n        return // nothing to do\n      }\n\n      let notiCanvas = this.canvas == null ? canvas : this.canvas\n\n      this._super(canvas)\n\n      if (canvas !== null && draw2d.Connection.DROP_FILTER === null) {\n        draw2d.Connection.DROP_FILTER = canvas.paper.createFilter()\n        draw2d.Connection.DROP_FILTER.element.setAttribute(\"width\", \"250%\")\n        draw2d.Connection.DROP_FILTER.element.setAttribute(\"height\", \"250%\")\n        draw2d.Connection.DROP_FILTER.element.setAttribute(\"filterUnits\", \"userSpaceOnUse\")\n        draw2d.Connection.DROP_FILTER.createShadow(1, 1, 2, 0.3)\n      }\n\n      if (this.sourceDecoratorNode !== null) {\n        this.sourceDecoratorNode.remove()\n        this.sourceDecoratorNode = null\n      }\n\n      if (this.targetDecoratorNode !== null) {\n        this.targetDecoratorNode.remove()\n        this.targetDecoratorNode = null\n      }\n\n      if (this.canvas === null) {\n        if (this.sourcePort !== null) {\n          this.sourcePort.off(this.moveListener)\n          notiCanvas.fireEvent(\"disconnect\", {\"port\": this.sourcePort, \"connection\": this})\n          this.sourcePort.onDisconnect(this)\n        }\n        if (this.targetPort !== null) {\n          this.targetPort.off(this.moveListener)\n          notiCanvas.fireEvent(\"disconnect\", {\"port\": this.targetPort, \"connection\": this})\n          this.targetPort.onDisconnect(this)\n        }\n      } else {\n        this.shape.items[0].filter(draw2d.Connection.DROP_FILTER)\n\n        if (this.sourcePort !== null) {\n          this.sourcePort.on(\"move\", this.moveListener)\n          this.canvas.fireEvent(\"connect\", {\"port\": this.sourcePort, \"connection\": this})\n          this.sourcePort.onConnect(this)\n        }\n        if (this.targetPort !== null) {\n          this.targetPort.on(\"move\", this.moveListener)\n          this.canvas.fireEvent(\"connect\", {\"port\": this.targetPort, \"connection\": this})\n          this.targetPort.onConnect(this)\n        }\n      }\n\n    },\n\n\n    /**\n     * Returns the angle of the connection at the output port (source)\n     *\n     **/\n    getStartAngle: function () {\n      // return a good default value if the connection is not routed at the\n      //  moment\n      if (this.lineSegments.getSize() === 0) {\n        return 0\n      }\n\n      let p1 = this.lineSegments.get(0).start\n      let p2 = this.lineSegments.get(0).end\n      if (this.router instanceof draw2d.layout.connection.SplineConnectionRouter) {\n        p2 = this.lineSegments.get(5).end\n      }\n      let length = Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y))\n      let angle = -(180 / Math.PI) * Math.asin((p1.y - p2.y) / length)\n\n      if (angle < 0) {\n        if (p2.x < p1.x) {\n          angle = Math.abs(angle) + 180\n        } else {\n          angle = 360 - Math.abs(angle)\n        }\n      } else {\n        if (p2.x < p1.x) {\n          angle = 180 - angle\n        }\n      }\n      return angle\n    },\n\n    getEndAngle: function () {\n      // return a good default value if the connection is not routed at the\n      //  moment\n      if (this.lineSegments.getSize() === 0) {\n        return 90\n      }\n\n      let p1 = this.lineSegments.get(this.lineSegments.getSize() - 1).end\n      let p2 = this.lineSegments.get(this.lineSegments.getSize() - 1).start\n      if (this.router instanceof draw2d.layout.connection.SplineConnectionRouter) {\n        p2 = this.lineSegments.get(this.lineSegments.getSize() - 5).end\n      }\n      let length = Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y))\n      let angle = -(180 / Math.PI) * Math.asin((p1.y - p2.y) / length)\n\n      if (angle < 0) {\n        if (p2.x < p1.x) {\n          angle = Math.abs(angle) + 180\n        } else {\n          angle = 360 - Math.abs(angle)\n        }\n      } else {\n        if (p2.x < p1.x) {\n          angle = 180 - angle\n        }\n      }\n      return angle\n    },\n\n\n    /**\n     * @private\n     **/\n    fireSourcePortRouteEvent: function () {\n      this.sourcePort.getConnections().each(function (i, conn) {\n        conn.routingRequired = true\n        conn.repaint()\n      })\n    },\n\n    /**\n     * @private\n     **/\n    fireTargetPortRouteEvent: function () {\n      // enforce a repaint of all connections which are related to this port\n      // this is required for a \"FanConnectionRouter\" or \"ShortesPathConnectionRouter\"\n      //\n      this.targetPort.getConnections().each(function (i, conn) {\n        conn.routingRequired = true\n        conn.repaint()\n      })\n    },\n\n\n    /**\n     *\n     * Returns the Command to perform the specified Request or null.\n     *\n     * @param {draw2d.command.CommandType} request describes the Command being requested\n     *\n     * @returns {draw2d.command.Command} null or a Command\n     **/\n    createCommand: function (request) {\n      if (request.getPolicy() === draw2d.command.CommandType.MOVE) {\n        if (this.isDraggable()) {\n          return new draw2d.command.CommandMoveVertices(this)\n        }\n      }\n\n      if (request.getPolicy() === draw2d.command.CommandType.MOVE_BASEPOINT) {\n        // DragDrop of a connection doesn't create a undo command at this point. This will be done in\n        // the onDrop method\n        return new draw2d.command.CommandReconnect(this)\n      }\n\n      return this._super(request)\n    },\n\n\n    /**\n     *\n     * Return an objects with all important attributes for XML or JSON serialization\n     *\n     * @returns {Object}\n     */\n    getPersistentAttributes: function () {\n      let memento = this._super()\n\n      let parentNode = this.getSource().getParent()\n      while (parentNode.getParent() !== null) {\n        parentNode = parentNode.getParent()\n      }\n      memento.source = {\n        node: parentNode.getId(),\n        port: this.getSource().getName()\n      }\n\n      parentNode = this.getTarget().getParent()\n      while (parentNode.getParent() !== null) {\n        parentNode = parentNode.getParent()\n      }\n      memento.target = {\n        node: parentNode.getId(),\n        port: this.getTarget().getName()\n      }\n\n      if (this.sourceDecorator !== null) {\n        memento.source.decoration = this.sourceDecorator.NAME\n      }\n\n      if (this.targetDecorator !== null) {\n        memento.target.decoration = this.targetDecorator.NAME\n      }\n\n      return memento\n    },\n\n    /**\n     *\n     * Read all attributes from the serialized properties and transfer them into the shape.\n     *\n     * @param {Object} memento\n     * @returns {this}\n     */\n    setPersistentAttributes: function (memento) {\n      this._super(memento)\n\n      // nothing to to for the connection creation. This will be done in the draw2d.io.Reader\n      // implementation\n      //\n      // restore your custom attributes here\n      if (typeof memento.target.decoration !== \"undefined\" && memento.target.decoration != null) {\n        this.setTargetDecorator(eval(\"new \" + memento.target.decoration))\n      }\n\n      if (typeof memento.source.decoration !== \"undefined\" && memento.source.decoration != null) {\n        this.setSourceDecorator(eval(\"new \" + memento.source.decoration))\n      }\n\n      return this\n\n    }\n  })\n\n\ndraw2d.Connection.DROP_FILTER = null\n","import draw2d from 'packages'\nimport jsonUtil from 'util/JSONUtil'\nimport UUID from 'util/UUID'\nimport extend from 'util/extend'\n\n/**\n * @class\n * Base class for all draw2d shapes-\n *\n */\ndraw2d.Figure = Class.extend(\n  /**  @lends draw2d.Figure.prototype */\n  {\n  NAME: \"draw2d.Figure\",\n  MIN_TIMER_INTERVAL: 50, // minimum timer interval in milliseconds\n\n  /**\n   * Creates a new Figure object\n   *\n   * @param attr\n   * @param setter\n   * @param getter\n   */\n  init: function (attr, setter, getter) {\n\n    // @private\n    this.setterWhitelist = extend({\n      //  id the unique id of the figure\n      id: this.setId,\n      //  x the x offset of the figure in relation to the parent figure or canvas \n      x: this.setX,\n      //  y the y offset of the figure in relation to the parent figure or canvas \n      y: this.setY,\n      //  width the new width of the figure. Considering the minWidth of the shape \n      width: this.setWidth,\n      //  height the new height of the figure. Considering the minHeight of the shape \n      height: this.setHeight,\n      //  boundingBox set the new bounding box of the shape \n      boundingBox: this.setBoundingBox,\n      //   minWidth the new min width of the figure. \n      minWidth: this.setMinWidth,\n      // minHeight the new min height of the figure. \n      minHeight: this.setMinHeight,\n      //  cssClass the css class of the shape. can be used to style the shape via CSS3 (SVG only) \n      cssClass: this.setCssClass,\n      //  userData additional custom data which can be stored by the shape \n      userData: this.setUserData,\n      // draggable drives the dragging behaviour of the shape \n      draggable: this.setDraggable,\n      //  resizeable drives the resizeable behaviour of the shape \n      resizeable: this.setResizeable,\n      //  selectable drives the selectable behaviour of the shape \n      selectable: this.setSelectable,\n      //  angle the rotation angle of the shape. At the moment only 90 degree increments are possible \n      angle: this.setRotationAngle,\n      //  alpha the the alpha/opacity of the shape. value must be between [0..1] \n      alpha: this.setAlpha,\n      //  opacity the the alpha/opacity of the shape. value must be between [0..1] \n      opacity: this.setAlpha,\n      //  glow the glow flag for the shape. The representation of the \"glow\" depends on the shape \n      glow: this.setGlow,\n      //  visible set the visibility flag of the shape \n      visible: this.setVisible,\n      //  keepAspectRatio indicate if the shape should keep the aspect ratio during resize \n      keepAspectRatio: this.setKeepAspectRatio\n    }, setter)\n\n    this.getterWhitelist = extend({\n      id: this.getId,\n      visible: this.isVisible,\n      angle: this.getRotationAngle,\n      x: this.getX,\n      y: this.getY,\n      width: this.getWidth,\n      height: this.getHeight,\n      draggable: this.isDraggable,\n      resizeable: this.isResizeable,\n      selectable: this.isSelectable,\n      alpha: this.getAlpha,\n      opacity: this.getAlpha\n    }, getter)\n\n    // all figures has an unique id. Required for figure get and persistence storage\n    this.id = UUID.create()\n\n    // required for the SelectionEditPolicy to indicate the type of figure\n    // which the user clicks\n    this.isResizeHandle = false\n\n    // for undo/redo operation. It holds the command during a drag/drop operation\n    // and execute it on the CommandStack if the user drop the figure.\n    this.command = null\n\n    // the assigned canvas\n    this.canvas = null\n\n    // the RaphaelJS element reference\n    this.shape = null\n\n    // possible decorations ( e.g. a Label) of the Connection\n    // children are fixed bounded the figure. Most of the events of the child will bee\n    // routed to the parent\n    this.children = new draw2d.util.ArrayList()\n\n    // behavior flags\n    //\n    this.selectable = true\n    this.deleteable = true\n    this.resizeable = true\n    this.draggable = true\n    this.visible = true\n    // since 4.1.0.\n    this.keepAspectRatio = false\n\n\n    this.canSnapToHelper = true\n    this.snapToGridAnchor = new draw2d.geo.Point(0, 0)    // hot spot for snap to grid\n    this.editPolicy = new draw2d.util.ArrayList()\n\n\n    // timer for animation or automatic update\n    //\n    this.timerId = -1\n    this.timerInterval = 0\n\n    // possible parent of the figure.\n    // @see: this.children\n    this.parent = null\n\n    // a figure can be part of a StrongComposite like a group, ...\n    //\n    this.composite = null\n\n    // generic handle for the JSON read/write of user defined data\n    this.userData = null\n\n    // appearance, position and dim properties\n    //\n    this.x = 0\n    this.y = 0\n    this.minHeight = 5\n    this.minWidth = 5\n    this.rotationAngle = 0\n    // add the name of the class to the css attribute\n    this.cssClass = this.NAME.replace(new RegExp(\"[.]\", \"g\"), \"_\")\n\n    this.width = this.getMinWidth()\n    this.height = this.getMinHeight()\n\n    this.alpha = 1.0\n\n    // internal status flags for the Drag&Drop operation handling and other stuff\n    //\n    this.isInDragDrop = false\n\n    this.ox = 0\n    this.oy = 0\n    this.repaintBlocked = false\n    this.lastAppliedAttributes = {}\n    this.selectionHandles = new draw2d.util.ArrayList()\n    this.panningDelegate = null\n\n    // even handling since version 5.0.0\n    this.eventSubscriptions = {}\n\n    this.relocateChildrenEventCallback = () => {\n      this.children.each( (i, e) => {\n        e.locator.relocate(i, e.figure)\n      })\n    }\n\n    // new approach to delegate selection requests.\n    //\n    this.defaultSelectionAdapter = this.selectionAdapter =  () => this\n\n    // install default selection handler. Can be overridden or replaced\n    this.installEditPolicy(new draw2d.policy.figure.RectangleSelectionFeedbackPolicy())\n\n\n    // the new style attr call with object attributes\n    this.attr(attr)\n  },\n\n  /**\n   * \n   * Read or set shape attributes.<br>\n   * When no value is given, reads specified attribute from the element.<br>\n   * When value is given, sets the attribute to that value.\n   * Multiple attributes can be set by passing an object with name-value pairs.\n   *\n   *    let figure = new draw2d.shape.basic.Rectangle();\n   *    figure.attr('x');      //=> read value\n   *    figure.attr('x', 30);  //=> set value\n   *\n   *    // multiple attributes:\n   *    figure.attr({\n   *      x: 30,\n   *      y: 40,\n   *      width : 200,\n   *      height: 50,\n   *      cssClass: \"red_border_figure\"\n   *    });\n   *\n   *    // it is possible to override any method of the figure as well\n   *    // Instead of inheritance you can just override the callback methods\n   *    // like\n   *    //\n   *    figure.attr({\n   *       onClick : function(){\n   *           alert(\"click\");\n   *       }\n   *    });\n   *\n   *    // or you can pass the attr values in the constructor\n   *    //\n   *    let clickFigure = new draw2d.shape.basic.Rectangle({\n   *       onClick : function(){\n   *           alert(\"click\");\n   *       }\n   *    });\n   *\n   *\n   * Additional you can set the user defined values (userData) with this method\n   * using the dot-notation. User defined values are always part of the exported\n   * JSON data.\n   *\n   *    // setting multiple attributes:\n   *    figure.attr({\n   *      \"userData.my.property.x\": 30,\n   *      \"userData.my.property.y\": 40\n   *    });\n   *\n   * Also set using array notation is possible for the userData:\n   *\n   *    // dot notation and array brackets:\n   *    figure.attr({\n   *      \"userData.my.names[0]\": \"John\",\n   *      \"userData.my.names[1]\": \"Doe\"\n   *    });\n   *\n   *\n   * The Object returned should be the equivalent structured object:\n   *\n   *    let obj = figure.getUserData();\n   *\n   * That is, where obj is equivalent to:\n   *\n   *    let obj = {\n   *        my:{\n   *            property:{\n   *                x: 30,\n   *                y: 40\n   *           },\n   *           names:  [\"John\", \"Doe\"]\n   *       }\n   *    };\n   *\n   *\n   *\n   * @param {String/Object} name\n   * @param {Object} [value]\n   * @since 5.0.1\n   * @experimental\n   * @returns {Object} either the requested attribute if this method used as getter or `this` if the method uses as setter\n   **/\n  attr: function (name, value) {\n    let _this = this\n    let orig = this.repaintBlocked\n\n    try {\n      // call of attr as setter method with {name1:val1, name2:val2 }  argument list\n      //\n      if ($.isPlainObject(name)) {\n        for (let key in name) {\n          // user can set the \"userData\" with path notation. In this case we\n          // expand the path to a real JSON object and set the data.\n          // index/brackets are allowed too.\n          //\n          if (key.substring(0, 9) === \"userData.\") {\n            if (this.userData === null) {\n              this.userData = {}\n            }\n            jsonUtil.set({userData: this.userData}, key, name[key])\n            this.fireEvent(\"change:\" + key, {value: name[key]})\n          }\n          else {\n            let func = this.setterWhitelist[key]\n            let param = name[key]\n            if (func && param !== undefined) {\n              func.call(this, param)\n            }\n            // maybe the user adds a function as property to the attr call\n            // e.g.:\n            // {\n            //     doIt: function(){}\n            // }\n            //\n            // in this case we assign the method to this object and wrap it with \"this\" as context\n            // a very, very simple method to replace default implemenations of the object\n            else if (typeof name[key] === \"function\") {\n              this[key] = param.bind(this)\n            }\n\n          }\n        }\n      }\n      else if (typeof name === \"string\") {\n        // call attr as getter\n        //\n        if (typeof value === \"undefined\") {\n          let getter = this.getterWhitelist[name]\n          if (typeof getter === \"function\") {\n            return getter.call(this)\n          }\n          // or it is a userData path notation like \"userData.any.path.value\"\n          else if (name.substring(0, 9) === \"userData.\") {\n            let data = {userData: this.userData}\n            return jsonUtil.get(data, name)\n          }\n          return // undefined\n        }\n        // call attr as simple setter with (key , value)\n        //\n\n        // the value can be a function. In this case we must call the value().\n        if (typeof value === \"function\") {\n          value = value()\n        }\n        if (name.substring(0, 9) === \"userData.\") {\n          if (this.userData === null) {\n            this.userData = {}\n          }\n          jsonUtil.set({userData: this.userData}, name, value)\n          this.fireEvent(\"change:\" + name, {value: value})\n        }\n        else {\n          let setter = this.setterWhitelist[name]\n          if (setter) {\n            setter.call(this, value)\n          }\n        }\n      }\n      // may it is a array of attributes used for the getter\n      //\n      else if (Array.isArray(name)) {\n        return Object.assign({}, ...Object.keys(name).map(k => ({[k]: _this.attr(k)})))\n      }\n      // generic getter of all registered attributes\n      else if (typeof name === \"undefined\") {\n        let result = {}\n        for (let key in this.getterWhitelist) {\n          result[key] = this.getterWhitelist[key].call(this)\n        }\n        return result\n      }\n    }\n    finally {\n      this.repaintBlocked = orig\n    }\n    //  this.repaint();\n\n    return this\n  },\n\n  /**\n   * Return a copy of the object, filtered to only have values for the whitelisted keys.\n   * @deprecated\n   */\n  pick: function (obj, var_keys) {\n    let keys = typeof arguments[1] !== 'string' ? arguments[1] : Array.prototype.slice.call(arguments, 1)\n    let out = {}, key\n    for (key in keys) {\n      if (typeof obj[key] !== \"undefined\")\n        out[key] = obj[key]\n    }\n    return out\n  },\n\n  /**\n   * \n   * Add the figure to the current selection and propagate this to all edit policies.\n   *\n   * @param {Boolean} [asPrimarySelection] true if the element should be the primary selection\n   * @private\n   */\n  select: function (asPrimarySelection) {\n    if (typeof asPrimarySelection === \"undefined\") {\n      asPrimarySelection = true\n    }\n\n    // apply all EditPolicy for select Operations\n    //\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.SelectionPolicy) {\n        e.onSelect(_this.canvas, _this, asPrimarySelection)\n      }\n    })\n\n    if (this.canvas !== null) {\n      this.canvas.getSelection().add(this)\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Unselect the figure and propagete this event to all edit policies.\n   *\n   * @private\n   **/\n  unselect: function () {\n    let _this = this\n    // apply all EditPolicy for select Operations\n    //\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.SelectionPolicy) {\n        e.onUnselect(_this.canvas, _this)\n      }\n    })\n\n    if (this.canvas !== null) {\n      this.canvas.getSelection().remove(this)\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Returns a function which returns the the figure which must handle the selection handling.\n   *\n   * @param {Function} [adapter] function which returns the figure which handles the selection handling\n   */\n  setSelectionAdapter: function (adapter) {\n    if (adapter == null) {\n      this.selectionAdapter = this.defaultSelectionAdapter\n    }\n    else {\n      this.selectionAdapter = adapter\n    }\n\n    return this\n  },\n\n  /**\n   * \n   *\n   * @returns {Function}\n   */\n  getSelectionAdapter: function () {\n    return this.selectionAdapter\n  },\n\n  /**\n   * \n   * Returns true if the figure part of the current canvas selection.\n   *\n   * @since 5.5.6\n   *\n   * @returns {Boolean}\n   */\n  isSelected: function () {\n    if (this.canvas !== null) {\n      return this.canvas.getSelection().contains(this)\n    }\n\n    return false\n  },\n\n  /**\n   * \n   * Allows a user to attach (or remove) data to an element, without needing to create a custom figure or shape.\n   * The data must be a valid JSON object.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       userData: object\n   *     });\n   *\n   * @since 2.7.2\n   * @param {Object} object\n   */\n  setUserData: function (object) {\n    this.userData = object\n    this.fireEvent(\"change:userData\", {value: object})\n    return this\n  },\n\n  /**\n   * \n   * Returns any user data set previously on the given figure by setUserData.\n   *\n   * @since 2.7.2\n   * @returns {Object}\n   */\n  getUserData: function () {\n    return this.userData\n  },\n\n  /**\n   * \n   * Return the UUID of this element.\n   *\n   * @returns {String}\n   */\n  getId: function () {\n    return this.id\n  },\n\n\n  /**\n   * \n   * Set the id of this element.\n   *\n   *    // Alternatively you can use the attr method:\n   *    figure.attr({\n   *      id: newId\n   *    });\n   *\n   * @param {String} newId the new id for this figure\n   */\n  setId: function (newId) {\n    this.id = newId\n\n    return this\n  },\n\n\n  /**\n   * \n   * Return the css styling class name of the element.\n   *\n   *\n   * @returns {String}\n   */\n  getCssClass: function () {\n    return this.cssClass\n  },\n\n  /**\n   * \n   * Set the css class of the node.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       \"cssClass\": \"red_border_figure\"\n   *     });\n   *\n   * @param {String} cssClass the new css class name of the node\n   * @since 2.9.0\n   */\n  setCssClass: function (cssClass) {\n    this.cssClass = cssClass === null ? null : cssClass.trim()\n\n    if (this.shape === null) {\n      return this\n    }\n\n    if (this.cssClass === null) {\n      this.shape.node.removeAttribute(\"class\")\n    }\n    else {\n      this.shape.node.setAttribute(\"class\", this.cssClass)\n    }\n    this.fireEvent(\"change:cssClass\", {value: this.cssClass})\n\n    return this\n  },\n\n  /**\n   * \n   * The method will return true if the class is assigned to the element, even if other classes also are.\n   *\n   * @param {String} className the class name to check\n   * @since 2.9.0\n   */\n  hasCssClass: function (className) {\n    if (this.cssClass === null) {\n      return false\n    }\n\n    return new RegExp(' ' + className.trim() + ' ').test(' ' + this.cssClass + ' ')\n  },\n\n  /**\n   * \n   * Add a CSS class to the figure.<br>\n   * It's important to note that this method does not replace a class. It simply adds the class,\n   * appending it to any which may already be assigned to the elements.\n   *\n   * @param {String} className\n   * @since 2.9.0\n   */\n  addCssClass: function (className) {\n    className = className.trim()\n    if (!this.hasCssClass(className)) {\n      if (this.cssClass === null) {\n        this.setCssClass(className)\n      }\n      else {\n        this.setCssClass(this.cssClass + ' ' + className)\n      }\n      this.fireEvent(\"change:cssClass\", {value: this.cssClass})\n    }\n\n    return this\n  },\n\n  /**\n   * \n   *\n   * Remove the given css class name from the figure\n   *\n   * @param {String} className the css class name to add\n   */\n  removeCssClass: function (className) {\n    className = className.trim()\n    let newClass = ' ' + this.cssClass.replace(/[\\t\\r\\n]/g, ' ') + ' '\n    if (this.hasCssClass(className)) {\n      while (newClass.indexOf(' ' + className + ' ') >= 0) {\n        newClass = newClass.replace(' ' + className + ' ', ' ')\n      }\n      this.setCssClass(newClass.replace(/^\\s+|\\s+$/g, ''))\n      this.fireEvent(\"change:cssClass\", {value: this.cssClass})\n    }\n\n    return this\n  },\n\n  /**\n   * \n   *\n   * Add or remove the given css class name from the figure\n   *\n   * @param {String} className the class name to toggle\n   */\n  toggleCssClass: function (className) {\n    className = className.trim()\n    let newClass = ' ' + this.cssClass.replace(/[\\t\\r\\n]/g, ' ') + ' '\n    if (this.hasCssClass(className)) {\n      while (newClass.indexOf(' ' + className + ' ') >= 0) {\n        newClass = newClass.replace(' ' + className + ' ', ' ')\n      }\n      this.setCssClass(newClass.replace(/^\\s+|\\s+$/g, ''))\n    } else {\n      this.setCssClass(this.cssClass + ' ' + className)\n    }\n    this.fireEvent(\"change:cssClass\", {value: this.cssClass})\n\n    return this\n  },\n\n  /**\n   * \n   * Set the canvas element of this figures. This can be used to determine whenever an element\n   * is added or removed to the canvas.\n   *\n   * @param {draw2d.Canvas} canvas the new parent of the figure or null\n   */\n  setCanvas: function (canvas) {\n    // remove the shape if we reset the canvas and the element\n    // was already drawn\n    if (canvas === null && this.shape !== null) {\n      if (this.isSelected()) {\n        this.unselect()\n      }\n      this.shape.remove()\n      this.shape = null\n    }\n\n    this.canvas = canvas\n\n    if (this.canvas !== null) {\n      this.getShapeElement()\n    }\n\n    // reset the attribute cache. We must start by paint all attributes\n    //\n    this.lastAppliedAttributes = {}\n\n\n    if (canvas === null) {\n      this.stopTimer()\n    }\n    else {\n      if (this.timerInterval >= this.MIN_TIMER_INTERVAL) {\n        this.startTimer(this.timerInterval)\n      }\n    }\n\n    this.children.each(function (i, e) {\n      e.figure.setCanvas(canvas)\n    })\n\n    return this\n  },\n\n  /**\n   * \n   * Return the current assigned canvas container.\n   *\n   * @returns {draw2d.Canvas}\n   */\n  getCanvas: function () {\n    return this.canvas\n  },\n\n\n  /**\n   * \n   * Start a timer which calls the onTimer method in the given interval.\n   *\n   * @param {Number} milliSeconds\n   */\n  startTimer: function (milliSeconds) {\n    this.stopTimer()\n    this.timerInterval = Math.max(this.MIN_TIMER_INTERVAL, milliSeconds)\n\n    if (this.canvas !== null) {\n      this.timerId = window.setInterval(() => {\n        this.onTimer()\n        this.fireEvent(\"timer\")\n      }, this.timerInterval)\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Stop the internal timer.\n   *\n   */\n  stopTimer: function () {\n    if (this.timerId >= 0) {\n      window.clearInterval(this.timerId)\n      this.timerId = -1\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Callback method for the internal timer handling<br>\n   * Inherit classes must override this method if they want use the timer feature.\n   *\n   *     // Alternatively you can register for this event with\n   *     figure.on(\"timer\", function(emitter){\n   *         alert(\"timer fired\");\n   *     });\n   *\n   * @template\n   */\n  onTimer: function () {\n  },\n\n  /**\n   * \n   * Moves the element so it is the closest to the viewer’s eyes, on top of other elements. Additional\n   * the internal model changed as well.\n   *\n   * Optional: Inserts current object in front of the given one.\n   *\n   * @param {draw2d.Figure} [figure] move current object in front of the given one.\n   * @since 3.0.0\n   */\n  toFront: function (figure) {\n    // ensure that the z-oder is still correct if the figure is assigned\n    // to a StrongComposite\n    //\n    if (this.composite instanceof draw2d.shape.composite.StrongComposite && (typeof figure !== \"undefined\")) {\n      let indexFigure = figure.getZOrder()\n      let indexComposite = this.composite.getZOrder()\n      if (indexFigure < indexComposite) {\n        figure = this.composite\n      }\n    }\n\n    if (typeof figure === \"undefined\") {\n      this.getShapeElement().toFront()\n\n      if (this.canvas !== null) {\n        let figures = this.canvas.getFigures()\n        let lines = this.canvas.getLines()\n        if (figures.remove(this) !== null) {\n          figures.add(this)\n        } else if (lines.remove(this) !== null) {\n          lines.add(this)\n        }\n      }\n    }\n    else {\n      this.getShapeElement().insertAfter(figure.getTopLevelShapeElement())\n\n      if (this.canvas !== null) {\n        let figures = this.canvas.getFigures()\n        let lines = this.canvas.getLines()\n        if (figures.remove(this) !== null) {\n          let index = figures.indexOf(figure)\n          figures.insertElementAt(this, index + 1)\n        } else if (lines.remove(this) !== null) {\n          lines.add(this)\n        }\n      }\n    }\n\n    // bring all children in front of the parent\n    let _this = this\n    this.children.each(function (i, child) {\n      child.figure.toFront(_this)\n    })\n\n    // and last but not lease the ResizeHandles if any present\n    //\n    this.selectionHandles.each(function (i, handle) {\n      handle.toFront()\n    })\n\n    return this\n  },\n\n  /**\n   * \n   * Moves the element to the background. Additional\n   * the internal model changed as well.\n   *\n   * @since 4.7.2\n   */\n  toBack: function (figure) {\n    // it is not allowed that a figure is behind an assigned composite\n    //\n    if (this.composite instanceof draw2d.shape.composite.StrongComposite) {\n      this.toFront(this.composite)\n      return\n    }\n\n    if (this.canvas !== null) {\n      let figures = this.canvas.getFigures()\n      let lines = this.canvas.getLines()\n      if (figures.remove(this) !== null) {\n        figures.insertElementAt(this, 0)\n      } else if (lines.remove(this) !== null) {\n        lines.insertElementAt(this, 0)\n      }\n      if (typeof figure !== \"undefined\") {\n        this.getShapeElement().insertBefore(figure.getShapeElement())\n      }\n      else {\n        this.getShapeElement().toBack()\n      }\n    }\n\n    // Bring all children in front of \"this\" figure\n    //\n    let _this = this\n    this.children.each(function (i, child) {\n      child.figure.toFront(_this)\n    }, true)\n\n    return this\n  },\n\n\n  /**\n   * \n   * Install a new edit policy to the figure. Each editpolicy is able to focus on a single editing\n   * task or group of related tasks. This also allows editing behavior to be selectively reused across\n   * different figure implementations. Also, behavior can change dynamically, such as when the layouts\n   * or routing methods change.\n   *\n   * Example for limited DragDrop behavior can be a draw2d.layout.constraint.RegionConstriantPolicy.\n   *\n   * @param {draw2d.policy.EditPolicy} policy\n   */\n  installEditPolicy: function (policy) {\n    // it is only possible to install one SelectionFeedbackPolicy at once\n    //\n    if (policy instanceof draw2d.policy.figure.SelectionFeedbackPolicy) {\n      this.editPolicy.grep( (p) => {\n        let stay = !(p instanceof draw2d.policy.figure.SelectionFeedbackPolicy)\n        if (!stay) {\n\n           p.onUninstall(this)\n        }\n        return stay\n      })\n    }\n    policy.onInstall(this)\n    this.editPolicy.add(policy)\n\n    return this\n  },\n\n  /**\n   * \n   *\n   * UnInstall the edit policy from the figure. Either the instance itself if found\n   * or all kind of the given edit policies.\n   *\n   *\n   * @param {draw2d.policy.EditPolicy} policy\n   * @since 4.81\n   */\n  uninstallEditPolicy: function (policy) {\n    let removedPolicy = this.editPolicy.remove(policy)\n\n    // we found the policy and we are happy\n    //\n    if (removedPolicy !== null) {\n      removedPolicy.onUninstall(this)\n      return\n    }\n\n    // The policy isn'T part of the figure. In this case we \"think\" the user want\n    // deinstall all instances of the policy\n    //\n    let _this = this\n    let name = (typeof policy === \"string\") ? policy : policy.NAME\n    this.editPolicy.grep(function (p) {\n      if (p.NAME === name) {\n        p.onUninstall(_this)\n        return false\n      }\n      return true\n    })\n  },\n\n  /**\n   * Add a child figure to the figure. The hands over figure doesn't support drag&drop\n   * operations. It's only a decorator for the connection.<br>\n   * Mainly for labels or other decorations\n   *\n   *\n   *    let start = new draw2d.shape.node.Start({x:80, y:150});\n   *    start.add(new draw2d.shape.basic.Label({text:\"Test Label\"}), new draw2d.layout.locator.TopLocator());\n   *\n   *    canvas.add( start);\n   *\n   * \n   * @param {draw2d.Figure} child the figure to add as decoration to the connection.\n   * @param {draw2d.layout.locator.Locator} locator the locator for the child.\n   * @param {Number} [index] optional index where to insert the figure\n   **/\n  add: function (child, locator, index) {\n    if (typeof locator === \"undefined\" || locator === null) {\n      throw \"Second parameter 'locator' is required for method 'Figure#add'\"\n    }\n\n    // the child is now a slave of the parent\n    //\n    child.setParent(this)\n\n    // inform the locator that a new child is bounded to the parent\n    // The call must happen after parent assignment. Reason: the locator\n    // can override some behaviours which are propagated from the parent.\n    //\n    locator.bind(this, child)\n\n    child.on(\"resize\", this.relocateChildrenEventCallback)\n\n    if (!isNaN(parseInt(index))) {\n      this.children.insertElementAt({figure: child, locator: locator}, index)\n    }\n    else {\n      this.children.add({figure: child, locator: locator})\n    }\n\n    if (this.canvas !== null) {\n      child.setCanvas(this.canvas)\n    }\n\n    this.repaint()\n\n    return this\n  },\n\n  /**\n   * \n   * Remove the child figure from this figure and the canvas\n   *\n   * @param {draw2d.Figure} child the figure to remove.\n   *\n   * @returns {Object} the removed tupple of figure/locator or null if the child isn't found\n   * @returns {draw2d.Figure} return.figure The removed figure\n   * @returns {draw2d.shape.layout.Layout} return.locator The used locator of the figure\n   *\n   * @since 5.0.0\n   **/\n  remove: function (child) {\n    if (typeof child === \"undefined\" || child === null) {\n      debug.warn(\"The parameter child is required for Figure.remove\")\n      return null\n    }\n\n    let removed = null\n    this.children.grep(function (e) {\n      let stay = e.figure !== child\n      if (!stay) {\n        removed = e\n      }\n      return stay\n    })\n\n    if (removed !== null) {\n      child.setParent(null)\n      child.setCanvas(null)\n      removed.locator.unbind(this, child)\n      child.off(this.relocateChildrenEventCallback)\n\n      this.repaint()\n      return removed\n    }\n\n    return null\n  },\n\n  /**\n   * \n   * Return all children/decorations of this shape which has been added with\n   * draw2d.Figure.add\n   *\n   * @returns {draw2d.util.ArrayList}\n   */\n  getChildren: function () {\n    return this.children.clone().map(function (e) {\n      return e.figure\n    })\n  },\n\n\n  /**\n   * \n   * Remove all children/decorations of this shape\n   *\n   */\n  resetChildren: function () {\n    this.children.each(function (i, e) {\n      e.figure.setCanvas(null)\n    })\n    this.children = new draw2d.util.ArrayList()\n    this.repaint()\n\n    return this\n  },\n\n\n  /**\n   * \n   * return the current SVG shape element or create it on demand.\n   *\n   * @protected\n   */\n  getShapeElement: function () {\n    if (this.shape !== null) {\n      return this.shape\n    }\n\n    this.shape = this.createShapeElement()\n    if (!this.isVisible()) {\n      this.shape.hide()\n    }\n\n    // add CSS class to enable styling of the element with CSS rules/files\n    //\n    if (this.cssClass !== null) {\n      this.shape.node.setAttribute(\"class\", this.cssClass)\n    }\n\n    return this.shape\n  },\n\n  /**\n   * \n   * Get the top level shape element. May the figure has a set of SVG elements. In this case this\n   * method must return the top level node.<br>\n   * This method is used for the toFront/toBack method to order the nodes in the correct way.\n   *\n   * @since 5.0.0\n   * @private\n   */\n  getTopLevelShapeElement: function () {\n    return this.getShapeElement()\n  },\n\n\n  /**\n   * \n   * Inherited classes must override this method to implement it's own draw functionality.\n   *\n   * @template\n   * @abstract\n   */\n  createShapeElement: function () {\n    throw \"Inherited class [\" + this.NAME + \"] must override the abstract method createShapeElement\"\n  },\n\n\n  /**\n   * \n   * propagate all attributes like color, stroke,... to the shape element\n   *\n   * @param {Object} [attributes] the style attributes for the SVG shape\n   * @private\n   **/\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return this\n    }\n    let _this = this\n    attributes = attributes || {}\n\n\n    if (this.visible === true) {\n      if (this.shape.isVisible() === false) {\n        if (!isNaN(parseFloat(attributes.visibleDuration))) {\n          $(this.shape.node).fadeIn(attributes.visibleDuration, function () {\n            _this.shape.show()\n          })\n        }\n        else {\n          this.shape.show()\n        }\n      }\n    }\n    else {\n      if (this.shape.isVisible() === true) {\n        if (!isNaN(parseFloat(attributes.visibleDuration))) {\n          $(this.shape.node).fadeOut(attributes.visibleDuration, function () {\n            _this.shape.hide()\n          })\n        }\n        else {\n          this.shape.hide()\n        }\n      }\n      return this\n    }\n\n    // enrich with common properties\n    attributes.opacity = this.alpha\n\n    // performance improvement\n    // Only apply attributes which has changed. This ends in a big performance improvement\n    // because the raphael shape isn't redraw at all.\n    //\n    attributes = jsonUtil.flatDiff(attributes, this.lastAppliedAttributes)\n    this.lastAppliedAttributes = attributes\n\n\n    if (Object.getOwnPropertyNames(attributes).length > 0) {\n      this.shape.attr(attributes)\n    }\n\n    this.applyTransformation()\n\n    // Relocate all children of the figure.\n    // This means that the Locator can calculate the new Position of the child.\n    // This is not the best place for this. Move it to dim/size/shape changing\n    // methods of the figure. A \"repaint\" isn't always dimension changing the figure.\n    //\n    this.children.each(function (i, e) {\n      e.locator.relocate(i, e.figure)\n    })\n\n    return this\n  },\n\n  /**\n   * \n   * apply a transformation to the shape like rotation, translate,..\n   *\n   * @private\n   * @template\n   */\n  applyTransformation: function () {\n    return this\n  },\n\n  /**\n   * \n   * Highlight the element or remove the highlighting\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       glow: flag\n   *     });\n   *\n   * @param {Boolean} flag indicates glow/noGlow\n   * @template\n   */\n  setGlow: function (flag) {\n    // do nothing in the base class.\n    // Subclasses must implement this method.\n\n    return this\n  },\n\n\n  /**\n   * \n   * Allow dragging only when the cursor is over a specific part of the figure.\n   * <br>\n   * Override this method to specify the bounding box of an element or a draw2d.util.ArrayList\n   * of draw2d.geo.Rectangle of bounding boxes used to drag the figure. The returned coordinates\n   * are absolute coordinates to the canvas.\n   * <br>\n   * <br>\n   * Default implementation returns <b>null</b> to indicate to use the complete figures as\n   * drag handle.\n   *\n   * @since 5.6.0\n   * @returns {draw2d.geo.Rectangle|draw2d.util.ArrayList}\n   */\n  getHandleBBox: function () {\n    return null\n  },\n\n  /**\n   * \n   * Called if the drag and drop action begins. You can return [false] if you\n   * want avoid that the figure can be move.\n   *\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean} true if the figure accepts dragging\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey) {\n    this.isInDragDrop = false\n\n    // Check whenever the figures has a drag-handle. Allow drag&drop\n    // operation only if the x/y is inside this area.\n    //\n    // @since 5.6.0\n    let bbox = this.getHandleBBox()\n    if (bbox !== null && bbox.translate(this.getAbsolutePosition().scale(-1)).hitTest(x, y) === false) {\n      // design failure: we must catch the figure below the mouse to forward\n      // the panning event to this figure. Special handling to provide sliders\n      // and other UI elements which requires the panning event. Hack.\n      this.panningDelegate = this.getBestChild(this.getX() + x, this.getY() + y)\n      if (this.panningDelegate !== null) {\n        // transform x/y relative to the panning figure and request the dragStart event\n        this.panningDelegate.onDragStart(x - this.panningDelegate.x, y - this.panningDelegate.y, shiftKey, ctrlKey)\n      }\n      return false\n    }\n\n\n    this.command = this.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.MOVE))\n\n    if (this.command !== null) {\n      this.ox = this.getX()\n      this.oy = this.getY()\n      this.isInDragDrop = true\n\n      // notify all installed policies\n      //\n      let _this = this\n      let canStartDrag = true\n\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n          canStartDrag = canStartDrag && e.onDragStart(_this.canvas, _this, x, y, shiftKey, ctrlKey)\n        }\n      })\n\n      if (canStartDrag) {\n        // fire an event\n        // @since 5.3.3\n        this.fireEvent(\"dragstart\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n      }\n      return canStartDrag\n    }\n\n    return false\n  },\n\n  /**\n   * \n   * Don't call them manually. This will be done by the framework.<br>\n   * Will be called if the object are moved via drag and drop.\n   * Sub classes can override this method to implement additional stuff. Don't forget to call\n   * the super implementation via <code>this._super(dx, dy, dx2, dy2);</code>\n   *\n   * @private\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   **/\n  onDrag: function (dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    // apply all EditPolicy for DragDrop Operations. This is something like\n    // an policy that forces that an object can only move vertical, horizontal or in a given\n    // rectangle.\n    //\n    this.editPolicy.each( (i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        let newPos = e.adjustPosition(this, this.ox + dx, this.oy + dy)\n        if (newPos) {\n          dx = newPos.x - this.ox\n          dy = newPos.y - this.oy\n        }\n      }\n    })\n    let newPos = new draw2d.geo.Point(this.ox + dx, this.oy + dy)\n\n    // Adjust the new location if the object can snap to a helper\n    // like grid, geometry, ruler,...\n    //\n    if (this.getCanSnapToHelper()) {\n      newPos = this.getCanvas().snapToHelper(this, newPos)\n    }\n\n\n    this.setPosition(newPos)\n\n    // notify all installed policies that the object has moved.\n    //\n    this.editPolicy.each( (i, e) =>{\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.onDrag(this.canvas, this)\n      }\n    })\n\n\n    // notify all installed listener that th object has moved\n    // @since 5.3.3\n    this.fireEvent(\"drag\", {dx: dx, dy: dy, dx2: dx2, dy2: dy2, shiftKey: shiftKey, ctrlKey: ctrlKey})\n  },\n\n  /**\n   * \n   * Called by the framework if the figure returns false for the drag operation. In this\n   * case we send a \"panning\" event - mouseDown + mouseMove. This is very useful for\n   * UI-Widget like slider, spinner,...\n   *\n   *     // You can alternatively register an event handler with:\n   *     figure.on(\"panning\", function(emitter, eventData){\n   *         alert(\"panning of the figure called\");\n   *     });\n   *\n   * @param {Number} dx the x difference between the mouse down operation and now\n   * @param {Number} dy the y difference between the mouse down operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   */\n  onPanning: function (dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n  },\n\n  /**\n   * \n   * Called by the framework if the panning event of the figures ends. This happens\n   * after the mous up event if the panning is active.\n   *\n   *     // You can alternatively register an event handler with:\n   *     figure.on(\"panningEnd\", function(emitter){\n   *         alert(\"panning of the figure called\");\n   *     });\n   *\n   */\n  onPanningEnd: function () {\n  },\n\n  /**\n   * \n   * Will be called after a drag and drop action.<br>\n   * Sub classes can override this method to implement additional stuff. Don't forget to call\n   * the super implementation via <code>this._super();</code>\n   *\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   **/\n  onDragEnd: function (x, y, shiftKey, ctrlKey) {\n    // Element ist zwar schon an seine Position, das Command muss aber trotzdem\n    // in dem CommandStack gelegt werden damit das Undo funktioniert.\n    //\n    if (this.command !== null) {\n      this.command.setPosition(this.x, this.y)\n      this.canvas.getCommandStack().execute(this.command)\n      this.command = null\n    }\n    this.isInDragDrop = false\n    this.panningDelegate = null\n\n    // notify all installed policies\n    //\n    this.editPolicy.each((i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.onDragEnd(this.canvas, this, x, y, shiftKey, ctrlKey)\n      }\n    })\n\n    this.fireEvent(\"move\", {figure: this, dx: 0, dy: 0})\n    this.fireEvent(\"change:x\", {figure: this, dx: 0})\n    this.fireEvent(\"change:y\", {figure: this, dy: 0})\n\n    // fire an event\n    // @since 5.3.3\n    this.fireEvent(\"dragend\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n  },\n\n  /**\n   * \n   * Called by the framework during drag&drop operations if the user drag a figure over this figure\n   *\n   * @param {draw2d.Figure} draggedFigure The figure which is currently dragging\n   *\n   * @returns {draw2d.Figure} the figure which should receive the drop event or null if the element didn't want a drop event\n   * @since 6.1.0\n   * @private\n   **/\n  delegateTarget: function (draggedFigure) {\n\n    let delegate = draggedFigure\n    this.getCanvas().getDropInterceptorPolicies().each( (i, policy) => {\n      delegate = policy.delegateTarget(draggedFigure, this)\n      if (delegate !== null) {\n        return false // break the loop\n      }\n    })\n\n    return delegate\n  },\n\n  /**\n   * \n   * Called by the framework during drag&drop operations if the user drag a figure over this figure\n   *\n   * @param {draw2d.Figure} draggedFigure The figure which is currently dragging\n   *\n   * @template\n   **/\n  onDragEnter: function (draggedFigure) {\n  },\n\n  /**\n   * \n   * Called if the DragDrop object leaving the current hover figure.\n   *\n   * @param {draw2d.Figure} draggedFigure The figure which is currently dragging\n   * @template\n   **/\n  onDragLeave: function (draggedFigure) {\n  },\n\n\n  /**\n   * \n   * Called if the user drop this element onto the dropTarget. This event is ONLY fired if the\n   * shape return \"this\" in the {@link draw2d.Figure#onDragEnter} method.\n   *\n   *\n   * @param {draw2d.Figure} dropTarget The drop target.\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   **/\n  onDrop: function (dropTarget, x, y, shiftKey, ctrlKey) {\n  },\n\n  /**\n   * \n   * Called if the user dropped an figure onto this element. This event is ONLY fired if the\n   * in the canvas installed {@link draw2d.policy.canvas.DropInterceptorPolicy} allow this.\n   *\n   *\n   * @param {draw2d.Figure} droppedFigure The dropped figure.\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   * @since 4.8.0\n   **/\n  onCatch: function (droppedFigure, x, y, shiftKey, ctrlKey) {\n  },\n\n\n  /**\n   * \n   * Callback method for the mouse enter event. Usefull for mouse hover-effects.\n   * Override this method for your own effects. Don't call them manually.\n   *\n   * @template\n   **/\n  onMouseEnter: function () {\n  },\n\n\n  /**\n   * \n   * Callback method for the mouse leave event. Useful for mouse hover-effects.\n   *\n   * @template\n   **/\n  onMouseLeave: function () {\n  },\n\n  /**\n   * \n   * Called when a user dbl clicks on the element\n   *\n   *     // Alternatively you can register an event with:\n   *     //\n   *     figure.on(\"dblclick\", function(emitter, event){\n   *         alert(\"user dbl click on the figure\");\n   *     });\n   *\n   * @template\n   */\n  onDoubleClick: function () {\n  },\n\n\n  /**\n   * \n   * Called when a user clicks on the element.\n   *\n   *     // You can alternatively register an event handler with:\n   *     figure.on(\"click\", function(emitter, event){\n   *         alert(\"user click on the figure\");\n   *     });\n   *\n   * @template\n   * @deprecated\n   */\n  onClick: function () {\n  },\n\n  /**\n   * \n   * called by the framework if the figure should show the context menu.<br>\n   * The strategy to show the context menu depends on the platform. Either looong press or\n   * right click with the mouse.\n   *\n   *     // Alternatively you register for this event with:\n   *     figure.on(\"contextmenu\", function(emitter, event){\n   *         alert(\"user press the right mouse button for a context menu\");\n   *     });\n   *\n   * @param {Number} x the x-coordinate to show the menu\n   * @param {Number} y the y-coordinate to show the menu\n   * @since 1.1.0\n   * @template\n   */\n  onContextMenu: function (x, y) {\n  },\n\n  /**\n   * \n   * Set the alpha blending of this figure.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       \"alpha\": percent\n   *     });\n   *\n   *     // ...or:\n   *     figure.attr({\n   *       \"opacity\": percent\n   *     });\n   *\n   * @param {Number} percent value between [0..1].\n   **/\n  setAlpha: function (percent) {\n    percent = Math.min(1, Math.max(0, parseFloat(percent)))\n    if (percent === this.alpha) {\n      return\n    }\n\n    this.alpha = percent\n    this.repaint()\n    this.fireEvent(\"change:opacity\", {value: this.alpha})\n\n    return this\n  },\n\n\n  /**\n   * \n   * Return the alpha blending of the figure\n   *\n   * @returns {Number} the current alpha blending\n   */\n  getAlpha: function () {\n    return this.alpha\n  },\n\n\n  /**\n   * \n   * Set the rotation angle in degree [0..356]<br>\n   * <b>Only steps of 90 degree is working well</b>\n   * <br>\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       angle: angle\n   *     });\n   *\n   * @param {Number} angle the rotation angle in degree\n   */\n  setRotationAngle: function (angle) {\n    this.rotationAngle = angle\n\n    // Update the resize handles if the user change the position of the element via an API call.\n    //\n    this.editPolicy.each((i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(this.canvas, this)\n      }\n    })\n\n    this.fireEvent(\"change:angle\", {value: this.rotationAngle})\n    this.repaint()\n\n    return this\n  },\n\n  /**\n   * \n   * return the rotation angle of the figure in degree of [0..356].\n   *\n   * <br>\n   * <b>NOTE: this method is pre alpha and not for production. Only steps of 90 degree is working well</b>\n   * <br>\n   * @returns {Number}\n   */\n  getRotationAngle: function () {\n    return this.rotationAngle\n  },\n\n\n  /**\n   * \n   * Show/hide the element. The element didn't receive any mouse events (click, dblclick) if you hide the\n   * figure.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       visible: flag\n   *     });\n   *\n   * @param {Boolean} flag\n   * @param {Number} [duration] the optional number for the fadeIn /fadeOut of the figure\n   * @since 1.1.0\n   */\n  setVisible: function (flag, duration) {\n    flag = !!flag\n    if (flag === this.visible) {\n      return\n    }\n    this.visible = flag\n\n    this.repaint({visibleDuration: duration})\n\n    if (this.visible) {\n      this.fireEvent(\"show\")\n    } else {\n      this.fireEvent(\"hide\")\n    }\n    this.fireEvent(\"change:visibility\", {value: this.visible})\n\n    return this\n  },\n\n  /**\n   * \n   * Return true if the figure visible.\n   *\n   * @returns {Boolean}\n   * @since 1.1.0\n   */\n  isVisible: function () {\n    return this.visible && this.shape !== null\n  },\n\n  /**\n   * \n   * Guarantee, that the figure width/height will not be distorted. Applicable before calling setDimension().\n   * It is false by default.\n   *\n   * @since 4.1.0\n   * @param {Boolean} flag boolean flag if the figure should respect the aspect ratio\n   */\n  setKeepAspectRatio: function (flag) {\n    this.keepAspectRatio = flag\n\n    return this\n  },\n\n  /**\n   * \n   * Return the flag if the shape keep the aspect ratio.\n   *\n   * @since 4.1.0\n   */\n  getKeepAspectRatio: function () {\n    return this.keepAspectRatio\n  },\n\n  /**\n   * \n   * Return the current z-index of the element. Currently this is an expensive method. The index will be calculated\n   * all the time. Caching is not implemented at the moment.\n   *\n   * @returns {Number}\n   */\n  getZOrder: function () {\n    if (this.shape === null) {\n      return -1\n    }\n\n    let i = 0\n    let child = this.shape.node\n    while ((child = child.previousSibling) !== null) {\n      i++\n    }\n    return i\n  },\n\n  /**\n   * \n   * Set the flag if this object can snap to grid or geometry.\n   * A window of dialog should set this flag to false.\n   *\n   * @param {Boolean} flag The snap to grid/geometry enable flag.\n   *\n   **/\n  setCanSnapToHelper: function (flag) {\n    this.canSnapToHelper = !!flag\n\n    return this\n  },\n\n  /**\n   * \n   * Returns true if the figure can snap to any helper like a grid, guide, geometrie\n   * or something else.\n   *\n   * @returns {Boolean}\n   **/\n  getCanSnapToHelper: function () {\n    return this.canSnapToHelper\n  },\n\n  /**\n   *\n   * @returns {draw2d.geo.Point}\n   **/\n  getSnapToGridAnchor: function () {\n    return this.snapToGridAnchor\n  },\n\n  /**\n   * \n   * Set the hot spot for all snapTo### operations.\n   *\n   * @param {draw2d.geo.Point} point\n   **/\n  setSnapToGridAnchor: function (point) {\n    this.snapToGridAnchor = point\n\n    return this\n  },\n\n  /**\n   * \n   * Set the width of the figure and consider the minWidth attribute\n   *\n   * @param {Number} width the new width of the figure\n   * @since 5.1.0\n   */\n  setWidth: function (width) {\n    this.setDimension(parseFloat(width), this.getHeight())\n    this.fireEvent(\"change:width\", {value: this.width})\n\n    return this\n  },\n\n  /**\n   * \n   * The current width of the figure.\n   *\n   * @type {Number}\n   **/\n  getWidth: function () {\n    return this.width\n  },\n\n  /**\n   * \n   * Set the heigth of the figure and consider the minWidth attribute\n   *\n   * @param {Number} height the new height of the figure\n   * @since 5.1.0\n   */\n  setHeight: function (height) {\n    this.setDimension(this.getWidth(), parseFloat(height))\n    this.fireEvent(\"change:height\", {value: this.height})\n\n    return this\n  },\n\n  /**\n   * \n   * The current height of the figure.\n   *\n   * @returns {Number}\n   **/\n  getHeight: function () {\n    return this.height\n  },\n\n\n  /**\n   * \n   * This value is relevant for the interactive resize of the figure.\n   *\n   * @returns {Number} Returns the min. width of this object.\n   */\n  getMinWidth: function () {\n    return this.minWidth\n  },\n\n  /**\n   * \n   * Set the minimum width of this figure\n   *\n   * @param {Number} w\n   */\n  setMinWidth: function (w) {\n    this.minWidth = parseFloat(w)\n    this.fireEvent(\"change:minWidth\", {value: this.minWidth})\n\n    // fit the width with the new constraint\n    this.setWidth(this.getWidth())\n\n    return this\n  },\n\n  /**\n   * \n   * This value is relevant for the interactive resize of the figure.\n   *\n   * @returns {Number} Returns the min. height of this object.\n   */\n  getMinHeight: function () {\n    return this.minHeight\n  },\n\n  /**\n   * \n   * Set the minimum height of the figure.\n   *\n   * @param {Number} h\n   */\n  setMinHeight: function (h) {\n    this.minHeight = parseFloat(h)\n    this.fireEvent(\"change:minHeight\", {value: this.minHeight})\n\n    // fit the height with the new constraint\n    this.setHeight(this.getHeight())\n\n    return this\n  },\n\n\n  /**\n   * \n   * the the x-offset related to the parent figure or canvas\n   *\n   * @param {Number} x the new x offset of the figure\n   * @since 5.0.8\n   */\n  setX: function (x) {\n    this.setPosition(parseFloat(x), this.y)\n    this.fireEvent(\"change:x\", {value: this.x})\n\n    return this\n  },\n\n  /**\n   * \n   * The x-offset related to the parent figure or canvas.\n   *\n   * @returns {Number} the x-offset to the parent figure\n   **/\n  getX: function () {\n    return this.x\n  },\n\n  /**\n   * \n   * the the y-offset related to the parent figure or canvas\n   *\n   * @param {Number} y the new x offset of the figure\n   * @since 5.0.8\n   */\n  setY: function (y) {\n    this.setPosition(this.x, parseFloat(y))\n    this.fireEvent(\"change:y\", {value: this.y})\n\n    return this\n  },\n\n\n  /**\n   * \n   * The y-offset related to the parent figure or canvas.\n   *\n   * @returns {Number} The y-offset to the parent figure.\n   **/\n  getY: function () {\n    return this.y\n  },\n\n\n  /**\n   * \n   * The x-offset related to the canvas.\n   *\n   * @returns {Number} the x-offset to the canvas\n   **/\n  getAbsoluteX: function () {\n    if (!this.parent) {\n      return this.getX()\n    }\n\n    return this.getX() + this.parent.getAbsoluteX()\n  },\n\n\n  /**\n   * \n   * The y-offset related to the canvas.\n   *\n   * @returns {Number} The y-offset to the canvas.\n   **/\n  getAbsoluteY: function () {\n    if (!this.parent) {\n      return this.getY()\n    }\n    return this.getY() + this.parent.getAbsoluteY()\n  },\n\n\n  /**\n   * \n   * Returns the absolute y-position of the port.\n   *\n   * @type {draw2d.geo.Point}\n   **/\n  getAbsolutePosition: function () {\n    return new draw2d.geo.Point(this.getAbsoluteX(), this.getAbsoluteY())\n  },\n\n  /**\n   * \n   * Returns the absolute y-position of the port.\n   *\n   * @returns {draw2d.geo.Rectangle}\n   **/\n  getAbsoluteBounds: function () {\n    return new draw2d.geo.Rectangle(this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight())\n  },\n\n\n  /**\n   * \n   * Set the position of the object.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       x: x,\n   *       y: y\n   *     });\n   *\n   * @param {Number|draw2d.geo.Point} x The new x coordinate of the figure or the x/y coordinate if it is an draw2d.geo.Point\n   * @param {Number} [y] The new y coordinate of the figure\n   **/\n  setPosition: function (x, y) {\n    if (typeof x === \"undefined\") {\n      debugger\n    }\n\n    let oldPos = {x: this.x, y: this.y}\n\n    if (x instanceof draw2d.geo.Point) {\n      this.x = x.x\n      this.y = x.y\n    }\n    else {\n      this.x = x\n      this.y = y\n    }\n\n    this.editPolicy.each((i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        let newPos = e.adjustPosition(this, this.x, this.y)\n        this.x = newPos.x\n        this.y = newPos.y\n      }\n    })\n\n    this.repaint()\n\n\n    // Update the resize handles if the user change the position of the\n    // element via an API call.\n    //\n    this.editPolicy.each((i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(this.canvas, this)\n      }\n    })\n\n\n    let event = {figure:  this, dx: this.x - oldPos.x, dy: this.y - oldPos.y}\n    this.fireEvent(\"move\",     event)\n    this.fireEvent(\"change:x\", event)\n    this.fireEvent(\"change:y\", event)\n\n    return this\n  },\n\n\n  /**\n   * \n   * Get the current position of the figure\n   *\n   * @returns {draw2d.geo.Point}\n   * @since 2.0.0\n   */\n  getPosition: function () {\n    return new draw2d.geo.Point(this.getX(), this.getY())\n  },\n\n  /**\n   * \n   * Translate the figure with the given x/y offset.\n   *\n   * @param {Number} dx The x offset to translate\n   * @param {Number} dy The y offset to translate\n   **/\n  translate: function (dx, dy) {\n    this.setPosition(this.getX() + dx, this.getY() + dy)\n\n    return this\n  },\n\n\n  /**\n   * \n   * Set the new width and height of the figure.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *        width:  w,\n   *        height: h\n   *     });\n   *\n   * @param {Number} w The new width of the figure\n   * @param {Number} h The new height of the figure\n   **/\n  setDimension: function (w, h) {\n    let old = {width: this.width, height: this.height}\n\n    w = Math.max(this.getMinWidth(), w)\n    h = Math.max(this.getMinHeight(), h)\n\n    if (this.width === w && this.height === h) {\n      // required if an inherit figure changed the w/h to a given constraint.\n      // In this case the Resize handles must be informed that the shape didn't resized.\n      // because the minWidth/minHeight did have a higher prio.\n      this.editPolicy.each((i, e) => {\n        if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n          e.moved(this.canvas, this)\n        }\n      })\n      return this\n    }\n\n\n    // apply all EditPolicy to adjust/modify the new dimension\n    //\n    this.editPolicy.each((i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        let newDim = e.adjustDimension(this, w, h)\n        w = newDim.w\n        h = newDim.h\n      }\n    })\n\n    // respect the aspect ratio if required\n    //\n    if (this.keepAspectRatio === true) {\n      if (w >= this.getMinWidth()) {\n        // scale the height to the given ratio\n        h = this.getHeight() * (w / this.getWidth())\n        // and apply the new dimension only if the values are in range of the given constraints\n        if (h >= this.getMinHeight()) {\n          this.width = w\n          this.height = h\n        }\n      }\n    }\n    else {\n      this.width = Math.max(this.getMinWidth(), w)\n      this.height = Math.max(this.getMinHeight(), h)\n    }\n\n\n    this.repaint()\n\n    this.fireEvent(\"resize\")\n    this.fireEvent(\"change:dimension\", {value: {height: this.height, width: this.width, old: old}})\n\n    // Update the resize handles if the user change the position of the element via an API call.\n    //\n    this.editPolicy.each((i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(this.canvas, this)\n      }\n    })\n\n    return this\n  },\n\n\n  /**\n   * \n   * Set the bounding box of the figure\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       width: w,\n   *       height: h,\n   *       x: x,\n   *       y: y\n   *     });\n   *\n   *     // or\n   *     figure.attr({\n   *       boundingBox: {x:1, y:100, width:30, height:30}\n   *     });\n   *\n   * @param {draw2d.geo.Rectangle} rect\n   * @since 4.8.0\n   */\n  setBoundingBox: function (rect) {\n    rect = new draw2d.geo.Rectangle(rect)\n\n    let orig = this.repaintBlocked\n    this.repaintBlocked = true\n    this.setPosition(rect.x, rect.y)\n    this.repaintBlocked = orig\n    this.setDimension(rect.w, rect.h)\n\n    return this\n  },\n\n  /**\n   * \n   * Returns the bounding box of the figure in absolute position to the canvas.\n   *\n   * @returns {draw2d.geo.Rectangle}\n   **/\n  getBoundingBox: function () {\n    return new draw2d.geo.Rectangle(this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight())\n  },\n\n  /**\n   * \n   * Detect whenever the hands over coordinate is inside the figure.\n   * The default implementation is a simple bounding box test.\n   *\n   * @param {Number} iX\n   * @param {Number} iY\n   * @param {Number} [corona]\n   *\n   * @returns {Boolean}\n   */\n  hitTest: function (iX, iY, corona) {\n    if (typeof corona === \"number\") {\n      return this.getBoundingBox().scale(corona, corona).hitTest(iX, iY)\n    }\n    return this.getBoundingBox().hitTest(iX, iY)\n  },\n\n\n  /**\n   * \n   * Switch on/off the drag drop behaviour of this object\n   *\n   * @param {Boolean} flag The new drag drop indicator\n   **/\n  setDraggable: function (flag) {\n    this.draggable = !!flag\n\n    return this\n  },\n\n  /**\n   * \n   * Get the Drag drop enable flag\n   *\n   * @returns {Boolean} The new drag drop indicator\n   **/\n  isDraggable: function () {\n    // delegate to the composite if given\n    if (this.composite !== null) {\n      return this.composite.isMemberDraggable(this, this.draggable)\n    }\n\n    return this.draggable\n  },\n\n\n  /**\n   * \n   * Returns the true if the figure can be resized.\n   *\n   * @returns {Boolean}\n   **/\n  isResizeable: function () {\n    return this.resizeable\n  },\n\n  /**\n   * \n   * You can change the resizeable behaviour of this object. Hands over [false] and\n   * the figure has no resizehandles if you select them with the mouse.<br>\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       resizeable: flag\n   *     });\n   *\n   * @param {Boolean} flag The resizeable flag.\n   **/\n  setResizeable: function (flag) {\n    this.resizeable = !!flag\n    this.fireEvent(\"change:resizeable\", {value: this.resizeable})\n\n    return this\n  },\n\n  /**\n   * \n   * Indicates whenever the element is selectable by user interaction or API.\n   *\n   * @returns {Boolean}\n   **/\n  isSelectable: function () {\n    // delegate to the composite if given\n    if (this.composite !== null) {\n      return this.composite.isMemberSelectable(this, this.selectable)\n    }\n\n    return this.selectable\n  },\n\n\n  /**\n   * \n   * You can change the selectable behavior of this object. Hands over [false] and\n   * the figure has no selection handles if you try to select them with the mouse.<br>\n   *\n   * @param {Boolean} flag The selectable flag.\n   **/\n  setSelectable: function (flag) {\n    this.selectable = !!flag\n    this.fireEvent(\"change:selectable\", {value: this.selectable})\n\n    return this\n  },\n\n  /**\n   * \n   * Return true if the object doesn't care about the aspect ratio.\n   * You can change the height and width independent.<br>\n   *\n   * Replaced with \"getKeepAspectRatio\"\n   * @returns {Boolean}\n   * @deprecated\n   */\n  isStrechable: function () {\n    return !this.getKeepAspectRatio()\n  },\n\n  /**\n   * \n   * Return false if you avoid that the user can delete your figure.\n   * Sub class can override this method.\n   *\n   * @returns {Boolean}\n   **/\n  isDeleteable: function () {\n    return this.deleteable\n  },\n\n  /**\n   * \n   * Set the flag if the shape is deleteable.\n   *\n   * @param {Boolean} flag enable or disable flag for the delete operation\n   **/\n  setDeleteable: function (flag) {\n    this.deleteable = !!flag\n    this.fireEvent(\"change:deleteable\", {value: this.deleteable})\n\n    return this\n  },\n\n  /**\n   * \n   * Set the parent of this figure.\n   * Don't call them manually.\n   *\n   * @param {draw2d.Figure} parent The new parent of this figure\n   * @private\n   **/\n  setParent: function (parent) {\n    this.parent = parent\n\n    if (parent !== null) {\n      // inherit the selection handling impl from the parent\n      this.setSelectionAdapter(parent.getSelectionAdapter())\n    }\n    else {\n      // use default\n      this.setSelectionAdapter(null)\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Get the parent of this figure.\n   *\n   * @returns {draw2d.Figure}\n   **/\n  getParent: function () {\n    return this.parent\n  },\n\n  /**\n   * \n   * Check to see if a figure is a descendant of another figure.\n   * <br>\n   * The contains() method returns true if the figure provided by the argument is a descendant of this figure,\n   * whether it is a direct child or nested more deeply. Otherwise, it returns false.\n   *\n   * @param {draw2d.Figure} containedFigure The figure that may be contained by (a descendant of) this figure.\n   * @since 5.5.4\n   */\n  contains: function (containedFigure) {\n    if (containedFigure.getParent() === this) {\n      return true\n    }\n\n    for (let i = 0, len = this.children.getSize(); i < len; i++) {\n      let child = this.children.get(i).figure\n      if (child.contains(containedFigure)) {\n        return true\n      }\n    }\n    return false\n  },\n\n  /**\n   * \n   * Get the top most parent of this figure. This can be an layout figure or parent container\n   *\n   * @returns {draw2d.Figure}\n   * @since 5.0.6\n   **/\n  getRoot: function () {\n    let root = this.parent\n    while (root !== null && root.parent !== null) {\n      root = root.parent\n    }\n    return root\n  },\n\n  /**\n   * \n   * Set the assigned composite of this figure.\n   *\n   * @param {draw2d.shape.composite.StrongComposite} composite The assigned composite of this figure\n   * @since 4.8.0\n   **/\n  setComposite: function (composite) {\n    if (composite !== null && !(composite instanceof draw2d.shape.composite.StrongComposite)) {\n      throw \"'composite must inherit from 'draw2d.shape.composite.StrongComposite'\"\n    }\n\n    this.composite = composite\n\n    return this\n  },\n\n  /**\n   * \n   * Get the assigned composite of this figure.\n   *\n   * @returns {draw2d.shape.composite.StrongComposite}\n   * @since 4.8.0\n   **/\n  getComposite: function () {\n    return this.composite\n  },\n\n\n  /**\n   * \n   * Execute all handlers and behaviors attached to the figure for the given event type.\n   *\n   *\n   * @param {String} event the event to trigger\n   * @param {Object} [args] optional parameters for the triggered event callback\n   *\n   * @since 5.0.0\n   */\n  fireEvent: function (event, args) {\n    try {\n      if (typeof this.eventSubscriptions[event] === 'undefined') {\n        return\n      }\n\n      // avoid recursion\n      if (this._inEvent === true) {\n        return\n      }\n      this._inEvent = true\n      let subscribers = this.eventSubscriptions[event]\n      for (let i = 0; i < subscribers.length; i++) {\n        subscribers[i](this, args)\n      }\n    }\n    catch(exc){\n      console.log(exc)\n      throw exc\n    }\n    finally {\n      this._inEvent = false\n\n      // fire a generic change event if an attribute has changed\n      // required for some DataBinding frameworks or for the Backbone.Model compatibility\n      // the event \"change\" with the corresponding attribute name as additional parameter\n      if (event.substring(0, 7) === \"change:\") {\n        this.fireEvent(\"change\", event.substring(7))\n      }\n    }\n  },\n\n  /**\n   * \n   * Attach an event handler function for one or more events to the figure.\n   * To remove events bound with .on(), see {@link #off}.\n   *\n   * possible events are:<br>\n   * <ul>\n   *   <li>click</li>\n   *   <li>dblclick</li>\n   *   <li>move</li>\n   *   <li>resize</li>\n   *   <li>timer</li>\n   *   <li>contextmenu</li>\n   *   <li>show</li>\n   *   <li>hide</li>\n   *   <li>added</li>\n   *   <li>removed</li>\n   *   <li>change:[attr]</li>\n   * </ul>\n   *\n   * @param {String}   event One or more space-separated event types\n   * @param {Function} callback A function to execute when the event is triggered.\n   * @param {draw2d.Figure} callback.emitter the emitter of the event\n   * @param {Object} [callback.obj] optional event related data\n   * @param {Object} [context] optional context of the function callback.\n   * @since 5.0.0\n   */\n  on: function (event, callback, context) {\n    let events = event.split(\" \")\n    if (typeof callback === \"undefined\") {\n      debugger\n    }\n    // the \"context\" param is add to be compatible with Backbone.Model.\n    // The project \"backbone.ModelBinder\" requires this signature and we want to be nice.\n    //\n    if (context) {\n      callback = callback.bind(context)\n      callback.___originalCallback = callback\n    }\n\n    for (let i = 0; i < events.length; i++) {\n      if (typeof this.eventSubscriptions[events[i]] === 'undefined') {\n        this.eventSubscriptions[events[i]] = []\n      }\n      // avoid duplicate registration for the same event with the same callback method\n      if (-1 !== $.inArray(callback, this.eventSubscriptions[events[i]])) {\n        //   debugger\n      }\n      else {\n        this.eventSubscriptions[events[i]].push(callback)\n      }\n    }\n    return this\n  },\n\n  /**\n   * \n   * The .off() method removes event handlers that were attached with {@link #on}.<br>\n   * Calling .off() with no arguments removes all handlers attached to the elements.<br>\n   * <br>\n   * If a simple event name such as \"move\" is provided, all events of that type are removed from the figure.\n   *\n   *\n   * @param {String|Function} eventOrFunction the event name of the registerd function or the function itself\n   * @since 5.0.0\n   */\n  off: function (eventOrFunction) {\n    if (typeof eventOrFunction === \"undefined\") {\n      this.eventSubscriptions = {}\n    }\n    else if (typeof eventOrFunction === 'string') {\n      this.eventSubscriptions[eventOrFunction] = []\n    }\n    else {\n      for (let event in this.eventSubscriptions) {\n        this.eventSubscriptions[event] = this.eventSubscriptions[event].filter(callback => {\n          if (typeof callback.___originalCallback !== \"undefined\") {\n            return callback.___originalCallback !== eventOrFunction\n          }\n          return callback !== eventOrFunction\n        })\n      }\n    }\n\n    return this\n  },\n\n\n  /**\n   * \n   * Returns the best figure at the location [x,y]. It is a simple hit test. Keep in mind that only visible objects\n   * are returned.\n   *\n   * @param {Number} x The x position.\n   * @param {Number} y The y position.\n   * @param {draw2d.Figure|Array} [figureToIgnore] The figures which should be ignored.\n   **/\n  getBestChild: function (x, y, figureToIgnore) {\n    if (!Array.isArray(figureToIgnore)) {\n      if (figureToIgnore instanceof draw2d.Figure) {\n        figureToIgnore = [figureToIgnore]\n      }\n      else {\n        figureToIgnore = []\n      }\n    }\n\n    let result = null\n\n    // tool method to check recursive a figure for hitTest\n    //\n    let checkRecursive = function (children) {\n      children.each(function (i, e) {\n        let c = e.figure\n        checkRecursive(c.children)\n        if (result === null && c.isVisible() === true && c.hitTest(x, y) === true && $.inArray(c, figureToIgnore) === -1) {\n          result = c\n        }\n        return result === null // break the each-loop if we found an element\n      })\n    }\n\n    checkRecursive(this.children)\n\n    return result\n  },\n\n  /**\n   * \n   * Returns the Command to perform the specified Request or null.\n   *\n   * @param {draw2d.command.CommandType} request describes the Command being requested\n   * @returns {draw2d.command.Command} null or a Command\n   * @private\n   **/\n  createCommand: function (request) {\n    if (request === null) {\n      return null\n    }\n\n    if (request.getPolicy() === draw2d.command.CommandType.MOVE) {\n      if (!this.isDraggable()) {\n        return null\n      }\n      return new draw2d.command.CommandMove(this)\n    }\n\n    if (request.getPolicy() === draw2d.command.CommandType.DELETE) {\n      if (!this.isDeleteable()) {\n        return null\n      }\n      return new draw2d.command.CommandDelete(this)\n    }\n\n    if (request.getPolicy() === draw2d.command.CommandType.RESIZE) {\n      if (!this.isResizeable()) {\n        return null\n      }\n      return new draw2d.command.CommandResize(this)\n    }\n\n    return null\n  },\n\n  /**\n   * \n   * Clone the figure. <br>\n   * You must override and implement the methods <b>getPersistentAttributes</b> and <b>setPersistentAttributes</b> for your custom\n   * figures if the have special attributes.\n   *\n   * The clone() method performs a deep copy of the object, meaning that it copies the children, ports and decorations\n   * per default. You can control the clone procedure with the 'cloneMetaData'.\n   *\n   *\n   * @param {Object} [cloneMetaData] controls the clone procedure\n   * @param {Boolean} [cloneMetaData.excludeChildren] set it to true if you want exclude the children.\n   *\n   * @since 4.1.0\n   * @experimental\n   */\n  clone: function (cloneMetaData) {\n    cloneMetaData = extend({exludeChildren: false}, cloneMetaData)\n\n    let clone = eval(\"new \" + this.NAME + \"();\")\n    let initialId = clone.id\n\n    clone.setPersistentAttributes(this.getPersistentAttributes())\n\n    clone.id = initialId\n\n    // add all decorations to the memento\n    //\n    if (cloneMetaData.exludeChildren === false) {\n      clone.resetChildren()\n      this.children.each( (i, entry) =>{\n        let child = entry.figure.clone()\n        // we can ignore the locator if this didn't provide a \"correct\" name, this can happen in some\n        // Layout shapes like VerticalLayout or Horziontal Layout. This figures injects it own kind\n        // of layouter...so didn'T care about this.\n\n        let locator = entry.locator.NAME ? eval(\"new \" + entry.locator.NAME + \"();\") : null\n        clone.add(child, locator)\n      })\n    }\n\n    return clone\n  },\n\n  /**\n   * \n   * Return an objects with all important attributes for XML or JSON serialization\n   *\n   * @return {Object} all attributes of the figure required for the persistency\n   */\n  getPersistentAttributes: function () {\n    // force deep copy of userData to avoid side effects in the clone method.\n    //\n    let memento = {\n      type: this.NAME,\n      id: this.id,\n      x: this.getX(),\n      y: this.getY(),\n      width: this.width,\n      height: this.height,\n      alpha: this.alpha,\n      selectable: this.selectable,\n      draggable: this.draggable,\n      angle: this.rotationAngle,\n      userData: extend(true, {}, this.userData)\n    }\n\n\n    if (this.cssClass !== null) {\n      memento.cssClass = this.cssClass\n    }\n\n    if (this.composite !== null) {\n      memento.composite = this.composite.getId()\n    }\n\n    return memento\n  },\n\n  /**\n   * \n   * Read all attributes from the serialized properties and transfer them into the shape.\n   *\n   * @param {Object} memento\n   */\n  setPersistentAttributes: function (memento) {\n    this.id = memento.id\n    this.setPosition(parseFloat(memento.x), parseFloat(memento.y))\n\n    // width and height are optional parameter for the JSON stuff.\n    // We use the defaults if the attributes not present\n    if (typeof memento.width !== \"undefined\") {\n      this.width = parseFloat(memento.width)\n    }\n\n    if (typeof memento.height !== \"undefined\") {\n      this.height = parseFloat(memento.height)\n    }\n\n    if (typeof memento.userData !== \"undefined\") {\n      this.userData = memento.userData\n    }\n\n    if (typeof memento.selectable !== \"undefined\") {\n      this.selectable = memento.selectable\n    }\n\n    if (typeof memento.draggable !== \"undefined\") {\n      this.draggable = memento.draggable\n    }\n\n    if (typeof memento.cssClass !== \"undefined\") {\n      this.setCssClass(memento.cssClass)\n    }\n\n    if (typeof memento.alpha !== \"undefined\") {\n      this.setAlpha(parseFloat(memento.alpha))\n    }\n\n    if (typeof memento.angle !== \"undefined\") {\n      this.rotationAngle = parseFloat(memento.angle)\n    }\n\n    return this\n  }\n})\n\n\n","import draw2d from 'packages'\n\n\n/**\n * @class\n *\n * Required for Node.js draw2d model read/write operations.\n *\n * @inheritable\n * @author Andreas Herz\n */\n\ndraw2d.HeadlessCanvas = Class.extend(\n  /** @lends draw2d.HeadlessCanvas.prototype */\n\n    /** @lends draw2d.HeadlessCanvas.prototype */\n    {\n\n    NAME: \"draw2d.HeadlessCanvas\",\n\n    /**\n     * Create a new canvas with the given HTML DOM references.\n     *\n     * @param {String} canvasId the id of the DOM element to use a parent container\n     */\n    init: function()\n    {\n        // internal document with all figures, ports, ....\n        //\n        this.figures     = new draw2d.util.ArrayList();\n        this.lines       = new draw2d.util.ArrayList(); // crap - why are connections not just figures. Design by accident\n        this.commonPorts = new draw2d.util.ArrayList();\n\n        this.eventSubscriptions = {};\n\n        // The CommandStack for undo/redo operations\n        //\n        this.commandStack = new draw2d.command.CommandStack();\n    },\n\n    /**\n     * \n     * Reset the canvas and delete all model elements.<br>\n     * You can now reload another model to the canvas with a {@link draw2d.io.Reader}\n     *\n     * @since 1.1.0\n     */\n    clear: function()\n    {\n        // internal document with all figures, ports, ....\n        //\n        this.figures     = new draw2d.util.ArrayList();\n        this.lines       = new draw2d.util.ArrayList();\n        this.commonPorts = new draw2d.util.ArrayList();\n\n        this.commandStack.markSaveLocation();\n\n        return this;\n    },\n\n    calculateConnectionIntersection:function()\n    {\n    },\n\n    /**\n     * \n     * Callback for any kind of image export tools to trigger the canvas to hide all unwanted\n     * decorations. The method is called e.g. from the draw2d.io.png.Writer\n     *\n     * @since 4.0.0\n     * @template\n     */\n    hideDecoration: function()\n    {\n    },\n\n    /**\n     * \n     * callback method for any image export writer to reactivate the decoration\n     * of the canvas. e.g. grids, rulers,...\n     *\n     *\n     * @since 4.0.0\n     * @template\n     */\n    showDecoration: function()\n    {\n    },\n\n\n    /**\n     * \n     * Add a figure at the given x/y coordinate. This method fires an event.\n     *\n     * Example:\n     *\n     *     canvas.on(\"figure:add\", function(emitter, event){\n     *        alert(\"figure added:\");\n     *     });\n     *\n     *     // or more general if you want catch all figure related events\n     *     //\n     *     canvas.on(\"figure\", function(emitter, event){\n     *        // use event.figure.getCanvas()===null to determine if the\n     *        // figure part of the canvas\n     *\n     *        alert(\"figure added or removed:\");\n     *     });\n     *\n     * @param {draw2d.Figure} figure The figure to add.\n     * @param {Number/draw2d.geo.Point} [x] The new x coordinate of the figure or the x/y coordinate if it is an draw2d.geo.Point\n     * @param {Number} [y] The y position.\n     **/\n    add: function( figure , x,  y)\n    {\n        if(figure.getCanvas()===this){\n            return;\n        }\n\n        if(figure instanceof draw2d.shape.basic.Line){\n         this.lines.add(figure);\n        }\n        else{\n         this.figures.add(figure);\n        }\n        figure.canvas=this;\n\n\n        return this;\n    },\n\n    /**\n     * \n     * Returns all lines/connections in this workflow/canvas.<br>\n     *\n     * @protected\n     * @returns {draw2d.util.ArrayList}\n     **/\n    getLines: function()\n    {\n      return this.lines;\n    },\n\n    /**\n     * \n     * Returns the internal figures.<br>\n     *\n     * @protected\n     * @returns {draw2d.util.ArrayList}\n     **/\n    getFigures: function()\n    {\n      return this.figures;\n    },\n\n    /**\n     * \n     * Returns the line or connection with the given id.\n     *\n     * @param {String} id The id of the line.\n     *\n     * @returns {draw2d.shape.basic.Line}\n     **/\n    getLine: function( id)\n    {\n      var count = this.lines.getSize();\n      for(var i=0; i<count;i++)\n      {\n         var line = this.lines.get(i);\n         if(line.getId()===id){\n            return line;\n         }\n      }\n      return null;\n    },\n\n    /**\n     * \n     * Returns the figure with the given id.\n     *\n     * @param {String} id The id of the figure.\n     * @returns {draw2d.Figure}\n     **/\n    getFigure: function( id)\n    {\n      var figure = null;\n      this.figures.each(function(i,e){\n          if(e.id===id){\n              figure=e;\n              return false;\n           }\n      });\n      return figure;\n    },\n\n    /**\n     * \n     * Register a port to the canvas. This is required for other ports to find a valid drop target.\n     *\n     * @param {draw2d.Port} port The new port which has been added to the Canvas.\n     **/\n    registerPort: function(port )\n    {\n      // All elements have the same drop targets.\n      //\n      if(!this.commonPorts.contains(port)){\n          this.commonPorts.add(port);\n      }\n\n      return this;\n    },\n\n    /**\n     * \n     * Return all ports in the canvas\n     *\n     */\n    getAllPorts: function()\n    {\n        return this.commonPorts;\n    },\n\n    /**\n     * \n     * Returns the command stack for the Canvas. Required for undo/redo support.\n     *\n     * @returns {draw2d.command.CommandStack}\n     **/\n    getCommandStack: function()\n    {\n      return this.commandStack;\n    },\n\n\n    // NEW EVENT HANDLING SINCE VERSION 5.0.0\n    /**\n     * \n     * Execute all handlers and behaviors attached to the canvas for the given event type.\n     *\n     *\n     * @param {String} event the event to trigger\n     * @param {Object} [args] optional parameters for the triggered event callback\n     *\n     * @since 5.0.0\n     */\n    fireEvent: function(event, args)\n    {\n        if (typeof this.eventSubscriptions[event] === 'undefined') {\n            return;\n        }\n\n        var subscribers = this.eventSubscriptions[event];\n        for (var i=0; i<subscribers.length; i++) {\n            try{\n                subscribers[i](this, args);\n            }\n            catch(exc){\n                console.log(exc);\n                console.log(subscribers[i]);\n                debugger;\n            }\n        }\n    },\n\n    /**\n     * \n     * Attach an event handler function for one or more events to the canvas.\n     * To remove events bound with .on(), see {@link #off}.\n     *\n     * possible events are:<br>\n     * <ul>\n     *   <li>reset</li>\n     *   <li>select</li>\n     * </ul>\n     *\n     * Example:\n     *\n     *     canvas.on(\"clear\", function(emitter, event){\n     *        alert(\"canvas.clear() called.\");\n     *     });\n     *\n     *     canvas.on(\"select\", function(emitter,event){\n     *         if(event.figure!==null){\n     *             alert(\"figure selected\");\n     *         }\n     *         else{\n     *             alert(\"selection cleared\");\n     *         }\n     *     });\n     *\n     * @param {String}   event One or more space-separated event types\n     * @param {Function} callback A function to execute when the event is triggered.\n     * @param {draw2d.Canvas} callback.emitter the emitter of the event\n     * @param {Object} [callback.obj] optional event related data\n     *\n     * @since 5.0.0\n     */\n    on: function(event, callback)\n    {\n        var events = event.split(\" \");\n        for(var i=0; i<events.length; i++){\n            if (typeof this.eventSubscriptions[events[i]] === 'undefined') {\n                this.eventSubscriptions[events[i]] = [];\n            }\n            this.eventSubscriptions[events[i]].push(callback);\n        }\n        return this;\n    },\n\n    /**\n     * \n     * The .off() method removes event handlers that were attached with {@link #on}.<br>\n     * Calling .off() with no arguments removes all handlers attached to the canvas.<br>\n     * <br>\n     * If a simple event name such as \"reset\" is provided, all events of that type are removed from the canvas.\n     *\n     *\n     * @param {String|Function} eventOrFunction the event name of the registerd function\n     * @since 5.0.0\n     */\n    off: function( eventOrFunction)\n    {\n        if(typeof eventOrFunction ===\"undefined\"){\n            this.eventSubscriptions = {};\n        }\n        else if( typeof eventOrFunction === 'string'){\n            this.eventSubscriptions[eventOrFunction] = [];\n        }\n        else{\n            for(var event in this.eventSubscriptions ){\n                this.eventSubscriptions[event] =this.eventSubscriptions[event].filter( callback => { return callback !== eventOrFunction; });\n            }\n        }\n\n        return this;\n    }\n});\n","import draw2d from 'packages'\n\n/**\n * @class\n * A HybridPort can work as Input and as Output port in the same way for a {@link draw2d.Connection}.\n *\n * @author Andreas Herz\n * @extends draw2d.Port\n */\ndraw2d.HybridPort = draw2d.Port.extend(\n    /** @lends draw2d.HybridPort.prototype */\n    {\n    NAME: \"draw2d.HybridPort\",\n\n    /**\n     * Create a new HybridPort element\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function(attr, setter, getter)\n    {\n        this._super(attr, setter, getter);\n\n        // responsive for the arrangement of the port\n        // calculates the x/y coordinates in relation to the parent node\n        this.locator=new draw2d.layout.locator.InputPortLocator();\n    },\n\n    /**\n     * @param {draw2d.command.CommandType} request The requested operation to perform on the object\n     * @returns {draw2d.command.Command} The matching command to the requested operation.\n     */\n    createCommand: function(request)\n    {\n       // Connect request between two ports\n       //\n       if(request.getPolicy() === draw2d.command.CommandType.CONNECT) {\n\n         if(request.source.getParent().getId() === request.target.getParent().getId()){\n            return null;\n         }\n\n         if (request.source instanceof draw2d.InputPort) {\n            // This is the difference to the InputPort implementation of createCommand.\n            return new draw2d.command.CommandConnect(request.target, request.source, request.source);\n         }\n         else if (request.source instanceof draw2d.OutputPort) {\n            // This is the different to the OutputPort implementation of createCommand\n            return new draw2d.command.CommandConnect(request.source, request.target, request.source);\n         }\n         else if (request.source instanceof draw2d.HybridPort) {\n            // This is the different to the OutputPort implementation of createCommand\n            return new draw2d.command.CommandConnect(request.target,request.source, request.source);\n         }\n\n         return null;\n       }\n\n       // ...else call the base class\n       return this._super(request);\n    }\n});\n","import draw2d from 'packages'\n\n\n/**\n * @class\n * A InputPort is the start anchor for a {@link draw2d.Connection}.\n *\n * @author Andreas Herz\n * @extend draw2d.Port\n */\ndraw2d.InputPort = draw2d.Port.extend(\n  /** @lends draw2d.InputPort.prototype */\n  {\n\n  NAME: \"draw2d.InputPort\",\n\n  /**\n   * Create a new InputPort element\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    // responsive for the arrangement of the port\n    // calculates the x/y coordinates in relation to the parent node\n    this.locator = new draw2d.layout.locator.InputPortLocator()\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  createCommand: function (request) {\n    // Connect request between two ports\n    //\n    if (request.getPolicy() === draw2d.command.CommandType.CONNECT) {\n      return new draw2d.command.CommandConnect(request.source, request.target, request.source)\n    }\n\n    // ...else call the base class\n    return this._super(request)\n  }\n})\n","import draw2d from 'packages'\n\n\n/**\n * @class\n * A OutputPort is the start anchor for a {@link draw2d.Connection}.\n *\n * @author Andreas Herz\n * @extends draw2d.Port\n */\ndraw2d.OutputPort = draw2d.Port.extend(\n  /** @lends draw2d.OutputPort.prototype */\n    {\n\n    NAME: \"draw2d.OutputPort\",\n\n    /**\n     * Create a new OutputPort element\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function(attr, setter, getter)\n    {\n        this._super(attr, setter, getter);\n\n        // responsive for the arrangement of the port\n        // calculates the x/y coordinates in relation to the parent node\n        this.locator=new draw2d.layout.locator.OutputPortLocator();\n    },\n\n\n    /**\n     * @inheritdoc\n     */\n    createCommand: function(request)\n    {\n       // Connect request between two ports\n       //\n       if(request.getPolicy() === draw2d.command.CommandType.CONNECT){\n           // source and target are changed.\n           return new draw2d.command.CommandConnect(request.target, request.source, request.source);\n       }\n\n       // ...else call the base class\n       return this._super(request);\n    }\n});\n","import draw2d from 'packages'\nimport extend from \"./util/extend\";\n\n\n/**\n * @class\n *  A port is an object that is used to establish a connection between a node and a {@link draw2d.Connection}. The port can\n * be placed anywhere within a node ( see {@link draw2d.layout.locator.PortLocator} for details)\n *\n *\n * @author Andreas Herz\n * @param {Object} [attr] the configuration of the shape\n * @extends draw2d.shape.basic.Circle\n */\n\ndraw2d.Port = draw2d.shape.basic.Circle.extend(\n  /** @lends draw2d.Port.prototype */\n  {\n\n  NAME: \"draw2d.Port\",\n\n  DEFAULT_BORDER_COLOR: new draw2d.util.Color(\"#1B1B1B\"),\n\n  init: function (attr, setter, getter) {\n    this.locator = null\n    this.lighterBgColor = null\n    this.name = null\n\n    this._super(extend({\n        bgColor: \"#4f6870\",\n        stroke: 1,\n        diameter: 10,\n        color: \"#1B1B1B\",\n        selectable: false\n      }, attr),\n      extend({\n        semanticGroup : this.setSemanticGroup\n      },setter),\n      extend({\n        semanticGroup : this.getSemanticGroup\n      },getter))\n\n\n    // status vars for user interaction\n    //\n    this.ox = this.x\n    this.oy = this.y\n    this.coronaWidth = 5 // the corona width for the hitTest method. Useful during drag&drop of ports. Better SnapTo behavior.\n    this.corona = null // draw2d.shape.basic.Circle\n    this.useGradient = true\n\n    this.preferredConnectionDirection = null\n\n    // current attached connections\n    this.connections = new draw2d.util.ArrayList()\n\n\n    this.moveListener = (emitter, event) =>{\n      this.repaint()\n      // Falls sich der parent bewegt hat, dann muss der Port dies seinen\n      // Connections mitteilen\n      this.fireEvent(\"move\", {figure: this, dx: 0, dy: 0})\n    }\n\n    this.connectionAnchor = new draw2d.layout.anchor.ConnectionAnchor(this)\n\n    // for dynamic diagrams. A Port can have a value which is set by a connector\n    //\n    this.value = null\n    this.maxFanOut = Number.MAX_SAFE_INTEGER\n\n    // semantic group. Only ports in the same semantic group can be connected\n    //\n    this.semanticGroup = \"global\"\n\n    this.setCanSnapToHelper(false)\n\n    // uninstall all default selection policies. This is not required for Ports\n    this.editPolicy.each( (i, policy) => this.uninstallEditPolicy(policy))\n\n    this.installEditPolicy(new draw2d.policy.port.IntrusivePortsFeedbackPolicy())\n    // this.installEditPolicy(new draw2d.policy.port.ElasticStrapFeedbackPolicy());\n\n    // a port handles the selection handling always by its own regardless if\n    // the port is part of an composite, node, group or whatever.\n    this.portSelectionAdapter = () => this\n  },\n\n  getSelectionAdapter: function () {\n    return this.portSelectionAdapter\n  },\n\n  /**\n   * \n   * set the maximal possible count of connections for this port.<br>\n   * This method din't delete any connection if you reduce the number and a bunch of\n   * connection are bounded already.\n   *\n   * @param {Number} count the maximal number of connection related to this port\n   * @returns {this}\n   */\n  setMaxFanOut: function (count) {\n    this.maxFanOut = Math.max(1, count)\n    this.fireEvent(\"change:maxFanOut\", {value: this.maxFanOut})\n\n    return this\n  },\n\n  /**\n   * \n   * return the maximal possible connections (in+out) for this port.\n   *\n   * @returns {Number}\n   */\n  getMaxFanOut: function () {\n    return this.maxFanOut\n  },\n\n    /**\n     *\n     * Set the semantic group of this port. Only ports in the same semantic group\n     * can be connected.\n     *\n     * The default for all ports is \"global\"\n     *\n     * @param {String} group the semantic group of this port\n     * @returns {this}\n     */\n    setSemanticGroup: function (group) {\n      this.semanticGroup = group\n      this.fireEvent(\"change:semanticGroup\", {value: this.semanticGroup})\n\n      return this\n    },\n\n    /**\n     *\n     * Get the semantic group of this port. Only ports in the same semantic group\n     * can be connected.\n     *\n     * The default for all ports is \"global\"\n     *\n     * @returns {String}\n     */\n    getSemanticGroup: function () {\n      return this.semanticGroup\n    },\n\n  /**\n   * \n   * Set the Anchor for this object. An anchor is responsible for the endpoint calculation\n   * of an connection. just visible representation.\n   *\n   * @param {draw2d.layout.anchor.ConnectionAnchor} [anchor] the new source anchor for the connection or \"null\" to use the default anchor.\n   * @returns {this}\n   **/\n  setConnectionAnchor: function (anchor) {\n    // set some good defaults.\n    if (typeof anchor === \"undefined\" || anchor === null) {\n      anchor = new draw2d.layout.anchor.ConnectionAnchor()\n    }\n\n    this.connectionAnchor = anchor\n    this.connectionAnchor.setOwner(this)\n\n    // the anchor has changed. In this case all connections needs an change event to recalculate\n    // the anchor and the routing itself\n    this.fireEvent(\"move\", {figure: this, dx: 0, dy: 0})\n\n    return this\n  },\n\n  getConnectionAnchorLocation: function (referencePoint, inquiringConnection) {\n    return this.connectionAnchor.getLocation(referencePoint, inquiringConnection)\n  },\n\n  getConnectionAnchorReferencePoint: function (inquiringConnection) {\n    return this.connectionAnchor.getReferencePoint(inquiringConnection)\n  },\n\n\n  /**\n   * \n   * Returns the **direction** for the connection in relation to the given port and it's parent.\n   *\n   * <p>\n   * Possible values:\n   * <ul>\n   *   <li>draw2d.geo.Rectangle.DIRECTION_UP</li>\n   *   <li>draw2d.geo.Rectangle.DIRECTION_RIGHT</li>\n   *   <li>draw2d.geo.Rectangle.DIRECTION_DOWN</li>\n   *   <li>draw2d.geo.Rectangle.DIRECTION_LEFT</li>\n   * </ul>\n   * <p>\n   *\n   * @param {draw2d.Port} peerPort the counterpart port\n   *\n   * @returns {Number} the direction.\n   */\n  getConnectionDirection: function (peerPort) {\n    // return the calculated connection direction if the port didn't have set any\n    //\n    if (typeof this.preferredConnectionDirection === \"undefined\" || this.preferredConnectionDirection === null) {\n      return this.getParent().getBoundingBox().getDirection(this.getAbsolutePosition())\n    }\n\n    return this.preferredConnectionDirection\n  },\n\n\n  /**\n   * \n   * Set the **direction** for the connection in relation to the given port and it's parent.\n   *\n   * <p>\n   * Possible values:\n   * <ul>\n   *   <li>up -&gt; 0</li>\n   *   <li>right -&gt; 1</li>\n   *   <li>down -&gt; 2</li>\n   *   <li>left -&gt; 3</li>\n   *   <li>calculated -&gt; null</li>\n   * </ul>\n   * <p>\n   *\n   * @since 5.2.1\n   * @param {Number} direction the preferred connection direction.\n   * @returns {this}\n   */\n  setConnectionDirection: function (direction) {\n    this.preferredConnectionDirection = direction\n\n    // needs an change event to recalculate the route\n    this.fireEvent(\"move\", {figure: this, dx: 0, dy: 0})\n\n    return this\n  },\n\n  /**\n   * \n   * Set the locator/layouter of the port. A locator is responsive for the x/y arrangement of the\n   * port in relation to the parent node.\n   *\n   * @param {draw2d.layout.locator.Locator} locator\n   * @returns {this}\n   */\n  setLocator: function (locator) {\n    this.locator = locator\n\n    return this\n  },\n\n  /**\n   * \n   * Get the locator/layouter of the port. A locator is responsive for the x/y arrangement of the\n   * port in relation to the parent node.\n   *\n   * @since 4.2.0\n   */\n  getLocator: function () {\n    return this.locator\n  },\n\n\n  /**\n   * \n   * Set the new background color of the figure. It is possible to hands over\n   * <code>null</code> to set the background transparent.\n   *\n   * @param {draw2d.util.Color|String} color The new background color of the figure\n   * @returns {this}\n   **/\n  setBackgroundColor: function (color) {\n    this._super(color)\n    this.lighterBgColor = this.bgColor.lighter(0.3).rgba()\n\n    return this\n  },\n\n  /**\n   * \n   * Set a value for the port. This is useful for interactive/dynamic diagrams like circuits, simulator,...\n   *\n   * @param {Object} value the new value for the port\n   * @returns {this}\n   */\n  setValue: function (value) {\n\n    if(value===this.value){\n      return this\n    }\n    let old = this.value\n    this.value = value\n    if (this.getParent() !== null) {\n      this.getParent().onPortValueChanged(this)\n    }\n    this.fireEvent(\"change:value\", {value: this.value, old: old})\n\n    return this\n  },\n\n  /**\n   * \n   * Return the user defined value of the port.\n   *\n   * @returns {Object}\n   */\n  getValue: function () {\n    return this.value\n  },\n\n  /**\n   * @private\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = attributes || {}\n\n\n    // a port did have the 0/0 coordinate in the center and not in the top/left corner\n    //\n    attributes.cx = this.getAbsoluteX()\n    attributes.cy = this.getAbsoluteY()\n    attributes.rx = this.width / 2\n    attributes.ry = attributes.rx\n    attributes.cursor = \"move\"\n\n    if (this.getAlpha() < 0.9 || this.useGradient === false) {\n      attributes.fill = this.bgColor.rgba()\n    }\n    else {\n      attributes.fill = [\"90\", this.bgColor.hash(), this.lighterBgColor].join(\"-\")\n    }\n\n    this._super(attributes)\n  },\n\n\n  /**\n   * @inheritdoc\n   *\n   **/\n  onMouseEnter: function () {\n    this._oldstroke = this.getStroke()\n    this.setStroke(2)\n  },\n\n\n  /**\n   * @inheritdoc\n   *\n   **/\n  onMouseLeave: function () {\n    this.setStroke(this._oldstroke)\n  },\n\n\n  /**\n   * \n   * Returns a {@link draw2d.util.ArrayList} of {@link draw2d.Connection}s of all related connections to this port.\n   *\n   * @returns {draw2d.util.ArrayList}\n   **/\n  getConnections: function () {\n    return this.connections\n  },\n\n\n  /**\n   * @private\n   */\n  setParent: function (parent) {\n    if (this.parent !== null) {\n      this.parent.off(this.moveListener)\n    }\n\n    this._super(parent)\n\n    if (this.parent !== null) {\n      this.parent.on(\"move\", this.moveListener)\n    }\n  },\n\n\n  /**\n   * \n   * Returns the corona width of the Port. The corona width will be used during the\n   * drag&drop of a port.\n   *\n   * @returns {Number}\n   **/\n  getCoronaWidth: function () {\n    return this.coronaWidth\n  },\n\n\n  /**\n   * \n   * Set the corona width of the Port. The corona width will be used during the\n   * drag&drop of a port. You can drop a port in the corona of this port to create\n   * a connection. It is not neccessary to drop exactly on the port.\n   *\n   * @param {Number} width The new corona width of the port\n   * @returns {this}\n   **/\n  setCoronaWidth: function (width) {\n    this.coronaWidth = width\n    \n    return this\n  },\n\n  /**\n   * @inheritdoc\n   *\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean}\n   * @private\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey) {\n    // just allow the DragOperation if the port didn't have reached the max fanOut\n    // limit.\n    if (this.getConnections().getSize() >= this.maxFanOut) {\n      return false\n    }\n\n    let _this = this\n\n//        this.getShapeElement().insertAfter(this.parent.getShapeElement());\n    // don't call the super method. This creates a command and this is not necessary for a port\n    this.ox = this.x\n    this.oy = this.y\n\n    let canStartDrag = true\n\n    // notify all installed policies\n    //\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        // DragStart operation can send a veto for the dragStart\n        // @since 6.1.0\n        canStartDrag = canStartDrag && e.onDragStart(_this.canvas, _this, x, y, shiftKey, ctrlKey)\n      }\n    })\n\n    return canStartDrag\n  },\n\n  /**\n   * @inheritdoc\n   *\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   *\n   * @private\n   **/\n  onDrag: function (dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    // TODO: warum wurde diese methode überschrieben?!\n    this._super(dx, dy)\n  },\n\n\n  /**\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @private\n   **/\n  onDragEnd: function (x, y, shiftKey, ctrlKey) {\n    // Don't call the parent implementation. This will create an CommandMove object\n    // and store them o the CommandStack for the undo operation. This makes no sense for a\n    // port.\n    // draw2d.shape.basic.Rectangle.prototype.onDragEnd.call(this); DON'T call the super implementation!!!\n\n    this.setAlpha(1.0)\n\n    // 1.) Restore the old Position of the node\n    //\n    this.setPosition(this.ox, this.oy)\n  },\n\n\n  /**\n   * \n   * Called if the user drop this element onto the dropTarget\n   *\n   * @param {draw2d.Figure} dropTarget The drop target.\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @@private\n   **/\n  onDrop: function (dropTarget, x, y, shiftKey, ctrlKey) {\n  },\n\n\n  /**\n   * \n   * Callback method if a new connection has created with this port\n   *\n   *     // Alternatively you register for this event with:\n   *     port.on(\"connect\", function(emitterPort, connection){\n   *         alert(\"port connected\");\n   *     });\n   *\n   * @param {draw2d.Connection} connection The connection which has been created\n   * @since 2.5.1\n   *\n   * @template\n   **/\n  onConnect: function (connection) {\n  },\n\n  /**\n   * \n   * Callback method if a new connection has created with this port\n   *\n   *     // Alternatively you register for this event with:\n   *     port.on(\"connect\", function(emitterPort, connection){\n   *         alert(\"port disconnected\");\n   *     });\n   *\n   * @param {draw2d.Connection} connection The connection which has been deleted\n   * @since 2.5.1\n   *\n   * @template\n   **/\n  onDisconnect: function (connection) {\n  },\n\n\n  /**\n   * \n   * Return the name of this port.\n   *\n   * @returns {String}\n   **/\n  getName: function () {\n    return this.name\n  },\n\n  /**\n   * \n   * Set the name of this port. The name of the port can be referenced by the lookup of\n   * ports in the node.\n   *\n   *\n   * @param {String} name The new name of this port.\n   * @returns {this}\n   **/\n  setName: function (name) {\n    this.name = name\n\n    return this\n  },\n\n\n  /**\n   * \n   * Hit test for ports. This method respect the corona diameter of the port for the hit test.\n   * The corona width can be set with {@link draw2d.Port#setCoronaWidth}\n   *\n   * @param {Number} iX\n   * @param {Number} iY\n   * @param {Number} [corona]\n   * @returns {Boolean}\n   */\n  hitTest: function (iX, iY, corona) {\n    let x = this.getAbsoluteX() - this.coronaWidth - this.getWidth() / 2\n    let y = this.getAbsoluteY() - this.coronaWidth - this.getHeight() / 2\n    let iX2 = x + this.getWidth() + (this.coronaWidth * 2)\n    let iY2 = y + this.getHeight() + (this.coronaWidth * 2)\n\n    return (iX >= x && iX <= iX2 && iY >= y && iY <= iY2)\n  },\n\n  /**\n   * \n   * Highlight this port\n   *\n   * @param {Boolean} flag indicator if the figure should glow.\n   * @returns {this}\n   */\n  setGlow: function (flag) {\n    if (flag === true && this.corona === null) {\n      this.corona = new draw2d.Corona()\n      this.corona.setDimension(this.getWidth() + (this.getCoronaWidth() * 2), this.getWidth() + (this.getCoronaWidth() * 2))\n      this.corona.setPosition(this.getAbsoluteX() - this.getCoronaWidth() - this.getWidth() / 2, this.getAbsoluteY() - this.getCoronaWidth() - this.getHeight() / 2)\n\n      this.corona.setCanvas(this.getCanvas())\n\n      // important inital\n      this.corona.getShapeElement()\n      this.corona.repaint()\n    }\n    else if (flag === false && this.corona !== null) {\n      this.corona.setCanvas(null)\n      this.corona = null\n    }\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createCommand: function (request) {\n    // the port has its own implementation of the CommandMove\n    //\n    if (request.getPolicy() === draw2d.command.CommandType.MOVE) {\n      if (!this.isDraggable()) {\n        return null\n      }\n      return new draw2d.command.CommandMovePort(this)\n    }\n\n    return null\n  },\n\n\n  /**\n   * \n   * Called from the figure itself when any position changes happens. All listener\n   * will be informed.\n   * <br>\n   * DON'T fire this event if the Port is during a Drag&Drop operation. This can happen\n   * if we try to connect two ports\n   *\n   * @private\n   **/\n  fireEvent: function (event, args) {\n    if (this.isInDragDrop === true && event !== \"drag\") {\n      return\n    }\n\n    this._super(event, args)\n  },\n\n  /**\n   * \n   * Return an objects with all important attributes for XML or JSON serialization\n   *\n   * @return {Object} all attributes required for the persistency\n   */\n  getPersistentAttributes: function () {\n    let memento = this._super()\n\n    memento.maxFanOut = this.maxFanOut\n    memento.name = this.name\n    memento.semanticGroup = this.semanticGroup\n\n    // defined by the locator. Don't persist\n    //\n    delete memento.x\n    delete memento.y\n\n    // ports didn't have children ports. In this case we\n    // delete this attribute as well to avoid confusions.\n    //\n    delete memento.ports\n\n    return memento\n  },\n\n  /**\n   * \n   * Read all attributes from the serialized properties and transfer them into the shape.\n   *\n   * @param {Object} memento\n   * @returns {this}\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.maxFanOut !== \"undefined\") {\n      // Big bug in the past.\n      // I used Number.MAX_VALUE as maxFanOut which is 1.7976931348623157e+308\n      // parseInt creates \"1\" during the reading of the JSON - which is crap.\n      // BIG BIG BUG!!! my fault.\n      // Now check if the memento.maxFanOut is a number and take this without crappy parsing.\n      if (typeof memento.maxFanOut === \"number\") {\n        this.maxFanOut = memento.maxFanOut\n      }\n      else {\n        this.maxFanOut = Math.max(1, parseInt(memento.maxFanOut))\n      }\n    }\n\n    if (typeof memento.name !== \"undefined\") {\n      this.setName(memento.name)\n    }\n\n    if (typeof memento.semanticGroup !== \"undefined\") {\n      this.setSemanticGroup(memento.semanticGroup)\n    }\n\n    return this\n  }\n})\n\n\n/**\n * @class\n * Glow effect for ports. Just for internal use.\n *\n * @private\n * @extend draw2d.shape.basic.Circle\n */\ndraw2d.Corona = draw2d.shape.basic.Circle.extend(\n  /** @lends draw2d.shape.basic.Circle.prototype */\n  {\n\n  init: function () {\n    this._super()\n    this.setAlpha(0.3)\n    this.setBackgroundColor(new draw2d.util.Color(178, 225, 255))\n    this.setColor(new draw2d.util.Color(102, 182, 252))\n  },\n\n  /**\n   * \n   * the the opacity of the element.\n   *\n   * @param {Number} percent\n   */\n  setAlpha: function (percent) {\n    this._super(Math.min(0.3, percent))\n    this.setDeleteable(false)\n    this.setDraggable(false)\n    this.setResizeable(false)\n    this.setSelectable(false)\n\n    return this\n  }\n})\n","import draw2d from 'packages'\nimport extend from './util/extend'\n\n\n/**\n * @class\n * The Resizehandles for Figures.\n\n * <pre>\n * Possible Type:\n *\n *   1             2               3\n *    O-----------O-------------O\n *    |                         |\n *    |                         |\n *   8 O           + 9           O 4\n *    |                         |\n *    |                         |\n *    O-----------O-------------O\n *   7             6               5\n * </pre>\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Rectangle\n */\ndraw2d.ResizeHandle = draw2d.shape.basic.Rectangle.extend(\n  /** @lends draw2d.ResizeHandle.prototype */\n  {\n\n  NAME: \"draw2d.ResizeHandle\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {draw2d.Figure} the owner if the resize handle\n   * @param {Number} type the type of the ResizeHandle.\n   */\n  init: function (attr, setter, getter) {\n\n    this.zoomCallback = ()=> {\n      this.attr({\n          width:  this.origWidth*this.getCanvas().getZoom(),\n          height: this.origHeight*this.getCanvas().getZoom(),\n          radius: this.origRadius*this.getCanvas().getZoom(),\n          stroke: this.origStroke*this.getCanvas().getZoom()\n      })\n\n      // size of the ResizeHandle has changed. Force a reposition of handle\n      //\n      if(!this.blockEvent)\n        this.owner.fireEvent(\"move\",{})\n    }\n\n    this._super(\n      extend({\n        // set some good defaults\n        bgColor: \"#FDFDFD\",\n        stroke: 0.5,\n        width:10,\n        height:10,\n        minWidth:0.3,\n        minHeight:0.3,\n        color: \"#a0a0a0\",\n        radius: 1,\n        selectable:false\n        // and allow to override them\n      }, attr),\n      extend({\n        owner : this.setOwner,\n        type : this.setType\n      },setter),\n      extend({\n        owner : this.getOwner,\n        type : this.getType\n      },getter))\n\n    // required in the SelectionEditPolicy to indicate the type of figure\n    // which the user clicks\n    this.isResizeHandle = true\n\n    this.command = null\n    this.commandMove = null\n    this.commandResize = null\n    this.useGradient = true\n\n\n    this.origRadius = this.radius\n    this.origWidth = this.width\n    this.origHeight = this.height\n    this.origStroke = this.stroke\n  },\n\n\n  /**\n   *\n   * The edge of the rectangle for the snapTo mechanism.\n   *\n   * @return {draw2d.SnapToHelper} enum of the direction (NORTH, NORTH_WEST, EAST,...)\n   */\n  getSnapToDirection: function () {\n    switch (this.type) {\n      case 1:\n        return draw2d.SnapToHelper.NORTH_WEST\n      case 2:\n        return draw2d.SnapToHelper.NORTH\n      case 3:\n        return draw2d.SnapToHelper.NORTH_EAST\n      case 4:\n        return draw2d.SnapToHelper.EAST\n      case 5:\n        return draw2d.SnapToHelper.SOUTH_EAST\n      case 6:\n        return draw2d.SnapToHelper.SOUTH\n      case 7:\n        return draw2d.SnapToHelper.SOUTH_WEST\n      case 8:\n        return draw2d.SnapToHelper.WEST\n      case 9:\n        return draw2d.SnapToHelper.NSEW\n      default:\n        return draw2d.SnapToHelper.EAST\n    }\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createShapeElement: function () {\n    this.shape = this._super()\n\n    this.shape.node.setAttribute(\"type\", this.type)\n    this.updateCursor(this.shape)\n\n    return this.shape\n  },\n\n\n  /**\n   *\n   * Returns the current used SVG as string\n   *\n   * @returns {String}\n   */\n  getOwner: function()\n  {\n    return this.owner;\n  },\n\n  setOwner: function( owner){\n    this.owner = owner\n\n    return this\n  },\n\n\n  /**\n   *\n   * Returns the current used SVG as string\n   *\n   * @returns {String}\n   */\n  getType: function()\n  {\n    return this.type;\n  },\n\n  setType: function( type){\n    this.type = type\n\n    return this\n  },\n\n  /**\n   *\n   * calculate and set the cursor of the reize handle\n   * @private\n   */\n  updateCursor: function (shape) {\n    if (shape === null) {\n      return this\n    }\n\n    if (this.isDraggable() === false) {\n      shape.attr({\"cursor\": \"default\"})\n      return this\n    }\n\n    switch (this.type) {\n      case 1:\n        shape.attr({\"cursor\": \"nw-resize\"})\n        break\n      case 2:\n        shape.attr({\"cursor\": \"n-resize\"})\n        break\n      case 3:\n        shape.attr({\"cursor\": \"ne-resize\"})\n        break\n      case 4:\n        shape.attr({\"cursor\": \"e-resize\"})\n        break\n      case 5:\n        shape.attr({\"cursor\": \"se-resize\"})\n        break\n      case 6:\n        shape.attr({\"cursor\": \"s-resize\"})\n        break\n      case 7:\n        shape.attr({\"cursor\": \"sw-resize\"})\n        break\n      case 8:\n        shape.attr({\"cursor\": \"w-resize\"})\n        break\n      default:\n        shape.attr({\"cursor\": \"move\"})\n        break\n    }\n    return this\n  },\n\n  /**\n   *\n   * Adjust the draggable flag of the resize handle and update the cursor of the shape in relation\n   * to the type of resize handle. north, south,west,..\n   *\n   * @param flag\n   * @returns {this}\n   */\n  setDraggable: function (flag) {\n    this._super(flag)\n    this.updateCursor(this.shape)\n\n    return this\n  },\n\n  /**\n   *\n   * Will be called if the drag and drop action beginns. You can return [false] if you\n   * want avoid that the figure can be move.\n   *\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean} true whenever the drag drop operation is allowed.\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey) {\n    // This happens if the selected figure has set the \"nonResizeable\" flag\n    // In this case the ResizeHandle can't be dragged. => no resize\n    //\n    if (!this.isDraggable()) {\n      return false\n    }\n\n    this.ox = this.getAbsoluteX()\n    this.oy = this.getAbsoluteY()\n\n    this.commandMove = this.owner.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.MOVE))\n    this.commandResize = this.owner.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.RESIZE))\n\n    return true\n  },\n\n\n  /**\n   *\n   * Called by the framework if the figure is moved by user interaction.\n   *\n   * @param {Number} dx the move x offset\n   * @param {Number} dy the move y offset\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   *\n   */\n  onDrag: function (dx, dy, dx2, dy2) {\n    if (this.isDraggable() === false) {\n      return\n    }\n\n    let oldX = this.getAbsoluteX()\n    let oldY = this.getAbsoluteY()\n\n    // call the super.drag method with all snapTo### handler and adjustments\n    this._super(dx, dy, dx2, dy2)\n\n    let diffX = this.getAbsoluteX() - oldX\n    let diffY = this.getAbsoluteY() - oldY\n\n    let obj = this.owner\n    let objPosX = obj.getAbsoluteX()\n    let objPosY = obj.getAbsoluteY()\n    let objWidth = obj.getWidth()\n    let objHeight = obj.getHeight()\n\n    let newX = null\n    let newY = null\n    let corrPos = null\n    switch (this.type) {\n      case 1:\n        obj.setDimension(objWidth - diffX, objHeight - diffY)\n        newX = objPosX + (objWidth - obj.getWidth())\n        newY = objPosY + (objHeight - obj.getHeight())\n        obj.setPosition(newX, newY)\n        break\n      case 2:\n        obj.setDimension(objWidth, objHeight - diffY)\n        newX = objPosX\n        newY = objPosY + (objHeight - obj.getHeight())\n        obj.setPosition(newX, newY)\n        break\n      case 3:\n        obj.setDimension(objWidth + diffX, objHeight - diffY)\n        newX = objPosX\n        newY = objPosY + (objHeight - obj.getHeight())\n        obj.setPosition(newX, newY)\n        break\n      case 4:\n        obj.setDimension(objWidth + diffX, objHeight)\n        break\n      case 5:\n        obj.setDimension(objWidth + diffX, objHeight + diffY)\n        break\n      case 6:\n        obj.setDimension(objWidth, objHeight + diffY)\n        break\n      case 7:\n        obj.setDimension(objWidth - diffX, objHeight + diffY)\n        newX = objPosX + (objWidth - obj.getWidth())\n        newY = objPosY\n        obj.setPosition(newX, newY)\n        break\n      case 8:\n        obj.setDimension(objWidth - diffX, objHeight)\n        newX = objPosX + (objWidth - obj.getWidth())\n        newY = objPosY\n        obj.setPosition(newX, newY)\n        break\n    }\n\n    if (newX !== null) {\n      // may the setPosition has changed regarding any constraint or edit policies. In this case\n      // we must adjust the dimension with the related correction\n      //\n      corrPos = obj.getPosition()\n      if (corrPos.x !== newX || corrPos.y !== newY) {\n        obj.setDimension(obj.getWidth() - (corrPos.x - newX), obj.getHeight() - (corrPos.y - newY))\n      }\n    }\n  },\n\n  /**\n   *\n   * Will be called after a drag and drop action.<br>\n   *\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @private\n   **/\n  onDragEnd: function (x, y, shiftKey, ctrlKey) {\n    if (!this.isDraggable()) {\n      return\n    }\n\n    // An non draggable resizeHandle doesn't create a move/resize command.\n    // This happens if the selected figure has set the \"nonResizeable\" flag.\n    //\n    if (this.commandMove !== null) {\n      this.commandMove.setPosition(this.owner.getX(), this.owner.getY())\n      this.canvas.getCommandStack().execute(this.commandMove)\n      this.commandMove = null\n    }\n\n    if (this.commandResize !== null) {\n      this.commandResize.setDimension(this.owner.getWidth(), this.owner.getHeight())\n      this.canvas.getCommandStack().execute(this.commandResize)\n      this.commandResize = null\n    }\n  },\n\n  /**\n   * Set the position of the object.<br>\n   * The ResizeHandle overrides the Figure.setPosition method. The base\n   * class updates the resize handles during the update of the Dimension/Position. This\n   * is not neccessary for the ResizeHandles. Performance issue.\n   *\n   * @param {Number|draw2d.geo.Point} x The new x coordinate of the figure\n   * @param {Number} y The new y coordinate of the figure\n   **/\n  setPosition: function (x, y) {\n    // don't call base implementation. Base implementation will show\n    // ResizeHandles...but I'm the ResizeHandle\n    if (x instanceof draw2d.geo.Point) {\n      this.x = x.x\n      this.y = x.y\n    }\n    else {\n      this.x = x\n      this.y = y\n    }\n\n    if (this.repaintBlocked === true || this.shape === null) {\n      return this\n    }\n\n    // performance improvement by setting the coordinates direct.\n    this.shape.attr({x: this.x, y: this.y})\n\n    this.applyTransformation()\n  },\n\n  /**\n   *\n   * Set the new dimension of the the ResizeHandle. If you didn't pass any width/height the best default for the\n   * platform will be used.\n   *\n   * Additional the \"snapTo\" anchor is re-calculated in relation to the type of ResizeHandle\n   *\n   * @param {Number} [width] new width of the resize handle\n   * @param {Number} [height] new width of the resize handle\n   */\n  setDimension: function (width, height) {\n\n    if (typeof height !== \"undefined\") {\n      this._super(width, height)\n    }\n    else {\n      if (draw2d.isTouchDevice) {\n        this._super(15, 15)\n      }\n      else {\n        this._super(8, 8)\n      }\n    }\n\n\n    let offset = this.getWidth()\n    let offset2 = offset / 2\n\n    switch (this.type) {\n      case 1:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(offset, offset))\n        break\n      case 2:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(offset2, offset))\n        break\n      case 3:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(0, offset))\n        break\n      case 4:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(0, offset2))\n        break\n      case 5:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(0, 0))\n        break\n      case 6:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(offset2, 0))\n        break\n      case 7:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(offset, 0))\n        break\n      case 8:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(offset, offset2))\n        break\n      case 9:\n        this.setSnapToGridAnchor(new draw2d.geo.Point(offset2, offset2))\n        break\n    }\n\n    return this\n  },\n\n  /**\n   *\n   * Show the ResizeHandle and add it to the canvas.<br>\n   * Additional bring it in to the front of other figures if we didn't use\n   * an overlayCanvas.\n   *\n   * If the ResizeHandle is place inside an overlayCanvas it is automatically on top.\n   *\n   * @param {draw2d.Canvas} canvas the canvas to use\n   **/\n  show: function (canvas) {\n    // don't call the parent function. The parent functions delete this object\n    // and a resize handle can't be deleted.\n    this.setCanvas(canvas)\n\n    this.canvas.resizeHandles.add(this)\n    this.shape.insertAfter(this.owner.getShapeElement())\n\n    try{\n      this.blockEvent=true\n      this.zoomCallback()\n    }\n    finally{\n      this.blockEvent=false\n    }\n    this.repaint()\n\n    return this\n  },\n\n  /**\n   *\n   * Hide the resize handle and remove it from the canvas.\n   *\n   **/\n  hide: function () {\n    // don't call the parent function. The parent functions delete this object\n    // and a resize handle shouldn't be deleted.\n    if (this.shape === null) {\n      return\n    }\n\n    this.canvas.resizeHandles.remove(this)\n    this.setCanvas(null)\n\n    return this\n  },\n\n  setCanvas: function (canvas) {\n\n    if(this.canvas!==null){\n      this.canvas.off(this.zoomCallback);\n    }\n\n    this._super(canvas)\n\n    if(this.canvas!==null){\n      this.canvas.on(\"zoom\", this.zoomCallback);\n    }\n  },\n\n  /**\n   *\n   * Set the new background color of the figure. It is possible to hands over\n   * <code>null</code> to set the background transparent.\n   *\n   * @param {draw2d.util.Color} color The new background color of the figure\n   **/\n  setBackgroundColor: function (color) {\n    color = new draw2d.util.Color(color)\n\n    this.bgGradient = \"90-\" + color.darker(0.2).hash() + \"-\" + color.hash()\n    this._super(color)\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = attributes || {}\n\n    if (this.bgColor.hash() === \"none\") {\n      attributes.fill = \"none\"\n    }\n    else if (this.getAlpha() < 0.9 || this.useGradient === false) {\n      attributes.fill = this.bgColor.rgba()\n    }\n    else {\n      attributes.fill = this.bgGradient\n    }\n\n\n    this._super(attributes)\n  },\n\n  /**\n   *\n   * return true if the element can be used in combination with the\n   * SnapToHelper feature.\n   *\n   * @returns {Boolean}\n   **/\n  supportsSnapToHelper: function () {\n    return true\n  },\n\n  /**\n   *\n   * Override this method and redirect them to the cavas. A ResizeHandle didn't support\n   * Keyboard interaction at the moment.\n   *\n   * @param {Number} keyCode the id of the pressed key\n   * @param {Boolean} ctrl true if the user has pressed the CTRL/STRG key as well.\n   **/\n  onKeyDown: function (keyCode, ctrl) {\n    // don't call the parent function. The parent functions delete this object\n    // and a resize handle can't be deleted.\n    this.canvas.onKeyDown(keyCode, ctrl)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  fireEvent: function (event, args) {\n    // A resizeHandle doesn't fire this event.\n    // Normally this set the document dirty. This is not necessary for a ResizeHandle.\n  }\n})\n\n","\nimport draw2d from 'packages'\nimport extend from 'util/extend'\n\n/**\n * @class\n * Abstract class which can handle plain SVG content.\n *\n * @author Andreas Herz\n * @extends draw2d.SetFigure\n */\ndraw2d.SVGFigure = draw2d.SetFigure.extend(\n    /** @lends draw2d.SVGFigure.prototype */\n    {\n    \n    NAME: \"draw2d.SVGFigure\",\n\n    /**\n     * Creates a new figure element which are not assigned to any canvas.\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function(attr, setter, getter)\n    {\n        this.svg = null;\n\n        this._super(\n            extend({},attr),\n            extend({\n                svg : this.setSVG\n            },setter),\n            extend({\n                svg : this.getSVG\n            },getter)\n\n        );\n    },\n\n    /**\n     * @inheritdoc\n     */\n    createSet: function()\n    {\n        // legacy behaviour. Legacy code of Draw2D didn't have the \"svg\" attribute.\n        // in this case we must call the overridden method \"getSVG\" to retrieve the SVG from inherit\n        // the inherit class.\n        //\n        if(this.svg === null) {\n            this.svg = this.getSVG();\n        }\n\n\n\t\treturn this.importSVG(this.canvas, this.svg);\n\t},\n\n    /**\n     * \n     * Returns the current used SVG as string\n     * @returns {String}\n     */\n    getSVG: function()\n    {\n        return this.svg;\n    },\n\n    /**\n     * \n     * Set the SVG of this shape\n     *\n     * @param {String} svg The new SVG to render as String\n     * @param {Number} [duration] the optional duration for the change of the SVG of the figure\n     *\n     * @returns {draw2d.SVGFigure}\n     */\n    setSVG: function(svg, duration)\n    {\n        this.svg = svg;\n\n        // SVG has changed. Update the rendering\n        //\n        if(this.canvas !==null && this.svgNodes !==null){\n            let newSVGNodes = this.createSet();\n            if(!isNaN(parseFloat(duration))) {\n                newSVGNodes.hide();\n                newSVGNodes.insertAfter(this.svgNodes);\n                let oldSVG = this.svgNodes;\n                this.svgNodes = newSVGNodes;\n                this.applyTransformation();\n                oldSVG.forEach(function ( shape) {\n                    $(shape.node).fadeOut(duration, function () {\n                        shape.remove();\n                    });\n                });\n                newSVGNodes.forEach(function (shape) {\n                    $(shape.node).fadeIn(duration);\n                });\n            }\n            else {\n                newSVGNodes.insertAfter(this.svgNodes);\n                this.svgNodes.remove();\n                this.svgNodes = newSVGNodes;\n                this.applyTransformation();\n            }\n        }\n\n        return this;\n    },\n\n\n    /**\n     * \n     * Helper method to transform the SVG string into a raphaelJS set.\n     *\n     * @private\n     */\n    importSVG : function (canvas, rawSVG)\n    {\n\n      let set = canvas.paper.set();\n\n      try {\n        if (typeof rawSVG === 'undefined'){\n          throw 'No data was provided.';\n        }\n\n        // Override the dimension from the JSON if the SVG contains any\n        //\n        let svgDOM= $(rawSVG);\n\n        // set the dimension of the element if the JSON import didn't provide\n        // a dimension already\n        //\n        if(typeof this._dimensionReadFromJSON ===\"undefined\"){\n            if(svgDOM.attr(\"width\") && svgDOM.attr(\"height\")){\n                this.setDimension(parseFloat(svgDOM.attr(\"width\")), parseFloat(svgDOM.attr(\"height\")));\n            }\n            delete this._dimensionReadFromJSON;\n        }\n\n        let findStyle = new RegExp('([a-z0-9\\-]+) ?: ?([^ ;]+)[ ;]?','gi');\n\n        svgDOM.children().each(function(i,element){\n          //element = $(element);\n          let shape=null;\n          let style=null;\n          let attr = { };\n          let node = element.tagName;\n\n          // remove the namespace of the node if existing. This can happen in IE8\n          //\n          let index = node.indexOf(\":\");\n          if(index != -1)\n              node = node.substr(index+1);\n\n          // map some element to Raphael specifix attributes or ignore some unknown attributes\n          //\n          $(element.attributes).each(function() {\n            switch(this.nodeName) {\n              case 'stroke-dasharray':\n                attr[this.nodeName] = '- ';\n              break;\n              case 'style':\n                style = this.nodeValue;\n              break;\n              case 'id':\n              case 'xml:space':\n                  // just to ignore\n                  break;\n              default:\n                if(this.value){\n                    attr[this.nodeName] = this.value;\n                }\n                else{\n                    // @deprecated\n                    attr[this.nodeName] = this.nodeValue;\n                }\n              break;\n            }\n          });\n\n\n          if ( style !== null){\n            while(findStyle.exec(style)){\n              attr[RegExp.$1] = RegExp.$2;\n            }\n          }\n\n          // set some good defaults if the element didn't provide a stroke-width but has a \"stroke\" attribute\n          //\n          if (typeof attr['stroke-width'] === 'undefined'){\n              attr['stroke-width'] = (typeof attr.stroke === 'undefined' ? 0 : 1.2);\n          }\n\n          switch(node) {\n            case 'rect':\n              shape = canvas.paper.rect();\n\n              // transfer rx-SVG attribute to the \"r\" attribute of raphael\n              if(typeof attr[\"rx\"]!==\"undefined\") {\n                  attr.r = parseInt(attr.rx);\n                  delete attr.rx;\n              }\n              break;\n            case 'circle':\n              shape = canvas.paper.circle();\n              break;\n            case 'ellipse':\n              shape = canvas.paper.ellipse();\n              break;\n            case 'path':\n              attr.fill =\"none\";\n              shape = canvas.paper.path(attr.d);\n              break;\n            case 'line':\n              attr.d= \"M \"+attr.x1+\" \"+attr.y1+\"L\"+attr.x2+\" \"+attr.y2;\n              attr.fill =\"none\";\n              shape = canvas.paper.path(attr.d);\n             break;\n            case 'polyline':\n              let path = attr.points;\n              attr.d = \"M \"+path.replace(\" \",\" L\");\n              shape = canvas.paper.path(attr.d);\n              break;\n            case 'polygon':\n              shape = canvas.paper.polygon(attr.points);\n              break;\n            case 'image':\n              shape = canvas.paper.image();\n              break;\n            case 'tspan':\n            case 'text':\n                if(element.childNodes.length>0){\n                    let child = element.firstChild;\n                    do {\n                       switch(child.nodeType){\n                            case 2://ATTRIBUTE_NODE\n                            case 4://CDATA_SECTION_NODE\n                            case 5://ENTITY_REFERENCE_NODE\n                            case 6://ENTITY_NODE\n                            case 7://PROCESSING_INSTRUCTION_NODE\n                            case 8://COMMENT_NODE\n                            case 9://DOCUMENT_NODE\n                            case 10://DOCUMENT_TYPE_NODE\n                            case 11://DOCUMENT_FRAGMENT_NODE\n                            case 12://NOTATION_NODE\n                                return;\n                            case 3://TEXT_NODE\n                            \t // redirect to the parent node if we found a simple TEXT without any attributes\n                            \tchild = element;\n                            \tbreak;\n                            case 1://ELEMENT_NODE\n                        }\n                        let subShape = canvas.paper.text(0,0,$(child).text());\n                        let subAttr ={\"x\":parseFloat(child.attributes.x.value), \"y\":parseFloat(child.attributes.y.value)};\n                        subAttr[\"text-anchor\"] = \"start\";\n                        if(typeof child.attributes[\"text-anchor\"]!==\"undefined\"){\n                            subAttr[\"text-anchor\"] = child.attributes[\"text-anchor\"].value;\n                        }\n                        else if(typeof attr[\"text-anchor\"]!==\"undefined\"){\n                            subAttr[\"text-anchor\"] = attr[\"text-anchor\"];\n                        }\n\n                        if(typeof child.attributes[\"font-size\"]!==\"undefined\"){\n                            subAttr[\"font-size\"] = parseInt(child.attributes[\"font-size\"].value);\n                        }\n                        else if(typeof attr[\"font-size\"]!==\"undefined\"){\n                            // inherit the font size from the parent node\n                            subAttr[\"font-size\"] = parseInt(attr[\"font-size\"]);\n                        }\n\n                        if(typeof child.attributes[\"font-family\"]!==\"undefined\"){\n                            subAttr[\"font-family\"] = child.attributes[\"font-family\"].value;\n                        }\n                        else if(typeof attr[\"font-family\"]!==\"undefined\"){\n                            // inherit the font size from the parent node\n                            subAttr[\"font-family\"] = attr[\"font-family\"];\n                        }\n\n                        subAttr[\"fill\"] = \"#000000\";\n                        if(typeof child.attributes[\"fill\"]!==\"undefined\"){\n                            subAttr[\"fill\"] = child.attributes[\"fill\"].value;\n                        }\n                        else if(typeof attr[\"fill\"]!==\"undefined\"){\n                            // inherit the font size from the parent node\n                            subAttr[\"fill\"] = attr[\"fill\"];\n                        }\n\n                        subAttr.y= subAttr.y+subShape.getBBox().height/2;\n\n                        subShape.attr(subAttr);\n                        set.push(subShape);\n                        child = child.nextSibling;\n\n                    }while(child && child.nodeType === 3); // 3= TEXT_NODE\n                }\n                else{\n                  shape = canvas.paper.text(0,0,$(element).html());\n                  if(typeof attr[\"fill\"]===\"undefined\")\n                      attr[\"fill\"] = \"#000000\";\n                  if(typeof attr[\"text-anchor\"]===\"undefined\")\n                      attr[\"text-anchor\"] = \"start\";\n                  if(typeof attr[\"font-size\"]!==\"undefined\")\n                      attr[\"font-size\"] = parseInt(attr[\"font-size\"]);\n                  if(typeof attr[\"font-family\"]!==\"undefined\")\n                      attr[\"font-family\"] = parseInt(attr[\"font-family\"]);\n                  attr.y= parseFloat(attr.y)+shape.getBBox().height/2;\n                }\n              break;\n          }\n          if(shape!==null){\n              shape.attr(attr);\n              set.push(shape);\n          }\n        });\n      } catch (error) {\n        alert('The SVG data you entered was invalid! (' + error + ')');\n      }\n\n\n      return set;\n    },\n\n    /**\n     * \n     * Read all attributes from the serialized properties and transfer them into the shape.\n     *\n     * @param {Object} memento\n     */\n    setPersistentAttributes: function(memento)\n    {\n        this._super(memento);\n\n        // keep a temp flag to indicate the we have read the dimension of the\n        // element from the JSON struct. In this case we didn't care about the dimension\n        // from the SVG data\n        //\n        if(typeof memento.width !== \"undefined\"){\n            this._dimensionReadFromJSON=true;\n        }\n        else if(typeof memento.height !== \"undefined\"){\n            this._dimensionReadFromJSON=true;\n        }\n\n        return this;\n    }\n\n\n});\n","import draw2d from 'packages'\n\n\n/**\n * @class\n *\n * Represents the current selection in the canvas. The selection element is a pure passive element which\n * manage/store the selection.\n *\n *\n * @author Andreas Herz\n */\ndraw2d.Selection = Class.extend(\n  /** @lends draw2d.Selection.prototype */\n  {\n\n  NAME: \"draw2d.Selection\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   */\n  init: function () {\n    this.primary = null;\n    this.all = new draw2d.util.ArrayList();\n  },\n\n  /**\n   * \n   * Reset the current selection\n   *\n   */\n  clear: function () {\n    this.primary = null;\n    this.all = new draw2d.util.ArrayList();\n\n    return this;\n  },\n\n  /**\n   * \n   * Return the primary selection. This can only one figure at once.\n   *\n   * @returns {draw2d.Figure} the primary selected figure\n   */\n  getPrimary: function () {\n    return this.primary;\n  },\n\n  /**\n   * \n   * Set the primary selection.\n   *\n   * @param {draw2d.Figure} figure The new primary selection\n   */\n  setPrimary: function (figure) {\n    this.primary = figure;\n    this.add(figure);\n\n    return this;\n  },\n\n  /**\n   * \n   * Remove the given figure from the selection (primary,all)\n   *\n   * @param {draw2d.Figure} figure\n   */\n  remove: function (figure) {\n    this.all.remove(figure);\n    if (this.primary === figure) {\n      this.primary = null;\n    }\n\n    return this;\n  },\n\n  /**\n   * \n   * Add a figure to the selection. No events are fired or update the selection handle. This method just\n   * add the figure to the internal management data structure.\n   *\n   * @param figure\n   * @private\n   */\n  add: function (figure) {\n    if (figure !== null && !this.all.contains(figure)) {\n      this.all.add(figure);\n    }\n\n    return this;\n  },\n\n\n  /**\n   * \n   * return true if the given figure part of the selection.\n   *\n   * @param {draw2d.Figure} figure The figure to check\n   * @param {Boolean} [checkDescendant] Check if the figure provided by the argument is a descendant of the selection whether it is a direct child or nested more deeply.\n   *\n   * @since 2.2.0\n   * @returns {Boolean}\n   */\n  contains: function (figure, checkDescendant) {\n    if (checkDescendant) {\n      for (let i = 0; i < this.all.getSize(); i++) {\n        let figureToCheck = this.all.get(i);\n        if (figureToCheck === figure || figureToCheck.contains(figure)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    return this.all.contains(figure);\n  },\n\n  /**\n   * \n   * Return the size of the selection\n   *\n   * @since 4.8.0\n   */\n  getSize: function () {\n    return this.all.getSize();\n  },\n\n  /**\n   * \n   * Return the complete selection - including the primary selection.\n   *\n   * @param {Boolean} [expand] expand all StrongComposite and WeakComposite to get all figures. Didn't expand any SetFigures or LayoutFigures\n   * @returns {draw2d.util.ArrayList}\n   *\n   */\n  getAll: function (expand) {\n    if (expand === true) {\n      let result = new draw2d.util.ArrayList();\n      let addRecursive = (figures) => {\n        result.addAll(figures, true);\n        figures.each((index, figure) => {\n          if (figure instanceof draw2d.shape.composite.StrongComposite) {\n            addRecursive(figure.getAssignedFigures());\n          }\n        });\n      };\n      addRecursive(this.all);\n\n      return result;\n    }\n\n    return this.all.clone();\n  },\n\n  /**\n   * \n   * Iterates over the current selection with <b>func</b> as callback handler.\n   *\n   * @param {Function} func the callback function to call for each element\n   * @param {Number} func.i index of the element in iteration\n   * @param {Object} func.value value of the element in iteration.\n   * @param {Boolean} [reverse] optional parameter. Iterate the collection reverse if it set to <b>true</b>\n   */\n  each: function (func, reverse) {\n    this.all.each(func, reverse);\n\n    return this;\n  }\n});\n","import draw2d from 'packages'\nimport extend from 'util/extend'\n\n\n/**\n * @class\n *\n * A SetFigure is a composition of different SVG elements.\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Rectangle\n */\ndraw2d.SetFigure = draw2d.shape.basic.Rectangle.extend(\n  /** @lends draw2d.SetFigure.prototype */\n  {\n\n  NAME: \"draw2d.SetFigure\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    // collection of SVG DOM nodes\n    this.svgNodes = null\n\n    this.originalWidth = null\n    this.originalHeight = null\n\n    this.scaleX = 1\n    this.scaleY = 1\n\n    this.strokeScale = true // scale the stroke width of the children nodes if the parent resize\n\n    this._super(extend({stroke: 0, bgColor: null}, attr), setter, getter)\n  },\n\n  /**\n   * \n   * Set/Reset the canvas for the element.\n   *\n   * @param {draw2d.Canvas} canvas the canvas to use\n   */\n  setCanvas: function (canvas) {\n    // remove the shape if we reset the canvas and the element\n    // was already drawn\n    if (canvas === null && this.svgNodes !== null) {\n      this.svgNodes.remove()\n      this.svgNodes = null\n    }\n\n    this._super(canvas)\n  },\n\n\n  /**\n   * \n   * Set the css class if the node.\n   *\n   * @param {String} cssClass the new css class name of the node\n   * @since 2.9.0\n   */\n  setCssClass: function (cssClass) {\n    this._super(cssClass)\n\n    if (this.svgNodes === null) {\n      return this\n    }\n\n    if (this.cssClass === null) {\n      this.svgNodes.forEach(function (e) {\n        e.node.removeAttribute(\"class\")\n      })\n    }\n    else {\n      this.svgNodes.forEach(function (e) {\n        e.node.setAttribute(\"class\", cssClass)\n      })\n    }\n\n    return this\n  },\n\n\n  /**\n   * \n   * propagate all attributes like color, stroke,... to the shape element and\n   * repaint them.\n   *\n   * @protected\n   **/\n  repaint: function (attributes) {\n    // repaint can be blocked during deserialization and if the shape\n    // not part of any canvas.\n    //\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    if (this.originalWidth !== null) {\n      this.scaleX = this.width / this.originalWidth\n      this.scaleY = this.height / this.originalHeight\n    }\n\n    attributes = attributes || {}\n\n    this.applyAlpha()\n\n    this._super(attributes)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setVisible: function (flag, duration) {\n    this._super(flag, duration)\n\n    if (this.svgNodes !== null) {\n      if (duration) {\n        if (this.visible === true) {\n          this.svgNodes.forEach( (shape) =>{\n            $(shape.node).fadeIn(duration, ()=>shape.show())\n          })\n        }\n        else {\n          this.svgNodes.forEach( (shape) =>{\n            $(shape.node).fadeOut(duration, () => shape.hide())\n          })\n        }\n      }\n      else {\n        if (this.visible === true) {\n          this.svgNodes.show()\n        }\n        else {\n          this.svgNodes.hide()\n        }\n      }\n    }\n  },\n\n  /**\n   * \n   * Apply the opacity to all child set elements. Override this if you want to avoid opacity changes.\n   * @private\n   *\n   */\n  applyAlpha: function () {\n    this.svgNodes.attr({opacity: this.alpha})\n  },\n\n  /**\n   * @private\n   */\n  applyTransformation: function () {\n    let s =\n      \"S\" + this.scaleX + \",\" + this.scaleY + \",0,0 \" +\n      \"R\" + this.rotationAngle + \",\" + ((this.getWidth() / 2) | 0) + \",\" + ((this.getHeight() / 2) | 0) +\n      \"T\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY() +\n      \"\"\n    this.svgNodes.transform(s)\n    if (this.rotationAngle === 90 || this.rotationAngle === 270) {\n      let before = this.svgNodes.getBBox(true)\n      let ratio = before.height / before.width\n      let reverseRatio = before.width / before.height\n      let rs = \"...S\" + ratio + \",\" + reverseRatio + \",\" + (this.getAbsoluteX() + this.getWidth() / 2) + \",\" + (this.getAbsoluteY() + this.getHeight() / 2)\n      this.svgNodes.transform(rs)\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Moves the element so it is the closest to the viewer’s eyes, on top of other elements. Additional\n   * the internal model changed as well.\n   *\n   * Optional: Inserts current object in front of the given one.\n   *\n   * @param {draw2d.Figure} [figure] move current object in front of the given one.\n   * @since 3.0.0\n   */\n  toFront: function (figure) {\n    ////////////////////////////////////////////////////////////////////\n    // NOTE: the code has a complete different order of draw2d.Figure.\n    //       we must respect the svgNodes here\n    ////////////////////////////////////////////////////////////////////\n\n    // ensure that the z-oder is still correct if the figure is assigned\n    // to a StrongComposite\n    //\n    if (this.composite instanceof draw2d.shape.composite.StrongComposite && (typeof figure !== \"undefined\")) {\n      let indexFigure = figure.getZOrder()\n      let indexComposite = this.composite.getZOrder()\n      if (indexFigure < indexComposite) {\n        figure = this.composite\n      }\n    }\n\n    if (typeof figure === \"undefined\") {\n      // bring the outer frame in front...\n      this.getShapeElement().toFront()\n\n      // and all inner children\n      //\n      if (this.svgNodes !== null) {\n        this.svgNodes.toFront()\n      }\n\n      if (this.canvas !== null) {\n        let figures = this.canvas.getFigures()\n        let lines = this.canvas.getLines()\n        if (figures.remove(this) !== null) {\n          figures.add(this)\n        } else if (lines.remove(this) !== null) {\n          lines.add(this)\n        }\n      }\n    }\n    else {\n      // Bring the SVG shapes between the \"figure\" and the container of this shape\n      //\n      if (this.svgNodes !== null) {\n        this.svgNodes.insertAfter(figure.getTopLevelShapeElement())\n      }\n      this.getShapeElement().insertAfter(figure.getTopLevelShapeElement())\n\n      if (this.canvas !== null) {\n        let figures = this.canvas.getFigures()\n        let lines = this.canvas.getLines()\n        if (figures.remove(this) !== null) {\n          let index = figures.indexOf(figure)\n          figures.insertElementAt(this, index + 1)\n        } else if (lines.remove(this) !== null) {\n          lines.add(this)\n        }\n      }\n    }\n\n\n    // bring all children in front of the parent\n    //\n    this.children.each(function (i, child) {\n      child.figure.toFront(figure)\n    })\n\n    // the ports are always on top\n    //\n    let _this = this\n    this.getPorts().each(function (i, port) {\n      port.getConnections().each(function (i, connection) {\n        connection.toFront(figure)\n      })\n      // a port should always be in front of the shape doesn't matter what the\n      // \"figure\" parameter says.\n      //\n      port.toFront(_this)\n    })\n\n    // and last but not lease the ResizeHandles if any present\n    //\n    this.selectionHandles.each(function (i, handle) {\n      handle.toFront()\n    })\n\n    return this\n  },\n\n  /**\n   * \n   * Moves the element to the background. Additional\n   * the internal model changed as well.\n   *\n   * Optional: Inserts current object in front of the given one.\n   *\n   * @param {draw2d.Figure} [figure] move current object in front of the given one.\n   * @since 4.7.2\n   */\n  toBack: function (figure) {\n    // it is not allowed that a figure is behind the assigned composite\n    //\n    if (this.composite instanceof draw2d.shape.composite.StrongComposite) {\n      this.toFront(this.composite)\n      return\n    }\n\n    // sort the JSON Doc\n    //\n    if (this.canvas !== null) {\n      let figures = this.canvas.getFigures()\n      let lines = this.canvas.getLines()\n      if (figures.remove(this) !== null) {\n        figures.insertElementAt(this, 0)\n      }\n      else if (lines.remove(this) !== null) {\n        lines.insertElementAt(this, 0)\n      }\n    }\n\n    // bring all children figures in front of the parent\n    // run reverse to the collection to care about the z-order of the children)\n    this.children.each(function (i, child) {\n      child.figure.toBack(figure)\n    }, true)\n\n    if (this.svgNodes !== null) {\n      if (typeof figure !== \"undefined\") {\n        this.svgNodes.insertBefore(figure.getShapeElement())\n      }\n      else {\n        this.svgNodes.toBack()\n      }\n    }\n\n\n    if (this.canvas !== null) {\n      if (typeof figure !== \"undefined\") {\n        this.getShapeElement().insertBefore(figure.getShapeElement())\n      }\n      else {\n        this.getShapeElement().toBack()\n      }\n    }\n\n    // and last but not least - the ports are always on top\n    //\n    let _this = this\n    this.getPorts().each(function (i, port) {\n      port.getConnections().each(function (i, connection) {\n        connection.toFront(_this)\n      })\n      // a port should always be in front of the shape doesn't matter what the\n      // \"figure\" parameter says.\n      //\n      port.toFront(_this)\n    })\n\n    return this\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getTopLevelShapeElement: function () {\n    if (this.svgNodes.length === 0) {\n      return this.shape\n    }\n    return this.svgNodes\n  },\n\n  /**\n   * @private\n   */\n  createShapeElement: function () {\n    // NOTE: don't change the order of the two calls. This defines the z-oder in the canvas.\n    // The \"set\" must always be on top.\n    let shape = this.canvas.paper.rect(this.getX(), this.getY(), this.getWidth(), this.getHeight())\n    this.svgNodes = this.createSet()\n\n    // check if the element is a \"set\" or a simple raphael shape. otherwise we wrap them into a set\n    //\n    if (typeof this.svgNodes.forEach === \"undefined\") {\n      let set = this.canvas.paper.set()\n      set.push(this.svgNodes)\n      this.svgNodes = set\n    }\n\n    this.svgNodes.attr({\"stroke-scale\": this.strokeScale})\n\n    // update the visibility of the children\n    this.setVisible(this.visible)\n\n    // propagate the CSS style to all set elements\n    this.setCssClass(this.cssClass)\n\n    let bb = this.svgNodes.getBBox()\n    this.originalWidth = bb.width\n    this.originalHeight = bb.height\n\n    return shape\n  },\n\n  /**\n   * \n   * Override this method to add your own SVG elements. See {@link draw2d.shape.basic.Label} as example.\n   *\n   * @template\n   */\n  createSet: function () {\n    return this.canvas.paper.set() // return empty set as default;\n  }\n\n})\n","import draw2d from 'packages'\nimport jsonUtil from 'util/JSONUtil'\nimport extend from 'util/extend'\n\n/**\n * @class\n * The base class for all vector based figures like {@link draw2d.shape.basic.Rectangle}  or {@link draw2d.shape.basic.Oval}\n * inside a canvas.\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.node.Node\n */\ndraw2d.VectorFigure = draw2d.shape.node.Node.extend(\n    /** @lends draw2d.VectorFigure.prototype */\n    {\n    \n    NAME: \"draw2d.VectorFigure\",\n\n    /**\n     * Creates a new figure element which are not assigned to any canvas.\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function( attr, setter, getter)\n    {\n        this.stroke = 1;\n        this.radius = 0;\n        this.bgColor= new draw2d.util.Color(\"#ffffff\");\n        this.color  = new draw2d.util.Color(\"#303030\");\n        this.dasharray = null;\n\n        // memento for the stroke if we reset the glow effect of this shape\n        //\n        this.strokeBeforeGlow = this.stroke;\n        this.glowIsActive = false;\n\n        this._super( attr,\n            extend({\n                // @attr {String} dasharray the line pattern see {@link draw2d.shape.basic.Line#setDashArray} for more information*/\n                dasharray : this.setDashArray,\n                // @attr {Number} radius the radius to render the line edges */\n                radius : this.setRadius,\n                // @attr {String|draw2d.util.Color} bgColor the background color of the shape */\n                bgColor: this.setBackgroundColor,\n                // @attr {String|draw2d.util.Color} color the main color of the shape */\n                color  : this.setColor,\n                // @attr {Number} stroke the stroke width */\n                stroke : this.setStroke\n            }, setter),\n            extend({\n               dasharray: this.getDashArray,\n               radius :   this.getRadius,\n               bgColor:   this.getBackgroundColor,\n               color  :   this.getColor,\n               stroke :   this.getStroke\n            }, getter)\n        );\n    },\n\n    /**\n     * \n     * Sets the corner radius or the edges.\n     *\n     * @param {Number} radius\n     * @since 4.2.1\n     */\n     setRadius: function(radius)\n     {\n        this.radius = radius;\n        this.repaint();\n        this.fireEvent(\"change:radius\",{value:this.radius});\n\n        return this;\n    },\n\n    /**\n     * \n     * Get the corner radius of the edges.\n     *\n     * @returns {Number}\n     * @since 4.2.1\n     */\n    getRadius: function()\n    {\n        return this.radius;\n    },\n\n\n\n    /**\n     * \n     * Set the line style for this object.\n     *\n     *     // Alternatively you can use the attr method:\n     *     figure.attr({\n    *       dash: dashPattern\n    *     });\n     *\n     * @param {String} dash can be one of this [\"\", \"-\", \".\", \"-.\", \"-..\", \". \", \"- \", \"--\", \"- .\", \"--.\", \"--..\"]\n     */\n    setDashArray: function(dashPattern)\n    {\n        this.dasharray = dashPattern;\n        this.repaint();\n\n        this.fireEvent(\"change:dashArray\",{value:this.dasharray});\n\n        return this;\n    },\n\n    /**\n     * \n     * Get the line style for this object.\n     *\n     *     // Alternatively you can use the attr method:\n     *     figure.attr(\"dash\");\n     *\n     * @since 5.1.0\n     */\n    getDashArray: function()\n    {\n        return this.dasharray;\n    },\n\n    /**\n     * \n     * Highlight the element or remove the highlighting\n     *\n     * @param {Boolean} flag indicates glow/noGlow\n     */\n    setGlow: function(flag)\n    {\n\n        if(flag === this.glowIsActive) {\n            return this;\n        }\n\n        this.glowIsActive = flag;\n        if(flag===true){\n            this.strokeBeforeGlow = this.getStroke();\n            this.setStroke(this.strokeBeforeGlow*2.5);\n        }\n        else {\n            this.setStroke(this.strokeBeforeGlow);\n        }\n\n        return this;\n    },\n\n    /**\n     * @inheritdoc\n     */\n    repaint: function(attributes)\n    {\n        if (this.repaintBlocked===true || this.shape === null){\n            return;\n        }\n\n        attributes= attributes || {};\n\n        attributes.x = this.getAbsoluteX();\n        attributes.y = this.getAbsoluteY();\n\n        if(typeof attributes.stroke===\"undefined\"){\n            if(this.color === null || this.stroke ===0){\n                attributes.stroke = \"none\";\n            }\n            else {\n                attributes.stroke = this.color.rgba();\n            }\n        }\n\n        jsonUtil.ensureDefault(attributes,\"stroke-width\" , this.stroke);\n        jsonUtil.ensureDefault(attributes,\"fill\" ,this.bgColor.rgba());\n        jsonUtil.ensureDefault(attributes,\"dasharray\" , this.dasharray);\n        jsonUtil.ensureDefault(attributes,\"stroke-dasharray\" , this.dasharray);\n\n        this._super(attributes);\n\n        return this;\n    },\n\n\n   /**\n    * \n    * Set the new background color of the figure. It is possible to hands over\n    * <code>null</code> to set the background transparent.\n    *\n    *     // Alternatively you can use the attr method:\n    *     figure.attr({\n    *       \"bgColor\": \"#f0f0f0\"\n    *     });\n    *\n    * @param {String|draw2d.util.Color} color The new background color of the figure\n    **/\n    setBackgroundColor: function(color)\n    {\n        this.bgColor = new draw2d.util.Color(color);\n\n        this.repaint();\n        this.fireEvent(\"change:bgColor\",{value:this.bgColor});\n\n        return this;\n    },\n\n   /**\n    * \n    * The current used background color.\n    *\n    *     // Alternatively you can use the attr method:\n    *     var color =figure.attr(\"bgColor\");\n    *\n    * @returns {draw2d.util.Color}\n    */\n   getBackgroundColor: function()\n   {\n     return this.bgColor;\n   },\n\n   /**\n    * \n    * Set the stroke to use.\n    *\n    *     // Alternatively you can use the attr method:\n    *     figure.attr({\n    *       \"stroke\": 2\n    *     });\n    *\n    * @param {Number} w The new line width of the figure\n    **/\n   setStroke: function( w )\n   {\n     this.stroke=w;\n     this.repaint();\n     this.fireEvent(\"change:stroke\",{value:this.stroke});\n\n     return this;\n   },\n\n   /**\n    * \n    * The used line width.\n    *\n    * @returns {Number}\n    **/\n   getStroke: function( )\n   {\n     return this.stroke;\n   },\n\n   /**\n    * \n    * Set the foreground color of the figure.\n    * This method fires a <i>document dirty</i> event.\n    *\n    *     // Alternatively you can use the attr method:\n    *     figure.attr({\n    *       \"color\": \"#f3f3f3\"\n    *     });\n    *\n    * @param {String|draw2d.util.Color} color The new color of the line.\n    **/\n   setColor: function( color)\n   {\n     this.color = new draw2d.util.Color(color);\n     this.repaint();\n     this.fireEvent(\"change:color\",{value:this.color});\n\n     return this;\n   },\n\n   /**\n    * \n    * Get the current used foreground color\n    *\n    *\n    * @returns {draw2d.util.Color}\n    */\n   getColor: function()\n   {\n     return this.color;\n   },\n\n\n   /**\n    * @inheritdoc\n    */\n   getPersistentAttributes: function()\n   {\n       return  extend(this._super(), {\n           bgColor : this.bgColor.rgba(),\n           color   : this.color.rgba(),\n           stroke  : this.stroke,\n           radius  : this.radius,\n           dasharray : this.dasharray\n       });\n   },\n\n   /**\n    * @inheritdoc\n    */\n   setPersistentAttributes: function(memento)\n   {\n       this._super(memento);\n\n       if(typeof memento.radius !==\"undefined\"){\n           this.setRadius(memento.radius);\n        }\n\n       if(typeof memento.bgColor !== \"undefined\"){\n           this.setBackgroundColor(memento.bgColor);\n       }\n\n       if(typeof memento.color !== \"undefined\"){\n           this.setColor(memento.color);\n       }\n\n       if(typeof memento.stroke !== \"undefined\" ){\n           this.setStroke(memento.stroke===null?0:parseFloat(memento.stroke));\n       }\n\n       if(typeof memento.dasharray ===\"string\"){\n           this.dasharray = memento.dasharray;\n       }\n\n\n       return this;\n   }\n\n\n});\n\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Commands are passed around throughout editing. They are used to encapsulate and combine\n * changes to the application's model. An application has a single command stack. Commands must\n * be executed using the command stack rather than directly calling execute.\n * <br>\n * This is required for a generic support for the undo/redo concept within draw2d.<br>\n *\n * @inheritable\n * @author Andreas Herz\n */\ndraw2d.command.Command = Class.extend(\n  /** @lends draw2d.command.Command.prototype */\n  {\n  \n  NAME: \"draw2d.command.Command\",\n\n  /**\n   * Create a new Command objects which can be execute via the CommandStack.\n   *\n   * @param {String} label\n   */\n  init: function (label) {\n    this.label = label\n  },\n\n\n  /**\n   * \n   * Returns a label of the Command. e.g. `move figure`.\n   *\n   * @returns {String} the label for this command\n   **/\n  getLabel: function () {\n    return this.label\n  },\n\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modifies the model. e.g.: a CommandMove with [startX,startX] == [endX,endY] should\n   * return false. The execution of this Command doesn't modify the model.\n   *\n   * @returns {Boolean} return try if the command modify the model or make any relevant changes\n   **/\n  canExecute: function () {\n    return true\n  },\n\n  /**\n   * \n   * Execute the command the first time.\n   * Sup-classes must implement this method.\n   *\n   * @template\n   **/\n  execute: function () {\n  },\n\n  /**\n   * \n   * Will be called if the user cancel the operation.\n   *\n   * @template\n   **/\n  cancel: function () {\n  },\n\n  /**\n   * \n   * Undo the command.\n   * Sup-classes must implement this method.\n   *\n   * @template\n   **/\n  undo: function () {\n  },\n\n  /**\n   * \n   * Redo the command after the user has undo this command.\n   * Sup-classes must implement this method.\n   *\n   * @template\n   **/\n  redo: function () {\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Command to add a figure with CommandStack support.\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandAdd = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandAdd.prototype */\n  {\n  \n  NAME: \"draw2d.command.CommandAdd\",\n\n  /**\n   * Create a add command for the given figure.\n   *\n   * @param {draw2d.Canvas} canvas the canvas to use\n   * @param {draw2d.Figure} figure the figure to add\n   * @param {Number|draw2d.geo.Point} x the x-coordinate or a complete point where to place the figure\n   * @param {Number} [y] the y-coordinate if x is a number and not a complete point\n   */\n  init: function (canvas, figure, x, y) {\n    this._super(draw2d.Configuration.i18n.command.addShape)\n    this.figure = figure\n    this.canvas = canvas\n    this.pos = new draw2d.geo.Point(x, y)\n  },\n\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modifies the model. e.g.: a CommandMove with [startX,startX] == [endX,endY] should\n   * return false. The execution of this Command doesn't modify the model.\n   *\n   * @returns {Boolean} return try if the command modify the model or make any relevant changes\n   **/\n  canExecute: function () {\n    // we can only add the figure once to the canvas\n    return this.figure.getCanvas() === null\n  },\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.canvas.add(this.figure, this.pos.x, this.pos.y)\n  },\n\n  /**\n   * \n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.execute()\n  },\n\n  /**\n   * \n   * Undo the command\n   *\n   **/\n  undo: function () {\n    this.canvas.remove(this.figure)\n  }\n\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Add a vertex to a polyline or polygon\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandAddVertex = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandAddVertex.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandAddVertex\",\n\n  /**\n   * Create a new Command objects which add a vertex to a PolyLine / Polygon.\n   *\n   * @param {draw2d.shape.basic.PolyLine} line the related line\n   * @param {Number} index the index where to add\n   * @param {Number} x the x coordinate for the new vertex\n   * @param {Number} y the y coordinate for the new vertex\n   */\n  init: function (line, index, x, y) {\n    this._super(draw2d.Configuration.i18n.command.addVertex)\n\n    this.line = line\n    this.index = index\n    this.newPoint = new draw2d.geo.Point(x, y)\n  },\n\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return true\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   *\n   *\n   * Undo the move command\n   *\n   **/\n  undo: function () {\n    this.line.removeVertexAt(this.index)\n  },\n\n  /**\n   *\n   *\n   * Redo the move command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.line.insertVertexAt(this.index, this.newPoint.x, this.newPoint.y)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Assign a figure to a compiste\n *\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n * @since 4.9.0\n */\ndraw2d.command.CommandAssignFigure = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandAssignFigure.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandAssignFigure\",\n\n  /**\n   * Create a new Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.Figure} figure the figure to assign\n   * @param {draw2d.Figure} composite the composite where the figure should assign\n   */\n  init: function (figure, composite) {\n    this._super(draw2d.Configuration.i18n.command.assignShape)\n\n    this.figure = figure\n    this.composite = composite\n    this.assignedConnections = new draw2d.util.ArrayList()\n    this.isNode = this.figure instanceof draw2d.shape.node.Node\n    this.oldBoundingBox = composite.getBoundingBox()\n  },\n\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return true\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.composite.assignFigure(this.figure)\n\n    // get all connections of the shape and check if source/target node\n    // part of the composite. In this case the connection will be part of\n    // the composite as well\n    if (this.isNode === true) {\n      let connections = this.figure.getConnections()\n      let _this = this\n      connections.each(function (i, connection) {\n        if (connection.getSource().getParent().getComposite() === _this.composite && connection.getTarget().getParent().getComposite() === _this.composite) {\n          if (connection.getComposite() !== _this.composite) {\n            _this.assignedConnections.add({oldComposite: connection.getComposite(), connection: connection})\n            _this.composite.assignFigure(connection)\n          }\n        }\n      })\n    }\n  },\n\n  /**\n   *\n   *\n   * Undo the move command\n   *\n   **/\n  undo: function () {\n    this.composite.unassignFigure(this.figure)\n    this.assignedConnections.each( (i, entry) =>{\n      if (entry.oldComposite !== null) {\n        entry.oldComposite.assignFigure(entry.connection)\n      }\n      else {\n        entry.connection.getComposite().unassignFigure(entry.connection)\n      }\n    })\n    this.composite.stickFigures = true\n    this.composite.setBoundingBox(this.oldBoundingBox)\n    this.composite.stickFigures = false\n  },\n\n  /**\n   *\n   *\n   * Redo the move command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.composite.setBoundingBox(this.oldBoundingBox)\n    this.composite.assignFigure(this.figure)\n    this.assignedConnections.each( (i, entry) => this.composite.assignFigure(entry.connection))\n  }\n})\n\n\n\n\n\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n *Command to change attributes of a shape with undo/redo support\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandAttr = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandAttr.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandAttr\",\n\n  /**\n   * Create a new Command objects which provides undo/redo for attributes.\n   *\n   * @param {draw2d.Figure} figure the figure to handle\n   * @param {Object} attributes new attributes to set\n   */\n  init: function (figure, newAttributes) {\n    this._super(draw2d.Configuration.i18n.command.changeAttributes)\n\n    this.figure = figure\n    this.newAttributes = newAttributes\n    this.oldAttributes = {}\n    // Get the current attributes from the shape before we modify them.\n    // Required for undo/redo\n    Object.keys(newAttributes).forEach( (key) => {\n      this.oldAttributes[key] = figure.attr(key)\n    })\n  },\n\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return true\n  },\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * \n   *\n   * Undo the move command\n   *\n   **/\n  undo: function () {\n    this.figure.attr(this.oldAttributes)\n  },\n\n  /**\n   * \n   *\n   * Redo the move command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.figure.attr(this.newAttributes)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n * Set the bounding box of a figure with undo/redo support\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandBoundingBox = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandResize.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandResize\",\n\n  /**\n   * Create a new resize Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.Figure} figure the figure to resize\n   * @param {draw2d.geo.Rectangle} boundingBox the new bounding box of the figure\n   */\n  init: function (figure, boundingBox) {\n    this._super(draw2d.Configuration.i18n.command.resizeShape)\n    this.figure = figure\n    this.oldBoundingBox = this.figure.getBoundingBox()\n    this.newBoundingBox = boundingBox\n  },\n\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return !this.oldBoundingBox.equals(this.newBoundingBox)\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   *\n   * Undo the command\n   *\n   **/\n  undo: function () {\n    this.figure.setBoundingBox(this.oldBoundingBox)\n  },\n\n  /**\n   *\n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.figure.setBoundingBox(this.newBoundingBox)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * A CommandCollection works as a single command. You can add more than one\n * Command to this CommandCollection and execute/undo them onto the CommandStack as a\n * single Command.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandCollection = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandCollection.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandCollection\",\n\n  /**\n   * Create a new CommandConnect objects which can be execute via the CommandStack.\n   *\n   * @param {String} [commandLabel] the label to show on the command stack for the undo/redo operation\n   */\n  init: function (commandLabel) {\n    this._super((typeof commandLabel === 'undefined') ? draw2d.Configuration.i18n.command.collection : commandLabel)\n\n    this.commands = new draw2d.util.ArrayList()\n  },\n\n  /**\n   *\n   * Returns a label of the Command. e.g. \"move figure\".\n   *\n   * @returns {String} the label for this command\n   **/\n  getLabel: function () {\n    //return the label of the one and only command\n    //\n    if (this.commands.getSize() === 1) {\n      return this.commands.first().getLabel()\n    }\n\n    // return a common label if all commands have the same label.\n    //\n    if (this.commands.getSize() > 1) {\n      let labels = this.commands.clone().map(function (e) {\n        return e.getLabel()\n      })\n      labels.unique()\n      if (labels.getSize() === 1) {\n        return labels.first()\n      }\n    }\n\n    // return the all purpose label.\n    return this._super()\n  },\n\n\n  /**\n   *\n   * Add a command to the collection.\n   *\n   * @param {draw2d.command.Command} command\n   */\n  add: function (command) {\n    this.commands.add(command)\n  },\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modifies the model. e.g.: a CommandMove with [startX,startX] == [endX,endY] should\n   * return false. The execution of this Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // We ask all cmd's if they make any changes.\n    // Keep in mind: the command will be execute if at least ONE command return [true]!!!!\n    // doesn't matter if the other commands return [false].\n    // The method should be renamed into: modifiesTheModel()....design flaw.\n    let canExec = false\n    this.commands.each(function (i, cmd) {\n      canExec = canExec || cmd.canExecute()\n    })\n    return canExec\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.commands.each(function (i, cmd) {\n      cmd.execute()\n    })\n  },\n\n  /**\n   *\n   * Redo the command after the user has undo this command.\n   *\n   **/\n  redo: function () {\n    this.commands.each(function (i, cmd) {\n      cmd.redo()\n    })\n  },\n\n  /**\n   *\n   * Undo the command.\n   *\n   **/\n  undo: function () {\n    // execute the undo operation in reverse direction.\n\n    this.commands.reverse()\n    this.commands.each(function (i, cmd) {\n      cmd.undo()\n    })\n    this.commands.reverse()\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Connects two ports with a connection.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandConnect = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandConnect.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandConnect\",\n\n  /**\n   * Create a new CommandConnect objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.Port} source the source port for the connection to create\n   * @param {draw2d.Port} target the target port for the connection to create\n   * @param {draw2d.Port} [dropTarget] the port who has initiate the connection creation. mainly the drop target\n   */\n  init: function (source, target, dropTarget) {\n    this._super(draw2d.Configuration.i18n.command.connectPorts)\n    this.canvas = target.getCanvas()\n    this.source = source\n    this.target = target\n    this.connection = null\n    this.dropTarget = dropTarget // optional\n  },\n\n  /**\n   *\n   * set the connection to use. called by the ConnectionCreatePolicy\n   */\n  setConnection: function (connection) {\n    this.connection = connection\n  },\n\n\n  /**\n   *\n   * Returns the fresh created connection if available. Used in the\n   * ClickConnectionCreatePolicy to customize the router and vertices.\n   *\n   * @returns {null|draw2d.Connection}\n   * @since 6.1.0\n   */\n  getConnection: function () {\n    return this.connection\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    let optionalCallback = conn => {\n      this.connection = conn\n      this.connection.setSource(this.source)\n      this.connection.setTarget(this.target)\n      this.canvas.add(this.connection)\n    }\n\n    // the createConnection must return either a connection or \"undefined\". If the method return \"undefined\"\n    // the asynch callback must be called. Usefull if the createConnection shows a selection dialog\n    //\n    if (this.connection === null) {\n      // deprecated call!!!!\n      //\n      let result = draw2d.Configuration.factory.createConnection(this.source, this.target, optionalCallback, this.dropTarget)\n      debugger\n      // will be handled by the optional callback\n      if (typeof result === \"undefined\") {\n        return\n      }\n\n      this.connection = result\n    }\n\n    optionalCallback(this.connection)\n  },\n\n  /**\n   *\n   * Redo the command after the user has undo this command.\n   *\n   **/\n  redo: function () {\n    this.canvas.add(this.connection)\n    this.connection.reconnect()\n  },\n\n  /**\n   *\n   * Undo the command.\n   *\n   **/\n  undo: function () {\n    this.canvas.remove(this.connection)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n * Command to remove a figure with CommandStack support.\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandDelete = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandDelete.prototype */\n  {\n  NAME: \"draw2d.command.CommandDelete\",\n\n  /**\n   * Create a delete command for the given figure.\n   *\n   * @param {draw2d.Figure} figure\n   */\n  init: function (figure) {\n    this._super(draw2d.Configuration.i18n.command.deleteShape)\n\n    this.parent = figure.getParent()\n    this.figure = figure\n    this.canvas = figure.getCanvas()\n    this.connections = null\n    this.removedParentEntry = null // can be null if the figure didn't have any parent shape assigned\n    this.indexOfChild = -1\n  },\n\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modifies the model. e.g.: a CommandMove with [startX,startX] == [endX,endY] should\n   * return false. The execution of this Command doesn't modify the model.\n   *\n   * @returns {Boolean} return try if the command modify the model or make any relevant changes\n   **/\n  canExecute: function () {\n    // we can only delete the figure if its part of the canvas.\n    return this.figure.getCanvas() !== null\n  },\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * \n   * Undo the command\n   *\n   **/\n  undo: function () {\n    if (this.parent !== null) {\n      this.parent.add(this.removedParentEntry.figure, this.removedParentEntry.locator, this.indexOfChild)\n      this.canvas.setCurrentSelection(this.parent)\n    }\n    else {\n      this.canvas.add(this.figure)\n      this.canvas.setCurrentSelection(this.figure)\n    }\n\n    if (this.figure instanceof draw2d.Connection) {\n      this.figure.reconnect()\n    }\n\n\n    for (let i = 0; i < this.connections.getSize(); ++i) {\n      this.canvas.add(this.connections.get(i))\n      this.connections.get(i).reconnect()\n    }\n  },\n\n  /**\n   * \n   *\n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.canvas.setCurrentSelection(null)\n\n    // Collect all connections that are bounded to the figure to delete. This connections\n    // must be deleted too.\n    //\n    if (this.connections === null) {\n      if (this.figure instanceof draw2d.shape.node.Node) {\n        this.connections = this.figure.getConnections()\n      }\n      else {\n        this.connections = new draw2d.util.ArrayList()\n      }\n    }\n\n    // already done in the canvas.remove(..) method\n    //    if(this.figure instanceof draw2d.Connection){\n    //        this.figure.disconnect();\n    //    }\n\n\n    // remove all connections\n    //\n    for (let i = 0; i < this.connections.getSize(); ++i) {\n      this.canvas.remove(this.connections.get(i))\n    }\n\n    // remove this figure from the parent\n    //\n    if (this.parent !== null) {\n      // determine the index of the child before remove\n      this.indexOfChild = this.parent.getChildren().indexOf(this.figure)\n      this.removedParentEntry = this.parent.remove(this.figure)\n    }\n    // or from the canvas\n    else {\n      this.canvas.remove(this.figure)\n    }\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Command to remove a group with all related children.\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandDeleteGroup = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandDeleteGroup.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandDeleteGroup\",\n\n  /**\n   * Create a delete command for the given figure.\n   *\n   * @param {draw2d.shape.composite.Group} group\n   */\n  init: function (group) {\n    this._super(draw2d.Configuration.i18n.command.deleteShape)\n\n    this.parent = group.getParent()\n    this.group = group\n    this.canvas = group.getCanvas()\n    this.batchDelete = null\n  },\n\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modifies the model. e.g.: a CommandMove with [startX,startX] == [endX,endY] should\n   * return false. The execution of this Command doesn't modify the model.\n   *\n   * @returns {Boolean} return try if the command modify the model or make any relevant changes\n   **/\n  canExecute: function () {\n    // we can only delete the shape if a children can be deleted\n    //\n    let children = this.group.getAssignedFigures()\n    for (let i = 0; i < children.getSize(); i++) {\n      if (children.get(i).isDeleteable() === false) {\n        return false\n      }\n    }\n\n    // we can only delete the figure if its part of the canvas.\n    return this.group.getCanvas() !== null\n  },\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * \n   * Undo the command\n   *\n   **/\n  undo: function () {\n    this.batchDelete.undo()\n    this.canvas.setCurrentSelection(this.group)\n  },\n\n  /**\n   * \n   *\n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    if (this.batchDelete === null) {\n      this.batchDelete = new draw2d.command.CommandCollection()\n\n      // remove the assignment of the children to the group before we delete the group\n      //\n      this.batchDelete.add(new draw2d.command.CommandUngroup(this.canvas, this.group))\n\n      // add the delete command of the children to the batch\n      //\n      let children = this.group.getAssignedFigures()\n      for (let i = 0; i < children.getSize(); i++) {\n        let child = children.get(i)\n        // request a delete Command from the child instead of create one by my own. May the child\n        // provides its own implementation\n        let cmd = child.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.DELETE))\n        this.batchDelete.add(cmd)\n      }\n\n    }\n\n\n    this.batchDelete.execute()\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n * Command to group a given set of figures\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandGroup = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandGroup.prototype */\n  {\n  \n  NAME: \"draw2d.command.CommandGroup\",\n\n  /**\n   * Create a group command for the given figure.\n   *\n   * @param {draw2d.util.ArrayList} figures the figures to group\n   */\n  init: function (canvas, figures) {\n    this._super(draw2d.Configuration.i18n.command.groupShapes)\n    if (figures instanceof draw2d.Selection) {\n      this.figures = figures.getAll()\n    }\n    else {\n      this.figures = figures\n    }\n\n    // figures which already part of an non \"Group\" composite will be removed from the set.\n    // It is not possible to assign a figure to two different composites.\n    //\n    this.figures.grep(function (figure) {\n      return figure.getComposite() === null\n    })\n\n    this.canvas = canvas\n    this.group = new draw2d.shape.composite.Group()\n  },\n\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modifies the model. e.g.: a CommandMove with [startX,startX] == [endX,endY] should\n   * return false. The execution of this Command doesn't modify the model.\n   *\n   * @returns {Boolean} return try if the command modify the model or make any relevant changes\n   **/\n  canExecute: function () {\n    return !this.figures.isEmpty()\n  },\n\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * \n   * Undo the command\n   *\n   **/\n  undo: function () {\n    let _this = this\n    this.figures.each(function (i, figure) {\n      _this.group.unassignFigure(figure)\n    })\n\n    this.canvas.remove(this.group)\n    this.canvas.setCurrentSelection(this.figures)\n  },\n\n  /**\n   * \n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    let _this = this\n    this.figures.each(function (i, figure) {\n      _this.group.assignFigure(figure)\n    })\n\n    this.canvas.add(this.group)\n    this.canvas.setCurrentSelection(this.group)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Command for the movement of figures.\n *\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandMove = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandMove.prototype */\n  {\n  NAME: \"draw2d.command.CommandMove\",\n\n  /**\n   * Create a new Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.Figure} figure the figure to move\n   * @param {Number} [x] the current x position\n   * @param {Number} [y] the current y position\n   */\n  init: function (figure, x, y) {\n    this._super(draw2d.Configuration.i18n.command.moveShape)\n    this.figure = figure\n    if (typeof x === \"undefined\") {\n      this.oldX = figure.getX()\n      this.oldY = figure.getY()\n    }\n    else {\n      this.oldX = x\n      this.oldY = y\n    }\n  },\n\n\n  /**\n   * \n   * Set the initial position of the element\n   *\n   * @param {Number} x the new initial x position\n   * @param {Number} y the new initial y position\n   **/\n  setStartPosition: function (x, y) {\n    this.oldX = x\n    this.oldY = y\n  },\n\n  /**\n   * \n   * Set the target/final position of the figure move command.\n   *\n   * @param {Number} x the new x position\n   * @param {Number} y the new y position\n   **/\n  setPosition: function (x, y) {\n    this.newX = x\n    this.newY = y\n  },\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return this.newX !== this.oldX || this.newY !== this.oldY\n  },\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * \n   *\n   * Undo the move command\n   *\n   **/\n  undo: function () {\n    this.figure.setPosition(this.oldX, this.oldY)\n  },\n\n  /**\n   * \n   *\n   * Redo the move command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.figure.setPosition(this.newX, this.newY)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Command for the movement of figures.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandMoveConnection = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandMoveConnection.prototype */\n  {\n  \n  NAME: \"draw2d.command.CommandMoveConnection\",\n\n  /**\n   * Create a new Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.Connection} figure the connection to move\n   */\n  init: function (figure) {\n    this._super(draw2d.Configuration.i18n.command.moveLine)\n    this.line = figure\n    this.dx = 0\n    this.dy = 0\n  },\n\n  /**\n   * \n   * set the offset of the line translation\n   *\n   * @param {Number} dx\n   * @param {Number} dy\n   */\n  setTranslation: function (dx, dy) {\n    this.dx = dx\n    this.dy = dy\n  },\n\n  /**\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return this.dx !== 0 && this.dy !== 0\n  },\n\n  /**\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * Undo the command\n   *\n   **/\n  undo: function () {\n    let _this = this\n    this.line.getVertices().each(function (i, e) {\n      e.translate(-_this.dx, -_this.dy)\n    })\n    this.line.svgPathString = null\n    // required to update resize handles and the painting of the line\n    this.line.setPosition(this.line.getStartPosition())\n  },\n\n  /**\n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    let _this = this\n    this.line.getVertices().each(function (i, e) {\n      e.translate(_this.dx, _this.dy)\n    })\n    this.line.svgPathString = null\n\n    // required to update resize handles and the painting of the line\n    this.line.setPosition(this.line.getStartPosition())\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Command for the movement of figures.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandMoveLine = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandMoveLine.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandMoveLine\",\n\n  /**\n   * Create a new Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.shape.basic.Line} figure the line to move\n   */\n  init: function (figure) {\n    this._super(draw2d.Configuration.i18n.command.moveLine)\n    this.line = figure\n    this.dx = 0\n    this.dy = 0\n  },\n\n  /**\n   *\n   * set the offset of the line translation\n   *\n   * @param {Number} dx\n   * @param {Number} dy\n   */\n  setTranslation: function (dx, dy) {\n    this.dx = dx\n    this.dy = dy\n  },\n\n  /**\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return this.dx !== 0 && this.dy !== 0\n  },\n\n  /**\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * Undo the command\n   *\n   **/\n  undo: function () {\n    let _this = this\n    this.line.getVertices().each(function (i, e) {\n      e.translate(-_this.dx, -_this.dy)\n    })\n    this.line.svgPathString = null\n    // required to update resize handles and the painting of the line\n    this.line.setPosition(this.line.getStartPosition())\n  },\n\n  /**\n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    let _this = this\n    this.line.getVertices().each(function (i, e) {\n      e.translate(_this.dx, _this.dy)\n    })\n    this.line.svgPathString = null\n\n    // required to update resize handles and the painting of the line\n    this.line.setPosition(this.line.getStartPosition())\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Command for the vertex movement of a polyline/polygon.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandMoveVertex = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandMoveVertex.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandMoveVertex\",\n\n  /**\n   * Create a new Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.shape.basic.PolyLine} line the related line\n   */\n  init: function (line) {\n    this._super(draw2d.Configuration.i18n.command.moveVertex)\n\n    this.line = line\n    this.index = -1\n    this.newPoint = null\n  },\n\n\n  /**\n   * \n   * Set the index of the vertex of the polyline/polygon to modify.\n   *\n   * @param {Number} index the related index of the vertex\n   **/\n  setIndex: function (index) {\n    this.index = index\n    this.origPoint = this.line.getVertices().get(this.index).clone()\n  },\n\n  updatePosition: function (x, y) {\n    this.newPoint = new draw2d.geo.Point(x, y)\n  },\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return this.index !== -1 && this.newPoint !== null\n  },\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * \n   *\n   * Undo the move command\n   *\n   **/\n  undo: function () {\n    this.line.setVertex(this.index, this.origPoint.x, this.origPoint.y)\n  },\n\n  /**\n   * \n   *\n   * Redo the move command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.line.setVertex(this.index, this.newPoint.x, this.newPoint.y)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Command for the vertices movement of a polyline/polygon.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandMoveVertices = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandMoveVertices.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandMoveVertices\",\n\n  /**\n   * Create a new Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.shape.basic.PolyLine} line the related line\n   */\n  init: function (line) {\n    this._super(draw2d.Configuration.i18n.command.moveVertices)\n\n    this.line = line\n    this.oldVertices = line.getVertices().clone(true)\n    this.newVertices = null\n  },\n\n\n  updateVertices: function (newVertices) {\n    this.newVertices = newVertices\n  },\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return this.newVertices !== null\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   *\n   *\n   * Undo the move command\n   *\n   **/\n  undo: function () {\n    this.line.setVertices(this.oldVertices)\n  },\n\n  /**\n   *\n   *\n   * Redo the move command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.line.setVertices(this.newVertices)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Reconnects two ports. This command is used during the DragDrop operation of a draw2d.Connection.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandReconnect = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandReconnect.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandReconnect\",\n\n\n  /**\n   * Create a new Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.Connection} conn the related Connection which is currently in the drag&drop operation\n   */\n  init: function (conn) {\n    this._super(draw2d.Configuration.i18n.command.connectPorts)\n    this.con = conn\n    this.oldSourcePort = conn.getSource()\n    this.oldTargetPort = conn.getTarget()\n  },\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return true\n  },\n\n  /**\n   *\n   * The new ports to use during the execute of this command.\n   *\n   * @param {draw2d.Port} source\n   * @param {draw2d.Port} target\n   */\n  setNewPorts: function (source, target) {\n    this.newSourcePort = source\n    this.newTargetPort = target\n  },\n\n\n  setIndex: function (index) {\n    // do nothing....but method is required for LineResizeHandle\n    // With this common interface the ResizeHandle can handle Lines and Connections\n    // with the same code\n  },\n\n  /**\n   * compatibily method to the CommandMoveVertex to handle Line and Connections\n   * transparent in the ResizeHandles\n   *\n   * @param x\n   * @param y\n   */\n  updatePosition: function (x, y) {\n    // do nothing....but method is required for LineResizeHandle\n    // With this common interface the ResizeHandle can handle Lines and Connections\n    // with the same code\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  cancel: function () {\n    this.con.setSource(this.oldSourcePort)\n    this.con.setTarget(this.oldTargetPort)\n\n    // force a routing of the connection and DON'T set the old reouter again because this reset all manual added\n    // vertices\n    this.con.routingRequired = true\n    this.con.repaint()\n  },\n\n  /**\n   *\n   * Undo the command\n   *\n   **/\n  undo: function () {\n    this.con.setSource(this.oldSourcePort)\n    this.con.setTarget(this.oldTargetPort)\n    // force a routing of the connection and DON'T set the old reouter again because this reset all manual added\n    // vertices\n    this.con.routingRequired = true\n    this.con.repaint()\n  },\n\n  /**\n   *\n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.con.setSource(this.newSourcePort)\n    this.con.setTarget(this.newTargetPort)\n    // force a routing of the connection and DON'T set the old reouter again because this reset all manual added\n    // vertices\n    this.con.routingRequired = true\n    this.con.repaint()\n  }\n\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Remove a vertex from a polyline or polygon\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandRemoveVertex = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandRemoveVertex.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandRemoveVertex\",\n\n  /**\n   * Create a new Command objects which add a vertex to a PloyLine.\n   *\n   * @param {draw2d.shape.basic.PolyLine} line the related line\n   * @param {Number} index the index where to add\n   */\n  init: function (line, index) {\n    this._super(draw2d.Configuration.i18n.command.deleteVertex)\n\n    this.line = line\n    this.index = index\n    this.oldPoint = line.getVertices().get(index).clone()\n  },\n\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return true\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   *\n   *\n   * Undo the move command\n   *\n   **/\n  undo: function () {\n    this.line.insertVertexAt(this.index, this.oldPoint.x, this.oldPoint.y)\n  },\n\n  /**\n   *\n   *\n   * Redo the move command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.line.removeVertexAt(this.index)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Replace the vertices of a polyline.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandReplaceVertices = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandReplaceVertices.prototype */\n  {\n  \n  NAME: \"draw2d.command.CommandReplaceVertices\",\n\n  /**\n   * Create a new Command objects which add a segment to a PolyLine / Polygon.\n   *\n   * @param {draw2d.shape.basic.PolyLine} line the related line\n   * @param {draw2d.util.ArrayList} originalVertices the original vertices of the polyline\n   * @param {draw2d.util.ArrayList} newVertices the new vertices of the polyline\n   */\n  init: function (line, originalVertices, newVertices) {\n    this._super(draw2d.Configuration.i18n.command.addSegment)\n\n    this.line = line\n    this.originalVertices = originalVertices\n    this.newVertices = newVertices\n  },\n\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return true\n  },\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * \n   *\n   * Undo the move command\n   *\n   **/\n  undo: function () {\n    this.line.setVertices(this.originalVertices)\n  },\n\n  /**\n   * \n   *\n   * Redo the move command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.line.setVertices(this.newVertices)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n * Resize command for figures. Can be execute/undo/redo via a CommandStack.\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandResize = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandResize.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandResize\",\n\n  /**\n   * Create a new resize Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.Figure} figure the figure to resize\n   * @param {Number} [width] the current width\n   * @param {Number} [height] the current height\n   */\n  init: function (figure, width, height) {\n    this._super(draw2d.Configuration.i18n.command.resizeShape)\n    this.figure = figure\n\n    if (typeof width === \"undefined\") {\n      this.oldWidth = figure.getWidth()\n      this.oldHeight = figure.getHeight()\n    }\n    else {\n      this.oldWidth = width\n      this.oldHeight = height\n    }\n  },\n\n  /**\n   * \n   * Set the new dimension of the element.\n   *\n   * @param {Number} width the new width.\n   * @param {Number} height the new height of the element.\n   **/\n  setDimension: function (width, height) {\n    this.newWidth = width | 0\n    this.newHeight = height | 0\n  },\n\n  /**\n   * \n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return this.newWidth !== this.oldWidth || this.newHeight !== this.oldHeight\n  },\n\n  /**\n   * \n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   * \n   * Undo the command\n   *\n   **/\n  undo: function () {\n    this.figure.setDimension(this.oldWidth, this.oldHeight)\n  },\n\n  /**\n   * \n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.figure.setDimension(this.newWidth, this.newHeight)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Set the rotation angle of the given figure\n *\n * @since 4.4.1\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.command.Command\n */\ndraw2d.command.CommandRotate = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandRotate.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandRotate\",\n\n  /**\n   * Create a new resize Command objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.Figure} figure the figure to resize\n   * @param {Number} angle the angle to rotate\n   */\n  init: function (figure, angle) {\n    this._super(draw2d.Configuration.i18n.command.rotateShape)\n    this.figure = figure\n\n    this.oldAngle = figure.getRotationAngle()\n    this.newAngle = angle\n  },\n\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modify the model. A CommandMove with [startX,startX] == [endX,endY] should\n   * return false. <br>\n   * the execution of the Command doesn't modify the model.\n   *\n   * @returns {Boolean}\n   **/\n  canExecute: function () {\n    // return false if we doesn't modify the model => NOP Command\n    return this.oldAngle !== this.newAngle\n  },\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   *\n   * Undo the command\n   *\n   **/\n  undo: function () {\n    this.rotate(this.oldAngle)\n  },\n\n  /**\n   *\n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    this.rotate(this.newAngle)\n  },\n\n  rotate: function (angle) {\n    let w = this.figure.getWidth()\n    let h = this.figure.getHeight()\n\n    this.figure.setRotationAngle(angle)\n\n    this.figure.setDimension(h, w)\n\n    this.figure.portRelayoutRequired = true\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * An implementation of a command stack. A stack manages the executing, undoing, and redoing of Commands. Executed\n * commands are pushed onto a a stack for undoing later. Commands which are undone are pushed onto a redo stack.\n * Whenever a new command is executed, the redo stack is flushed.\n *\n * You can retrieve the current used CommandStack just by calling <code>canvas.getCommandStack()</code>\n *\n */\ndraw2d.command.CommandStack = Class.extend(\n  /** @lends draw2d.command.CommandStack.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandStack\",\n\n\n  /**\n   * Create a new CommandStack objects which can be execute via the CommandStack.\n   *\n   */\n  init: function () {\n    this.undostack = []\n    this.redostack = []\n    this.maxundo = 50\n    this.transactionCommand = null\n    this.eventListeners = new draw2d.util.ArrayList()\n  },\n\n\n  /**\n   *\n   * Set the maximal undo stack size. Entries will be remove if the max. stack\n   * size has been reached.\n   *\n   * @param {Number} count The maximal undo stack size.\n   * @returns {this}\n   **/\n  setUndoLimit: function (count) {\n    this.maxundo = count\n\n    return this\n  },\n\n  /**\n   *\n   * Remove the undo / redo history. This is useful if the user has been save the\n   * document.\n   *\n   * @returns {this}\n   **/\n  markSaveLocation: function () {\n    this.undostack = []\n    this.redostack = []\n\n    // fire an empty command to inform all listener that the stack has been changed\n    this.notifyListeners(new draw2d.command.Command(), draw2d.command.CommandStack.POST_EXECUTE)\n\n    return this\n  },\n\n  /**\n   *\n   *\n   * Executes the specified Command if possible. Prior to executing the command, a\n   * draw2d.command.CommandStackEvent for {@link #PRE_EXECUTE} will be fired to event listeners.\n   * Similarly, after attempting to execute the command, an event for {@link #POST_EXECUTE}\n   * will be fired.\n   *\n   * @param {draw2d.command.Command} command The command to execute.\n   * @returns {this}\n   **/\n  execute: function (command) {\n    if (typeof command === \"undefined\")\n      throw \"Missing parameter [command] for method call CommandStack.execute\"\n\n    // nothing to do\n    if (command === null)\n      return this//silently\n\n    // return if the command can't execute or it doesn't change the model\n    // => Empty command\n    if (command.canExecute() === false)\n      return this\n\n    // A command stack transaction is open.\n    // The execution will be postpone until the transaction will commit\n    //\n    if (this.transactionCommand !== null) {\n      this.transactionCommand.add(command)\n      return this\n    }\n\n    this.notifyListeners(command, draw2d.command.CommandStack.PRE_EXECUTE, \"PRE_EXECUTE\")\n\n    this.undostack.push(command)\n    command.execute()\n\n    // cleanup the redo stack if the user execute a new command.\n    // I think this will create a \"clean\" behaviour of the unde/redo mechanism.\n    //\n    this.redostack = []\n\n    // monitor only the max. undo stack size\n    //\n    if (this.undostack.length > this.maxundo) {\n      this.undostack = this.undostack.slice(this.undostack.length - this.maxundo)\n    }\n    this.notifyListeners(command, draw2d.command.CommandStack.POST_EXECUTE, \"POST_EXECUTE\")\n\n    return this\n  },\n\n  /**\n   *\n   * Opens a transaction for further multiple commands. If you execute a command all\n   * {@ #execute} calls will be ignored until you commit the current transaction.\n   *\n   * @param {String} [commandLabel] the label to show for the undo/redo operation\n   * @returns {this}\n   * @since 4.0.0\n   */\n  startTransaction: function (commandLabel) {\n    if (this.transactionCommand !== null) {\n      debugger\n      throw \"CommandStack is already within transactional mode. Don't call 'startTransaction\"\n    }\n\n    this.transactionCommand = new draw2d.command.CommandCollection(commandLabel)\n\n    return this\n  },\n\n  /**\n   *\n   * Returns true if the Command Stack has an open transaction.\n   * You can start or stop a transaction with `startTransaction`and `commitTransaction`.\n   *\n   * A transaction is one undo/redo operation.\n   *\n   * @returns {Boolean}\n   */\n  isInTransaction: function () {\n    return this.transactionCommand !== null\n  },\n\n  /**\n   *\n   * Commit the running transaction. All commands between the start/end of a transaction\n   * can be undo/redo in a single step.\n   *\n   * @since 4.0.0\n   * @returns {this}\n   */\n  commitTransaction: function () {\n    if (this.transactionCommand === null) {\n      return this//silently\n    }\n\n    let cmd = this.transactionCommand\n    this.transactionCommand = null\n    // we can drop the CommandCollection if the collection contains only one command.\n    if (cmd.commands.getSize() === 1) {\n      this.execute(cmd.commands.first())\n    }\n    else {\n      this.execute(cmd)\n    }\n\n    return this\n  },\n\n  /**\n   *\n   * Undo on command from the stack and store them on the redo command stack.\n   * @returns {this}\n   **/\n  undo: function () {\n    let command = this.undostack.pop()\n    if (command) {\n      this.notifyListeners(command, draw2d.command.CommandStack.PRE_UNDO)\n      this.redostack.push(command)\n      command.undo()\n      this.notifyListeners(command, draw2d.command.CommandStack.POST_UNDO)\n    }\n\n    return this\n  },\n\n  /**\n   *\n   * Redo a command after the user has undo a command\n   *\n   * @returns {this}\n   **/\n  redo: function () {\n    let command = this.redostack.pop()\n\n    if (command) {\n      this.notifyListeners(command, draw2d.command.CommandStack.PRE_REDO)\n      this.undostack.push(command)\n      command.redo()\n      this.notifyListeners(command, draw2d.command.CommandStack.POST_REDO)\n    }\n\n    return this\n  },\n\n  /**\n   *\n   * Return the label of the next REDO command.\n   *\n   * @returns {String}\n   **/\n  getRedoLabel: function () {\n    if (this.redostack.length === 0)\n      return \"\"\n\n    let command = this.redostack[this.redostack.length - 1]\n\n    if (command) {\n      return command.getLabel()\n    }\n    return \"\"\n  },\n\n\n  /**\n   *\n   * Return the label of the next UNDO command.\n   *\n   * @returns {String}\n   **/\n  getUndoLabel: function () {\n    if (this.undostack.length === 0)\n      return \"\"\n\n    let command = this.undostack[this.undostack.length - 1]\n\n    if (command) {\n      return command.getLabel()\n    }\n    return \"\"\n  },\n\n\n  /**\n   *\n   * Indicates whenever a REDO is possible.\n   *\n   * @returns {Boolean} <code>true</code> if it is appropriate to call {@link #redo()}.\n   */\n  canRedo: function () {\n    return this.redostack.length > 0\n  },\n\n  /**\n   *\n   * indicator whenever a undo is possible.\n   *\n   * @returns {Boolean} <code>true</code> if {@link #undo()} can be called\n   **/\n  canUndo: function () {\n    return this.undostack.length > 0\n  },\n\n  /**\n   *\n   * Adds a listener to the command stack, which will be notified whenever a command has been processed on the stack.\n   * @deprecated use on/off to register events\n   * @param {draw2d.command.CommandStackEventListener|Function} listener the listener to add.\n   * @returns {this}\n   */\n  addEventListener: function (listener) {\n    return this.on(\"change\", listener)\n  },\n  /**\n   * Adds a listener to the command stack, which will be notified whenever a command has been processed on the stack.\n   *\n   * @param event\n   * @param func\n   * @returns {this}\n   */\n  on: function (event, listener) {\n    if (event !== \"change\")\n      throw \"only event of kind 'change' is supported\"\n\n    if (listener instanceof draw2d.command.CommandStackEventListener) {\n      this.eventListeners.add(listener)\n    }\n    else if (typeof listener.stackChanged === \"function\") {\n      this.eventListeners.add(listener)\n    }\n    else if (typeof listener === \"function\") {\n      this.eventListeners.add({stackChanged: listener})\n    }\n    else {\n      throw \"Object doesn't implement required callback interface [draw2d.command.CommandStackListener]\"\n    }\n\n    return this\n  },\n\n  /**\n   *\n   * Removes a listener from the command stack.\n   *\n   * @deprecated use on/off to register events\n   * @param {draw2d.command.CommandStackEventListener} listener the listener to remove.\n   * @returns {this}\n   */\n  removeEventListener: function (listener) {\n    this.off(listener)\n\n    return this\n  },\n\n    /**\n     *\n      * @param listener\n     * @returns {this}\n     */\n  off: function (listener) {\n    this.eventListeners.grep(entry => (entry === listener || entry.stackChanged === listener))\n    /*\n    let size = this.eventListeners.getSize()\n    for (let i = 0; i < size; i++) {\n      let entry = this.eventListeners.get(i)\n      if (entry === listener || entry.stackChanged === listener) {\n        this.eventListeners.remove(entry)\n        return\n      }\n    }\n    */\n    return this\n  },\n\n  /**\n   *\n   * Notifies command stack event listeners that the command stack has changed to the\n   * specified state.\n   *\n   * @param {draw2d.command.Command} command the command\n   * @param {Number} state the current stack state\n   * @private\n   **/\n  notifyListeners: function (command, state, action) {\n    let event = new draw2d.command.CommandStackEvent(this, command, state, action)\n    let size = this.eventListeners.getSize()\n\n    for (let i = 0; i < size; i++) {\n      this.eventListeners.get(i).stackChanged(event)\n    }\n  }\n})\n\n\n//  Constant indicating notification prior to executing a command (value is 1).\ndraw2d.command.CommandStack.PRE_EXECUTE = 1\n//  Constant indicating notification prior to redoing a command (value is 2).\ndraw2d.command.CommandStack.PRE_REDO = 2\n//  Constant indicating notification prior to undoing a command (value is 4).\ndraw2d.command.CommandStack.PRE_UNDO = 4\n//   Constant indicating notification after a command has been executed (value is 8).\ndraw2d.command.CommandStack.POST_EXECUTE = 8\n//  Constant indicating notification after a command has been redone (value is 16).\ndraw2d.command.CommandStack.POST_REDO = 16\n//  Constant indicating notification after a command has been undone (value is 32).\ndraw2d.command.CommandStack.POST_UNDO = 32\n//  Constant indicating notification after the stack has been (re)init (value is 64).\ndraw2d.command.CommandStack.POST_INIT = 64\n\ndraw2d.command.CommandStack.POST_MASK = draw2d.command.CommandStack.POST_EXECUTE | draw2d.command.CommandStack.POST_UNDO | draw2d.command.CommandStack.POST_REDO\ndraw2d.command.CommandStack.PRE_MASK = draw2d.command.CommandStack.PRE_EXECUTE | draw2d.command.CommandStack.PRE_UNDO | draw2d.command.CommandStack.PRE_REDO\n\n\n","import draw2d from '../packages'\n\n\n/**\n * @class\n * Event class which will be fired for every CommandStack operation. Required for CommandStackListener.\n */\ndraw2d.command.CommandStackEvent = Class.extend(\n  /** @lends draw2d.command.CommandStackEvent.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandStackEvent\",\n\n  /**\n   * Create a new CommandStack objects which can be execute via the CommandStack.\n   *\n   * @param {draw2d.command.Command} command the related command\n   * @param {Number} details the current state of the command execution\n   *\n   */\n  init: function (stack, command, details, action) {\n    this.stack = stack\n    this.command = command\n    this.details = details // deprecated\n    this.action = action\n  },\n\n\n  /**\n   *\n   * Return the corresponding stack of the event.\n   *\n   * @returns {draw2d.command.CommandStack}\n   **/\n  getStack: function () {\n    return this.stack\n  },\n\n\n  /**\n   *\n   * Returns null or a Command if a command is relevant to the current event.\n   *\n   * @returns {draw2d.command.Command}\n   **/\n  getCommand: function () {\n    return this.command\n  },\n\n  /**\n   *\n   * Returns an integer identifying the type of event which has occurred.\n   * Defined by {@link draw2d.command.CommandStack}.\n   *\n   * @returns {Number}\n   **/\n  getDetails: function () {\n    return this.details\n  },\n\n\n  /**\n   *\n   * Returns true if this event is fired after the stack having changed.\n   *\n   * @returns {Boolean} true if post-change event\n   **/\n  isPostChangeEvent: function () {\n    return 0 !== (this.getDetails() & draw2d.command.CommandStack.POST_MASK)\n  },\n\n  /**\n   *\n   * Returns true if this event is fired prior to the stack changing.\n   *\n   * @returns {Boolean} true if pre-change event\n   **/\n  isPreChangeEvent: function () {\n    return 0 !== (this.getDetails() & draw2d.command.CommandStack.PRE_MASK)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Event class which will be fired for every CommandStack operation. Required for CommandStackListener.\n * @author Andreas Herz\n */\n\ndraw2d.command.CommandStackEventListener = Class.extend(\n  /** @lends draw2d.command.CommandStackEventListener.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandStackEventListener\",\n\n  /**\n   * Creates a new Listener Object\n   *\n   */\n  init: function () {\n  },\n\n  /**\n   *\n   * Sent when an event occurs on the command stack. draw2d.command.CommandStackEvent.getDetail()\n   * can be used to identify the type of event which has occurred.\n   *\n   * @template\n   *\n   * @param {draw2d.command.CommandStackEvent} event\n   **/\n  stackChanged: function (event) {\n  }\n\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * EditPolicies should determine an Figures editing capabilities.\n * It is possible to implement an Figure such that it handles all editing\n * responsibility.<br>\n * However, it is much more flexible and object-oriented to use\n * EditPolicies. Using policies, you can pick and choose the editing behavior for\n * an Figure without being bound to its class hierarchy. Code reuse is increased,\n * and code management is easier.\n *\n * @author Andreas Herz\n */\n\ndraw2d.command.CommandType = Class.extend(\n  /** @lends draw2d.command.CommandType.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandType\",\n\n  /**\n   * Create a new edit policy object\n   *\n   * @param {String} policy\n   */\n  init: function (policy) {\n    this.policy = policy\n  },\n\n  /**\n   * \n   * Return the String representation of the policy\n   *\n   * @returns {String}\n   **/\n  getPolicy: function () {\n    return this.policy\n  }\n})\n\ndraw2d.command.CommandType.DELETE = \"DELETE\"\ndraw2d.command.CommandType.MOVE = \"MOVE\"\ndraw2d.command.CommandType.CONNECT = \"CONNECT\"\ndraw2d.command.CommandType.MOVE_BASEPOINT = \"MOVE_BASEPOINT\"\ndraw2d.command.CommandType.MOVE_VERTEX = \"MOVE_VERTEX\"\ndraw2d.command.CommandType.MOVE_VERTICES = \"MOVE_VERTICES\"\ndraw2d.command.CommandType.MOVE_GHOST_VERTEX = \"MOVE_GHOST_VERTEX\"\ndraw2d.command.CommandType.RESIZE = \"RESIZE\"\ndraw2d.command.CommandType.RESET = \"RESET\"\ndraw2d.command.CommandType.ROTATE = \"ROTATE\"\n\n\n","import draw2d from '../packages'\n\n\n/**\n * @class\n * Command to ungroup a given group figures\n *\n * @extends draw2d.command.Command\n */\n\ndraw2d.command.CommandUngroup = draw2d.command.Command.extend(\n  /** @lends draw2d.command.CommandUngroup.prototype */\n  {\n\n  NAME: \"draw2d.command.CommandUngroup\",\n\n  /**\n   * Create a group command for the given figure.\n   *\n   * @param {draw2d.Canvas} canvas the responsible canvas\n   * @param {draw2d.util.ArrayList|draw2d.Selection} group the figures to group\n   */\n  init: function (canvas, group) {\n    this._super(draw2d.Configuration.i18n.command.ungroupShapes)\n    if (group instanceof draw2d.Selection) {\n      this.group = group.getAll().first()\n    }\n    else {\n      this.group = group\n    }\n\n    this.canvas = canvas\n    this.figures = this.group.getAssignedFigures().clone()\n  },\n\n\n  /**\n   *\n   * Returns [true] if the command can be execute and the execution of the\n   * command modifies the model. e.g.: a CommandMove with [startX,startX] == [endX,endY] should\n   * return false. The execution of this Command doesn't modify the model.\n   *\n   * @returns {Boolean} return try if the command modify the model or make any relevant changes\n   **/\n  canExecute: function () {\n    return !this.figures.isEmpty()\n  },\n\n\n  /**\n   *\n   * Execute the command the first time\n   *\n   **/\n  execute: function () {\n    this.redo()\n  },\n\n  /**\n   *\n   * Undo the command\n   *\n   **/\n  undo: function () {\n    let _this = this\n    this.figures.each(function (i, figure) {\n      _this.group.assignFigure(figure)\n    })\n    this.canvas.add(this.group)\n    this.canvas.setCurrentSelection(this.group)\n  },\n\n  /**\n   *\n   * Redo the command after the user has undo this command\n   *\n   **/\n  redo: function () {\n    let _this = this\n    this.figures.each(function (i, figure) {\n      _this.group.unassignFigure(figure)\n    })\n\n    this.canvas.setCurrentSelection(this.figures)\n    this.canvas.remove(this.group)\n  }\n})\n","\nvar content = require(\"!!../../node_modules/css-loader/index.js!./contextmenu.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/index.js!./contextmenu.css\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/index.js!./contextmenu.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","import draw2d from '../../packages'\n\n/**\n * @class\n *\n *\n * @example\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    var start = new draw2d.shape.node.Start();\n *    var end   = new draw2d.shape.node.End();\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // Create a Connection and connect the Start and End node\n *    //\n *    var c = new draw2d.Connection();\n *\n *    // toggle from ManhattenRouter to DirectRouter to show the rotation of decorations\n *    c.setRouter(new draw2d.layout.connection.DirectRouter());\n *\n *    // Set the endpoint decorations for the connection\n *    //\n *    c.setSourceDecorator(new draw2d.decoration.connection.ArrowDecorator());\n *    c.setTargetDecorator(new draw2d.decoration.connection.ArrowDecorator());\n *\n *    // Connect the endpoints with the start and end port\n *    //\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *\n *    // and finally add the connection to the canvas\n *    canvas.add(c);\n *\n *\n * @author Andreas Herz\n * @param {Number} [width] the width of the arrow\n * @param {Number} [height] the height of the arrow\n * @extend draw2d.decoration.connection.Decorator\n */\ndraw2d.decoration.connection.ArrowDecorator = draw2d.decoration.connection.Decorator.extend(\n  /** @lends draw2d.decoration.connection.ArrowDecorator */\n  {\n    NAME: \"draw2d.decoration.connection.ArrowDecorator\",\n\n    init: function (width, height) {\n      this._super(width, height)\n    },\n\n    /**\n     * Draws a filled arrow decoration.\n     *\n     *\n     * ```\n     *                       ---+ [length , width/2]\n     *                -------   |\n     * [0,0]  --------          |\n     *    +---                  |==========================\n     *        --------          |\n     *                -------   |\n     *                       ---+ [length ,-width/2]\n     *\n     * ```\n     *\n     * @param {RaphaelPaper} paper the raphael paper object for the paint operation\n     * @returns {RaphaelPath}\n     * @private\n     **/\n    paint: function (paper) {\n      let st = paper.set()\n\n      st.push(paper.path([\"M0 0\",\n        \"L\", this.width, \" \", -this.height / 2,\n        \"L\", this.width, \" \", this.height / 2,\n        \"L0 0\"].join(\"\")))\n\n      st.attr({fill: this.backgroundColor.rgba()})\n\n      return st\n    }\n  })\n\n","import draw2d from '../../packages'\n\n/**\n * @class\n *\n *\n * @example\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    var start = new draw2d.shape.node.Start();\n *    var end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // Create a Connection and connect the Start and End node\n *    //\n *    var c = new draw2d.Connection();\n *\n *    // toggle from ManhattenRouter to DirectRouter to show the rotation of decorations\n *    c.setRouter(new draw2d.layout.connection.DirectRouter());\n *\n *    // Set the endpoint decorations for the connection\n *    //\n *    c.setSourceDecorator(new draw2d.decoration.connection.BarDecorator());\n *    c.setTargetDecorator(new draw2d.decoration.connection.BarDecorator());\n *    // Connect the endpoints with the start and end port\n *    //\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *\n *    // and finally add the connection to the canvas\n *    canvas.add(c);\n *\n * @author Andreas Herz\n * @param {Number} [width] the width of the bar\n * @param {Number} [height] the height of the bar\n * @extend draw2d.decoration.connection.Decorator\n */\ndraw2d.decoration.connection.BarDecorator = draw2d.decoration.connection.Decorator.extend(\n  /** @lends draw2d.decoration.connection.BarDecorator */\n  {\n\n    NAME: \"draw2d.decoration.connection.BarDecorator\",\n\n    init: function (width, height) {\n      this._super(width, height)\n    },\n\n    /**\n     * Draw a bar decoration.\n     *\n     * ```\n     *\n     *               | [length , width/2]\n     *               |\n     * [0,0]         |                          (Connection)\n     *    +==========|==========================\n     *               |\n     *               |\n     *               | [length ,-width/2]\n     *\n     * ```\n     *\n     * @param {RaphaelPaper} paper the raphael paper object for the paint operation\n     * @returns {RaphaelPath}\n     * @private\n     **/\n    paint: function (paper) {\n      let st = paper.set();\n      let path = [\"M\", this.width / 2, \" \", -this.height / 2]  // Go to the top center..\n      path.push(\"L\", this.width / 2, \" \", this.height / 2)   // ...bottom center...\n\n      st.push(paper.path(path.join(\"\")))\n      st.attr({fill: this.backgroundColor.rgba()})\n      return st\n    }\n  })\n\n","import draw2d from '../../packages'\n\n/**\n * @class\n *\n *\n * @example\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    var start = new draw2d.shape.node.Start();\n *    var end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // Create a Connection and connect the Start and End node\n *    //\n *    var c = new draw2d.Connection();\n *\n *    // toggle from ManhattenRouter to DirectRouter to show the rotation of decorations\n *    c.setRouter(new draw2d.layout.connection.DirectRouter());\n *\n *    // Set the endpoint decorations for the connection\n *    //\n *    c.setSourceDecorator(new draw2d.decoration.connection.CircleDecorator());\n *    c.setTargetDecorator(new draw2d.decoration.connection.CircleDecorator());\n *    // Connect the endpoints with the start and end port\n *    //\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *\n *    // and finally add the connection to the canvas\n *    canvas.add(c);\n *\n * @author Andreas Herz\n * @param {Number} [width] the width of the arrow\n * @param {Number} [height] the height of the arrow\n * @extend draw2d.decoration.connection.Decorator\n */\ndraw2d.decoration.connection.CircleDecorator = draw2d.decoration.connection.Decorator.extend(\n  /** @lends draw2d.decoration.connection.CircleDecorator */\n  {\n\n    NAME: \"draw2d.decoration.connection.CircleDecorator\",\n\n    init: function (width, height) {\n      this._super(width, height)\n    },\n\n    /**\n     * Draw a filled circle decoration.\n     *\n     * @param {RaphaelPaper} paper the raphael paper object for the paint operation\n     * @returns {RaphaelPath}\n     * @private\n     **/\n    paint: function (paper) {\n      let st = paper.set()\n\n      st.push(paper.circle(0, 0, this.width / 2))\n      st.attr({fill: this.backgroundColor.rgba()})\n\n      return st\n    }\n  })\n\n\n\n\n\n\n","import draw2d from '../../packages'\nimport Color from '../../util/Color'\n\n/**\n * @class\n * Base class for any kind of Connection end/start decorations like arrows, bullets, circles, bars,...\n *\n * @author Andreas Herz\n */\ndraw2d.decoration.connection.Decorator = Class.extend(\n  /** @lends draw2d.decoration.connection.Decorator */\n  {\n\n    NAME: \"draw2d.decoration.connection.Decorator\",\n\n    init: function (width, height) {\n\n      if (typeof width === \"undefined\" || width < 1) {\n        this.width = 20\n      } else {\n        this.width = width\n      }\n\n      if (typeof height === \"undefined\" || height < 1) {\n        this.height = 15\n      } else {\n        this.height = height\n      }\n      this.parent = null\n      this.color = null // null => use the color of the connection\n      this.backgroundColor = new Color(250, 250, 250)\n    },\n\n    /**\n     *\n     * Paint the decoration for a connector. The Connector starts always in\n     * [0,0] and ends in [x,0].\n     * It is not necessary to consider any rotation of the connection. This will be done by the\n     * framework.\n     *\n     * <pre>\n     *               | -Y\n     *               |\n     *               |\n     *  --------------+-----------------------------&gt; +X\n     *               |\n     *               |\n     *               |\n     *               V +Y\n     *\n     *\n     * </pre>\n     *\n     * See in ArrowConnectionDecorator for example implementation.\n     * @param {RaphaelPaper} paper\n     * @private\n     */\n    paint: function (paper) {\n      // do nothing per default\n    },\n\n    /**\n     *\n     * @param {draw2d.Connection} parent\n     * @private\n     */\n    setParent: function(parent){\n      this.parent = parent\n    },\n\n    /**\n     *\n     * Set the stroke color for the decoration\n     *\n     * @param {draw2d.util.Color|String} c\n     * @returns {this}\n     */\n    setColor: function (c) {\n      this.color = new Color(c);\n      if(this.parent!==null){\n        this.parent.repaint()\n      }\n      return this\n    },\n\n    /**\n     * Get the line color of the decoration\n     *\n     * @returns {drawd.util.Color} the current line color of null if the Decoration should use the color of the host connection\n     */\n    getColor: function(){\n      return this.color\n    },\n\n    /**\n     *\n     * Set the background color for the decoration\n     *\n     * @param {draw2d.util.Color|String} c\n     * @returns {this}\n     */\n    setBackgroundColor: function (c) {\n      this.backgroundColor = new Color(c)\n      if(this.parent!==null){\n        this.parent.repaint()\n      }\n\n      return this\n    },\n\n    /**\n     * Returns the fill color\n     *\n     * @returns {draw2d.util.Color}\n     */\n    getBackgroundColor: function(){\n      return this.backgroundColor\n    },\n\n    /**\n     *\n     * Change the dimension of the decoration shape\n     *\n     * @param {Number} width  The new width of the decoration\n     * @param {Number} height The new height of the decoration\n     * @returns {this}\n     **/\n    setDimension: function (width, height) {\n      this.width = width\n      this.height = height\n\n      return this\n    }\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * @example\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    var start = new draw2d.shape.node.Start();\n *    var end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // Create a Connection and connect the Start and End node\n *    //\n *    var c = new draw2d.Connection();\n *\n *    // toggle from ManhattenRouter to DirectRouter to show the rotation of decorations\n *    c.setRouter(new draw2d.layout.connection.DirectRouter());\n *\n *    // Set the endpoint decorations for the connection\n *    //\n *    c.setSourceDecorator(new draw2d.decoration.connection.DiamondDecorator());\n *    c.setTargetDecorator(new draw2d.decoration.connection.DiamondDecorator());\n *    // Connect the endpoints with the start and end port\n *    //\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *\n *    // and finally add the connection to the canvas\n *    canvas.add(c);\n *\n *\n * @author Andreas Herz\n * @param {Number} [width] the width of the arrow\n * @param {Number} [height] the height of the arrow\n * @extend draw2d.decoration.connection.Decorator\n */\n\ndraw2d.decoration.connection.DiamondDecorator = draw2d.decoration.connection.Decorator.extend(\n  /** @lends draw2d.decoration.connection.DiamondDecorator */\n  {\n\n    NAME: \"draw2d.decoration.connection.DiamondDecorator\",\n\n    init: function (width, height) {\n      this._super(width, height)\n    },\n\n    /**\n     * Draw a filled diamond decoration.\n     *\n     * It's not your work to rotate the arrow. The draw2d do this job for you.\n     *\n     * @param {RaphaelPaper} paper the raphael paper object for the paint operation\n     * @returns {RaphaelPath}\n     * @private\n     **/\n    paint: function (paper) {\n      let st = paper.set()\n\n      st.push(\n        paper.path([\"M\", this.width / 2, \" \", -this.height / 2,  // Go to the top center..\n          \"L\", this.width, \" \", 0,               // ...draw line to the right middle\n          \"L\", this.width / 2, \" \", this.height / 2,   // ...bottom center...\n          \"L\", 0, \" \", 0,               // ...left middle...\n          \"L\", this.width / 2, \" \", -this.height / 2,  // and close the path\n          \"Z\"].join(\"\"))\n      )\n\n      st.attr({fill: this.backgroundColor.rgba()})\n      return st\n    }\n  });\n\n","import draw2d from '../packages'\n\n\n/**\n * Static util function to determine the minimal distance of point(px,py) on the line(x1,y1,x2,y2)\n *\n *\n * @returns {Number}\n * @static\n * @private\n * @param {Number} X1 x coordinate of the start point of the line\n * @param {Number} Y1 y coordinate of the start point of the line\n * @param {Number} X2 x coordinate of the end point of the line\n * @param {Number} Y2 y coordinate of the end point of the line\n * @param {Number} px x coordinate of the point to test\n * @param {Number} py y coordinate of the point to test\n **/\ndraw2d.geo.Line = {\n\n  /**\n   * Returns the relative position of the point on the line between [0..1]\n   * The point \"p\" must be part of the line!!\n   *\n   * 0 => given point is on the start location\n   * ..=> given point is in between\n   * 1 => given point is at the end\n   *\n   * @returns {Number}\n   */\n  inverseLerp: function (X1, Y1, X2, Y2, px, py) {\n    let nenner = Math.abs(X2 - X1)\n    let zaehler = Math.abs(X2 - px)\n    if (nenner === 0) {\n      nenner = Math.abs(Y2 - Y1)\n      zaehler = Math.abs(Y2 - py)\n      if (nenner === 0) {\n        return 1\n      }\n    }\n\n    return zaehler / nenner\n  },\n\n\n  /**\n   *\n   * Returns the projection of the point onto the line.\n   *\n   * @param {Number} px the x coordinate of the test point\n   * @param {Number} py the y coordinate of the test point\n   * @returns {draw2d.geo.Point}\n   **/\n  pointProjection: function (X1, Y1, X2, Y2, px, py) {\n    let r = new draw2d.geo.Point(0, 0)\n    if (X1 === X2 && Y1 === Y2) X1 -= 0.00001\n\n    let U = ((px - X1) * (X2 - X1)) + ((py - Y1) * (Y2 - Y1))\n\n    let Udenom = Math.pow(X2 - X1, 2) + Math.pow(Y2 - Y1, 2)\n\n    U /= Udenom\n\n    r.x = X1 + (U * (X2 - X1))\n    r.y = Y1 + (U * (Y2 - Y1))\n\n    let minx, maxx, miny, maxy\n\n    minx = Math.min(X1, X2)\n    maxx = Math.max(X1, X2)\n\n    miny = Math.min(Y1, Y2)\n    maxy = Math.max(Y1, Y2)\n\n    let isValid = (r.x >= minx && r.x <= maxx) && (r.y >= miny && r.y <= maxy)\n\n    return isValid ? r : null\n  },\n\n  distance: function (X1, Y1, X2, Y2, px, py) {\n    // Adjust vectors relative to X1,Y1\n    // X2,Y2 becomes relative vector from X1,Y1 to end of segment\n    X2 -= X1\n    Y2 -= Y1\n    // px,py becomes relative vector from X1,Y1 to test point\n    px -= X1\n    py -= Y1\n    let dotprod = px * X2 + py * Y2\n    let projlenSq\n    if (dotprod <= 0.0) {\n      // px,py is on the side of X1,Y1 away from X2,Y2\n      // distance to segment is length of px,py vector\n      // \"length of its (clipped) projection\" is now 0.0\n      projlenSq = 0.0\n    } else {\n      // switch to backwards vectors relative to X2,Y2\n      // X2,Y2 are already the negative of X1,Y1=>X2,Y2\n      // to get px,py to be the negative of px,py=>X2,Y2\n      // the dot product of two negated vectors is the same\n      // as the dot product of the two normal vectors\n      px = X2 - px\n      py = Y2 - py\n      dotprod = px * X2 + py * Y2\n      if (dotprod <= 0.0) {\n        // px,py is on the side of X2,Y2 away from X1,Y1\n        // distance to segment is length of (backwards) px,py vector\n        // \"length of its (clipped) projection\" is now 0.0\n        projlenSq = 0.0\n      } else {\n        // px,py is between X1,Y1 and X2,Y2\n        // dotprod is the length of the px,py vector\n        // projected on the X2,Y2=>X1,Y1 vector times the\n        // length of the X2,Y2=>X1,Y1 vector\n        projlenSq = dotprod * dotprod / (X2 * X2 + Y2 * Y2)\n      }\n    }\n    // Distance to line is now the length of the relative point\n    // vector minus the length of its projection onto the line\n    // (which is zero if the projection falls outside the range\n    //  of the line segment).\n    let lenSq = px * px + py * py - projlenSq\n    if (lenSq < 0) {\n      lenSq = 0\n    }\n    return Math.sqrt(lenSq)\n  }\n}\n\n","import draw2d from '../packages'\n\n\n/**\n * Represents a point (x, y) in 2-dimensional space.\n *\n * @class\n */\n\ndraw2d.geo.Point = Class.extend(\n  /** @lends draw2d.geo.Point.prototype */\n  {\n  \n  NAME: \"draw2d.geo.Point\",\n\n  /**\n   * Creates a new Point object with the hands over coordinates.\n   *\n   * @param {Number|draw2d.geo.Point} x\n   * @param {Number} y\n   */\n  init: function (x, y) {\n    if (x instanceof draw2d.geo.Point) {\n      this.x = x.x\n      this.y = x.y\n    }\n    else if (!isNaN(parseFloat(x.x)) && !isNaN(parseFloat(x.y))) {\n      this.x = x.x\n      this.y = x.y\n    }\n    else {\n      this.x = x\n      this.y = y\n    }\n\n\n    // limit for the maxi/minimum boundary of this rectangle\n    // It is not possible that the rect leave the boundary if set.\n    this.bx = null\n    this.by = null\n    this.bw = null\n    this.bh = null\n  },\n\n\n  /**\n   * \n   * Ensure the boundary of the rectangle. If set, the rectangle keeps always inside\n   * the boundary. It is like a virtual fence.\n   *\n   * @returns {this}\n   */\n  setBoundary: function (bx, by, bw, bh) {\n    if (bx instanceof draw2d.geo.Rectangle) {\n      this.bx = bx.x\n      this.by = bx.y\n      this.bw = bx.w\n      this.bh = bx.h\n    } else {\n      this.bx = bx\n      this.by = by\n      this.bw = bw\n      this.bh = bh\n    }\n    this.adjustBoundary()\n\n    return this\n  },\n\n\n  /**\n   * \n   * @private\n   * @returns {this}\n   */\n  adjustBoundary: function () {\n    if (this.bx === null) {\n      return this\n    }\n    this.x = Math.min(Math.max(this.bx, this.x), this.bw)\n    this.y = Math.min(Math.max(this.by, this.y), this.bh)\n\n    return this\n  },\n\n  /**\n   * \n   * Moves this Rectangle horizontally by dx and vertically by dy, then returns\n   * this Rectangle for convenience.<br>\n   * <br>\n   * The method return the object itself. This allows you to do command chaining, where\n   * you can perform multiple methods on the same elements.\n   *\n   * @param {Number} dx  Shift along X axis\n   * @param {Number} dy  Shift along Y axis\n   * @returns {this}\n   **/\n  translate: function (dx, dy) {\n    this.x += dx\n    this.y += dy\n    this.adjustBoundary()\n\n    return this\n  },\n\n  /**\n   * \n   * The X value of the point\n   *\n   * @since 0.1\n   * @returns {Number} The x coordinate of the top left corner\n   */\n  getX: function () {\n    return this.x\n  },\n\n  /**\n   * \n   * The y value of the point\n   *\n   * @returns {Number} The y coordinate of the top left corner\n   */\n  getY: function () {\n    return this.y\n  },\n\n  /**\n   * \n   * Set the new X value of the point\n   *\n   * @param {Number} x the new x coordinate of the rect\n   * @returns {this}\n   */\n  setX: function (x) {\n    this.x = x\n    this.adjustBoundary()\n\n    return this\n  },\n\n  /**\n   * \n   * Set the new Y value of the point\n   *\n   * @param {Number} y the new y coordinate of the rect\n   * @returns {this}\n   */\n  setY: function (y) {\n    this.y = y\n    this.adjustBoundary()\n\n    return this\n  },\n\n  /**\n   * \n   * Set the new x/y coordinates of this point\n   *\n   * @param {Number|draw2d.geo.Point} x\n   * @param {Number} [y]\n   * @returns {this}\n   */\n  setPosition: function (x, y) {\n    if (x instanceof draw2d.geo.Point) {\n      this.x = x.x\n      this.y = x.y\n    }\n    else {\n      this.x = x\n      this.y = y\n    }\n    this.adjustBoundary()\n\n    return this\n  },\n\n  /**\n   * \n   * Calculates the relative position of the specified Point to this Point.\n   *\n   * @param {draw2d.geo.Point} p The reference Point\n   * @returns {Number} NORTH, SOUTH, EAST, or WEST, as defined in {@link draw2d.geo.PositionConstants}\n   */\n  getPosition: function (p) {\n    let dx = p.x - this.x\n    let dy = p.y - this.y\n    if (Math.abs(dx) > Math.abs(dy)) {\n      if (dx < 0)\n        return draw2d.geo.PositionConstants.WEST\n      return draw2d.geo.PositionConstants.EAST\n    }\n    if (dy < 0) {\n      return draw2d.geo.PositionConstants.NORTH\n    }\n    return draw2d.geo.PositionConstants.SOUTH\n  },\n\n  /**\n   * \n   * Compares two points and return [true] if x and y are equals.\n   *\n   * @param {draw2d.geo.Point} p the point to compare with\n   *\n   * @returns {Boolean} True if the given p[x,y] has an exact match with the point\n   */\n  equals: function (p) {\n    return this.x === p.x && this.y === p.y\n  },\n\n  /**\n   * \n   * Return the distance between this point and the hands over.\n   *\n   * @param {draw2d.geo.Point} other the point to use\n   * @returns {Number} The distance to the given point\n   */\n  distance: function (other) {\n    return Math.sqrt((this.x - other.x) * (this.x - other.x) + (this.y - other.y) * (this.y - other.y))\n  },\n  /* @deprecated */\n  getDistance: function (other) {\n    return this.distance(other)\n  },\n\n\n  /**\n   * \n   * Return the length of the vector measured from [0,0]\n   *\n   * @returns {Number} The length of the vector [0,0][x,y]\n   * @since 2.10.0\n   */\n  length: function () {\n    return Math.sqrt(this.x * this.x + this.y * this.y)\n  },\n\n  /**\n   * \n   * Return a new Point translated with the x/y values of the hands over point.\n   *\n   * @param {draw2d.geo.Point|Number} x the x translation or the complete point to translate\n   * @param {Number} [y] the y translation. Required if x is a simple number instead of a draw2d.geo.Point\n   * @returns {draw2d.geo.Point} A instance of a translated point.\n   */\n  translated: function (x, y) {\n    let other = new draw2d.geo.Point(x, y)\n    return new draw2d.geo.Point(this.x + other.x, this.y + other.y)\n  },\n\n  /**\n   * \n   * Scales this point with the handover factor\n   *\n   * @param {Number} factor the factor to scaled the point.\n   * @returns {this}\n   */\n  scale: function (factor) {\n    this.x *= factor\n    this.y *= factor\n    this.adjustBoundary()\n\n    return this\n  },\n\n  /**\n   * \n   * Return a **new** Point scaled with the givben factor\n   *\n   * @param {Number} factor the factor to scaled the new point.\n   * @returns {draw2d.geo.Point} The new translated point.\n   */\n  scaled: function (factor) {\n    return new draw2d.geo.Point(this.x * factor, this.y * factor)\n  },\n\n  /* @deprecated */\n  getScaled: function (factor) {\n    return this.scaled(factor)\n  },\n\n  /**\n   * \n   * Return an objects with all important attributes for XML or JSON serialization\n   *\n   * @returns {Object}\n   */\n  getPersistentAttributes: function () {\n    return {\n      x: this.x,\n      y: this.y\n    }\n  },\n\n  /**\n   * \n   * Read all attributes from the serialized properties and transfer them into the shape.\n   *\n   * @param {Object} memento\n   * @returns {this}\n   */\n  setPersistentAttributes: function (memento) {\n    this.x = memento.x\n    this.y = memento.y\n\n    return this\n  },\n\n  /**\n   * \n   * substract the given point and return the **new** point.\n   *\n   * @param that\n   * @returns {draw2d.geo.Point}\n   */\n  subtract: function (that) {\n    return new draw2d.geo.Point(this.x - that.x, this.y - that.y)\n  },\n\n\n  dot: function (that) {\n    return this.x * that.x + this.y * that.y\n  },\n\n  cross: function (that) {\n    return this.x * that.y - this.y * that.x\n  },\n\n\n  lerp: function (that, t) {\n    return new draw2d.geo.Point(this.x + (that.x - this.x) * t, this.y + (that.y - this.y) * t)\n  },\n\n\n  /**\n   * \n   * Return a cloned point\n   *\n   * @returns {draw2d.geo.Point}\n   */\n  clone: function () {\n    return new draw2d.geo.Point(this.x, this.y)\n  }\n\n})\n","import draw2d from '../packages'\n\n/**\n * @class\n * Static values for point orientation.\n * \n */\ndraw2d.geo.PositionConstants = {\n  /**\n   *\n   */\n  NORTH:  1,\n  SOUTH:  4,\n  WEST:  8,\n  EAST: 16\n}\n\n","import draw2d from '../packages'\n\n\n/**\n * @class\n * Represents a vector within 2-dimensional Euclidean space.\n * \n * @inheritable\n * @extends draw2d.geo.Point\n * @author Andreas Herz\n */\ndraw2d.geo.Ray = draw2d.geo.Point.extend(\n    /** @lends draw2d.geo.Ray.prototype */\n    {\n    \n    NAME: \"draw2d.geo.Ray\",\n    \n    /**\n     * Creates a ray object.\n     *\n     * @param {Number} x\n     * @param {Number} y\n     */\n    init: function( x, y)\n    {\n        this._super(x,y);\n    },\n    \n    \n    isHorizontal: function()\n    {\n       return this.x != 0;\n    },\n    \n    similarity: function( otherRay)\n    {\n       return Math.abs(this.dot(otherRay));\n    },\n    \n    getAveraged: function( otherRay)\n    {\n        return new draw2d.geo.Ray((this.x + otherRay.x) / 2, (this.y + otherRay.y) / 2);\n    }\n\n});\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Represents a Rectangle(x, y, width, height).\n *\n * @author Andreas Herz\n * @extends draw2d.geo.Point\n */\ndraw2d.geo.Rectangle = draw2d.geo.Point.extend(\n  /** @lends draw2d.geo.Rectangle.prototype */\n  {\n\n    NAME: \"draw2d.geo.Rectangle\",\n\n    /**\n     * Creates a new Point object with the hands over coordinates.\n     * <br>\n     * The constructor consumes almost any kind of rectangel definitions\n     * like:\n     *      let rect0 = new draw2d.geo.Rectangle({x:0,y:0,width:20,height:20});\n     *      let rect1 = new draw2d.geo.Rectangle({x:0,y:0,w:20,h:20});\n     *      let rect2 = new draw2d.geo.Rectangle($(\"#divid\")[0].getBoundingClientRect());\n     *      let rect3 = new draw2d.geo.Rectangle(rect1);\n     *\n     * The rectangle class is usefull for any kind of intersection, hitTest, contains,...calculation\n     * or to set the bounding box of any shape.\n     *\n     * @param {Number|draw2d.geo.Rectangle} x\n     * @param {Number} y\n     * @param {Number} w\n     * @param {Number} h\n     */\n    init: function (x, y, w, h) {\n      // try to consume any kind rectangle definitions\n      //\n      if (x instanceof draw2d.geo.Rectangle) {\n        y = x.y;\n        w = x.w;\n        h = x.h;\n        x = x.x;\n      } else if (typeof x.x === \"number\" && typeof x.y === \"number\") {\n        y = x.y;\n        w = x.w | x.width;\n        h = x.h | x.height;\n        x = x.x;\n      } else if (typeof x.top === \"number\" && typeof x.left === \"number\") {\n        y = x.top;\n        w = x.w | x.width;\n        h = x.h | x.height;\n        x = x.left;\n      }\n      this._super(x, y);\n      this.w = w;\n      this.h = h;\n    },\n\n\n    /**\n     *\n     * @private\n     */\n    adjustBoundary: function () {\n      if (this.bx === null) {\n        return;\n      }\n      this.x = Math.min(Math.max(this.bx, this.x), this.bw - this.w);\n      this.y = Math.min(Math.max(this.by, this.y), this.bh - this.h);\n      this.w = Math.min(this.w, this.bw);\n      this.h = Math.min(this.h, this.bh);\n    },\n\n    /**\n     *\n     * Resizes this Rectangle by the values supplied as input and returns this for\n     * convenience. This Rectangle's width will become this.width + dw. This\n     * Rectangle's height will become this.height + dh.\n     * <br>\n     * The method return the object itself. This allows you to do command chaining, where\n     * you can perform multiple methods on the same elements.\n     *\n     *\n     * @param {Number} dw  Amount by which width is to be resized\n     * @param {Number} dh  Amount by which height is to be resized\n     * @returns  {this}\n     **/\n    resize: function (dw, dh) {\n      this.w += dw;\n      this.h += dh;\n      this.adjustBoundary();\n\n      return this;\n    },\n\n    /**\n     * Adds the specified padding to the rectangle's bounds. This Rectangle's width\n     * will become this.width + dw. The Rectangle's height will become this.height + dh.\n     * The top left corner moves -dw/2, -dh/2\n     *\n     * @param {Number} dw  Amount by which width is to be resized\n     * @param {Number} dh  Amount by which height is to be resized\n     * @returns  {this}\n     **/\n    scale: function (dw, dh) {\n      this.w += (dw);\n      this.h += (dh);\n      this.x -= (dw / 2);\n      this.y -= (dh / 2);\n      this.adjustBoundary();\n\n      return this;\n    },\n\n    /**\n     * Translate the rectangle with the given x/y coordiante.\n     *\n     * @param {draw2d.geo.Point|Number} x the x translation or the complete point to translate\n     * @param {Number} [y] the y translation. Required if x is a simple number instead of a draw2d.geo.Point\n     *\n     *\n     * @since 5.6.0\n     * @returns  {this}\n     */\n    translate: function (x, y) {\n      let other = new draw2d.geo.Point(x, y);\n      this.x += other.x;\n      this.y += other.y;\n      this.adjustBoundary();\n\n      return this;\n    },\n\n\n    /**\n     *\n     * Returns a copy of the translated rectangle\n     *\n     * @param {draw2d.geo.Point|Number} x the x translation or the complete point to translate\n     * @param {Number} [y] the y translation. Required if x is a simple number instead of a draw2d.geo.Point\n     *\n     * @returns {draw2d.geo.Rectangle} The new translated rectangle.\n     * @since 5.6.0\n     */\n    translated: function (x, y) {\n      let other = new draw2d.geo.Point(x, y);\n      return new draw2d.geo.Rectangle(this.x + other.x, this.y + other.y, this.w, this.h);\n    },\n\n\n    /**\n     * Sets the parameters of this Rectangle from the Rectangle passed in and\n     * returns this for convenience.<br>\n     * <br>\n     * The method return the object itself. This allows you to do command chaining, where\n     * you can perform multiple methods on the same elements.\n     *\n     * @param {draw2d.geo.Rectangle} Rectangle providing the bounding values\n     * @returns  {this}\n     */\n    setBounds: function (rect) {\n      this.setPosition(rect.x, rect.y);\n\n      this.w = rect.w;\n      this.h = rect.h;\n\n      return this;\n    },\n\n    /**\n     *\n     * Returns <code>true</code> if this Rectangle's width or height is less than or\n     * equal to 0.\n     *\n     * @returns {Boolean}\n     */\n    isEmpty: function () {\n      return this.w <= 0 || this.h <= 0;\n    },\n\n    /**\n     *\n     * The width of the dimension element.\n     *\n     * @returns {Number}\n     **/\n    getWidth: function () {\n      return this.w;\n    },\n\n    /**\n     *\n     * Set the new width of the rectangle.\n     *\n     * @param {Number} w the new width of the rectangle\n     * @returns  {this}\n     */\n    setWidth: function (w) {\n      this.w = w;\n      this.adjustBoundary();\n\n      return this;\n    },\n\n    /**\n     *\n     * The height of the dimension element.\n     *\n     * @returns {Number}\n     **/\n    getHeight: function () {\n      return this.h;\n    },\n\n    /**\n     *\n     * Set the new height of the rectangle.\n     *\n     * @param {Number} h the new height of the rectangle\n     * @returns  {this}\n     */\n    setHeight: function (h) {\n      this.h = h;\n      this.adjustBoundary();\n\n      return this;\n    },\n\n    /**\n     *\n     * The x coordinate of the left corner.\n     *\n     * @returns {Number}\n     **/\n    getLeft: function () {\n      return this.x;\n    },\n\n    /**\n     *\n     * The x coordinate of the right corner.\n     *\n     * @returns {Number}\n     **/\n    getRight: function () {\n      return this.x + this.w;\n    },\n\n    /**\n     *\n     * The y coordinate of the top.\n     *\n     *@return {Number}\n     **/\n    getTop: function () {\n      return this.y;\n    },\n\n    /**\n     *\n     * The y coordinate of the bottom.\n     *\n     *@return {Number}\n     **/\n    getBottom: function () {\n      return this.y + this.h;\n    },\n\n    /**\n     *\n     * The top left corner of the dimension object.\n     *\n     * @returns {draw2d.geo.Point} a new point objects which holds the coordinates\n     **/\n    getTopLeft: function () {\n      return new draw2d.geo.Point(this.x, this.y);\n    },\n\n    /**\n     *\n     * The top center coordinate of the dimension object.\n     *\n     * @returns {draw2d.geo.Point} a new point objects which holds the coordinates\n     **/\n    getTopCenter: function () {\n      return new draw2d.geo.Point(this.x + (this.w / 2), this.y);\n    },\n\n    /**\n     *\n     * The top right corner of the dimension object.\n     *\n     * @returns {draw2d.geo.Point} a new point objects which holds the coordinates\n     **/\n    getTopRight: function () {\n      return new draw2d.geo.Point(this.x + this.w, this.y);\n    },\n\n    /**\n     *\n     * The center left  of the dimension object.\n     *\n     * @returns {draw2d.geo.Point} a new point objects which holds the coordinates\n     **/\n    getCenterLeft: function () {\n      return new draw2d.geo.Point(this.x, this.y + (this.h / 2));\n    },\n\n    /**\n     *\n     * The bottom left corner of the dimension object.\n     *\n     * @returns {draw2d.geo.Point} a new point objects which holds the coordinates\n     **/\n    getBottomLeft: function () {\n      return new draw2d.geo.Point(this.x, this.y + this.h);\n    },\n\n    /**\n     *\n     * The bottom center coordinate of the dimension object.\n     *\n     * @returns {draw2d.geo.Point} a new point objects which holds the coordinates\n     **/\n    getBottomCenter: function () {\n      return new draw2d.geo.Point(this.x + (this.w / 2), this.y + this.h);\n    },\n\n    /**\n     *\n     * The center of the dimension object\n     *\n     * @returns {draw2d.geo.Point} a new point which holds the center of the object\n     **/\n    getCenter: function () {\n      return new draw2d.geo.Point(this.x + this.w / 2, this.y + this.h / 2);\n    },\n\n\n    /**\n     *\n     * Bottom right corner of the object\n     *\n     * @returns {draw2d.geo.Point} a new point which holds the bottom right corner\n     **/\n    getBottomRight: function () {\n      return new draw2d.geo.Point(this.x + this.w, this.y + this.h);\n    },\n\n    /**\n     *\n     * Return all points of the rectangle as array. Starting at topLeft and the\n     * clockwise.\n     *\n     * @returns {draw2d.util.ArrayList} the points starting at top/left and the clockwise\n     */\n    getVertices: function () {\n      let result = new draw2d.util.ArrayList();\n      // don't change the order. We expect always that the top left corner has index[0]\n      // and goes clock wise\n      //\n      result.add(this.getTopLeft());\n      result.add(this.getTopRight());\n      result.add(this.getBottomRight());\n      result.add(this.getBottomLeft());\n\n      return result;\n    },\n\n    /**\n     *\n     * Return a new rectangle which fits into this rectangle. <b>ONLY</b> the x/y coordinates\n     * will be changed. Not the dimension of the given rectangle.\n     *\n     * @param {draw2d.geo.Rectangle} rect the rectangle to adjust\n     * @returns the new shifted rectangle\n     */\n    moveInside: function (rect) {\n      let newRect = new draw2d.geo.Rectangle(rect.x, rect.y, rect.w, rect.h);\n      // shift the coordinate right/down if coordinate not inside the rect\n      //\n      newRect.x = Math.max(newRect.x, this.x);\n      newRect.y = Math.max(newRect.y, this.y);\n\n      // ensure that the right border is inside this rect (if possible). \n      //\n      if (newRect.w < this.w) {\n        newRect.x = Math.min(newRect.x + newRect.w, this.x + this.w) - newRect.w;\n      } else {\n        newRect.x = this.x;\n      }\n\n      // ensure that the bottom is inside this rectangle\n      //\n      if (newRect.h < this.h) {\n        newRect.y = Math.min(newRect.y + newRect.h, this.y + this.h) - newRect.h;\n      } else {\n        newRect.y = this.y;\n      }\n\n      return newRect;\n    },\n\n    /**\n     *\n     * Return the minimum distance of this rectangle to the given {@link draw2d.geo.Point} or\n     * {link draw2d.geo.Rectangle}.\n     *\n     * @param {draw2d.geo.Point|draw2d.geo.Rectangle} pointOrRectangle the reference point/rectangle for the distance calculation\n     */\n    getDistance: function (pointOrRectangle) {\n      let cx = this.x;\n      let cy = this.y;\n      let cw = this.w;\n      let ch = this.h;\n\n      let ox = pointOrRectangle.getX();\n      let oy = pointOrRectangle.getY();\n      let ow = 1;\n      let oh = 1;\n\n      if (pointOrRectangle instanceof draw2d.geo.Rectangle) {\n        ow = pointOrRectangle.getWidth();\n        oh = pointOrRectangle.getHeight();\n      }\n      let oct = 9;\n\n      // Determin Octant\n      //\n      // 0 | 1 | 2\n      // __|___|__\n      // 7 | 9 | 3\n      // __|___|__\n      // 6 | 5 | 4\n\n      if (cx + cw <= ox) {\n        if ((cy + ch) <= oy) {\n          oct = 0;\n        } else if (cy >= (oy + oh)) {\n          oct = 6;\n        } else {\n          oct = 7;\n        }\n      } else if (cx >= ox + ow) {\n        if (cy + ch <= oy) {\n          oct = 2;\n        } else if (cy >= oy + oh) {\n          oct = 4;\n        } else {\n          oct = 3;\n        }\n      } else if (cy + ch <= oy) {\n        oct = 1;\n      } else if (cy >= oy + oh) {\n        oct = 5;\n      } else {\n        return 0;\n      }\n\n\n      // Determine Distance based on Quad\n      //\n      switch (oct) {\n        case 0:\n          cx = (cx + cw) - ox;\n          cy = (cy + ch) - oy;\n          return -(cx + cy);\n        case 1:\n          return -((cy + ch) - oy);\n        case 2:\n          cx = (ox + ow) - cx;\n          cy = (cy + ch) - oy;\n          return -(cx + cy);\n        case 3:\n          return -((ox + ow) - cx);\n        case 4:\n          cx = (ox + ow) - cx;\n          cy = (oy + oh) - cy;\n          return -(cx + cy);\n        case 5:\n          return -((oy + oh) - cy);\n        case 6:\n          cx = (cx + cw) - ox;\n          cy = (oy + oh) - cy;\n          return -(cx + cy);\n        case 7:\n          return -((cx + cw) - ox);\n      }\n\n      throw \"Unknown data type of parameter for distance calculation in draw2d.geo.Rectangle.getDistance(..)\";\n    },\n\n\n    /**\n     *\n     * Determin the octant of r2 in relation to this rectangle.\n     * <pre>\n     *\n     *    0 | 1 | 2\n     *    __|___|__\n     *    7 | 8 | 3\n     *    __|___|__\n     *    6 | 5 | 4\n     * </pre>\n     *\n     * @param {draw2d.geo.Rectangle} r2\n     *\n     */\n    determineOctant: function (r2) {\n      let HISTERESE = 3; // Toleranz um diese vermieden wird, dass der Octant \"8\" zurückgegeben wird\n\n      let ox = this.x + HISTERESE;\n      let oy = this.y + HISTERESE;\n      let ow = this.w - (HISTERESE * 2);\n      let oh = this.h - (HISTERESE * 2);\n\n      let cx = r2.x;\n      let cy = r2.y;\n      let cw = 2;\n      let ch = 2;\n      if (r2 instanceof draw2d.geo.Rectangle) {\n        cw = r2.w;\n        ch = r2.h;\n      }\n\n      let oct = 0;\n\n      if (cx + cw <= ox) {\n        if ((cy + ch) <= oy) {\n          oct = 0;\n        } else if (cy >= (oy + oh)) {\n          oct = 6;\n        } else {\n          oct = 7;\n        }\n      } else if (cx >= ox + ow) {\n        if (cy + ch <= oy) {\n          oct = 2;\n        } else if (cy >= oy + oh) {\n          oct = 4;\n        } else {\n          oct = 3;\n        }\n      } else if (cy + ch <= oy) {\n        oct = 1;\n      } else if (cy >= oy + oh) {\n        oct = 5;\n      } else {\n        oct = 8;\n      }\n\n      return oct;\n    },\n\n\n    /**\n     *\n     * Returns the direction the point <i>p</i> is in relation to the given rectangle.\n     * Util method for inherit router implementations.\n     *\n     * <p>\n     * Possible values:\n     * <ul>\n     *   <li>up -&gt; 0</li>\n     *   <li>right -&gt; 1</li>\n     *   <li>down -&gt; 2</li>\n     *   <li>left -&gt; 3</li>\n     * </ul>\n     * <p>\n     *\n     * @param {draw2d.geo.Point} other the point in relation to the given rectangle\n     *\n     * @returns {Number} the direction from <i>r</i> to <i>p</i>\n     */\n    getDirection: function (other) {\n      let current = this.getTopLeft();\n      switch (this.determineOctant(other)) {\n        case 0:\n          if ((current.x - other.x) < (current.y - other.y))\n            return draw2d.geo.Rectangle.DIRECTION_UP;\n          return draw2d.geo.Rectangle.DIRECTION_LEFT;\n        case 1:\n          return draw2d.geo.Rectangle.DIRECTION_UP;\n        case 2:\n          current = this.getTopRight();\n          if ((other.x - current.x) < (current.y - other.y))\n            return draw2d.geo.Rectangle.DIRECTION_UP;\n          return draw2d.geo.Rectangle.DIRECTION_RIGHT;\n        case 3:\n          return draw2d.geo.Rectangle.DIRECTION_RIGHT;\n        case 4:\n          current = this.getBottomRight();\n          if ((other.x - current.x) < (other.y - current.y))\n            return draw2d.geo.Rectangle.DIRECTION_DOWN;\n          return draw2d.geo.Rectangle.DIRECTION_RIGHT;\n        case 5:\n          return draw2d.geo.Rectangle.DIRECTION_DOWN;\n        case 6:\n          current = this.getBottomLeft();\n          if ((current.x - other.x) < (other.y - current.y))\n            return draw2d.geo.Rectangle.DIRECTION_DOWN;\n          return draw2d.geo.Rectangle.DIRECTION_LEFT;\n        case 7:\n          return draw2d.geo.Rectangle.DIRECTION_LEFT;\n        case 8:\n          if (other.y > this.y) {\n            return draw2d.geo.Rectangle.DIRECTION_DOWN;\n          }\n          return draw2d.geo.Rectangle.DIRECTION_UP;\n\n      }\n      return draw2d.geo.Rectangle.DIRECTION_UP;\n    },\n\n\n    /**\n     *\n     * Compares two rectangle objects\n     *\n     * @param {draw2d.geo.Rectangle} o\n     *\n     * @returns {Boolean}\n     **/\n    equals: function (o) {\n      return this.x == o.x && this.y == o.y && this.w == o.w && this.h == o.h;\n    },\n\n    /**\n     *\n     * Detect whenever the hands over coordinate is inside the rectangle.\n     *\n     * @param {Number/draw2d.geo.Point} iX\n     * @param {Number} iY\n     * @returns {Boolean}\n     */\n    hitTest: function (iX, iY) {\n      if (iX instanceof draw2d.geo.Point) {\n        iY = iX.y;\n        iX = iX.x;\n      }\n      let iX2 = this.x + this.getWidth();\n      let iY2 = this.y + this.getHeight();\n      return (iX >= this.x && iX <= iX2 && iY >= this.y && iY <= iY2);\n    },\n\n    /**\n     *\n     * return true if this rectangle inside the hand over rectangle\n     *\n     *\n     * @param {draw2d.geo.Rectangle} rect\n     * @returns {Boolean}\n     */\n    isInside: function (rect) {\n      return rect.hitTest(this.getTopLeft())\n        && rect.hitTest(this.getTopRight())\n        && rect.hitTest(this.getBottomLeft())\n        && rect.hitTest(this.getBottomRight());\n    },\n\n    /**\n     *\n     * return true if this rectangle contains the hand over rectangle.\n     *\n     *\n     * @param {draw2d.geo.Rectangle} rect\n     * @returns {Boolean}\n     * @since 4.7.2\n     */\n    contains: function (rect) {\n      return this.hitTest(rect.getTopLeft())\n        && this.hitTest(rect.getTopRight())\n        && this.hitTest(rect.getBottomLeft())\n        && this.hitTest(rect.getBottomRight());\n    },\n\n    /**\n     *\n     * checks whenever the rectangles has an intersection.\n     *\n     * @param {draw2d.geo.Rectangle} rect\n     * @returns {Boolean}\n     */\n    intersects: function (rect) {\n      let x11 = rect.x,\n        y11 = rect.y,\n        x12 = rect.x + rect.w,\n        y12 = rect.y + rect.h,\n        x21 = this.x,\n        y21 = this.y,\n        x22 = this.x + this.w,\n        y22 = this.y + this.h;\n\n      let x_overlap = Math.max(0, Math.min(x12, x22) - Math.max(x11, x21));\n      let y_overlap = Math.max(0, Math.min(y12, y22) - Math.max(y11, y21));\n\n      return x_overlap * y_overlap !== 0;\n    },\n\n    /**\n     * Merge this rectangle with the given one.\n     *\n     * @param {draw2d.geo.Rectangle} rect\n     * @since 4.8.0\n     * @returns  {this}\n     */\n    merge: function (rect) {\n      let r = Math.max(rect.getRight(), this.getRight());\n      let b = Math.max(rect.getBottom(), this.getBottom());\n\n      this.setPosition(Math.min(this.x, rect.x), Math.min(this.y, rect.y));\n\n      this.w = r - this.x;\n      this.h = b - this.y;\n\n      return this;\n    },\n\n    /**\n     *\n     * returns the intersection points with the given line if any exists\n     *\n     * @param {draw2d.geo.Point} start\n     * @param {draw2d.geo.Point} end\n     */\n    intersectionWithLine: function (start, end) {\n      let result = new draw2d.util.ArrayList();\n      let v = this.getVertices();\n      v.add(v.first());\n      let p1 = v.first();\n      let p2 = null;\n      for (let i = 1; i < 5; i++) {\n        p2 = v.get(i);\n        p1 = draw2d.shape.basic.Line.intersection(start, end, p1, p2);\n        if (p1 !== null) {\n          result.add(p1);\n        }\n        p1 = p2;\n      }\n      return result;\n    },\n\n    /**\n     *\n     * Returns a copy of this rectangle\n     *\n     *\n     * @returns {draw2d.geo.Rectangle}\n     * @since 5.6.0\n     */\n    clone: function () {\n      return new draw2d.geo.Rectangle(this.x, this.y, this.w, this.h);\n    },\n\n    /**\n     *\n     * converts the rectangle to JSON representation. required for the draw2d.io.Writer\n     *\n     * @returns {Object}\n     */\n    toJSON: function () {\n      return {\n        width: this.w,\n        height: this.h,\n        x: this.x,\n        y: this.y\n      };\n    }\n\n  });\n\n/**\n * ENUM for Direction\n */\ndraw2d.geo.Rectangle.DIRECTION_UP = 0;\ndraw2d.geo.Rectangle.DIRECTION_RIGHT = 1;\ndraw2d.geo.Rectangle.DIRECTION_DOWN = 2;\ndraw2d.geo.Rectangle.DIRECTION_LEFT = 3;\n\n","import draw2d from '../packages'\n\n\n/**\n * @class\n * Geometric utils functions used in ray, point and some routers.\n *\n * @author Andreas Herz\n */\ndraw2d.geo.Util = {\n\n  /**\n   *\n   * @param start {draw2d.geo.Point} start point of a line\n   * @param end  {draw2d.geo.Point} end point of a line\n   * @param distanceFromStart {Number} distance from the start point to extrapolate a new point\n   * @returns {{x: *, y: *}|*} a new point with the distance *distanceFromStart* from the start point\n   */\n    insetPoint: function (start, end, distanceFromStart) {\n      if (start.equals(end)) {\n        return start\n      }\n      let vx = start.x - end.x\n      let vy = start.y - end.y\n      let length = Math.sqrt(vx * vx + vy * vy)\n      let localDistance = Math.min(length / 2, distanceFromStart)\n      return {\n        x: end.x + vx / length * (length - localDistance),\n        y: end.y + vy / length * (length - localDistance)\n      }\n    }\n}\n","import draw2d from 'packages'\nmodule.exports = draw2d;\n\n\nimport raph from 'lib/raphael.exec.js'\nimport cl   from 'lib/Class.exec.js'\nimport path from 'lib/pathfinding.exec.js'\n\n\nrequire('./util/raphael_ext');\nrequire('./util/Polyfill');\nrequire('./util/Base64');\nrequire('./util/Debug');\n// require('./util/Color');\n\nrequire('./util/ArrayList');\nrequire('./util/SVGUtil');\n//require('./util/JSONUtil');\n//require('./util/UUID');\nrequire('./util/spline/Spline');\nrequire('./util/spline/CubicSpline');\nrequire('./util/spline/CatmullRomSpline');\nrequire('./util/spline/BezierSpline');\nrequire('./geo/PositionConstants');\nrequire('./geo/Point');\nrequire('./geo/Rectangle');\nrequire('./geo/Util');\nrequire('./geo/Ray');\nrequire('./geo/Line');\nrequire('./command/CommandType');\nrequire('./command/Command');\nrequire('./command/CommandCollection');\nrequire('./command/CommandStack');\nrequire('./command/CommandStackEvent');\nrequire('./command/CommandStackEventListener');\nrequire('./command/CommandMove');\nrequire('./command/CommandAttr');\nrequire('./command/CommandMoveLine');\nrequire('./command/CommandMoveConnection');\nrequire('./command/CommandMoveVertex');\nrequire('./command/CommandMoveVertices');\nrequire('./command/CommandResize');\nrequire('./command/CommandRotate');\nrequire('./command/CommandConnect');\nrequire('./command/CommandReconnect');\nrequire('./command/CommandDelete');\nrequire('./command/CommandDeleteGroup');\nrequire('./command/CommandAdd');\nrequire('./command/CommandGroup');\nrequire('./command/CommandUngroup');\nrequire('./command/CommandAddVertex');\nrequire('./command/CommandAssignFigure');\nrequire('./command/CommandBoundingBox');\nrequire('./command/CommandRemoveVertex');\nrequire('./command/CommandReplaceVertices');\nrequire('./layout/connection/ConnectionRouter');\nrequire('./layout/connection/DirectRouter');\nrequire('./layout/connection/RubberbandRouter');\nrequire('./layout/connection/VertexRouter');\nrequire('./layout/connection/ManhattanConnectionRouter');\nrequire('./layout/connection/ManhattanBridgedConnectionRouter');\nrequire('./layout/connection/InteractiveManhattanConnectionRouter');\nrequire('./layout/connection/CircuitConnectionRouter');\nrequire('./layout/connection/SplineConnectionRouter');\nrequire('./layout/connection/FanConnectionRouter');\nrequire('./layout/connection/MazeConnectionRouter');\nrequire('./layout/connection/MuteableManhattanConnectionRouter');\nrequire('./layout/connection/SketchConnectionRouter');\nrequire('./layout/mesh/MeshLayouter');\nrequire('./layout/mesh/ExplodeLayouter');\nrequire('./layout/mesh/ProposedMeshChange');\nrequire('./layout/locator/Locator');\nrequire('./layout/locator/PortLocator');\nrequire('./layout/locator/DraggableLocator');\nrequire('./layout/locator/SmartDraggableLocator');\nrequire('./layout/locator/XYAbsPortLocator');\nrequire('./layout/locator/XYRelPortLocator');\nrequire('./layout/locator/InputPortLocator');\nrequire('./layout/locator/OutputPortLocator');\nrequire('./layout/locator/ConnectionLocator');\nrequire('./layout/locator/ManhattanMidpointLocator');\nrequire('./layout/locator/PolylineMidpointLocator');\nrequire('./layout/locator/ParallelMidpointLocator');\nrequire('./layout/locator/TopLocator');\nrequire('./layout/locator/BottomLocator');\nrequire('./layout/locator/LeftLocator');\nrequire('./layout/locator/RightLocator');\nrequire('./layout/locator/CenterLocator');\nrequire('./policy/EditPolicy');\nrequire('./policy/canvas/CanvasPolicy');\nrequire('./policy/canvas/ZoomPolicy');\nrequire('./policy/canvas/WheelZoomPolicy');\nrequire('./policy/canvas/KeyboardPolicy');\nrequire('./policy/canvas/DefaultKeyboardPolicy');\nrequire('./policy/canvas/ExtendedKeyboardPolicy');\nrequire('./policy/canvas/SelectionPolicy');\nrequire('./policy/canvas/SingleSelectionPolicy');\nrequire('./policy/canvas/GhostMoveSelectionPolicy');\nrequire('./policy/canvas/PanningSelectionPolicy');\nrequire('./policy/canvas/BoundingboxSelectionPolicy');\nrequire('./policy/canvas/ReadOnlySelectionPolicy');\nrequire('./policy/canvas/DecorationPolicy');\nrequire('./policy/canvas/FadeoutDecorationPolicy');\nrequire('./policy/canvas/CoronaDecorationPolicy');\nrequire('./policy/canvas/SnapToEditPolicy');\nrequire('./policy/canvas/ShowDimetricGridEditPolicy');\nrequire('./policy/canvas/SnapToDimetricGridEditPolicy');\nrequire('./policy/canvas/ShowGridEditPolicy');\nrequire('./policy/canvas/SnapToGridEditPolicy');\nrequire('./policy/canvas/ShowDotEditPolicy');\nrequire('./policy/canvas/ShowChessboardEditPolicy');\nrequire('./policy/canvas/SnapToGeometryEditPolicy');\nrequire('./policy/canvas/SnapToVerticesEditPolicy');\nrequire('./policy/canvas/SnapToInBetweenEditPolicy');\nrequire('./policy/canvas/SnapToCenterEditPolicy');\nrequire('./policy/canvas/DropInterceptorPolicy');\nrequire('./policy/connection/ConnectionCreatePolicy');\nrequire('./policy/connection/ComposedConnectionCreatePolicy');\nrequire('./policy/connection/ClickConnectionCreatePolicy');\nrequire('./policy/connection/OrthogonalConnectionCreatePolicy');\nrequire('./policy/connection/DragConnectionCreatePolicy');\nrequire('./policy/figure/FigureEditPolicy');\nrequire('./policy/figure/DragDropEditPolicy');\nrequire('./policy/figure/RegionEditPolicy');\nrequire('./policy/figure/HorizontalEditPolicy');\nrequire('./policy/figure/VerticalEditPolicy');\nrequire('./policy/figure/SelectionPolicy');\nrequire('./policy/figure/SelectionFeedbackPolicy');\nrequire('./policy/figure/ResizeSelectionFeedbackPolicy');\nrequire('./policy/figure/RectangleSelectionFeedbackPolicy');\nrequire('./policy/figure/BigRectangleSelectionFeedbackPolicy');\nrequire('./policy/figure/RoundRectangleSelectionFeedbackPolicy');\nrequire('./policy/figure/BusSelectionFeedbackPolicy');\nrequire('./policy/figure/WidthSelectionFeedbackPolicy');\nrequire('./policy/figure/VBusSelectionFeedbackPolicy');\nrequire('./policy/figure/HBusSelectionFeedbackPolicy');\nrequire('./policy/figure/AntSelectionFeedbackPolicy');\nrequire('./policy/figure/GlowSelectionFeedbackPolicy');\nrequire('./policy/figure/SlimSelectionFeedbackPolicy');\nrequire('./policy/figure/VertexSelectionFeedbackPolicy');\nrequire('./policy/line/LineSelectionFeedbackPolicy');\nrequire('./policy/line/VertexSelectionFeedbackPolicy');\nrequire('./policy/line/OrthogonalSelectionFeedbackPolicy');\nrequire('./policy/port/PortFeedbackPolicy');\nrequire('./policy/port/ElasticStrapFeedbackPolicy');\nrequire('./policy/port/IntrusivePortsFeedbackPolicy');\nrequire('./Configuration');\nrequire('./HeadlessCanvas');\nrequire('./Canvas');\nrequire('./Selection');\nrequire('./Figure');\nrequire('./shape/node/Node');\nrequire('./VectorFigure');\nrequire('./shape/basic/Rectangle');\nrequire('./SetFigure');\nrequire('./SVGFigure');\nrequire('./shape/node/Hub');\nrequire('./shape/node/HorizontalBus');\nrequire('./shape/node/VerticalBus');\nrequire('./shape/node/Fulcrum');\nrequire('./shape/basic/Arc');\nrequire('./shape/basic/Oval');\nrequire('./shape/basic/Circle');\nrequire('./shape/basic/Label');\nrequire('./shape/basic/Text');\nrequire('./shape/basic/Line');\nrequire('./shape/basic/PolyLine');\nrequire('./shape/basic/Image');\nrequire('./shape/basic/Polygon');\nrequire('./shape/basic/Diamond');\nrequire('./shape/dimetric/Rectangle');\nrequire('./shape/composite/Composite');\nrequire('./shape/composite/StrongComposite');\nrequire('./shape/composite/Group');\nrequire('./shape/composite/Jailhouse');\nrequire('./shape/composite/WeakComposite');\nrequire('./shape/composite/Raft');\nrequire('./Connection');\nrequire('./VectorFigure');\nrequire('./ResizeHandle');\nrequire('./shape/basic/LineResizeHandle');\nrequire('./shape/basic/LineStartResizeHandle');\nrequire('./shape/basic/LineEndResizeHandle');\nrequire('./shape/basic/VertexResizeHandle');\nrequire('./shape/basic/GhostVertexResizeHandle');\nrequire('./Port');\nrequire('./InputPort');\nrequire('./OutputPort');\nrequire('./HybridPort');\nrequire('./layout/anchor/ConnectionAnchor');\nrequire('./layout/anchor/ChopboxConnectionAnchor');\nrequire('./layout/anchor/FanConnectionAnchor');\nrequire('./layout/anchor/ShortesPathConnectionAnchor');\nrequire('./layout/anchor/CenterEdgeConnectionAnchor');\nrequire('./shape/arrow/CalligrapherArrowLeft');\nrequire('./shape/arrow/CalligrapherArrowDownLeft');\nrequire('./shape/node/Start');\nrequire('./shape/node/End');\nrequire('./shape/node/Between');\nrequire('./shape/note/PostIt');\nrequire('./shape/flowchart/Document');\nrequire('./shape/widget/Widget');\nrequire('./shape/widget/Slider');\nrequire('./shape/diagram/Diagram');\nrequire('./shape/diagram/Pie');\nrequire('./shape/diagram/Sparkline');\nrequire('./shape/analog/OpAmp');\nrequire('./shape/analog/ResistorBridge');\nrequire('./shape/analog/ResistorVertical');\nrequire('./shape/analog/VoltageSupplyHorizontal');\nrequire('./shape/analog/VoltageSupplyVertical');\nrequire('./shape/layout/Layout');\nrequire('./shape/layout/HorizontalLayout');\nrequire('./shape/layout/VerticalLayout');\nrequire('./shape/layout/TableLayout');\nrequire('./shape/layout/FlexGridLayout');\nrequire('./shape/layout/StackLayout');\nrequire('./shape/icon/Icon');\nrequire('./shape/icon/Thunder');\nrequire('./shape/icon/Snow');\nrequire('./shape/icon/Hail');\nrequire('./shape/icon/Rain');\nrequire('./shape/icon/Cloudy');\nrequire('./shape/icon/Sun');\nrequire('./shape/icon/Undo');\nrequire('./shape/icon/Detour');\nrequire('./shape/icon/Merge');\nrequire('./shape/icon/Split');\nrequire('./shape/icon/Fork');\nrequire('./shape/icon/ForkAlt');\nrequire('./shape/icon/Exchange');\nrequire('./shape/icon/Shuffle');\nrequire('./shape/icon/Refresh');\nrequire('./shape/icon/Ccw');\nrequire('./shape/icon/Acw');\nrequire('./shape/icon/Contract');\nrequire('./shape/icon/Expand');\nrequire('./shape/icon/Stop');\nrequire('./shape/icon/End');\nrequire('./shape/icon/Start');\nrequire('./shape/icon/Ff');\nrequire('./shape/icon/Rw');\nrequire('./shape/icon/ArrowRight');\nrequire('./shape/icon/ArrowLeft');\nrequire('./shape/icon/ArrowUp');\nrequire('./shape/icon/ArrowDown');\nrequire('./shape/icon/ArrowLeft2');\nrequire('./shape/icon/ArrowRight2');\nrequire('./shape/icon/Smile2');\nrequire('./shape/icon/Smile');\nrequire('./shape/icon/Alarm');\nrequire('./shape/icon/Clock');\nrequire('./shape/icon/StopWatch');\nrequire('./shape/icon/History');\nrequire('./shape/icon/Future');\nrequire('./shape/icon/GlobeAlt2');\nrequire('./shape/icon/GlobeAlt');\nrequire('./shape/icon/Globe');\nrequire('./shape/icon/Warning');\nrequire('./shape/icon/Code');\nrequire('./shape/icon/Pensil');\nrequire('./shape/icon/Pen');\nrequire('./shape/icon/Plus');\nrequire('./shape/icon/Minus');\nrequire('./shape/icon/TShirt');\nrequire('./shape/icon/Sticker');\nrequire('./shape/icon/Page2');\nrequire('./shape/icon/Page');\nrequire('./shape/icon/Landscape1');\nrequire('./shape/icon/Landscape2');\nrequire('./shape/icon/Plugin');\nrequire('./shape/icon/Bookmark');\nrequire('./shape/icon/Hammer');\nrequire('./shape/icon/Users');\nrequire('./shape/icon/User');\nrequire('./shape/icon/Customer');\nrequire('./shape/icon/Employee');\nrequire('./shape/icon/Anonymous');\nrequire('./shape/icon/Skull');\nrequire('./shape/icon/Mail');\nrequire('./shape/icon/Picture');\nrequire('./shape/icon/Bubble');\nrequire('./shape/icon/CodeTalk');\nrequire('./shape/icon/Talkq');\nrequire('./shape/icon/Talke');\nrequire('./shape/icon/Home');\nrequire('./shape/icon/Lock');\nrequire('./shape/icon/Clip');\nrequire('./shape/icon/Star');\nrequire('./shape/icon/StarOff');\nrequire('./shape/icon/Star2');\nrequire('./shape/icon/Star2Off');\nrequire('./shape/icon/Star3');\nrequire('./shape/icon/Star3Off');\nrequire('./shape/icon/Chat');\nrequire('./shape/icon/Quote');\nrequire('./shape/icon/Gear2');\nrequire('./shape/icon/Gear');\nrequire('./shape/icon/Wrench');\nrequire('./shape/icon/Wrench2');\nrequire('./shape/icon/Wrench3');\nrequire('./shape/icon/ScrewDriver');\nrequire('./shape/icon/HammerAndScrewDriver');\nrequire('./shape/icon/Magic');\nrequire('./shape/icon/Download');\nrequire('./shape/icon/View');\nrequire('./shape/icon/Noview');\nrequire('./shape/icon/Cloud');\nrequire('./shape/icon/Cloud2');\nrequire('./shape/icon/CloudDown');\nrequire('./shape/icon/CloudUp');\nrequire('./shape/icon/Location');\nrequire('./shape/icon/Volume0');\nrequire('./shape/icon/Volume1');\nrequire('./shape/icon/Volume2');\nrequire('./shape/icon/Volume3');\nrequire('./shape/icon/Key');\nrequire('./shape/icon/Ruler');\nrequire('./shape/icon/Power');\nrequire('./shape/icon/Unlock');\nrequire('./shape/icon/Flag');\nrequire('./shape/icon/Tag');\nrequire('./shape/icon/Search');\nrequire('./shape/icon/ZoomOut');\nrequire('./shape/icon/ZoomIn');\nrequire('./shape/icon/Cross');\nrequire('./shape/icon/Check');\nrequire('./shape/icon/Settings');\nrequire('./shape/icon/SettingsAlt');\nrequire('./shape/icon/Feed');\nrequire('./shape/icon/Bug');\nrequire('./shape/icon/Link');\nrequire('./shape/icon/Calendar');\nrequire('./shape/icon/Picker');\nrequire('./shape/icon/No');\nrequire('./shape/icon/CommandLine');\nrequire('./shape/icon/Photo');\nrequire('./shape/icon/Printer');\nrequire('./shape/icon/Export');\nrequire('./shape/icon/Import');\nrequire('./shape/icon/Run');\nrequire('./shape/icon/Magnet');\nrequire('./shape/icon/NoMagnet');\nrequire('./shape/icon/ReflectH');\nrequire('./shape/icon/ReflectV');\nrequire('./shape/icon/Resize2');\nrequire('./shape/icon/Rotate');\nrequire('./shape/icon/Connect');\nrequire('./shape/icon/Disconnect');\nrequire('./shape/icon/Folder');\nrequire('./shape/icon/Man');\nrequire('./shape/icon/Woman');\nrequire('./shape/icon/People');\nrequire('./shape/icon/Parent');\nrequire('./shape/icon/Notebook');\nrequire('./shape/icon/Diagram');\nrequire('./shape/icon/BarChart');\nrequire('./shape/icon/PieChart');\nrequire('./shape/icon/LineChart');\nrequire('./shape/icon/Apps');\nrequire('./shape/icon/Locked');\nrequire('./shape/icon/Ppt');\nrequire('./shape/icon/Lab');\nrequire('./shape/icon/Umbrella');\nrequire('./shape/icon/Dry');\nrequire('./shape/icon/Ipad');\nrequire('./shape/icon/Iphone');\nrequire('./shape/icon/Jigsaw');\nrequire('./shape/icon/Lamp');\nrequire('./shape/icon/Lamp_alt');\nrequire('./shape/icon/Video');\nrequire('./shape/icon/Palm');\nrequire('./shape/icon/Fave');\nrequire('./shape/icon/Help');\nrequire('./shape/icon/Crop');\nrequire('./shape/icon/BioHazard');\nrequire('./shape/icon/WheelChair');\nrequire('./shape/icon/Mic');\nrequire('./shape/icon/MicMute');\nrequire('./shape/icon/IMac');\nrequire('./shape/icon/Pc');\nrequire('./shape/icon/Cube');\nrequire('./shape/icon/FullCube');\nrequire('./shape/icon/Font');\nrequire('./shape/icon/Trash');\nrequire('./shape/icon/NewWindow');\nrequire('./shape/icon/DockRight');\nrequire('./shape/icon/DockLeft');\nrequire('./shape/icon/DockBottom');\nrequire('./shape/icon/DockTop');\nrequire('./shape/icon/Pallete');\nrequire('./shape/icon/Cart');\nrequire('./shape/icon/Glasses');\nrequire('./shape/icon/Package');\nrequire('./shape/icon/Book');\nrequire('./shape/icon/Books');\nrequire('./shape/icon/Icons');\nrequire('./shape/icon/List');\nrequire('./shape/icon/Db');\nrequire('./shape/icon/Paper');\nrequire('./shape/icon/TakeOff');\nrequire('./shape/icon/Landing');\nrequire('./shape/icon/Plane');\nrequire('./shape/icon/Phone');\nrequire('./shape/icon/HangUp');\nrequire('./shape/icon/SlideShare');\nrequire('./shape/icon/Twitter');\nrequire('./shape/icon/TwitterBird');\nrequire('./shape/icon/Skype');\nrequire('./shape/icon/Windows');\nrequire('./shape/icon/Apple');\nrequire('./shape/icon/Linux');\nrequire('./shape/icon/NodeJs');\nrequire('./shape/icon/JQuery');\nrequire('./shape/icon/Sencha');\nrequire('./shape/icon/Vim');\nrequire('./shape/icon/InkScape');\nrequire('./shape/icon/Aumade');\nrequire('./shape/icon/Firefox');\nrequire('./shape/icon/Ie');\nrequire('./shape/icon/Ie9');\nrequire('./shape/icon/Opera');\nrequire('./shape/icon/Chrome');\nrequire('./shape/icon/Safari');\nrequire('./shape/icon/LinkedIn');\nrequire('./shape/icon/Flickr');\nrequire('./shape/icon/GitHub');\nrequire('./shape/icon/GitHubAlt');\nrequire('./shape/icon/Raphael');\nrequire('./shape/icon/GRaphael');\nrequire('./shape/icon/Svg');\nrequire('./shape/icon/Usb');\nrequire('./shape/icon/Ethernet');\nrequire('./shape/pert/Activity');\nrequire('./shape/pert/Start');\nrequire('./shape/state/Start');\nrequire('./shape/state/End');\nrequire('./shape/state/State');\nrequire('./shape/state/Connection');\nrequire('./ui/LabelEditor');\nrequire('./ui/LabelInplaceEditor');\nrequire('./decoration/connection/Decorator');\nrequire('./decoration/connection/ArrowDecorator');\nrequire('./decoration/connection/DiamondDecorator');\nrequire('./decoration/connection/CircleDecorator');\nrequire('./decoration/connection/BarDecorator');\nrequire('./io/Reader');\nrequire('./io/Writer');\nrequire('./io/svg/Writer');\nrequire('./io/png/Writer');\nrequire('./io/json/Writer');\nrequire('./io/json/Reader');\n","import draw2d from '../packages'\n\n/**\n * @class\n * Template class for general import of a document into the canvas.\n *\n * @author andreas Herz\n */\ndraw2d.io.Reader = Class.extend(\n  /** @lends draw2d.io.Reader */\n  {\n\n    init: function(){\n\n    },\n\n    /**\n     *\n     *\n     * Restore the canvas from a given String.\n     *\n     * @param {draw2d.Canvas} canvas the canvas to restore\n     * @param {Object} document the document to read\n     *\n     * @returns {draw2d.util.ArrayList} the added elements\n     * @template\n     */\n    unmarshal: function(canvas, document){\n        // do nothing. Inherit classes must implement this method\n    }\n\n});\n","import draw2d from '../packages'\n\n/**\n * @class\n *\n * Serialize the canvas to an external format. This is only a template/interface class.\n * Inherit classes must implement the export format.\n *\n * @author Andreas Herz\n */\ndraw2d.io.Writer = Class.extend(\n  /** @lends draw2d.io.Writer */\n\n  {\n    init: function(){\n    },\n\n    /**\n     * \n     * Export the content to the implemented data format. Inherit class implements\n     * content specific writer.\n     * <br>\n     * <br>\n     *\n     * Method signature has been changed from version 2.10.1 to version 3.0.0.<br>\n     * The parameter <b>resultCallback</b> is required and new. The method calls\n     * the callback instead of return the result.\n     *\n     * @template\n     * @since 2.10.1\n     * @param {draw2d.Canvas} canvas\n     * @param {Function} resultCallback the method to call on success. The first argument is the result object, the second the base64 content of a corresponding file\n     * @returns {Object}\n     *\n     */\n    marshal: function(canvas, resultCallback){\n        // I change the API signature from version 2.10.1 to 3.0.0. Throw an exception\n        // if any application not care about this changes.\n        if(typeof resultCallback !== \"function\"){\n            throw \"Writer.marshal method signature has been change from version 2.10.1 to version 3.0.0. Please consult the API documentation about this issue.\";\n        }\n\n\n        resultCallback(\"\", \"\");\n    },\n\n    /**\n     * \n     * utility method to format a given XML string.\n     *\n     * @param xml\n     * @returns {String}\n     */\n    formatXml: function(xml) {\n        let formatted = '';\n        let reg = new RegExp(\"(>)(<)(\\/*)\",\"g\");\n        xml = xml.replace(reg, '$1\\r\\n$2$3');\n        let pad = 0;\n        xml.split('\\r\\n').forEach(function(node) {\n            let indent = 0;\n            if (node.match( new RegExp(\".+<\\/\\w[^>]*>$\") )) {\n                indent = 0;\n            } else if (node.match( new RegExp(\"^<\\/\\w\") )) {\n                if (pad != 0) {\n                    pad -= 1;\n                }\n            } else if (node.match( new RegExp(\"^<\\w[^>]*[^\\/]>.*$\") )) {\n                indent = 1;\n            } else {\n                indent = 0;\n            }\n\n            var padding = '';\n            for (var i = 0; i < pad; i++) {\n                padding += '  ';\n            }\n\n            formatted += padding + node + '\\r\\n';\n            pad += indent;\n        });\n\n        return formatted;\n    }\n});\n","import draw2d from '../../packages'\n\n/**\n * @class\n *\n * Read a JSON data and import them into the canvas. The JSON must be generated with the\n * {@link draw2d.io.json.Writer}.\n *\n * @example\n *\n *     // Load a standard draw2d JSON object into the canvas\n *     //\n *     let jsonDocument =\n *         [\n *          {\n *             \"type\": \"draw2d.shape.basic.Oval\",\n *             \"id\": \"5b4c74 b0-96d1-1aa3-7eca-bbeaed5fffd7\",\n *             \"x\": 237,\n *             \"y\": 236,\n *             \"width\": 93,\n *             \"height\": 38\n *           },\n *           {\n *             \"type\": \"draw2d.shape.basic.Rectangle\",\n *             \"id\": \"354fa3b9-a834-0221-2009-abc2d6bd852a\",\n *             \"x\": 225,\n *             \"y\": 97,\n *             \"width\": 201,\n *             \"height\": 82,\n *             \"radius\": 2\n *           }\n *         ];\n *     // unmarshal the JSON document into the canvas\n *     // (load)\n *     let reader = new draw2d.io.json.Reader();\n *     reader.unmarshal(canvas, jsonDocument);\n *\n *\n * @author Andreas Herz\n * @extends draw2d.io.Reader\n */\ndraw2d.io.json.Reader = draw2d.io.Reader.extend(\n  /** @lends draw2d.io.json.Reader.prototype */\n  {\n    NAME: \"draw2d.io.json.Reader\",\n\n    init: function () {\n      this._super();\n    },\n\n    /**\n     *\n     *\n     * Restore the canvas from a given JSON object.\n     *\n     * @param {draw2d.Canvas} canvas the canvas to restore\n     * @param {Object|String} json the json object to load.\n     */\n    unmarshal: function (canvas, json) {\n      let result = new draw2d.util.ArrayList();\n\n      if (typeof json === \"string\") {\n        json = JSON.parse(json);\n      }\n\n      let node = null;\n      json.forEach((element) => {\n        try {\n          let o = this.createFigureFromElement(element) || this.createFigureFromType(element.type);\n          let source = null;\n          let target = null;\n          for (let i in element) {\n            let val = element[i];\n            if (i === \"source\") {\n              node = canvas.getFigure(val.node);\n              if (node === null) {\n                throw \"Source figure with id '\" + val.node + \"' not found\";\n              }\n              source = node.getPort(val.port);\n              if (source === null) {\n                throw \"Unable to find source port '\" + val.port + \"' at figure '\" + val.node + \"' to unmarschal '\" + element.type + \"'\";\n              }\n            } else if (i === \"target\") {\n              node = canvas.getFigure(val.node);\n              if (node === null) {\n                throw \"Target figure with id '\" + val.node + \"' not found\";\n              }\n              target = node.getPort(val.port);\n              if (target === null) {\n                throw \"Unable to find target port '\" + val.port + \"' at figure '\" + val.node + \"' to unmarschal '\" + element.type + \"'\";\n              }\n            }\n          }\n          if (source !== null && target !== null) {\n            // don't change the order or the source/target set.\n            // TARGET must always be the second one because some applications needs the \"source\"\n            // port in the \"connect\" event of the target.\n            o.setSource(source);\n            o.setTarget(target);\n          }\n          o.setPersistentAttributes(element);\n          canvas.add(o);\n          result.add(o);\n        } catch (exc) {\n          debug.error(element, \"Unable to instantiate figure type '\" + element.type + \"' with id '\" + element.id + \"' during unmarshal by \" + this.NAME + \". Skipping figure..\");\n          debug.error(exc);\n          debug.warn(element);\n        }\n      });\n\n      // restore group assignment\n      //\n      json.forEach(element => {\n        if (typeof element.composite !== \"undefined\") {\n          let figure = canvas.getFigure(element.id);\n          if (figure === null) {\n            figure = canvas.getLine(element.id);\n          }\n          let group = canvas.getFigure(element.composite);\n          group.assignFigure(figure);\n        }\n      });\n\n      // recalculate all crossings and repaint the connections with\n      // possible crossing decoration\n      canvas.calculateConnectionIntersection();\n      canvas.getLines().each((i, line) => {\n        line.svgPathString = null;\n        line.repaint();\n      });\n      canvas.linesToRepaintAfterDragDrop = canvas.getLines().clone();\n\n      canvas.showDecoration();\n\n      return result;\n    },\n\n    /**\n     *\n     * Factory method to create an instance of the given element type.\n     *\n     * @param {String} type\n     * @returns {draw2d.Figure}\n     */\n    createFigureFromType: function (type) {\n      return eval(\"new \" + type + \"()\");\n    },\n\n    /**\n     *\n     * Factory method to create an instance of the given element.\n     *\n     * @param {Object} element\n     * @returns {draw2d.Figure}\n     */\n    createFigureFromElement: function createFigureFromElement(element) {\n      return null;\n    }\n  });\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Serialize the canvas document into a JSON object which can be read from the corresponding\n * {@link draw2d.io.json.Reader}.\n *\n *     // Create a JSON writer and convert it into a JSON-String representation.\n *     //\n *     var writer = new draw2d.io.json.Writer();\n *     writer.marshal(canvas, function(json){\n *        // convert the json object into string representation\n *        var jsonTxt = JSON.stringify(json,null,2);\n *     \n *        // insert the json string into a DIV for preview or post\n *        // it via ajax to the server....\n *        $(\"#json\").text(jsonTxt);\n *     \n *     });\n *\n *\n *\n * @author Andreas Herz\n * @extends draw2d.io.Writer\n */\n\ndraw2d.io.json.Writer = draw2d.io.Writer.extend(\n  /** @lends draw2d.io.json.Writer */\n  {\n\n    init: function () {\n      this._super();\n    },\n\n    /**\n     *\n     * Export the content to the implemented data format. Inherit class implements\n     * content specific writer.\n     * <br>\n     * <br>\n     *\n     * Method signature has been changed from version 2.10.1 to version 3.0.0.<br>\n     * The parameter <b>resultCallback</b> is required and new. The method calls\n     * the callback instead of return the result.\n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Function} resultCallback the method to call on success. The first argument is the result object, the second the base64 representation of the file content\n     * @param {Object} resultCallback.json  the canvas document as JSON object\n     * @param {String} resultCallback.base64  the canvas document as base encoded JSON\n     */\n    marshal: function (canvas, resultCallback) {\n      // I change the API signature from version 2.10.1 to 3.0.0. Throw an exception\n      // if any application not care about this changes.\n      if (typeof resultCallback !== \"function\") {\n        throw \"Writer.marshal method signature has been change from version 2.10.1 to version 3.0.0. Please consult the API documentation about this issue.\";\n      }\n\n      var result = [];\n\n      canvas.getFigures().each(function (i, figure) {\n        result.push(figure.getPersistentAttributes());\n      });\n\n      canvas.getLines().each(function (i, element) {\n        result.push(element.getPersistentAttributes());\n      });\n\n      var base64Content = draw2d.util.Base64.encode(JSON.stringify(result, null, 2));\n\n      resultCallback(result, base64Content);\n    }\n  });\n","import draw2d from '../../packages'\nconst canvg = require('canvg-browser')\n\n/**\n * @class\n *\n * Converts the canvas document into a PNG Image.\n *\n * @example\n *    // example how to create a PNG image and set an\n *    // image src attribute.\n *    //\n *    var writer = new draw2d.io.png.Writer();\n *    writer.marshal(canvas, function(png){\n *        $(\"#preview\").attr(\"src\",png);\n *    });\n *\n * @author Andreas Herz\n * @extends draw2d.io.Writer\n */\ndraw2d.io.png.Writer = draw2d.io.Writer.extend(\n  /** @lends draw2d.io.png.Writer */\n  {\n\n    init: function () {\n      this._super()\n    },\n\n    /**\n     *\n     * Export the content to a PNG image. The result can be set as <b>src=\"....\"</b> because\n     * the result is encoded as data source url <b>data:image/png;base64....</b>\n     * <br>\n     * <br>\n     *\n     * Method signature has been changed from version 2.10.1 to version 3.0.0.<br>\n     * The parameter <b>resultCallback</b> is required and new. The method calls\n     * the callback instead of return the result.\n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Function} resultCallback the method to call on success. The first argument is the dataUrl, the second is the base64 formated png image\n     * @param {String} resultCallback.img  The image as data source url <b>data:image/png;base64....</b>\n     * @param {String} resultCallback.base64  the image encoded in base64\n     * @param {draw2d.geo.Rectangle} cropBoundingBox optional cropping/clipping bounding box\n     */\n    marshal: function (canvas, resultCallback, cropBoundingBox) {\n      // I change the API signature from version 2.10.1 to 3.0.0. Throw an exception\n      // if any application not care about this changes.\n      if (typeof resultCallback !== \"function\") {\n        throw \"Writer.marshal method signature has been change from version 2.10.1 to version 3.0.0. Please consult the API documentation about this issue.\";\n      }\n\n\n      var svg = \"\"\n\n      // the png.Writer can create Snapshots of a singel figure too.\n      // Didn't work in IE <10\n      // @status beta\n      // @since 5.5.0\n      if (canvas instanceof draw2d.Figure) {\n        var origPos = canvas.getPosition()\n        canvas.setPosition(1, 1)\n        svg = \"<svg xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" >\"\n          + canvas.shape.node.outerHTML\n          + \"</svg>\";\n        canvas.setPosition(origPos);\n        canvas.initialWidth = canvas.getWidth() + 2\n        canvas.initialHeight = canvas.getHeight() + 2\n      }\n      // create a snapshot of a complete canvas\n      //\n      else {\n        canvas.hideDecoration()\n        svg = canvas.getHtmlContainer().html().replace(/>\\s+/g, \">\").replace(/\\s+</g, \"<\")\n\n        // add missing namespace for images in SVG if missing\n        // depends on raphaelJS version\n        if (svg.indexOf(\"http://www.w3.org/1999/xlink\") === -1) {\n          svg = svg.replace(\"<svg \", \"<svg xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" \")\n        }\n      }\n\n      // required for IE9 support.\n      // The following table contains ready-to-use conditions to detec IE Browser versions\n      //\n      // IE versions     Condition to check for\n      // ------------------------------------------------------------\n      // 10 or older     document.all\n      // 9 or older      document.all && !window.atob\n      // 8 or older      document.all && !document.addEventListener\n      // 7 or older      document.all && !document.querySelector\n      // 6 or older      document.all && !window.XMLHttpRequest\n      // 5.x             document.all && !document.compatMode\n      if (document.all) {\n        svg = svg.replace(/xmlns=\\\"http:\\/\\/www\\.w3\\.org\\/2000\\/svg\\\"/, '')\n      }\n\n      let canvasDomNode = $('<canvas id=\"canvas_png_export_for_draw2d\" style=\"display:none\"></canvas>')\n      $('body').append(canvasDomNode)\n      let fullSizeCanvas = $(\"#canvas_png_export_for_draw2d\")[0]\n      fullSizeCanvas.width = canvas.initialWidth\n      fullSizeCanvas.height = canvas.initialHeight\n\n      canvg(\"canvas_png_export_for_draw2d\", svg, {\n        ignoreMouse: true,\n        ignoreAnimation: true,\n        renderCallback: function () {\n          try {\n            if (canvas instanceof draw2d.Canvas)\n              canvas.showDecoration();\n\n            if (typeof cropBoundingBox !== \"undefined\") {\n              let sourceX = cropBoundingBox.x;\n              let sourceY = cropBoundingBox.y;\n              let sourceWidth = cropBoundingBox.w;\n              let sourceHeight = cropBoundingBox.h;\n\n              let croppedCanvas = document.createElement('canvas');\n              croppedCanvas.width = sourceWidth;\n              croppedCanvas.height = sourceHeight;\n\n              croppedCanvas.getContext(\"2d\").drawImage(fullSizeCanvas, sourceX, sourceY, sourceWidth, sourceHeight, 0, 0, sourceWidth, sourceHeight);\n\n              let dataUrl = croppedCanvas.toDataURL(\"image/png\");\n              let base64Image = dataUrl.replace(\"data:image/png;base64,\", \"\");\n              resultCallback(dataUrl, base64Image);\n            } else {\n              let img = fullSizeCanvas.toDataURL(\"image/png\");\n              resultCallback(img, img.replace(\"data:image/png;base64,\", \"\"));\n            }\n          } finally {\n            canvasDomNode.remove()\n          }\n        }\n      })\n    }\n  })\n","import draw2d from '../../packages'\n\n/**\n * @class\n *\n * Serialize the canvas document into a SVG document.\n *\n *     // Create a SVG writer and convert the canvas into a SVG document.\n *     //\n *     var writer = new draw2d.io.svg.Writer();\n *     writer.marshal(canvas, function(svg){\n *         // insert the svg string into a DIV for preview or post\n *         // it via ajax to the server....\n *         $(\"#svg\").text(svg);\n *     });\n *\n *\n *\n * @author Andreas Herz\n * @extends draw2d.io.Writer\n */\ndraw2d.io.svg.Writer = draw2d.io.Writer.extend(\n  /** @lends draw2d.io.svg.Writer */\n  {\n    init: function () {\n      this._super()\n    },\n\n    /**\n     *\n     * Export the content of the canvas into SVG. The SVG document can be loaded with Inkscape or any other SVG Editor.\n     * <br>\n     * <br>\n     *\n     * Method signature has been changed from version 2.10.1 to version 3.0.0.<br>\n     * The parameter <b>resultCallback</b> is required and new. The method calls\n     * the callback instead of return the result.\n     *\n     *\n     * @param {draw2d.Canvas} canvas the canvas to marshal\n     * @param {Function} callback the method to call on success. The first argument is the SVG document\n     * @param {String} callback.svg  the SVG document\n     * @param {String} callback.base64  the SVG document encoded in base64\n     */\n    marshal: function (canvas, callback) {\n      // I change the API signature from version 2.10.1 to 3.0.0. Throw an exception\n      // if any application not care about this changes.\n      if (typeof callback !== \"function\") {\n        throw \"Writer.marshal method signature has been change from version 2.10.1 to version 3.0.0. Please consult the API documentation about this issue.\";\n      }\n\n      let s = canvas.getPrimarySelection()\n      canvas.setCurrentSelection(null)\n      let svg = canvas.getHtmlContainer().html()\n        .replace(/>\\s+/g, \">\")\n        .replace(/\\s+</g, \"<\")\n      svg = this.formatXml(svg)\n      svg = svg.replace(/<desc>.*<\\/desc>/g, \"<desc>Create with draw2d JS graph library and RaphaelJS</desc>\")\n\n      canvas.setCurrentSelection(s)\n\n      let base64Content = draw2d.util.Base64.encode(svg)\n      callback(svg, base64Content)\n    }\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * The CenterEdgeConnectionAnchor's location is found by calculating the intersection of a\n * line drawn from the center point of its owner's box (the parent of the\n * connection port) to a reference point on that box. A Connection using the\n * ChopBoxAnchor will be oriented such that they point to their port owner's\n * center.\n *\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.layout.anchor.ConnectionAnchor\n */\n\ndraw2d.layout.anchor.CenterEdgeConnectionAnchor = draw2d.layout.anchor.ConnectionAnchor.extend(\n  /** @lends draw2d.layout.anchor.CenterEdgeConnectionAnchor.prototype */\n  {\n\n  NAME: \"draw2d.layout.anchor.CenterEdgeConnectionAnchor\",\n\n  /**\n   *\n   * @param {draw2d.Figure} [owner] the figure to use for the anchor calculation\n   */\n  init: function (owner) {\n    this._super(owner)\n  },\n\n  /**\n   * \n   *\n   * Returns the location where the Connection should be anchored in\n   * absolute coordinates. The anchor may use the given reference\n   * Point to calculate this location.\n   *\n   * @param {draw2d.geo.Point} ref The reference Point in absolute coordinates\n   * @param {draw2d.Connection} [inquiringConnection] the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point} The anchor's location\n   */\n  getLocation: function (ref, inquiringConnection) {\n    let r = this.getOwner().getParent().getBoundingBox()\n\n    let dir = r.getDirection(ref)\n    let center = r.getCenter()\n\n    switch (dir) {\n      case 0:\n        center.y = r.y\n        break\n      case 1:\n        center.x = r.x + r.w\n        break\n      case 2:\n        center.y = r.y + r.h\n        break\n      case 3:\n        center.x = r.x\n    }\n\n    return center\n  },\n\n  /**\n   * Returns the bounds of this Anchor's owner. Subclasses can\n   * override this method to adjust the box. Maybe you return the box\n   * of the port parent (the parent figure)\n   *\n   * @returns {draw2d.geo.Rectangle} The bounds of this Anchor's owner\n   */\n  getBox: function () {\n    return this.getOwner().getParent().getBoundingBox()\n  },\n\n  /**\n   * \n   *\n   * Returns the bounds of this Anchor's owner. Subclasses can\n   * override this method to adjust the box. Maybe you return the box\n   * of the port parent (the parent figure)\n   *\n   * @param {draw2d.Connection} [inquiringConnection] the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point} The bounds of this Anchor's owner\n   */\n  getReferencePoint: function (inquiringConnection) {\n    return this.getBox().getCenter()\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * The ChopboxAnchor's location is found by calculating the intersection of a\n * line drawn from the center point of its owner's box (the parent of the\n * connection port) to a reference point on that box. A Connection using the\n * ChopBoxAnchor will be oriented such that they point to their port owner's\n * center.\n *\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.layout.anchor.ConnectionAnchor\n */\n\ndraw2d.layout.anchor.ChopboxConnectionAnchor = draw2d.layout.anchor.ConnectionAnchor.extend(\n  /** @lends draw2d.layout.anchor.ChopboxConnectionAnchor.prototype */\n  {\n\n  NAME: \"draw2d.layout.anchor.ChopboxConnectionAnchor\",\n\n  /**\n   *\n   * @param {draw2d.Figure} owner the figure to use for the anchor calculation\n   */\n  init: function (owner) {\n    this._super(owner)\n  },\n\n  /**\n   *\n   *\n   * Returns the location where the Connection should be anchored in\n   * absolute coordinates. The anchor may use the given reference\n   * Point to calculate this location.\n   *\n   * @param {draw2d.geo.Point} reference The reference Point in absolute coordinates\n   * @param {draw2d.Connection} [inquiringConnection] the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point} The anchor's location\n   */\n  getLocation: function (reference, inquiringConnection) {\n    let r = new draw2d.geo.Rectangle(0, 0)\n    r.setBounds(this.getBox())\n    r.translate(-1, -1)\n    r.resize(1, 1)\n\n    let center = r.getCenter()\n\n    if (r.isEmpty() || (reference.x === center.x && reference.y === center.y)) {\n      return center // This avoids divide-by-zero\n    }\n\n    let dx = reference.x - center.x\n    let dy = reference.y - center.y\n\n    // r.width, r.height, dx, and dy are guaranteed to be non-zero.\n    let scale = 0.5 / Math.max(Math.abs(dx) / r.w, Math.abs(dy) / r.h)\n\n    dx *= scale\n    dy *= scale\n    center.translate(dx, dy)\n\n    return center\n  },\n\n  /**\n   * Returns the bounds of this Anchor's owner. Subclasses can\n   * override this method to adjust the box. Maybe you return the box\n   * of the port parent (the parent figure)\n   *\n   * @returns {draw2d.geo.Rectangle} The bounds of this Anchor's owner\n   */\n  getBox: function () {\n    return this.getOwner().getParent().getBoundingBox()\n  },\n\n  /**\n   *\n   *\n   * Returns the reference point for this anchor in absolute coordinates. This might be used\n   * by another anchor to determine its own location.\n   *\n   * @param {draw2d.Connection} [inquiringConnection] the connection who ask for the location.\n   * @returns {draw2d.geo.Point} The bounds of this Anchor's owner\n   */\n  getReferencePoint: function (inquiringConnection) {\n    return this.getBox().getCenter()\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *  An object to which a {@link draw2d.Connection} will be anchored.\n *\n * @inheritable\n * @author Andreas Herz\n */\n\ndraw2d.layout.anchor.ConnectionAnchor = Class.extend(\n  /** @lends draw2d.layout.anchor.ConnectionAnchor.prototype */\n  {\n\n  NAME: \"draw2d.layout.anchor.ConnectionAnchor\",\n\n  /**\n   *\n   * @param {draw2d.Figure} owner the figure to use for the anchor calculation\n   */\n  init: function (owner) {\n    this.owner = owner\n  },\n\n  /**\n   * \n   * Returns the location where the Connection should be anchored in absolute coordinates.\n   * The anchor may use the given reference Point to calculate this location.\n   *\n   * @param {draw2d.geo.Point} reference the opposite reference point\n   * @param {draw2d.Connection} inquiringConnection the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point}\n   */\n  getLocation: function (reference, inquiringConnection) {\n    // return the center of the owner/port.\n    return this.getReferencePoint(inquiringConnection)\n  },\n\n  /**\n   * \n   * Returns the Figure that contains this ConnectionAnchor.\n   *\n   * @returns {draw2d.Figure} The Figure that contains this ConnectionAnchor\n   */\n  getOwner: function () {\n    return this.owner\n  },\n\n  /**\n   * \n   * Set the owner of the Anchor.\n   *\n   * @param {draw2d.Figure} owner the new owner of the anchor locator\n   */\n  setOwner: function (owner) {\n    if (typeof owner === \"undefined\") {\n      throw \"Missing parameter for 'owner' in ConnectionAnchor.setOwner\"\n    }\n    this.owner = owner\n  },\n\n  /**\n   * \n   * Returns the bounds of this Anchor's owner.  Subclasses can override this method\n   * to adjust the box. Maybe you return the box of the port parent (the parent figure)\n   *\n   * @returns {draw2d.geo.Rectangle} The bounds of this Anchor's owner\n   */\n  getBox: function () {\n    return this.getOwner().getAbsoluteBounds()\n  },\n\n  /**\n   * \n   * Returns the reference point for this anchor in absolute coordinates. This might be used\n   * by another anchor to determine its own location.\n   *\n   * @param {draw2d.Connection} [inquiringConnection] the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point} The reference Point\n   */\n  getReferencePoint: function (inquiringConnection) {\n    return this.getOwner().getAbsolutePosition()\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * The FanConnectionAnchor's location is found by calculating the intersection of a\n * line drawn from the center point of its owner's box (the parent of the\n * connection port) to a reference point on that box.\n * Additional the anchor resolves conflicts by spread the anchor if more than one\n * connection has the same reference point. <br>\n * In a case of a DirectRouter parallel connections are the result.\n *\n *\n * @inheritable\n * @author Andreas Herz\n * @since 4.6.0\n * @extends draw2d.layout.anchor.ConnectionAnchor\n */\n\ndraw2d.layout.anchor.FanConnectionAnchor = draw2d.layout.anchor.ConnectionAnchor.extend(\n  /** @lends draw2d.layout.anchor.FanConnectionAnchor.prototype */\n  {\n\n  NAME: \"draw2d.layout.anchor.FanConnectionAnchor\",\n\n  /**\n   *\n   * @param {draw2d.Figure} owner the figure to use for the anchor calculation\n   * @param {Number} [separation] the separation or fan distance between the concurrent/conflicting anchors\n   */\n  init: function (owner, separation) {\n    this._super(owner)\n\n    if (separation) {\n      this.separation = parseInt(separation)\n    }\n    else {\n      this.separation = 10\n    }\n  },\n\n  /**\n   * \n   *\n   * Returns the location where the Connection should be anchored in\n   * absolute coordinates. The anchor may use the given reference\n   * Point to calculate this location.\n   *\n   * @param {draw2d.geo.Point} reference The reference Point in absolute coordinates\n   * @param {draw2d.Connection} inquiringConnection the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point} The anchor's location\n   */\n  getLocation: function (reference, inquiringConnection) {\n\n    let r = new draw2d.geo.Rectangle(0, 0)\n    r.setBounds(this.getBox())\n    r.translate(-1, -1)\n    r.resize(1, 1)\n\n    let center = r.getCenter()\n\n    if (r.isEmpty() || (reference.x === center.x && reference.y === center.y)) {\n      return center // This avoids divide-by-zero\n    }\n\n    // translate the center if required\n    //\n    let s = inquiringConnection.getSource()\n    let t = inquiringConnection.getTarget()\n    let lines = this.getOwner().getConnections().clone()\n    lines.grep(function (other) {\n      return (other.getTarget() === t && other.getSource() === s) || (other.getTarget() === s && other.getSource() === t)\n    })\n    let index = lines.indexOf(inquiringConnection) + 1\n    let position = center.getPosition(reference)\n    let ray\n    if (position === draw2d.geo.PositionConstants.SOUTH || position === draw2d.geo.PositionConstants.EAST) {\n      ray = new draw2d.geo.Point(reference.x - center.x, reference.y - center.y)\n    }\n    else {\n      ray = new draw2d.geo.Point(center.x - reference.x, center.y - reference.y)\n    }\n    let length = Math.sqrt(ray.x * ray.x + ray.y * ray.y)\n    if (index <= 2) {\n      length *= 1.5\n    }\n    let xSeparation = this.separation * ray.x / length\n    let ySeparation = this.separation * ray.y / length\n    if (index % 2 === 0) {\n      center = new draw2d.geo.Point(center.x + (index / 2) * (-1 * ySeparation), center.y + (index / 2) * xSeparation)\n    }\n    else {\n      center = new draw2d.geo.Point(center.x + (index / 2) * ySeparation, center.y + (index / 2) * (-1 * xSeparation))\n    }\n\n    let intersections = this.getBox().intersectionWithLine(center, reference)\n    // perfect - one intersection mean that the shifted center point is inside the bounding box and has only one intersection with it.\n    //\n    switch (intersections.getSize()) {\n      case 0:\n        // calculate the edge of the bounding box which is nearest to the reference point\n        //\n        let v = this.getBox().getVertices()\n        let first = v.first()\n        first.distance = reference.distance(first)\n        return v.asArray().reduce(function (previous, current) {\n          current.distance = reference.distance(current)\n          return current.distance < previous.distance ? current : previous\n        })\n      case 1:\n        return intersections.get(0)\n      case 2:\n        // get the nearest of these points\n        let p0 = intersections.get(0)\n        let p1 = intersections.get(1)\n        let p0diff = reference.distance(p0)\n        let p1diff = reference.distance(p1)\n        if (p0diff < p1diff) {\n          return p0\n        }\n        return p1\n    }\n\n    // we have 0 or 2 intersections with the bounding box. This means the shifted\n    // calculate the intersection if the new \"center\" with the bounding box of the\n    // shape (if any exists)\n\n  },\n\n  /**\n   * Returns the bounds of this Anchor's owner. Subclasses can\n   * override this method to adjust the box. Maybe you return the box\n   * of the port parent (the parent figure)\n   *\n   * @returns {draw2d.geo.Rectangle} The bounds of this Anchor's owner\n   */\n  getBox: function () {\n    return this.getOwner().getParent().getBoundingBox()\n  },\n\n  /**\n   * \n   *\n   * Returns the reference point for this anchor in absolute coordinates. This might be used\n   * by another anchor to determine its own location.\n   *\n   * @param {draw2d.Connection} inquiringConnection the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point} The bounds of this Anchor's owner\n   */\n  getReferencePoint: function (inquiringConnection) {\n    return this.getBox().getCenter()\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * The ChopboxAnchor's location is found by calculating the intersection of a\n * line drawn from the center point of its owner's box (the parent of the\n * connection port) to a reference point on that box. A Connection using the\n * ChopBoxAnchor will be oriented such that they point to their port owner's\n * center.\n *\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.layout.anchor.ConnectionAnchor\n */\n\ndraw2d.layout.anchor.ShortesPathConnectionAnchor = draw2d.layout.anchor.ConnectionAnchor.extend(\n  /** @lends draw2d.layout.anchor.ShortesPathConnectionAnchor.prototype */\n  {\n\n  NAME: \"draw2d.layout.anchor.ShortesPathConnectionAnchor\",\n\n  /**\n   *\n   * @param {draw2d.Figure} [owner] the figure to use for the anchor calculation\n   */\n  init: function (owner) {\n    this._super(owner)\n  },\n\n  /**\n   * \n   *\n   * Returns the location where the Connection should be anchored in\n   * absolute coordinates. The anchor may use the given reference\n   * Point to calculate this location.\n   *\n   * @param {draw2d.geo.Point} ref The reference Point in absolute coordinates\n   * @param {draw2d.Connection} inquiringConnection the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point} The anchor's location\n   */\n  getLocation: function (ref, inquiringConnection) {\n    let r = this.getOwner().getParent().getBoundingBox()\n    let center = r.getCenter()\n\n    // check if we can calculate with a circle/line intersection\n    //\n    if (this.getOwner().getParent() instanceof draw2d.shape.basic.Oval) {\n      let result = this.getOwner().getParent().intersectionWithLine(ref, center)\n      if (result.getSize() === 1) {\n        return result.get(0)\n      }\n    }\n\n    /*    0 | 1 | 2\n     *    __|___|__\n     *    7 | 8 | 3\n     *    __|___|__\n     *    6 | 5 | 4\n     */\n    let octant = r.determineOctant(new draw2d.geo.Rectangle(ref.x, ref.y, 2, 2))\n\n    switch (octant) {\n      case 0:\n        return r.getTopLeft()\n      case 1:\n        return new draw2d.geo.Point(ref.x, r.getTop())\n      case 2:\n        return r.getTopRight()\n      case 3:\n        return new draw2d.geo.Point(r.getRight(), ref.y)\n      case 4:\n        return r.getBottomRight()\n      case 5:\n        return new draw2d.geo.Point(ref.x, r.getBottom())\n      case 6:\n        return r.getBottomLeft()\n      case 7:\n        return new draw2d.geo.Point(r.getLeft(), ref.y)\n    }\n\n    return r.getTopLeft()\n  },\n\n  /**\n   * Returns the bounds of this Anchor's owner. Subclasses can\n   * override this method to adjust the box. Maybe you return the box\n   * of the port parent (the parent figure)\n   *\n   * @returns {draw2d.geo.Rectangle} The bounds of this Anchor's owner\n   */\n  getBox: function () {\n    return this.getOwner().getParent().getBoundingBox()\n  },\n\n  /**\n   * \n   *\n   * Returns the bounds of this Anchor's owner. Subclasses can\n   * override this method to adjust the box. Maybe you return the box\n   * of the port parent (the parent figure)\n   *\n   * @param {draw2d.Connection} inquiringConnection the connection who ask for the location.\n   *\n   * @returns {draw2d.geo.Point} The bounds of this Anchor's owner\n   */\n  getReferencePoint: function (inquiringConnection) {\n    return this.getBox().getCenter()\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Provides a {@link draw2d.Connection} with an orthogonal route between the Connection's source\n * and target anchors.\n * <br>\n * Additional a <b>bridge</b> is added to each connection which didn't have a common source or target\n * port.<br>\n * A <b>dot</b> is added at the crossing if the two connections have a common spurce or target port.\n *\n * <br>\n *\n * @example\n *\n *    let createConnection=function(){\n *       let con = new draw2d.Connection();\n *       con.setRouter(new draw2d.layout.connection.CircuitConnectionRouter());\n *       return con;\n *    };\n *\n *    // install a custom connection create policy\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *           createConnection: createConnection\n *    }));\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let f1 = new draw2d.shape.analog.OpAmp({x:10, y:10});\n *    let f2 = new draw2d.shape.analog.ResistorVertical({angle:90, height:20, x:300, y:150});\n *    let f3 = new draw2d.shape.analog.ResistorVertical({x:250, y:70});\n *    let f4 = new draw2d.shape.analog.ResistorVertical({x:10, y:90});\n *\n *    // ...add it to the canvas\n *    //\n *    canvas.add( f1);\n *    canvas.add( f2);\n *    canvas.add( f3);\n *    canvas.add( f4);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(f1.getOutputPort(0));\n *    c.setTarget(f2.getHybridPort(0));\n *    canvas.add(c);\n *\n *    // second Connection between the other resistors\n *    //\n *    c = createConnection();\n *    c.setSource(f3.getHybridPort(1));\n *    c.setTarget(f4.getHybridPort(0));\n *    canvas.add(c);\n *\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends  draw2d.layout.connection.ManhattanConnectionRouter\n */\n\ndraw2d.layout.connection.CircuitConnectionRouter = draw2d.layout.connection.ManhattanConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.CircuitConnectionRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.CircuitConnectionRouter\",\n\n  /**\n   * Creates a new Router object.\n   *\n   */\n  init: function () {\n    this._super()\n\n    this.setBridgeRadius(4)\n    this.setVertexRadius(2)\n\n    // experimental\n    this.abortRoutingOnFirstVertexNode = false\n  },\n\n\n  /**\n   * \n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n  },\n\n  /**\n   * \n   * Callback method if the router has been removed from the connection. In the case of the CircuitRouter\n   * all vertex nodes will be removed from the canvas.\n   *\n   * @param {draw2d.Connection} connection The related connection\n   * @template\n   * @since 2.7.2\n   */\n  onUninstall: function (connection) {\n    if (typeof connection.vertexNodes !== \"undefined\" && connection.vertexNodes !== null) {\n      connection.vertexNodes.remove()\n      connection.vertexNodes = null\n    }\n  },\n\n  /**\n   * \n   * Set the radius of the vertex circle.\n   *\n   * @param {Number} radius\n   */\n  setVertexRadius: function (radius) {\n    this.vertexRadius = radius\n\n    return this\n  },\n  /** deprecated\n   * @private\n   * **/\n  setJunctionRadius: function (radius) {\n    this.vertexRadius = radius\n  },\n\n  /**\n   * \n   * Set the radius or span of the bridge. A bridge will be drawn if two connections are crossing and didn't have any\n   * common port.\n   *\n   * @param {Number} radius\n   */\n  setBridgeRadius: function (radius) {\n    this.bridgeRadius = radius\n    this.bridge_LR = [\" r\", 0.5, -0.5, radius - (radius / 2), -(radius - radius / 4), radius, -radius, radius + (radius / 2), -(radius - radius / 4), radius * 2, \"0 \"].join(\" \")\n    this.bridge_RL = [\" r\", -0.5, -0.5, -(radius - (radius / 2)), -(radius - radius / 4), -radius, -radius, -(radius + (radius / 2)), -(radius - radius / 4), -radius * 2, \"0 \"].join(\" \")\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  route: function (conn, routingHints) {\n    let fromPt = conn.getStartPoint()\n    let fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n\n    let toPt = conn.getEndPoint()\n    let toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n\n    // calculate the lines between the two points with the standard ManhattanRouter.\n    //\n    this._route(conn, toPt, toDir, fromPt, fromDir)\n\n    // get the intersections to the other connections\n    //\n    let intersectionsASC = conn.getCanvas().getIntersection(conn).sort(\"x\")\n    let intersectionsDESC = intersectionsASC.clone().reverse()\n\n    let intersectionForCalc = intersectionsASC\n\n    // add a ArrayList of all added vertex nodes to the connection\n    //\n    if (typeof conn.vertexNodes !== \"undefined\" && conn.vertexNodes !== null) {\n      conn.vertexNodes.remove()\n    }\n    conn.vertexNodes = conn.canvas.paper.set()\n\n    // ATTENTION: we cast all x/y coordinates to integer and add 0.5 to avoid subpixel rendering of\n    //            the connection. The 1px or 2px lines look much clearer than before.\n    //\n    let ps = conn.getVertices()\n    let p = ps.get(0)\n    let path = [\"M\", (p.x | 0) + 0.5, \" \", (p.y | 0) + 0.5]\n\n    let oldP = p\n    let bridgeWidth = null\n    let bridgeCode = null\n\n    let lastVertexNode = null\n\n    for (let i = 1; i < ps.getSize(); i++) {\n      p = ps.get(i)\n\n      // line goes from right->left.\n      if (oldP.x > p.x) {\n        intersectionForCalc = intersectionsDESC\n        bridgeCode = this.bridge_RL\n        bridgeWidth = -this.bridgeRadius\n      }\n      // line goes from left->right\n      else {\n        intersectionForCalc = intersectionsASC\n        bridgeCode = this.bridge_LR\n        bridgeWidth = this.bridgeRadius\n      }\n\n      // add a bridge or a vertex node depending to the intersection connection\n      //\n      // bridge   => the connections didn't have a common port\n      // vertex => the connections did have a common source or target port\n      //\n      intersectionForCalc.each((ii, interP) => {\n        if (draw2d.shape.basic.Line.hit(1, oldP.x, oldP.y, p.x, p.y, interP.x, interP.y) === true) {\n\n          // It is a vertex node..\n          //\n          if (conn.sharingPorts(interP.other)) {\n            let other = interP.other\n            let otherZ = other.getZOrder()\n            let connZ = conn.getZOrder()\n            if (connZ < otherZ) {\n              let vertexNode = conn.canvas.paper.ellipse(interP.x, interP.y, this.vertexRadius, this.vertexRadius).attr({fill: conn.lineColor.rgba()})\n              conn.vertexNodes.push(vertexNode)\n              // we found a vertex node. In this case an already existing connection did draw the connection.\n              //\n              if (this.abortRoutingOnFirstVertexNode === true) {\n                if (conn.getSource() === other.getSource() || conn.getSource() === other.getTarget()) {\n                  path = [\"M\", (interP.x | 0) + 0.5, \" \", (interP.y | 0) + 0.5]\n                  if (lastVertexNode !== null) {\n                    lastVertexNode.remove()\n                    conn.vertexNodes.exclude(lastVerteNode)\n                  }\n                }\n                lastVertexNode = vertexNode\n              }\n            }\n          }\n          // ..or a bridge. We draw only horizontal bridges. Just a design decision\n          //\n          else if (p.y === interP.y) {\n            path.push(\" L\", ((interP.x - bridgeWidth) | 0) + 0.5, \" \", (interP.y | 0) + 0.5)\n            path.push(bridgeCode)\n          }\n        }\n      })\n\n      path.push(\" L\", (p.x | 0) + 0.5, \" \", (p.y | 0) + 0.5)\n      oldP = p\n    }\n    conn.svgPathString = path.join(\"\")\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Routes a {@link draw2d.Connection}, possibly using a constraint.\n *\n * @author Andreas Herz\n */\n\ndraw2d.layout.connection.ConnectionRouter = Class.extend(\n  /** @lends draw2d.layout.connection.ConnectionRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.ConnectionRouter\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function () {\n  },\n\n\n  /**\n   *\n   * Routes the Connection.\n   *\n   * @param {draw2d.Connection} connection The Connection to route\n   * @param {Object} [routingHints] some helper attributes for the router\n   * @param {Boolean} [routingHints.startMoved] is true if just the start location has moved\n   * @param {Boolean} [routingHints.endMoved] is true if the destination location has changed\n   * @param {draw2d.util.ArrayList} [routingHints.oldVertices] the vertices before the reroute has been triggered\n   *\n   * @template\n   */\n  route: function (connection, routingHints) {\n    throw \"subclasses must implement the method [ConnectionRouter.route]\"\n  },\n\n  _paint: function (conn) {\n    // calculate the path string for the SVG rendering\n    // Important: to avoid subpixel error rendering we add 0.5 to each coordinate\n    //            With this offset the canvas can paint the line on a \"full pixel\" instead\n    //            of subpixel rendering.\n//    let adjust = val => (val| 0) +0.5\n    let adjust = val => val\n\n    let ps = conn.getVertices()\n    let p = ps.get(0)\n    let radius = conn.getRadius()\n    let path = [\"M\", adjust(p.x), \" \", adjust(p.y)]\n    let i = 1\n    let length, inset, p2\n    if (radius > 0) {\n      let lastP = p\n      length = (ps.getSize() - 1)\n      for (; i < length; i++) {\n        p = ps.get(i)\n        inset = draw2d.geo.Util.insetPoint(p, lastP, radius)\n        path.push(\"L\", adjust(inset.x), \",\", adjust(inset.y))\n\n        p2 = ps.get(i + 1)\n        inset = draw2d.geo.Util.insetPoint(p, p2, radius)\n\n        path.push(\"Q\", p.x, \",\", p.y, \" \", adjust(inset.x), \", \", adjust(inset.y))\n        lastP = p\n      }\n      p = ps.get(i)\n      path.push(\"L\", adjust(p.x), \",\", adjust(p.y))\n    }\n    else {\n      length = ps.getSize()\n      for (; i < length; i++) {\n        p = ps.get(i)\n        path.push(\"L\", adjust(p.x), \",\", adjust(p.y))\n      }\n    }\n    conn.svgPathString = path.join(\"\")\n  },\n\n\n  /**\n   *\n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.shape.basic.PolyLine} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n  },\n\n  /**\n   *\n   * Callback method if the router has been removed from the connection.\n   *\n   * @param {draw2d.shape.basic.PolyLine} connection The related connection\n   * @template\n   * @since 2.7.2\n   */\n  onUninstall: function (connection) {\n  },\n\n  /**\n   *\n   * Callback method for the PolyLine or Connection to check if it possible to remove a vertex from\n   * the list. The router can send an veto for this.\n   * Per default it is not possible to remove any vertex from the PolyLine exceptional if any interactive\n   * router is installed.\n   *\n   * @param {Number} index\n   * @since 4.2.3\n   */\n  canRemoveVertexAt: function (index) {\n    return false\n  },\n\n  /**\n   * Callback method for the PolyLine or Connection to verify that a segment is deletable.\n   *\n   * @param {Number} index\n   * @returns {Boolean}\n   * @since 4.2.3\n   */\n  canRemoveSegmentAt: function (index) {\n    return false\n  },\n\n  /**\n   *\n   * Tweak or enrich the polyline persistence data with routing information\n   *\n   * @since 2.10.0\n   * @param {draw2d.shape.basic.PolyLine} line\n   * @param {Object} memento The memento data of the polyline\n   * @returns {Object}\n   */\n  getPersistentAttributes: function (line, memento) {\n    return memento\n  },\n\n  /**\n   *\n   * set the attributes for the polyline with routing information\n   *\n   * @since 2.10.0\n   * @param {draw2d.shape.basic.Line} line\n   * @param {Object} memento the JSON data to read\n   */\n  setPersistentAttributes: function (line, memento) {\n  },\n\n  /**\n   *\n   *\n   * The draw2d.Connection delegates the drag operation to the router. The router can\n   * handle the different constraints of the connection.\n   *\n   * @param {draw2d.shape.basic.Line} line\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   */\n  onDrag: function (line, dx, dy, dx2, dy2) {\n  },\n\n  /**\n   *\n   * Called by the connection if the vertices set outside.\n   * This enforce the router to avoid full autoroute. E.g. InteractiveManhattanRouter\n   *\n   * @protected\n   * @param {draw2d.shape.basic.Line} line\n   */\n  verticesSet: function (line) {\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Router for direct connections between two ports. Beeline\n * <br>\n * <br>\n *\n * @example\n *\n *    let createConnection=function(){\n *       let con = new draw2d.Connection();\n *       con.setRouter(new draw2d.layout.connection.DirectRouter());\n *       return con;\n *    };\n *\n *    // install a custom connection create policy\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *           createConnection: createConnection\n *    }));\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let start = new draw2d.shape.node.Start();\n *    let end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends  draw2d.layout.connection.ConnectionRouter\n */\n\ndraw2d.layout.connection.DirectRouter = draw2d.layout.connection.ConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.DirectRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.DirectRouter\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function () {\n    this._super()\n  },\n\n\n  /**\n   * \n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n  },\n\n\n  /**\n   * \n   * Invalidates the given Connection\n   */\n  invalidate: function () {\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  route: function (connection, routingHints) {\n    let start = connection.getStartPosition()\n    let end = connection.getEndPosition()\n\n    // required for hit tests\n    //\n    connection.addPoint(start)\n    connection.addPoint(end)\n\n    // calculate the path\n    let path = [\"M\", start.x, \" \", start.y]\n    path.push(\"L\", end.x, \" \", end.y)\n\n    connection.svgPathString = path.join(\"\")\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Automatic router that spreads its  {@link draw2d.Connection Connections} in a fan-like fashion upon collision.\n *\n *\n * @example\n *\n *    let createConnection=function(){\n *       // return my special kind of connection\n *       let con = new draw2d.Connection({\n *         radius: 14,\n *         router: new draw2d.layout.connection.FanConnectionRouter()\n *       });\n *       return con;\n *    };\n *\n *    // install a custom connection create policy\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *           createConnection: createConnection\n *    }));\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let start = new draw2d.shape.node.Start();\n *    let end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n *    // second Connection\n *    //\n *    c = createConnection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n *    // third Connection\n *    //\n *    c = createConnection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.layout.connection.DirectRouter\n */\n\ndraw2d.layout.connection.FanConnectionRouter = draw2d.layout.connection.DirectRouter.extend(\n  /** @lends draw2d.layout.connection.FanConnectionRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.FanConnectionRouter\",\n\n  /**\n   * Creates a new Router object.\n   *\n   */\n  init: function () {\n    this._super()\n\n  },\n\n\n  /**\n   * \n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n  },\n\n  /**\n   * \n   * Layout the hands over connection in a manhattan like layout\n   *\n   * @param {draw2d.Connection}  conn\n   * @param {draw2d.util.ArrayList} oldVertices old/existing vertices of the Connection\n   * @param {Object} routingHints some helper attributes for the router\n   * @param {Boolean} routingHints.startMoved is true if just the start location has moved\n   * @param {Boolean} routingHints.destMoved is true if the destination location has changed\n   */\n  route: function (conn, routingHints) {\n    let lines = conn.getSource().getConnections().clone()\n    lines.grep( other => other.getTarget() === conn.getTarget() || other.getSource() === conn.getTarget())\n\n    if (lines.getSize() > 1) {\n      this.routeCollision(conn, lines.indexOf(conn))\n    }\n    else {\n      this._super(conn, routingHints)\n    }\n  },\n\n  /**\n   * \n   * route the connection if connections overlap. Two connections overlap if the combination\n   * of source and target anchors are equal.\n   *\n   * @param {draw2d.Connection} conn\n   * @param {Number} index\n   */\n  routeCollision: function (conn, index) {\n    index = index + 1\n    let start = conn.getStartPoint()\n    let end = conn.getEndPoint()\n\n    let separation = 15\n\n    let midPoint = new draw2d.geo.Point((end.x + start.x) / 2, (end.y + start.y) / 2)\n    let position = end.getPosition(start)\n    let ray\n    if (position === draw2d.geo.PositionConstants.SOUTH || position === draw2d.geo.PositionConstants.EAST) {\n      ray = new draw2d.geo.Point(end.x - start.x, end.y - start.y)\n    }\n    else {\n      ray = new draw2d.geo.Point(start.x - end.x, start.y - end.y)\n    }\n\n    let length = Math.sqrt(ray.x * ray.x + ray.y * ray.y)\n\n    let xSeparation = separation * ray.x / length\n    let ySeparation = separation * ray.y / length\n\n    let bendPoint\n\n    if (index % 2 === 0) {\n      bendPoint = new draw2d.geo.Point(midPoint.x + (index / 2) * (-1 * ySeparation), midPoint.y + (index / 2) * xSeparation)\n    }\n    else {\n      bendPoint = new draw2d.geo.Point(midPoint.x + (index / 2) * ySeparation, midPoint.y + (index / 2) * (-1 * xSeparation))\n    }\n\n    // required for hit tests\n    conn.addPoint(start)\n    conn.addPoint(bendPoint)\n    conn.addPoint(end)\n\n    // calculate the path string for the SVG rendering\n    //\n    this._paint(conn)\n  }\n\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * Route the connection in an Manhattan style and add resize handles to all vertex for interactive alignment of the\n * routing.\n *\n *\n * @example\n *\n *    let createConnection=function(){\n *       // return my special kind of connection\n *       let con = new draw2d.Connection({\n *         radius: 4,\n *         router: new draw2d.layout.connection.InteractiveManhattanConnectionRouter()\n *       });\n *       return con;\n *    };\n *\n *    // install a custom connection create policy\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *           createConnection: createConnection\n *    }));\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let start = new draw2d.shape.node.Start();\n *    let end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n *    // select the connection to show the selection handles\n *    //\n *    c.select();\n *\n *\n * @author Andreas Herz\n * @since 4.0.2\n * @extends  draw2d.layout.connection.ManhattanConnectionRouter\n */\n\ndraw2d.layout.connection.InteractiveManhattanConnectionRouter = draw2d.layout.connection.ManhattanConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.InteractiveManhattanConnectionRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.InteractiveManhattanConnectionRouter\",\n\n\n  /**\n   * Creates a new Router object.\n   *\n   */\n  init: function () {\n    this._super()\n  },\n\n  onInstall: function (conn) {\n    conn.installEditPolicy(new draw2d.policy.line.OrthogonalSelectionFeedbackPolicy())\n    if (!conn._routingMetaData) {\n      conn._routingMetaData = {\n        routedByUserInteraction: false,\n        fromDir: -1,\n        toDir: -1\n      }\n    }\n  },\n\n  onUninstall: function (conn) {\n    delete conn._routingMetaData\n  },\n\n  /**\n   * @inheritDoc\n   */\n  route: function (conn, routingHints) {\n    if (!routingHints.oldVertices) {\n      debugger\n    }\n    if (routingHints.oldVertices.getSize() === 0 || conn._routingMetaData.routedByUserInteraction === false) {\n      this._super(conn, routingHints)\n      conn._routingMetaData.fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n      conn._routingMetaData.toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n    }\n    else {\n      this.halfRoute(conn, routingHints)\n      this._paint(conn)\n    }\n  },\n\n  /**\n   * \n   * The routing algorithm if the user has changed at least on of the vertices manually.\n   * This kind of routing just align the start and end vertices to the new source/target port\n   * location.\n   * The vertices between keep untouched. Modification of this vertices are done by the\n   * draw2d.policy.line.OrthogonalSelectionFeedbackPolicy\n   *\n   * @param {draw2d.Connection} conn the connection to route\n   * @param {Object} routingHints some helper attributes for the router\n   * @param {Boolean} routingHints.startMoved is true if just the start location has moved\n   * @param {Boolean} routingHints.endMoved is true if the destination location has changed\n   */\n  halfRoute: function (conn, routingHints) {\n    let MINDIST = this.MINDIST\n    let max = Math.max\n    let min = Math.min\n\n    routingHints = routingHints || {oldVertices: new draw2d.util.ArrayList()}\n    let oldVertices = routingHints.oldVertices\n    let vertexCount = oldVertices.getSize()\n\n    let fromPt = conn.getStartPosition()\n    let fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n\n    let toPt = conn.getEndPosition()\n    let toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n\n\n    // the port orientation has been changed. This can happen if the node rotates. In this case\n    // we must recalculate the routing.\n    if (conn._routingMetaData.fromDir !== fromDir || conn._routingMetaData.toDir !== toDir) {\n      conn._routingMetaData.routedByUserInteraction = false\n      this.route(conn, routingHints)\n    }\n\n    // TODO: detection for switch back to autoroute isn't good enough.\n    //       Add more logic. e.g. if the fromDir!==1. This happens if\n    //       The ports are at bottom and top.\n    //       The code below covers only the classic workflow configuration left->right\n    //\n    //  go back to the default if no routing is possible anymore\n    //\n    if ((fromDir === draw2d.geo.Rectangle.DIRECTION_RIGHT) && (toDir === draw2d.geo.Rectangle.DIRECTION_LEFT)\n      && (fromPt.x > toPt.x) && (vertexCount <= 4)) {\n\n      conn._routingMetaData.routedByUserInteraction = false\n      this.route(conn, routingHints)\n    }\n    // it makes no sense to have just 2 vertices and manual routing for Manhattan-style routing\n    else if(conn.getVertices().getSize() ===2 && conn._routingMetaData.routedByUserInteraction === true){\n      conn._routingMetaData.routedByUserInteraction = false\n      this.route(conn, routingHints)\n    }\n\n    // transfer the old vertices into the connection\n    //\n    oldVertices.each( (i, vertex) =>{\n      conn.addPoint(vertex)\n    })\n\n\n    // all points are adjusted with the drag&drop operation. There is no need to move\n    // start/end points twice\n    if (conn.isInDragDrop) {\n      return\n    }\n\n    // The SOURCE port (labeled with p0) has been moved/changed.\n    //\n    if (routingHints.startMoved || !fromPt.equals(oldVertices.get(0))) {\n      let p1 = oldVertices.get(1)\n      let p2 = oldVertices.get(2) // optional. Happens if the connection has just 2 points\n      conn.setVertex(0, fromPt)\n      switch (fromDir) {\n        //          .\n        //   p0     . p1\n        //   x------+\n        //          .\n        //          .\n        //\n        case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n          conn.setVertex(1, max(fromPt.x + MINDIST, p1.x), fromPt.y)// p1\n          if(p2)\n            conn.setVertex(2, max(fromPt.x + MINDIST, p1.x), p2.y)    // p2\n          break\n        //   .\n        //   . p1     p0\n        //   +------x\n        //   .\n        //   .\n        //\n        case draw2d.geo.Rectangle.DIRECTION_LEFT:\n          conn.setVertex(1, min(fromPt.x - MINDIST, p1.x), fromPt.y)// p1\n          if(p2)\n            conn.setVertex(2, min(fromPt.x - MINDIST, p1.x), p2.y)    // p2\n          break\n        //     ...+....\n        //     p1 |\n        //        |\n        //        |\n        //     p0 x\n        //\n        case draw2d.geo.Rectangle.DIRECTION_UP:\n          conn.setVertex(1, fromPt.x, min(fromPt.y - MINDIST, p1.y)) // p1\n          if(p2)\n            conn.setVertex(2, p2.x, min(fromPt.y - MINDIST, p1.y)) // p2\n          break\n        //        x\n        //     p0 |\n        //        |\n        //     p1 |\n        //    ....+....\n        //\n        case draw2d.geo.Rectangle.DIRECTION_DOWN:\n          conn.setVertex(1, fromPt.x, max(fromPt.y + MINDIST, p1.y)) // p1\n          if(p2)\n            conn.setVertex(2, p2.x, max(fromPt.y + MINDIST, p1.y))     // p2\n          break\n      }\n    }\n    //////////////////////////////////////////////////////////////////\n    // the TARGET port (labeled with p0) has moved\n    //\n    if (routingHints.endMoved || !toPt.equals(oldVertices.get(vertexCount - 1))) {\n      let p1 = oldVertices.get(vertexCount - 2)\n      let p2 = oldVertices.get(vertexCount - 3) // optional\n      conn.setVertex(vertexCount - 1, toPt)                        // p0\n\n      switch (toDir) {\n        //               .\n        //      p0       . p1\n        //    x----------+\n        //               .\n        //               .\n        case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n          conn.setVertex(vertexCount - 2, max(toPt.x + MINDIST, p1.x), toPt.y)  // p1\n          if(p2)\n            conn.setVertex(vertexCount - 3, max(toPt.x + MINDIST, p1.x), p2.y)    // p2\n          break\n\n        //    .\n        //    .\n        //    . p1         p0\n        //    +----------x\n        //    .\n        //    .\n        //\n        case draw2d.geo.Rectangle.DIRECTION_LEFT:\n          conn.setVertex(vertexCount - 2, min(toPt.x - MINDIST, p1.x), toPt.y)  // p1\n          if(p2)\n            conn.setVertex(vertexCount - 3, min(toPt.x - MINDIST, p1.x), p2.y)    // p2\n          break\n\n        //     ...+....\n        //     p1 |\n        //        |\n        //        |\n        //     p0 x\n        //\n        case draw2d.geo.Rectangle.DIRECTION_UP:\n          conn.setVertex(vertexCount - 2, toPt.x, min(toPt.y - MINDIST, p1.y))  // p1\n          if(p2)\n            conn.setVertex(vertexCount - 3, p2.x, min(toPt.y - MINDIST, p1.y))  // p2\n          break\n\n        //        +\n        //     p0 |\n        //        |\n        //     p1 |\n        //     ...+...\n        //\n        case draw2d.geo.Rectangle.DIRECTION_DOWN:\n          conn.setVertex(vertexCount - 2, toPt.x, max(toPt.y + MINDIST, p1.y))  // p1\n          if(p2)\n            conn.setVertex(vertexCount - 3, p2.x, max(toPt.y + MINDIST, p1.y))  // p2\n          break\n      }\n    }\n  },\n\n  /**\n   * Callback method for the PolyLine or Connection to verify that a segment is deletable.\n   * @param {draw2d.Connection} conn\n   * @param {Number} index\n   *\n   * @returns {Boolean}\n   * @since 4.2.3\n   */\n  canRemoveSegmentAt: function (conn, index) {\n\n    let segmentCount = conn.getVertices().getSize() - 1 // segmentCount is one less than vertex count\n\n    // The first and last segment isn't deletable\n    //\n    if ((index <= 0) || ((index + 1) >= segmentCount)) {\n      return false\n    }\n\n    // a connection need at least three strokes\n    //\n    if (segmentCount < 4) {\n      return false\n    }\n\n    let fromPt = conn.getStartPosition()\n    let fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n\n    let toPt = conn.getEndPosition()\n    let toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n\n    if (segmentCount <= 5) {\n      //     ___\n      //    |   |      From\n      //    | 1 |-----+\n      //    |___|     |\n      //              |\n      //   +----------+\n      //   |\n      //   |    ___\n      //   |   |   |\n      //   +---| 2 |    To\n      //       |___|\n      // the connection needs at least 5 segments if the routing is like this\n      //\n      if ((fromDir === draw2d.geo.Rectangle.DIRECTION_RIGHT) && (toDir === draw2d.geo.Rectangle.DIRECTION_LEFT) && (fromPt.x >= toPt.x)) {\n        return false\n      }\n\n\n      //     ___\n      //    |   |        To\n      //    | 2 |-----+\n      //    |___|     |\n      //              |\n      //   +----------+\n      //   |\n      //   |    ___\n      //   |   |   |\n      //   +---| 1 |    From\n      //       |___|\n      // the connection needs at least 5 segments if the routing is like this\n      //\n      if ((fromDir == draw2d.geo.Rectangle.DIRECTION_LEFT) & (toDir == draw2d.geo.Rectangle.DIRECTION_RIGHT) && (fromPt.x <= toPt.x)) {\n        return false\n      }\n\n      //                          ___\n      //      +_______           |   |\n      //      | from  |          | 2 |\n      //     _+_      |          |___|\n      //    |   |     |       To   +\n      //    | 1 |     |____________|\n      //    |___|\n      // the connection needs at least 5 segments if the routing is like this\n      //\n      if ((fromDir == draw2d.geo.Rectangle.DIRECTION_UP) & (toDir == draw2d.geo.Rectangle.DIRECTION_DOWN) && (fromPt.y <= toPt.y)) {\n        return false\n      }\n\n      //                          ___\n      //      +_______           |   |\n      //      | to    |          | 1 |\n      //     _+_      |          |___|\n      //    |   |     |     from   +\n      //    | 2 |     |____________|\n      //    |___|\n      // the connection needs at least 5 segments if the routing is like this\n      //\n      if ((fromDir == draw2d.geo.Rectangle.DIRECTION_DOWN) & (toDir == draw2d.geo.Rectangle.DIRECTION_UP) && (fromPt.y >= toPt.y)) {\n        return false\n      }\n\n      // unable to make the decision on the easy way. calculate the route again with an\n      // temporary connection and check if the segment count of the new routed connection\n      // allows a removal\n      //\n      let tmpConn = new draw2d.Connection()\n      tmpConn.lineSegments = new draw2d.util.ArrayList()\n      tmpConn.vertices = new draw2d.util.ArrayList()\n      tmpConn.sourcePort = conn.sourcePort\n      tmpConn.targetPort = conn.targetPort\n      tmpConn._routingMetaData = {routedByUserInteraction: false, fromDir: -1, toDir: -1}\n      this.route(tmpConn, {oldVertices: new draw2d.util.ArrayList()})\n      let curSegmentCount = conn.getVertices().getSize() - 1\n      let minSegmentCount = tmpConn.getVertices().getSize() - 1\n      if (curSegmentCount <= minSegmentCount) {\n        return false\n      }\n    }\n\n    return true\n  },\n\n  /**\n   * \n   *\n   * The draw2d.Connection delegates the drag operation to the router. The router can\n   * handle the different constraints of the connection and just drag&drop a single segment\n   * instead of the complete connection.\n   *\n   * @param {draw2d.shape.basic.Line} line the related line to handle\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   *\n   * @since 6.1.0\n   */\n  onDrag: function (line, dx, dy, dx2, dy2) {\n    let i = 0\n    // Connection is dragged by source and origin port movement\n    // or MultiSelection in this case we drag the complete\n    // connection\n    if (line.draggedSegment === null) {\n      let count = line.getVertices().getSize() - 1\n      for (i = 1; i < count; i++) {\n        line.getVertex(i).translate(dx2, dy2)\n      }\n      return\n    }\n\n    // don't drag start/end segments. This segments are bounded to the related\n    // ports.\n    if (line.draggedSegment.index === 0 || line.draggedSegment.index === (line.getSegments().getSize() - 1)) {\n      return\n    }\n\n    line._routingMetaData.routedByUserInteraction = true\n\n    let p0 = line.draggedSegment.start\n    let p1 = line.draggedSegment.end\n    i = line.draggedSegment.index\n    let lp0 = line.getVertices().first()\n    let lp1 = line.getVertices().last()\n\n    // horizontal segment movement\n    //                              x Py\n    //                              .\n    //  P0                          .\n    //  +---------------------------+ P1\n    //  .\n    //  .\n    //  x Px\n    //\n    let distance = 0\n    if (p0.y === p1.y) {\n      // ensure that the segment is the min distance away from the source/target port\n      // (Px is endpoints of the connection and bounded to a port)\n      if (i === 1) distance = p0.y - lp0.y\n      // (Py is endpoints of the connection and bounded to a port)\n      if (i === line.getSegments().getSize() - 2) distance = p1.y - lp1.y\n\n\n      if (distance < 0 && dy2 > 0) {\n        dy2 = Math.min(dy2, (-distance) - this.MINDIST)\n      }\n      else if (distance > 0 && dy2 < 0) {\n        dy2 = -Math.min(-dy2, (distance) - this.MINDIST)\n      }\n\n      line.getVertex(i).translate(0, dy2)\n      line.getVertex(i + 1).translate(0, dy2)\n    }\n    // vertical segment movement\n    //\n    else if (p0.x === p1.x) {\n      // ensure that the segment is the min distance away from the source/target port\n      //\n      if (i === 1) {\n        distance = p0.x - lp0.x\n        if (distance < 0 && dx2 > 0) {\n          dx2 = Math.min(dx2, (-distance) - this.MINDIST)\n        }\n        else if (distance > 0 && dx2 < 0) {\n          dx2 = -Math.min(-dx2, (distance) - this.MINDIST)\n        }\n      }\n\n      // we need this additional test too. No \"else if\" because the special\n      // case of \"index===1\". In this case the segment can be the last AND first\n      // segment if the connection has only three segments at all.\n      //\n      if (i === line.getSegments().getSize() - 2) {\n        distance = p1.x - lp1.x\n        if (distance < 0 && dx2 > 0) {\n          dx2 = Math.min(dx2, (-distance) - this.MINDIST)\n        }\n        else if (distance > 0 && dx2 < 0) {\n          dx2 = -Math.min(-dx2, (distance) - this.MINDIST)\n        }\n      }\n\n      line.getVertex(i).translate(dx2, 0)\n      line.getVertex(i + 1).translate(dx2, 0)\n    }\n  },\n\n  /**\n   * \n   * Called by the connection if the vertices set outside.\n   * This enforce the router to avoid full autoroute. E.g. InteractiveManhattanRouter\n   *\n   * @protected\n   */\n  verticesSet: function (conn) {\n    conn._routingMetaData.routedByUserInteraction = true\n    if (conn.getSource() !== null && conn.getTarget() !== null) {\n      conn._routingMetaData.fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n      conn._routingMetaData.toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n    }\n  },\n\n  /**\n   * \n   * Tweak or enrich the polyline persistence data with routing information\n   *\n   * @since 2.10.0\n   * @param {draw2d.shape.basic.PolyLine} line\n   * @param {Object} memento The memento data of the polyline\n   *\n   * @returns {Object}\n   */\n  getPersistentAttributes: function (line, memento) {\n    memento.vertex = []\n\n    line.getVertices().each(function (i, e) {\n      memento.vertex.push({x: e.x, y: e.y})\n    })\n    memento.routingMetaData = extend({}, line._routingMetaData)\n\n    return memento\n  },\n\n  /**\n   * \n   * set the attributes for the polyline with routing information of the interactive manhattan router.\n   *\n   * @since 4..0.0\n   * @param {Object} memento\n   */\n  setPersistentAttributes: function (line, memento) {\n    // restore the points from the JSON data and add them to the polyline\n    //\n    if (Array.isArray(memento.vertex)) {\n\n      line.oldPoint = null\n      line.lineSegments = new draw2d.util.ArrayList()\n\n      line.setVertices(memento.vertex)\n\n      /*\n       line.vertices     = new draw2d.util.ArrayList();\n       $.each(memento.vertex, function(i,e){\n       line.addPoint(e.x, e.y);\n       });\n       */\n    }\n\n    if (typeof memento.routingMetaData !== \"undefined\") {\n      line._routingMetaData = extend({}, memento.routingMetaData)\n    }\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Provides a {@link draw2d.Connection} with an orthogonal route between the Connection's source\n * and target anchors.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends  draw2d.layout.connection.ManhattanConnectionRouter\n */\n\ndraw2d.layout.connection.ManhattanBridgedConnectionRouter = draw2d.layout.connection.ManhattanConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.ManhattanBridgedConnectionRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.ManhattanBridgedConnectionRouter\",\n\n  BRIDGE_HORIZONTAL_LR: \" r 0 0 3 -4 7 -4 10 0 13 0 \", // Left to right\n  BRIDGE_HORIZONTAL_RL: \" r 0 0 -3 -4 -7 -4 -10 0 -13 0 \", // right to left\n\n  /**\n   * Creates a new Router object.\n   *\n   */\n  init: function () {\n    this._super()\n  },\n\n\n  /**\n   * \n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n  },\n\n  /**\n   * @inheritdoc\n   */\n  route: function (conn, routingHints) {\n    let fromPt = conn.getStartPoint()\n    let fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n\n    let toPt = conn.getEndPoint()\n    let toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n\n    // calculate the lines between the two points.\n    //\n    this._route(conn, toPt, toDir, fromPt, fromDir)\n\n    // calculate the path string for the SVG rendering\n    //\n    let intersectionsASC = conn.getCanvas().getIntersection(conn).sort(\"x\")\n    let intersectionsDESC = intersectionsASC.clone().reverse()\n\n    let intersectionForCalc = intersectionsASC\n\n\n    // ATTENTION: we cast all x/y coordinates to int and add 0.5 to avoid subpixel rendering of\n    //            the connection. The 1px or 2px lines look much clearer than before.\n    //\n    let ps = conn.getVertices()\n    let p = ps.get(0)\n    let path = [\"M\", (p.x | 0) + 0.5, \" \", (p.y | 0) + 0.5]\n    let oldP = p\n    for (let i = 1; i < ps.getSize(); i++) {\n      p = ps.get(i)\n\n      // check for intersection and paint a bridge if required\n      // line goes from left to right\n      //\n      let bridgeWidth = 5\n      let bridgeCode = this.BRIDGE_HORIZONTAL_LR\n\n      // line goes from right->left. Inverse the bridge and the bridgeWidth\n      //\n      if (oldP.x > p.x) {\n        intersectionForCalc = intersectionsDESC\n        bridgeCode = this.BRIDGE_HORIZONTAL_RL\n        bridgeWidth = -bridgeWidth\n      }\n\n      intersectionForCalc.each(function (ii, interP) {\n        if (interP.justTouching === false && draw2d.shape.basic.Line.hit(1, oldP.x, oldP.y, p.x, p.y, interP.x, interP.y) === true) {\n          // we draw only horizontal bridges. Just a design decision\n          //\n          if (p.y === interP.y) {\n            path.push(\" L\", ((interP.x - bridgeWidth) | 0) + 0.5, \" \", (interP.y | 0) + 0.5)\n            path.push(bridgeCode)\n          }\n        }\n\n      })\n\n      path.push(\" L\", (p.x | 0) + 0.5, \" \", (p.y | 0) + 0.5)\n      oldP = p\n    }\n    conn.svgPathString = path.join(\"\")\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Provides a {@link draw2d.Connection} with an orthogonal route between the Connection's source\n * and target anchors.\n *\n *\n * @example\n *\n *    // Override the default connection type. This is used during drag&drop operations of ports.\n *    //\n *    let createConnection=function(sourcePort, targetPort){\n *       // return my special kind of connection\n *       let con = new draw2d.Connection();\n *       con.setRouter(new draw2d.layout.connection.ManhattanConnectionRouter());\n *       return con;\n *    };\n *\n *    // Install a special policy into the canvas to use my own implementation of connection\n *    // if we drag&drop a port\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *          createConnection: createConnection\n *    }));\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let start = new draw2d.shape.node.Start();\n *    let end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends  draw2d.layout.connection.ConnectionRouter\n */\n\ndraw2d.layout.connection.ManhattanConnectionRouter = draw2d.layout.connection.ConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.ManhattanConnectionRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.ManhattanConnectionRouter\",\n\n  MINDIST: 20,\n  TOL: 0.1,\n  TOLxTOL: 0.01,\n  TOGGLE_DIST: 20,\n\n  /**\n   * Creates a new Router object.\n   *\n   */\n  init: function () {\n    this._super()\n  },\n\n\n  /**\n   *\n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n  },\n\n  /**\n   * @inheritdoc\n   */\n  route: function (conn, routingHints) {\n    let fromPt = conn.getStartPosition()\n    let fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n\n    let toPt = conn.getEndPosition()\n    let toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n\n    // calculate the lines between the two points.\n    //\n    this._route(conn, toPt, toDir, fromPt, fromDir)\n    this._paint(conn)\n  },\n\n  /**\n   *\n   * Internal routing algorithm.\n   *\n   * @private\n   * @param {draw2d.Connection} conn\n   * @param {draw2d.geo.Point} fromPt\n   * @param {Number} fromDir\n   * @param {draw2d.geo.Point} toPt\n   * @param {Number} toDir\n   */\n  _route: function (conn, fromPt, fromDir, toPt, toDir) {\n    // fromPt is an x,y to start from.\n    // fromDir is an angle that the first link must\n    //\n    let UP = draw2d.geo.Rectangle.DIRECTION_UP\n    let RIGHT = draw2d.geo.Rectangle.DIRECTION_RIGHT\n    let DOWN = draw2d.geo.Rectangle.DIRECTION_DOWN\n    let LEFT = draw2d.geo.Rectangle.DIRECTION_LEFT\n\n    let xDiff = fromPt.x - toPt.x\n    let yDiff = fromPt.y - toPt.y\n    let point\n    let dir\n    let pos\n\n    if (((xDiff * xDiff) < (this.TOLxTOL)) && ((yDiff * yDiff) < (this.TOLxTOL))) {\n      conn.addPoint(new draw2d.geo.Point(toPt.x, toPt.y))\n      return\n    }\n\n    if (fromDir === LEFT) {\n      if ((xDiff > 0) && ((yDiff * yDiff) < this.TOL) && (toDir === RIGHT)) {\n        point = toPt\n        dir = toDir\n      }\n      else {\n        if (xDiff < 0) {\n          point = new draw2d.geo.Point(fromPt.x - this.MINDIST, fromPt.y)\n        }\n        else if (((yDiff > 0) && (toDir === DOWN)) || ((yDiff < 0) && (toDir === UP))) {\n          point = new draw2d.geo.Point(toPt.x, fromPt.y)\n        }\n        else if (fromDir === toDir) {\n          pos = Math.min(fromPt.x, toPt.x) - this.MINDIST\n          point = new draw2d.geo.Point(pos, fromPt.y)\n        }\n        else {\n          point = new draw2d.geo.Point(fromPt.x - (xDiff / 2), fromPt.y)\n        }\n\n        if (yDiff > 0) {\n          dir = UP\n        }\n        else {\n          dir = DOWN\n        }\n      }\n    }\n    else if (fromDir === RIGHT) {\n      if ((xDiff < 0) && ((yDiff * yDiff) < this.TOL) && (toDir === LEFT)) {\n        point = toPt\n        dir = toDir\n      }\n      else {\n        if (xDiff > 0) {\n          point = new draw2d.geo.Point(fromPt.x + this.MINDIST, fromPt.y)\n        }\n        else if (((yDiff > 0) && (toDir === DOWN)) || ((yDiff < 0) && (toDir === UP))) {\n          point = new draw2d.geo.Point(toPt.x, fromPt.y)\n        }\n        else if (fromDir === toDir) {\n          pos = Math.max(fromPt.x, toPt.x) + this.MINDIST\n          point = new draw2d.geo.Point(pos, fromPt.y)\n        }\n        else {\n          point = new draw2d.geo.Point(fromPt.x - (xDiff / 2), fromPt.y)\n        }\n\n        if (yDiff > 0) {\n          dir = UP\n        }\n        else {\n          dir = DOWN\n        }\n      }\n    }\n    else if (fromDir === DOWN) {\n      if (((xDiff * xDiff) < this.TOL) && (yDiff < 0) && (toDir === UP)) {\n        point = toPt\n        dir = toDir\n      }\n      else {\n        if (yDiff > 0) {\n          point = new draw2d.geo.Point(fromPt.x, fromPt.y + this.MINDIST)\n        }\n        else if (((xDiff > 0) && (toDir === RIGHT)) || ((xDiff < 0) && (toDir === LEFT))) {\n          point = new draw2d.geo.Point(fromPt.x, toPt.y)\n        }\n        else if (fromDir === toDir) {\n          pos = Math.max(fromPt.y, toPt.y) + this.MINDIST\n          point = new draw2d.geo.Point(fromPt.x, pos)\n        }\n        else {\n          point = new draw2d.geo.Point(fromPt.x, fromPt.y - (yDiff / 2))\n        }\n\n        if (xDiff > 0) {\n          dir = LEFT\n        }\n        else {\n          dir = RIGHT\n        }\n      }\n    }\n    else if (fromDir === UP) {\n      if (((xDiff * xDiff) < this.TOL) && (yDiff > 0) && (toDir === DOWN)) {\n        point = toPt\n        dir = toDir\n      }\n      else {\n        if (yDiff < 0) {\n          point = new draw2d.geo.Point(fromPt.x, fromPt.y - this.MINDIST)\n        }\n        else if (((xDiff > 0) && (toDir === RIGHT)) || ((xDiff < 0) && (toDir === LEFT))) {\n          point = new draw2d.geo.Point(fromPt.x, toPt.y)\n        }\n        else if (fromDir === toDir) {\n          pos = Math.min(fromPt.y, toPt.y) - this.MINDIST\n          point = new draw2d.geo.Point(fromPt.x, pos)\n        }\n        else {\n          point = new draw2d.geo.Point(fromPt.x, fromPt.y - (yDiff / 2))\n        }\n\n        if (xDiff > 0) {\n          dir = LEFT\n        }\n        else {\n          dir = RIGHT\n        }\n      }\n    }\n    this._route(conn, point, dir, toPt, toDir)\n    conn.addPoint(fromPt)\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * <b>BETA VERSION. Not for production!!!<br></b>\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends  draw2d.layout.connection.ConnectionRouter\n */\n\nlet ROUTER_RECTS = null\n\ndraw2d.layout.connection.MazeConnectionRouter = draw2d.layout.connection.ConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.MazeConnectionRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.MazeConnectionRouter\",\n\n\n  /**\n   * Creates a new Router object.\n   *\n   */\n  init: function () {\n    this._super()\n\n    this.useSpline = false\n    this.useSimplify = true\n    this.useSimplifyValue = 2\n    this.useDebug = false\n    this.useShift = 4\n    this.portOutletOffset = 15\n\n\n//    \tthis.finder = new PF.AStarFinder();\n//      this.finder = new PF.AStarFinder({ allowDiagonal: true, dontCrossCorners: true});\n//      this.finder = new PF.AStarFinder({ allowDiagonal: false});\n//      this.finder = new PF.BiBreadthFirstFinder({ allowDiagonal: false});\n//      this.finder = new PF.BreadthFirstFinder({ allowDiagonal: false});\n    this.finder = new PF.JumpPointFinder({allowDiagonal: false, dontCrossCorners: true})\n  },\n\n\n  /**\n   * \n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n  },\n\n  /**\n   * @inheritdoc\n   */\n  route: function (conn, routingHints) {\n    let fromPt = conn.getStartPoint()\n    let fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n\n    let toPt = conn.getEndPoint()\n    let toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n\n    // calculate the lines between the two points.\n    //\n    this._route(conn, toPt, toDir, fromPt, fromDir)\n    this._paint(conn)\n  },\n\n  /**\n   * \n   * Internal routing algorithm.\n   *     * <p>\n   * Possible values:\n   * <ul>\n   *   <li>up -&gt; 0</li>\n   *   <li>right -&gt; 1</li>\n   *   <li>down -&gt; 2</li>\n   *   <li>left -&gt; 3</li>\n   * </ul>\n   * <p>\n\n   * @private\n   * @param {draw2d.Connection} conn\n   * @param {draw2d.geo.Point} fromPt\n   * @param {Number} fromDir\n   * @param {draw2d.geo.Point} toPt\n   * @param {Number} toDir\n   */\n  _route: function (conn, fromPt, fromDir, toPt, toDir) {\n    let shift = this.useShift\n\n    let oldToPt = toPt\n    let oldFromPt = fromPt\n\n    // move the points with an offset in the prefered routing direction of the ports\n    // to avoid that the routed connection is sticking on one side of the figure.\n    //\n    fromPt = this.getAdjustedPoint(fromPt, fromDir, this.portOutletOffset)\n    toPt = this.getAdjustedPoint(toPt, toDir, this.portOutletOffset)\n\n    let grid = this.generateNoGoGrid(conn, fromPt, fromDir, toPt, toDir)\n\n    // 4. Calculate the shortest path from source to target based on the grid\n    //\n    let path = this.finder.findPath(\n        Math.max(fromPt.x) >> shift, Math.max(fromPt.y) >> shift,\n        Math.max(toPt.x )>> shift, Math.max(0,toPt.y) >> shift,\n        grid)\n\n    // transfer the path from the grid based coordinates back to the real coordinates\n    //\n    path.forEach(e => {\n      e.x = e[0] = e[0] << shift\n      e.y = e[1] = e[1] << shift\n    })\n\n    // 5. paint the \"no go\" area in read if we are in debug mode\n    //\n    if (this.useDebug) {\n      if (ROUTER_RECTS !== null) {\n        ROUTER_RECTS.remove()\n      }\n      ROUTER_RECTS = conn.canvas.paper.set()\n\n      for (let i = 0; i < grid.width; i++) {\n        for (let j = 0; j < grid.height; j++) {\n          if (!grid.isWalkableAt(i, j))\n            ROUTER_RECTS.push(conn.canvas.paper.rect(i << shift, j << shift, 1 << shift, 1 << shift).attr({\n              \"fill\": \"red\",\n              \"opacity\": \"0.1\"\n            }))\n        }\n      }\n      ROUTER_RECTS.push(conn.canvas.paper.rect(fromPt.x - 3, fromPt.y - 3, 6, 6).attr({\n        \"fill\": \"#ff0000\",\n        \"opacity\": \"0.8\"\n      }))\n      ROUTER_RECTS.push(conn.canvas.paper.rect(toPt.x - 3, toPt.y - 3, 6, 6).attr({\n        \"fill\": \"#ff0000\",\n        \"opacity\": \"0.8\"\n      }))\n\n      // paint the original calculated path without any simplification in BLUE\n      path.forEach(e => {\n        ROUTER_RECTS.push(conn.canvas.paper.rect(e.x - 3, e.y - 3, 6, 6).attr({\"fill\": \"#0000ff\", \"opacity\": \"0.8\"}))\n      })\n      let p = path[0]\n      let svgPathBefore = [\"M\", p.x, \" \", p.y]\n      for (let i = 1; i < path.length; i++) {\n        p = path[i]\n        svgPathBefore.push(\"L\", p.x, \" \", p.y)\n      }\n      svgPathBefore = svgPathBefore.join(\"\")\n      ROUTER_RECTS.push(conn.canvas.paper.path(svgPathBefore).attr({\"stroke\": \"#0000ff\"}))\n    }\n\n\n    this.adjustPath(fromPt, path, fromDir)\n    path.reverse()\n    this.adjustPath(toPt, path, toDir)\n    path.reverse()\n\n    path.forEach(e => {\n      e.x = e[0]\n      e.y = e[1]\n    })\n\n\n    if (this.useSpline) {\n      let p = new draw2d.util.ArrayList()\n      p.add(oldFromPt)\n      path.forEach(e => {\n        p.add(new draw2d.geo.Point(e[0], e[1]))\n      })\n      p.add(oldToPt)\n\n      if (this.useDebug) {\n        path.forEach(e => {\n          ROUTER_RECTS.push(conn.canvas.paper.rect(e.x - 3, e.y - 3, 6, 6).attr({\"fill\": \"#00ff00\", \"opacity\": \"0.8\"}))\n        })\n        let pt = path[0]\n        let svgPathBefore = [\"M\", pt.x, \" \", pt.y]\n        for (let i = 1; i < path.length; i++) {\n          pt = path[i]\n          svgPathBefore.push(\"L\", pt.x, \" \", pt.y)\n        }\n        svgPathBefore = svgPathBefore.join(\"\")\n        ROUTER_RECTS.push(conn.canvas.paper.path(svgPathBefore).attr({\"stroke\": \"#00ff00\"}))\n      }\n\n      this.spline = new draw2d.util.spline.CubicSpline()\n      let splinePoints = this.spline.generate(p, 8)\n\n      if (this.useSimplify) {\n        path = []\n        splinePoints.each(function (i, e) {\n          path.push({x: e.x, y: e.y})\n        })\n        path = this.simplify(path, this.useSimplifyValue, true)\n\n        path.forEach(e => {\n          conn.addPoint(e.x, e.y)\n        })\n      }\n      else {\n        splinePoints.each(function (i, e) {\n          conn.addPoint(e)\n        })\n      }\n    }\n    else {\n      if (this.useSimplify) {\n        path = this.simplify(path, this.useSimplifyValue, true)\n      }\n\n      if (this.useDebug) {\n        path.forEach(e => {\n          ROUTER_RECTS.push(conn.canvas.paper.rect(e.x - 3, e.y - 3, 6, 6).attr({\"fill\": \"#00ff00\", \"opacity\": \"0.8\"}))\n        })\n        let p = path[0]\n        let svgPathBefore = [\"M\", p.x, \" \", p.y]\n        for (let i = 1; i < path.length; i++) {\n          p = path[i]\n          svgPathBefore.push(\"L\", p.x, \" \", p.y)\n        }\n        svgPathBefore = svgPathBefore.join(\"\")\n        ROUTER_RECTS.push(conn.canvas.paper.path(svgPathBefore).attr({\"stroke\": \"#00ff00\"}))\n      }\n\n      conn.addPoint(oldFromPt)\n      path.forEach(e => {\n        conn.addPoint(e[0], e[1])\n      })\n      conn.addPoint(oldToPt)\n\n    }\n\n  },\n\n  /**\n   * \n   * Generate a grid base no go map required for the path finding algorithm\n   *\n   * @param conn\n   * @returns {PF.Grid}\n   * @private\n   */\n  generateNoGoGrid: function (conn, fromPt, fromDir, toPt, toDir) {\n    let shift = this.useShift\n    let oneShift2 = (1 << shift) / 2\n\n    // 1. generate a map with all \"no go\" areas. The bounding box of the shapes defines\n    //    the no go areas.\n    //\n    let canvasWidth = conn.getCanvas().paper.width >> shift\n    let canvasHeight = conn.getCanvas().paper.height >> shift\n    let grid = new PF.Grid(canvasWidth, canvasHeight)\n    let figures = conn.getCanvas().getFigures()\n    figures.each(function (i, e) {\n      let box = e.getBoundingBox()\n      // remove shapes which are hit by the input or output ports. It is not possible to route\n      // out from a not walkable area\n      if (box.hitTest(fromPt.x, fromPt.y) === true || box.hitTest(toPt.x, toPt.y)) {\n        return\n      }\n\n      let x = box.x >> shift\n      let y = box.y >> shift\n      if (x < 1 || y < 1) {\n        return\n      }\n      let r_orig = (box.x + box.w + oneShift2) >> shift\n      let b_orig = (box.y + box.h + oneShift2) >> shift\n      for (let i = x; i <= r_orig; i++) {\n        for (let j = y; j <= b_orig; j++) {\n          grid.setWalkableAt(i, j, false)\n        }\n      }\n    })\n\n\n    // 3. make the are walkable on the edge of the port side. Otherwise we a\n    //    an enclosed area around the port if we are very close to another shape\n    //\n    let box = conn.getSource().getParent().getBoundingBox()\n    if (toDir === 1 || toDir === 3) {\n      let y = box.y >> shift\n      if (y > 0) {\n        let b_orig = box.y + box.h\n        let i = (toPt.x >> shift)\n\n        for (let j = y - 1; j << shift <= b_orig; j++) {\n          grid.setWalkableAt(i, j, true)\n        }\n      }\n    }\n    else {\n      let x = box.x >> shift\n      if (x > 0) {\n        let r_orig = box.x + box.w\n        let j = (toPt.x >> shift)\n        for (let i = x - 1; i << shift <= r_orig; i++) {\n          grid.setWalkableAt(i, j, true)\n        }\n      }\n    }\n\n    box = conn.getTarget().getParent().getBoundingBox()\n    if (fromDir === 1 || fromDir === 3) {\n      let y = box.y >> shift\n      if (y > 0) {\n        let b_orig = box.y + box.h\n        let i = (fromPt.x >> shift)\n        for (let j = y - 1; j << shift <= b_orig; j++) {\n          grid.setWalkableAt(i, j, true)\n        }\n      }\n    }\n    else {\n      let x = box.x >> shift\n      if (x > 0) {\n        let r_orig = box.x + box.w\n        let j = (fromPt.x >> shift)\n        for (let i = x - 1; i << shift <= r_orig; i++) {\n          grid.setWalkableAt(i, j, true)\n        }\n      }\n    }\n\n    return grid\n  },\n\n  /**\n   * \n   * move the point in the given direction with the given offset\n   *\n   * @param {draw2d.geo.Point} pt\n   * @param {Number} direction\n   * @param {Number} adjustment\n   *\n   * @returns {draw2d.geo.Point}\n   */\n  getAdjustedPoint: function (pt, direction, adjustment) {\n\n    switch (direction) {\n      case draw2d.geo.Rectangle.DIRECTION_UP:\n        return new draw2d.geo.Point(pt.x, pt.y - adjustment)\n      case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n        return new draw2d.geo.Point(pt.x + adjustment, pt.y)\n      case draw2d.geo.Rectangle.DIRECTION_DOWN:\n        return new draw2d.geo.Point(pt.x, pt.y + adjustment)\n      case draw2d.geo.Rectangle.DIRECTION_LEFT:\n        return new draw2d.geo.Point(pt.x - adjustment, pt.y)\n    }\n  },\n\n  adjustPath: function (pt, path, direction) {\n    let shift = this.useShift\n    let x = pt.x >> shift\n    let y = pt.y >> shift\n    path.forEach(e => {\n      if (y === (e[1] >> shift)) {\n        e[1] = pt.y\n      }\n      else {\n        return false\n      }\n    })\n    path.forEach(e => {\n      if (x === (e[0] >> shift)) {\n        e[0] = pt.x\n      }\n      else {\n        return false\n      }\n    })\n  },\n\n\n  getSquareDistance: function (p1, p2) { // square distance between 2 points\n\n    let dx = p1.x - p2.x,\n      dy = p1.y - p2.y\n\n    return dx * dx +\n      dy * dy\n  },\n\n  getSquareSegmentDistance: function (p, p1, p2) { // square distance from a point to a segment\n\n    let x = p1.x,\n      y = p1.y,\n\n      dx = p2.x - x,\n      dy = p2.y - y,\n\n      t\n\n    if (dx !== 0 || dy !== 0) {\n\n      t = ((p.x - x) * dx +\n        (p.y - y) * dy) /\n        (dx * dx +\n          dy * dy)\n\n      if (t > 1) {\n        x = p2.x\n        y = p2.y\n\n      } else if (t > 0) {\n        x += dx * t\n        y += dy * t\n      }\n    }\n\n    dx = p.x - x\n    dy = p.y - y\n\n    return dx * dx +\n      dy * dy\n  },\n\n  simplifyRadialDistance: function (points, sqTolerance) { // distance-based simplification\n\n    let i,\n      len = points.length,\n      point = null,\n      prevPoint = points[0],\n      newPoints = [prevPoint]\n\n    for (i = 1; i < len; i++) {\n      point = points[i]\n\n      if (this.getSquareDistance(point, prevPoint) > sqTolerance) {\n        newPoints.push(point)\n        prevPoint = point\n      }\n    }\n\n    if (prevPoint !== point) {\n      newPoints.push(point)\n    }\n\n    return newPoints\n  },\n\n\n  // simplification using optimized Douglas-Peucker algorithm with recursion elimination\n\n  simplifyDouglasPeucker: function (points, sqTolerance) {\n\n    let len = points.length,\n\n      MarkerArray = (typeof Uint8Array !== undefined + '')\n        ? Uint8Array\n        : Array,\n\n      markers = new MarkerArray(len),\n\n      first = 0,\n      last = len - 1,\n\n      i,\n      maxSqDist,\n      sqDist,\n      index,\n\n      firstStack = [],\n      lastStack = [],\n\n      newPoints = []\n\n    markers[first] = markers[last] = 1\n\n    while (last) {\n\n      maxSqDist = 0\n\n      for (i = first + 1; i < last; i++) {\n        sqDist = this.getSquareSegmentDistance(points[i], points[first], points[last])\n\n        if (sqDist > maxSqDist) {\n          index = i\n          maxSqDist = sqDist\n        }\n      }\n\n      if (maxSqDist > sqTolerance) {\n        markers[index] = 1\n\n        firstStack.push(first)\n        lastStack.push(index)\n\n        firstStack.push(index)\n        lastStack.push(last)\n      }\n\n      first = firstStack.pop()\n      last = lastStack.pop()\n    }\n\n    for (i = 0; i < len; i++) {\n      if (markers[i]) {\n        newPoints.push(points[i])\n      }\n    }\n\n    return newPoints\n  },\n\n\n  simplify: function (points, tolerance, highestQuality) {\n\n    let sqTolerance = (tolerance !== undefined)\n      ? tolerance * tolerance\n      : 1\n\n    if (!highestQuality) {\n      points = this.simplifyRadialDistance(points, sqTolerance)\n    }\n    points = this.simplifyDouglasPeucker(points, sqTolerance)\n\n    return points\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * JUST FOR RESEARCH AT THE MOMENT!!!!!!\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends  draw2d.layout.connection.ManhattanConnectionRouter\n */\n\ndraw2d.layout.connection.MuteableManhattanConnectionRouter = draw2d.layout.connection.ManhattanConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.MuteableManhattanConnectionRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.MuteableManhattanConnectionRouter\",\n\n  UP: new draw2d.geo.Ray(0, -1),\n  DOWN: new draw2d.geo.Ray(0, 1),\n  LEFT: new draw2d.geo.Ray(-1, 0),\n  RIGHT: new draw2d.geo.Ray(1, 0),\n\n  /**\n   * Creates a new Router object.\n   *\n   */\n  init: function () {\n    this._super()\n\n    this.rowsUsed = {}//new HashMap<Integer, Integer>();\n    this.colsUsed = {}//new HashMap<Integer, Integer>();\n    this.constraints = {}//new HashMap<Connection, Object>();\n    this.reservedInfo = {}//new HashMap<Connection, ReservedInfo>();\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  route: function (conn, routingHints) {\n    this.rowsUsed = {}//new HashMap<Integer, Integer>();\n    this.colsUsed = {}//new HashMap<Integer, Integer>();\n    this.constraints = {}//new HashMap<Connection, Object>();\n    this.reservedInfo = {}//new HashMap<Connection, ReservedInfo>();\n\n    let canvas = conn.getCanvas()\n    let i\n\n    let startPoint = conn.getStartPoint()\n    let endPoint = conn.getEndPoint()\n\n    let start = new draw2d.geo.Ray(startPoint)\n    let end = new draw2d.geo.Ray(endPoint)\n    let average = new draw2d.geo.Ray((start.x + end.x) / 2, (start.y + end.y) / 2)\n\n    let direction = new draw2d.geo.Ray(end.x - start.x, end.y - start.y)\n    let startNormal = this.getStartDirection(conn)\n    let endNormal = this.getEndDirection(conn)\n\n    let positions = new draw2d.util.ArrayList()\n    let horizontal = startNormal.isHorizontal()\n\n    if (horizontal) {\n      positions.add(start.y)\n    }\n    else {\n      positions.add(start.x)\n    }\n\n    horizontal = !horizontal\n\n    // dot product is zero if the vector orthogonal (90°)\n    if (startNormal.dot(endNormal) === 0) {\n      if ((startNormal.dot(direction) >= 0) && (endNormal.dot(direction) <= 0)) {\n        // 0\n      } else {\n\n        // 2\n        if (startNormal.dot(direction) < 0)\n          i = startNormal.similarity(start.translated(startNormal.scaled(10)))\n        else {\n          if (horizontal)\n            i = average.y\n          else\n            i = average.x\n        }\n\n        positions.add(i)\n        horizontal = !horizontal\n\n        if (endNormal.dot(direction) > 0) {\n          i = endNormal.similarity(end.translated(endNormal.scaled(10)))\n        }\n        else {\n          if (horizontal) {\n            i = average.y\n          }\n          else {\n            i = average.x\n          }\n        }\n        positions.add(i)\n        horizontal = !horizontal\n      }\n    } else {\n      if (startNormal.dot(endNormal) > 0) {\n        //1\n        if (startNormal.dot(direction) >= 0)\n          i = startNormal.similarity(start.translated(startNormal.scaled(10)))\n        else\n          i = endNormal.similarity(end.translated(endNormal.scaled(10)))\n        positions.add(i)\n        horizontal = !horizontal\n      } else {\n        //3 or 1\n        if (startNormal.dot(direction) < 0) {\n          i = startNormal.similarity(start.translated(startNormal.scaled(10)))\n          positions.add(i)\n          horizontal = !horizontal\n        }\n\n        // my tweak to route SCA wires starts\n        if (this.isCycle(conn)) {\n          if (horizontal)\n            i = conn.getSource().getParent().getBoundingBox().getTop() - 10// * index;\n          else\n            i = conn.getSource().getParent().getBoundingBox().getRight() + 10// * index;\n        } else {\n          if (horizontal) {\n            let j = average.y\n\n            let next = endNormal.similarity(end.translated(endNormal.scaled(10)))\n\n            let trial = new draw2d.geo.Ray((positions.get(positions.getSize() - 1)), j)\n            let figure = this.findFirstFigureAtStraightLine(canvas, trial, this.LEFT, draw2d.util.ArrayList.EMPTY_LIST)\n\n            while (figure != null && figure.getBoundingBox().x + figure.getBoundingBox().width > next) {\n              j = figure.getBoundingBox().y + figure.getBoundingBox().height + 5\n              trial.y = j\n              figure = this.findFirstFigureAtStraightLine(canvas, trial, this.LEFT, draw2d.util.ArrayList.EMPTY_LIST)\n            }\n\n            i = j\n\n          } else {\n            let figure = this.findFirstFigureAtStraightLine(canvas, start, this.RIGHT, this.getExcludingFigures(conn))\n            if (figure == null)\n              i = average.x\n            else {\n              i = Math.min(average.x, start.translated(new draw2d.geo.Ray(3 * (figure.getBoundingBox().x - start.x) / 4, 0)).x)\n              i = Math.max(start.x, i)\n            }\n            i = this.adjust(conn, i)\n          }\n        }\n        // my tweak to route SCA wires ends\n        positions.add(i)\n        horizontal = !horizontal\n      }\n    }\n    if (horizontal)\n      positions.add(end.y)\n    else\n      positions.add(end.x)\n\n    this.processPositions(start, end, positions, startNormal.isHorizontal(), conn)\n\n\n    this._paint(conn)\n  },\n\n  /**\n   *\n   *\n   * @param {draw2d.Connection} connection\n   * @param {Number} r\n   * @param {Number} n\n   * @param {Number} x\n   *\n   * @private\n   */\n  getColumnNear: function (connection, r, n, x) {\n    let min = Math.min(n, x)\n    let max = Math.max(n, x)\n\n    if (min > r) {\n      max = min\n      min = r - (min - r)\n    }\n    if (max < r) {\n      min = max\n      max = r + (r - max)\n    }\n\n    let proximity = 0\n    let direction = -1\n    if (r % 6 !== 0) {\n      r = r - (r % 6)\n    }\n\n    let i\n    while (proximity < r) {\n      i = parseInt(r + proximity * direction)\n      if (!(i in this.colsUsed)) {\n        this.colsUsed[i] = i\n        this.reserveColumn(connection, i)\n        return i\n      }\n\n      if (i <= min) {\n        return i + 6\n      }\n\n      if (i >= max) {\n        return i - 6\n      }\n\n      if (direction === 1) {\n        direction = -1\n      }\n      else {\n        direction = 1\n        proximity += 6\n      }\n    }\n    return r\n  },\n\n  getRowNear: function (connection, r, n, x) {\n    let min = Math.min(n, x)\n    let max = Math.max(n, x)\n\n    if (min > r) {\n      max = min\n      min = r - (min - r)\n    }\n    if (max < r) {\n      min = max\n      max = r + (r - max)\n    }\n\n    let proximity = 0\n    let direction = -1\n    if (r % 6 !== 0) {\n      r = r - (r % 6)\n    }\n\n    let i\n    while (proximity < r) {\n      i = parseInt(r + proximity * direction)\n      if (!(i in this.rowsUsed)) {\n        this.rowsUsed[i] = i\n        this.reserveRow(connection, i)\n        return i\n      }\n      if (i <= min)\n        return i + 6\n      if (i >= max)\n        return i - 6\n      if (direction === 1)\n        direction = -1\n      else {\n        direction = 1\n        proximity += 6\n      }\n    }\n    return r\n  },\n\n  /**\n   *   <li>up -&gt; 0</li>\n   *   <li>right -&gt; 1</li>\n   *   <li>down -&gt; 2</li>\n   *   <li>left -&gt; 3</li>\n   **/\n  getEndDirection: function (conn) {\n    let p = conn.getEndPoint()\n    let rect = conn.getTarget().getParent().getBoundingBox()\n    return this.getDirection(rect, p)\n  },\n\n\n  /**\n   *   <li>up -&gt; 0</li>\n   *   <li>right -&gt; 1</li>\n   *   <li>down -&gt; 2</li>\n   *   <li>left -&gt; 3</li>\n   **/\n  getStartDirection: function (conn) {\n    let p = conn.getStartPoint()\n    let rect = conn.getSource().getParent().getBoundingBox()\n    return this.getDirection(rect, p)\n  },\n\n  /**\n   * Returns the direction the point <i>p</i> is in relation to the given rectangle.\n   * Possible values are LEFT (-1,0), RIGHT (1,0), UP (0,-1) and DOWN (0,1).\n   *\n   * @param r the rectangle\n   * @param p the point\n   * @returns the direction from <i>r</i> to <i>p</i>\n   */\n  getDirection: function (r, p) {\n    let i = Math.abs(r.y - p.y)\n    let distance = Math.abs(r.x - p.x)\n    let direction = this.LEFT\n\n    if (i <= distance) {\n      distance = i\n      direction = this.UP\n    }\n\n    i = Math.abs(r.getBottom() - p.y)\n    if (i <= distance) {\n      distance = i\n      direction = this.DOWN\n    }\n\n    i = Math.abs(r.getRight() - p.x)\n    if (i < distance) {\n      direction = this.RIGHT\n    }\n\n    return direction\n  },\n\n  processPositions: function (/*Ray*/ start, /*Ray*/ end, /*List*/ positions, /*boolean*/ horizontal, /*Connection*/ conn) {\n    this.removeReservedLines(conn)\n\n    let pos = []\n    if (horizontal)\n      pos.push(start.x)\n    else\n      pos.push(start.y)\n    let i\n    for (i = 0; i < positions.getSize(); i++) {\n      pos.push(positions.get(i))\n    }\n\n    if (horizontal === (positions.getSize() % 2 === 1)) {\n      pos.push(end.x)\n    }\n    else {\n      pos.push(end.y)\n    }\n\n    conn.addPoint(new draw2d.geo.Point(start.x, start.y))\n    let p\n    let current, prev, min, max\n    let adjust\n    for (i = 2; i < pos.length - 1; i++) {\n      horizontal = !horizontal\n      prev = pos[i - 1]\n      current = pos[i]\n\n      adjust = (i !== pos.length - 2)\n      if (horizontal) {\n        if (adjust) {\n          min = pos[i - 2]\n          max = pos[i + 2]\n          pos[i] = current = this.getRowNear(conn, current, min, max)\n        }\n        p = new draw2d.geo.Point(prev, current)\n      } else {\n        if (adjust) {\n          min = pos[i - 2]\n          max = pos[i + 2]\n          pos[i] = current = this.getColumnNear(conn, current, min, max)\n        }\n        p = new draw2d.geo.Point(current, prev)\n      }\n      conn.addPoint(p)\n    }\n    conn.addPoint(new draw2d.geo.Point(end.x, end.y))\n  },\n\n\n  removeReservedLines: function (connection) {\n    let rInfo = this.reservedInfo[connection]\n    if (typeof rInfo === \"undefined\" || rInfo === null)\n      return\n\n    for (let i = 0; i < rInfo.reservedRows.getSize(); i++) {\n      delete this.rowsUsed[rInfo.reservedRows.get(i)]\n    }\n    for (let i = 0; i < rInfo.reservedCols.getSize(); i++) {\n      delete this.colsUsed[rInfo.reservedCols.get(i)]\n    }\n    delete this.reservedInfo[connection]\n  },\n\n  reserveColumn: function (connection, column) {\n    let info = this.reservedInfo[connection]\n    if (typeof info === \"undefined\" || info === null) {\n      info = {reservedCols: new draw2d.util.ArrayList(), reservedRows: new draw2d.util.ArrayList()}\n      this.reservedInfo[connection] = info\n    }\n    info.reservedCols.add(column)\n  },\n\n  reserveRow: function (connection, row) {\n    let info = this.reservedInfo[connection]\n    if (typeof info === \"undefined\" || info === null) {\n      info = {reservedCols: new draw2d.util.ArrayList(), reservedRows: new draw2d.util.ArrayList()}\n      this.reservedInfo[connection] = info\n    }\n    info.reservedRows.add(row)\n  },\n\n  getConstraint: function (connection) {\n    return this.constraints[connection]\n  },\n\n  setConstraint: function (connection, constraint) {\n    this.constraints[connection] = constraint\n  },\n\n  isCycle: function (conn) {\n    let source = conn.getSource().getParent()\n    let target = conn.getTarget().getParent()\n\n    return source.id === target.id\n  },\n\n  getExcludingFigures: function (conn) {\n    let excluding = new draw2d.util.ArrayList()\n\n    excluding.add(conn.getSource().getParent())\n    excluding.add(conn.getTarget().getParent())\n\n    return excluding\n  },\n\n  findFirstFigureAtStraightLine: function (canvas, /*Ray*/ start, /*Ray*/ direction, /*List*/ excluding) {\n    let figure = null\n\n    let figures = canvas.getFigures()\n    let _this = this\n    figures.each(function (i, child) {\n      try {\n        if (!excluding.contains(child)) {\n          let rect = child.getBoundingBox()\n          if (_this.LEFT.equals(direction)) {\n            if (start.x > rect.x && start.y >= rect.y && start.y <= rect.y + rect.h) {\n              if (figure === null || rect.x > figure.getBoundingBox().x)\n                figure = child\n            }\n          } else if (_this.RIGHT.equals(direction)) {\n            if (start.x < rect.x + rect.w && start.y >= rect.y && start.y <= rect.y + rect.h) {\n              if (figure == null || rect.x < figure.getBoundingBox().x)\n                figure = child\n            }\n          } else if (_this.UP.equals(direction)) {\n            if (start.y > rect.y && start.x >= rect.x && start.x <= rect.x + rect.w) {\n              if (figure === null || rect.y > figure.getBoundingBox().y)\n                figure = child\n            }\n          } else if (_this.DOWN.equals(direction)) {\n            if (start.y < rect.y + rect.h && start.x >= rect.x && start.x <= rect.x + rect.w) {\n              if (figure === null || rect.y < figure.getBoundingBox().y)\n                figure = child\n            }\n          }\n        }\n      }\n      catch (exc) {\n        console.log(exc)\n        debugger\n      }\n    })\n    return figure\n  },\n\n  adjust: function (connection, col) {\n    let column = col\n\n    let start = connection.getSource().getPosition()\n\n    let connections = connection.getCanvas().getLines()\n    connections.each(function (i, conn) {\n      try {\n        if (conn === connection)\n          return\n\n        let end = conn.getTarget().getPosition()\n        if (start.x < end.x && start.y === end.y) {\n          if (conn.getVertices().getMidpoint().x <= col)\n            column = conn.getVertices().getMidpoint().x - 5\n        }\n      }\n      catch (exc) {\n        console.log(exc)\n        debugger\n      }\n    })\n    return column\n  }\n\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Router for direct connections between two ports with a rubber band effect\n *\n *\n * @example\n *\n *    let RubberConnection= draw2d.Connection.extend({\n *        NAME: \"RubberConnection\",\n *\n *        init:function(attr, setter, getter)\n *        {\n *          this._super(extend({\n *              color: \"#33691e\",\n *              stroke:1,\n *              outlineStroke:0,\n *              outlineColor:null\n *          },attr),\n *          setter,\n *          getter);\n *\n *\n *          this.setRouter(new draw2d.layout.connection.RubberbandRouter());\n *        },\n *\n *        repaint:function(attributes)\n *        {\n *            if (this.repaintBlocked===true || this.shape === null){\n *                return;\n *            }\n *            attributes= attributes || {};\n *            // enrich the rendering with a \"fill\" attribute\n *            if(typeof attributes.fill === \"undefined\"){\n *            \t   attributes.fill = \"#aed581\";\n *            }\n *            this._super(attributes);\n *       }\n *    });\n *\n *    let createConnection=function(){\n *       let con = new RubberConnection();\n *       return con;\n *    };\n *\n *    // install a custom connection create policy\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *           createConnection: createConnection\n *    }));\n *\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let start = new draw2d.shape.node.Start();\n *    let end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends  draw2d.layout.connection.ConnectionRouter\n */\ndraw2d.layout.connection.RubberbandRouter = draw2d.layout.connection.ConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.RubberbandRouter.prototype */\n  {\n\n  NAME: \"draw2d.layout.connection.RubberbandRouter\",\n\n  /**\n   * Creates a new Router object\n   *\n   */\n  init: function () {\n    this._super()\n  },\n\n\n  /**\n   * \n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n\n  },\n\n  /**\n   * \n   * Invalidates the given Connection\n   */\n  invalidate: function () {\n  },\n\n  /**\n   * @inheritdoc\n   */\n  route: function (connection, routingHints) {\n    let thickness = 10\n\n    let start = connection.getStartPoint()\n    let end = connection.getEndPoint()\n\n    // 1. Calculate the vector AB→ by subtracting the coordinates of A from the coordinates of B.\n    //    Let's say you get (u,v) as the vector components.\n    //\n    // 2. normalize the vector (u,v,) to a length of |1|\n    //\n    // 3. The vector (−v,u) is AB→ rotated by 90 degrees counterclockwise. (Why? Look up \"rotation matrix\").\n    //\n    // 4. Add (−v,u) to A to get C. Also add (−v,u) to B to get D.\n\n    let uv = end.subtract(start)\n    let uv2 = uv.clone()\n    let length = uv.length()\n\n    let strength = 1 - Math.min(0.75, (1 / 500 * length))\n    let first = start.lerp(end, 0.25 * strength)     // go closer to the start point if the strength grows\n    let second = start.lerp(end, 0.5)\n    let third = start.lerp(end, 1 - (0.25 * strength)) // go closer to the end point if the strengths grows\n\n    thickness = Math.max(5, thickness * strength)\n\n    uv.x = uv.x / length * thickness\n    uv.y = uv.y / length * thickness\n\n    uv2.x = uv2.x / length * (thickness * (strength))\n    uv2.y = uv2.y / length * (thickness * (strength))\n\n    // anchor points for the 180 arc at the start point of the connection\n    //\n    let start90 = new draw2d.geo.Point(-uv.y + start.x, uv.x + start.y)\n    let start270 = new draw2d.geo.Point(uv.y + start.x, -uv.x + start.y)\n\n    // anchor point in the first segment ( on the upside/downside) of the connection\n    //\n    let first90 = new draw2d.geo.Point(-uv2.y + first.x, uv2.x + first.y)\n    let first270 = new draw2d.geo.Point(uv2.y + first.x, -uv2.x + first.y)\n\n    // center upside/downside anchor point of the connection\n    //\n    let second90 = new draw2d.geo.Point(-uv2.y + second.x, uv2.x + second.y)\n    let second270 = new draw2d.geo.Point(uv2.y + second.x, -uv2.x + second.y)\n\n    // anchor point in the third segment of the connection\n    //\n    let third90 = new draw2d.geo.Point(-uv2.y + third.x, uv2.x + third.y)\n    let third270 = new draw2d.geo.Point(uv2.y + third.x, -uv2.x + third.y)\n\n    // anchor point for the 180 arc at the end\n    //\n    let end90 = new draw2d.geo.Point(-uv.y + end.x, uv.x + end.y)\n    let end270 = new draw2d.geo.Point(uv.y + end.x, -uv.x + end.y)\n\n    // required for hit tests\n    //\n    connection.addPoint(start)\n    connection.addPoint(end)\n\n    // calculate the path\n    let path = [\"M\", start90.x, \",\", start90.y]\n    path.push(\"A\", thickness, \",\", thickness, \"0 0 1 \", start270.x, \",\", start270.y)\n    path.push(\"C\", start270.x, \",\", start270.y, first270.x, \",\", first270.y, second270.x, \",\", second270.y)\n    path.push(\"C\", second270.x, \",\", second270.y, third270.x, \",\", third270.y, end270.x, \",\", end270.y)\n    path.push(\"A\", thickness, \",\", thickness, \"0 0 1\", end90.x, \",\", end90.y)\n    path.push(\"C\", end90.x, \",\", end90.y, third90.x, \",\", third90.y, second90.x, \",\", second90.y)\n    path.push(\"C\", second90.x, \",\", second90.y, first90.x, \",\", first90.y, start90.x, \",\", start90.y)\n\n    connection.svgPathString = path.join(\" \")\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Provide a router which routes the connection in a hand drawn manner.\n *\n * @example\n *\n *    let createConnection=function(){\n *       let con = new draw2d.Connection();\n *       con.setRouter(new draw2d.layout.connection.SketchConnectionRouter());\n *       return con;\n *    };\n *\n *    // install a custom connection create policy\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *           createConnection: createConnection\n *    }));\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let f1 = new draw2d.shape.analog.OpAmp({x:10, y:10});\n *    let f2 = new draw2d.shape.analog.ResistorVertical({angle:90, height:20, x:300, y:150});\n *\n *    // ...add it to the canvas\n *    //\n *    canvas.add( f1);\n *    canvas.add( f2);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(f1.getOutputPort(0));\n *    c.setTarget(f2.getHybridPort(0));\n *    canvas.add(c);\n *\n * @inheritable\n * @author Andreas Herz\n * @since 2.7.2\n * @extends  draw2d.layout.connection.MazeConnectionRouter\n */\ndraw2d.layout.connection.SketchConnectionRouter = draw2d.layout.connection.MazeConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.SketchConnectionRouter.prototype */\n  {\n  NAME: \"draw2d.layout.connection.SketchConnectionRouter\",\n\n  /**\n   * Creates a new Router object.\n   *\n   */\n  init: function () {\n    this._super()\n\n    this.useSpline = true\n    this.useShift = 5\n    this.useSimplifyValue = 0.2\n    this.finder = new PF.JumpPointFinder({allowDiagonal: false, dontCrossCorners: true})\n  },\n\n  /**\n   *\n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A ManhattanConnectionRouter with an spline interpolation between the bend points.\n *\n * @example\n *\n *    let createConnection=function(){\n *       let con = new draw2d.Connection();\n *       con.setRouter(new draw2d.layout.connection.SplineConnectionRouter());\n *       return con;\n *    };\n *\n *    // install a custom connection create policy\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *           createConnection: createConnection\n *    }));\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let f1 = new draw2d.shape.analog.OpAmp({x:10, y:10});\n *    let f2 = new draw2d.shape.analog.ResistorVertical({angle:90, height:20, x:300, y:150});\n *\n *    // ...add it to the canvas\n *    //\n *    canvas.add( f1);\n *    canvas.add( f2);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(f1.getOutputPort(0));\n *    c.setTarget(f2.getHybridPort(0));\n *    canvas.add(c);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.layout.connection.ManhattanConnectionRouter\n */\ndraw2d.layout.connection.SplineConnectionRouter = draw2d.layout.connection.ManhattanConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.SplineConnectionRouter.prototype */\n  {\n  \n  NAME: \"draw2d.layout.connection.SplineConnectionRouter\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function () {\n    this._super()\n\n//        this.spline = new draw2d.util.spline.CatmullRomSpline();\n    this.spline = new draw2d.util.spline.CubicSpline()\n//        this.spline = new draw2d.util.spline.BezierSpline();\n\n    this.MINDIST = 50\n  },\n\n\n  /**\n   *\n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n  },\n\n  /**\n   * @inheritdoc\n   */\n  route: function (conn, routingHints) {\n    let i\n    let fromPt = conn.getStartPoint()\n    let fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n\n    let toPt = conn.getEndPoint()\n    let toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n\n    // calculate the manhatten bend points between start/end.\n    //\n    this._route(conn, toPt, toDir, fromPt, fromDir)\n\n    let ps = conn.getVertices()\n\n    conn.oldPoint = null\n    conn.lineSegments = new draw2d.util.ArrayList()\n    conn.vertices = new draw2d.util.ArrayList()\n\n    let splinePoints = this.spline.generate(ps, 8)\n    splinePoints.each(function (i, e) {\n      conn.addPoint(e)\n    })\n\n    // calculate the path string for the SVG rendering\n    //\n    ps = conn.getVertices()\n    let length = ps.getSize()\n    let p = ps.get(0)\n    let path = [\"M\", p.x, \" \", p.y]\n    for (i = 1; i < length; i++) {\n      p = ps.get(i)\n      path.push(\"L\", p.x, \" \", p.y)\n    }\n    conn.svgPathString = path.join(\"\")\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A Router with unlimited vertices.\n *\n *\n * @example\n *\n *    // Override the default connection type. This is used during drag&drop operations of ports.\n *    //\n *    let createConnection=function(){\n *       // return my special kind of connection\n *       let con = new draw2d.Connection();\n *       con.setRouter(new draw2d.layout.connection.VertexRouter());\n *       return con;\n *    };\n *\n *    // Install a special policy into the canvas to use my own implementation of connection\n *    // if we drag&drop a port\n *    //\n *    canvas.installEditPolicy(  new draw2d.policy.connection.DragConnectionCreatePolicy({\n *          createConnection: createConnection\n *    }));\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let start = new draw2d.shape.node.Start();\n *    let end   = new draw2d.shape.node.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,80);\n *\n *    // first Connection\n *    //\n *    let c = createConnection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends  draw2d.layout.connection.ConnectionRouter\n */\ndraw2d.layout.connection.VertexRouter = draw2d.layout.connection.ConnectionRouter.extend(\n  /** @lends draw2d.layout.connection.VertexRouter.prototype */\n  {\n  \n  NAME: \"draw2d.layout.connection.VertexRouter\",\n\n  /**\n   * Creates a new Router object\n   *\n   */\n  init: function () {\n    this._super()\n  },\n\n\n  /**\n   *\n   * Callback method if the router has been assigned to a connection.\n   *\n   * @param {draw2d.Connection} connection The assigned connection\n   * @template\n   * @since 2.7.2\n   */\n  onInstall: function (connection) {\n    connection.installEditPolicy(new draw2d.policy.line.VertexSelectionFeedbackPolicy())\n  },\n\n  /**\n   *\n   * Invalidates the given Connection\n   */\n  invalidate: function () {\n  },\n\n  /**\n   * @inheritdoc\n   */\n  route: function (connection, routingHints) {\n    // reuse all existing vertex points\n    //\n    let count = routingHints.oldVertices.getSize()\n    for (let i = 0; i < count; i++) {\n      connection.addPoint(routingHints.oldVertices.get(i))\n    }\n\n    let ps = connection.getVertices()\n\n    // respect the calculated anchor position if the start/end port has set any Anchor impl.\n    let startAnchor = connection.getStartPosition(ps.get(1))\n    let endAnchor = connection.getEndPosition(ps.get(ps.getSize() - 2))\n    ps.first().setPosition(startAnchor)\n    ps.last().setPosition(endAnchor)\n\n    this._paint(connection)\n  },\n\n  /**\n   *\n   * Callback method for the PolyLine or Connection to check if it possible to remove a vertex from\n   * the list. The router can send an veto for this.\n   * Per default it is not possible to remove any vertex from the PolyLine exceptional if any interactive\n   * router is installed.\n   *\n   * @param {draw2d.Connection} conn\n   * @param {Number} index\n   *\n   * @since 4.2.3\n   */\n  canRemoveVertexAt: function (conn, index) {\n    return false\n  },\n\n  /**\n   * Callback method for the PolyLine or Connection to verify that a segment is deletable.\n   *\n   * @param {draw2d.Connection} conn\n   * @param {Number} index\n   *\n   * @returns {Boolean}\n   * @since 4.2.3\n   */\n  canRemoveSegmentAt: function (conn, index) {\n\n    let segmentCount = conn.getVertices().getSize() - 1 // segmentCount is one less than vertex count\n\n    // The first and last segment isn't deletable\n    //\n    if ((index <= 0) || (index >= segmentCount)) {\n      return false\n    }\n\n    // a connection need at least one strokes\n    //\n    return (segmentCount >= 2)\n  },\n\n\n  /**\n   *\n   * Tweak or enrich the polyline persistence data with routing information\n   *\n   * @since 2.10.0\n   * @param {draw2d.shape.basic.PolyLine} line\n   * @param {Object} memento The memento data of the polyline\n   *\n   * @returns {Object}\n   */\n  getPersistentAttributes: function (line, memento) {\n    memento.vertex = []\n\n    line.getVertices().each(function (i, e) {\n      memento.vertex.push({x: e.x, y: e.y})\n    })\n\n    return memento\n  },\n\n  /**\n   *\n   * set the attributes for the polyline with routing information\n   *\n   * @since 2.10.0\n   * @param {Object} memento\n   */\n  setPersistentAttributes: function (line, memento) {\n    // restore the points from the JSON data and add them to the polyline\n    //\n    if (Array.isArray(memento.vertex) && memento.vertex.length > 1) {\n\n      line.oldPoint = null\n      line.lineSegments = new draw2d.util.ArrayList()\n\n      line.setVertices(memento.vertex)\n    }\n  },\n\n  /**\n   *\n   *\n   * The draw2d.Connection delegates the drag operation to the router. The router can\n   * handle the different constraints of the connection and just drag&drop a single segment\n   * instead of the complete connection.\n   *\n   * @param {draw2d.shape.basic.Line} line the related line to handle\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   *\n   * @since 6.1.0\n   */\n  onDrag: function (line, dx, dy, dx2, dy2) {\n    let count = line.getVertices().getSize() - 1\n    for (let i = 1; i < count; i++) {\n      line.getVertex(i).translate(dx2, dy2)\n    }\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A bottomLocator is used to place figures at the bottom of a parent shape.\n *\n *\n *\n * @example\n *\n *    // create a basic figure and add a Label/child via API call\n *    //\n *    let circle = new draw2d.shape.basic.Circle({\n *        x:100,\n *        y:50,\n *        diameter:100,\n *        stroke: 3,\n *        color:\"#A63343\",\n *        bgColor:\"#E65159\"\n *    });\n *\n *    circle.add(new draw2d.shape.basic.Label({text:\"Bottom Label\"}), new draw2d.layout.locator.BottomLocator());\n *    canvas.add( circle);\n *\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.BottomLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.BottomLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.BottomLocator\",\n\n  /**\n   *\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   * Relocates the given Figure.\n   *\n   * @param {Number} index child index of the target\n   * @param {draw2d.Figure} target The figure to relocate\n   **/\n  relocate: function (index, target) {\n    let parent = target.getParent()\n    let boundingBox = parent.getBoundingBox()\n    // I made a wrong decision in the port handling: anchor point\n    // is in the center and not topLeft. Now I must correct this flaw here, and there, and...\n    // shit happens.\n    let offset = (parent instanceof draw2d.Port) ? boundingBox.w / 2 : 0\n\n\n    let targetBoundingBox = target.getBoundingBox()\n    if (target instanceof draw2d.Port) {\n      target.setPosition(boundingBox.w / 2 - offset, boundingBox.h)\n    }\n    else {\n      target.setPosition(boundingBox.w / 2 - targetBoundingBox.w / 2 - offset, 2 + boundingBox.h)\n    }\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A CenterLocator is used to place figures in the center of a parent shape.\n *\n *\n *\n * @example\n *\n *\n *    // create a basic figure and add a Label/child via API call\n *    //\n *    let circle = new draw2d.shape.basic.Circle({diameter:120});\n *    circle.setStroke(3);\n *    circle.setColor(\"#A63343\");\n *    circle.setBackgroundColor(\"#E65159\");\n *    circle.add(new draw2d.shape.basic.Label({text:\"Center Label\"}), new draw2d.layout.locator.CenterLocator());\n *    canvas.add( circle, 100,50);\n *\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.CenterLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.CenterLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.CenterLocator\",\n\n  /**\n   * Constructs a locator with associated parent.\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   * Relocates the given Figure.\n   *\n   * @param {Number} index child index of the target\n   * @param {draw2d.Figure} target The figure to relocate\n   **/\n  relocate: function (index, target) {\n    let parent = target.getParent()\n    let boundingBox = parent.getBoundingBox()\n\n    // TODO: instanceof is always a HACK. ugly. Redirect the call to the figure instead of \n    // determine the position with a miracle.\n    //\n    if (target instanceof draw2d.Port) {\n      target.setPosition(boundingBox.w / 2, boundingBox.h / 2)\n    }\n    else {\n      let targetBoundingBox = target.getBoundingBox()\n      target.setPosition(((boundingBox.w / 2 - targetBoundingBox.w / 2) | 0) + 0.5, ((boundingBox.h / 2 - (targetBoundingBox.h / 2)) | 0) + 0.5)\n    }\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Repositions a Figure attached to a Connection when the\n * Connection is moved. Provides for alignment at the start\n * (source), middle, or end (target) of the Connection.\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.ConnectionLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.ConnectionLocator.prototype */\n  {\n  \n  NAME: \"draw2d.layout.locator.ConnectionLocator\",\n\n  /**\n   * Default constructor for a Locator which can layout a figure in context of a\n   * {@link draw2d.Connector}\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A DraggableLocator is used to place figures relative to the parent top left corner. It is\n * possible to move a child node via drag&drop.\n *\n *\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.DraggableLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.DraggableLocator.prototype */\n  {\n  \n  NAME: \"draw2d.layout.locator.DraggableLocator\",\n\n  /**\n   * Constructs a locator with associated parent.\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  bind: function (parent, child) {\n    // override the parent implementation to avoid\n    // that the child is \"!selectable\" and \"!draggable\"\n\n    // Don't redirect the selection handling to the parent\n    // Using the DraggableLocator provides the ability to the children\n    // that they are selectable and draggable. Remove the SelectionAdapter from the parent\n    // assignment.\n    child.setSelectionAdapter(() => child)\n  },\n\n  unbind: function (parent, child) {\n    // use default\n    child.setSelectionAdapter(null)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Repositions a Figure attached to a Connection when the\n * Connection is moved. Provides for alignment at the start\n * (source), middle, or end (target) of the Connection.\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.PortLocator\n */\ndraw2d.layout.locator.InputPortLocator = draw2d.layout.locator.PortLocator.extend(\n  /** @lends draw2d.layout.locator.InputPortLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.InputPortLocator\",\n\n  /**\n   * Default constructor for a Locator which can layout a port in context of a\n   * {@link draw2d.shape.node.Node}\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  /**\n   *\n   * Controls the location of an {@link draw2d.Figure}\n   *\n   * @param {Number} index port index of the figure\n   * @param {draw2d.Figure} figure the figure to control\n   *\n   * @template\n   **/\n  relocate: function (index, figure) {\n    let node = figure.getParent()\n\n    let dividerFactor = 1\n    let thisNAME = this.NAME\n    let portIndex = 1\n    node.getPorts().each((i, p) => {\n      portIndex = (p === figure) ? dividerFactor : portIndex\n      dividerFactor += p.getLocator().NAME === thisNAME ? 1 : 0\n    })\n    this.applyConsiderRotation(figure, 0, (node.getHeight() / dividerFactor) * portIndex)\n  }\n\n})\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A LeftLocator is used to place figures to the left of a parent shape.\n *\n *\n *\n * @example\n *\n *    // create a basic figure and add a Label/child via API call\n *    //\n *    let start = new draw2d.shape.node.Start();\n *    start.add(new draw2d.shape.basic.Label({text:\"Left Label\"}), new draw2d.layout.locator.LeftLocator({\n *     margin:10  // distance to the parent shape\n *    }));\n *    canvas.add( start, 100,50);\n *\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.LeftLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.LeftLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.LeftLocator\",\n\n  /**\n   * Constructs a locator with associated parent.\n   *\n   * @param {Object} attr additional init attributes\n   * @param {Object} setter key/value map of injected setter-methods\n   * @param {Object} getter key/value map of injected getter-methods\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter,getter)\n\n    this.margin = (attr && (\"margin\" in attr)) ? attr.margin : 5\n  },\n\n\n  /**\n   *\n   * Relocates the given Figure.\n   *\n   * @param {Number} index child index of the target\n   * @param {draw2d.Figure} target The figure to relocate\n   **/\n  relocate: function (index, target) {\n    let parent = target.getParent()\n    let boundingBox = parent.getBoundingBox()\n\n    // I made a wrong decision in the port handling: anchor point\n    // is in the center and not topLeft. Now I must correct this flaw here, and there, and...\n    // shit happens.\n    let offset = (parent instanceof draw2d.Port) ? boundingBox.h / 2 : 0\n\n\n    if (target instanceof draw2d.Port) {\n      target.setPosition(0, (boundingBox.h / 2) - offset)\n    }\n    else {\n      let targetBoundingBox = target.getBoundingBox()\n      target.setPosition(-targetBoundingBox.w - this.margin, (boundingBox.h / 2) - (targetBoundingBox.h / 2) - offset)\n    }\n  }\n})\n","import draw2d from '../../packages'\nimport extend from \"../../util/extend\";\nimport jsonUtil from \"../../util/JSONUtil\";\n\n\n/**\n * @class\n *\n * Controls the location of an IFigure.\n *\n * @author Andreas Herz\n */\ndraw2d.layout.locator.Locator = Class.extend(\n  /** @lends draw2d.layout.locator.Locator.prototype */\n  {\n\n    NAME: \"draw2d.layout.locator.Locator\",\n\n    /**\n     * Initial Constructor\n     *\n     * @param {Object} attr additional init attributes\n     * @param {Object} setter key/value map of injected setter-methods\n     * @param {Object} getter key/value map of injected getter-methods\n     */\n    init: function (attr, setter, getter) {\n\n      this.setterWhitelist = extend({}, setter)\n      this.getterWhitelist = extend({}, getter)\n    },\n\n    /**\n     *\n     * Read or set locator attributes.<br>\n     * When no value is given, reads specified attribute from the element.<br>\n     * When value is given, sets the attribute to that value.\n     * Multiple attributes can be set by passing an object with name-value pairs.\n     *\n     *\n     *    // multiple attributes:\n     *    locator.attr({\n     *      x: 30,\n     *      y: 40\n     *    });\n     *\n     *    let data = locator.attr()\n     *\n     *\n     * @param {String/Object} name\n     * @param {Object} [value]\n     * @since 5.0.1\n     * @experimental\n     * @returns {Object} either the requested attribute if this method used as getter or `this` if the method uses as setter\n     **/\n    attr: function (name, value) {\n      let _this = this\n\n      // call of attr as setter method with {name1:val1, name2:val2 }  argument list\n      //\n      if ($.isPlainObject(name)) {\n        for (let key in name) {\n          let func = this.setterWhitelist[key]\n          let param = name[key]\n          if (func && param !== undefined) {\n            func.call(this, param)\n          }\n        }\n      } else if (typeof name === \"string\") {\n        // call attr as getter\n        //\n        if (typeof value === \"undefined\") {\n          let getter = this.getterWhitelist[name]\n          if (typeof getter === \"function\") {\n            return getter.call(this)\n          }\n          return // undefined\n        }\n\n        // the value can be a function. In this case we must call the value().\n        if (typeof value === \"function\") {\n          value = value()\n        }\n        let setter = this.setterWhitelist[name]\n        if (setter) {\n          setter.call(this, value)\n        }\n      }\n      // may it is a array of attributes used for the getter\n      //\n      else if (Array.isArray(name)) {\n        return Object.assign({}, ...Object.keys(name).map(k => ({[k]: _this.attr(k)})))\n      }\n      // generic getter of all registered attributes\n      else if (typeof name === \"undefined\") {\n        let result = {}\n        for (let key in this.getterWhitelist) {\n          result[key] = this.getterWhitelist[key].call(this)\n        }\n        return result\n      }\n\n      return this\n    },\n\n    /**\n     *\n     * Callback method if a child is bounded to a parent. This is\n     * the perfect moment to prepare the child node with some basic\n     * behaviour which are forced by the <code>Locator</code>\n     *\n     * @param {draw2d.Figure} figure\n     * @param {draw2d.Figure} child\n     * @returns {this}\n     */\n    bind: function (figure, child) {\n      // default behaviour of an Locator. The child isn't draggable and\n      // the locator defines the position of the child.\n      //\n      child.setDraggable(false)\n      child.setSelectable(false)\n\n      return this\n    },\n\n    /**\n     *\n     * Callback method if a child is unbounded to the locator.\n     *\n     * @param {draw2d.Figure} figure\n     * @param {draw2d.Figure} child\n     * @returns {this}\n     */\n    unbind: function (figure, child) {\n\n      return this\n    },\n\n\n    /**\n     *\n     * Controls the location of an I{@link draw2d.Figure}\n     *\n     * @param {Number} index child index of the figure\n     * @param {draw2d.Figure} figure the figure to control\n     *\n     * @private\n     **/\n    relocate: function (index, figure) {\n      // just repaint the child to update the SVG related to the new location\n      // of the parent.\n      figure.repaint()\n    },\n\n    /**\n     *\n     * Return a clone of the locator object\n     *\n     * @returns {draw2d.layout.locator.Locator}\n     */\n    clone: function () {\n      return eval(\"new \" + this.NAME + \"()\")\n    }\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A ManhattanMidpointLocator that is used to place figures at the midpoint of a Manhatten routed\n * connection. The midpoint is always in the center of an edge.\n *\n *\n *\n * @example\n *\n *    // create and add two Node which contains Ports (In and OUT)\n *    let start = new draw2d.shape.node.Start({x:50,y:50});\n *    let end   = new draw2d.shape.node.End({x:230,y:100});\n *\n *    canvas.add( start);\n *    canvas.add( end);\n *\n *    // Create a Connection and connect the Start and End node\n *    //\n *    let c = new draw2d.Connection();\n *    c.setSource(start.getOutputPort(0));\n *    c.setTarget(end.getInputPort(0));\n *    canvas.add(c);\n *\n *    // create a label which should attach to the connection\n *    //\n *    let label = new draw2d.shape.basic.Label({text:\"I'm a Label\"});\n *    label.setColor(\"#0d0d0d\");\n *    label.setFontColor(\"#0d0d0d\");\n *    label.setBackgroundColor(\"#f0f0f0\");\n *\n *    // add the decoration to the connection with a ManhattanMidpointLocator.\n *    //\n *    c.add(label, new draw2d.layout.locator.ManhattanMidpointLocator());\n *\n * @author Andreas Herz\n * @extends draw2d.layout.locator.ConnectionLocator\n */\ndraw2d.layout.locator.ManhattanMidpointLocator = draw2d.layout.locator.ConnectionLocator.extend(\n  /** @lends draw2d.layout.locator.ManhattanMidpointLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.ManhattanMidpointLocator\",\n\n  /**\n   * Constructs a ManhattanMidpointLocator with associated Connection c.\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   *\n   * Relocates the given Figure always in the center of an edge.\n   *\n   * @param {Number} index child index of the target\n   * @param {draw2d.Figure} target The figure to relocate\n   **/\n  relocate: function (index, target) {\n    let conn = target.getParent()\n    let points = conn.getVertices()\n\n    let segmentIndex = Math.floor((points.getSize() - 2) / 2)\n    if (points.getSize() <= segmentIndex + 1)\n      return\n\n    let p1 = points.get(segmentIndex)\n    let p2 = points.get(segmentIndex + 1)\n\n    target.setPosition(\n      ((p2.x - p1.x) / 2 + p1.x - target.getWidth() / 2) | 0,\n      ((p2.y - p1.y) / 2 + p1.y - target.getHeight() / 2) | 0)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Repositions a Figure attached to a Connection when the\n * Connection is moved. Provides for alignment at the start\n * (source), middle, or end (target) of the Connection.\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.PortLocator\n */\ndraw2d.layout.locator.OutputPortLocator = draw2d.layout.locator.PortLocator.extend(\n  /** @lends draw2d.layout.locator.OutputPortLocator.prototype */\n  {\n  \n  NAME: \"draw2d.layout.locator.OutputPortLocator\",\n\n  /**\n   * Default constructor for a Locator which can layout a port in context of a\n   * {@link draw2d.shape.node.Node}\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  /**\n   *\n   * Controls the location of an I{@link draw2d.Figure}\n   *\n   * @param {Number} index child index of the figure\n   * @param {draw2d.Figure} figure the figure to control\n   *\n   * @template\n   **/\n  relocate: function (index, figure) {\n    let node = figure.getParent()\n    let dividerFactor = 1\n    let thisNAME = this.NAME\n    let portIndex = 1\n    node.getPorts().each((i, p) => {\n      portIndex = (p === figure) ? dividerFactor : portIndex\n      dividerFactor += p.getLocator().NAME === thisNAME ? 1 : 0\n    })\n    this.applyConsiderRotation(figure, node.getWidth(), (node.getHeight() / dividerFactor) * portIndex)\n  }\n\n})\n\n\n\n","import draw2d from '../../packages'\nimport extend from \"../../util/extend\";\n\n\n/**\n * @class\n *\n * A ParallelMidpointLocator that is used to place label at the midpoint of a  routed\n * connection. The midpoint is always in the center of an edge.\n * The label is aligned to the connection angle at the calculated conection segment.\n *\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.ConnectionLocator\n * @since 4.4.4\n */\ndraw2d.layout.locator.ParallelMidpointLocator = draw2d.layout.locator.ConnectionLocator.extend(\n  /** @lends draw2d.layout.locator.ParallelMidpointLocator.prototype */\n  {\n\n    NAME: \"draw2d.layout.locator.ParallelMidpointLocator\",\n\n    /**\n     * Constructs a ParallelMidpointLocator with optional padding to the connection.\n     *\n     * if the parameter <b>distance</b> is less than zero the label is\n     * placed above of the connection. Else the label is below the connection.\n     *\n     * @param {Object} attr object with {distance: <NUMBER>>} distance of the label to the connection.\n     */\n    init: function (attr, setter, getter) {\n      this.distance = 0\n\n      this._super(extend({\n          distance: -5\n        }, attr),\n        extend({\n          x: this.setDistance\n        }, setter),\n        extend({\n          distance: this.getDistance\n        }, getter))\n    },\n\n    /**\n     * Set the distance to the connection\n     *\n     * @param {Number} distance the distance to the connection\n     * @returns {this}\n     */\n    setDistance: function (distance) {\n      this.distance = distance\n      return this\n    },\n\n    /**\n     * Returns the distance to the connection\n     *\n     * @returns {Number}\n     */\n    getDistance: function () {\n      return this.distance\n    },\n\n    /**\n     *\n     * Relocates the given Figure always in the center of an edge.\n     *\n     * @param {Number} index child index of the target\n     * @param {draw2d.Figure} target The figure to relocate\n     **/\n    relocate: function (index, target) {\n      let conn = target.getParent()\n      let points = conn.getVertices()\n\n      let segmentIndex = Math.floor((points.getSize() - 2) / 2)\n      if (points.getSize() <= segmentIndex + 1) {\n        return\n      }\n\n      let p1 = points.get(segmentIndex)\n      let p2 = points.get(segmentIndex + 1)\n\n      // calculate the distance of the label (above or below the connection)\n      let distance = this.distance <= 0 ? this.distance - target.getHeight() : this.distance\n\n      // get the angle of the segment\n      let nx = p1.x - p2.x\n      let ny = p1.y - p2.y\n      let length = Math.sqrt(nx * nx + ny * ny)\n      let radian = -Math.asin(ny / length)\n      let angle = (180 / Math.PI) * radian\n      if (radian < 0) {\n        if (p2.x < p1.x) {\n          radian = Math.abs(radian) + Math.PI\n          angle = 360 - angle\n          distance = -distance - target.getHeight()\n        } else {\n          radian = Math.PI * 2 - Math.abs(radian)\n          angle = 360 + angle\n        }\n      } else {\n        if (p2.x < p1.x) {\n          radian = Math.PI - radian\n          angle = 360 - angle\n          distance = -distance - target.getHeight()\n        }\n      }\n\n      let rotAnchor = this.rotate(length / 2 - target.getWidth() / 2, distance, 0, 0, radian)\n\n      // rotate the x/y coordinate with the calculated angle around \"p1\"\n      //\n      let rotCenterOfLabel = this.rotate(0, 0, target.getWidth() / 2, target.getHeight() / 2, radian)\n\n      target.setRotationAngle(angle)\n      target.setPosition(rotAnchor.x - rotCenterOfLabel.x + p1.x, rotAnchor.y - rotCenterOfLabel.y + p1.y)\n    },\n\n    rotate: function (x, y, xm, ym, radian) {\n      let cos = Math.cos,\n        sin = Math.sin\n\n      // Subtract midpoints, so that midpoint is translated to origin\n      // and add it in the end again\n      return {\n        x: (x - xm) * cos(radian) - (y - ym) * sin(radian) + xm,\n        y: (x - xm) * sin(radian) + (y - ym) * cos(radian) + ym\n      }\n    }\n\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A PolylineMidpointLocator is used to place figures at the midpoint of a routed\n * connection. <br>\n * If the connection did have an odd count of points the figure is located in the center vertex of the polyline.<br>\n * On an even count of junction point, the figure will be center on the middle segment of the ploy line.\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.ManhattanMidpointLocator\n */\ndraw2d.layout.locator.PolylineMidpointLocator = draw2d.layout.locator.ManhattanMidpointLocator.extend(\n  /** @lends draw2d.layout.locator.PolylineMidpointLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.PolylineMidpointLocator\",\n\n  /**\n   * Constructs a ManhattanMidpointLocator with associated Connection c.\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   *\n   * Relocates the given Figure.\n   *\n   * @param {Number} index child index of the target\n   * @param {draw2d.Figure} target The figure to relocate\n   **/\n  relocate: function (index, target) {\n    var conn = target.getParent()\n    var points = conn.getVertices()\n\n    // it has an event count of points -> use the manhattan algorithm...this is working\n    // well in this case\n    if (points.getSize() % 2 === 0) {\n      this._super(index, target)\n    }\n    // odd count of points. take the center point as fulcrum\n    else {\n      var index = Math.floor(points.getSize() / 2)\n      var p1 = points.get(index)\n      target.setPosition(p1.x - (target.getWidth() / 2), p1.y - (target.getHeight() / 2))\n    }\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * The port locator calculates the position of an port. All ports MUST have a locator\n * if you add them as child to a node.\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.PortLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.PortLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.PortLocator\",\n\n  /**\n   * Default constructor for a Locator which can layout a port in context of a\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  applyConsiderRotation: function (port, x, y) {\n    let parent = port.getParent()\n\n    // determine the width/height before manipulate the \n    // matrix of the shape\n    let halfW = parent.getWidth() / 2\n    let halfH = parent.getHeight() / 2\n\n    let rotAngle = parent.getRotationAngle()\n    let m = Raphael.matrix()\n    m.rotate(rotAngle, halfW, halfH)\n    if (rotAngle === 90 || rotAngle === 270) {\n      let ratio = parent.getHeight() / parent.getWidth()\n      m.scale(ratio, 1 / ratio, halfW, halfH)\n    }\n\n    port.setPosition(m.x(x, y), m.y(x, y))\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A RightLocator is used to place figures to the right of a parent shape.\n *\n *\n *\n * @example\n *\n *\n *    // create a basic figure and add a Label/child via API call\n *    //\n *    var end = new draw2d.shape.node.End();\n *    end.add(new draw2d.shape.basic.Label({text:\"Right Label\"}), new draw2d.layout.locator.RightLocator({\n *         margin: 10 // distance to the parent shape\n *    }));\n *    canvas.add( end, 50,50);\n *\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.RightLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.RightLocator.prototype */\n  {\n  \n  NAME: \"draw2d.layout.locator.RightLocator\",\n\n  /**\n   * Constructs a locator with associated parent.\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.margin = (attr && (\"margin\" in attr)) ? attr.margin : 5\n  },\n\n\n  /**\n   * \n   * Relocates the given Figure.\n   *\n   * @param {Number} index child index of the target\n   * @param {draw2d.Figure} target The figure to relocate\n   **/\n  relocate: function (index, target) {\n    var parent = target.getParent()\n    var boundingBox = parent.getBoundingBox()\n\n    // I made a wrong decision in the port handling: anchor point\n    // is in the center and not topLeft. Now I must correct this flaw here, and there, and...\n    // shit happens.\n    var offset = (parent instanceof draw2d.Port) ? boundingBox.h / 2 : 0\n\n    if (target instanceof draw2d.Port) {\n      target.setPosition(boundingBox.w, (boundingBox.h / 2) - offset)\n    }\n    else {\n      var targetBoundingBox = target.getBoundingBox()\n      target.setPosition(boundingBox.w + this.margin, (boundingBox.h / 2) - (targetBoundingBox.h / 2) - offset)\n    }\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A DraggableLocator is used to place figures relative to the parent nearest corner. It is\n * possible to move a child node via drag&drop.\n *\n *\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.SmartDraggableLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.SmartDraggableLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.SmartDraggableLocator\",\n\n  /**\n   * Constructs a locator with associated parent.\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    // description see \"bind\" method\n    this.boundedCorners = {\n      init: false,\n      parent: 0,\n      child: 0,\n      dist: Number.MAX_SAFE_INTEGER,\n      xOffset: 0,\n      yOffset: 0\n    }\n\n  },\n\n  bind: function (parent, child) {\n    let _this = this\n    // determine the best corner of the parent/child node and stick to the calculated corner\n    // In the example below it is R1.2 in combination with R2.0\n    //\n    //     0             1\n    //      +-----------+\n    //      |           |\n    //      |    R1     |\n    //      +-----------+\n    //     3             2\n    //\n    //              0             1\n    //               +-----------+\n    //               |           |\n    //               |    R2     |\n    //               +-----------+\n    //              3             2\n    //\n    let calcBoundingCorner = function () {\n      _this.boundedCorners = {\n        init: false,\n        parent: 0,\n        child: 0,\n        dist: Number.MAX_SAFE_INTEGER,\n        xOffset: 0,\n        yOffset: 0\n      }\n      let parentVertices = child.getParent().getBoundingBox().getVertices()\n      let childVertices = child.getBoundingBox().getVertices()\n      let i_parent, i_child\n      let p1, p2, distance\n      for (i_parent = 0; i_parent < parentVertices.getSize(); i_parent++) {\n        for (i_child = 0; i_child < childVertices.getSize(); i_child++) {\n          p1 = parentVertices.get(i_parent)\n          p2 = childVertices.get(i_child)\n          distance = Math.abs(p1.distance(p2))\n          if (distance < _this.boundedCorners.dist) {\n            _this.boundedCorners = {\n              parent: i_parent,\n              child: i_child,\n              dist: distance,\n              xOffset: p1.x - p2.x,\n              yOffset: p1.y - p2.y\n            }\n          }\n        }\n      }\n      _this.boundedCorners.init = true\n    }\n\n    // override the parent implementation to avoid\n    // that the child is \"!selectable\" and \"!draggable\"\n\n    // Don't redirect the selection handling to the parent\n    // Using the DraggableLocator provides the ability to the children\n    // that they are selectable and draggable. Remove the SelectionAdapter from the parent\n    // assignment.\n    child.setSelectionAdapter( () => child)\n\n    child.getParent().on(\"added\", calcBoundingCorner)\n    child.on(\"dragend\", calcBoundingCorner)\n  },\n\n  unbind: function (parent, child) {\n    // use default\n    child.setSelectionAdapter(null)\n  },\n\n\n  /**\n   * \n   * Controls the location of an I{@link draw2d.Figure}\n   *\n   * @param {Number} index child index of the figure\n   * @param {draw2d.Figure} figure the figure to control\n   *\n   * @template\n   **/\n  relocate: function (index, figure) {\n    this._super(index, figure)\n    if (this.boundedCorners.init === true) {\n      let parentVertices = figure.getParent().getBoundingBox().getVertices()\n      let childVertices = figure.getBoundingBox().getVertices()\n      let p1 = parentVertices.get(this.boundedCorners.parent)\n      let p2 = childVertices.get(this.boundedCorners.child)\n\n      let xOffset = p1.x - p2.x\n      let yOffset = p1.y - p2.y\n      // restore the initial distance from the corner by adding the new offset\n      // to the position of the child\n      figure.translate(xOffset - this.boundedCorners.xOffset, yOffset - this.boundedCorners.yOffset)\n    }\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A TopLocator  is used to place figures at the top/center of a parent shape.\n *\n *\n *\n * @example\n *\n *    // create a basic figure and add a Label/child via API call\n *    //\n *    let circle = new draw2d.shape.basic.Circle({\n *        x:100,\n *        y:70,\n *        diameter:80,\n *        stroke: 3,\n *        color:\"#A63343\",\n *        bgColor:\"#E65159\"\n *    });\n *\n *    circle.add(new draw2d.shape.basic.Label({text:\"Top Label\"}), new draw2d.layout.locator.TopLocator());\n *    canvas.add( circle);\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.Locator\n */\ndraw2d.layout.locator.TopLocator = draw2d.layout.locator.Locator.extend(\n  /** @lends draw2d.layout.locator.TopLocator.prototype */\n  {\n\n  NAME: \"draw2d.layout.locator.TopLocator\",\n\n  /**\n   * Constructs a ManhattanMidpointLocator with associated Connection c.\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   * Relocates the given Figure.\n   *\n   * @param {Number} index child index of the target\n   * @param {draw2d.Figure} target The figure to relocate\n   **/\n  relocate: function (index, target) {\n    let parent = target.getParent()\n    let boundingBox = parent.getBoundingBox()\n\n    // I made a wrong decision in the port handling: anchor point\n    // is in the center and not topLeft. Now I must correct this flaw here, and there, and...\n    // shit happens.\n    let offset = (parent instanceof draw2d.Port) ? boundingBox.w / 2 : 0\n\n\n    let targetBoundingBox = target.getBoundingBox()\n    if (target instanceof draw2d.Port) {\n      target.setPosition(boundingBox.w / 2 - offset, 0)\n    }\n    else {\n      target.setPosition(boundingBox.w / 2 - (targetBoundingBox.w / 2) - offset, -(targetBoundingBox.h + 2))\n    }\n  }\n})\n","import draw2d from '../../packages'\nimport extend from \"../../util/extend\";\n\n\n/**\n * @class\n *\n * Create a locator for fixed x/y coordinate position. The port in the example below is\n * always 20px below of the top border.\n *\n *\n * @example\n *\n *    var figure =  new draw2d.shape.basic.Rectangle({x:130,y:30,width:100,height:60});\n *    figure.createPort(\"input\", new draw2d.layout.locator.XYAbsPortLocator(0,20));\n *\n *    canvas.add(figure);\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.PortLocator\n * @since 4.0.0\n */\ndraw2d.layout.locator.XYAbsPortLocator = draw2d.layout.locator.PortLocator.extend(\n  /** @lends draw2d.layout.locator.XYAbsPortLocator.prototype */\n  {\n\n    NAME: \"draw2d.layout.locator.XYAbsPortLocator\",\n\n    /**\n     *\n     * {@link draw2d.shape.node.Node}\n     *\n     * @param {Number} x the x coordinate of the port relative to the left of the parent\n     * @param {Number} y the y coordinate of the port relative to the top of the parent\n     */\n    init: function (attr, setter, getter) {\n      this.x = 0\n      this.y = 0\n\n      this._super(attr,\n        extend({\n          x: this.setX,\n          y: this.setY\n        }, setter),\n        extend({\n          x: this.getX,\n          y: this.getY\n        }, getter))\n\n    },\n\n    /**\n     * Set the X Offset for the Locator\n     * @param {Number} x\n     */\n    setX: function (x) {\n      this.x = x\n    },\n\n    /**\n     * Set the y-offset of the locator\n     *\n     * @param {Number} y\n     */\n    setY: function (y) {\n      this.y = y\n    },\n\n    /**\n     * Get the X-Offset of the Locator\n     *\n     * @returns {Number}\n     */\n    getX: function(){\n      return this.x\n    },\n\n    /**\n     * Returns the Y-Offset of the Locator\n     *\n     * @returns {Number}\n     */\n    getY: function(){\n      return this.y\n    },\n\n    /**\n     *\n     * Controls the location of an {@link draw2d.Figure}\n     *\n     * @param {Number} index child index of the figure\n     * @param {draw2d.Figure} figure the figure to control\n     *\n     * @template\n     **/\n    relocate: function (index, figure) {\n      this.applyConsiderRotation(figure, this.x, this.y)\n    }\n\n  })\n\n\n\n","import draw2d from '../../packages'\nimport extend from \"../../util/extend\";\n\n\n/**\n * @class\n *\n * Create a locator for a relative x/y coordinate position. The coordinates are named in percentage [0..100%]\n * relative to the top/left corner of the parent node.<br>\n * <br>\n * <br>\n * Resize the shape in the example to see what happens. The port top position is always 20% of the shape height.\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.basic.Rectangle({x:130,y:30,width:100,height:60});\n *    figure.createPort(\"input\", new draw2d.layout.locator.XYRelPortLocator(0,20));\n *\n *    canvas.add(figure);\n *\n *\n * @author Andreas Herz\n * @extend draw2d.layout.locator.PortLocator\n * @since 4.0.0\n */\ndraw2d.layout.locator.XYRelPortLocator = draw2d.layout.locator.PortLocator.extend(\n  /** @lends draw2d.layout.locator.XYRelPortLocator.prototype */\n  {\n\n    NAME: \"draw2d.layout.locator.XYRelPortLocator\",\n\n    /**\n     *\n     *\n     * @param {Number} xPercentage the x coordinate in percent of the port relative to the left of the parent\n     * @param {Number} yPercentage the y coordinate in percent of the port relative to the top of the parent\n     */\n    init: function (attr, setter, getter) {\n      // legacy code handling\n      // new draw2d.layout.locator.XYRelPortLocator(10,30)\n      if(typeof attr ===\"number\" && typeof setter === \"number\"){\n        this.x = attr\n        this.y = setter\n        this._super()\n      }\n      // new constructor\n      // new draw2d.layout.locator.XYRelPortLocator({x:10, y:30}})\n      else {\n        this.x = 0\n        this.y = 0\n        this._super(attr,\n          extend({\n            x: this.setX,\n            y: this.setY\n          }, setter),\n          extend({\n            x: this.getX,\n            y: this.getY\n          }, getter))\n      }\n    },\n\n\n    /**\n     * Set the X Offset for the Locator\n     * @param {Number} x\n     */\n    setX: function (x) {\n      this.x = x\n    },\n\n    /**\n     * Set the y-offset of the locator\n     *\n     * @param {Number} y\n     */\n    setY: function (y) {\n      this.y = y\n    },\n\n    /**\n     * Get the X-Offset of the Locator\n     *\n     * @returns {Number}\n     */\n    getX: function () {\n      return this.x\n    },\n\n    /**\n     * Returns the Y-Offset of the Locator\n     *\n     * @returns {Number}\n     */\n    getY: function () {\n      return this.y\n    },\n\n    /**\n     *\n     * Controls the location of an I{@link draw2d.Figure}\n     *\n     * @param {Number} index child index of the figure\n     * @param {draw2d.Figure} figure the figure to control\n     *\n     * @template\n     **/\n    relocate: function (index, figure) {\n      let parent = figure.getParent()\n\n      this.applyConsiderRotation(\n        figure,\n        parent.getWidth() / 100 * this.x,\n        parent.getHeight() / 100 * this.y\n      )\n    }\n\n  })\n\n\n\n","\n/**\n * @class\n * Routes a {@link draw2d.Connection}, possibly using a constraint.\n *\n * @author Andreas Herz\n * @extend draw2d.layout.mesh.MeshLayouter\n */\nimport draw2d from '../../packages'\n\ndraw2d.layout.mesh.ExplodeLayouter = draw2d.layout.mesh.MeshLayouter.extend(\n  /** @lends draw2d.layout.mesh.ExplodeLayouter.prototype */\n  {\n\n\tMIN_MARGIN : 40,\n\t\n\t/**\n\t * Creates a new layouter object.\n\t */\n    init: function()\n\t{\n    },\n    \n    /**\n     *\n     * Return a changes list for an existing mesh/canvas to ensure that the element to insert \n     * did have enough space.\n     * \n     * @param {draw2d.Canvas} canvas the canvas to use for the analytic\n     * @param {draw2d.Figure} figure The figure to add to the exising canvas\n     * @param {Number} x requested x-position for the figure\n     * @param {Number} y requested y-position for the figure\n     * \n     * \n     * @returns {draw2d.util.ArrayList} a list of changes to apply if the user want to insert he figure.\n     */\n    add: function( canvas, figureToAdd)\n    {\n    \t// changes for the different octant areas\n    \tvar changes = [];\n    \tchanges[0]= {x:0, y:0};\n    \tchanges[1]= {x:0, y:0};\n    \tchanges[2]= {x:0, y:0};\n    \tchanges[3]= {x:0, y:0};\n    \tchanges[4]= {x:0, y:0};\n    \tchanges[5]= {x:0, y:0};\n    \tchanges[6]= {x:0, y:0};\n    \tchanges[7]= {x:0, y:0};\n    \tchanges[8]= {x:0, y:0};\n\n    \tvar boundingBox = figureToAdd.getBoundingBox();\n\n    \tvar figures = canvas.getFigures();\n    \tvar figure = null;\n    \t\n    \tvar dis=0;\n    \tvar oct =0;\n    \tvar currentOctChanges =null;\n    \tvar i=0;\n    \tfor( i=0; i< figures.getSize();i++){\n    \t\t\n    \t\tfigure = figures.get(i);\n    \t\t\n    \t\t// calculate the distance of all corners in relation to the requested x/y coordinate\n    \t\t//\n    \t\tif(figure !== figureToAdd ){\n    \t\t\tdis = figure.getBoundingBox().getDistance(boundingBox);\n    \t\t\t// other figure is to close\n    \t\t\t//\n    \t\t\tif(dis<this.MIN_MARGIN){\n    \t\t\t\t// determine the octant of the figure\n    \t\t\t\toct = this.determineOctant(boundingBox, figure.getBoundingBox());\n        \t\t\t\n    \t\t\t\t// all other relevant segments must be arranged too!!\n    \t\t\t\t//\n        \t\t\tswitch(oct){\n        \t\t\tcase 2:\n        \t\t\t\tchanges[2].x =  Math.max(changes[2].x,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[3].x =  Math.max(changes[3].x,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[4].x =  Math.max(changes[4].x,this.MIN_MARGIN-dis);\n        \t\t\t\tbreak;\n        \t\t\tcase 3:\n        \t\t\t\tchanges[2].x =  Math.max(changes[2].x,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[3].x =  Math.max(changes[3].x,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[4].x =  Math.max(changes[4].x,this.MIN_MARGIN-dis);\n        \t\t\t\tbreak;\n        \t\t\tcase 4:\n        \t\t\t\tchanges[2].x =  Math.max(changes[2].x,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[3].x =  Math.max(changes[3].x,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[4].x =  Math.max(changes[4].x,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[4].y =  Math.max(changes[4].y,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[5].y =  Math.max(changes[5].y,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[6].y =  Math.max(changes[6].y,this.MIN_MARGIN-dis);\n        \t\t\t\tbreak;\n        \t\t\tcase 5:\n        \t\t\t\tchanges[4].y =  Math.max(changes[4].y,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[5].y =  Math.max(changes[5].y,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[6].y =  Math.max(changes[6].y,this.MIN_MARGIN-dis);\n        \t\t\t\tbreak;\n        \t\t\tcase 6:\n        \t\t\t\tchanges[4].y =  Math.max(changes[4].y,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[5].y =  Math.max(changes[5].y,this.MIN_MARGIN-dis);\n        \t\t\t\tchanges[6].y =  Math.max(changes[6].y,this.MIN_MARGIN-dis);\n        \t\t\t\tbreak;\n        \t\t\tcase 8:\n        \t\t\t\t// overlapping\n        \t\t\t\t// we must determine the new distance with the border of the figures\n        \t\t\t\tdis = (boundingBox.getBottomRight().getDistance(figure.getBoundingBox().getTopLeft()))|0;\n        \t\t\t\t\n        \t\t\t\tchanges[2].x =  Math.max(changes[2].x,this.MIN_MARGIN+dis);\n        \t\t\t\tchanges[3].x =  Math.max(changes[3].x,this.MIN_MARGIN+dis);\n        \t\t\t\tchanges[4].x =  Math.max(changes[4].x,this.MIN_MARGIN+dis);\n        \t\t\t\tchanges[4].y =  Math.max(changes[4].y,this.MIN_MARGIN+dis);\n        \t\t\t\tchanges[5].y =  Math.max(changes[5].y,this.MIN_MARGIN+dis);\n        \t\t\t\tchanges[6].y =  Math.max(changes[6].y,this.MIN_MARGIN+dis);\n        \t\t\t\tchanges[8].x =  Math.max(changes[8].x,this.MIN_MARGIN+dis);\n//        \t\t\t\tchanges[8].y =  Math.max(changes[8].y,this.MIN_MARGIN+dis);\n        \t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\t// Falls die minimale Distance zu den Objecten kleiner 80 ist, muss ein layout erfolgen\n    \t}\n\n    \t// calculate the adjustment for each figure\n    \t//\n    \tvar result = new draw2d.util.ArrayList();\n    \tfor( i=0; i< figures.getSize();i++){\n    \t\tfigure = figures.get(i);\n    \t\tif(figure !== figureToAdd ){\n\t\t\t\toct = this.determineOctant(boundingBox, figure.getBoundingBox());\n\t\t\t\tcurrentOctChanges = changes[oct];\n\t\t\t\tif(currentOctChanges.x!==0 || currentOctChanges.y!==0){\n\t\t\t\t\tresult.add(new draw2d.layout.mesh.ProposedMeshChange(figure, currentOctChanges.x,currentOctChanges.y));\n\t\t\t\t}\n    \t\t}\n    \t}\n    \t\n    \treturn result;\n    },\n    \n    \n    /**\n     *\n     * Determin Octant\n\t *\n\t *    0 | 1 | 2\n\t *    __|___|__\n\t *    7 | 8 | 3\n     *    __|___|__\n\t *    6 | 5 | 4\n     *\n\t * @returns {Number}\n     */\n    determineOctant: function(r1, r2){\n\t\tvar ox = r1.x;\n\t\tvar oy = r1.y;\n\t\tvar ow = r1.w;\n\t\tvar oh = r1.h;\n\t\t\n\t\tvar cx = r2.x;\n\t\tvar cy = r2.y;\n\t\tvar cw = r2.w;\n\t\tvar ch = r2.h;\n\t\tvar oct =0;\n\n\t\tif(cx + cw <= ox){\n\t\t\tif((cy + ch) <= oy){\n\t\t\t\toct = 0;\n\t\t\t}\n\t\t\telse if(cy >= (oy + oh)){\n\t\t\t\toct = 6;\n\t\t\t}\n\t\t\telse{\n\t\t\t\toct = 7;\n\t\t\t}\n\t    }\n\t\telse if(cx >= ox + ow){\n\t\t\tif(cy + ch <= oy){\n\t\t\t\toct = 2;\n\t\t\t}\n\t\t\telse if(cy >= oy + oh){\n\t\t\t\toct = 4;\n\t\t\t}\n\t\t\telse{\n\t\t\t\toct = 3;\n\t\t\t}\n\t\t}\n\t\telse if(cy + ch <= oy){\n\t\t\toct = 1;\n\t\t}\n\t\telse if(cy >= oy + oh){\n\t\t\toct = 5;\n\t\t}\n\t\telse{\n\t\t\toct= 8;\n\t\t}\n\t\t\n\t\treturn oct;\n    }\n});\n","\n/**\n * @class\n * Layouter for a mesh or grid.\n *\n * @author Andreas Herz\n */\nimport draw2d from '../../packages'\n\ndraw2d.layout.mesh.MeshLayouter = Class.extend(\n  /** @lends draw2d.layout.mesh.MeshLayouter.prototype */\n\n  {\n\n\t/**\n\t * Creates a new layouter object.\n\t */\n    init: function(){\n    },\n\n    /**\n     * \n     * Return a changes list for an existing mesh/canvas to ensure that the element to insert\n     * did have enough space.\n     *\n     * @param {draw2d.Canvas} canvas the canvas to use for the analytic\n     * @param {draw2d.Figure} figure The figure to add to the exising canvas\n     *\n     *\n     * @returns {draw2d.util.ArrayList} a list of changes to apply if the user want to insert he figure.\n     */\n    add: function( canvas, figure)\n    {\n    \treturn new draw2d.util.ArrayList();\n    }\n});\n","\n/**\n * @class\n * Change proposal for grid/mesh layout changes.\n *\n * @author Andreas Herz\n */\nimport draw2d from '../../packages'\n\ndraw2d.layout.mesh.ProposedMeshChange = Class.extend(\n  /** @lends draw2d.layout.mesh.ProposedMeshChange.prototype */\n\n  {\n\n\t/**\n\t * Creates change object.\n\t */\n    init: function(figure, x, y)\n    {\n    \tthis.figure = figure;\n    \tthis.x = x;\n    \tthis.y = y;\n    },\n\n    /**\n     *\n     * Return the related figure.\n     *\n     * @returns {draw2d.Figure} the figure to the related change proposal\n     */\n    getFigure: function( )\n    {\n    \treturn this.figure;\n    },\n\n    /**\n     *\n     * The proposed x-coordinate.\n     *\n     * @returns {Number}\n     */\n    getX: function()\n    {\n    \treturn this.x;\n    },\n\n    /**\n     *\n     * The proposed y-coordinate\n     *\n     * @returns {Number}\n     */\n    getY: function()\n    {\n    \treturn this.y;\n    }\n\n});\n","require(\"!!/Users/d023280/Documents/workspace/draw2d_js/node_modules/script-loader/addScript.js\")(require(\"!!/Users/d023280/Documents/workspace/draw2d_js/node_modules/raw-loader/index.js!/Users/d023280/Documents/workspace/draw2d_js/src/lib/Class.exec.js\"))","\n\n/*\n * jQuery.fn.autoResize 1.14\n * --\n * https://github.com/padolsey/jQuery.fn.autoResize\n * --\n * This program is free software. It comes without any warranty, to\n * the extent permitted by applicable law. You can redistribute it\n * and/or modify it under the terms of the Do What The Fuck You Want\n * To Public License, Version 2, as published by Sam Hocevar. See\n * http://sam.zoy.org/wtfpl/COPYING for more details. */\n(function($){\n\n\tvar uid = 'ar' + +new Date,\n\n\t\tdefaults = autoResize.defaults = {\n\t\t\tonResize: function(){},\n\t\t\tonBeforeResize: function(){return 123},\n\t\t\tonAfterResize: function(){return 555},\n\t\t\tanimate: {\n\t\t\t\tduration: 200,\n\t\t\t\tcomplete: function(){}\n\t\t\t},\n\t\t\textraSpace: 50,\n\t\t\tminHeight: 'original',\n\t\t\tmaxHeight: 500,\n\t\t\tminWidth: 'original',\n\t\t\tmaxWidth: 500\n\t\t};\n\n\tautoResize.cloneCSSProperties = [\n\t\t'lineHeight', 'textDecoration', 'letterSpacing',\n\t\t'fontSize', 'fontFamily', 'fontStyle', 'fontWeight',\n\t\t'textTransform', 'textAlign', 'direction', 'wordSpacing', 'fontSizeAdjust',\n\t\t'paddingTop', 'paddingLeft', 'paddingBottom', 'paddingRight', 'width'\n\t];\n\n\tautoResize.cloneCSSValues = {\n\t\tposition: 'absolute',\n\t\ttop: -9999,\n\t\tleft: -9999,\n\t\topacity: 0,\n\t\toverflow: 'hidden'\n\t};\n\n\tautoResize.resizableFilterSelector = [\n\t\t'textarea:not(textarea.' + uid + ')',\n\t\t'input:not(input[type])',\n\t\t'input[type=text]',\n\t\t'input[type=password]',\n\t\t'input[type=email]',\n\t\t'input[type=url]'\n\t].join(',');\n\n\tautoResize.AutoResizer = AutoResizer;\n\n\t$.fn.autoResize = autoResize;\n\n\tfunction autoResize(config) {\n\t\tthis.filter(autoResize.resizableFilterSelector).each(function(){\n\t\t\tnew AutoResizer( $(this), config );\n\t\t});\n\t\treturn this;\n\t}\n\n\tfunction AutoResizer(el, config) {\n\n\t\tif (el.data('AutoResizer')) {\n\t\t\tel.data('AutoResizer').destroy();\n\t\t}\n\n\t\tconfig = this.config = $.extend({}, autoResize.defaults, config);\n\t\tthis.el = el;\n\n\t\tthis.nodeName = el[0].nodeName.toLowerCase();\n\n\t\tthis.originalHeight = el.height();\n\t\tthis.previousScrollTop = null;\n\n\t\tthis.value = el.val();\n\n\t\tif (config.maxWidth === 'original') config.maxWidth = el.width();\n\t\tif (config.minWidth === 'original') config.minWidth = el.width();\n\t\tif (config.maxHeight === 'original') config.maxHeight = el.height();\n\t\tif (config.minHeight === 'original') config.minHeight = el.height();\n\n\t\tif (this.nodeName === 'textarea') {\n\t\t\tel.css({\n\t\t\t\tresize: 'none',\n\t\t\t\toverflowY: 'hidden'\n\t\t\t});\n\t\t}\n\n\t\tel.data('AutoResizer', this);\n\n\t\t// Make sure onAfterResize is called upon animation completion\n\t\tconfig.animate.complete = (function(f){\n\t\t\treturn function() {\n\t\t\t\tconfig.onAfterResize.call(el);\n\t\t\t\treturn f.apply(this, arguments);\n\t\t\t};\n\t\t}(config.animate.complete));\n\n\t\tthis.bind();\n\t}\n\n\tAutoResizer.prototype = {\n\n\t\tbind: function() {\n\n\t\t\tvar check = $.proxy(function(){\n\t\t\t\tthis.check();\n\t\t\t\treturn true;\n\t\t\t}, this);\n\n\t\t\tthis.unbind();\n\n\t\t\tthis.el\n\t\t\t\t.bind('keyup.autoResize', check)\n\t\t\t\t//.bind('keydown.autoResize', check)\n\t\t\t\t.bind('change.autoResize', check)\n\t\t\t\t.bind('paste.autoResize', function() {\n\t\t\t\t\tsetTimeout(function() { check(); }, 0);\n\t\t\t\t});\n\n\t\t\tif (!this.el.is(':hidden')) {\n\t\t\t\tthis.check(null, true);\n\t\t\t}\n\n\t\t},\n\n\t\tunbind: function() {\n\t\t\tthis.el.unbind('.autoResize');\n\t\t},\n\n\t\tcreateClone: function() {\n\n\t\t\tvar el = this.el,\n\t\t\t\tclone = this.nodeName === 'textarea' ? el.clone() : $('<span/>');\n\n\t\t\tthis.clone = clone;\n\n\t\t\t$.each(autoResize.cloneCSSProperties, function(i, p){\n\t\t\t\tclone[0].style[p] = el.css(p);\n\t\t\t});\n\n\t\t\tclone\n\t\t\t\t.removeAttr('name')\n\t\t\t\t.removeAttr('id')\n\t\t\t\t.addClass(uid)\n\t\t\t\t.attr('tabIndex', -1)\n\t\t\t\t.css(autoResize.cloneCSSValues);\n\n\t\t\tif (this.nodeName === 'textarea') {\n\t\t\t\tclone.height('auto');\n\t\t\t} else {\n\t\t\t\tclone.width('auto').css({\n\t\t\t\t\twhiteSpace: 'nowrap'\n\t\t\t\t});\n\t\t\t}\n\n\t\t},\n\n\t\tcheck: function(e, immediate) {\n\n\t\t\tif (!this.clone) {\n\t\tthis.createClone();\n\t\tthis.injectClone();\n\t\t\t}\n\n\t\t\tvar config = this.config,\n\t\t\t\tclone = this.clone,\n\t\t\t\tel = this.el,\n\t\t\t\tvalue = el.val();\n\n\t\t\t// Do nothing if value hasn't changed\n\t\t\tif (value === this.prevValue) { return true; }\n\t\t\tthis.prevValue = value;\n\n\t\t\tif (this.nodeName === 'input') {\n\n\t\t\t\tclone.text(value);\n\n\t\t\t\t// Calculate new width + whether to change\n\t\t\t\tvar cloneWidth = clone.width(),\n\t\t\t\t\tnewWidth = (cloneWidth + config.extraSpace) >= config.minWidth ?\n\t\t\t\t\t\tcloneWidth + config.extraSpace : config.minWidth,\n\t\t\t\t\tcurrentWidth = el.width();\n\n\t\t\t\tnewWidth = Math.min(newWidth, config.maxWidth);\n\n\t\t\t\tif (\n\t\t\t\t\t(newWidth < currentWidth && newWidth >= config.minWidth) ||\n\t\t\t\t\t(newWidth >= config.minWidth && newWidth <= config.maxWidth)\n\t\t\t\t) {\n\n\t\t\t\t\tconfig.onBeforeResize.call(el);\n\t\t\t\t\tconfig.onResize.call(el);\n\n\t\t\t\t\tel.scrollLeft(0);\n\n\t\t\t\t\tif (config.animate && !immediate) {\n\t\t\t\t\t\tel.stop(1,1).animate({\n\t\t\t\t\t\t\twidth: newWidth\n\t\t\t\t\t\t}, config.animate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.width(newWidth);\n\t\t\t\t\t\tconfig.onAfterResize.call(el);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// TEXTAREA\n\n\t\t\tclone.width(el.width()).height(0).val(value).scrollTop(10000);\n\n\t\t\tvar scrollTop = clone[0].scrollTop;\n\n\t\t\tif(!value) {\n\t\t\t\t// empty textarea should be exactly minHeight\n\t\t\t\tscrollTop = config.minHeight;\n\t\t\t\tthis.previousScrollTop = null;   // reset state\n\t\t\t} else {\n\t\t\t\t// Don't do anything if scrollTop hasen't changed:\n\t\t\t\tif (this.previousScrollTop === scrollTop) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.previousScrollTop = scrollTop;\n\n\t\t\t\tif (scrollTop + config.extraSpace >= config.maxHeight) {\n\t\t\t\t\tel.css('overflowY', '');\n\t\t\t\t\tscrollTop = config.maxHeight;\n\t\t\t\t\timmediate = true;\n\t\t\t\t} else if (scrollTop + config.extraSpace <= config.minHeight) {\n\t\t\t\t\t\t// include extraSpace in calculations so the code works correctly\n\t\t\t\t\t\t// when there are few lines\n\t\t\t\t\tscrollTop = config.minHeight;\n\t\t\t\t} else {\n\t\t\t\t\tel.css('overflowY', 'hidden');\n\t\t\t\t\tscrollTop += config.extraSpace;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconfig.onBeforeResize.call(el);\n\t\t\tconfig.onResize.call(el);\n\n\t\t\t// Either animate or directly apply height:\n\t\t\tif (config.animate && !immediate) {\n\t\t\t\t\tel.stop(1,1).animate({\n\t\t\t\t\t\t\theight: scrollTop\n\t\t\t\t\t}, config.animate);\n\t\t\t} else {\n\t\t\t\t\tel.height(scrollTop);\n\t\t\t\t\tconfig.onAfterResize.call(el);\n\t\t\t}\n\t\t},\n\n\t\tdestroy: function() {\n\t\t\tthis.unbind();\n\t\t\tthis.el.removeData('AutoResizer');\n\t\t\tthis.clone.remove();\n\t\t\tdelete this.el;\n\t\t\tdelete this.clone;\n\t\t},\n\n\t\tinjectClone: function() {\n\t\t\t(\n\t\t\t\tautoResize.cloneContainer ||\n\t\t\t\t(autoResize.cloneContainer = $('<arclones/>').appendTo('body'))\n\t\t\t).append(this.clone);\n\t\t}\n\n\t};\n\n})(jQuery);\n","\n\n/*!\n * jQuery contextMenu - Plugin for simple contextMenu handling\n *\n * Version: 1.6.5\n *\n * Authors: Rodney Rehm, Addy Osmani (patches for FF)\n * Web: http://medialize.github.com/jQuery-contextMenu/\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *   GPL v3 http://opensource.org/licenses/GPL-3.0\n *\n */\n(function($, undefined){\n\n    // TODO: -\n        // ARIA stuff: menuitem, menuitemcheckbox und menuitemradio\n        // create <menu> structure if $.support[htmlCommand || htmlMenuitem] and !opt.disableNative\n\n// determine html5 compatibility\n$.support.htmlMenuitem = ('HTMLMenuItemElement' in window);\n$.support.htmlCommand = ('HTMLCommandElement' in window);\n$.support.eventSelectstart = (\"onselectstart\" in document.documentElement);\n/* // should the need arise, test for css user-select\n$.support.cssUserSelect = (function(){\n    var t = false,\n        e = document.createElement('div');\n\n    $.each('Moz|Webkit|Khtml|O|ms|Icab|'.split('|'), function(i, prefix) {\n        var propCC = prefix + (prefix ? 'U' : 'u') + 'serSelect',\n            prop = (prefix ? ('-' + prefix.toLowerCase() + '-') : '') + 'user-select';\n\n        e.style.cssText = prop + ': text;';\n        if (e.style[propCC] == 'text') {\n            t = true;\n            return false;\n        }\n\n        return true;\n    });\n\n    return t;\n})();\n*/\n\nif (!$.ui || !$.ui.widget) {\n    // duck punch $.cleanData like jQueryUI does to get that remove event\n    // https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js#L16-24\n    var _cleanData = $.cleanData;\n    $.cleanData = function( elems ) {\n        for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n            try {\n                $( elem ).triggerHandler( \"remove\" );\n                // http://bugs.jquery.com/ticket/8235\n            } catch( e ) {}\n        }\n        _cleanData( elems );\n    };\n}\n\nvar // currently active contextMenu trigger\n    $currentTrigger = null,\n    // is contextMenu initialized with at least one menu?\n    initialized = false,\n    // window handle\n    $win = $(window),\n    // number of registered menus\n    counter = 0,\n    // mapping selector to namespace\n    namespaces = {},\n    // mapping namespace to options\n    menus = {},\n    // custom command type handlers\n    types = {},\n    // default values\n    defaults = {\n        // selector of contextMenu trigger\n        selector: null,\n        // where to append the menu to\n        appendTo: null,\n        // method to trigger context menu [\"right\", \"left\", \"hover\"]\n        trigger: \"right\",\n        // hide menu when mouse leaves trigger / menu elements\n        autoHide: false,\n        // ms to wait before showing a hover-triggered context menu\n        delay: 200,\n        // flag denoting if a second trigger should simply move (true) or rebuild (false) an open menu\n        // as long as the trigger happened on one of the trigger-element's child nodes\n        reposition: false,\n        // determine position to show menu at\n        determinePosition: function($menu) {\n            // position to the lower middle of the trigger element\n            if ($.ui && $.ui.position) {\n                // .position() is provided as a jQuery UI utility\n                // (...and it won't work on hidden elements)\n                $menu.css('display', 'block').position({\n                    my: \"center top\",\n                    at: \"center bottom\",\n                    of: this,\n                    offset: \"0 5\",\n                    collision: \"fit\"\n                }).css('display', 'none');\n            } else {\n                // determine contextMenu position\n                var offset = this.offset();\n                offset.top += this.outerHeight();\n                offset.left += this.outerWidth() / 2 - $menu.outerWidth() / 2;\n                $menu.css(offset);\n            }\n        },\n        // position menu\n        position: function(opt, x, y) {\n            var $this = this,\n                offset;\n            // determine contextMenu position\n            if (!x && !y) {\n                opt.determinePosition.call(this, opt.$menu);\n                return;\n            } else if (x === \"maintain\" && y === \"maintain\") {\n                // x and y must not be changed (after re-show on command click)\n                offset = opt.$menu.position();\n            } else {\n                // x and y are given (by mouse event)\n                offset = {top: y, left: x};\n            }\n\n            // correct offset if viewport demands it\n            var bottom = $win.scrollTop() + $win.height(),\n                right = $win.scrollLeft() + $win.width(),\n                height = opt.$menu.height(),\n                width = opt.$menu.width();\n\n            if (offset.top + height > bottom) {\n                offset.top -= height;\n            }\n\n            if (offset.left + width > right) {\n                offset.left -= width;\n            }\n\n            opt.$menu.css(offset);\n        },\n        // position the sub-menu\n        positionSubmenu: function($menu) {\n            if ($.ui && $.ui.position) {\n                // .position() is provided as a jQuery UI utility\n                // (...and it won't work on hidden elements)\n                $menu.css('display', 'block').position({\n                    my: \"left top\",\n                    at: \"right top\",\n                    of: this,\n                    collision: \"flipfit fit\"\n                }).css('display', '');\n            } else {\n                // determine contextMenu position\n                var offset = {\n                    top: 0,\n                    left: this.outerWidth()\n                };\n                $menu.css(offset);\n            }\n        },\n        // offset to add to zIndex\n        zIndex: 1,\n        // show hide animation settings\n        animation: {\n            duration: 50,\n            show: 'slideDown',\n            hide: 'slideUp'\n        },\n        // events\n        events: {\n            show: $.noop,\n            hide: $.noop\n        },\n        // default callback\n        callback: null,\n        // list of contextMenu items\n        items: {}\n    },\n    // mouse position for hover activation\n    hoveract = {\n        timer: null,\n        pageX: null,\n        pageY: null\n    },\n    // determine zIndex\n    zindex = function($t) {\n        var zin = 0,\n            $tt = $t;\n\n        while (true) {\n            zin = Math.max(zin, parseInt($tt.css('z-index'), 10) || 0);\n            $tt = $tt.parent();\n            if (!$tt || !$tt.length || \"html body\".indexOf($tt.prop('nodeName').toLowerCase()) > -1 ) {\n                break;\n            }\n        }\n\n        return zin;\n    },\n    // event handlers\n    handle = {\n        // abort anything\n        abortevent: function(e){\n            e.preventDefault();\n            e.stopImmediatePropagation();\n        },\n\n        // contextmenu show dispatcher\n        contextmenu: function(e) {\n            var $this = $(this);\n\n            // disable actual context-menu\n            e.preventDefault();\n            e.stopImmediatePropagation();\n\n            // abort native-triggered events unless we're triggering on right click\n            if (e.data.trigger != 'right' && e.originalEvent) {\n                return;\n            }\n\n            // abort event if menu is visible for this trigger\n            if ($this.hasClass('context-menu-active')) {\n                return;\n            }\n\n            if (!$this.hasClass('context-menu-disabled')) {\n                // theoretically need to fire a show event at <menu>\n                // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus\n                // var evt = jQuery.Event(\"show\", { data: data, pageX: e.pageX, pageY: e.pageY, relatedTarget: this });\n                // e.data.$menu.trigger(evt);\n\n                $currentTrigger = $this;\n                if (e.data.build) {\n                    var built = e.data.build($currentTrigger, e);\n                    // abort if build() returned false\n                    if (built === false) {\n                        return;\n                    }\n\n                    // dynamically build menu on invocation\n                    e.data = $.extend(true, {}, defaults, e.data, built || {});\n\n                    // abort if there are no items to display\n                    if (!e.data.items || $.isEmptyObject(e.data.items)) {\n                        // Note: jQuery captures and ignores errors from event handlers\n                        if (window.console) {\n                            (console.error || console.log)(\"No items specified to show in contextMenu\");\n                        }\n\n                        throw new Error('No Items sepcified');\n                    }\n\n                    // backreference for custom command type creation\n                    e.data.$trigger = $currentTrigger;\n\n                    op.create(e.data);\n                }\n                // show menu\n                op.show.call($this, e.data, e.pageX, e.pageY);\n            }\n        },\n        // contextMenu left-click trigger\n        click: function(e) {\n            e.preventDefault();\n            e.stopImmediatePropagation();\n            $(this).trigger($.Event(\"contextmenu\", { data: e.data, pageX: e.pageX, pageY: e.pageY }));\n        },\n        // contextMenu right-click trigger\n        mousedown: function(e) {\n            // register mouse down\n            var $this = $(this);\n\n            // hide any previous menus\n            if ($currentTrigger && $currentTrigger.length && !$currentTrigger.is($this)) {\n                $currentTrigger.data('contextMenu').$menu.trigger('contextmenu:hide');\n            }\n\n            // activate on right click\n            if (e.button == 2) {\n                $currentTrigger = $this.data('contextMenuActive', true);\n            }\n        },\n        // contextMenu right-click trigger\n        mouseup: function(e) {\n            // show menu\n            var $this = $(this);\n            if ($this.data('contextMenuActive') && $currentTrigger && $currentTrigger.length && $currentTrigger.is($this) && !$this.hasClass('context-menu-disabled')) {\n                e.preventDefault();\n                e.stopImmediatePropagation();\n                $currentTrigger = $this;\n                $this.trigger($.Event(\"contextmenu\", { data: e.data, pageX: e.pageX, pageY: e.pageY }));\n            }\n\n            $this.removeData('contextMenuActive');\n        },\n        // contextMenu hover trigger\n        mouseenter: function(e) {\n            var $this = $(this),\n                $related = $(e.relatedTarget),\n                $document = $(document);\n\n            // abort if we're coming from a menu\n            if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) {\n                return;\n            }\n\n            // abort if a menu is shown\n            if ($currentTrigger && $currentTrigger.length) {\n                return;\n            }\n\n            hoveract.pageX = e.pageX;\n            hoveract.pageY = e.pageY;\n            hoveract.data = e.data;\n            $document.on('mousemove.contextMenuShow', handle.mousemove);\n            hoveract.timer = setTimeout(function() {\n                hoveract.timer = null;\n                $document.off('mousemove.contextMenuShow');\n                $currentTrigger = $this;\n                $this.trigger($.Event(\"contextmenu\", { data: hoveract.data, pageX: hoveract.pageX, pageY: hoveract.pageY }));\n            }, e.data.delay );\n        },\n        // contextMenu hover trigger\n        mousemove: function(e) {\n            hoveract.pageX = e.pageX;\n            hoveract.pageY = e.pageY;\n        },\n        // contextMenu hover trigger\n        mouseleave: function(e) {\n            // abort if we're leaving for a menu\n            var $related = $(e.relatedTarget);\n            if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) {\n                return;\n            }\n\n            try {\n                clearTimeout(hoveract.timer);\n            } catch(e) {}\n\n            hoveract.timer = null;\n        },\n\n        // click on layer to hide contextMenu\n        layerClick: function(e) {\n            var $this = $(this),\n                root = $this.data('contextMenuRoot'),\n                mouseup = false,\n                button = e.button,\n                x = e.pageX,\n                y = e.pageY,\n                target,\n                offset,\n                selectors;\n\n            e.preventDefault();\n            e.stopImmediatePropagation();\n\n            setTimeout(function() {\n                var $window, hideshow, possibleTarget;\n                var triggerAction = ((root.trigger == 'left' && button === 0) || (root.trigger == 'right' && button === 2));\n\n                // find the element that would've been clicked, wasn't the layer in the way\n                if (document.elementFromPoint) {\n                    root.$layer.hide();\n                    target = document.elementFromPoint(x - $win.scrollLeft(), y - $win.scrollTop());\n                    root.$layer.show();\n                }\n\n                if (root.reposition && triggerAction) {\n                    if (document.elementFromPoint) {\n                        if (root.$trigger.is(target) || root.$trigger.has(target).length) {\n                            root.position.call(root.$trigger, root, x, y);\n                            return;\n                        }\n                    } else {\n                        offset = root.$trigger.offset();\n                        $window = $(window);\n                        // while this looks kinda awful, it's the best way to avoid\n                        // unnecessarily calculating any positions\n                        offset.top += $window.scrollTop();\n                        if (offset.top <= e.pageY) {\n                            offset.left += $window.scrollLeft();\n                            if (offset.left <= e.pageX) {\n                                offset.bottom = offset.top + root.$trigger.outerHeight();\n                                if (offset.bottom >= e.pageY) {\n                                    offset.right = offset.left + root.$trigger.outerWidth();\n                                    if (offset.right >= e.pageX) {\n                                        // reposition\n                                        root.position.call(root.$trigger, root, x, y);\n                                        return;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n\n                if (target && triggerAction) {\n                    root.$trigger.one('contextmenu:hidden', function() {\n                        $(target).contextMenu({x: x, y: y});\n                    });\n                }\n\n                root.$menu.trigger('contextmenu:hide');\n            }, 50);\n        },\n        // key handled :hover\n        keyStop: function(e, opt) {\n            if (!opt.isInput) {\n                e.preventDefault();\n            }\n\n            e.stopPropagation();\n        },\n        key: function(e) {\n            var opt = $currentTrigger.data('contextMenu') || {};\n\n            switch (e.keyCode) {\n                case 9:\n                case 38: // up\n                    handle.keyStop(e, opt);\n                    // if keyCode is [38 (up)] or [9 (tab) with shift]\n                    if (opt.isInput) {\n                        if (e.keyCode == 9 && e.shiftKey) {\n                            e.preventDefault();\n                            opt.$selected && opt.$selected.find('input, textarea, select').blur();\n                            opt.$menu.trigger('prevcommand');\n                            return;\n                        } else if (e.keyCode == 38 && opt.$selected.find('input, textarea, select').prop('type') == 'checkbox') {\n                            // checkboxes don't capture this key\n                            e.preventDefault();\n                            return;\n                        }\n                    } else if (e.keyCode != 9 || e.shiftKey) {\n                        opt.$menu.trigger('prevcommand');\n                        return;\n                    }\n                    // omitting break;\n\n                // case 9: // tab - reached through omitted break;\n                case 40: // down\n                    handle.keyStop(e, opt);\n                    if (opt.isInput) {\n                        if (e.keyCode == 9) {\n                            e.preventDefault();\n                            opt.$selected && opt.$selected.find('input, textarea, select').blur();\n                            opt.$menu.trigger('nextcommand');\n                            return;\n                        } else if (e.keyCode == 40 && opt.$selected.find('input, textarea, select').prop('type') == 'checkbox') {\n                            // checkboxes don't capture this key\n                            e.preventDefault();\n                            return;\n                        }\n                    } else {\n                        opt.$menu.trigger('nextcommand');\n                        return;\n                    }\n                    break;\n\n                case 37: // left\n                    handle.keyStop(e, opt);\n                    if (opt.isInput || !opt.$selected || !opt.$selected.length) {\n                        break;\n                    }\n\n                    if (!opt.$selected.parent().hasClass('context-menu-root')) {\n                        var $parent = opt.$selected.parent().parent();\n                        opt.$selected.trigger('contextmenu:blur');\n                        opt.$selected = $parent;\n                        return;\n                    }\n                    break;\n\n                case 39: // right\n                    handle.keyStop(e, opt);\n                    if (opt.isInput || !opt.$selected || !opt.$selected.length) {\n                        break;\n                    }\n\n                    var itemdata = opt.$selected.data('contextMenu') || {};\n                    if (itemdata.$menu && opt.$selected.hasClass('context-menu-submenu')) {\n                        opt.$selected = null;\n                        itemdata.$selected = null;\n                        itemdata.$menu.trigger('nextcommand');\n                        return;\n                    }\n                    break;\n\n                case 35: // end\n                case 36: // home\n                    if (opt.$selected && opt.$selected.find('input, textarea, select').length) {\n                        return;\n                    } else {\n                        (opt.$selected && opt.$selected.parent() || opt.$menu)\n                            .children(':not(.disabled, .not-selectable)')[e.keyCode == 36 ? 'first' : 'last']()\n                            .trigger('contextmenu:focus');\n                        e.preventDefault();\n                        return;\n                    }\n                    break;\n\n                case 13: // enter\n                    handle.keyStop(e, opt);\n                    if (opt.isInput) {\n                        if (opt.$selected && !opt.$selected.is('textarea, select')) {\n                            e.preventDefault();\n                            return;\n                        }\n                        break;\n                    }\n                    opt.$selected && opt.$selected.trigger('mouseup');\n                    return;\n\n                case 32: // space\n                case 33: // page up\n                case 34: // page down\n                    // prevent browser from scrolling down while menu is visible\n                    handle.keyStop(e, opt);\n                    return;\n\n                case 27: // esc\n                    handle.keyStop(e, opt);\n                    opt.$menu.trigger('contextmenu:hide');\n                    return;\n\n                default: // 0-9, a-z\n                    var k = (String.fromCharCode(e.keyCode)).toUpperCase();\n                    if (opt.accesskeys[k]) {\n                        // according to the specs accesskeys must be invoked immediately\n                        opt.accesskeys[k].$node.trigger(opt.accesskeys[k].$menu\n                            ? 'contextmenu:focus'\n                            : 'mouseup'\n                        );\n                        return;\n                    }\n                    break;\n            }\n            // pass event to selected item,\n            // stop propagation to avoid endless recursion\n            e.stopPropagation();\n            opt.$selected && opt.$selected.trigger(e);\n        },\n\n        // select previous possible command in menu\n        prevItem: function(e) {\n            e.stopPropagation();\n            var opt = $(this).data('contextMenu') || {};\n\n            // obtain currently selected menu\n            if (opt.$selected) {\n                var $s = opt.$selected;\n                opt = opt.$selected.parent().data('contextMenu') || {};\n                opt.$selected = $s;\n            }\n\n            var $children = opt.$menu.children(),\n                $prev = !opt.$selected || !opt.$selected.prev().length ? $children.last() : opt.$selected.prev(),\n                $round = $prev;\n\n            // skip disabled\n            while ($prev.hasClass('disabled') || $prev.hasClass('not-selectable')) {\n                if ($prev.prev().length) {\n                    $prev = $prev.prev();\n                } else {\n                    $prev = $children.last();\n                }\n                if ($prev.is($round)) {\n                    // break endless loop\n                    return;\n                }\n            }\n\n            // leave current\n            if (opt.$selected) {\n                handle.itemMouseleave.call(opt.$selected.get(0), e);\n            }\n\n            // activate next\n            handle.itemMouseenter.call($prev.get(0), e);\n\n            // focus input\n            var $input = $prev.find('input, textarea, select');\n            if ($input.length) {\n                $input.focus();\n            }\n        },\n        // select next possible command in menu\n        nextItem: function(e) {\n            e.stopPropagation();\n            var opt = $(this).data('contextMenu') || {};\n\n            // obtain currently selected menu\n            if (opt.$selected) {\n                var $s = opt.$selected;\n                opt = opt.$selected.parent().data('contextMenu') || {};\n                opt.$selected = $s;\n            }\n\n            var $children = opt.$menu.children(),\n                $next = !opt.$selected || !opt.$selected.next().length ? $children.first() : opt.$selected.next(),\n                $round = $next;\n\n            // skip disabled\n            while ($next.hasClass('disabled') || $next.hasClass('not-selectable')) {\n                if ($next.next().length) {\n                    $next = $next.next();\n                } else {\n                    $next = $children.first();\n                }\n                if ($next.is($round)) {\n                    // break endless loop\n                    return;\n                }\n            }\n\n            // leave current\n            if (opt.$selected) {\n                handle.itemMouseleave.call(opt.$selected.get(0), e);\n            }\n\n            // activate next\n            handle.itemMouseenter.call($next.get(0), e);\n\n            // focus input\n            var $input = $next.find('input, textarea, select');\n            if ($input.length) {\n                $input.focus();\n            }\n        },\n\n        // flag that we're inside an input so the key handler can act accordingly\n        focusInput: function(e) {\n            var $this = $(this).closest('.context-menu-item'),\n                data = $this.data(),\n                opt = data.contextMenu,\n                root = data.contextMenuRoot;\n\n            root.$selected = opt.$selected = $this;\n            root.isInput = opt.isInput = true;\n        },\n        // flag that we're inside an input so the key handler can act accordingly\n        blurInput: function(e) {\n            var $this = $(this).closest('.context-menu-item'),\n                data = $this.data(),\n                opt = data.contextMenu,\n                root = data.contextMenuRoot;\n\n            root.isInput = opt.isInput = false;\n        },\n\n        // :hover on menu\n        menuMouseenter: function(e) {\n            var root = $(this).data().contextMenuRoot;\n            if(root)root.hovering = true;\n        },\n        // :hover on menu\n        menuMouseleave: function(e) {\n            var root = $(this).data().contextMenuRoot;\n            if (root && root.$layer && root.$layer.is(e.relatedTarget)) {\n                root.hovering = false;\n            }\n        },\n\n        // :hover done manually so key handling is possible\n        itemMouseenter: function(e) {\n            var $this = $(this),\n                data = $this.data(),\n                opt = data.contextMenu,\n                root = data.contextMenuRoot;\n\n            if(!root)\n              return\n\n            root.hovering = true;\n\n            // abort if we're re-entering\n            if (e && root.$layer && root.$layer.is(e.relatedTarget)) {\n                e.preventDefault();\n                e.stopImmediatePropagation();\n            }\n\n            // make sure only one item is selected\n            (opt.$menu ? opt : root).$menu\n                .children('.hover').trigger('contextmenu:blur');\n\n            if ($this.hasClass('disabled') || $this.hasClass('not-selectable')) {\n                opt.$selected = null;\n                return;\n            }\n\n            $this.trigger('contextmenu:focus');\n        },\n        // :hover done manually so key handling is possible\n        itemMouseleave: function(e) {\n            var $this = $(this),\n                data = $this.data(),\n                opt = data.contextMenu,\n                root = data.contextMenuRoot;\n\n            if (root && root !== opt && root.$layer && root.$layer.is(e.relatedTarget)) {\n                root.$selected && root.$selected.trigger('contextmenu:blur');\n                e.preventDefault();\n                e.stopImmediatePropagation();\n                root.$selected = opt.$selected = opt.$node;\n                return;\n            }\n\n            $this.trigger('contextmenu:blur');\n        },\n        // contextMenu item click\n        itemClick: function(e) {\n            var $this = $(this),\n                data = $this.data(),\n                opt = data.contextMenu,\n                root = data.contextMenuRoot,\n                key = data.contextMenuKey,\n                callback;\n\n            // abort if the key is unknown or disabled or is a menu\n            if (!opt.items[key] || $this.is('.disabled, .context-menu-submenu, .context-menu-separator, .not-selectable')) {\n                return;\n            }\n\n            e.preventDefault();\n            e.stopImmediatePropagation();\n\n            if ($.isFunction(root.callbacks[key]) && Object.prototype.hasOwnProperty.call(root.callbacks, key)) {\n                // item-specific callback\n                callback = root.callbacks[key];\n            } else if ($.isFunction(root.callback)) {\n                // default callback\n                callback = root.callback;\n            } else {\n                // no callback, no action\n                return;\n            }\n\n            // hide menu if callback doesn't stop that\n            if (callback.call(root.$trigger, key, root) !== false) {\n                root.$menu.trigger('contextmenu:hide');\n            } else if (root.$menu.parent().length) {\n                op.update.call(root.$trigger, root);\n            }\n        },\n        // ignore click events on input elements\n        inputClick: function(e) {\n            e.stopImmediatePropagation();\n        },\n\n        // hide <menu>\n        hideMenu: function(e, data) {\n            var root = $(this).data('contextMenuRoot');\n            op.hide.call(root.$trigger, root, data && data.force);\n        },\n        // focus <command>\n        focusItem: function(e) {\n            e.stopPropagation();\n            var $this = $(this),\n                data = $this.data(),\n                opt = data.contextMenu,\n                root = data.contextMenuRoot;\n\n            $this.addClass('hover')\n                .siblings('.hover').trigger('contextmenu:blur');\n\n            // remember selected\n            opt.$selected = root.$selected = $this;\n\n            // position sub-menu - do after show so dumb $.ui.position can keep up\n            if (opt.$node) {\n                root.positionSubmenu.call(opt.$node, opt.$menu);\n            }\n        },\n        // blur <command>\n        blurItem: function(e) {\n            e.stopPropagation();\n            var $this = $(this),\n                data = $this.data(),\n                opt = data.contextMenu;\n\n            $this.removeClass('hover');\n            if(opt)opt.$selected = null;\n        }\n    },\n    // operations\n    op = {\n        show: function(opt, x, y) {\n            var $trigger = $(this),\n                offset,\n                css = {};\n\n            // hide any open menus\n            $('#context-menu-layer').trigger('mousedown');\n\n            // backreference for callbacks\n            opt.$trigger = $trigger;\n\n            // show event\n            if (opt.events.show.call($trigger, opt) === false) {\n                $currentTrigger = null;\n                return;\n            }\n\n            // create or update context menu\n            op.update.call($trigger, opt);\n\n            // position menu\n            opt.position.call($trigger, opt, x, y);\n\n            // make sure we're in front\n            if (opt.zIndex) {\n                css.zIndex = zindex($trigger) + opt.zIndex;\n            }\n\n            // add layer\n            op.layer.call(opt.$menu, opt, css.zIndex);\n\n            // adjust sub-menu zIndexes\n            opt.$menu.find('ul').css('zIndex', css.zIndex + 1);\n\n            // position and show context menu\n            opt.$menu.css( css )[opt.animation.show](opt.animation.duration, function() {\n                $trigger.trigger('contextmenu:visible');\n            });\n            // make options available and set state\n            $trigger\n                .data('contextMenu', opt)\n                .addClass(\"context-menu-active\");\n\n            // register key handler\n            $(document).off('keydown.contextMenu').on('keydown.contextMenu', handle.key);\n            // register autoHide handler\n            if (opt.autoHide) {\n                // mouse position handler\n                $(document).on('mousemove.contextMenuAutoHide', function(e) {\n                    // need to capture the offset on mousemove,\n                    // since the page might've been scrolled since activation\n                    var pos = $trigger.offset();\n                    pos.right = pos.left + $trigger.outerWidth();\n                    pos.bottom = pos.top + $trigger.outerHeight();\n\n                    if (opt.$layer && !opt.hovering && (!(e.pageX >= pos.left && e.pageX <= pos.right) || !(e.pageY >= pos.top && e.pageY <= pos.bottom))) {\n                        // if mouse in menu...\n                        opt.$menu.trigger('contextmenu:hide');\n                    }\n                });\n            }\n        },\n        hide: function(opt, force) {\n            var $trigger = $(this);\n            if (!opt) {\n                opt = $trigger.data('contextMenu') || {};\n            }\n\n            // hide event\n            if (!force && opt.events && opt.events.hide.call($trigger, opt) === false) {\n                return;\n            }\n\n            // remove options and revert state\n            $trigger\n                .removeData('contextMenu')\n                .removeClass(\"context-menu-active\");\n\n            if (opt.$layer) {\n                // keep layer for a bit so the contextmenu event can be aborted properly by opera\n                setTimeout((function($layer) {\n                    return function(){\n                        $layer.remove();\n                    };\n                })(opt.$layer), 10);\n\n                try {\n                    delete opt.$layer;\n                } catch(e) {\n                    opt.$layer = null;\n                }\n            }\n\n            // remove handle\n            $currentTrigger = null;\n            // remove selected\n            opt.$menu.find('.hover').trigger('contextmenu:blur');\n            opt.$selected = null;\n            // unregister key and mouse handlers\n            //$(document).off('.contextMenuAutoHide keydown.contextMenu'); // http://bugs.jquery.com/ticket/10705\n            $(document).off('.contextMenuAutoHide').off('keydown.contextMenu');\n            // hide menu\n            opt.$menu && opt.$menu[opt.animation.hide](opt.animation.duration, function (){\n                // tear down dynamically built menu after animation is completed.\n                if (opt.build) {\n                    opt.$menu.remove();\n                    $.each(opt, function(key, value) {\n                        switch (key) {\n                            case 'ns':\n                            case 'selector':\n                            case 'build':\n                            case 'trigger':\n                                return true;\n\n                            default:\n                                opt[key] = undefined;\n                                try {\n                                    delete opt[key];\n                                } catch (e) {}\n                                return true;\n                        }\n                    });\n                }\n\n                setTimeout(function() {\n                    $trigger.trigger('contextmenu:hidden');\n                }, 10);\n            });\n        },\n        create: function(opt, root) {\n            if (root === undefined) {\n                root = opt;\n            }\n            // create contextMenu\n            opt.$menu = $('<ul class=\"context-menu-list\"></ul>').addClass(opt.className || \"\").data({\n                'contextMenu': opt,\n                'contextMenuRoot': root\n            });\n\n            $.each(['callbacks', 'commands', 'inputs'], function(i,k){\n                opt[k] = {};\n                if (!root[k]) {\n                    root[k] = {};\n                }\n            });\n\n            root.accesskeys || (root.accesskeys = {});\n\n            // create contextMenu items\n            $.each(opt.items, function(key, item) {\n              var $t = $('<li class=\"context-menu-item\"></li>').addClass(item.className || \"\"),\n                $label = null,\n                $input = null;\n\n              // iOS needs to see a click-event bound to an element to actually\n              // have the TouchEvents infrastructure trigger the click event\n              $t.on('click', $.noop);\n\n              if (typeof item !== \"string\"){\n                item.$node = $t.data({\n                  'contextMenu': opt,\n                  'contextMenuRoot': root,\n                  'contextMenuKey': key\n                });\n              }\n\n                // register accesskey\n                // NOTE: the accesskey attribute should be applicable to any element, but Safari5 and Chrome13 still can't do that\n                if (item.accesskey) {\n                    var aks = splitAccesskey(item.accesskey);\n                    for (var i=0, ak; ak = aks[i]; i++) {\n                        if (!root.accesskeys[ak]) {\n                            root.accesskeys[ak] = item;\n                            item._name = item.name.replace(new RegExp('(' + ak + ')', 'i'), '<span class=\"context-menu-accesskey\">$1</span>');\n                            break;\n                        }\n                    }\n                }\n\n                if (typeof item == \"string\") {\n                    $t.addClass('context-menu-separator not-selectable');\n                } else if (item.type && types[item.type]) {\n                    // run custom type handler\n                    types[item.type].call($t, item, opt, root);\n                    // register commands\n                    $.each([opt, root], function(i,k){\n                        k.commands[key] = item;\n                        if ($.isFunction(item.callback)) {\n                            k.callbacks[key] = item.callback;\n                        }\n                    });\n                } else {\n                    // add label for input\n                    if (item.type == 'html') {\n                        $t.addClass('context-menu-html not-selectable');\n                    } else if (item.type) {\n                        $label = $('<label></label>').appendTo($t);\n                        $('<span></span>').html(item._name || item.name).appendTo($label);\n                        $t.addClass('context-menu-input');\n                        opt.hasTypes = true;\n                        $.each([opt, root], function(i,k){\n                            k.commands[key] = item;\n                            k.inputs[key] = item;\n                        });\n                    } else if (item.items) {\n                        item.type = 'sub';\n                    }\n\n                    switch (item.type) {\n                        case 'text':\n                            $input = $('<input type=\"text\" value=\"1\" name=\"\" value=\"\">')\n                                .attr('name', 'context-menu-input-' + key)\n                                .val(item.value || \"\")\n                                .appendTo($label);\n                            break;\n\n                        case 'textarea':\n                            $input = $('<textarea name=\"\"></textarea>')\n                                .attr('name', 'context-menu-input-' + key)\n                                .val(item.value || \"\")\n                                .appendTo($label);\n\n                            if (item.height) {\n                                $input.height(item.height);\n                            }\n                            break;\n\n                        case 'checkbox':\n                            $input = $('<input type=\"checkbox\" value=\"1\" name=\"\" value=\"\">')\n                                .attr('name', 'context-menu-input-' + key)\n                                .val(item.value || \"\")\n                                .prop(\"checked\", !!item.selected)\n                                .prependTo($label);\n                            break;\n\n                        case 'radio':\n                            $input = $('<input type=\"radio\" value=\"1\" name=\"\" value=\"\">')\n                                .attr('name', 'context-menu-input-' + item.radio)\n                                .val(item.value || \"\")\n                                .prop(\"checked\", !!item.selected)\n                                .prependTo($label);\n                            break;\n\n                        case 'select':\n                            $input = $('<select name=\"\">')\n                                .attr('name', 'context-menu-input-' + key)\n                                .appendTo($label);\n                            if (item.options) {\n                                $.each(item.options, function(value, text) {\n                                    $('<option></option>').val(value).text(text).appendTo($input);\n                                });\n                                $input.val(item.selected);\n                            }\n                            break;\n\n                        case 'sub':\n                            // FIXME: shouldn't this .html() be a .text()?\n                            $('<span></span>').html(item._name || item.name).appendTo($t);\n                            item.appendTo = item.$node;\n                            op.create(item, root);\n                            $t.data('contextMenu', item).addClass('context-menu-submenu');\n                            item.callback = null;\n                            break;\n\n                        case 'html':\n                            $(item.html).appendTo($t);\n                            break;\n\n                        default:\n                            $.each([opt, root], function(i,k){\n                                k.commands[key] = item;\n                                if ($.isFunction(item.callback)) {\n                                    k.callbacks[key] = item.callback;\n                                }\n                            });\n                            // FIXME: shouldn't this .html() be a .text()?\n                            $('<span></span>').html(item._name || item.name || \"\").appendTo($t);\n                            break;\n                    }\n\n                    // disable key listener in <input>\n                    if (item.type && item.type != 'sub' && item.type != 'html') {\n                        $input\n                            .on('focus', handle.focusInput)\n                            .on('blur', handle.blurInput);\n\n                        if (item.events) {\n                            $input.on(item.events, opt);\n                        }\n                    }\n\n                    // add icons\n                    if (item.icon) {\n                        $t.addClass(\"icon icon-\" + item.icon);\n                    }\n                }\n\n                // cache contained elements\n                if(typeof item !==\"string\") {\n                  item.$input = $input;\n                  item.$label = $label;\n                }\n\n                // attach item to menu\n                $t.appendTo(opt.$menu);\n\n                // Disable text selection\n                if (!opt.hasTypes && $.support.eventSelectstart) {\n                    // browsers support user-select: none,\n                    // IE has a special event for text-selection\n                    // browsers supporting neither will not be preventing text-selection\n                    $t.on('selectstart.disableTextSelect', handle.abortevent);\n                }\n            });\n            // attach contextMenu to <body> (to bypass any possible overflow:hidden issues on parents of the trigger element)\n            if (!opt.$node) {\n                opt.$menu.css('display', 'none').addClass('context-menu-root');\n            }\n            opt.$menu.appendTo(opt.appendTo || document.body);\n        },\n        resize: function($menu, nested) {\n            // determine widths of submenus, as CSS won't grow them automatically\n            // position:absolute within position:absolute; min-width:100; max-width:200; results in width: 100;\n            // kinda sucks hard...\n\n            // determine width of absolutely positioned element\n            $menu.css({position: 'absolute', display: 'block'});\n            // don't apply yet, because that would break nested elements' widths\n            // add a pixel to circumvent word-break issue in IE9 - #80\n            $menu.data('width', Math.ceil($menu.width()) + 1);\n            // reset styles so they allow nested elements to grow/shrink naturally\n            $menu.css({\n                position: 'static',\n                minWidth: '0px',\n                maxWidth: '100000px'\n            });\n            // identify width of nested menus\n            $menu.find('> li > ul').each(function() {\n                op.resize($(this), true);\n            });\n            // reset and apply changes in the end because nested\n            // elements' widths wouldn't be calculatable otherwise\n            if (!nested) {\n                $menu.find('ul').andSelf().css({\n                    position: '',\n                    display: '',\n                    minWidth: '',\n                    maxWidth: ''\n                }).width(function() {\n                    return $(this).data('width');\n                });\n            }\n        },\n        update: function(opt, root) {\n            var $trigger = this;\n            if (root === undefined) {\n                root = opt;\n                op.resize(opt.$menu);\n            }\n            // re-check disabled for each item\n            opt.$menu.children().each(function(){\n                var $item = $(this),\n                    key = $item.data('contextMenuKey'),\n                    item = opt.items[key],\n                    disabled = (item === undefined)||(typeof item ===\"string\") || ($.isFunction(item.disabled) && item.disabled.call($trigger, key, root)) || item.disabled === true;\n\n                // dis- / enable item\n                $item[disabled ? 'addClass' : 'removeClass']('disabled');\n\n                if (item && item.type) {\n                    // dis- / enable input elements\n                    $item.find('input, select, textarea').prop('disabled', disabled);\n\n                    // update input states\n                    switch (item.type) {\n                        case 'text':\n                        case 'textarea':\n                            item.$input.val(item.value || \"\");\n                            break;\n\n                        case 'checkbox':\n                        case 'radio':\n                            item.$input.val(item.value || \"\").prop('checked', !!item.selected);\n                            break;\n\n                        case 'select':\n                            item.$input.val(item.selected || \"\");\n                            break;\n                    }\n                }\n\n                if (item && item.$menu) {\n                    // update sub-menu\n                    op.update.call($trigger, item, root);\n                }\n            });\n        },\n        layer: function(opt, zIndex) {\n            // add transparent layer for click area\n            // filter and background for Internet Explorer, Issue #23\n            var $layer = opt.$layer = $('<div id=\"context-menu-layer\" style=\"position:fixed; z-index:' + zIndex + '; top:0; left:0; opacity: 0; filter: alpha(opacity=0); background-color: #000;\"></div>')\n                .css({height: $win.height(), width: $win.width(), display: 'block'})\n                .data('contextMenuRoot', opt)\n                .insertBefore(this)\n                .on('contextmenu', handle.abortevent)\n                .on('mousedown', handle.layerClick);\n\n            // IE6 doesn't know position:fixed;\n            if (!$.support.fixedPosition) {\n                $layer.css({\n                    'position' : 'absolute',\n                    'height' : $(document).height()\n                });\n            }\n\n            return $layer;\n        }\n    };\n\n// split accesskey according to http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#assigned-access-key\nfunction splitAccesskey(val) {\n    var t = val.split(/\\s+/),\n        keys = [];\n\n    for (var i=0, k; k = t[i]; i++) {\n        k = k[0].toUpperCase(); // first character only\n        // theoretically non-accessible characters should be ignored, but different systems, different keyboard layouts, ... screw it.\n        // a map to look up already used access keys would be nice\n        keys.push(k);\n    }\n\n    return keys;\n}\n\n// handle contextMenu triggers\n$.fn.contextMenu = function(operation) {\n    if (operation === undefined) {\n        this.first().trigger('contextmenu');\n    } else if (operation.x && operation.y) {\n        this.first().trigger($.Event(\"contextmenu\", {pageX: operation.x, pageY: operation.y}));\n    } else if (operation === \"hide\") {\n        var $menu = this.data('contextMenu').$menu;\n        $menu && $menu.trigger('contextmenu:hide');\n    } else if (operation === \"destroy\") {\n        $.contextMenu(\"destroy\", {context: this});\n    } else if ($.isPlainObject(operation)) {\n        operation.context = this;\n        $.contextMenu(\"create\", operation);\n    } else if (operation) {\n        this.removeClass('context-menu-disabled');\n    } else if (!operation) {\n        this.addClass('context-menu-disabled');\n    }\n\n    return this;\n};\n\n// manage contextMenu instances\n$.contextMenu = function(operation, options) {\n    if (typeof operation != 'string') {\n        options = operation;\n        operation = 'create';\n    }\n\n    if (typeof options == 'string') {\n        options = {selector: options};\n    } else if (options === undefined) {\n        options = {};\n    }\n\n    // merge with default options\n    var o = $.extend(true, {}, defaults, options || {});\n    var $document = $(document);\n    var $context = $document;\n    var _hasContext = false;\n\n    if (!o.context || !o.context.length) {\n        o.context = document;\n    } else {\n        // you never know what they throw at you...\n        $context = $(o.context).first();\n        o.context = $context.get(0);\n        _hasContext = o.context !== document;\n    }\n\n    switch (operation) {\n        case 'create':\n            // no selector no joy\n            if (!o.selector) {\n                throw new Error('No selector specified');\n            }\n            // make sure internal classes are not bound to\n            if (o.selector.match(/.context-menu-(list|item|input)($|\\s)/)) {\n                throw new Error('Cannot bind to selector \"' + o.selector + '\" as it contains a reserved className');\n            }\n            if (!o.build && (!o.items || $.isEmptyObject(o.items))) {\n                throw new Error('No Items sepcified');\n            }\n            counter ++;\n            o.ns = '.contextMenu' + counter;\n            if (!_hasContext) {\n                namespaces[o.selector] = o.ns;\n            }\n            menus[o.ns] = o;\n\n            // default to right click\n            if (!o.trigger) {\n                o.trigger = 'right';\n            }\n\n            if (!initialized) {\n                // make sure item click is registered first\n                $document\n                    .on({\n                        'contextmenu:hide.contextMenu': handle.hideMenu,\n                        'prevcommand.contextMenu': handle.prevItem,\n                        'nextcommand.contextMenu': handle.nextItem,\n                        'contextmenu.contextMenu': handle.abortevent,\n                        'mouseenter.contextMenu': handle.menuMouseenter,\n                        'mouseleave.contextMenu': handle.menuMouseleave\n                    }, '.context-menu-list')\n                    .on('mouseup.contextMenu', '.context-menu-input', handle.inputClick)\n                    .on({\n                        'mouseup.contextMenu': handle.itemClick,\n                        'contextmenu:focus.contextMenu': handle.focusItem,\n                        'contextmenu:blur.contextMenu': handle.blurItem,\n                        'contextmenu.contextMenu': handle.abortevent,\n                        'mouseenter.contextMenu': handle.itemMouseenter,\n                        'mouseleave.contextMenu': handle.itemMouseleave\n                    }, '.context-menu-item');\n\n                initialized = true;\n            }\n\n            // engage native contextmenu event\n            $context\n                .on('contextmenu' + o.ns, o.selector, o, handle.contextmenu);\n\n            if (_hasContext) {\n                // add remove hook, just in case\n                $context.on('remove' + o.ns, function() {\n                    $(this).contextMenu(\"destroy\");\n                });\n            }\n\n            switch (o.trigger) {\n                case 'hover':\n                        $context\n                            .on('mouseenter' + o.ns, o.selector, o, handle.mouseenter)\n                            .on('mouseleave' + o.ns, o.selector, o, handle.mouseleave);\n                    break;\n\n                case 'left':\n                        $context.on('click' + o.ns, o.selector, o, handle.click);\n                    break;\n                /*\n                default:\n                    // http://www.quirksmode.org/dom/events/contextmenu.html\n                    $document\n                        .on('mousedown' + o.ns, o.selector, o, handle.mousedown)\n                        .on('mouseup' + o.ns, o.selector, o, handle.mouseup);\n                    break;\n                */\n            }\n\n            // create menu\n            if (!o.build) {\n                op.create(o);\n            }\n            break;\n\n        case 'destroy':\n            var $visibleMenu;\n            if (_hasContext) {\n                // get proper options\n                var context = o.context;\n                $.each(menus, function(ns, o) {\n                    if (o.context !== context) {\n                        return true;\n                    }\n\n                    $visibleMenu = $('.context-menu-list').filter(':visible');\n                    if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is($(o.context).find(o.selector))) {\n                        $visibleMenu.trigger('contextmenu:hide', {force: true});\n                    }\n\n                    try {\n                        if (menus[o.ns].$menu) {\n                            menus[o.ns].$menu.remove();\n                        }\n\n                        delete menus[o.ns];\n                    } catch(e) {\n                        menus[o.ns] = null;\n                    }\n\n                    $(o.context).off(o.ns);\n\n                    return true;\n                });\n            } else if (!o.selector) {\n                $document.off('.contextMenu .contextMenuAutoHide');\n                $.each(menus, function(ns, o) {\n                    $(o.context).off(o.ns);\n                });\n\n                namespaces = {};\n                menus = {};\n                counter = 0;\n                initialized = false;\n\n                $('#context-menu-layer, .context-menu-list').remove();\n            } else if (namespaces[o.selector]) {\n                $visibleMenu = $('.context-menu-list').filter(':visible');\n                if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is(o.selector)) {\n                    $visibleMenu.trigger('contextmenu:hide', {force: true});\n                }\n\n                try {\n                    if (menus[namespaces[o.selector]].$menu) {\n                        menus[namespaces[o.selector]].$menu.remove();\n                    }\n\n                    delete menus[namespaces[o.selector]];\n                } catch(e) {\n                    menus[namespaces[o.selector]] = null;\n                }\n\n                $document.off(namespaces[o.selector]);\n            }\n            break;\n\n        case 'html5':\n            // if <command> or <menuitem> are not handled by the browser,\n            // or options was a bool true,\n            // initialize $.contextMenu for them\n            if ((!$.support.htmlCommand && !$.support.htmlMenuitem) || (typeof options == \"boolean\" && options)) {\n                $('menu[type=\"context\"]').each(function() {\n                    if (this.id) {\n                        $.contextMenu({\n                            selector: '[contextmenu=' + this.id +']',\n                            items: $.contextMenu.fromMenu(this)\n                        });\n                    }\n                }).css('display', 'none');\n            }\n            break;\n\n        default:\n            throw new Error('Unknown operation \"' + operation + '\"');\n    }\n\n    return this;\n};\n\n// import values into <input> commands\n$.contextMenu.setInputValues = function(opt, data) {\n    if (data === undefined) {\n        data = {};\n    }\n\n    $.each(opt.inputs, function(key, item) {\n        switch (item.type) {\n            case 'text':\n            case 'textarea':\n                item.value = data[key] || \"\";\n                break;\n\n            case 'checkbox':\n                item.selected = data[key] ? true : false;\n                break;\n\n            case 'radio':\n                item.selected = (data[item.radio] || \"\") == item.value ? true : false;\n                break;\n\n            case 'select':\n                item.selected = data[key] || \"\";\n                break;\n        }\n    });\n};\n\n// export values from <input> commands\n$.contextMenu.getInputValues = function(opt, data) {\n    if (data === undefined) {\n        data = {};\n    }\n\n    $.each(opt.inputs, function(key, item) {\n        switch (item.type) {\n            case 'text':\n            case 'textarea':\n            case 'select':\n                data[key] = item.$input.val();\n                break;\n\n            case 'checkbox':\n                data[key] = item.$input.prop('checked');\n                break;\n\n            case 'radio':\n                if (item.$input.prop('checked')) {\n                    data[item.radio] = item.value;\n                }\n                break;\n        }\n    });\n\n    return data;\n};\n\n// find <label for=\"xyz\">\nfunction inputLabel(node) {\n    return (node.id && $('label[for=\"'+ node.id +'\"]').val()) || node.name;\n}\n\n// convert <menu> to items object\nfunction menuChildren(items, $children, counter) {\n    if (!counter) {\n        counter = 0;\n    }\n\n    $children.each(function() {\n        var $node = $(this),\n            node = this,\n            nodeName = this.nodeName.toLowerCase(),\n            label,\n            item;\n\n        // extract <label><input>\n        if (nodeName == 'label' && $node.find('input, textarea, select').length) {\n            label = $node.text();\n            $node = $node.children().first();\n            node = $node.get(0);\n            nodeName = node.nodeName.toLowerCase();\n        }\n\n        /*\n         * <menu> accepts flow-content as children. that means <embed>, <canvas> and such are valid menu items.\n         * Not being the sadistic kind, $.contextMenu only accepts:\n         * <command>, <menuitem>, <hr>, <span>, <p> <input [text, radio, checkbox]>, <textarea>, <select> and of course <menu>.\n         * Everything else will be imported as an html node, which is not interfaced with contextMenu.\n         */\n\n        // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#concept-command\n        switch (nodeName) {\n            // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-menu-element\n            case 'menu':\n                item = {name: $node.attr('label'), items: {}};\n                counter = menuChildren(item.items, $node.children(), counter);\n                break;\n\n            // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-a-element-to-define-a-command\n            case 'a':\n            // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-button-element-to-define-a-command\n            case 'button':\n                item = {\n                    name: $node.text(),\n                    disabled: !!$node.attr('disabled'),\n                    callback: (function(){ return function(){ $node.click(); }; })()\n                };\n                break;\n\n            // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-command-element-to-define-a-command\n\n            case 'menuitem':\n            case 'command':\n                switch ($node.attr('type')) {\n                    case undefined:\n                    case 'command':\n                    case 'menuitem':\n                        item = {\n                            name: $node.attr('label'),\n                            disabled: !!$node.attr('disabled'),\n                            callback: (function(){ return function(){ $node.click(); }; })()\n                        };\n                        break;\n\n                    case 'checkbox':\n                        item = {\n                            type: 'checkbox',\n                            disabled: !!$node.attr('disabled'),\n                            name: $node.attr('label'),\n                            selected: !!$node.attr('checked')\n                        };\n                        break;\n\n                    case 'radio':\n                        item = {\n                            type: 'radio',\n                            disabled: !!$node.attr('disabled'),\n                            name: $node.attr('label'),\n                            radio: $node.attr('radiogroup'),\n                            value: $node.attr('id'),\n                            selected: !!$node.attr('checked')\n                        };\n                        break;\n\n                    default:\n                        item = undefined;\n                }\n                break;\n\n            case 'hr':\n                item = '-------';\n                break;\n\n            case 'input':\n                switch ($node.attr('type')) {\n                    case 'text':\n                        item = {\n                            type: 'text',\n                            name: label || inputLabel(node),\n                            disabled: !!$node.attr('disabled'),\n                            value: $node.val()\n                        };\n                        break;\n\n                    case 'checkbox':\n                        item = {\n                            type: 'checkbox',\n                            name: label || inputLabel(node),\n                            disabled: !!$node.attr('disabled'),\n                            selected: !!$node.attr('checked')\n                        };\n                        break;\n\n                    case 'radio':\n                        item = {\n                            type: 'radio',\n                            name: label || inputLabel(node),\n                            disabled: !!$node.attr('disabled'),\n                            radio: !!$node.attr('name'),\n                            value: $node.val(),\n                            selected: !!$node.attr('checked')\n                        };\n                        break;\n\n                    default:\n                        item = undefined;\n                        break;\n                }\n                break;\n\n            case 'select':\n                item = {\n                    type: 'select',\n                    name: label || inputLabel(node),\n                    disabled: !!$node.attr('disabled'),\n                    selected: $node.val(),\n                    options: {}\n                };\n                $node.children().each(function(){\n                    item.options[this.value] = $(this).text();\n                });\n                break;\n\n            case 'textarea':\n                item = {\n                    type: 'textarea',\n                    name: label || inputLabel(node),\n                    disabled: !!$node.attr('disabled'),\n                    value: $node.val()\n                };\n                break;\n\n            case 'label':\n                break;\n\n            default:\n                item = {type: 'html', html: $node.clone(true)};\n                break;\n        }\n\n        if (item) {\n            counter++;\n            items['key' + counter] = item;\n        }\n    });\n\n    return counter;\n}\n\n// convert html5 menu\n$.contextMenu.fromMenu = function(element) {\n    var $this = $(element),\n        items = {};\n\n    menuChildren(items, $this.children());\n\n    return items;\n};\n\n// make defaults accessible\n$.contextMenu.defaults = defaults;\n$.contextMenu.types = types;\n// export internal functions - undocumented, for hacking only!\n$.contextMenu.handle = handle;\n$.contextMenu.op = op;\n$.contextMenu.menus = menus;\n\n})(jQuery);\n","require(\"!!/Users/d023280/Documents/workspace/draw2d_js/node_modules/script-loader/addScript.js\")(require(\"!!/Users/d023280/Documents/workspace/draw2d_js/node_modules/raw-loader/index.js!/Users/d023280/Documents/workspace/draw2d_js/src/lib/pathfinding.exec.js\"))","require(\"!!/Users/d023280/Documents/workspace/draw2d_js/node_modules/script-loader/addScript.js\")(require(\"!!/Users/d023280/Documents/workspace/draw2d_js/node_modules/raw-loader/index.js!/Users/d023280/Documents/workspace/draw2d_js/src/lib/raphael.exec.js\"))","\n\n/**\n *\n * @private\n */\n/**\n * Primary package containing general interfaces and implementation classes.\n * @namespace draw2d */\nexport default {\n  /**\n   * Types representing or manipulating geometric values, such as Points, Rectangles, etc.\n   * @namespace draw2d.geo\n   * */\n  geo: {},\n\n  /** \n   * Contains classes to load and save Draw2D files into, or from, a Canvas.\n   * @namespace draw2d.io \n   **/\n  io: {\n    /** @namespace draw2d.io.json\n     * */\n    json: {},\n    /** @namespace draw2d.io.png */\n    png: {},\n    /** @namespace draw2d.io.svg */\n    svg: {}\n  },\n\n  /** @namespace draw2d.util */\n  util: {\n    /** @namespace draw2d.util.spline */\n    spline: {}\n  },\n\n  /**\n   * This package contains EditPolicy implementations for all used elements. A *EditPolicy*\n   * is a pluggable contribution implementing a portion of an element behavior. Editpolicies contribute to the\n   * overall editing behavior of an EditPart.\n   *\n   * Editing behavior is defined as one or more of the following:\n   *  - Selection handling\n   *  - Routing\n   *  - Feedback management\n   *  - Delegation and Forwarding of commands\n   *  - Drag&Drop behaviour\n   *\n   * @namespace draw2d.policy\n   * */\n  policy: {\n    /**\n     * Editpolicies for selection handling, highlighting, background rendering, snapTo behaviour.\n     *\n     * @namespace draw2d.policy.canvas\n     * */\n    canvas: {},\n    /** \n     * Policies for Connection creation. Like 'ClickPolicy'...creates a connection if you click into the canvas. \n     * @namespace draw2d.policy.connection \n     **/\n    connection: {},\n    /** @namespace draw2d.policy.line */\n    line: {},\n    /** @namespace draw2d.policy.port */\n    port: {},\n    /** \n     * Selection decorations for figures. Movement contrains. Width limitation,...\n     * @namespace draw2d.policy.figure \n     **/\n    figure: {}\n  },\n\n  /** \n   * Contains all predefined visual shapes of Draw2D\n   *  \n   * @namespace draw2d.shape \n   **/\n  shape: {\n    /** \n     * @namespace draw2d.shape.basic \n     **/\n    basic: {},\n    /** @namespace draw2d.shape.dimetric */\n    dimetric: {},\n    /** @namespace draw2d.shape.composite */\n    composite: {},\n    /** @namespace draw2d.shape.arrow */\n    arrow: {},\n    /** @namespace draw2d.shape.node */\n    node: {},\n    /** @namespace draw2d.shape.note */\n    note: {},\n    /** @namespace draw2d.shape.diagram */\n    diagram: {},\n    /** @namespace draw2d.shape.flowchart */\n    flowchart: {},\n    /** @namespace draw2d.shape.analog */\n    analog: {},\n    /** @namespace draw2d.shape.icon */\n    icon: {},\n    /** @namespace draw2d.shape.layout */\n    layout: {},\n    /** @namespace draw2d.shape.pert */\n    pert: {},\n    /** @namespace draw2d.shape.state */\n    state: {},\n    /** @namespace draw2d.shape.widget */\n    widget: {}\n  },\n\n  /** \n   * The command is what eventually changes the model. Figures are asked for a command for a given request. Commands also help \n   * determine if the interaction is possible. If there is no command, or it is not executable, the UI will indicate that the \n   * interaction is not allowed. \n   * \n   * All commands (move, drag&drop, insert, remove,....) are stored on top of a CommandStack and available for undo and redo.\n   * An `draw2d.Canvas` has a single command stack. **Commands must be executed using the command stack rather than directly calling execute.**\n   * \n   * @namespace draw2d.command \n   **/\n  command: {},\n\n  /** @namespace draw2d.decoration */\n  decoration: {\n    /** @namespace draw2d.decoration.connection */\n    connection: {}\n  },\n\n  /** @namespace draw2d.layout */\n  layout: {\n    /** @namespace draw2d.layout.connection\n     *  @memberof draw2d.layout\n     * */\n    connection: {},\n    /** @namespace draw2d.layout.anchor */\n    anchor: {},\n    /** @namespace draw2d.layout.mesh */\n    mesh: {},\n    /** @namespace draw2d.layout.locator */\n    locator: {}\n  },\n\n  /** @namespace draw2d.ui */\n  ui: {},\n\n  isTouchDevice: (\n    //Detect iPhone\n    (navigator.platform.indexOf(\"iPhone\") != -1) ||\n    //Detect iPod\n    (navigator.platform.indexOf(\"iPod\") != -1) ||\n    //Detect iPad\n    (navigator.platform.indexOf(\"iPad\") != -1)\n  )\n\n}\n\n\n\n","import draw2d from '../packages'\nimport extend from '../util/extend'\n\n\n/**\n * @class\n *\n * A plugable contribution implementing a portion of an behavior.\n *\n *\n * EditPolicies should determine an Canvas or figure editing capabilities. It is possible to implement\n * an figure such that it handles all editing responsibility. However, it is much more flexible\n * and object-oriented to use EditPolicies. Using policies, you can pick and choose the editing\n * behavior for an figure/canvas without being bound to its class hierarchy. Code management is easier.\n *\n *\n * This interface is not intended to be implemented by clients. Clients should inherit from {@link draw2d.policy.figure.SelectionFeedbackPolicy}\n * or {@link draw2d.policy.canvas.SelectionPolicy}.\n *\n * @author Andreas Herz\n */\ndraw2d.policy.EditPolicy = Class.extend(\n  /** @lends draw2d.policy.EditPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.EditPolicy\",\n\n  /**\n   *\n   */\n  init: function (attr, setter, getter) {\n    this.setterWhitelist = extend({}, setter)\n\n    this.getterWhitelist = extend({}, getter)\n\n    this.attr(attr)\n  },\n\n  /**\n   * \n   * Read or set object attributes.<br>\n   * When no value is given, reads specified attribute from the element.<br>\n   * When value is given, sets the attribute to that value.\n   * Multiple attributes can be set by passing an object with name-value pairs.\n   *\n   * @param {String/Object} name\n   * @param {Object} [value]\n   * @since 5.3.2\n   * @returns {Object}\n   **/\n  attr: function (name, value) {\n    // call of attr as setter method with {name1:val1, name2:val2 }  argument list\n    //\n    if ($.isPlainObject(name)) {\n      for (let key in name) {\n        let func = this.setterWhitelist[key]\n        // call the assigned method if given\n        if (func) {\n          func.call(this, name[key])\n        }\n        // maby the ussser adds a function as property to the attr call\n        // e.g.:\n        // {\n        //     doIt: function(){}\n        // }\n        //\n        // in this case we assign the method to this object and wrap it with \"this\" as context\n        // a very, very simple method to replace default implemenations of the object\n        else if (typeof name[key] === \"function\") {\n          this[key] = name[key].bind(this)\n        }\n      }\n    }\n    else if (typeof name === \"string\") {\n      // call attr as getter\n      //\n      if (typeof value === \"undefined\") {\n        let getter = this.getterWhitelist[name]\n        if (typeof getter === \"function\") {\n          return getter.call(this)\n        }\n        return // undefined\n      }\n      // call attr as simple setter with (key , value)\n      //\n\n      // the value can be a function. In this case we must call the value().\n      if (typeof value === \"function\") {\n        value = value()\n      }\n      let setter = this.setterWhitelist[name]\n      if (setter) {\n        setter.call(this, value)\n      }\n    }\n    // generic getter of all registered attributes\n    else if (typeof name === \"undefined\") {\n      let result = {}\n      for (key in this.getterWhitelist) {\n        result[key] = this.getterWhitelist[key].call(this)\n      }\n      return result\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Called by the host if the policy has been installed.\n   *\n   * @param {draw2d.Canvas|draw2d.Figure} host\n   */\n  onInstall: function (host) {\n  },\n\n  /**\n   * \n   * Called by the host if the policy has been uninstalled.\n   *\n   * @param {draw2d.Canvas|draw2d.Figure} host\n   */\n  onUninstall: function (host) {\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.SelectionPolicy\n */\ndraw2d.policy.canvas.BoundingboxSelectionPolicy = draw2d.policy.canvas.SingleSelectionPolicy.extend(\n  /** @lends draw2d.policy.canvas.BoundingboxSelectionPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.BoundingboxSelectionPolicy\",\n\n  /**\n   * Creates a new selection policy for a canvas.\n   */\n  init: function () {\n    this.isInsideMode = (rect1, rect2) => rect1.isInside(rect2)\n    this.intersectsMode = (rect1, rect2) => rect1.intersects(rect2)\n\n    this.decision = this.isInsideMode\n\n    this._super()\n\n    this.boundingBoxFigure1 = null\n    this.boundingBoxFigure2 = null\n    this.x = 0\n    this.y = 0\n\n    // falls ein Port getroffen wird, dann darf keine BoundingBox gezeichnet werden.\n    //\n    this.canDrawBoundingBox = false\n  },\n\n  /**\n   * @inheritdoc\n   */\n  select: function (canvas, figure) {\n    if (canvas.getSelection().contains(figure)) {\n      return // nothing to to\n    }\n\n    let oldSelection = canvas.getSelection().getPrimary()\n\n    if (figure !== null) {\n      figure.select(true) // primary selection\n    }\n\n    if (oldSelection !== figure) {\n      canvas.getSelection().setPrimary(figure)\n\n      // inform all selection listeners about the new selection.\n      //\n      canvas.fireEvent(\"select\", {figure: figure, selection: canvas.getSelection()})\n    }\n\n    // adding connections to the selection of the source and target port part of the current selection\n    //\n    let selection = canvas.getSelection()\n    canvas.getLines().each((i, line) => {\n      if (line instanceof draw2d.Connection) {\n        if (selection.contains(line.getSource().getRoot()) && selection.contains(line.getTarget().getRoot())) {\n          this.select(canvas, line, false)\n        }\n      }\n    })\n  },\n\n\n  /**\n   * \n   * Set the selection handling mode to <b>intersection</b> or to <b>isInside</b>.\n   * <ul>\n   *   <li>true = intersection, shapes must only touch the selection bounding box </li>\n   *   <li>false = isInside, shapes must complete inside the selection bounding box (default)</li>\n   * </ul>\n   *\n   * @param {Boolean} useIntersectionMode set true if the selection handle should use the alternative selection approach\n   * @since 4.9.0\n   */\n  setDecisionMode: function (useIntersectionMode) {\n    if (useIntersectionMode === true) {\n      this.decision = this.intersectsMode\n    }\n    else {\n      this.decision = this.isInsideMode\n    }\n\n    return this\n  },\n\n  /**\n   * \n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseDown: function (canvas, x, y, shiftKey, ctrlKey) {\n\n    try {\n      this.x = x\n      this.y = y\n\n      let currentSelection = canvas.getSelection().getAll()\n\n      // COPY_PARENT\n      // this code part is copied from the parent implementation. The main problem is, that\n      // the sequence of unselect/select of elements is broken if we call the base implementation\n      // in this case wrong  events are fired if we select a figure if already a figure is selected!\n      // WRONG: selectNewFigure -> unselectOldFigure\n      // RIGHT: unselectOldFigure -> selectNewFigure\n      // To ensure this I must copy the parent code and postbound the event propagation\n      //\n      this.mouseMovedDuringMouseDown = false\n      let canDragStart = true\n\n      this.canDrawBoundingBox = false\n\n      let figure = canvas.getBestFigure(x, y)\n\n      // may the figure is assigned to a composite. In this case the composite can\n      // override the event receiver\n      while (figure !== null) {\n        let delegated = figure.getSelectionAdapter()()\n        if (delegated === figure) {\n          break\n        }\n        figure = delegated\n      }\n\n      // ignore ports since version 6.1.0. This is handled by the ConnectionCreatePolicy\n      //\n      if (figure instanceof draw2d.Port) {\n        return// silently\n      }\n\n      if( figure !==null && figure.isSelectable() === false && figure.isDraggable()===false){\n        figure=null;\n      }\n\n      this.canDrawBoundingBox = true\n\n\n      if (figure !== null && figure.isDraggable()) {\n        canDragStart = figure.onDragStart(x - figure.getAbsoluteX(), y - figure.getAbsoluteY(), shiftKey, ctrlKey)\n        // Element send a veto about the drag&drop operation\n        this.mouseDraggingElement = canDragStart === false ? null : figure\n      }\n\n      this.mouseDownElement = figure\n\n      if (this.mouseDownElement !== null) {\n        this.mouseDownElement.fireEvent(\"mousedown\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n      }\n\n      // we click on an element which are not part of the current selection\n      // => reset the \"old\" current selection if we didn't press the shift key\n      if (shiftKey === false) {\n        if (this.mouseDownElement !== null && this.mouseDownElement.isResizeHandle === false && !currentSelection.contains(this.mouseDownElement)) {\n          currentSelection.each((i, figure) => {\n            this.unselect(canvas, figure)\n          })\n        }\n      }\n\n      if (figure !== canvas.getSelection().getPrimary() && figure !== null && figure.isSelectable() === true) {\n        this.select(canvas, figure)\n\n        // its a line\n        if (figure instanceof draw2d.shape.basic.Line) {\n          // you can move a line with Drag&Drop...but not a connection.\n          // A Connection is fixed linked with the corresponding ports.\n          //\n          if (!(figure instanceof draw2d.Connection)) {\n            canvas.draggingLineCommand = figure.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.MOVE))\n            if (canvas.draggingLineCommand !== null) {\n              canvas.draggingLine = figure\n            }\n          }\n        }\n        else if (canDragStart === false) {\n          figure.unselect()\n        }\n      }\n      // END_COPY FROM PARENT\n\n\n      // inform all figures that they have a new ox/oy position for the relative\n      // drag/drop operation\n      if (this.mouseDownElement !== null && this.mouseDownElement.isResizeHandle === false) {\n        currentSelection = canvas.getSelection().getAll()\n        currentSelection.each((i, figure) => {\n          let fakeDragX = 1\n          let fakeDragY = 1\n\n          let handleRect = figure.getHandleBBox()\n          if (handleRect !== null) {\n            handleRect.translate(figure.getAbsolutePosition().scale(-1))\n            fakeDragX = handleRect.x + 1\n            fakeDragY = handleRect.y + 1\n          }\n\n          let canDragStart = figure.onDragStart(fakeDragX, fakeDragY, shiftKey, ctrlKey, true /*fakeFlag*/)\n          // its a line\n          if (figure instanceof draw2d.shape.basic.Line) {\n            // no special handling\n          }\n          else if (canDragStart === false) {\n            this.unselect(canvas, figure)\n          }\n        })\n      }\n    }\n    catch (exc) {\n      console.log(exc)\n      throw exc\n    }\n  },\n\n  /**\n   * \n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} dx The x diff between start of dragging and this event\n   * @param {Number} dy The y diff between start of dragging and this event\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   */\n  onMouseDrag: function (canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    // don't drag a selection box if we drag&drop a port\n    //\n    if (this.canDrawBoundingBox === false) {\n      return\n    }\n\n    try {\n      this._super(canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey)\n\n      if (this.mouseDraggingElement === null && this.mouseDownElement === null && this.boundingBoxFigure1 === null) {\n        this.boundingBoxFigure1 = new draw2d.shape.basic.Rectangle({\n          width: 1,\n          height: 1,\n          x: this.x,\n          y: this.y,\n          bgColor: \"#d4d1d4\",\n          alpha: 0.1\n        })\n        this.boundingBoxFigure1.setCanvas(canvas)\n\n        this.boundingBoxFigure2 = new draw2d.shape.basic.Rectangle({\n          width: 1,\n          height: 1,\n          x: this.x,\n          y: this.y,\n          dash: \"--..\",\n          stroke: 0.5,\n          color: \"#37a8ff\",\n          bgColor: null\n        })\n        this.boundingBoxFigure2.setCanvas(canvas)\n      }\n      let abs = Math.abs\n      if (this.boundingBoxFigure1 !== null) {\n        this.boundingBoxFigure1.setDimension(abs(dx), abs(dy))\n        this.boundingBoxFigure1.setPosition(this.x + Math.min(0, dx), this.y + Math.min(0, dy))\n        this.boundingBoxFigure2.setDimension(abs(dx), abs(dy))\n        this.boundingBoxFigure2.setPosition(this.x + Math.min(0, dx), this.y + Math.min(0, dy))\n      }\n    }\n    catch (exc) {\n      console.log(exc)\n    }\n  },\n\n  /**\n   * \n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseUp: function (canvas, x, y, shiftKey, ctrlKey) {\n    try {\n      // delete the current selection if you have clicked in the empty\n      // canvas.\n      if (this.mouseDownElement === null) {\n        canvas.getSelection().getAll().each((i, figure) => {\n          this.unselect(canvas, figure)\n        })\n      }\n      else if (this.mouseDownElement instanceof draw2d.ResizeHandle || (this.mouseDownElement instanceof draw2d.shape.basic.LineResizeHandle)) {\n        // Do nothing\n        // A click on a resize handle didn't change the selection of the canvas\n        //\n      }\n      // delete the current selection if you click on another figure than the current\n      // selection and you didn't drag the complete selection.\n      else if (this.mouseDownElement !== null && this.mouseMovedDuringMouseDown === false) {\n        let sel = canvas.getSelection().getAll()\n        if (!sel.contains(this.mouseDownElement)) {\n          canvas.getSelection().getAll().each((i, figure) => {\n            this.unselect(canvas, figure)\n          })\n        }\n      }\n      this._super(canvas, x, y, shiftKey, ctrlKey)\n\n      if (this.boundingBoxFigure1 !== null) {\n        // retrieve all figures which are inside the bounding box and select all of them\n        //\n        let selectionRect = this.boundingBoxFigure1.getBoundingBox()\n        canvas.getFigures().each((i, figure) => {\n          if (figure.isSelectable() === true && this.decision(figure.getBoundingBox(), selectionRect)) {\n            let fakeDragX = 1\n            let fakeDragY = 1\n\n            let handleRect = figure.getHandleBBox()\n            if (handleRect !== null) {\n              handleRect.translate(figure.getAbsolutePosition().scale(-1))\n              fakeDragX = handleRect.x + 1\n              fakeDragY = handleRect.y + 1\n            }\n            let canDragStart = figure.onDragStart(fakeDragX, fakeDragY, shiftKey, ctrlKey)\n            if (canDragStart === true) {\n              this.select(canvas, figure)\n            }\n          }\n        })\n\n        this.boundingBoxFigure1.setCanvas(null)\n        this.boundingBoxFigure1 = null\n        this.boundingBoxFigure2.setCanvas(null)\n        this.boundingBoxFigure2 = null\n      }\n    }\n    catch (exc) {\n      console.log(exc)\n      debugger\n    }\n  }\n\n})\n","import draw2d from '../../packages'\nimport Color from '../../util/Color'\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.EditPolicy\n */\ndraw2d.policy.canvas.CanvasPolicy = draw2d.policy.EditPolicy.extend(\n  /** @lends draw2d.policy.canvas.CanvasPolicy.prototype */\n  {\n\n    NAME: \"draw2d.policy.canvas.CanvasPolicy\",\n\n    /**\n     * Creates a new Router object\n     */\n    init: function (attr, setter, getter) {\n      this.canvas = null\n      this._super(attr, setter, getter)\n    },\n\n    /**\n     *\n     * Called if the policy is installed into the canvas.\n     *\n     * @param {draw2d.Canvas} canvas\n     */\n    onInstall: function (canvas) {\n      this.canvas = canvas\n    },\n\n    /**\n     *\n     * Called if the policy is deinstalled from the canvas\n     *\n     * @param {draw2d.Canvas} canvas\n     */\n    onUninstall: function (canvas) {\n      this.canvas = null\n    },\n\n    /**\n     *\n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} x the x-coordinate of the mouse event\n     * @param {Number} y the y-coordinate of the mouse event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     * @template\n     */\n    onMouseMove: function (canvas, x, y, shiftKey, ctrlKey) {\n    },\n\n    /**\n     *\n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} x the x-coordinate of the mouse down event\n     * @param {Number} y the y-coordinate of the mouse down event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onMouseDown: function (canvas, x, y, shiftKey, ctrlKey) {\n    },\n\n    /**\n     *\n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} dx The x diff between start of dragging and this event\n     * @param {Number} dy The y diff between start of dragging and this event\n     * @param {Number} dx2 The x diff since the last call of this dragging operation\n     * @param {Number} dy2 The y diff since the last call of this dragging operation\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onMouseDrag: function (canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    },\n\n    /**\n     *\n     *\n     * @param {draw2d.Canvas} canvas the shape below the mouse or null\n     * @param {Number} x the x-coordinate of the mouse down event\n     * @param {Number} y the y-coordinate of the mouse down event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onMouseUp: function (canvas, x, y, shiftKey, ctrlKey) {\n    },\n\n\n    /**\n     *\n     * Called if the user press the right mouse in the canvas.\n     *\n     * @param {draw2d.Figure|draw2d.shape.basic.Line} figure the figure below the mouse\n     * @param {Number} x the x-coordinate of the mouse down event\n     * @param {Number} y the y-coordinate of the mouse down event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     * @since 4.4.0\n     */\n    onRightMouseDown: function (figure, x, y, shiftKey, ctrlKey) {\n    },\n\n\n    /**\n     *\n     * Called by the canvas if the user click on a figure.\n     *\n     * @param {draw2d.Figure} figure the figure under the click event. Can be null\n     * @param {Number} mouseX the x coordinate of the mouse during the click event\n     * @param {Number} mouseY the y coordinate of the mouse during the click event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @since 3.0.0\n     *\n     * @template\n     */\n    onClick: function (figure, mouseX, mouseY, shiftKey, ctrlKey) {\n    },\n\n    /**\n     *\n     * Called by the canvas if the user double click on a figure.\n     *\n     * @param {draw2d.Figure} figure the figure under the double click event. Can be null\n     * @param {Number} mouseX the x coordinate of the mouse during the click event\n     * @param {Number} mouseY the y coordinate of the mouse during the click event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @since 4.1.0\n     *\n     * @template\n     */\n    onDoubleClick: function (figure, mouseX, mouseY, shiftKey, ctrlKey) {\n    },\n\n    /**\n     *\n     * called if the user uses the mouse wheel.\n     *\n     *\n     * @param {Number} wheelDelta\n     * @param {Number} x the x coordinate of the event\n     * @param {Number} y the y coordinate of the event\n     * @param shiftKey\n     * @param ctrlKey\n     * @since 5.8.0\n     * @template\n     *\n     * @returns {Boolean} return <b>false</b> to preven tthe default event operation (e.g. scrolling)\n     */\n    onMouseWheel: function (wheelDelta, x, y, shiftKey, ctrlKey) {\n      // return \"false\" to prevent the default event operation\n      return true\n    },\n\n    /**\n     *\n     * Helper method to make an monochrome GIF image WxH pixels big, first create a properly sized array: let pixels = new Array(W*H);.\n     * Then, for each pixel X,Y that should be opaque, store a 1 at the proper location: pixels[X+Y*W] = 1;.\n     * Finally, create the image: let my_gif = createGif(W, H, pixels, color);\n     * \"0\" pixels are transparent.\n     * The <b>color</b> defines the foreground color.\n     *\n     * Now, you can specify this image as the SRC attribute of an IMG tag: document.write(\"<IMG SRC=\\\"\" + my_gif + \"\\\">\");\n     * or for the canvas as background-image css attribute.\n     *\n     *\n     * @param w\n     * @param h\n     * @param d\n     * @param color\n     * @returns {String}\n     *\n     * @private\n     */\n    createMonochromGif: function (w, h, d, color) {\n      color = new Color(color)\n      let r = String.fromCharCode(w % 256) + String.fromCharCode(w / 256) + String.fromCharCode(h % 256) + String.fromCharCode(h / 256)\n\n      let gif = 'GIF89a' + r + '\\xf0\\0\\0\\xff\\xff\\xff' + String.fromCharCode(color.red) + String.fromCharCode(color.green) + String.fromCharCode(color.blue) + '\\x21\\xf9\\u{4}\\u{1}\\0\\0\\0,\\0\\0\\0\\0' + r + '\\0\\u{2}'\n\n      // help method to generate uncompressed in memory GIF data structure without the usage of a canvas or any other\n      // heavy weight stuff.\n      let b = {\n        bit: 1,\n        byte_: 0,\n        data: '',\n\n        writeBit: function (b) {\n          if (b) this.byte_ |= this.bit\n          this.bit <<= 1\n          if (this.bit === 256) {\n            this.bit = 1\n            this.data += String.fromCharCode(this.byte_)\n            this.byte_ = 0\n          }\n        },\n\n        get: function () {\n          let result = \"\"\n          let data = this.data\n          if (this.bit !== 1) {\n            data += String.fromCharCode(this.byte_)\n          }\n          for (let i = 0; i < data.length + 1; i += 255) {\n            let chunklen = data.length - i\n            if (chunklen < 0) chunklen = 0\n            if (chunklen > 255) chunklen = 255\n            result += String.fromCharCode(chunklen) + data.substring(i, i + 255)\n          }\n          return result + \"\\0\"\n        }\n      }\n\n      for (let y = 0; y < h; y++) {\n        for (let x = 0; x < w; x++) {\n          b.writeBit(d[x + w * y])\n          b.writeBit(0)\n          b.writeBit(0)\n          b.writeBit(0)\n          b.writeBit(0)\n          b.writeBit(1)\n        }\n      }\n      gif += b.get() + ';'\n\n      return 'data:image/gif;base64,' + draw2d.util.Base64.encode(gif)\n    }\n\n  })\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * This decorations hides draw2d.Ports which are to far from the current cursor position.\n * This makes the canvas more clean if you have a lot of nodes on it.<br>\n * You didn't see a bunch of ports.\n *\n *\n * @example\n *\n *      // install the policy to the canvas\n *\n *      // add some demo figure to the canvas\n *      canvas.add(new draw2d.shape.node.Start({x: 10,  y: 30}));\n *      canvas.add(new draw2d.shape.node.End({x: 90,  y: 90}));\n *      canvas.add(new draw2d.shape.node.Between({ x: 310, y: 30}));\n *\n *      canvas.add(new draw2d.shape.basic.Label({text:\"move the mouse and you see that ports are hidden if the mouse far from it\"}),5,5);\n *\n *      canvas.installEditPolicy(new draw2d.policy.canvas.CoronaDecorationPolicy());\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.DecorationPolicy\n */\ndraw2d.policy.canvas.CoronaDecorationPolicy = draw2d.policy.canvas.DecorationPolicy.extend(\n  /** @lends draw2d.policy.canvas.CoronaDecorationPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.CoronaDecorationPolicy\",\n\n  /**\n   *\n   */\n  init: function (attr, setter, getter) {\n\n    this.startDragX = 0\n    this.startDragY = 0\n    this.diameterToBeFullVisible = 0\n    this.diameterToBeVisible = 0\n    this.sumDiameter = 0\n\n    this._super(\n      extend({diameterToBeVisible: 200, diameterToBeFullVisible: 20}, attr),\n\n      extend({\n        diameterToBeVisible: this.setDiameterToBeVisible,\n        diameterToBeFullVisible: this.setDiameterToBeFullVisible\n      }, setter),\n\n      extend({\n        diameterToBeVisible: this.getDiameterToBeVisible,\n        diameterToBeFullVisible: this.getDiameterToBeFullVisible\n      }, getter)\n    )\n  },\n\n  setDiameterToBeVisible: function (diameter) {\n    this.diameterToBeVisible = diameter\n    this.sumDiameter = this.diameterToBeFullVisible + this.diameterToBeVisible\n  },\n\n  getDiameterToBeVisible: function () {\n    return this.diameterToBeVisible\n  },\n\n  setDiameterToBeFullVisible: function (diameter) {\n    this.diameterToBeFullVisible = diameter\n    this.sumDiameter = this.diameterToBeFullVisible + this.diameterToBeVisible\n  },\n\n  getDiameterToBeFullVisible: function () {\n    return this.diameterToBeFullVisible\n  },\n\n  /**\n   * @inheritdoc\n   */\n  onInstall: function (canvas) {\n    this._super(canvas)\n    canvas.getFigures().each((i, figure) => {\n      figure.getPorts().each((i, p) => p.setAlpha(0.0))\n    })\n  },\n\n  /**\n   * @inheritdoc\n   */\n  onUninstall: function (canvas) {\n    this._super(canvas)\n\n    canvas.getFigures().each(function (i, figure) {\n      figure.getPorts().each(function (i, p) {\n        if (p.__origAlpha) {\n          p.setAlpha(p.__origAlpha)\n          delete p.__origAlpha\n        }\n      })\n    })\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  onMouseDown: function (canvas, x, y, shiftKey, ctrlKey) {\n    this.startDragX = x\n    this.startDragY = y\n  },\n\n  /**\n   * @inheritdoc\n   */\n  onMouseMove: function (canvas, x, y, shiftKey, ctrlKey) {\n    this.updatePorts(canvas, x, y)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  onMouseDrag: function (canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    this.updatePorts(canvas, this.startDragX + dx, this.startDragY + dy)\n  },\n\n\n  /**\n   * \n   * Update all ports with the new calculated opacity in relation to the distance to the current\n   * mouse position\n   *\n   * @param canvas\n   * @param x\n   * @param y\n   * @private\n   */\n  updatePorts: function (canvas, x, y) {\n    canvas.getFigures().each((i, figure) => {\n      if (figure instanceof draw2d.shape.node.Node) {\n        if (figure.isVisible() === true && figure.hitTest(x, y, this.sumDiameter) === true) {\n          figure.getPorts().each((i, p) => {\n            if (p.isVisible() === false) {\n              p.__origAlpha = figure.getAlpha()\n            }\n            let dist = figure.getBoundingBox().getDistance(new draw2d.geo.Point(x, y))\n            let alpha = 1 - ((100 / (this.diameterToBeVisible - this.diameterToBeFullVisible)) * dist) / 100.0\n            p.setAlpha(alpha)\n          })\n        }\n        else {\n          figure.getPorts().each((i, p) => {\n              p.setAlpha(0.0)\n          })\n        }\n      }\n    })\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * The base class for any canvas decoration like grid, chessboard, graph paper or\n * other.\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.CanvasPolicy\n */\ndraw2d.policy.canvas.DecorationPolicy = draw2d.policy.canvas.CanvasPolicy.extend(\n  /** @lends draw2d.policy.canvas.DecorationPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.DecorationPolicy\",\n\n  /**\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  }\n\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Standard keyboard policy. This is the standard installed keyboard policy.\n * <br>\n * <br>\n * Keyboard commands\n * <ul>\n *    <li>DEL    - delete selection</li>\n * </ul>\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.KeyboardPolicy\n */\ndraw2d.policy.canvas.DefaultKeyboardPolicy = draw2d.policy.canvas.KeyboardPolicy.extend(\n  /** @lends draw2d.policy.canvas.DefaultKeyboardPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.DefaultKeyboardPolicy\",\n\n  /**\n   */\n  init: function () {\n    this._super()\n  },\n\n  /**\n   * \n   * Callback if the user press a key.<br>\n   * This implementation checks only if the <b>DEL</b> has been pressed and creates an\n   * CommandDelete if this happens.\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {Number} keyCode the pressed key\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @private\n   **/\n  onKeyDown: function (canvas, keyCode, shiftKey, ctrlKey) {\n    //\n    if (keyCode === 46 && canvas.getPrimarySelection() !== null) {\n      // create a single undo/redo transaction if the user delete more than one element. \n      // This happens with command stack transactions.\n      //\n      canvas.getCommandStack().startTransaction(draw2d.Configuration.i18n.command.deleteShape)\n      let selection = canvas.getSelection()\n      selection.each(function (index, figure) {\n        // don't delete a connection if the source or target figure is part of the selection.\n        // In this case the connection is deleted by the DeleteCommand itself and it is not allowed to\n        // delete a figure twice.\n        //\n        if (figure instanceof draw2d.Connection) {\n          if (selection.contains(figure.getSource(), true)) {\n            return\n          }\n          if (selection.contains(figure.getTarget(), true)) {\n            return\n          }\n        }\n        let cmd = figure.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.DELETE))\n        if (cmd !== null) {\n          canvas.getCommandStack().execute(cmd)\n        }\n      })\n      // execute all single commands at once.\n      canvas.getCommandStack().commitTransaction()\n    }\n    else {\n      this._super(canvas, keyCode, shiftKey, ctrlKey)\n    }\n\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Drop interceptors are basically event handlers from which you can return a value\n * that tells draw2d to abort what it is that it was doing.<br>\n * <br>\n * Interceptors can be registered via the registerEditPolicy method on the draw2d canvas just like any other\n * edit policies.<br>\n * <br>\n * The <b>delegateTarget</b> method is responsible for all drop event especially to all connection and port handling.\n *\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.CanvasPolicy\n * @since 5.0.0\n */\ndraw2d.policy.canvas.DropInterceptorPolicy = draw2d.policy.canvas.CanvasPolicy.extend(\n  /** @lends draw2d.policy.canvas.DropInterceptorPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.canvas.DropInterceptorPolicy\",\n\n  /**\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   * Called if the user want connect a port with any kind draw2d.Figure.<br>\n   * Return a non <b>null</b> value if the interceptor accept the connect event.<br>\n   * <br>\n   * It is possible to delegate the drop event to another figure if the policy\n   * returns another figure. This is useful if a figure want to accept a port\n   * drop event and delegates this drop event to another port.<br>\n   *\n   *\n   * @param {draw2d.Figure} connectInquirer the figure who wants connect\n   * @param {draw2d.Figure} connectIntent the potential connect target\n   *\n   * @returns {draw2d.Figure} the calculated connect intent or <b>null</b> if the interceptor uses the veto right\n   */\n  delegateTarget: function (connectInquirer, connectIntent) {\n    // a composite accept any kind of figures exceptional ports\n    //\n    if (!(connectInquirer instanceof draw2d.Port) && connectIntent instanceof draw2d.shape.composite.StrongComposite) {\n      return connectIntent\n    }\n\n    // Ports accepts only Ports from the same semanticGroup as DropTarget\n    //\n    if ((connectIntent instanceof draw2d.Port) && (connectInquirer instanceof draw2d.Port)) {\n      if(connectIntent.getSemanticGroup() !== connectInquirer.getSemanticGroup()) {\n        return null\n      }\n    }\n\n    // Ports accepts only Ports as DropTarget\n    //\n    if (!(connectIntent instanceof draw2d.Port) || !(connectInquirer instanceof draw2d.Port)) {\n      return null\n    }\n\n    // consider the max possible connections for this port\n    //\n    if (connectIntent.getConnections().getSize() >= connectIntent.getMaxFanOut()) {\n      return null\n    }\n\n    // It is not allowed to connect two output ports\n    if (connectInquirer instanceof draw2d.OutputPort && connectIntent instanceof draw2d.OutputPort) {\n      return null\n    }\n\n    // It is not allowed to connect two input ports\n    if (connectInquirer instanceof draw2d.InputPort && connectIntent instanceof draw2d.InputPort) {\n      return null\n    }\n\n    // It is not possible to create a loop back connection at the moment.\n    // Reason: no connection router implemented for this case\n    if ((connectInquirer instanceof draw2d.Port) && (connectIntent instanceof draw2d.Port)) {\n      if (connectInquirer.getParent() === connectIntent.getParent()) {\n        return null\n      }\n    }\n\n    // redirect the dragEnter handling to the hybrid port\n    //\n    if ((connectInquirer instanceof draw2d.Port) && (connectIntent instanceof draw2d.shape.node.Hub)) {\n      return connectIntent.getHybridPort(0)\n    }\n\n    // return the connectTarget determined by the framework or delegate it to another\n    // figure.\n    return connectIntent\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Extended keyboard policy to <b>delete</b> and <b>group</b> figures in the canvas.\n * <br>\n * Keyboard commands\n * <ul>\n *    <li>DEL    - delete selection</li>\n *    <li>Ctrl+G - group/ungroup selection</li>\n *    <li>Ctrl+B - send current selection in the background (toBack)</li>\n *    <li>Ctrl+F - send current selection in the foreground (toFront)</li>\n * </ul>\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.KeyboardPolicy\n */\ndraw2d.policy.canvas.ExtendedKeyboardPolicy = draw2d.policy.canvas.KeyboardPolicy.extend(\n  /** @lends draw2d.policy.canvas.ExtendedKeyboardPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.ExtendedKeyboardPolicy\",\n\n  /**\n   */\n  init: function () {\n    this._super()\n  },\n\n  /**\n   * \n   * Callback if the user press a key\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {Number} keyCode the pressed key\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @private\n   **/\n  onKeyDown: function (canvas, keyCode, shiftKey, ctrlKey) {\n    if (canvas.getPrimarySelection() !== null && ctrlKey === true) {\n      switch (keyCode) {\n\n        case 71: // G\n          if (canvas.getPrimarySelection() instanceof draw2d.shape.composite.Group && canvas.getSelection().getSize() === 1) {\n            canvas.getCommandStack().execute(new draw2d.command.CommandUngroup(canvas, canvas.getPrimarySelection()))\n          }\n          else {\n            canvas.getCommandStack().execute(new draw2d.command.CommandGroup(canvas, canvas.getSelection()))\n          }\n          break\n        case 66: // B\n          canvas.getPrimarySelection().toBack()\n          break\n        case 70: // F\n          canvas.getPrimarySelection().toFront()\n      }\n    }\n    else {\n      this._super(canvas, keyCode, shiftKey, ctrlKey)\n    }\n  }\n\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Install this edit policy in a canvas if you want fadeout all decorations like ports, resize handles\n * if the user didn't move the mouse. This is good for a clean representation of your diagram.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.DecorationPolicy\n */\ndraw2d.policy.canvas.FadeoutDecorationPolicy = draw2d.policy.canvas.DecorationPolicy.extend(\n  /** @lends draw2d.policy.canvas.FadeoutDecorationPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.canvas.FadeoutDecorationPolicy\",\n\n  DEFAULT_FADEOUT_DURATION: 60,\n  DEFAULT_ALPHA_DECREMENT: 0.05,\n\n  /**\n   * Creates a new fade out policy. Don't forget to install them into the canvas.\n   *\n   */\n  init: function () {\n    this._super()\n    this.alpha = 1.0\n    this.alphaDec = this.DEFAULT_ALPHA_DECREMENT\n    this.hidePortsCounter = this.DEFAULT_FADEOUT_DURATION\n    this.portDragging = false\n  },\n\n  /**\n   * @inheritDoc\n   **/\n  onInstall: function (canvas) {\n    this._super(canvas)\n    this.timerId = window.setInterval(this.onTimer.bind(this), 50)\n\n    // initial hide all decorations after install of this policy\n    //\n    this.hidePortsCounter = 1\n    this.alpha = 0.1\n  },\n\n  /**\n   * @inheritDoc\n   **/\n  onUninstall: function (canvas) {\n    window.clearInterval(this.timerId)\n    this.canvas.getAllPorts().each(function (i, port) {\n      port.setAlpha(1.0)\n    })\n\n    this._super(canvas)\n  },\n\n  /**\n   *\n   *\n   * Timerfucntion to show/hide the related ports\n   * @private\n   **/\n  onTimer: function () {\n    this.hidePortsCounter--\n    var _this = this\n    if (this.hidePortsCounter <= 0 && this.alpha > 0) {\n      this.alpha = Math.max(0, this.alpha - this.alphaDec)\n\n      this.canvas.getAllPorts().each(function (i, port) {\n        port.setAlpha(_this.alpha)\n      })\n\n      this.canvas.getSelection().getAll().each(function (i, figure) {\n        figure.selectionHandles.each(function (i, handle) {\n          handle.setAlpha(_this.alpha)\n        })\n      })\n    }\n    else if (this.hidePortsCounter > 0 && this.alpha !== 1.0) {\n      this.alpha = 1// Math.min(1,this.alpha+0.1);\n      this.alphaDec = this.DEFAULT_ALPHA_DECREMENT\n      this.duringHide = false\n      this.canvas.getAllPorts().each(function (i, port) {\n        port.setAlpha(_this.alpha)\n      })\n      this.canvas.getSelection().getAll().each(function (i, figure) {\n        figure.selectionHandles.each(function (i, handle) {\n          handle.setAlpha(_this.alpha)\n        })\n      })\n    }\n  },\n\n\n  /**\n   *\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseDown: function (canvas, x, y, shiftKey, ctrlKey) {\n    this.hidePortsCounter = this.DEFAULT_FADEOUT_DURATION\n    this.portDragging = (canvas.getBestFigure(x, y) instanceof draw2d.Port)\n  },\n\n  /**\n   *\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseMove: function (canvas, x, y, shiftKey, ctrlKey) {\n    this.hidePortsCounter = this.DEFAULT_FADEOUT_DURATION\n    this.portDragging = false\n  },\n\n  /**\n   *\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} dx The x diff between start of dragging and this event\n   * @param {Number} dy The y diff between start of dragging and this event\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseDrag: function (canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    if (this.portDragging === false) {\n      this.hidePortsCounter = 0\n      this.alphaDec = 0.1\n      this.onTimer()\n    }\n  },\n\n  /**\n   *\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseUp: function (figure, x, y, shiftKey, ctrlKey) {\n    this.hidePortsCounter = this.DEFAULT_FADEOUT_DURATION\n    this.portDragging = false\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A drag&Drop feedback handler for the canvas. The policy didn't move the\n * shapes in real time rather it shows a ghost rectangle as feedback. <br>\n * <br>\n * The shapes are updated after the drag&drop operation.\n *\n *\n *\n * @example\n *\n *      // install the policy to the canvas\n *      canvas.installEditPolicy(new draw2d.policy.canvas.GhostMoveSelectionPolicy());\n *\n *      // add some demo figure to the canvas\n *      canvas.add(new draw2d.shape.basic.Circle({diameter: 50, x: 10,  y: 30}));\n *      canvas.add(new draw2d.shape.basic.Circle({diameter: 30, x: 90,  y: 50}));\n *      canvas.add(new draw2d.shape.basic.Circle({diameter: 60, x: 110, y: 30}));\n *\n *      canvas.add(new draw2d.shape.basic.Label({text:\"move the circle to see the drag&drop feedback\"}),5,5);\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.SingleSelectionPolicy\n */\ndraw2d.policy.canvas.GhostMoveSelectionPolicy = draw2d.policy.canvas.SingleSelectionPolicy.extend(\n  /** @lends draw2d.policy.canvas.GhostMoveSelectionPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.GhostMoveSelectionPolicy\",\n\n  /**\n   */\n  init: function () {\n    this.clone = null\n    this.ghostRectangle1 = null\n    this.ghostRectangle2 = null\n\n    this._super()\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  onMouseDrag: function (canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    this.mouseMovedDuringMouseDown = true\n    if (this.mouseDraggingElement !== null) {\n\n      // if the figure not part of the selection it must be a ResizeHandle...\n      let sel = canvas.getSelection().getAll()\n      if (!sel.contains(this.mouseDraggingElement)) {\n        this.mouseDraggingElement.onDrag(dx, dy, dx2, dy2, shiftKey, ctrlKey)\n      }\n      // it is a normal draw2d.Figure\n      else {\n        // create the ghost handles for the figure to move and update the position\n        //\n        if (this.ghostRectangle1 === null) {\n          this.ghostRectangle1 = new draw2d.shape.basic.Rectangle(/*{bgColor:\"#303030\", alpha:0.1}*/) // new API with version 5.0.0\n          // old API\n          this.ghostRectangle1.setBackgroundColor(\"#303030\")\n          this.ghostRectangle1.setAlpha(0.1)\n\n          this.ghostRectangle2 = new draw2d.shape.basic.Rectangle(/*{dash:\"- \", stroke:1, color:\"#5497DC\", bgColor:null}*/)\n          this.ghostRectangle2.setDashArray(\"- \")\n          this.ghostRectangle2.setStroke(1)\n          this.ghostRectangle2.setColor(\"#5497DC\")\n          this.ghostRectangle2.setBackgroundColor(null)\n\n          this.ghostRectangle1.setBoundingBox(this.mouseDraggingElement.getBoundingBox())\n          this.ghostRectangle2.setBoundingBox(this.mouseDraggingElement.getBoundingBox())\n\n          this.ghostRectangle1.setCanvas(canvas)\n          this.ghostRectangle1.toFront()\n\n          this.ghostRectangle2.setCanvas(canvas)\n          this.ghostRectangle2.toFront()\n\n          this.clone = this.mouseDraggingElement.clone()\n          if (this.clone instanceof draw2d.shape.node.Node) {\n            this.clone.resetPorts()\n          }\n          this.clone.setCanvas(canvas)\n          this.clone.getShapeElement()\n          this.clone.setAlpha(0.4)\n          this.clone.repaint()\n        }\n        else {\n          this.ghostRectangle1.translate(dx2, dy2)\n          this.ghostRectangle2.translate(dx2, dy2)\n          this.clone.translate(dx2, dy2)\n        }\n\n        sel.each(function (i, figure) {\n          // store the new location in a tmp var.\n          figure._newPos = new draw2d.geo.Point(figure.ox + dx, figure.oy + dy)\n\n          // don't move the figure. This will be done in the MouseUp event\n          //figure.onDrag(dx, dy, dx2, dy2);\n        })\n      }\n\n      let p = canvas.fromDocumentToCanvasCoordinate(canvas.mouseDownX + (dx / canvas.zoomFactor), canvas.mouseDownY + (dy / canvas.zoomFactor))\n      let target = canvas.getBestFigure(p.x, p.y, this.mouseDraggingElement)\n\n      if (target !== canvas.currentDropTarget) {\n        if (canvas.currentDropTarget !== null) {\n          canvas.currentDropTarget.onDragLeave(this.mouseDraggingElement)\n          canvas.currentDropTarget.fireEvent(\"dragLeave\", {draggingElement: this.draggingElement})\n          canvas.currentDropTarget = null\n        }\n        if (target !== null) {\n          canvas.currentDropTarget = target.delegateTarget(this.mouseDraggingElement)\n          // inform all listener that the element has accept a dropEnter event\n          if (canvas.currentDropTarget !== null) {\n            canvas.currentDropTarget.onDragEnter(this.mouseDraggingElement) // legacy\n            canvas.currentDropTarget.fireEvent(\"dragEnter\", {draggingElement: this.draggingElement})\n          }\n        }\n      }\n    }\n    // Connection didn't support panning at the moment. There is no special reason for that. Just an interaction\n    // decision.\n    //\n    else if (this.mouseDownElement !== null && !(this.mouseDownElement instanceof draw2d.Connection)) {\n      if (this.mouseDownElement.panningDelegate !== null) {\n        this.mouseDownElement.panningDelegate.fireEvent(\"panning\", {\n          dx: dx,\n          dy: dy,\n          dx2: dx2,\n          dy2: dy2,\n          shiftKey: shiftKey,\n          ctrlKey: ctrlKey\n        })\n        this.mouseDownElement.panningDelegate.onPanning(dx, dy, dx2, dy2, shiftKey, ctrlKey)\n      }\n      else {\n        this.mouseDownElement.fireEvent(\"panning\", {\n          dx: dx,\n          dy: dy,\n          dx2: dx2,\n          dy2: dy2,\n          shiftKey: shiftKey,\n          ctrlKey: ctrlKey\n        })\n        this.mouseDownElement.onPanning(dx, dy, dx2, dy2, shiftKey, ctrlKey)\n      }\n    }\n  },\n\n  /**\n   * @inheritdoc\n   */\n  onMouseUp: function (canvas, x, y, shiftKey, ctrlKey) {\n\n    if (this.ghostRectangle1 !== null) {\n      this.ghostRectangle1.setCanvas(null)\n      this.ghostRectangle1 = null\n      this.ghostRectangle2.setCanvas(null)\n      this.ghostRectangle2 = null\n      this.clone.setCanvas(null)\n      this.clone = null\n    }\n\n    if (this.mouseDraggingElement !== null) {\n      let redrawConnection = new draw2d.util.ArrayList()\n      if (this.mouseDraggingElement instanceof draw2d.shape.node.Node) {\n        canvas.lineIntersections.each(function (i, inter) {\n          if (!redrawConnection.contains(inter.line)) redrawConnection.add(inter.line)\n          if (!redrawConnection.contains(inter.other)) redrawConnection.add(inter.other)\n        })\n      }\n\n\n      // start CommandStack transaction\n      // Trigger an update of the connections if we have move a draw2d.shape.node.Node figure.\n      // (only \"nodes\" can have ports and connections)\n      //\n      canvas.getCommandStack().startTransaction()\n\n\n      let sel = canvas.getSelection().getAll()\n      // We move a resize handle...\n      //\n      if (!sel.contains(this.mouseDraggingElement)) {\n        this.mouseDraggingElement.onDragEnd(x, y, shiftKey, ctrlKey)\n      }\n      // ... or a real figure.\n      //\n      else {\n        canvas.getSelection().getAll().each(function (i, figure) {\n          // set position and cleanup tmp variable\n          if (figure._newPos) {\n            figure.setPosition(figure._newPos)\n            delete figure._newPos\n          }\n          // done\n          figure.onDragEnd(x, y, shiftKey, ctrlKey)\n        })\n      }\n\n      // May we drop the figure onto another shape..handle this here\n      //\n      if (canvas.currentDropTarget !== null && !this.mouseDraggingElement.isResizeHandle) {\n        this.mouseDraggingElement.onDrop(canvas.currentDropTarget, x, y, shiftKey, ctrlKey)\n        canvas.currentDropTarget.onDragLeave(this.mouseDraggingElement)\n        canvas.currentDropTarget.onCatch(this.mouseDraggingElement, x, y, shiftKey, ctrlKey)\n        canvas.currentDropTarget = null\n      }\n\n      // end command stack trans\n      canvas.getCommandStack().commitTransaction()\n\n      if (this.mouseDraggingElement instanceof draw2d.shape.node.Node) {\n        canvas.lineIntersections.each((i, inter) => {\n          if (!redrawConnection.contains(inter.line)) redrawConnection.add(inter.line)\n          if (!redrawConnection.contains(inter.other)) redrawConnection.add(inter.other)\n        })\n        redrawConnection.each((i, line) => {\n          line.svgPathString = null\n          line.repaint()\n        })\n      }\n\n      this.mouseDraggingElement = null\n    }\n\n    // Reset the current selection if the user click in the blank canvas.\n    // Don't reset the selection if the user is panning the canvas\n    //\n    if (this.mouseDownElement === null && this.mouseMovedDuringMouseDown === false) {\n      this.select(canvas, null)\n    }\n\n    this.mouseDownElement = null\n    this.mouseMovedDuringMouseDown = false\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Default interface for keyboard interaction with the canvas.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.CanvasPolicy\n */\ndraw2d.policy.canvas.KeyboardPolicy = draw2d.policy.canvas.CanvasPolicy.extend(\n  /** @lends draw2d.policy.canvas.KeyboardPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.KeyboardPolicy\",\n\n  /**\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  /**\n   * \n   * Callback if the user release a key\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {Number} keyCode the pressed key\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @private\n   **/\n  onKeyUp: function (canvas, keyCode, shiftKey, ctrlKey) {\n    // do nothing per default\n  },\n\n  /**\n   * \n   * Callback if the user press a key down\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {Number} keyCode the pressed key\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @private\n   **/\n  onKeyDown: function (canvas, keyCode, shiftKey, ctrlKey) {\n    // do nothing per default\n  }\n\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.SingleSelectionPolicy\n */\ndraw2d.policy.canvas.PanningSelectionPolicy = draw2d.policy.canvas.SingleSelectionPolicy.extend(\n  /** @lends draw2d.policy.canvas.PanningSelectionPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.PanningSelectionPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function () {\n    this._super()\n  },\n\n\n  /**\n   * \n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} dx The x diff between start of dragging and this event\n   * @param {Number} dy The y diff between start of dragging and this event\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   */\n  onMouseDrag: function (canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    this._super(canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey)\n\n    if (this.mouseDraggingElement === null && this.mouseDownElement === null) {\n\n      // check if we are dragging a port. This isn't reported by the selection handler anymore\n      //\n      let p = canvas.fromDocumentToCanvasCoordinate(canvas.mouseDownX + (dx / canvas.zoomFactor), canvas.mouseDownY + (dy / canvas.zoomFactor))\n      let figure = canvas.getBestFigure(p.x, p.y)\n\n      if (figure === null) {\n        let area = canvas.getScrollArea()\n        area.scrollTop(area.scrollTop() - dy2)\n        area.scrollLeft(area.scrollLeft() - dx2)\n      }\n    }\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.SelectionPolicy\n */\ndraw2d.policy.canvas.ReadOnlySelectionPolicy = draw2d.policy.canvas.SelectionPolicy.extend(\n  /** @lends draw2d.policy.canvas.ReadOnlySelectionPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.canvas.ReadOnlySelectionPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  /**\n   * \n   * Called by the host if the policy has been installed.\n   *\n   * @param {draw2d.Canvas/draw2d.Canvas} canvas\n   */\n  onInstall: function (canvas) {\n    this._super(canvas)\n    canvas.getAllPorts().each(function (i, port) {\n      port.setVisible(false)\n    })\n  },\n\n  /**\n   * \n   * Called by the host if the policy has been uninstalled.\n   *\n   * @param {draw2d.Canvas} canvas\n   */\n  onUninstall: function (canvas) {\n    canvas.getAllPorts().each(function (i, port) {\n      port.setVisible(true)\n    })\n\n    this._super(canvas)\n  },\n\n  /**\n   * \n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} dx The x diff between start of dragging and this event\n   * @param {Number} dy The y diff between start of dragging and this event\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   */\n  onMouseDrag: function (canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n    let area = canvas.getScrollArea()\n    area.scrollTop(area.scrollTop() - dy2)\n    area.scrollLeft(area.scrollLeft() - dx2)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.CanvasPolicy\n */\ndraw2d.policy.canvas.SelectionPolicy = draw2d.policy.canvas.CanvasPolicy.extend(\n  /** @lends draw2d.policy.canvas.SelectionPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.SelectionPolicy\",\n\n  /**\n   * Creates a new selection policy\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  /**\n   *\n   * Selects the given figure within the canvas. The policy must unselect already selected\n   * figures or show any decorations.\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {draw2d.Figure} figure\n   *\n   */\n  select: function (canvas, figure) {\n  },\n\n  /**\n   *\n   * Unselect the given figure in the canvas and remove all resize handles\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {draw2d.Figure} figure\n   */\n  unselect: function (canvas, figure) {\n    canvas.getSelection().remove(figure)\n\n    figure.unselect()\n\n    // @since 6.1.42\n    canvas.fireEvent(\"unselect\", {figure: figure})\n  }\n})\n\n\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Just to paint a grid in the background of a canvas.\n *\n *\n * @example\n *\n *    canvas.installEditPolicy(new draw2d.policy.canvas.ShowChessboardEditPolicy());\n *    let shape =  new draw2d.shape.basic.Text({text:\"This is a simple text in a canvas with chessboard background.\"});\n *\n *    canvas.add(shape,40,10);\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.DecorationPolicy\n */\ndraw2d.policy.canvas.ShowChessboardEditPolicy = draw2d.policy.canvas.DecorationPolicy.extend(\n  /** @lends draw2d.policy.canvas.ShowChessboardEditPolicy.prototype */\n  {\n    NAME: \"draw2d.policy.canvas.ShowChessboardEditPolicy\",\n\n    GRID_COLOR: \"#e0e0e0\",\n    GRID_WIDTH: 20,\n\n    /**\n     * Creates a new constraint policy for snap to grid\n     *\n     * @param {Number} grid the grid width of the canvas\n     */\n    init: function (grid) {\n      this._super()\n      if (grid) {\n        this.grid = grid\n      } else {\n        this.grid = this.GRID_WIDTH\n      }\n    },\n\n\n    onInstall: function (canvas) {\n      this._super(canvas)\n\n      this.oldBg = this.canvas.html.css(\"background\")\n      this.setGrid(1/canvas.getZoom())\n      this.onZoomCallback =(emitterFigure, zoomData) => {\n        this.setGrid(1/zoomData.value)\n      }\n      canvas.on(\"zoom\", this.onZoomCallback)\n    },\n\n    onUninstall: function (canvas) {\n      this._super(canvas)\n      $(canvas.paper.canvas).css({\"background\": this.oldBg})\n      canvas.off(this.onZoomCallback)\n    },\n\n    /**\n     * Activate the grid and set the CSS properties for the SVG canvas\n     * @private\n     */\n    setGrid: function(zoom){\n\n      let gridColor = this.GRID_COLOR\n\n      let background =\n        `linear-gradient(45deg, ${gridColor} 25%, transparent 25%, transparent 75%, ${gridColor} 75%, ${gridColor} 100%),\\n` +\n        `linear-gradient(45deg, ${gridColor} 25%, transparent 25%, transparent 75%, ${gridColor} 75%, ${gridColor} 100%)`\n      let backgroundSize = `${(this.grid*2*zoom)}px ${(this.grid*2*zoom)}px`\n      let backgroundPosition = `0 0, ${(this.grid*zoom)}px ${(this.grid*zoom)}px`\n\n      $(this.canvas.paper.canvas).css({\n        \"background\": background,\n        \"background-size\": backgroundSize,\n        \"background-position\": backgroundPosition\n      })\n    }\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A canvas decoration which paints a dimetric in the background.\n * <br>\n * <br>\n *\n * @example\n *\n *    canvas.installEditPolicy(new draw2d.policy.canvas.ShowDimetricGridEditPolicy());\n *    let shape =  new draw2d.shape.basic.Text({text:\"This is a simple text in a canvas with grid background.\"});\n *\n *    canvas.add(shape,40,10);\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.DecorationPolicy\n */\ndraw2d.policy.canvas.ShowDimetricGridEditPolicy = draw2d.policy.canvas.DecorationPolicy.extend(\n  /** @lends draw2d.policy.canvas.ShowDimetricGridEditPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.canvas.ShowDimetricGridEditPolicy\",\n\n  GRID_COLOR: \"#f0f0f0\",\n  GRID_WIDTH: 30,\n\n  /**\n   * Creates a new constraint policy for snap to grid\n   *\n   * @param {Number} [grid] the grid width of the canvas\n   */\n  init: function (grid) {\n    this.color = new draw2d.util.Color(this.GRID_COLOR)\n    this.zoom = 1\n    this.shapes = null\n\n    this._super()\n\n    if (typeof grid === \"number\") {\n      this.grid = grid\n    }\n    else {\n      this.grid = this.GRID_WIDTH\n    }\n  },\n\n  onInstall: function (canvas) {\n    this._super(canvas)\n    this.zoom = canvas.getZoom()\n    this.setGrid(this.grid)\n  },\n\n  onUninstall: function (canvas) {\n    this._super(canvas)\n    if (this.shapes !== null) {\n      this.shapes.remove()\n    }\n  },\n\n  /**\n   * \n   * Set the grid color\n   *\n   * @param {draw2d.util.Color|String} color a color object or the CSS string declaration for a color\n   * @since 5.0.3\n   */\n  setGridColor: function (color) {\n    this.color = new draw2d.util.Color(color)\n    this.setGrid(this.grid)\n  },\n\n  /**\n   * \n   * Set a new grid width/height\n   *\n   * @param {Number} grid\n   * @since 5.0.3\n   */\n  setGrid: function (grid) {\n    this.grid = grid\n\n    if (this.canvas != null) {\n      if (this.shapes !== null) {\n        this.shapes.remove()\n      }\n\n      let r = this.canvas.paper\n      let d = this.grid, i\n      let w = r.width\n      let h = r.height\n      let props = {stroke: this.color.rgba()}\n\n      let max = Math.sqrt(w * w + h * h)\n      let angle26 = Math.atan(.5)\n      let angle153 = Math.PI - angle26\n      let cos30 = Math.cos(angle26)\n      let sin30 = Math.sin(angle26)\n      let cos150 = Math.cos(angle153)\n      let sin150 = Math.sin(angle153)\n\n      r.setStart()\n      // horizontal\n      for (i = 0; i <= w; i += d * 2) {\n        r.path([[\"M\", i, 0], [\"L\", i + cos30 * max, sin30 * max]]).attr(props)\n        r.path([[\"M\", i, 0], [\"L\", i + cos150 * max, sin150 * max]]).attr(props)\n      }\n      for (i = d; i <= h; i += d) {\n        r.path([[\"M\", 0, i], [\"L\", cos30 * max, i + sin30 * max]]).attr(props)\n        r.path([[\"M\", w, i], [\"L\", w + cos150 * max, i + sin150 * max]]).attr(props)\n      }\n      // vertical\n      this.shapes = r.setFinish()\n\n      this.shapes.toBack()\n    }\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Paint a dotted pattern in the background of the canvas.\n *\n *\n * @example\n *\n *    canvas.installEditPolicy(new draw2d.policy.canvas.ShowDotEditPolicy());\n *    let shape =  new draw2d.shape.basic.Text({text:\"This is a simple text in a canvas with dotted background.\"});\n *\n *    canvas.add(shape,40,10);\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.DecorationPolicy\n * @since 4.0.1\n */\n\ndraw2d.policy.canvas.ShowDotEditPolicy = draw2d.policy.canvas.DecorationPolicy.extend(\n  /** @lends draw2d.policy.canvas.ShowDotEditPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.ShowDotEditPolicy\",\n\n  DOT_COLOR: \"#999999\",\n  DOT_RADIUS: 1,\n  DOT_DISTANCE: 20,\n\n  /**\n   * show a dot grid in the canvas for decoration.\n   *\n   * @param {Number} [dotDistance] the distance or grid width between the dots.\n   * @param {Number} [dotRadius] the radius of the dots.\n   * @param {draw2d.util.Color|String} [dotColor] the color for the dots.\n   */\n  init: function (dotDistance, dotRadius, dotColor) {\n    this._super()\n\n    this.dotDistance = dotDistance ? dotDistance : this.DOT_DISTANCE\n    this.dotRadius = dotRadius ? dotRadius : this.DOT_RADIUS\n    this.dotColor = new draw2d.util.Color(dotColor ? dotColor : this.DOT_COLOR)\n    this.onZoomCallback =(emitterFigure, zoomData) => {\n      this.setGrid(1/zoomData.value)\n    }\n  },\n\n  onInstall: function (canvas) {\n    this._super(canvas)\n\n    this.oldBg = this.canvas.html.css(\"background\")\n    this.setGrid(1/canvas.getZoom())\n    canvas.on(\"zoom\", this.onZoomCallback)\n  },\n\n  onUninstall: function (canvas) {\n    this._super(canvas)\n    $(canvas.paper.canvas).css({\"background\": this.oldBg})\n    canvas.off(this.onZoomCallback)\n  },\n\n  /**\n   * @private\n   * @param {Number} zoom \n   */\n  setGrid: function (zoom) {\n    let bgColor = \"#FFFFFF\"\n    let dotColor = this.dotColor.rgba()\n\n    let background = `linear-gradient(90deg, ${bgColor} ${(this.dotDistance - this.dotRadius)*zoom}px, transparent 1%) center, linear-gradient(${bgColor} ${(this.dotDistance - this.dotRadius)*zoom}px, transparent 1%) center, ${dotColor}`\n    let backgroundSize = `${this.dotDistance*zoom}px ${this.dotDistance*zoom}px`\n\n    $(this.canvas.paper.canvas).css({\n      \"background\": background,\n      \"background-size\": backgroundSize\n    })\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A cavas decoration which paints a grid in the background.\n * <br>\n * <br>\n *\n * @example\n *\n *    canvas.installEditPolicy(new draw2d.policy.canvas.ShowGridEditPolicy());\n *    let shape =  new draw2d.shape.basic.Text({text:\"This is a simple text in a canvas with grid background.\"});\n *\n *    canvas.add(shape,40,10);\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.DecorationPolicy\n */\ndraw2d.policy.canvas.ShowGridEditPolicy = draw2d.policy.canvas.DecorationPolicy.extend(\n  /** @lends draw2d.policy.canvas.ShowGridEditPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.canvas.ShowGridEditPolicy\",\n\n  GRID_COLOR: \"#f0f0f0\",\n  GRID_WIDTH: 20,\n  GRID_STOKE: 1,\n\n  /**\n   * Creates a new constraint policy for snap to grid\n   *\n   * @param {Number} [grid] the grid width of the canvas\n   */\n  init: function (gridDistance, gridStroke, gridColor) {\n    this.gridWidth = gridDistance || this.GRID_WIDTH\n    this.gridStroke = gridStroke || this.GRID_STOKE\n    this.gridColor = new draw2d.util.Color(gridColor || this.GRID_COLOR)\n    this._super()\n    this.onZoomCallback =(emitterFigure, zoomData) => {\n      this.setGrid(1/zoomData.value)\n    }\n  },\n\n  /**\n   *\n   * Set the grid color\n   *\n   * @param {draw2d.util.Color|String} color a color object or the CSS string declaration for a color\n   * @since 5.0.3\n   */\n  setGridColor: function (color) {\n    this.gridColor = new draw2d.util.Color(color)\n    this.setGrid(1/this.canvas.getZoom())\n  },\n\n  onInstall: function (canvas) {\n    this._super(canvas)\n\n    this.oldBg = this.canvas.html.css(\"background\")\n    this.setGrid(1/canvas.getZoom())\n    canvas.on(\"zoom\", this.onZoomCallback)\n  },\n\n  onUninstall: function (canvas) {\n    this._super(canvas)\n    \n    $(canvas.paper.canvas).css({\"background\": this.oldBg})\n    canvas.off(this.onZoomCallback)\n  },\n\n  /**\n   * @private\n   * @param {Number} zoom \n   */\n  setGrid: function (zoom) {\n    let bgColor = \"#FFFFFF\"\n    let color = this.gridColor.rgba()\n\n    let background = \n    ` linear-gradient(to right,  ${color} ${this.gridStroke}px, transparent ${this.gridStroke}px),\n      linear-gradient(to bottom, ${color} ${this.gridStroke}px, ${bgColor}  ${this.gridStroke}px)`\n    let backgroundSize = `${this.gridWidth*zoom}px ${this.gridWidth*zoom}px`\n\n    $(this.canvas.paper.canvas).css({\n      \"background\": background,\n      \"background-size\": backgroundSize\n    })\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.SelectionPolicy\n */\ndraw2d.policy.canvas.SingleSelectionPolicy = draw2d.policy.canvas.SelectionPolicy.extend(\n  /** @lends draw2d.policy.canvas.SingleSelectionPolicy.prototype */\n  {\n\n    NAME: \"draw2d.policy.canvas.SingleSelectionPolicy\",\n\n    /**\n     * Creates a new Router object\n     */\n    init: function () {\n      this._super()\n      this.mouseMovedDuringMouseDown = false\n      this.mouseDraggingElement = null\n      this.mouseDownElement = null\n    },\n\n    /**\n     * @inheritdoc\n     */\n    select: function (canvas, figure) {\n      if (canvas.getSelection().contains(figure)) {\n        return // nothing to to\n      }\n\n      let oldSelection = canvas.getSelection().getPrimary()\n      if (canvas.getSelection().getPrimary() !== null) {\n        this.unselect(canvas, canvas.getSelection().getPrimary())\n      }\n\n      if (figure !== null) {\n        figure.select(true) // primary selection\n      }\n\n      canvas.getSelection().setPrimary(figure)\n\n      // inform all selection listeners about the new selection.\n      //\n      if (oldSelection !== figure) {\n        canvas.fireEvent(\"select\", {figure: figure, selection: canvas.getSelection()})\n      }\n    },\n\n\n    /**\n     *\n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} x the x-coordinate of the mouse down event\n     * @param {Number} y the y-coordinate of the mouse down event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onMouseDown: function (canvas, x, y, shiftKey, ctrlKey) {\n      this.mouseMovedDuringMouseDown = false\n      let canDragStart = true\n\n      // ignore ports since version 6.1.0. This is handled by the ConnectionCreatePolicy\n      //\n      let figure = canvas.getBestFigure(x, y)\n\n      // may the figure is assigned to a composite. In this case the composite can\n      // override the event receiver\n      while (figure !== null) {\n        let delegate = figure.getSelectionAdapter()()\n        if (delegate === figure) {\n          break\n        }\n        figure = delegate\n      }\n\n      // ignore ports since version 6.1.0. This is handled by the ConnectionCreatePolicy\n      //\n      if (figure instanceof draw2d.Port) {\n        return// silently\n      }\n\n      if (figure !== null && figure.isDraggable()) {\n        canDragStart = figure.onDragStart(x - figure.getAbsoluteX(), y - figure.getAbsoluteY(), shiftKey, ctrlKey)\n        // Element send a veto about the drag&drop operation\n        this.mouseDraggingElement = canDragStart === false ? null : figure\n      }\n\n      this.mouseDownElement = figure\n      if (this.mouseDownElement !== null) {\n        this.mouseDownElement.fireEvent(\"mousedown\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n      }\n\n      if (figure !== canvas.getSelection().getPrimary() && figure !== null && figure.isSelectable() === true) {\n        this.select(canvas, figure)\n\n        // it's a line\n        if (figure instanceof draw2d.shape.basic.Line) {\n          // you can move a line with Drag&Drop...but not a connection.\n          // A Connection is fixed linked with the corresponding ports.\n          //\n          if (!(figure instanceof draw2d.Connection)) {\n            canvas.draggingLineCommand = figure.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.MOVE))\n            if (canvas.draggingLineCommand !== null) {\n              canvas.draggingLine = figure\n            }\n          }\n        } else if (canDragStart === false) {\n          figure.unselect()\n        }\n      }\n    },\n\n    /**\n     *\n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} dx The x diff between start of dragging and this event\n     * @param {Number} dy The y diff between start of dragging and this event\n     * @param {Number} dx2 The x diff since the last call of this dragging operation\n     * @param {Number} dy2 The y diff since the last call of this dragging operation\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     * @template\n     */\n    onMouseDrag: function (canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n\n      this.mouseMovedDuringMouseDown = true\n      if (this.mouseDraggingElement !== null) {\n\n        // mouseDraggingElement be a ResizeHandle...in this case it is not part of the selection\n        //\n        let sel = canvas.getSelection()\n        if (!sel.contains(this.mouseDraggingElement)) {\n          this.mouseDraggingElement.onDrag(dx, dy, dx2, dy2, shiftKey, ctrlKey)\n        } else {\n          sel.each(function (i, figure) {\n            figure.onDrag(dx, dy, dx2, dy2, shiftKey, ctrlKey)\n          })\n        }\n\n        let p = canvas.fromDocumentToCanvasCoordinate(canvas.mouseDownX + (dx / canvas.zoomFactor), canvas.mouseDownY + (dy / canvas.zoomFactor))\n        let target = canvas.getBestFigure(p.x, p.y, this.mouseDraggingElement)\n\n        if (target !== canvas.currentDropTarget) {\n          if (canvas.currentDropTarget !== null) {\n            canvas.currentDropTarget.onDragLeave(this.mouseDraggingElement)\n            canvas.currentDropTarget.fireEvent(\"dragLeave\", {draggingElement: this.mouseDraggingElement})\n            canvas.currentDropTarget = null\n          }\n          if (target !== null) {\n            canvas.currentDropTarget = target.delegateTarget(this.mouseDraggingElement)\n            // inform all listener that the element has accept the dragEnter event\n            //\n            if (canvas.currentDropTarget !== null) {\n              canvas.currentDropTarget.onDragEnter(this.mouseDraggingElement) // legacy\n              canvas.currentDropTarget.fireEvent(\"dragEnter\", {draggingElement: this.mouseDraggingElement})\n            }\n          }\n        }\n      }\n      // Connection didn't support panning at the moment. There is no special reason for that. Just an interaction\n      // decision.\n      //\n      else if (this.mouseDownElement !== null && !(this.mouseDownElement instanceof draw2d.Connection)) {\n        if (this.mouseDownElement.panningDelegate !== null) {\n          this.mouseDownElement.panningDelegate.fireEvent(\"panning\", {\n            dx: dx,\n            dy: dy,\n            dx2: dx2,\n            dy2: dy2,\n            shiftKey: shiftKey,\n            ctrlKey: ctrlKey\n          })\n          this.mouseDownElement.panningDelegate.onPanning(dx, dy, dx2, dy2, shiftKey, ctrlKey)\n        } else {\n          this.mouseDownElement.fireEvent(\"panning\", {\n            dx: dx,\n            dy: dy,\n            dx2: dx2,\n            dy2: dy2,\n            shiftKey: shiftKey,\n            ctrlKey: ctrlKey\n          })\n          this.mouseDownElement.onPanning(dx, dy, dx2, dy2, shiftKey, ctrlKey)\n        }\n      }\n    },\n\n    /**\n     *\n     *\n     * @param {draw2d.Canvas} canvas the related Canvas\n     * @param {Number} x the x-coordinate of the mouse down event\n     * @param {Number} y the y-coordinate of the mouse down event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onMouseUp: function (canvas, x, y, shiftKey, ctrlKey) {\n      if (this.mouseDraggingElement !== null) {\n        let redrawConnection = new draw2d.util.ArrayList()\n        if (this.mouseDraggingElement instanceof draw2d.shape.node.Node) {\n          // TODO: don't add the connections with to check if a repaint is required\n          //       may a moved connection didn't have an intersection with the named lines.\n          //       in this case a redraw is useless\n          canvas.lineIntersections.each(function (i, inter) {\n            if (!redrawConnection.contains(inter.line)) redrawConnection.add(inter.line)\n            if (!redrawConnection.contains(inter.other)) redrawConnection.add(inter.other)\n          })\n        }\n\n        // start CommandStack transaction\n        canvas.getCommandStack().startTransaction()\n\n        let sel = canvas.getSelection().getAll()\n        if (!sel.contains(this.mouseDraggingElement)) {\n          this.mouseDraggingElement.onDragEnd(x, y, shiftKey, ctrlKey)\n        } else {\n          canvas.getSelection().getAll().each(function (i, figure) {\n            figure.onDragEnd(x, y, shiftKey, ctrlKey)\n          })\n        }\n\n        if (canvas.currentDropTarget !== null && !this.mouseDraggingElement.isResizeHandle) {\n          this.mouseDraggingElement.onDrop(canvas.currentDropTarget, x, y, shiftKey, ctrlKey)\n          canvas.currentDropTarget.onDragLeave(this.mouseDraggingElement)\n          canvas.currentDropTarget.fireEvent(\"dragLeave\", {draggingElement: this.mouseDraggingElement})\n          canvas.currentDropTarget.onCatch(this.mouseDraggingElement, x, y, shiftKey, ctrlKey)\n          canvas.currentDropTarget = null\n        }\n\n        // end command stack trans\n        canvas.getCommandStack().commitTransaction()\n\n        if (this.mouseDraggingElement instanceof draw2d.shape.node.Node) {\n          canvas.lineIntersections.each(function (i, inter) {\n            if (!redrawConnection.contains(inter.line)) redrawConnection.add(inter.line)\n            if (!redrawConnection.contains(inter.other)) redrawConnection.add(inter.other)\n          })\n          redrawConnection.each(function (i, line) {\n            line.svgPathString = null\n            line.repaint()\n          })\n        }\n\n        this.mouseDraggingElement = null\n      }\n      // Connection didn't support panning at the moment. There is no special reason for that. Just an interaction\n      // decision.\n      //\n      else if (this.mouseDownElement !== null && !(this.mouseDownElement instanceof draw2d.Connection)) {\n        if (this.mouseDownElement.panningDelegate !== null) {\n          this.mouseDownElement.panningDelegate.fireEvent(\"panningEnd\")\n          this.mouseDownElement.panningDelegate.onPanningEnd()\n        } else {\n          this.mouseDownElement.fireEvent(\"panningEnd\")\n          this.mouseDownElement.onPanningEnd()\n        }\n      }\n\n      // Reset the current selection if the user click in the blank canvas.\n      // Don't reset the selection if the user pan the canvas\n      //\n      if (this.mouseDownElement === null && this.mouseMovedDuringMouseDown === false) {\n        this.select(canvas, null)\n      }\n\n      if (this.mouseDownElement !== null) {\n        this.mouseDownElement.fireEvent(\"mouseup\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n      }\n\n      this.mouseDownElement = null\n      this.mouseMovedDuringMouseDown = false\n    },\n\n    /**\n     *\n     * Called by the canvas if the user click on a figure.\n     *\n     * @param {draw2d.Figure} figure the figure under the click event. Can be null\n     * @param {Number} mouseX the x coordinate of the mouse during the click event\n     * @param {Number} mouseY the y coordinate of the mouse during the click event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @since 3.0.0\n     */\n    onClick: function (figure, mouseX, mouseY, shiftKey, ctrlKey) {\n      if (figure !== null) {\n        figure.fireEvent(\"click\", {\n          figure: figure,\n          x: mouseX,\n          y: mouseY,\n          relX: mouseX - figure.getAbsoluteX(),\n          relY: mouseY - figure.getAbsoluteY(),\n          shiftKey: shiftKey,\n          ctrlKey: ctrlKey\n        })\n\n        figure.onClick()\n      }\n    },\n\n    /**\n     *\n     * Called by the canvas if the user double click on a figure.\n     *\n     * @param {draw2d.Figure} figure the figure under the double click event. Can be null\n     * @param {Number} mouseX the x coordinate of the mouse during the click event\n     * @param {Number} mouseY the y coordinate of the mouse during the click event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @since 4.1.0\n     */\n    onDoubleClick: function (figure, mouseX, mouseY, shiftKey, ctrlKey) {\n      if (figure !== null) {\n        figure.fireEvent(\"dblclick\", {x: mouseX, y: mouseY, shiftKey: shiftKey, ctrlKey: ctrlKey})\n        figure.onDoubleClick()\n      }\n    }\n\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Snapping is based on the existing children of a container. When snapping a shape,\n * the center of the bounding box will snap to the center of other figures of the given canvas.\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.SnapToEditPolicy\n * @since 5.6.4\n */\ndraw2d.policy.canvas.SnapToCenterEditPolicy = draw2d.policy.canvas.SnapToEditPolicy.extend(\n  /** @lends draw2d.policy.canvas.SnapToCenterEditPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.SnapToCenterEditPolicy\",\n\n  SNAP_THRESHOLD: 5,\n  FADEOUT_DURATION: 500,\n\n  /**\n   * Creates a new constraint policy for snap to geometry\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.centers = null\n\n    this.horizontalGuideLines = null\n    this.verticalGuideLines = null\n  },\n\n  /**\n   *\n   *\n   * @param {draw2d.Figure} figure the shape below the mouse or null\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseUp: function (figure, x, y, shiftKey, ctrlKey) {\n    this.centers = null\n    this.hideHorizontalGuides(false)\n    this.hideVerticalGuides(false)\n  },\n\n  /**\n   *\n   * Adjust the coordinates to the canvas neighbours\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Figure} figure the figure to snap\n   * @param {draw2d.geo.Point} modifiedPos the already modified position of the figure (e.g. from an another Policy)\n   * @param {draw2d.geo.Point} originalPos the original requested position of the figure\n   *\n   * @returns {draw2d.geo.Point} the constraint position of the figure\n   */\n  snap: function (canvas, figure, modifiedPos, originalPos) {\n    // do nothing for resize handles\n    if (figure instanceof draw2d.ResizeHandle) {\n      return modifiedPos\n    }\n\n    // do nothing for lines\n    if (figure instanceof draw2d.shape.basic.Line) {\n      return modifiedPos\n    }\n\n\n    let allowXChanges = modifiedPos.x === originalPos.x\n    let allowYChanges = modifiedPos.y === originalPos.y\n\n    let inputBounds = new draw2d.geo.Rectangle(modifiedPos.x, modifiedPos.y, figure.getWidth(), figure.getHeight())\n    let inputCenter = inputBounds.getCenter()\n\n    modifiedPos = modifiedPos.clone()\n\n    if (allowXChanges === true) {\n      let horizontal = this.snapHorizontal(inputCenter)\n\n      // Show a horizontal line if the snapper has modified the inputPoint\n      //\n      if (horizontal.snapped) {\n        // show the snap lines..\n        this.showHorizontalGuides(figure, horizontal)\n\n        // and snap the x coordinate\n        modifiedPos.y += horizontal.diff\n      }\n      else {\n        this.hideHorizontalGuides(true)\n      }\n    }\n    else {\n      this.hideHorizontalGuides(true)\n    }\n\n    if (allowYChanges === true) {\n      let vertical = this.snapVertical(inputCenter)\n\n      // Show a vertical guides if the snapper has modified the inputPoint\n      //\n      if (vertical.snapped) {\n        // show the snap lines..\n        this.showVerticalGuides(figure, vertical)\n\n        // and snap the x coordinate\n        modifiedPos.x += vertical.diff\n      }\n      else {\n        this.hideVerticalGuides(true)\n      }\n    }\n    else {\n      this.hideVerticalGuides(true)\n    }\n\n    return modifiedPos\n  },\n\n\n  snapVertical: function (center) {\n    let _this = this\n    if (this.centers === null) {\n      this.populateCenters()\n    }\n\n    let result = {\n      point: center,\n      snapped: false,\n      diff: 0\n    }\n\n\n    let candidates = []\n    this.centers.forEach( (point) =>{\n      if (Math.abs(point.x - center.x) < _this.SNAP_THRESHOLD) {\n        candidates.push(point)\n      }\n    })\n\n    // we can abort if we didn't find an intersection on the right hand side\n    if (candidates.length === 0) {\n      return result\n    }\n\n    // sort the intersection point and get the closest point to the tested inputPoint\n    // In this case it is the point with the greatest X coordinate\n    //\n    candidates.sort( (a, b) => a.x - b.x )\n\n    let diff = candidates[0].x - center.x\n    let snappedPoint = center.clone()\n    snappedPoint.x += diff\n    return {snapped: true, diff: diff, point: candidates[0], snappedPoint: snappedPoint}\n  },\n\n\n  snapHorizontal: function (center) {\n    let _this = this\n    if (this.centers === null) {\n      this.populateCenters()\n    }\n\n    let result = {\n      point: center,\n      snapped: false,\n      diff: 0\n    }\n\n\n    let candidates = []\n    this.centers.forEach( (point) => {\n      if (Math.abs(point.y - center.y) < _this.SNAP_THRESHOLD) {\n        candidates.push(point)\n      }\n    })\n\n    // we can abort if we didn't find an intersection on the right hand side\n    if (candidates.length === 0) {\n      return result\n    }\n\n    // sort the intersection point and get the closest point to the tested inputPoint\n    // In this case it is the point with the greatest X coordinate\n    //\n    candidates.sort( (a, b) =>  a.y - b.y)\n\n    let diff = candidates[0].y - center.y\n    let snappedPoint = center.clone()\n    snappedPoint.y += diff\n    return {snapped: true, diff: diff, point: candidates[0], snappedPoint: snappedPoint}\n  },\n\n  populateCenters: function () {\n    let selection = this.canvas.getSelection().getAll(true)\n    let centers = this.centers = []\n\n    let figures = this.canvas.getFigures()\n    figures.each( (index, figure) =>{\n      if (!selection.contains(figure)) {\n        centers.push(figure.getBoundingBox().getCenter())\n      }\n    })\n  },\n\n  showHorizontalGuides: function (causedFigure, constraint) {\n    if (this.horizontalGuideLines !== null) {\n      this.horizontalGuideLines.stop()\n      this.horizontalGuideLines.remove()\n    }\n\n    let start = constraint.point\n    let end = constraint.snappedPoint\n\n    this.canvas.paper.setStart()\n\n    // horizontal lines\n    //\n    this.canvas.paper\n      .path(\n        \"M \" + (start.x) + \" \" + ((start.y | 0) + 0.5) + \" L \" + (end.x) + \" \" + ((end.y | 0) + 0.5))\n      .attr({\n      \"stroke\": this.lineColor.rgba(),\n      \"stroke-width\": 1\n    })\n\n    this.horizontalGuideLines = this.canvas.paper.setFinish()\n    this.horizontalGuideLines.toFront()\n  },\n\n  /**\n   *\n   * Hide the horizontal snapping guides\n   *\n   * @param {Boolean} fast\n   */\n  hideHorizontalGuides: function (fast) {\n    if (this.horizontalGuideLines === null) {\n      return\n    }\n    if (fast === true) {\n      if (this.horizontalGuideLines !== null) {\n        this.horizontalGuideLines.remove()\n        this.horizontalGuideLines = null\n      }\n    }\n    else {\n      this.horizontalGuideLines.animate(\n        {opacity: 0.1},\n        this.FADEOUT_DURATION,\n        () => {\n          if (this.horizontalGuideLines !== null) {\n            this.horizontalGuideLines.remove()\n            this.horizontalGuideLines = null\n          }\n        }\n      )\n    }\n  },\n\n\n  showVerticalGuides: function (causedFigure, constraint) {\n    if (this.verticalGuideLines !== null) {\n      this.verticalGuideLines.stop()\n      this.verticalGuideLines.remove()\n    }\n\n    let start = constraint.point\n    let end = constraint.snappedPoint\n\n    this.canvas.paper.setStart()\n\n    // horizontal lines\n    //\n    this.canvas.paper\n      .path(\n        \"M \" + ((start.x | 0) + 0.5) + \" \" + (start.y) + \" L \" + ((end.x | 0) + 0.5) + \" \" + (end.y))\n      .attr({\n        \"stroke\": this.lineColor.rgba(),\n        \"stroke-width\": 1\n    })\n\n\n    this.verticalGuideLines = this.canvas.paper.setFinish()\n    this.verticalGuideLines.toFront()\n  },\n\n  /**\n   *\n   * Hide the horizontal snapüing guides\n   *\n   * @param soft\n   */\n  hideVerticalGuides: function (fast) {\n    if (this.verticalGuideLines === null) {\n      return\n    }\n    if (fast === true) {\n      if (this.verticalGuideLines !== null) {\n        this.verticalGuideLines.remove()\n        this.verticalGuideLines = null\n      }\n    }\n    else {\n      this.verticalGuideLines.animate(\n        {opacity: 0.1},\n        this.FADEOUT_DURATION,\n        () => {\n          if (this.verticalGuideLines !== null) {\n            this.verticalGuideLines.remove()\n            this.verticalGuideLines = null\n          }\n        }\n      )\n    }\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A helper used to perform snapping to a grid, which is specified on the canvas via the various\n * properties defined in this class.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.ShowDimetricGridEditPolicy\n */\ndraw2d.policy.canvas.SnapToDimetricGridEditPolicy = draw2d.policy.canvas.ShowDimetricGridEditPolicy.extend(\n  /** @lends draw2d.policy.canvas.SnapToDimetricGridEditPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.SnapToDimetricGridEditPolicy\",\n\n\n  /**\n   * Creates a new constraint policy for snap to grid\n   *\n   * @param {Number} grid the grid width of the canvas\n   */\n  init: function (grid) {\n    this._super(grid)\n  },\n\n\n  /**\n   *\n   * Applies a snapping correction to the given result.\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Figure} figure the figure to snap\n   * @param {draw2d.geo.Point} modifiedPos the already modified position of the figure (e.g. from an another Policy)\n   * @param {draw2d.geo.Point} originalPos the original requested position of the figure\n   * @since 2.3.0\n   */\n  snap: function (canvas, figure, modifiedPos, originalPos) {\n    // do nothing for lines\n    if (figure instanceof draw2d.shape.basic.Line) {\n      return modifiedPos\n    }\n\n    let snapPoint = figure.getSnapToGridAnchor()\n\n    modifiedPos.x = modifiedPos.x + snapPoint.x\n    modifiedPos.y = modifiedPos.y + snapPoint.y\n\n    let g = this.grid / 5\n\n    modifiedPos.x = g * Math.floor(((modifiedPos.x + g / 2.0) / g))\n    modifiedPos.y = g * Math.floor(((modifiedPos.y + g / 2.0) / g))\n\n    modifiedPos.x = modifiedPos.x - snapPoint.x\n    modifiedPos.y = modifiedPos.y - snapPoint.y\n\n    return modifiedPos\n  }\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\ndraw2d.SnapToHelper = {}\n\ndraw2d.SnapToHelper.NORTH = 1\ndraw2d.SnapToHelper.SOUTH = 4\ndraw2d.SnapToHelper.WEST = 8\ndraw2d.SnapToHelper.EAST = 16\ndraw2d.SnapToHelper.CENTER_H = 32\ndraw2d.SnapToHelper.CENTER_V = 642\n\ndraw2d.SnapToHelper.NORTH_EAST = draw2d.SnapToHelper.NORTH | draw2d.SnapToHelper.EAST\ndraw2d.SnapToHelper.NORTH_WEST = draw2d.SnapToHelper.NORTH | draw2d.SnapToHelper.WEST\ndraw2d.SnapToHelper.SOUTH_EAST = draw2d.SnapToHelper.SOUTH | draw2d.SnapToHelper.EAST\ndraw2d.SnapToHelper.SOUTH_WEST = draw2d.SnapToHelper.SOUTH | draw2d.SnapToHelper.WEST\ndraw2d.SnapToHelper.NORTH_SOUTH = draw2d.SnapToHelper.NORTH | draw2d.SnapToHelper.SOUTH\ndraw2d.SnapToHelper.EAST_WEST = draw2d.SnapToHelper.EAST | draw2d.SnapToHelper.WEST\ndraw2d.SnapToHelper.NSEW = draw2d.SnapToHelper.NORTH_SOUTH | draw2d.SnapToHelper.EAST_WEST\n\n/**\n * @class\n *\n * A helper used by Tools for snapping certain mouse interactions.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.CanvasPolicy\n */\ndraw2d.policy.canvas.SnapToEditPolicy = draw2d.policy.canvas.CanvasPolicy.extend(\n  /** @lends draw2d.policy.canvas.SnapToEditPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.SnapToEditPolicy\",\n\n  /**\n   * Creates a new constraint policy for snap to grid\n   *\n   */\n  init: function (attr, setter, getter) {\n    this.lineColor = null\n\n    this._super(\n      extend({\n        lineColor: \"#51C1FC\"\n      }, attr),\n      extend({\n        // @attr {draw2d.util.Color} color the line color of the snapTo lines */\n        lineColor: this.setLineColor\n      }, setter),\n      extend({\n        lineColor: this.getLineColor\n      }, getter))\n  },\n\n  /**\n   *\n   * Set the color of the snap line.\n   *\n   *     // Alternatively you can use the attr method:\n   *     policy.attr({\n   *       lineColor: color\n   *     });\n   *\n   * @param {draw2d.util.Color|String} color The new color of the line.\n   **/\n  setLineColor: function (color) {\n    this.lineColor = new draw2d.util.Color(color)\n    return this\n  },\n\n  /**\n   *\n   * Return the current paint color.\n   *\n   * @returns {draw2d.util.Color} The paint color of the line.\n   * @since 5.6.1\n   **/\n  getLineColor: function () {\n    return this.lineColor\n  },\n\n\n  /**\n   *\n   * Adjust the coordinates to the given constraint of the policy.\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Figure} figure the figure to snap\n   * @param {draw2d.geo.Point} modifiedPos the already modified position of the figure (e.g. from an another Policy)\n   * @param {draw2d.geo.Point} originalPos the original requested position of the figure\n   */\n  snap: function (canvas, figure, modifiedPos, originalPos) {\n    return modifiedPos\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Snapping is based on the existing children of a container. When snapping a shape,\n * the edges of the bounding box will snap to edges of other rectangles generated\n * from the children of the given canvas.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.SnapToEditPolicy\n */\ndraw2d.policy.canvas.SnapToGeometryEditPolicy = draw2d.policy.canvas.SnapToEditPolicy.extend(\n  /** @lends draw2d.policy.canvas.SnapToGeometryEditPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.SnapToGeometryEditPolicy\",\n\n  SNAP_THRESHOLD: 3,\n  FADEOUT_DURATION: 300,\n\n  /**\n   * Creates a new constraint policy for snap to geometry\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.rows = null\n    this.cols = null\n    this.vline = null\n    this.hline = null\n  },\n\n\n  /**\n   * \n   *\n   * @param {draw2d.Figure} figure the shape below the mouse or null\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseUp: function (figure, x, y, shiftKey, ctrlKey) {\n    this.rows = null\n    this.cols = null\n    this.hideVerticalLine()\n    this.hideHorizontalLine()\n  },\n\n  /**\n   * \n   * Adjust the coordinates to the canvas neighbours\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Figure} figure the figure to snap\n   * @param {draw2d.geo.Point} modifiedPos the already modified position of the figure (e.g. from an another Policy)\n   * @param {draw2d.geo.Point} originalPos the original requested position of the figure\n   *\n   * @returns {draw2d.geo.Point} the constraint position of the figure\n   */\n  snap: function (canvas, figure, modifiedPos, originalPos) {\n    // do nothing for lines\n    if (figure instanceof draw2d.shape.basic.Line) {\n      return modifiedPos\n    }\n\n    let result\n    let allowXChanges = modifiedPos.x === originalPos.x\n    let allowYChanges = modifiedPos.y === originalPos.y\n\n    // Coordinates already snapped to an x/y coordinate.\n    // Don't change them and in this case no further calculation is requried.\n    //\n    if (!allowXChanges && !allowYChanges) {\n      return modifiedPos\n    }\n\n    if (figure instanceof draw2d.ResizeHandle) {\n      let snapPoint = figure.getSnapToGridAnchor()\n      modifiedPos.x += snapPoint.x\n      modifiedPos.y += snapPoint.y\n\n      let snapDirections = figure.getSnapToDirection()\n      result = this.snapPoint(snapDirections, modifiedPos)\n\n      // Show a vertical line if the snapper has modified the inputPoint\n      //\n      if (allowXChanges && (snapDirections & draw2d.SnapToHelper.EAST_WEST) && !(result.edge & draw2d.SnapToHelper.EAST_WEST)) {\n        this.showVerticalLine(figure, draw2d.SnapToHelper.WEST, result.point.x)\n      }\n      else {\n        this.hideVerticalLine()\n      }\n\n      // Show a horizontal line if the snapper has modified the inputPoint\n      //\n      if (allowYChanges && (snapDirections & draw2d.SnapToHelper.NORTH_SOUTH) && !(result.edge & draw2d.SnapToHelper.NORTH_SOUTH)) {\n        this.showHorizontalLine(figure, draw2d.SnapToHelper.NORTH, result.point.y)\n      }\n      else {\n        this.hideHorizontalLine()\n      }\n\n      // restore the original pos coordinate if x or y coordinate already snapped to any axis\n      // or subtract the added snapOffset\n      //\n      result.point.x = allowXChanges ? result.point.x - snapPoint.x : modifiedPos.x\n      result.point.y = allowYChanges ? result.point.y - snapPoint.y : modifiedPos.y\n\n      return result.point\n    }\n\n    // The user drag&drop a normal figure\n    let inputBounds = new draw2d.geo.Rectangle(modifiedPos.x, modifiedPos.y, figure.getWidth(), figure.getHeight())\n\n    result = this.snapRectangle(inputBounds)\n\n    if (!allowXChanges) {\n      result.bounds.x = modifiedPos.x\n    }\n\n    if (!allowYChanges) {\n      result.bounds.y = modifiedPos.y\n    }\n\n    // Show a vertical line if the snapper has modified the inputPoint\n    //\n    if (allowXChanges && !(result.edge & draw2d.SnapToHelper.WEST)) {\n      this.showVerticalLine(figure, draw2d.SnapToHelper.WEST, result.bounds.x)\n    }\n    else if (allowXChanges && !(result.edge & draw2d.SnapToHelper.EAST)) {\n      this.showVerticalLine(figure, draw2d.SnapToHelper.EAST, result.bounds.x + result.bounds.getWidth())\n    }\n    else {\n      this.hideVerticalLine()\n    }\n\n\n    // Show a horizontal line if the snapper has modified the inputPoint\n    //\n    if (allowYChanges && !(result.edge & draw2d.SnapToHelper.NORTH)) {\n      this.showHorizontalLine(figure, draw2d.SnapToHelper.NORTH, result.bounds.y)\n    }\n    else if (allowYChanges && !(result.edge & draw2d.SnapToHelper.SOUTH)) {\n      this.showHorizontalLine(figure, draw2d.SnapToHelper.SOUTH, result.bounds.y + result.bounds.getHeight())\n    }\n    else {\n      this.hideHorizontalLine()\n    }\n\n    return result.bounds.getTopLeft()\n  },\n\n  /**\n   * \n   * calculates the snapped position of the rectangle.\n   *\n   * @param {draw2d.geo.Rectangle} inputBounds\n   *\n   * @returns {Object}\n   */\n  snapRectangle: function (inputBounds) {\n    let resultBounds = inputBounds.clone()\n\n    let topLeft = this.snapPoint(draw2d.SnapToHelper.NORTH_WEST, inputBounds.getTopLeft())\n    resultBounds.x = topLeft.point.x\n    resultBounds.y = topLeft.point.y\n\n    let bottomRight = this.snapPoint(draw2d.SnapToHelper.SOUTH_EAST, inputBounds.getBottomRight())\n\n    // The first test (topLeft) has not modified the point. so we can modify them with the bottomRight adjustment\n    //\n    if (topLeft.edge & draw2d.SnapToHelper.WEST) {\n      resultBounds.x = bottomRight.point.x - inputBounds.getWidth()\n    }\n\n    // The first test (topLeft) has not modified the point. so we can modify them with the bottomRight adjustment\n    //\n    if (topLeft.edge & draw2d.SnapToHelper.NORTH) {\n      resultBounds.y = bottomRight.point.y - inputBounds.getHeight()\n    }\n\n    return {edge: topLeft.edge | bottomRight.edge, bounds: resultBounds}\n  },\n\n  snapPoint: function (/*:int*/ snapOrientation, /*:draw2d.Point*/ inputPoint) {\n    let resultPoint = inputPoint.clone()\n\n    if (this.rows === null || this.cols === null)\n      this.populateRowsAndCols()\n\n    if ((snapOrientation & draw2d.SnapToHelper.EAST) !== 0) {\n      let rightCorrection = this.getCorrectionFor(this.cols, inputPoint.x + 1, 1)\n      if (rightCorrection !== this.SNAP_THRESHOLD) {\n        snapOrientation &= ~draw2d.SnapToHelper.EAST\n        resultPoint.x += rightCorrection\n      }\n    }\n\n    if ((snapOrientation & draw2d.SnapToHelper.WEST) !== 0) {\n      let leftCorrection = this.getCorrectionFor(this.cols, inputPoint.x, -1)\n      if (leftCorrection !== this.SNAP_THRESHOLD) {\n        snapOrientation &= ~draw2d.SnapToHelper.WEST\n        resultPoint.x += leftCorrection\n      }\n    }\n\n    if ((snapOrientation & draw2d.SnapToHelper.SOUTH) !== 0) {\n      let bottomCorrection = this.getCorrectionFor(this.rows, inputPoint.y + 1, 1)\n      if (bottomCorrection !== this.SNAP_THRESHOLD) {\n        snapOrientation &= ~draw2d.SnapToHelper.SOUTH\n        resultPoint.y += bottomCorrection\n      }\n    }\n\n    if ((snapOrientation & draw2d.SnapToHelper.NORTH) !== 0) {\n      let topCorrection = this.getCorrectionFor(this.rows, inputPoint.y, -1)\n      if (topCorrection !== this.SNAP_THRESHOLD) {\n        snapOrientation &= ~draw2d.SnapToHelper.NORTH\n        resultPoint.y += topCorrection\n      }\n    }\n\n    return {edge: snapOrientation, point: resultPoint}\n  },\n\n  populateRowsAndCols: function () {\n    let selection = this.canvas.getSelection()\n    this.rows = []\n    this.cols = []\n\n    let figures = this.canvas.getFigures()\n    for (let i = 0; i < figures.getSize(); i++) {\n      let figure = figures.get(i)\n      if (!selection.contains(figure, true)) {\n        let bounds = figure.getBoundingBox()\n        this.cols.push({type: -1, location: bounds.x})\n        this.cols.push({type: 0, location: bounds.x + (bounds.w - 1) / 2})\n        this.cols.push({type: 1, location: bounds.getRight() + 1})\n        this.rows.push({type: -1, location: bounds.y})\n        this.rows.push({type: 0, location: bounds.y + (bounds.h - 1) / 2})\n        this.rows.push({type: 1, location: bounds.getBottom() + 1})\n      }\n    }\n\n    // TODO: remove duplicate entries in the rows/cols array\n\n  },\n\n  getCorrectionFor: function (/*:Array*/ entries, /*:double*/ value, /*:int*/ side) {\n    let resultMag = this.SNAP_THRESHOLD\n    let result = this.SNAP_THRESHOLD\n\n    for (let i = 0; i < entries.length; i++) {\n      let entry = entries[i]\n      let magnitude\n\n      if (entry.type === -1 && side !== 0) {\n        magnitude = Math.abs(value - entry.location)\n        if (magnitude < resultMag) {\n          resultMag = magnitude\n          result = entry.location - value\n        }\n      }\n      else if (entry.type === 0 && side === 0) {\n        magnitude = Math.abs(value - entry.location)\n        if (magnitude < resultMag) {\n          resultMag = magnitude\n          result = entry.location - value\n        }\n      }\n      else if (entry.type === 1 && side !== 0) {\n        magnitude = Math.abs(value - entry.location)\n        if (magnitude < resultMag) {\n          resultMag = magnitude\n          result = entry.location - value\n        }\n      }\n    }\n    return result\n  },\n\n  showVerticalLine: function (causedFigure, edge, x) {\n    if (this.vline != null) {\n      this.vline.stop()\n      this.vline.remove()\n    }\n\n    let figures = this.canvas.getFigures().clone()\n    figures.removeAll(this.canvas.getSelection().getAll(true))\n    figures.map(function (figure) {\n      return figure.getBoundingBox()\n    })\n    figures.grep(function (bbox) {\n      return (Math.abs(bbox.x - x) <= 1) || (Math.abs(bbox.getRight() - x) <= 1)\n    })\n\n    // return silently if no figure bounding box is left\n    //\n    if (figures.getSize() === 0) {\n      return\n    }\n\n    // figure to align is above the current shape\n    //\n    let causedBox = causedFigure.getBoundingBox()\n    let causedCenter = causedBox.getCenter()\n    figures.sort(function (a, b) {\n      let d_a = a.getCenter().distance(causedCenter)\n      let d_b = b.getCenter().distance(causedCenter)\n      return d_a - d_b\n    })\n    let fromY = 0\n    let maxLength = this.canvas.getHeight() * Math.max(1, this.canvas.getZoom())\n    let yLength = maxLength\n    let snappedBox = figures.get(0)\n    if (causedBox.y < snappedBox.y) {\n      fromY = causedBox.y\n      yLength = snappedBox.getBottom() - causedBox.y\n    }\n    else {\n      fromY = snappedBox.y\n      yLength = causedBox.getBottom() - snappedBox.y\n    }\n\n    x = (x | 0) + 0.5 // force a .5 number to avoid subpixel rendering. Blurry lines...\n    this.canvas.paper.setStart()\n    this.canvas.paper.path(\"M \" + x + \" 0 l 0 \" + maxLength)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n    this.canvas.paper.path(\"M \" + x + \" \" + fromY + \" l 0 \" + yLength)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.vline = this.canvas.paper.setFinish()\n    this.vline.toBack()\n  },\n\n  hideVerticalLine: function () {\n    if (this.vline == null) {\n      return\n    }\n    this.vline.animate(\n      {opacity: 0.1},\n      this.FADEOUT_DURATION,\n      () => {\n        if (this.vline !== null) {\n          this.vline.remove()\n          this.vline = null\n        }\n      }\n    )\n  },\n\n  showHorizontalLine: function (causedFigure, edge, y) {\n    if (this.hline != null) {\n      this.hline.stop()\n      this.hline.remove()\n    }\n\n    let figures = this.canvas.getFigures().clone()\n    figures.removeAll(this.canvas.getSelection().getAll(true))\n    figures.map(function (figure) {\n      return figure.getBoundingBox()\n    })\n    figures.grep(function (bbox) {\n      return (Math.abs(bbox.y - y) <= 1) || (Math.abs(bbox.getBottom() - y) <= 1)\n    })\n\n    // return silently if no figure bounding box is left\n    //\n    if (figures.getSize() === 0) {\n      return\n    }\n\n    // figure to align is above the current shape\n    //\n    let causedBox = causedFigure.getBoundingBox()\n    let causedCenter = causedBox.getCenter()\n    figures.sort(function (a, b) {\n      let d_a = a.getCenter().distance(causedCenter)\n      let d_b = b.getCenter().distance(causedCenter)\n      return d_a - d_b\n    })\n    let fromX = 0\n    let maxLength\n    let xLength = maxLength = this.canvas.getWidth() * Math.max(1, this.canvas.getZoom())\n    let snappedBox = figures.get(0)\n    if (causedBox.x < snappedBox.x) {\n      fromX = causedBox.x\n      xLength = snappedBox.getRight() - causedBox.x\n    }\n    else {\n      fromX = snappedBox.x\n      xLength = causedBox.getRight() - snappedBox.x\n    }\n\n\n    y = (y | 0) + 0.5 // force a .5 number to avoid subpixel rendering. Blurry lines...\n\n    this.canvas.paper.setStart()\n    this.canvas.paper.path(\"M 0 \" + y + \" l \" + maxLength + \" 0\")\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n    this.canvas.paper.path(\"M \" + fromX + \" \" + y + \" l \" + xLength + \" 0\")\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.hline = this.canvas.paper.setFinish()\n    this.hline.toBack()\n\n  },\n\n  hideHorizontalLine: function () {\n    if (this.hline === null) {\n      return //silently\n    }\n    this.hline.animate(\n      {opacity: 0.1},\n      this.FADEOUT_DURATION,\n      () => {\n        if (this.hline !== null) {\n          this.hline.remove()\n          this.hline = null\n        }\n      }\n    )\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A helper used to perform snapping to a grid, which is specified on the canvas via the various\n * properties defined in this class.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.ShowGridEditPolicy\n */\ndraw2d.policy.canvas.SnapToGridEditPolicy = draw2d.policy.canvas.SnapToEditPolicy.extend(\n  /** @lends draw2d.policy.canvas.SnapToGridEditPolicy.prototype */\n  {\n\n    NAME: \"draw2d.policy.canvas.SnapToGridEditPolicy\",\n\n\n    /**\n     * Creates a new constraint policy for snap to grid\n     *\n     * @param {Number} grid the grid width of the canvas\n     */\n    init: function (grid, showGrid) {\n      this._super()\n      this.grid = grid || 20\n\n      // Default Value for \"showGrid=true\"\n      if (typeof showGrid ===\"undefined\" || showGrid===true) {\n        this.renderer = new draw2d.policy.canvas.ShowGridEditPolicy(this.grid)\n      }\n    },\n\n\n    onInstall: function (canvas) {\n      this._super(canvas)\n      if (this.renderer) this.renderer.onInstall(canvas)\n    },\n\n    onUninstall: function (canvas) {\n      this._super(canvas)\n      if (this.renderer) this.renderer.onUninstall(canvas)\n    },\n\n    /**\n     *\n     * Set a new grid width/height\n     *\n     * @param {Number} grid\n     * @since 5.0.3\n     */\n    setGrid: function (grid) {\n      this.grid = grid\n      if (this.renderer) this.renderer.setGrid(grid)\n    },\n\n      /**\n     *\n     * Applies a snapping correction to the given result.\n     *\n     * @param {draw2d.Canvas} canvas the related canvas\n     * @param {draw2d.Figure} figure the figure to snap\n     * @param {draw2d.geo.Point} modifiedPos the already modified position of the figure (e.g. from an another Policy)\n     * @param {draw2d.geo.Point} originalPos the original requested position of the figure\n     * @since 2.3.0\n     */\n    snap: function (canvas, figure, modifiedPos, originalPos) {\n      // do nothing for lines\n      if (figure instanceof draw2d.shape.basic.Line) {\n        return modifiedPos\n      }\n\n      let snapPoint = figure.getSnapToGridAnchor()\n\n      modifiedPos.x = modifiedPos.x + snapPoint.x\n      modifiedPos.y = modifiedPos.y + snapPoint.y\n\n\n      modifiedPos.x = this.grid * Math.floor(((modifiedPos.x + this.grid / 2.0) / this.grid))\n      modifiedPos.y = this.grid * Math.floor(((modifiedPos.y + this.grid / 2.0) / this.grid))\n\n      modifiedPos.x = modifiedPos.x - snapPoint.x\n      modifiedPos.y = modifiedPos.y - snapPoint.y\n\n      return modifiedPos\n    }\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Snapping is based on the existing children of a container. When snapping a shape,\n * the edges of the bounding box will snap to edges of other rectangles generated\n * from the children of the given canvas.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.SnapToEditPolicy\n * @since 5.6.4\n */\ndraw2d.policy.canvas.SnapToInBetweenEditPolicy = draw2d.policy.canvas.SnapToEditPolicy.extend(\n  /** @lends draw2d.policy.canvas.SnapToInBetweenEditPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.canvas.SnapToInBetweenEditPolicy\",\n\n  SNAP_THRESHOLD: 5,\n  FADEOUT_DURATION: 500,\n\n  /**\n   * Creates a new constraint policy for snap to geometry\n   *\n   */\n  init: function (attr, setter, getter) {\n\n    this._super(attr, setter, getter)\n\n    this.bounds = null\n\n    this.horizontalGuideLines = null\n    this.verticalGuideLines = null\n  },\n\n\n  /**\n   *\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   */\n  onMouseUp: function (figure, x, y, shiftKey, ctrlKey) {\n    this.bounds = null\n    this.hideHorizontalGuides(false)\n    this.hideVerticalGuides(false)\n  },\n\n  /**\n   *\n   * Adjust the coordinates to the canvas neighbours\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Figure} figure the figure to snap\n   * @param {draw2d.geo.Point} modifiedPos the already modified position of the figure (e.g. from an another Policy)\n   * @param {draw2d.geo.Point} originalPos the original requested position of the figure\n   *\n   * @returns {draw2d.geo.Point} the constraint position of the figure\n   */\n  snap: function (canvas, figure, modifiedPos, originalPos) {\n    // do nothing for resize handles\n    if (figure instanceof draw2d.ResizeHandle) {\n      return modifiedPos\n    }\n    // do nothing for lines\n    if (figure instanceof draw2d.shape.basic.Line) {\n      return modifiedPos\n    }\n\n\n    var allowXChanges = modifiedPos.x === originalPos.x\n    var allowYChanges = modifiedPos.y === originalPos.y\n\n    var inputBounds = new draw2d.geo.Rectangle(modifiedPos.x, modifiedPos.y, figure.getWidth(), figure.getHeight())\n\n    modifiedPos = modifiedPos.clone()\n\n    if (allowXChanges === true) {\n      var horizontal = this.snapHorizontal(inputBounds)\n\n      // Show a horizontal line if the snapper has modified the inputPoint\n      //\n      if (horizontal.snapped) {\n        // show the snap lines..\n        this.showHorizontalGuides(figure, horizontal)\n\n        // and snap the x coordinate\n        modifiedPos.x += horizontal.diff\n      }\n      else {\n        this.hideHorizontalGuides(true)\n      }\n    }\n    else {\n      this.hideHorizontalGuides(true)\n    }\n\n    if (allowYChanges === true) {\n      var vertical = this.snapVertical(inputBounds)\n\n      // Show a vertical guides if the snapper has modified the inputPoint\n      //\n      if (vertical.snapped) {\n        // show the snap lines..\n        this.showVerticalGuides(figure, vertical)\n\n        // and snap the x coordinate\n        modifiedPos.y += vertical.diff\n      }\n      else {\n        this.hideVerticalGuides(true)\n      }\n    }\n    else {\n      this.hideVerticalGuides(true)\n    }\n\n    return modifiedPos\n  },\n\n\n  snapHorizontal: function (boundingBox) {\n    var center = boundingBox.getCenter()\n    if (this.bounds === null)\n      this.populateBounds()\n\n    var result = {\n      point: center,\n      snapped: false,\n      snappedBox: boundingBox.clone()\n    }\n\n\n    var intersectionPoint = null\n\n    // Calculate the intersections points p(i) of all left side edges of the bounding boxes\n    // and the ray from the center of the drag&drop object to the left edge of the canva\n    //\n    // BBox of          Drag&Drop\n    // any Figure       Figure\n    //\n    // ....+           ........\n    //     |           .      .\n    // .   |p(i)       .      .\n    // .   X<------------->+  .\n    // .   |           .      .\n    // ....+           .      .\n    //                 ........\n    //\n    //\n    var leftIntersections = []\n    var leftInputPoint = center.clone()\n    leftInputPoint.x = 0\n    this.bounds.forEach(function (bbox, index) {\n      intersectionPoint = draw2d.shape.basic.Line.intersection(bbox.getTopRight(), bbox.getBottomRight(), center, leftInputPoint)\n      if (intersectionPoint !== null) {\n        intersectionPoint.causedBBox = bbox\n        leftIntersections.push(intersectionPoint)\n      }\n    })\n    // we can abort if we didn't find an intersection on the left hand side\n    if (leftIntersections.length === 0) {\n      return result\n    }\n\n    // sort the intersection point and get the closest point to the tested inputPoint\n    // In this case it is the point with the greates X coordinate\n    //\n    leftIntersections.sort(function (a, b) {\n      return b.x - a.x\n    })\n\n\n    // Calculate the intersections points p(i) of all right hand side edges of the\n    // bounding boxes and the ray from the center of the drag&drop object to the\n    // left edge of the canvas\n    //\n    //                 Drag&Drop             bbox of any\n    //                 Figure                figure\n    //\n    //                 ........\n    //                 .      .\n    //                 .      .             ...........\n    //                 .   +<-------------->X         |\n    //                 .      .         p(i)|         |\n    //                 .      .             |         |\n    //                 ........             |         |\n    //                                      ...........\n    //\n    var rightIntersections = []\n    var rightInputPoint = center.clone()\n    rightInputPoint.x = Number.MAX_SAFE_INTEGER\n    this.bounds.forEach(function (bbox, index) {\n      intersectionPoint = draw2d.shape.basic.Line.intersection(bbox.getTopLeft(), bbox.getBottomLeft(), center, rightInputPoint)\n      if (intersectionPoint !== null) {\n        intersectionPoint.causedBBox = bbox\n        rightIntersections.push(intersectionPoint)\n      }\n    })\n    // we can abort if we didn't find an intersection on the right hand side\n    if (rightIntersections.length === 0) {\n      return result\n    }\n\n    // sort the intersection point and get the closest point to the tested inputPoint\n    // In this case it is the point with the greates X coordinate\n    //\n    rightIntersections.sort(function (a, b) {\n      return a.x - b.x\n    })\n\n\n    // Snap the point (S) between the two founded intersections\n    // p(i1) and p(i2)\n    //\n    // BBox FigureA     Drag&Drop           BBox of FigureB\n    //                  Figure\n    //\n    // ....+           ........\n    //     |           .      .\n    // .   |p(i1)      .   S  .             ...........\n    // .   X<------------->X<-------------->X         |\n    // .   |           .      .        p(i2)|         |\n    // ....+           .      .             |         |\n    //                 ........             |         |\n    //                                      ...........\n    //\n    var snappedRect = boundingBox.clone()\n    var diff = ((leftIntersections[0].x + rightIntersections[0].x) / 2) - center.x\n\n    snappedRect.x += diff\n\n    return {\n      snapped: Math.abs(diff) < this.SNAP_THRESHOLD,\n      snappedRect: snappedRect,\n      diff: diff,\n      leftSide: leftIntersections[0],\n      rightSide: rightIntersections[0]\n    }\n  },\n\n\n  snapVertical: function (boundingBox) {\n    var center = boundingBox.getCenter()\n\n    if (this.bounds === null) {\n      this.populateBounds()\n    }\n\n    var result = {\n      point: center,\n      snapped: false,\n      snappedBox: boundingBox.clone()\n    }\n\n\n    var intersectionPoint = null\n\n    // Calculate the intersections points p(i) of all left side edges of the bounding boxes\n    // and the ray from the center of the drag&drop object to the left edge of the canva\n    //\n    // BBox of          Drag&Drop\n    // any Figure       Figure\n    //\n    // ....+           ........\n    //     |           .      .\n    // .   |p(i)       .      .\n    // .   X<------------->+  .\n    // .   |           .      .\n    // ....+           .      .\n    //                 ........\n    //\n    //\n    var topIntersections = []\n    var topInputPoint = center.clone()\n    topInputPoint.y = 0\n    this.bounds.forEach(function (bbox) {\n      intersectionPoint = draw2d.shape.basic.Line.intersection(bbox.getBottomLeft(), bbox.getBottomRight(), center, topInputPoint)\n      if (intersectionPoint !== null) {\n        intersectionPoint.causedBBox = bbox\n        topIntersections.push(intersectionPoint)\n      }\n    })\n    // we can abort if we didn't find an intersection on the left hand side\n    if (topIntersections.length === 0) {\n      return result\n    }\n\n    // sort the intersection point and get the closest point to the tested inputPoint\n    // In this case it is the point with the greates X coordinate\n    //\n    topIntersections.sort(function (a, b) {\n      return b.y - a.y\n    })\n\n\n    // Calculate the intersections points p(i) of all right hand side edges of the\n    // bounding boxes and the ray from the center of the drag&drop object to the\n    // left edge of the canvas\n    //\n    //                 Drag&Drop             bbox of any\n    //                 Figure                figure\n    //\n    //                 ........\n    //                 .      .\n    //                 .      .             ...........\n    //                 .   +<-------------->X         |\n    //                 .      .         p(i)|         |\n    //                 .      .             |         |\n    //                 ........             |         |\n    //                                      ...........\n    //\n    var bottomIntersections = []\n    var bottomInputPoint = center.clone()\n    bottomInputPoint.y = Number.MAX_SAFE_INTEGER\n    this.bounds.forEach(function (bbox) {\n      intersectionPoint = draw2d.shape.basic.Line.intersection(bbox.getTopLeft(), bbox.getTopRight(), center, bottomInputPoint)\n      if (intersectionPoint !== null) {\n        intersectionPoint.causedBBox = bbox\n        bottomIntersections.push(intersectionPoint)\n      }\n    })\n    // we can abort if we didn't find an intersection on the right hand side\n    if (bottomIntersections.length === 0) {\n      return result\n    }\n\n    // sort the intersection point and get the closest point to the tested inputPoint\n    // In this case it is the point with the greates X coordinate\n    //\n    bottomIntersections.sort(function (a, b) {\n      return a.y - b.y\n    })\n\n\n    // Snap the point (S) between the two founded intersections\n    // p(i1) and p(i2)\n    //\n    // BBox FigureA     Drag&Drop           BBox of FigureB\n    //                  Figure\n    //\n    // ....+           ........\n    //     |           .      .\n    // .   |p(i1)      .   S  .             ...........\n    // .   X<------------->X<-------------->X         |\n    // .   |           .      .        p(i2)|         |\n    // ....+           .      .             |         |\n    //                 ........             |         |\n    //                                      ...........\n    //\n    var snappedRect = boundingBox.clone()\n    var diff = ((topIntersections[0].y + bottomIntersections[0].y) / 2) - center.y\n\n    snappedRect.y += diff\n\n    return {\n      snapped: Math.abs(diff) < this.SNAP_THRESHOLD,\n      snappedRect: snappedRect,\n      diff: diff,\n      topSide: topIntersections[0],\n      bottomSide: bottomIntersections[0]\n    }\n  },\n\n  populateBounds: function () {\n    var selection = this.canvas.getSelection().getAll(true)\n    var bounds = this.bounds = []\n\n    var figures = this.canvas.getFigures()\n    figures.each(function (index, figure) {\n      if (!selection.contains(figure)) {\n        bounds.push(figure.getBoundingBox())\n      }\n    })\n  },\n\n  showHorizontalGuides: function (causedFigure, constraint) {\n    if (this.horizontalGuideLines != null) {\n      this.horizontalGuideLines.stop()\n      this.horizontalGuideLines.remove()\n    }\n\n    var snapTopLeft = constraint.snappedRect.getTopLeft()\n    var snapTopRight = constraint.snappedRect.getTopRight()\n    var y = ((Math.min(constraint.leftSide.causedBBox.getTopRight().y, Math.min(constraint.rightSide.causedBBox.y, causedFigure.getY())) - 50) | 0) + 0.5\n\n    this.canvas.paper.setStart()\n\n    // Vertical lines from left to the right order\n    //\n    this.canvas.paper.path(\"M \" + ((constraint.leftSide.x | 0) + 0.5) + \" \" + y + \" L \" + ((constraint.leftSide.x | 0) + 0.5) + \" \" + constraint.leftSide.y)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n\n    this.canvas.paper.path(\"M \" + ((snapTopLeft.x | 0) + 0.5) + \" \" + y + \" L \" + ((snapTopLeft.x | 0) + 0.5) + \" \" + snapTopLeft.y)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n\n    this.canvas.paper.path(\"M \" + ((snapTopRight.x | 0) + 0.5) + \" \" + y + \" L \" + ((snapTopRight.x | 0) + 0.5) + \" \" + snapTopRight.y)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n\n    this.canvas.paper.path(\"M \" + ((constraint.rightSide.x | 0) + 0.5) + \" \" + y + \" L \" + ((constraint.rightSide.x | 0) + 0.5) + \" \" + constraint.rightSide.y)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n\n\n    // horizontal lines\n    //\n    this.canvas.paper.path(\"M \" + (constraint.leftSide.x) + \" \" + (y + 5) + \" L \" + (snapTopLeft.x) + \" \" + (y + 5)).attr({\n      \"stroke\": this.lineColor.rgba(),\n      \"stroke-width\": 1\n    })\n    this.canvas.paper.path(\"M \" + (constraint.rightSide.x) + \" \" + (y + 5) + \" L \" + (snapTopRight.x) + \" \" + (y + 5)).attr({\n      \"stroke\": this.lineColor.rgba(),\n      \"stroke-width\": 1\n    })\n\n    // 4 arrow heads starting on the left side and add one by one\n    //\n    this.canvas.paper.path(\n      \" M \" + (constraint.leftSide.x + 5) + \" \" + (y)\n      + \" L \" + (constraint.leftSide.x) + \" \" + (y + 5)\n      + \" L \" + (constraint.leftSide.x + 5) + \" \" + (y + 10))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.canvas.paper.path(\n      \" M \" + (snapTopLeft.x - 5) + \" \" + (y)\n      + \" L \" + (snapTopLeft.x) + \" \" + (y + 5)\n      + \" L \" + (snapTopLeft.x - 5) + \" \" + (y + 10))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n\n    this.canvas.paper.path(\n      \" M \" + (snapTopRight.x + 5) + \" \" + (y)\n      + \" L \" + (snapTopRight.x) + \" \" + (y + 5)\n      + \" L \" + (snapTopRight.x + 5) + \" \" + (y + 10))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n\n    this.canvas.paper.path(\n      \" M \" + (constraint.rightSide.x - 5) + \" \" + (y)\n      + \" L \" + (constraint.rightSide.x) + \" \" + (y + 5)\n      + \" L \" + (constraint.rightSide.x - 5) + \" \" + (y + 10))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n\n    this.horizontalGuideLines = this.canvas.paper.setFinish()\n    this.horizontalGuideLines.toFront()\n  },\n\n  /**\n   *\n   * Hide the horizontal snaping guides\n   *\n   * @param {Boolean} fast\n   */\n  hideHorizontalGuides: function (fast) {\n    if (this.horizontalGuideLines == null) {\n      return\n    }\n\n    if (fast === true) {\n      if (this.horizontalGuideLines !== null) {\n        this.horizontalGuideLines.remove()\n        this.horizontalGuideLines = null\n      }\n    }\n    else {\n      this.horizontalGuideLines.animate(\n        {opacity: 0.1},\n        this.FADEOUT_DURATION,\n        () => {\n          if (this.horizontalGuideLines !== null) {\n            this.horizontalGuideLines.remove()\n            this.horizontalGuideLines = null\n          }\n        }\n      )\n    }\n  },\n\n  showVerticalGuides: function (causedFigure, constraint) {\n    if (this.verticalGuideLines != null) {\n      this.verticalGuideLines.stop()\n      this.verticalGuideLines.remove()\n    }\n\n    var snapTopRight = constraint.snappedRect.getTopRight()\n    var snapBottomRight = constraint.snappedRect.getBottomRight()\n    var x = ((Math.max(constraint.topSide.causedBBox.getRight(), Math.max(constraint.bottomSide.causedBBox.getRight(), causedFigure.getX())) + 40) | 0) + 0.5\n\n    this.canvas.paper.setStart()\n\n    // Vertical lines from left to the right order\n    //\n    this.canvas.paper.path(\"M \" + x + \" \" + ((constraint.topSide.y | 0) + 0.5) + \" L \" + ((constraint.topSide.x | 0) + 0.5) + \" \" + ((constraint.topSide.y | 0) + 0.5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n    this.canvas.paper.path(\"M \" + x + \" \" + ((snapTopRight.y | 0) + 0.5) + \" L \" + ((snapTopRight.x | 0) + 0.5) + \" \" + ((snapTopRight.y | 0) + 0.5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n    this.canvas.paper.path(\"M \" + x + \" \" + ((snapBottomRight.y | 0) + 0.5) + \" L \" + ((snapBottomRight.x | 0) + 0.5) + \" \" + ((snapBottomRight.y | 0) + 0.5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n    this.canvas.paper.path(\"M \" + x + \" \" + ((constraint.bottomSide.y | 0) + 0.5) + \" L \" + ((constraint.bottomSide.x | 0) + 0.5) + \" \" + ((constraint.bottomSide.y | 0) + 0.5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n\n    // horizontal lines\n    //\n    this.canvas.paper.path(\"M \" + (x - 5) + \" \" + (((constraint.topSide.y | 0) + 0.5)) + \" L \" + (x - 5) + \" \" + ((snapTopRight.y | 0) + 0.5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n    this.canvas.paper.path(\"M \" + (x - 5) + \" \" + (((constraint.bottomSide.y | 0) + 0.5)) + \" L \" + (x - 5) + \" \" + ((snapBottomRight.y | 0) + 0.5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n\n    // 4 arrow heads starting on the left side and add one by one\n    //\n    this.canvas.paper.path(\n      \" M \" + (x - 10) + \" \" + (constraint.topSide.y + 5)\n      + \" L \" + (x - 5) + \" \" + (constraint.topSide.y)\n      + \" L \" + (x) + \" \" + (constraint.topSide.y + 5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.canvas.paper.path(\n      \" M \" + (x - 10) + \" \" + (snapTopRight.y - 5)\n      + \" L \" + (x - 5) + \" \" + (snapTopRight.y)\n      + \" L \" + (x) + \" \" + (snapTopRight.y - 5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.canvas.paper.path(\n      \" M \" + (x - 10) + \" \" + (snapBottomRight.y + 5)\n      + \" L \" + (x - 5) + \" \" + (snapBottomRight.y)\n      + \" L \" + (x) + \" \" + (snapBottomRight.y + 5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.canvas.paper.path(\n      \" M \" + (x - 10) + \" \" + (constraint.bottomSide.y - 5)\n      + \" L \" + (x - 5) + \" \" + (constraint.bottomSide.y)\n      + \" L \" + (x) + \" \" + (constraint.bottomSide.y - 5))\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.verticalGuideLines = this.canvas.paper.setFinish()\n    this.verticalGuideLines.toFront()\n  },\n\n  hideVerticalGuides: function () {\n    if (this.verticalGuideLines == null) {\n      return //silently\n    }\n\n    this.verticalGuideLines.animate(\n      {opacity: 0.1},\n      this.FADEOUT_DURATION,\n      () => {\n        if (this.verticalGuideLines !== null) {\n          this.verticalGuideLines.remove()\n          this.verticalGuideLines = null\n        }\n      }\n    )\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Snapping is based on the existing children of a container. When snapping a shape,\n * the edges of the bounding box will snap to edges of other rectangles generated\n * from the children of the given canvas.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.SnapToEditPolicy\n */\ndraw2d.policy.canvas.SnapToVerticesEditPolicy = draw2d.policy.canvas.SnapToEditPolicy.extend(\n  /** @lends draw2d.policy.canvas.SnapToVerticesEditPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.SnapToVerticesEditPolicy\",\n\n  SNAP_THRESHOLD: 3,\n  FADEOUT_DURATION: 300,\n\n  /**\n   * Creates a new constraint policy for snap to geometry\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.constraints = null\n    this.vline = null\n    this.hline = null\n  },\n\n\n  /**\n   * \n   *\n   * @param {draw2d.Figure} figure the shape below the mouse or null\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onMouseUp: function (figure, x, y, shiftKey, ctrlKey) {\n    this.constraints = null\n    this.hideVerticalLine()\n    this.hideHorizontalLine()\n  },\n\n  /**\n   * \n   * Adjust the coordinates to the canvas neighbours\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Figure} figure the figure to snap\n   * @param {draw2d.geo.Point} modifiedPos the already modified position of the figure (e.g. from an another Policy)\n   * @param {draw2d.geo.Point} originalPos the original requested position of the figure\n   *\n   * @returns {draw2d.geo.Point} the constraint position of the figure\n   */\n  snap: function (canvas, figure, modifiedPos, originalPos) {\n    // can only handle PolyLies at the moment\n    //\n    if (!(figure instanceof draw2d.shape.basic.VertexResizeHandle)) {\n      return modifiedPos\n    }\n\n    var allowXChanges = modifiedPos.x === originalPos.x\n    var allowYChanges = modifiedPos.y === originalPos.y\n\n    // Coordinates already snapped to an x/y coordinate.\n    // Don't change them and in this case no further calculation is required.\n    //\n    if (!allowXChanges && !allowYChanges) {\n      return modifiedPos\n    }\n\n    var result = modifiedPos.clone()\n    var correction = this.getCorrectionFor(figure, originalPos)\n\n    if (allowXChanges && (correction.vertical.x !== Number.MAX_SAFE_INTEGER)) {\n      result.x = correction.vertical.x\n      this.showVerticalLine(originalPos, correction.vertical)\n    }\n    else {\n      this.hideVerticalLine()\n    }\n\n    if (allowYChanges && (correction.horizontal.y !== Number.MAX_SAFE_INTEGER)) {\n      result.y = correction.horizontal.y\n      this.showHorizontalLine(originalPos, correction.horizontal)\n    }\n    else {\n      this.hideHorizontalLine()\n    }\n\n\n    return result\n  },\n\n\n  getCorrectionFor: function (vertexResizeHandle, point) {\n    var _this = this\n    if (this.constraints === null) {\n      this.constraints = []\n\n      var lines = this.canvas.getLines()\n      lines.each(function (i, line) {\n        line.getVertices().each(function (ii, vertex) {\n          if (vertexResizeHandle.index !== ii || vertexResizeHandle.owner !== line)\n            _this.constraints.push(vertex)\n        })\n      })\n    }\n\n    var SNAP = this.SNAP_THRESHOLD\n    var vertical = {x: Number.MAX_SAFE_INTEGER, y: Number.MAX_SAFE_INTEGER, diffy: Number.MAX_SAFE_INTEGER}\n    var horizontal = {x: Number.MAX_SAFE_INTEGER, y: Number.MAX_SAFE_INTEGER, diffx: Number.MAX_SAFE_INTEGER}\n    var diffx, diffy\n\n\n    for (var i = 0; i < this.constraints.length; i++) {\n      var entry = this.constraints[i]\n\n      diffx = Math.abs(point.x - entry.x)\n      diffy = Math.abs(point.y - entry.y)\n      // we found a possible candidate for the vertical snap line\n      //\n      if (diffx < SNAP) {\n        if (diffy < vertical.diffy) {\n          vertical = {x: entry.x, y: entry.y, diffy: diffy}\n        }\n      }\n\n\n      if (diffy < SNAP) {\n        if (diffx < horizontal.diffx) {\n          horizontal = {x: entry.x, y: entry.y, diffx: diffx}\n        }\n      }\n\n    }\n    return {vertical: vertical, horizontal: horizontal}\n  },\n\n  showVerticalLine: function (originalPos, snappedPos) {\n    if (this.vline != null) {\n      this.vline.stop()\n      this.vline.remove()\n    }\n\n\n    var maxLength = this.canvas.getHeight()\n    var x = (snappedPos.x | 0) + 0.5 // force a .5 number to avoid subpixel rendering. Blurry lines...\n    this.canvas.paper.setStart()\n    this.canvas.paper.path(\"M \" + x + \" 0 l 0 \" + maxLength)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n    this.canvas.paper.path(\"M \" + x + \" \" + originalPos.y + \" L \" + x + \" \" + snappedPos.y)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.vline = this.canvas.paper.setFinish()\n    this.vline.toBack()\n  },\n\n  hideVerticalLine: function () {\n    if (this.vline == null) {\n      return\n    }\n    this.vline.animate(\n      {opacity: 0.1},\n      this.FADEOUT_DURATION,\n      () => {\n        if (this.vline !== null) {\n          this.vline.remove()\n          this.vline = null\n        }\n      }\n    )\n  },\n\n  showHorizontalLine: function (originalPos, snappedPos) {\n    if (this.hline != null) {\n      this.hline.stop()\n      this.hline.remove()\n    }\n\n    var maxLength = this.canvas.getWidth()\n    var y = (snappedPos.y | 0) + 0.5 // force a .5 number to avoid subpixel rendering. Blurry lines...\n\n    this.canvas.paper.setStart()\n    this.canvas.paper.path(\"M 0 \" + y + \" l \" + maxLength + \" 0\")\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1, \"stroke-dasharray\": \". \"})\n    this.canvas.paper.path(\"M \" + originalPos.x + \" \" + y + \" L \" + snappedPos.x + \" \" + y)\n      .attr({\"stroke\": this.lineColor.rgba(), \"stroke-width\": 1})\n\n    this.hline = this.canvas.paper.setFinish()\n    this.hline.toBack()\n\n  },\n\n  hideHorizontalLine: function () {\n    if (this.hline === null) {\n      return //silently\n    }\n    this.hline.animate(\n      {opacity: 0.1},\n      this.FADEOUT_DURATION,\n      () => {\n        if (this.hline !== null) {\n          this.hline.remove()\n          this.hline = null\n        }\n      }\n    )\n  }\n\n})\n","import draw2d from '../../packages'\nimport {Tweenable} from \"shifty\"\n\n\n/**\n * @class\n * Zoom support for a canvas. Use the mouse wheel and the shift key to zoom in/out.\n *\n *\n * @example\n *\n *    canvas.installEditPolicy(new draw2d.policy.canvas.WheelZoomPolicy());\n *    let shape =  new draw2d.shape.basic.Text({text:\"Use the mouse wheel + SHIFT to zoom\"});\n *\n *    canvas.add(shape,40,10);\n *\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.CanvasPolicy\n * @since 5.8.0\n */\ndraw2d.policy.canvas.WheelZoomPolicy = draw2d.policy.canvas.ZoomPolicy.extend(\n  /** @lends draw2d.policy.canvas.WheelZoomPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.WheelZoomPolicy\",\n\n  /**\n   */\n  init: function () {\n    this._super()\n\n    this.center = null\n    this.debouncedZoomedCallback = this._debounce(() => {\n      let canvas = this.canvas\n      if (canvas !== null) {\n        canvas.fireEvent(\"zoomed\", {value: canvas.zoomFactor})\n      }\n      this.center = null\n    }, 200)\n  },\n\n  onInstall: function (canvas) {\n    this._super(canvas)\n    canvas.setZoom(1)\n    canvas.__wheelZoom = 1\n  },\n\n  onUninstall: function (canvas) {\n    this._super(canvas)\n\n    // cleanup the canvas object and remove custom properties\n    //\n    delete canvas.__wheelZoom\n  },\n\n\n  /**\n   *\n   * called if the user uses the mouse wheel.\n   *\n   *\n   * @param wheelDelta\n   * @param {Number} x the x coordinate of the event\n   * @param {Number} y the y coordinate of the event\n   * @param shiftKey\n   * @param ctrlKey\n   * @since 5.8.0\n   * @template\n   * @returns {Boolean} return <b>false</b> to preven tthe default event operation (e.g. scrolling)\n   */\n  onMouseWheel: function (wheelDelta, x, y, shiftKey, ctrlKey) {\n    // mouse wheel is only supported if the user presses the shift key.\n    // normally the canvas scrolls during mouseWheel usage.\n    //\n    if (shiftKey === false) {\n      return true\n    }\n\n    wheelDelta = wheelDelta / 1024\n\n    let newZoom = ((Math.min(5, Math.max(0.1, this.canvas.zoomFactor + wheelDelta)) * 10000 | 0) / 10000)\n    if (this.center === null) {\n      let client = this.canvas.fromCanvasToDocumentCoordinate(x, y)\n\n      this.center = {\n        x: x,\n        y: y,\n        clientX: client.x,\n        clientY: client.y\n      }\n    }\n    this._zoom(newZoom, this.center)\n    this.debouncedZoomedCallback()\n\n    return false\n  },\n\n  /**\n   *\n   * Set the new zoom level of the canvas.\n   *\n   * @param zoomFactor\n   * @param animated\n   */\n  setZoom: function (zoomFactor, animated) {\n\n    // determine the center of the current canvas. We try to keep the\n    // current center during zoom operation\n    //\n    let scrollTop = this.canvas.getScrollTop()\n    let scrollLeft = this.canvas.getScrollLeft()\n    let scrollWidth = this.canvas.getScrollArea().width()\n    let scrollHeight = this.canvas.getScrollArea().height()\n    let centerY = scrollTop + (scrollHeight / 2) * this.canvas.zoomFactor\n    let centerX = scrollLeft + (scrollWidth / 2) * this.canvas.zoomFactor\n\n    if (animated) {\n      let myTweenable = new Tweenable()\n      myTweenable.tween({\n        from: {'x': this.canvas.zoomFactor},\n        to: {'x': zoomFactor},\n        duration: 300,\n        easing: \"easeOutSine\",\n        step: params => {\n          this._zoom(params.x, centerX, centerY)\n        },\n        finish: state => {\n          this.debouncedZoomedCallback()\n        }\n      })\n    }\n    else {\n      this._zoom(zoomFactor, {x: centerX, y: centerY})\n      this.debouncedZoomedCallback()\n    }\n  },\n\n  /**\n   *\n   *\n   * @param {Number} zoom\n   * @param {draw2d.geo.Point} center\n   * @private\n   */\n  _zoom: function (zoom, center) {\n    let canvas = this.canvas\n\n    if (zoom === canvas.zoomFactor) {\n      return\n    }\n\n    canvas.zoomFactor = zoom\n\n    canvas.paper.setViewBox(0, 0, canvas.initialWidth, canvas.initialHeight)\n    // Change the width and the height attributes manually through DOM\n    // unfortunately the raphaelJS 'setSize' method changes the viewBox as well and this is unwanted in this case\n    //\n    canvas.html\n      .find(\"svg\")\n      .attr({\n        'width': canvas.initialWidth / zoom,\n        'height': canvas.initialHeight / zoom\n      })\n\n\n    // try to keep the document position to the given client position\n    //\n    if (center.clientX) {\n      let coordsAfter = canvas.fromCanvasToDocumentCoordinate(center.x, center.y)\n      canvas.scrollTo(this.canvas.getScrollTop() - (center.clientY - coordsAfter.y), canvas.getScrollLeft() - (center.clientX - coordsAfter.x))\n    }\n\n    canvas.fireEvent(\"zoom\", {value: canvas.zoomFactor})\n  },\n\n\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds. If `immediate` is passed, trigger the function on the\n  // leading edge, instead of the trailing.\n  _debounce: function (func, wait, immediate) {\n    let timeout\n    return () => {\n      let context = this, args = arguments\n      let later = () => {\n        timeout = null\n        if (!immediate) func.apply(context, args)\n      }\n      let callNow = immediate && !timeout\n      clearTimeout(timeout)\n      timeout = setTimeout(later, wait)\n      if (callNow) func.apply(context, args)\n    }\n  }\n})\n","import draw2d from '../../packages'\nimport {Tweenable} from \"shifty\"\n\n\n/**\n * @class\n * Generic zoom policy installable into a canvas object.\n * This is the legacy implementation of the very first zooming in\n * Draw2D. You can use this implementation if you want backward compatible.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.canvas.CanvasPolicy\n * @since 5.8.0\n */\ndraw2d.policy.canvas.ZoomPolicy = draw2d.policy.canvas.CanvasPolicy.extend(\n  /** @lends draw2d.policy.canvas.ZoomPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.canvas.ZoomPolicy\",\n\n  /**\n   */\n  init: function () {\n    this._super()\n  },\n\n  onInstall: function (canvas) {\n    this._super(canvas)\n    canvas.setZoom(1)\n  },\n\n  onUninstall: function (canvas) {\n    this._super(canvas)\n  },\n\n  /** \n   * Set the new zoom factor for the canvas. The value must be between [0.01..10]\n   *\n   *     // you can register an eventhandler to listen to the zoom factor of the canvas.\n   *    //\n   *     canvas.on(\"zoom\", function(emitterFigure, zoomData){\n   *         alert(\"canvas zoomed to:\"+zoomData.factor);\n   *     });\n   *\n   * @param {Number} zoomFactor new zoom factor.\n   * @param {Boolean} [animated] set it to true for smooth zoom in/out\n   **/\n  setZoom: function (zoomFactor, animated) {\n    let canvas = this.canvas\n\n    let _zoom = function (z) {\n      canvas.zoomFactor = Math.min(Math.max(0.01, z), 10)\n\n      let viewBoxWidth = (canvas.initialWidth * (canvas.zoomFactor)) | 0\n      let viewBoxHeight = (canvas.initialHeight * (canvas.zoomFactor)) | 0\n\n      canvas.paper.setViewBox(0, 0, viewBoxWidth, viewBoxHeight)\n\n      canvas.fireEvent(\"zoom\", {value: canvas.zoomFactor})\n    }\n\n    if (animated) {\n      let myTweenable = new Tweenable()\n      myTweenable.tween({\n        from: {'x': canvas.zoomFactor},\n        to: {'x': zoomFactor},\n        duration: 300,\n        easing: \"easeOutSine\",\n        step: params => _zoom(params.x),\n        finish: state => canvas.fireEvent(\"zoomed\", {value: canvas.zoomFactor})\n      })\n    }\n    else {\n      _zoom(zoomFactor)\n      canvas.fireEvent(\"zoomed\", {value: canvas.zoomFactor})\n    }\n  }\n})\n","\n/**\n * @class\n *\n * The ClickConnectionCreatePolicy can be installed into the canvas to override the\n * default connection crate behaviour. Normally you can create connections by drag&drop a port.\n *\n * With this policy you can route the connection during creation.\n *\n * Creates a connection by clicking on a port.\n * <ul>\n *  <li> click on the first port</li>\n *  <li> click within the canvas to add additional vertices</li>\n *  <li> click on the target port to draw the connection</li>\n *  <li> press ESC to abort the operation (didn't work within this JSDoc)</li>\n * </ul>\n * <br>\n * <br>\n * <b>The generated connections didn't have any orthogonal constraints nor any other restrictions or guidance.</b>\n * <br>\n * <br>\n *\n *\n *\n * @example\n *\n *    // Override the default connection creation.\n *    //\n *    canvas.installEditPolicy( new draw2d.policy.connection.ClickConnectionCreatePolicy());\n *\n *    // create and add two Node which contains Ports (In and OUT)\n *    //\n *    var start = new draw2d.shape.node.Start({x:50, y:50});\n *    var endNode   = new draw2d.shape.node.End({x:200, y:70});\n *\n *    // add the two nodes to the canvas\n *    //\n *    canvas.add( start);\n *    canvas.add( endNode);\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.connection.ConnectionCreatePolicy\n * @since 6.1.0\n */\nimport draw2d from '../../packages'\n\ndraw2d.policy.connection.ClickConnectionCreatePolicy = draw2d.policy.connection.ConnectionCreatePolicy.extend(\n    /** @lends draw2d.policy.connection.ClickConnectionCreatePolicy.prototype */\n    {\n    \n    NAME: \"draw2d.policy.connection.ClickConnectionCreatePolicy\",\n    \n    /**\n     *\n     * Creates a new connection create policy instance\n     */\n    init: function(attr, setter, getter)\n    {\n        this._super( attr, setter, getter);\n\n        this.port1 = null;\n        this.beeline = null;\n        this.pulse= null;\n        this.tempConnection = null;\n\n        this.vertices = [];\n    },\n\n    /**\n     * \n     * Called by the canvas if the user click on a figure.\n     *\n     * @param {draw2d.Figure} the figure under the click event. Can be null\n     * @param {Number} x the x coordinate of the mouse during the click event\n     * @param {Number} y the y coordinate of the mouse during the click event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @since 6.1.0\n     */\n    onClick: function(figure, x, y, shiftKey, ctrlKey)\n    {\n        var _this = this;\n        var port = figure;\n\n        if(port === null && this.port1 === null){\n            return;\n        }\n\n        // nothing found at all\n        //\n        if(port===null){\n            this.vertices.push(new draw2d.geo.Point(x,y));\n            this.beeline.setStartPosition(x,y);\n            this.tempConnection.setVertices(this.vertices);\n            if(this.pulse!==null) {\n                this.pulse.remove();\n                this.pulse = null;\n            }\n            this.ripple(x,y,0);\n            return;\n        }\n\n        //just consider ports\n        //\n        if(!(port instanceof draw2d.Port)){\n            return;\n        }\n\n        // start connection create by selection the start port\n        //\n        if(this.port1===null){\n            var canvas = port.getCanvas();\n            this.port1 = port;\n            this.vertices.push(port.getAbsolutePosition());\n            this.beeline = new draw2d.shape.basic.Line({\n                start: this.port1.getAbsolutePosition(),\n                end: this.port1.getAbsolutePosition(),\n                dasharray:\"- \",\n                color:\"#2C70FF\"\n            });\n\n            this.beeline.hide= function(){\n                _this.beeline.setCanvas(null);\n            };\n\n            this.beeline.show= function(canvas){\n                _this.beeline.setCanvas(canvas);\n                _this.beeline.shape.toFront();\n            };\n            this.beeline.show(canvas);\n\n            this.tempConnection = new draw2d.shape.basic.PolyLine({\n                start: this.port1.getAbsolutePosition(),\n                end: this.port1.getAbsolutePosition(),\n                stroke:2,\n                color:\"#2C70FF\"\n            });\n\n            this.tempConnection.hide= function(){\n                _this.tempConnection.setCanvas(null);\n            };\n\n            this.tempConnection.show= function(canvas){\n                _this.tempConnection.setCanvas(canvas);\n                _this.tempConnection.shape.toFront();\n            };\n            this.tempConnection.show(canvas);\n            this.tempConnection.setVertices([this.port1.getAbsolutePosition(),this.port1.getAbsolutePosition()]);\n\n            var a= function() {\n                _this.tempConnection.shape.animate({\"stroke-width\" : 2}, 800, b);\n            };\n            var b=function() {\n                _this.tempConnection.shape.animate({\"stroke-width\":1}, 800, a);\n            };\n            a();\n\n            var pos = port.getAbsolutePosition();\n            this.pulse =this.ripple(pos.x, pos.y, 1);\n            return;\n        }\n\n\n        var possibleTarget = port.delegateTarget(this.port1);\n\n        if(!(possibleTarget instanceof draw2d.Port)){\n            return; // silently\n        }\n\n        var request = new draw2d.command.CommandType(draw2d.command.CommandType.CONNECT);\n        request.source = this.port1;\n        request.target = port;\n\n        var command = null;\n        if(this.port1 instanceof draw2d.InputPort) {\n             command = this.port1.createCommand(request);\n        }\n        else{\n             command = port.createCommand(request);\n        }\n\n        if(command!==null){\n            this.vertices.push(port.getPosition());\n            command.setConnection( this.createConnection());\n            figure.getCanvas().getCommandStack().execute(command);\n            this.beeline.hide();\n            this.tempConnection.hide();\n            if(this.pulse!==null) {\n                this.pulse.remove();\n                this.pulse = null;\n            }\n            this.beeline = null;\n            this.port1=null;\n            this.vertices = [];\n        }\n\n    },\n\n\n    /**\n     * \n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} x the x-coordinate of the mouse event\n     * @param {Number} y the y-coordinate of the mouse event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onMouseMove: function(canvas, x, y, shiftKey, ctrlKey)\n    {\n        if(this.beeline!==null){\n            this.beeline.setEndPosition(x,y);\n        }\n    },\n\n    /**\n     * \n     * Callback if the user press a key down\n     *\n     * @param {draw2d.Canvas} canvas the related canvas\n     * @param {Number} keyCode the pressed key\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     **/\n    onKeyDown: function(canvas, keyCode, shiftKey, ctrlKey)\n    {\n        var KEYCODE_ENTER = 13;\n        var KEYCODE_ESC = 27;\n        if (keyCode === KEYCODE_ESC && this.beeline!==null){\n            this.beeline.hide();\n            this.tempConnection.hide();\n            this.beeline = null;\n            this.port1=null;\n            this.vertices = [];\n            if(this.pulse!=null) {\n                this.pulse.remove();\n                this.pulse=null;\n            }\n        }\n    },\n\n\n    createConnection: function()\n    {\n        var connection = this._super();\n        if(this.vertices.length===2){\n            connection.setRouter(new draw2d.layout.connection.DirectRouter());\n        }\n        else {\n            connection.setRouter(new draw2d.layout.connection.VertexRouter());\n            connection.setVertices(this.vertices);\n        }\n        connection.setRadius(10);\n        return connection;\n    }\n\n\n\n});\n\n","\n/**\n * @class\n * A composed connection create policy. Use this to install more than one\n * ConnectionCreatePolicy into the canvas. Normally it is not allowed to install\n * more than one policy from the same type.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.connection.ConnectionCreatePolicy\n */\nimport draw2d from '../../packages'\n\ndraw2d.policy.connection.ComposedConnectionCreatePolicy = draw2d.policy.connection.ConnectionCreatePolicy.extend(\n    /** @lends draw2d.policy.connection.ComposedConnectionCreatePolicy.prototype */\n    {\n    \n    NAME: \"draw2d.policy.connection.ComposedConnectionCreatePolicy\",\n\n    /**\n     *\n     * Creates a new connection create policy instance\n     *\n     * @param {array} policies the policies to use\n     */\n    init: function( policies )\n    {\n        this.policies = policies;\n        this._super();\n    },\n\n    onMouseDown: function()\n    {\n        let _arg = arguments;\n        this.policies.forEach((p)=>{\n            p.onMouseDown.apply(p,_arg);\n        });\n    },\n    onMouseDrag: function()\n    {\n      let _arg = arguments;\n      this.policies.forEach((p)=>{\n            p.onMouseDrag.apply(p,_arg);\n        });\n    },\n\n    onMouseUp: function()\n    {\n      let _arg = arguments;\n      this.policies.forEach((p)=>{\n            p.onMouseUp.apply(p,_arg);\n        });\n    },\n\n    onClick: function()\n    {\n      let _arg = arguments;\n      this.policies.forEach((p)=>{\n            p.onClick.apply(p,_arg);\n        });\n    },\n    onMouseMove: function()\n    {\n      let _arg = arguments;\n      this.policies.forEach((p)=>{\n            p.onMouseMove.apply(p,_arg);\n        });\n    },\n\n    /**\n     * @inheritDoc\n     **/\n    onKeyUp: function(canvas, keyCode, shiftKey, ctrlKey)\n    {\n      let _arg = arguments;\n      this.policies.forEach((p)=>{\n            p.onKeyUp.apply(p,_arg);\n        });\n    },\n\n    /**\n     * @inheritDoc\n     **/\n    onKeyDown: function(canvas, keyCode, shiftKey, ctrlKey)\n    {\n      let _arg = arguments;\n      this.policies.forEach((p)=>{\n            p.onKeyDown.apply(p,_arg);\n        });\n    },\n\n    /**\n     * \n     * Called if the policy is installed into the canvas.\n     *\n     * @param {draw2d.Canvas} canvas\n     */\n    onInstall: function(canvas)\n    {\n      let _arg = arguments;\n      this.policies.forEach((p)=>{\n            p.onInstall.apply(p,_arg);\n        });\n    },\n\n    /**\n     * \n     * Called if the policy is deinstalled from the canvas\n     *\n     * @param {draw2d.Canvas} canvas\n     */\n    onUninstall: function(canvas)\n    {\n      let _arg = arguments;\n      this.policies.forEach((p)=>{\n            p.onUninstall.apply(p,_arg);\n        });\n    }\n\n});\n\n","\n/**\n * @class\n * Base class for connection creation by user interaction.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.canvas.KeyboardPolicy\n */\nimport draw2d from '../../packages'\n\ndraw2d.policy.connection.ConnectionCreatePolicy = draw2d.policy.canvas.KeyboardPolicy.extend(\n    /** @lends draw2d.policy.connection.ConnectionCreatePolicy.prototype */\n    {\n    \n    NAME: \"draw2d.policy.connection.ConnectionCreatePolicy\",\n\n    /**\n     *\n     * Creates a new connection create policy instance\n     */\n    init: function(attr, setter, getter)\n    {\n        this._super( attr,setter,getter);\n    },\n\n\n    /**\n     * \n     * Factory method to create the connection to insert.\n     *\n     * @returns {draw2d.Connection}\n     * @template\n     */\n    createConnection:function()\n    {\n        return new draw2d.Connection({\n            router: new draw2d.layout.connection.DirectRouter()\n        });\n    },\n\n\n    ripple: function(x,y, type)\n    {\n        switch(type){\n            case 0:\n                var circle = this.canvas.paper.circle(x, y, 3, 3).attr({fill: null, stroke:\"#d0d0ff\"});\n                var anim = Raphael.animation(\n                    {transform: \"s6\", opacity:0.0, \"stroke-width\":3 },\n                    500,\n                    \"linear\",\n                    function(){circle.remove()}\n                );\n                circle.animate(anim);\n                // return an emmpty raphael.set. The circle removes itself after animation is done\n                //\n                return this.canvas.paper.set();\n                break;\n            case 1:\n                var circle1 = this.canvas.paper.circle(x, y, 3, 3).attr({fill: null, stroke:\"#3f72bf\"});\n                var circle2 = this.canvas.paper.circle(x, y, 3, 3).attr({fill: null, stroke:\"#ff0000\"});\n                var anim1 = Raphael.animation(\n                    {transform: \"s6\", opacity:0.0, \"stroke-width\":1 },\n                    1200,\n                    \"linear\"\n                ).repeat(Infinity);\n                circle1.animate(anim1);\n                var anim2 = Raphael.animation(\n                    {transform: \"s12\", opacity:0.0, \"stroke-width\":4 },\n                    500,\n                    \"linear\",\n                    function(){circle2.remove()}\n                );\n                circle2.animate(anim2);\n\n                // return the \"circle1\". This shape must be remove by the caller\n                // \"circle2\" is removed automaticly\n                //\n                return circle1;\n                break;\n        }\n    }\n\n\n});\n\n","\n/**\n * @class\n *\n * The DragConnectionCreatePolicy is the default configuration for connection creation.\n * You must drag a port and drop them onto another port to create connection.\n *\n * Creates a connection by drag&drop on a port.\n * <ul>\n *  <li> click on the first port</li>\n *  <li> drag it to the target port</li>\n *  <li> drop it onto the target</li>\n * </ul>\n * <br>\n * <br>\n *\n *\n *\n * @example\n *\n *    // Override the default connection creation.\n *    //\n *    canvas.installEditPolicy( new draw2d.policy.connection.DragConnectionCreatePolicy());\n *\n *    // create and add two Node which contains Ports (In and OUT)\n *    //\n *    var start = new draw2d.shape.node.Start({x:50, y:50});\n *    var endNode   = new draw2d.shape.node.End({x:200, y:70});\n *\n *    // add the two nodes to the canvas\n *    //\n *    canvas.add( start);\n *    canvas.add( endNode);\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.connection.ConnectionCreatePolicy\n */\nimport draw2d from '../../packages'\n\ndraw2d.policy.connection.DragConnectionCreatePolicy = draw2d.policy.connection.ConnectionCreatePolicy.extend(\n    /** @lends draw2d.policy.connection.DragConnectionCreatePolicy.prototype */\n    {\n    \n    NAME: \"draw2d.policy.connection.DragConnectionCreatePolicy\",\n    \n    /**\n     *\n     * Creates a new connection create policy instance\n     */\n    init: function(attr, setter, getter)\n    {\n        this._super(attr, setter, getter);\n\n        this.mouseDraggingElement =null;\n        this.currentDropTarget = null;\n        this.currentTarget = null;\n    },\n\n    /**\n     * \n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} x the x-coordinate of the mouse down event\n     * @param {Number} y the y-coordinate of the mouse down event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onMouseDown: function(canvas, x, y, shiftKey, ctrlKey)\n    {\n        //just consider ports\n        //\n        var port = canvas.getBestFigure(x, y);\n\n\n        // nothing found at all\n        //\n        if(port===null){\n            return;\n        }\n\n        // may there is a resize handle below the port or another figure\n        // in this case the ResizeHandle has prio. and handled by another\n        // Policy\n        if(!(port instanceof draw2d.Port)){\n            return;\n        }\n\n        // this can happen if the user release the mouse button outside the window during a drag&drop\n        // operation. In this case we must fire the \"onDragEnd\" event postpond.\n        //\n        if(port.isInDragDrop===true){\n            port.onDragEnd( x, y, shiftKey, ctrlKey);\n            port.isInDragDrop=false;\n        }\n\n        // introspect the port only if it is draggable at all\n        //\n        if (port.isDraggable()) {\n            var canDragStart = port.onDragStart(x - port.getAbsoluteX(), y - port.getAbsoluteY(), shiftKey, ctrlKey);\n            if(canDragStart) {\n                port.fireEvent(\"dragstart\", {x: x - port.getAbsoluteX(), y: y - port.getAbsoluteY(), shiftKey: shiftKey, ctrlKey: ctrlKey});\n            }\n\n            // Element send a veto about the drag&drop operation\n            this.mouseDraggingElement = canDragStart===false ? null : port;\n            this.mouseDownElement = port;\n        }\n    },\n\n    /**\n     * \n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} dx The x diff between start of dragging and this event\n     * @param {Number} dy The y diff between start of dragging and this event\n     * @param {Number} dx2 The x diff since the last call of this dragging operation\n     * @param {Number} dy2 The y diff since the last call of this dragging operation\n     * @template\n     */\n    onMouseDrag: function(canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey)\n    {\n        try{\n            if (this.mouseDraggingElement !== null) {\n                var de = this.mouseDraggingElement;\n                var ct = this.currentTarget;\n\n                de.isInDragDrop = true;\n                de.onDrag(dx, dy, dx2, dy2, shiftKey, ctrlKey);\n\n                var target=canvas.getBestFigure(de.getAbsoluteX(),de.getAbsoluteY(), de);\n\n                // the hovering element has been changed\n                if(target!==ct){\n                    if(ct!==null){\n                        ct.onDragLeave(de);\n                        ct.fireEvent(\"dragLeave\",{draggingElement:de});\n                        de.editPolicy.each(function(i,e){\n                            if(e instanceof draw2d.policy.port.PortFeedbackPolicy){\n                                e.onHoverLeave(canvas, de, ct);\n                            }\n                        });\n                    }\n\n                    // possible hoverEnter event\n                    //\n                    if(target!==null){\n                        this.currentTarget= ct = target.delegateTarget(de);\n                        if(ct!==null){\n                            ct.onDragEnter(de); // legacy\n                            ct.fireEvent(\"dragEnter\",{draggingElement:de});\n                            de.editPolicy.each(function(i,e){\n                                if(e instanceof draw2d.policy.port.PortFeedbackPolicy){\n                                    e.onHoverEnter(canvas, de, ct);\n                                }\n                            });\n                        }\n                    }\n                    else{\n                        this.currentTarget = null;\n                    }\n                }\n\n\n                var p = canvas.fromDocumentToCanvasCoordinate(canvas.mouseDownX + (dx/canvas.zoomFactor), canvas.mouseDownY + (dy/canvas.zoomFactor));\n                var target = canvas.getBestFigure(p.x, p.y,this.mouseDraggingElement);\n\n                if (target !== this.currentDropTarget) {\n                    if (this.currentDropTarget !== null) {\n                        this.currentDropTarget.onDragLeave(this.mouseDraggingElement);\n                        this.currentDropTarget.fireEvent(\"dragLeave\",{draggingElement:this.mouseDraggingElement});\n                        this.currentDropTarget = null;\n                    }\n                    if (target !== null) {\n                        this.currentDropTarget = target.delegateTarget(this.mouseDraggingElement);\n                        // inform all listener that the element has accept the dragEnter event\n                        //\n                        if( this.currentDropTarget !==null) {\n                            this.currentDropTarget.onDragEnter(this.mouseDraggingElement); // legacy\n                            this.currentDropTarget.fireEvent(\"dragEnter\", {draggingElement: this.mouseDraggingElement});\n                        }\n                    }\n                }\n            }\n        }\n        catch(exc){\n            console.log(exc);\n            debugger;\n        }\n    },\n\n\n    /**\n     * \n     *\n     * @param {draw2d.Figure} figure the shape below the mouse or null\n     * @param {Number} x the x-coordinate of the mouse down event\n     * @param {Number} y the y-coordinate of the mouse down event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onMouseUp: function(canvas, x, y, shiftKey, ctrlKey)\n    {\n        if (this.mouseDraggingElement !== null) {\n\n            var de = this.mouseDraggingElement;\n            var ct = this.currentTarget;\n            // start CommandStack transaction\n            canvas.getCommandStack().startTransaction();\n\n            de.onDragEnd(x, y, shiftKey, ctrlKey);\n            // notify all installed policies\n            //\n            if(ct){\n                de.editPolicy.each(function(i,e){\n                    if(e instanceof draw2d.policy.port.PortFeedbackPolicy){\n                        e.onHoverLeave(canvas, de, ct);\n                    }\n                });\n            }\n\n            de.editPolicy.each(function(i,e){\n                if(e instanceof draw2d.policy.figure.DragDropEditPolicy){\n                    e.onDragEnd(canvas, de, x, y, shiftKey, ctrlKey);\n                }\n            });\n\n            // Reset the drag&drop flyover information\n            //\n            this.currentTarget = null;\n            de.isInDragDrop =false;\n\n            // fire an event\n            // @since 5.3.3\n            de.fireEvent(\"dragend\",{x:x, y:y, shiftKey:shiftKey, ctrlKey:ctrlKey});\n\n\n            // check if we drop the port onto a valid\n            // drop target and create a connection if possible\n            //\n            if (this.currentDropTarget !== null) {\n                this.mouseDraggingElement.onDrop(this.currentDropTarget, x, y, shiftKey, ctrlKey);\n\n                this.currentDropTarget.onDragLeave(this.mouseDraggingElement);\n                this.currentDropTarget.fireEvent(\"dragLeave\", {draggingElement: this.mouseDraggingElement});\n\n                // Ports accepts only Ports as DropTarget\n                //\n                if(this.currentDropTarget instanceof draw2d.Port){\n                    var request = new draw2d.command.CommandType(draw2d.command.CommandType.CONNECT);\n                    request.source = this.currentDropTarget;\n                    request.target = this.mouseDraggingElement;\n                    var command = this.mouseDraggingElement.createCommand(request);\n\n                    if(command!==null){\n                        command.setConnection(this.createConnection());\n                        canvas.getCommandStack().execute(command);\n                        this.currentDropTarget.onCatch(this.mouseDraggingElement, x, y, shiftKey, ctrlKey);\n                    }\n                }\n            }\n\n            // end command stack trans\n            canvas.getCommandStack().commitTransaction();\n            this.currentDropTarget = null;\n            this.mouseDraggingElement = null;\n        }\n    },\n\n\n    createConnection: function()\n    {\n        var connection = this._super();\n        connection.setRouter(new draw2d.layout.connection.DirectRouter());\n\n        return connection;\n    }\n\n\n});\n\n","\n/**\n * @class\n *\n * The OrthogonalConnectionCreatePolicy can be installed into the canvas to override the\n * default connection crate behaviour. Normaly you can create connections by drag&drop a port.\n *\n * With this policy you can route the connection during creation.\n *\n * Creates a connection by clicking on a port.\n * <ul>\n *  <li> click on the first port</li>\n *  <li> click within the canvas to add additional vertices</li>\n *  <li> click on the target port to draw the connection</li>\n *  <li> press ESC to abort the operation (didn't work within this JSDoc)</li>\n * </ul>\n * <br>\n * <br>\n * <b>The generated connection has always perpendicular segments.</b>\n * <br>\n * <br>\n *\n *\n * @example\n *\n *    // Override the default connection creation.\n *    //\n *    canvas.installEditPolicy( new draw2d.policy.connection.OrthogonalConnectionCreatePolicy());\n *\n *    // create and add two Node which contains Ports (In and OUT)\n *    //\n *    var start = new draw2d.shape.node.Start({x:50, y:50});\n *    var endNode   = new draw2d.shape.node.End({x:200, y:70});\n *\n *    // add the two nodes to the canvas\n *    //\n *    canvas.add( start);\n *    canvas.add( endNode);\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.connection.ConnectionCreatePolicy\n */\nimport draw2d from '../../packages'\n\ndraw2d.policy.connection.OrthogonalConnectionCreatePolicy = draw2d.policy.connection.ConnectionCreatePolicy.extend(\n    /** @lends draw2d.policy.connection.ClickConnectionCreatePolicy.prototype */\n    {\n    \n    NAME: \"draw2d.policy.connection.ClickConnectionCreatePolicy\",\n\n    /**\n     *\n     * Creates a new connection create policy instance\n\n     */\n    init: function(attr, setter, getter)\n    {\n        this._super( attr, setter, getter);\n\n        this.port1 = null;\n        this.beeline = null;\n        this.pulse= null;\n        this.tempConnection = null;\n\n        this.vertices = new draw2d.util.ArrayList();\n    },\n\n    /**\n     * \n     * Called by the canvas if the user click on a figure.\n     *\n     * @param {draw2d.Figure} the figure under the click event. Can be null\n     * @param {Number} x the x coordinate of the mouse during the click event\n     * @param {Number} y the y coordinate of the mouse during the click event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @since 6.1.0\n     *\n     * @template\n     */\n    onClick: function(figure, x, y, shiftKey, ctrlKey)\n    {\n        var UP   = draw2d.geo.Rectangle.DIRECTION_UP;\n        var RIGHT= draw2d.geo.Rectangle.DIRECTION_RIGHT;\n        var DOWN = draw2d.geo.Rectangle.DIRECTION_DOWN;\n        var LEFT = draw2d.geo.Rectangle.DIRECTION_LEFT;\n\n        var _this = this;\n        var port = figure;// .getCanvas().getBestFigure(x, y);\n\n        // nothing to do\n        if(port === null && this.port1 === null){\n            return;\n        }\n\n        // nothing found at all\n        //\n        if(port===null){\n            var canvas = this.port1.getCanvas();\n            var newPos = this.beeline.getEndPosition();\n            this.vertices.add(newPos);\n            this.beeline.setStartPosition(this.beeline.getEndPosition());\n            this.tempConnection.setVertices(this.vertices);\n            if(this.pulse!==null) {\n                this.pulse.remove();\n                this.pulse = null;\n            }\n            this.ripple(newPos.x, newPos.y, 0);\n            return;\n        }\n\n        // we just considering ports\n        //\n        if(!(port instanceof draw2d.Port)){\n            return;\n        }\n\n        // start connection create by selection the start port\n        //\n        if(this.port1===null){\n            var canvas = port.getCanvas();\n            this.port1 = port;\n            this.vertices.add(port.getAbsolutePosition());\n            this.beeline = new draw2d.shape.basic.Line({\n                start: this.port1.getAbsolutePosition(),\n                end: this.port1.getAbsolutePosition(),\n                dasharray:\"- \",\n                color:\"#2C70FF\"\n            });\n\n            this.beeline.hide= function(){\n                _this.beeline.setCanvas(null);\n            };\n\n            this.beeline.show= function(canvas){\n                _this.beeline.setCanvas(canvas);\n                _this.beeline.shape.toFront();\n            };\n            this.beeline.show(canvas);\n\n            this.tempConnection = new draw2d.shape.basic.PolyLine({\n                start: this.port1.getAbsolutePosition(),\n                end: this.port1.getAbsolutePosition(),\n                stroke:2,\n                color:\"#2C70FF\"\n            });\n\n            this.tempConnection.hide= function(){\n                _this.tempConnection.setCanvas(null);\n            };\n\n            this.tempConnection.show= function(canvas){\n                _this.tempConnection.setCanvas(canvas);\n                _this.tempConnection.shape.toFront();\n            };\n            this.tempConnection.show(canvas);\n            this.tempConnection.setVertices([this.port1.getAbsolutePosition(),this.port1.getAbsolutePosition()]);\n\n            var a= function() {\n                _this.tempConnection.shape.animate({\"stroke-width\" : 2}, 800, b);\n            };\n            var b=function() {\n                _this.tempConnection.shape.animate({\"stroke-width\":1}, 800, a);\n            };\n            a();\n\n            canvas.paper.setStart();\n\n            // delete the previews puls if the user press twice on the starting port\n            //\n            if(this.pulse!==null) {\n                this.pulse.remove();\n                this.pulse = null;\n            }\n\n            var pos = port.getAbsolutePosition();\n            this.ripple(pos.x, pos.y, 1);\n            this.pulse = canvas.paper.setFinish();\n        }\n        else {\n            var possibleTarget = port.delegateTarget(this.port1);\n\n            if (!(possibleTarget instanceof draw2d.Port)) {\n                return; // silently\n            }\n\n            // check whenever the target port allows a connection\n            //\n            var request = new draw2d.command.CommandType(draw2d.command.CommandType.CONNECT);\n            request.source = this.port1;\n            request.target = port;\n            var command = null;\n            if (this.port1 instanceof draw2d.InputPort) {\n                command = this.port1.createCommand(request);\n            }\n            else {\n                command = port.createCommand(request);\n            }\n\n            if (command !== null) {\n                var connection = this.createConnection();\n                command.setConnection(connection);\n                port.getCanvas().getCommandStack().execute(command);\n\n\n                this.beeline.hide();\n                this.tempConnection.hide();\n                if (this.pulse !== null) {\n                    this.pulse.remove();\n                    this.pulse = null;\n                }\n                this.beeline = null;\n                this.port1 = null;\n\n                // use the default routing if the user didn't add some\n                // vertices\n                if(this.vertices.getSize()<=2){\n                    return;\n                }\n\n                var MINDIST = command.getConnection().getRouter().MINDIST;\n                var beforeVertex = this.vertices.get(this.vertices.getSize()-2);\n                var lastVertex   = this.vertices.last();\n                var portPos      = port.getAbsolutePosition();\n                var lastSegmentDir = UP;\n                if(lastVertex.x === beforeVertex.x){\n                    lastSegmentDir = lastVertex.y< beforeVertex.y ? UP : DOWN;\n                }\n                else{\n                    lastSegmentDir = lastVertex.x< beforeVertex.x ? LEFT : RIGHT;\n                }\n\n                // CALCULATE THE LAST MILE OF THE CONNECTION\n                //\n                // ensure that we have a valid \"manhattan style\" connection.\n                // We must add or adjust some points or segments.\n                //\n                // The code below creates and adjust the points in that way that the\n                // DOTTED line is the calculated part to the user defined vertices.\n                // ==================================\n                //\n                switch(port.getConnectionDirection(this.port1)){\n                    case UP:\n                        switch(lastSegmentDir){\n                            case UP:\n                                //       o..................o lastVertex\n                                //       |         .        |\n                                //       |         .        |\n                                //       |    +----O----+   |\n                                // ------o    | portPos |   o------------\n                                //            |         |      beforeVertex\n                                //            +---------+\n                                //\n                                if(lastVertex.y<(portPos.y-MINDIST)) {\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x, lastVertex.y));\n                                    this.vertices.add(portPos);\n                                }\n                                //        ...................\n                                //        .        .        .\n                                //        .   +----O----+   .\n                                //        o   | portPos |   o lastVertex\n                                //        |   |         |   |\n                                //        |   +---------+   |\n                                // -------o                 o------------\n                                //                            beforeVertex\n                                //\n                                else{\n                                    lastVertex.y = portPos.y-MINDIST;\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x, lastVertex.y));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case RIGHT:\n                                //  ..............................\n                                //  .                   .        .\n                                //  .                   .        .\n                                //  o------->o     +----O----+   o---------------->O\n                                //  |              | portPos |   | beforeVertex    lastVertex\n                                //  |              |         |   |\n                                //  |              +---------+\n                                if(lastVertex.y>(portPos.y-MINDIST)){\n                                    beforeVertex.y = portPos.y-MINDIST;\n                                    lastVertex.x = portPos.x;\n                                    lastVertex.y = beforeVertex.y;\n                                    this.vertices.add(portPos);\n                                }\n                                //\n                                //                                beforeVertex   lastVertex\n                                // o---------->o..................o------------->O\n                                // |                     .        |\n                                // |                +----O----+   |\n                                // |                | portPos |   |\n                                // |                |         |   |\n                                //                  +---------+\n                                else{\n                                    lastVertex.x = portPos.x;\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case DOWN:\n                                //                           beforeVertex\n                                // ------o..................o------------\n                                //       |         .        |\n                                //       |         .        |\n                                //       V    +----O----+   V\n                                //       o    | portPos |   o lastVertex\n                                //            |         |\n                                //            +---------+\n                                //\n                                if(lastVertex.y<(portPos.y-MINDIST)) {\n                                    beforeVertex.x = portPos.x;\n                                    lastVertex.setPosition(portPos);\n                                }\n                                //        ...................\n                                //        .        .        .\n                                //        .   +----O----+   . beforeVertex\n                                // -------o   | portPos |   o------------\n                                //        |   |         |   |\n                                //        V   +---------+   V\n                                //        o                 o\n                                //                            lastVertex\n                                //\n                                else{\n                                    lastVertex.y = portPos.y-MINDIST;\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x,lastVertex.y ));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case LEFT:\n                                //           ..................................\n                                //           .         .                       .\n                                //           .         .                       .\n                                // o<--------o    +----O----+   o<-------------O beforeVertex\n                                //           |    | portPos |    lastVertex    |\n                                //           |    |         |                  |\n                                //                +---------+\n                                if(lastVertex.y>(portPos.y-MINDIST)){\n                                    beforeVertex.y = portPos.y-MINDIST;\n                                    lastVertex.x = portPos.x;\n                                    lastVertex.y = beforeVertex.y;\n                                    this.vertices.add(portPos);\n                                }\n                                //             |                               |\n                                //             |                               |\n                                //   o<--------o................o<-------------O\n                                //                      .        lastVertex     beforeVertex\n                                //                 +----O----+\n                                //                 | portPos |\n                                //                 |         |\n                                //                 +---------+\n                                else{\n                                    lastVertex.x = portPos.x;\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                        }\n                        break;\n                    case RIGHT:\n                        switch(lastSegmentDir){\n                            case UP:\n                                //                    o lastVertex\n                                //                    |\n                                //                    |\n                                //  ------------------o beforeVertex\n                                //                    .\n                                //  +----------+      .\n                                //  |          |      .\n                                //  |  portPos O.......\n                                //  |          |      .\n                                //  +----------+      .\n                                //                    o lastVertex\n                                //                    |\n                                //                    |\n                                //   -----------------o beforeVertex\n                                //\n                                if(lastVertex.x > (portPos.x+MINDIST)){\n                                    lastVertex.y = portPos.y;\n                                    this.vertices.add(portPos);\n                                }\n                                //        lastVertex\n                                //      o...............\n                                //      |              .\n                                //      |              .\n                                //  ----o beforeVertex .\n                                //                     .\n                                //  +----------+       .\n                                //  |          |       .\n                                //  |  portPos O........\n                                //  |          |       .\n                                //  +----------+       .\n                                //      o...............\n                                //      | lastVertex\n                                //      |\n                                //------o\n                                //        beforeVertex\n                                //\n                                //\n                                else{\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x+MINDIST, lastVertex.y));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x+MINDIST, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case RIGHT:\n                                //    beforeVertex     lastVertex\n                                //    o-------------->o\n                                //                    .\n                                //  +----------+      .\n                                //  |          |      .\n                                //  |  portPos O.......\n                                //  |          |      .\n                                //  +----------+      .\n                                //                    .\n                                //    o-------------->o\n                                //    beforeVertex     lastVertex\n                                //\n                                if(lastVertex.x > (portPos.x+MINDIST)){\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                // beforeVertex  lastVertex\n                                // o------------>o.........\n                                //                         .\n                                //       +----------+      .\n                                //       |          |      .\n                                //       |  portPos O.......\n                                //       |          |      .\n                                //       +----------+      .\n                                //                         .\n                                //  o----------->o..........\n                                // beforeVertex  lastVertex\n                                //\n                                else{\n                                    lastVertex.x =  portPos.x+MINDIST;\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case DOWN:\n                                //    ----------------o beforeVertex\n                                //                    |\n                                //                    |\n                                //                    o lastVertex\n                                //                    .\n                                //  +----------+      .\n                                //  |          |      .\n                                //  |  portPos O.......\n                                //  |          |      .\n                                //  +----------+      .\n                                //                    .\n                                //      --------------o beforeVertex\n                                //                    |\n                                //                    |\n                                //                    o lastVertex\n                                //\n                                if(lastVertex.x > (portPos.x+MINDIST)){\n                                    lastVertex.y = portPos.y;\n                                    this.vertices.add(portPos);\n                                }\n                                //    -----o beforeVertex\n                                //         |\n                                //         | lastVertex\n                                //         o...........\n                                //                    .\n                                //  +----------+      .\n                                //  |          |      .\n                                //  |  portPos O.......\n                                //  |          |      .\n                                //  +----------+      .\n                                //                    .\n                                // ----o beforeVertex .\n                                //     |              .\n                                //     | lastVertex   .\n                                //     o...............\n                                //\n                                else{\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x+MINDIST, lastVertex.y));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x+MINDIST, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case LEFT:\n                                //                lastVertex      beforeVertex\n                                //               o<--------------o\n                                //               .\n                                //  +----------+ .\n                                //  |          | .\n                                //  |  portPos O..\n                                //  |          | .\n                                //  +----------+ .\n                                //               .\n                                //               o<--------------o\n                                //                lastVertex      beforeVertex\n                                //\n                                if(lastVertex.x > (portPos.x+MINDIST)){\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                // lastVertex                beforeVertex\n                                // o<-----------------------o\n                                //                      .\n                                //       +----------+   .\n                                //       |          |   .\n                                //       |  portPos O....\n                                //       |          |   .\n                                //       +----------+   .\n                                //                      .\n                                //  o<----------------------o\n                                //  lastVertex               beforeVertex\n                                //\n                                else{\n                                    lastVertex.x =  portPos.x+MINDIST;\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                        }\n                        break;\n                    case DOWN:\n                        switch(lastSegmentDir){\n                            case UP:\n                                //       o                  o lastVertex\n                                //       |                  |\n                                //       |                  |\n                                //       |    +---------+   |\n                                // ------o    |         |   o------------\n                                //       .    | portPos |   . beforeVertex\n                                //       .    +----O----+   .\n                                //       .         .        .\n                                //       ....................\n                                //\n                                if(lastVertex.y<(portPos.y+MINDIST)) {\n                                    lastVertex.y = portPos.y+MINDIST;\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x, lastVertex.y));\n                                    this.vertices.add(portPos);\n                                }\n                                //            +---------+\n                                //            |         |\n                                //            | portPos |\n                                //            +----O----+\n                                //                 .\n                                //        o.................o lastVertex\n                                //        |                 |\n                                //        |                 |\n                                // -------o                 o------------\n                                //                            beforeVertex\n                                //\n                                else{\n                                    lastVertex.x   = portPos.x;\n                                    lastVertex.y   = portPos.y;\n                                    beforeVertex.x = portPos.x;\n                                }\n                                break;\n                            case RIGHT:\n                                //                 +---------+\n                                //                 |         |\n                                //                 | portPos |\n                                //  o------->o     +----O----+    o--------------->O\n                                //  |        .          .         | beforeVertex   . lastVertex\n                                //  |        .....................|.................\n                                //  |\n                                //\n                                //\n                                if(lastVertex.y<(portPos.y+MINDIST)){\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, portPos.y+MINDIST));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x, portPos.y+MINDIST));\n                                    this.vertices.add(portPos);\n                                }\n                                //                  +---------+\n                                //                  |         |\n                                //                  | portPos |\n                                //                  +----O----+\n                                //                       .\n                                //             ...................................\n                                //             .                    beforeVertex . lastVertex\n                                // o---------->o                  o------------->O\n                                // |                              |\n                                // |                              |\n                                //\n                                else{\n                                    lastVertex.x = portPos.x;\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case DOWN:\n                                //                           beforeVertex\n                                // ------o                  o------------\n                                //       |                  |\n                                //       |                  |\n                                //       V    +---------+   V\n                                //       o    |         |   o lastVertex\n                                //       .    | portPos |   .\n                                //       .    +----O----+   .\n                                //       .         .        .\n                                //       ....................\n                                //\n                                if(lastVertex.y<(portPos.y+MINDIST)) {\n                                    lastVertex.y = portPos.y+MINDIST;\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x,lastVertex.y ));\n                                    this.vertices.add(portPos);\n                                }\n                                //\n                                //            +---------+     beforeVertex\n                                // -------o   | portPos |   o------------\n                                //        |   |         |   |\n                                //        V   +----O----+   V\n                                //        o        .        o\n                                //        ..................  lastVertex\n                                //\n                                else{\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x,lastVertex.y ));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case LEFT:\n                                //\n                                // o<--------o    +---------+   o<-------------O beforeVertex\n                                // .         |    |         |   . lastVertex   |\n                                // .         |    | portPos |   .              |\n                                // .              +----O----+   .\n                                // .                   .        .\n                                // ..............................\n                                //\n                                if(lastVertex.y<(portPos.y-MINDIST)){\n                                    beforeVertex.y = portPos.y-MINDIST;\n                                    lastVertex.x = portPos.x;\n                                    lastVertex.y = beforeVertex.y;\n                                    this.vertices.add(portPos);\n                                }\n                                //\n                                //                +---------+\n                                //           |    |         |               |\n                                //           |    | portPos |               |\n                                //           |    +----O----+               |\n                                //           |         .                    |\n                                // o<--------o...................o<---------o\n                                //\n                                else{\n                                    lastVertex.x = portPos.x;\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                        }\n                        break;\n                    case LEFT:\n                        switch(lastSegmentDir){\n                            case UP:\n                                //    ................o lastVertex\n                                //    .               |\n                                //    .               |\n                                //  --.---------------o beforeVertex\n                                //    .\n                                //    .   +----------+\n                                //    .   |          |\n                                //    ....o  portPos |\n                                //    .   |          |\n                                //    .   +----------+\n                                //    .\n                                //    ................o lastVertex\n                                //                    |\n                                //                    |\n                                //   -----------------o beforeVertex\n                                //\n                                if(lastVertex.x >= (portPos.x-MINDIST)){\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, lastVertex.y));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                               //\n                                //            +----------+\n                                //            |          |\n                                //      ......o  portPos |\n                                //      .     |          |\n                                //      .     +----------+\n                                //      o\n                                //      | lastVertex\n                                //      |\n                                //------o\n                                //        beforeVertex\n                                //\n                                //\n                                else if(lastVertex.y > portPos.y && lastVertex.x < (portPos.x-MINDIST)){\n                                    lastVertex.y = portPos.y;\n                                    this.vertices.add(portPos);\n                                }\n                                //          lastVertex\n                                //      o..\n                                //      | .\n                                //      | .\n                                //  ----o .   beforeVertex\n                                //        .\n                                //        .   +----------+\n                                //        .   |          |\n                                //        ....o  portPos |\n                                //            |          |\n                                //            +----------+\n                                //\n                                else{\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, lastVertex.y));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case RIGHT:\n                                //    beforeVertex     lastVertex\n                                //    o-------------->o\n                                //                    .\n                                // ....................\n                                // .\n                                // .      +----------+\n                                // .      |          |\n                                // .......o  portPos |\n                                //        |          |\n                                //        +----------+\n                                //\n                                if(lastVertex.y<portPos.y && lastVertex.x > (portPos.x-MINDIST)){\n                                    var center = portPos.y-(portPos.y-lastVertex.y)/2;\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, center));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, center));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                //        +----------+\n                                //        |          |\n                                // .......o  portPos |\n                                // .      |          |\n                                // .      +----------+\n                                // .\n                                // ....................\n                                //                    .\n                                //    o-------------->o\n                                //    beforeVertex     lastVertex\n                                //\n                                else if(lastVertex.y>portPos.y && lastVertex.x > (portPos.x-MINDIST)){\n                                    var center = portPos.y+(lastVertex.y-portPos.y)/2;\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, center));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, center));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                // beforeVertex  lastVertex\n                                // o------------>o\n                                //               .\n                                //               .   +----------+\n                                //               .   |          |\n                                //               ....o  portPos |\n                                //               .   |          |\n                                //               .   +----------+\n                                //               .\n                                //  o----------->o\n                                // beforeVertex  lastVertex\n                                //\n                                else{\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case DOWN:\n                                //         -----------o beforeVertex\n                                //                    |\n                                //                    |\n                                //                    V\n                                //    ................o lastVertex\n                                //    .\n                                //    .       +----------+\n                                //    .       |          |\n                                //    ........o portPos  |\n                                //    .       |          |\n                                //    .       +----------+\n                                //    .\n                                //    .        --------o beforeVertex\n                                //    .                |\n                                //    .                |\n                                //    .                V\n                                //    .................o lastVertex\n                                //\n                                if(lastVertex.x >= (portPos.x-MINDIST)){\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, lastVertex.y));\n                                    this.vertices.add(new draw2d.geo.Point(portPos.x-MINDIST, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                //    -----o beforeVertex\n                                //         |\n                                //         |\n                                //         o lastVertex\n                                //         .\n                                //         .       +----------+\n                                //         .       |          |\n                                //         ........o portPos  |\n                                //             .   |          |\n                                //             .   +----------+\n                                // beforeVertex.\n                                // ------------o\n                                //             |\n                                //             |\n                                // lastVertex  o\n                                //\n                                else{\n                                    lastVertex.y=portPos.y;\n                                    this.vertices.add(portPos);\n                                }\n                                break;\n                            case LEFT:\n                                //   lastVertex      beforeVertex\n                                //    o<--------------o\n                                //    .\n                                //    .       +----------+\n                                //    .       |          |\n                                //    ....... o portPos  |\n                                //    .       |          |\n                                //    .       +----------+\n                                //    .\n                                //    o<--------------o\n                                //    lastVertex      beforeVertex\n                                //\n                                if(lastVertex.x < (portPos.x-MINDIST)){\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                                //         lastVertex                beforeVertex\n                                //  .......o<-----------------------o\n                                //  .\n                                //  .    +----------+\n                                //  .    |          |\n                                //  .....o portPos  |\n                                //  .    |          |\n                                //  .    +----------+\n                                //  .\n                                //  ........o<----------------------o\n                                //         lastVertex               beforeVertex\n                                //\n                                else{\n                                    lastVertex.x =  portPos.x-MINDIST;\n                                    this.vertices.add(new draw2d.geo.Point(lastVertex.x, portPos.y));\n                                    this.vertices.add(portPos);\n                                }\n                            break;\n                        }\n                    break;\n                }\n\n                if(this.vertices.getSize()>3) {\n                    connection._routingMetaData.routedByUserInteraction = true;\n                    connection.setVertices(this.vertices);\n                }\n                this.vertices.clear();\n            }\n        }\n\n    },\n\n\n    /**\n     * \n     *\n     * @param {draw2d.Canvas} canvas\n     * @param {Number} x the x-coordinate of the mouse event\n     * @param {Number} y the y-coordinate of the mouse event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     * @template\n     */\n    onMouseMove: function(canvas, x, y, shiftKey, ctrlKey)\n    {\n        if(this.beeline!==null){\n            this.beeline.setEndPosition(this.orthogonal(this.vertices.last(), {x:x,y:y}));\n        }\n    },\n\n    /**\n     * \n     * Callback if the user press a key down\n     *\n     * @param {draw2d.Canvas} canvas the related canvas\n     * @param {Number} keyCode the pressed key\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     * @private\n     **/\n    onKeyDown: function(canvas, keyCode, shiftKey, ctrlKey)\n    {\n        var KEYCODE_ENTER = 13;\n        var KEYCODE_ESC = 27;\n        if (keyCode === KEYCODE_ESC && this.beeline!==null){\n            this.beeline.hide();\n            this.tempConnection.hide();\n            this.beeline = null;\n            this.port1=null;\n            this.vertices.clear();\n            if(this.pulse!=null) {\n                this.pulse.remove();\n                this.pulse=null;\n            }\n        }\n    },\n\n    orthogonal: function(anchor, p)\n    {\n        // calculate vertical line distance\n        //\n        var xDiff = Math.abs(anchor.x- p.x)+10;\n        var xDist = draw2d.geo.Line.distance(anchor.x-xDiff, anchor.y, anchor.x+xDiff, anchor.y, p.x, p.y);\n\n        // calculate horizontal line distance\n        //\n        var yDiff = Math.abs(anchor.y- p.y)+10;\n        var yDist = draw2d.geo.Line.distance(anchor.x, anchor.y-yDiff, anchor.x, anchor.y+yDiff, p.x, p.y);\n\n        return yDist>xDist? {x: p.x, y:anchor.y}:{x: anchor.x, y: p.y};\n    },\n\n    createConnection: function()\n    {\n        var connection = this._super();\n        connection.attr({radius:7, stroke:3});\n        connection.setRouter(new draw2d.layout.connection.InteractiveManhattanConnectionRouter());\n        return connection;\n    }\n\n});\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Provide support for selecting and positioning a non-resizable figure.\n * Selection is indicated via rectangular handle that outlines the figure with a 1-pixel black\n * dotted line.\n *\n *\n * @example\n *\n *      circle =new draw2d.shape.basic.Circle({diameter:50, x:90, y:50});\n *      circle.installEditPolicy(new draw2d.policy.figure.AntSelectionFeedbackPolicy());\n *      canvas.add(circle);\n *\n *      canvas.add(new draw2d.shape.basic.Label({text:\"Click on the circle to see the selection feedback\"}),20,10);\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n */\ndraw2d.policy.figure.AntSelectionFeedbackPolicy = draw2d.policy.figure.SelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.AntSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.figure.AntSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   *\n   * Called by the framework of the Policy should show a resize handle for the given shape\n   *\n   * @param {draw2d.Canvas} canvas the responsible canvas\n   * @param {draw2d.Figure} figure the figure to decorate with a selection feedback\n   * @param {Boolean} [isPrimarySelection]\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n    if (figure.selectionHandles.isEmpty()) {\n      let box = new draw2d.shape.basic.Rectangle({bgColor: null, dasharray: \"- \", color: \"#2C70FF\"})\n      box.hide = function () {\n        // IMPORTANT\n        // don't add/remove this rectangle to the canvas resizeHandles. This rect isn't responsible for any hitTest or\n        // dragDrop operation\n        //canvas.resizeHandles.remove(box);\n        box.setCanvas(null)\n      }\n      box.show = function (canvas) {\n        box.setCanvas(canvas)\n        // IMPORTANT\n        // don't add/remove this rectangle to the canvas resizeHandles. This rect isn't responsible for any hitTest or\n        // dragDrop operation\n        //canvas.resizeHandles.remove(box);\n        //canvas.resizeHandles.add(box);\n        box.shape.toFront()\n      }\n      box.show(canvas)\n      figure.selectionHandles.add(box)\n\n      // add a bee line to the parent if a parent is given and if the bounding box\n      // of the parent and the figure didn't have intersections\n      if (figure.getParent() !== null) {\n        let line = new draw2d.shape.basic.Line({opacity: 0.5, bgColor: null, dasharray: \"- \", color: \"#2C70FF\"})\n        //line.setStartPosition(figure.getBoundingBox().getCenter());\n        //line.setEndPosition(figure.getParent().getBoundingBox().getCenter());\n        line.show = (canvas) => line.setCanvas(canvas)\n        line.hide = () => line.setCanvas(null)\n        line.show(canvas)\n        figure.selectionHandles.add(line)\n        this._updateBeeLine(line, figure)\n      }\n    }\n    this.moved(canvas, figure)\n  },\n\n\n  /**\n   *\n   * Callback if the figure has been moved\n   *\n   * @param figure\n   *\n   * @template\n   */\n  moved: function (canvas, figure) {\n    if (figure.selectionHandles.isEmpty()) {\n      return // silently\n    }\n\n    let margin = 2\n    let box = figure.selectionHandles.first()\n    box.setPosition(figure.getAbsolutePosition().translate(-margin, -margin))\n    box.setDimension(figure.getWidth() + margin*2, figure.getHeight() + margin*2)\n    box.setRotationAngle(figure.getRotationAngle())\n\n    if (figure.selectionHandles.getSize() > 1) {\n      this._updateBeeLine(figure.selectionHandles.get(1), figure)\n    }\n  },\n\n  /**\n   *\n   * @param {draw2d.shape.basic.Line} line\n   * @param {draw2d.Figure} figure\n   * @private\n   */\n  _updateBeeLine: function (line, figure) {\n    let parent = figure.getParent()\n\n    if (parent === null) {\n      return\n    }\n\n    if (parent instanceof draw2d.shape.basic.Line) {\n      let center = figure.getBoundingBox().getCenter()\n      let projection = parent.pointProjection(center)\n      if (projection === null) {\n        let p1 = line.getStartPosition()\n        let p2 = line.getEndPosition()\n        let d1 = center.distance(p1)\n        let d2 = center.distance(p1)\n        projection = d1 < d2 ? p1 : p2\n      }\n      let intersection = figure.getBoundingBox().intersectionWithLine(center, projection)\n      if (intersection.getSize() > 0) {\n        line.setStartPosition(figure.getBoundingBox().intersectionWithLine(center, projection).get(0))\n          .setEndPosition(projection)\n      }\n      else {\n        line.setStartPosition(figure.getBoundingBox().getCenter())\n          .setEndPosition(projection)\n      }\n    }\n    else {\n      let rect1 = figure.getBoundingBox(),\n        rect2 = parent.getBoundingBox()\n\n      let center1 = rect1.getCenter()\n      let center2 = rect2.getCenter()\n      // the rectangle overlaps -> return the center of booth\n      if (rect1.intersects(rect2)) {\n        line.setStartPosition(center1)\n          .setEndPosition(center2)\n      }\n      // one rect is inside the other rect\n      //\n      else if (rect1.hitTest(center2) || rect2.hitTest(center1)) {\n        line.setStartPosition(center1)\n          .setEndPosition(center2)\n      }\n      else {\n        rect1.scale(3, 3)\n        rect2.scale(3, 3)\n\n        line.setStartPosition(rect1.intersectionWithLine(center1, center2).get(0))\n          .setEndPosition(rect2.intersectionWithLine(center1, center2).get(0))\n      }\n    }\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @example\n *\n *      circle =new draw2d.shape.basic.Circle();\n *      circle.installEditPolicy(new draw2d.policy.figure.BigRectangleSelectionFeedbackPolicy());\n *      canvas.add(circle,90,50);\n *\n *      canvas.add(new draw2d.shape.basic.Label({text:\"Click on the circle to see the selection feedback\"}),20,10);\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n */\ndraw2d.policy.figure.BigRectangleSelectionFeedbackPolicy = draw2d.policy.figure.RectangleSelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.BigRectangleSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.figure.BigRectangleSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n\n  createResizeHandle: function (owner, type){\n    return new draw2d.ResizeHandle({ owner:owner, type:type, width:15, height:15 });\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n */\ndraw2d.policy.figure.BusSelectionFeedbackPolicy = draw2d.policy.figure.SelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.BusSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.figure.BusSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   * Called by the framework of the Policy should show a resize handle for the given shape\n   *\n   * @param {Boolean} isPrimarySelection\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n    if (figure.selectionHandles.isEmpty()) {\n      let r2 = draw2d.Configuration.factory.createResizeHandle(figure, 2) // 2 = CENTER_TOP\n      let r4 = draw2d.Configuration.factory.createResizeHandle(figure, 4) // 4 = RIGHT_MIDDLE\n      let r6 = draw2d.Configuration.factory.createResizeHandle(figure, 6) // 6 = CENTER_BOTTOM\n      let r8 = draw2d.Configuration.factory.createResizeHandle(figure, 8) // 8 = LEFT_MIDDLE\n\n      figure.selectionHandles.add(r2, r4, r6, r8)\n\n      r2.setDraggable(figure.isResizeable())\n      r4.setDraggable(figure.isResizeable())\n      r6.setDraggable(figure.isResizeable())\n      r8.setDraggable(figure.isResizeable())\n\n      r2.show(canvas)\n      r4.show(canvas)\n      r6.show(canvas)\n      r8.show(canvas)\n    }\n    this.moved(canvas, figure)\n  },\n\n\n  /**\n   * \n   * Callback if the figure has been moved\n   *\n   * @param figure\n   *\n   * @template\n   */\n  moved: function (canvas, figure) {\n    if (figure.selectionHandles.isEmpty()) {\n      return // silently\n    }\n    let r2 = figure.selectionHandles.find(handle => handle.type === 2)\n    let r4 = figure.selectionHandles.find(handle => handle.type === 4)\n    let r6 = figure.selectionHandles.find(handle => handle.type === 6)\n    let r8 = figure.selectionHandles.find(handle => handle.type === 8)\n\n    let objHeight = figure.getHeight()\n    let objWidth = figure.getWidth()\n\n    let xPos = figure.getX()\n    let yPos = figure.getY()\n    r2.setPosition(xPos + (objWidth / 2) - (r2.getWidth() / 2), yPos - r2.getHeight())\n    r4.setPosition(xPos + objWidth, yPos + (objHeight / 2) - (r4.getHeight() / 2))\n    r6.setPosition(xPos + (objWidth / 2) - (r6.getWidth() / 2), yPos + objHeight)\n    r8.setPosition(xPos - r8.getWidth(), yPos + (objHeight / 2) - (r8.getHeight() / 2))\n  }\n\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Called by the framework if the user edit the position of a figure with a drag drop operation.\n * Sub class like SelectionEditPolicy or RegionEditPolicy can adjust the position of the figure or the selections handles.\n *\n * @author  Andreas Herz\n * @extends draw2d.policy.figure.FigureEditPolicy\n */\ndraw2d.policy.figure.DragDropEditPolicy = draw2d.policy.figure.FigureEditPolicy.extend(\n  /** @lends draw2d.policy.figure.DragDropEditPolicy.prototype */\n  {\n\n    NAME: \"draw2d.policy.figure.DragDropEditPolicy\",\n\n    /**\n     */\n    init: function (attr, setter, getter) {\n      this._super(attr, setter, getter)\n      this.moveCallback = (emitter, event) => {\n        this.moved(emitter.getCanvas(), emitter)\n      }\n    },\n\n\n    /**\n     *\n     * Called by the host if the policy has been installed.\n     *\n     * @param {draw2d.Canvas|draw2d.Figure} host\n     */\n    onInstall: function (host) {\n      this._super(host)\n      host.on(\"move\", this.moveCallback)\n    },\n\n    /**\n     *\n     * Called by the host if the policy has been uninstalled.\n     *\n     * @param {draw2d.Canvas|draw2d.Figure} host\n     */\n    onUninstall: function (host) {\n      this._super(host)\n      host.off(this.moveCallback)\n    },\n\n    /**\n     *\n     * Called by the framework if the related shape has init a drag&drop\n     * operation\n     *\n     * The Policy can send a veto to prevent the DragDrop operation\n     *\n     * @param {draw2d.Canvas} canvas The host canvas\n     * @param {draw2d.Figure} figure The related figure\n     * @param {Number} x the x-coordinate of the mouse up event\n     * @param {Number} y the y-coordinate of the mouse up event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @returns {Boolean} return <b>false</b> to send a veto to the drag operation\n     */\n    onDragStart: function (canvas, figure, x, y, shiftKey, ctrlKey) {\n      figure.shape.attr({cursor: \"move\"})\n\n      // this happens if you drag&drop the shape outside of the screen and\n      // release the mouse button outside the window. We restore the alpha\n      // with the next drag&drop operation\n      if (figure.isMoving === true) {\n        figure.setAlpha(figure.originalAlpha)\n      }\n\n      figure.originalAlpha = figure.getAlpha()\n      figure.isMoving = false\n\n      // return value since 6.1.0\n      return true\n    },\n\n    /**\n     *\n     * Called by the framework during drag a figure.\n     *\n     * @param {draw2d.Canvas} canvas The host canvas\n     * @param {draw2d.Figure} figure The related figure\n     * @template\n     */\n    onDrag: function (canvas, figure) {\n      // enable the alpha blending of the first real move of the object\n      //\n      if (figure.isMoving === false) {\n        figure.isMoving = true\n        figure.setAlpha(figure.originalAlpha * 0.4)\n      }\n    },\n\n    /**\n     *\n     * Called by the framework if the drag drop operation ends.\n     *\n     * @param {draw2d.Canvas} canvas The host canvas\n     * @param {draw2d.Figure} figure The related figure\n     * @param {Number} x the x-coordinate of the mouse up event\n     * @param {Number} y the y-coordinate of the mouse up event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     * @template\n     */\n    onDragEnd: function (canvas, figure, x, y, shiftKey, ctrlKey) {\n      figure.shape.attr({cursor: \"default\"})\n      figure.isMoving = false\n      figure.setAlpha(figure.originalAlpha)\n    },\n\n    /**\n     *\n     * Adjust the coordinates to the rectangle/region of this constraint.\n     *\n     * @param {draw2d.Figure} figure\n     * @param {Number|draw2d.geo.Point} x\n     * @param {Number} [y]\n     * @returns {draw2d.geo.Point} the constraint position of the figure\n     *\n     * @template\n     */\n    adjustPosition: function (figure, x, y) {\n      // do nothing per default implementation\n      if (x instanceof draw2d.geo.Point) {\n        return x\n      }\n\n      return new draw2d.geo.Point(x, y)\n    },\n\n    /**\n     *\n     * ensure that the dimension didn't goes outside the given restrictions\n     *\n     * @param {draw2d.Figure} figure\n     * @param {Number} w\n     * @param {number} h\n     * @returns {draw2d.geo.Rectangle} the constraint position of the figure\n     */\n    adjustDimension: function (figure, w, h) {\n      return new draw2d.geo.Rectangle(0, 0, w, h)\n    },\n\n    /**\n     *\n     * Callback if the figure has moved\n     *\n     * @param {draw2d.Canvas} canvas The host canvas\n     * @param {draw2d.Figure} figure The related figure\n     *\n     * @template\n     */\n    moved: function (canvas, figure) {\n    }\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Called by the framework if the user edit the position of a figure with a drag drop operation.\n * Sub class like SelectionEditPolicy or RegionEditPolicy can adjust the position of the figure\n * or the selections handles.\n *\n * @author  Andreas Herz\n * @extends draw2d.policy.EditPolicy\n * @since 4.4.0\n */\ndraw2d.policy.figure.FigureEditPolicy = draw2d.policy.EditPolicy.extend(\n  /** @lends draw2d.policy.figure.FigureEditPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.figure.FigureEditPolicy\",\n\n  /**\n   * Creates a new Router object\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  /**\n   * \n   * Called if the user press the right mouse on the figure.<br>\n   * You can either override the \"onContextMenu\" method of the figure or install an editor policy and override this method.\n   * Booth is valid and possible.\n   *\n   * @param {draw2d.Figure|draw2d.shape.basic.Line} figure the figure below the mouse\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   * @since 4.4.0\n   */\n  onRightMouseDown: function (figure, x, y, shiftKey, ctrlKey) {\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @example\n *\n *      circle =new draw2d.shape.basic.Circle();\n *      circle.installEditPolicy(new draw2d.policy.figure.GlowSelectionFeedbackPolicy());\n *      canvas.add(circle,90,50);\n *\n *      canvas.add(new draw2d.shape.basic.Label(\"Click on the circle to see the selection feedback\"),20,10);\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n */\ndraw2d.policy.figure.GlowSelectionFeedbackPolicy = draw2d.policy.figure.SelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.GlowSelectionFeedbackPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.figure.GlowSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   * Called by the framework of the Policy should show a resize handle for the given shape\n   *\n   * @param {Boolean} isPrimarySelection\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n    figure.setGlow(true)\n    this.moved(canvas, figure)\n  },\n\n\n  /**\n   * \n   *\n   * @param {draw2d.Figure} figure the unselected figure\n   */\n  onUnselect: function (canvas, figure) {\n    this._super(canvas, figure)\n    figure.setGlow(false)\n  }\n\n})\n","\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.BusSelectionFeedbackPolicy\n */\nimport draw2d from '../../packages'\n\ndraw2d.policy.figure.HBusSelectionFeedbackPolicy = draw2d.policy.figure.BusSelectionFeedbackPolicy.extend(\n    /** @lends draw2d.policy.figure.HBusSelectionFeedbackPolicy.prototype */\n    {\n    \n    NAME: \"draw2d.policy.figure.HBusSelectionFeedbackPolicy\",\n    /**\n     * Creates a new Router object\n     */\n    init: function( attr, setter, getter)\n    {\n        this._super( attr, setter, getter);\n    },\n\n    /**\n     * \n     * Callback if the figure has been moved\n     *\n     * @param figure\n     *\n     * @template\n     */\n    moved: function(canvas, figure){\n        if(figure.selectionHandles.isEmpty()){\n            return; // silently\n        }\n        var r4= figure.selectionHandles.find(function(handle){return handle.type===4});\n        var r8= figure.selectionHandles.find(function(handle){return handle.type===8});\n\n        r4.setDimension(r4.getWidth(), figure.getHeight());\n        r8.setDimension(r4.getWidth(), figure.getHeight());\n\n        this._super(canvas,figure);\n     }\n\n\n});\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * An EditPolicy for use with Figures. With this edit policy you can move the shape only in a horizontal manner.\n *\n *\n * @example\n *      // add some demo figure to the canvas\n *      var circle =new draw2d.shape.basic.Circle({diameter:50, x:10, y:30});\n *      canvas.add(circle);\n *\n *      // add the edit policy to the shape. At this point you can move the shape only\n *      // horizontal\n *      circle.installEditPolicy(new draw2d.policy.figure.HorizontalEditPolicy());\n *\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.figure.DragDropEditPolicy\n */\ndraw2d.policy.figure.HorizontalEditPolicy = draw2d.policy.figure.DragDropEditPolicy.extend(\n  /** @lends draw2d.policy.figure.HorizontalEditPolicy.prototype */\n  {\n\n    NAME: \"draw2d.policy.figure.HorizontalEditPolicy\",\n\n    /**\n     * Creates a new constraint object\n     *\n     */\n    init: function (attr, setter, getter) {\n      this._super(attr, setter, getter)\n    },\n\n\n    /**\n     *\n     * It is only possible to drag&drop the element in a horizontal line\n     *\n     * @param figure\n     * @param {Number|draw2d.geo.Point} x\n     * @param {number} [y]\n     *\n     * @returns {draw2d.geo.Point} the constraint position of the figure\n     */\n    adjustPosition: function (figure, x, y) {\n      return new draw2d.geo.Point(x, figure.getY())\n    }\n\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A SelectionFeedbackPolicy with resize handles (rectangles) on each side and corner of the shape\n *\n *\n * @example\n *\n *      circle =new draw2d.shape.basic.Circle({diameter:50});\n *      circle.installEditPolicy(new draw2d.policy.RectangleSelectionFeedbackPolicy());\n *      canvas.add(circle,90,50);\n *\n *      canvas.add(new draw2d.shape.basic.Label({text:\"Click on the circle to see the selection feedback\"}),20,10);\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n */\ndraw2d.policy.figure.RectangleSelectionFeedbackPolicy = draw2d.policy.figure.SelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.RectangleSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.figure.RectangleSelectionFeedbackPolicy\",\n  /**\n   * Creates a selection feedback for a shape.\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n    if (figure.selectionHandles.isEmpty()) {\n      // Add a dotted line rectangle to the figure. Override the show/hide method of the standard\n      // figure to avoid adding these element to the hit test of the canvas. In this case the element\n      // is just visible but not part of the model or responsible for any drag/drop operation\n      // #2C70FF #2096fc\n      let box = new draw2d.shape.basic.Rectangle({bgColor: null, dashArray: \"- \", color: \"#2C70FF\", stroke: 0.5})\n      box.hide = function () {\n        // IMPORTANT\n        // don't add/remove this rectangle to the canvas resizeHandles. This rect isn't responsible for any hitTest or\n        // dragDrop operation\n        //canvas.resizeHandles.remove(box);\n        box.setCanvas(null)\n      }\n      box.show = function (canvas) {\n        box.setCanvas(canvas)\n        // IMPORTANT\n        // don't add/remove this rectangle to the canvas resizeHandles. This rect isn't responsible for any hitTest or\n        // dragDrop operation\n        //canvas.resizeHandles.remove(box);\n        //canvas.resizeHandles.add(box);\n        box.toFront(figure)\n      }\n\n      // create standard Resize handles for the figure\n      //\n      let r1 = this.createResizeHandle(figure, 1) // 1 = LEFT TOP\n      let r3 = this.createResizeHandle(figure, 3) // 3 = RIGHT_TOP\n      let r5 = this.createResizeHandle(figure, 5) // 5 = RIGHT_BOTTOM\n      let r7 = this.createResizeHandle(figure, 7) // 7 = LEFT_BOTTOM\n      figure.selectionHandles.add(r1, r3, r5, r7)\n      r1.show(canvas)\n      r3.show(canvas)\n      r5.show(canvas)\n      r7.show(canvas)\n\n\n      // change the look&feel of the corner resizehandles if the\n      // figure isn't resizeable\n      //\n      if (figure.isResizeable() === false) {\n        let attr = {bgColor: null, draggable:false}\n        r1.attr(attr)\n        r3.attr(attr)\n        r5.attr(attr)\n        r7.attr(attr)\n        r1.setDraggable(false)\n        r3.setDraggable(false)\n        r5.setDraggable(false)\n        r7.setDraggable(false)\n      }\n\n      // show only the additional resizehandles if the figure is resizeable and didn't care about\n      // the aspect ration\n      //\n      if ((!figure.getKeepAspectRatio()) && figure.isResizeable()) {\n        let r2 = this.createResizeHandle(figure, 2) // 2 = CENTER_TOP\n        let r4 = this.createResizeHandle(figure, 4) // 4 = RIGHT_MIDDLE\n        let r6 = this.createResizeHandle(figure, 6) // 6 = CENTER_BOTTOM\n        let r8 = this.createResizeHandle(figure, 8) // 8 = LEFT_MIDDLE\n        figure.selectionHandles.add(r2, r4, r6, r8)\n        r2.show(canvas)\n        r4.show(canvas)\n        r6.show(canvas)\n        r8.show(canvas)\n      }\n\n      // add the reference of the \"ant box\" to the figure as well. But wee add them\n      // to the end of the array because inherit classes expect the resizehandles\n      // on index 0-7.\n      //\n      figure.selectionHandles.add(box)\n\n      // call the box.show() at last to ensure that the resize handles are above the\n      // rectangle. The rectangle did a toFront(parentShape);\n      box.show(canvas)\n    }\n    this.moved(canvas, figure)\n  },\n\n\n  /**\n   * \n   * Callback if the figure has been moved. In this case we must update the position of the\n   * resize handles and the \"ant\" box.\n   *\n   * @param figure\n   *\n   * @template\n   */\n  moved: function (canvas, figure) {\n\n    if (figure.selectionHandles.isEmpty()) {\n      return // silently\n    }\n\n    let margin = 3 * canvas.getZoom()\n    let objHeight = figure.getHeight()\n    let objWidth = figure.getWidth()\n    let xPos = figure.getAbsoluteX()\n    let yPos = figure.getAbsoluteY()\n\n    let r1 = figure.selectionHandles.find(handle => handle.type === 1)\n    let r3 = figure.selectionHandles.find(handle => handle.type === 3)\n    let r5 = figure.selectionHandles.find(handle => handle.type === 5)\n    let r7 = figure.selectionHandles.find(handle => handle.type === 7)\n\n    r1.setPosition(xPos-r1.getWidth(),yPos-r1.getHeight());\n    r3.setPosition(xPos+objWidth,yPos-r3.getHeight());\n    r5.setPosition(xPos+objWidth,yPos+objHeight);\n    r7.setPosition(xPos-r7.getWidth(),yPos+objHeight);\n\n    if (!figure.getKeepAspectRatio() && figure.isResizeable()) {\n      let r2 = figure.selectionHandles.find(handle => handle.type === 2)\n      let r4 = figure.selectionHandles.find(handle => handle.type === 4)\n      let r6 = figure.selectionHandles.find(handle => handle.type === 6)\n      let r8 = figure.selectionHandles.find(handle => handle.type === 8)\n\n      r2.setPosition(xPos+(objWidth/2)-(r2.getWidth()/2),yPos-r2.getHeight());\n      r4.setPosition(xPos+objWidth,yPos+(objHeight/2)-(r4.getHeight()/2));\n      r6.setPosition(xPos+(objWidth/2)-(r6.getWidth()/2),yPos+objHeight);\n      r8.setPosition(xPos-r8.getWidth(),yPos+(objHeight/2)-(r8.getHeight()/2));\n    }\n    let box = figure.selectionHandles.last()\n    box.attr({\n      x:xPos-margin,\n      y:yPos-margin,\n      width:objWidth + margin*2,\n      height: objHeight + margin*2,\n      stroke:canvas.getZoom()\n    })\n\n    box.setRotationAngle(figure.getRotationAngle())\n  },\n\n  createResizeHandle: function (owner, type){\n    return new draw2d.ResizeHandle({ owner:owner, type:type, width:10, height:10 });\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * An EditPolicy for use with Figures. The constraint for RegionEditPolicy is a Rectangle. It is\n * not possible to move the related figure outside this constrained area.\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.figure.DragDropEditPolicy\n */\ndraw2d.policy.figure.RegionEditPolicy = draw2d.policy.figure.DragDropEditPolicy.extend(\n  /** @lends draw2d.policy.figure.RegionEditPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.figure.RegionEditPolicy\",\n\n  /**\n   * Creates a new constraint object\n   *\n   * @param {Number|draw2d.geo.Rectangle} x x coordinate or a rectangle as constraint for the assigned figure.\n   * @param {Number} y\n   * @param {Number} w\n   * @param {Number} h\n   */\n  init: function (x, y, w, h) {\n    this._super()\n    if (x instanceof draw2d.geo.Rectangle) {\n      this.constRect = x\n    }\n    else if (typeof h === \"number\") {\n      this.constRect = new draw2d.geo.Rectangle(x, y, w, h)\n    }\n    else {\n      throw \"Invalid parameter. RegionEditPolicy need a rectangle as parameter in the constructor\"\n    }\n  },\n\n  /**\n   * \n   * Update the constraint bounding box for the policy.\n   *\n   * @param {draw2d.geo.Rectangle} boundingBox the constraint rectangle\n   * @since 4.8.2\n   * @returns {this}\n   */\n  setBoundingBox: function (boundingBox) {\n    this.constRect = boundingBox\n\n    return this\n  },\n\n  /**\n   * \n   * Adjust the coordinates to the rectangle/region of this constraint.\n   *\n   * @param {draw2d.Figure} figure\n   * @param {Number|draw2d.geo.Point} x\n   * @param {Number} [y]\n   *\n   * @returns {draw2d.geo.Point} the constraint position of the figure\n   */\n  adjustPosition: function (figure, x, y) {\n    let r = null\n    if (x instanceof draw2d.geo.Point) {\n      r = new draw2d.geo.Rectangle(x.x, x.y, figure.getWidth(), figure.getHeight())\n    }\n    else {\n      r = new draw2d.geo.Rectangle(x, y, figure.getWidth(), figure.getHeight())\n    }\n    r = this.constRect.moveInside(r)\n    return r.getTopLeft()\n  },\n\n  /**\n   * \n   * Adjust the dimension of the rectangle to fit into the region of the policy\n   *\n   * @param {draw2d.Figure} figure\n   * @param {Number} w\n   * @param {Number} h\n   * @returns {draw2d.geo.Rectangle} the constraint position of the figure\n   */\n  adjustDimension: function (figure, w, h) {\n    let diffW = (figure.getAbsoluteX() + w) - this.constRect.getRight()\n    let diffH = (figure.getAbsoluteY() + h) - this.constRect.getBottom()\n\n    if (diffW > 0) {\n      w = w - diffW\n    }\n    if (diffH > 0) {\n      h = h - diffH\n    }\n\n    return new draw2d.geo.Rectangle(0, 0, w, h)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Selection feedback policy without \"marching ant lines\" or any other rectangle highlight. Just\n * some resize handles at each corner of the shape.\n *\n *\n * @example\n *      circle =new draw2d.shape.basic.Circle();\n *      circle.installEditPolicy(new draw2d.policy.ResizeSelectionFeedbackPolicy());\n *      canvas.add(circle,90,50);\n *\n *      canvas.add(new draw2d.shape.basic.Label({text:\"Click on the circle to see the selection feedback\"}),20,10);\n *\n * @author Andreas Herz\n * @since 4.0.0\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n *\n */\ndraw2d.policy.figure.ResizeSelectionFeedbackPolicy = draw2d.policy.figure.SelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.ResizeSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.figure.ResizeSelectionFeedbackPolicy\",\n  /**\n   * Creates a new Router object\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   *\n   * Called by the framework of the Policy should show a resize handle for the given shape\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Figure} figure the selected figure\n   * @param {Boolean} [isPrimarySelection]\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n\n    if (figure.selectionHandles.isEmpty()) {\n      // create standard Resize handles for the figure\n      //\n      var r1 = draw2d.Configuration.factory.createResizeHandle(figure, 1) // 1 = LEFT TOP\n      var r3 = draw2d.Configuration.factory.createResizeHandle(figure, 3) // 3 = RIGHT_TOP\n      var r5 = draw2d.Configuration.factory.createResizeHandle(figure, 5) // 5 = RIGHT_BOTTOM\n      var r7 = draw2d.Configuration.factory.createResizeHandle(figure, 7) // 7 = LEFT_BOTTOM\n      figure.selectionHandles.add(r1, r3, r5, r7)\n      r1.show(canvas)\n      r3.show(canvas)\n      r5.show(canvas)\n      r7.show(canvas)\n\n      // The corner ResizeHandles are only draggable fi the figure is\n      // resizeable. But the Resize handles are visible\n      //\n\n      // change the look&feel of the corner resizehandles if the\n      // figure isn't resizeable\n      //\n      if (figure.isResizeable() === false) {\n        r1.setBackgroundColor(null)\n        r3.setBackgroundColor(null)\n        r5.setBackgroundColor(null)\n        r7.setBackgroundColor(null)\n        r1.setDraggable(false)\n        r3.setDraggable(false)\n        r5.setDraggable(false)\n        r7.setDraggable(false)\n      }\n\n      // show only the additional resizehandles if the figure is resizeable\n      //\n      if ((!figure.getKeepAspectRatio()) && figure.isResizeable()) {\n        var r2 = draw2d.Configuration.factory.createResizeHandle(figure, 2) // 2 = CENTER_TOP\n        var r4 = draw2d.Configuration.factory.createResizeHandle(figure, 4) // 4 = RIGHT_MIDDLE\n        var r6 = draw2d.Configuration.factory.createResizeHandle(figure, 6) // 6 = CENTER_BOTTOM\n        var r8 = draw2d.Configuration.factory.createResizeHandle(figure, 8) // 8 = LEFT_MIDDLE\n        figure.selectionHandles.add(r2, r4, r6, r8)\n        r2.show(canvas)\n        r4.show(canvas)\n        r6.show(canvas)\n        r8.show(canvas)\n      }\n    }\n    this.moved(canvas, figure)\n  },\n\n  /**\n   *\n   * Callback if the figure has been moved. In this case we must update the position of the\n   * resize handles.\n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Figure} figure the moved figure\n   *\n   */\n  moved: function (canvas, figure) {\n    if (figure.selectionHandles.isEmpty()) {\n      return // silently\n    }\n\n    var objHeight = figure.getHeight()\n    var objWidth = figure.getWidth()\n    var xPos = figure.getX()\n    var yPos = figure.getY()\n\n    var r1 = figure.selectionHandles.find(function (handle) {\n      return handle.type === 1\n    })\n    var r3 = figure.selectionHandles.find(function (handle) {\n      return handle.type === 3\n    })\n    var r5 = figure.selectionHandles.find(function (handle) {\n      return handle.type === 5\n    })\n    var r7 = figure.selectionHandles.find(function (handle) {\n      return handle.type === 7\n    })\n    r1.setPosition(xPos - r1.getWidth(), yPos - r1.getHeight())\n    r3.setPosition(xPos + objWidth, yPos - r3.getHeight())\n    r5.setPosition(xPos + objWidth, yPos + objHeight)\n    r7.setPosition(xPos - r7.getWidth(), yPos + objHeight)\n\n    if (!figure.getKeepAspectRatio()) {\n      var r2 = figure.selectionHandles.find(function (handle) {\n        return handle.type === 2\n      })\n      var r4 = figure.selectionHandles.find(function (handle) {\n        return handle.type === 4\n      })\n      var r6 = figure.selectionHandles.find(function (handle) {\n        return handle.type === 6\n      })\n      var r8 = figure.selectionHandles.find(function (handle) {\n        return handle.type === 8\n      })\n\n      r2.setPosition(xPos + (objWidth / 2) - (r2.getWidth() / 2), yPos - r2.getHeight())\n      r4.setPosition(xPos + objWidth, yPos + (objHeight / 2) - (r4.getHeight() / 2))\n      r6.setPosition(xPos + (objWidth / 2) - (r6.getWidth() / 2), yPos + objHeight)\n      r8.setPosition(xPos - r8.getWidth(), yPos + (objHeight / 2) - (r8.getHeight() / 2))\n    }\n  }\n\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @example\n *      circle =new draw2d.shape.basic.Circle();\n *      circle.installEditPolicy(new draw2d.policy.RoundRectangleSelectionFeedbackPolicy());\n *      canvas.add(circle,90,50);\n *\n *      canvas.add(new draw2d.shape.basic.Label({text:\"Click on the circle to see the selection feedback\"}),20,10);\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.RectangleSelectionFeedbackPolicy\n */\ndraw2d.policy.figure.RoundRectangleSelectionFeedbackPolicy = draw2d.policy.figure.RectangleSelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.RoundRectangleSelectionFeedbackPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.figure.RoundRectangleSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  createResizeHandle: function (owner, type) {\n    return new draw2d.ResizeHandle({owner: owner, type: type, width: 12, height: 12, radius: 4})\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A {@link  draw2d.policy.SelectionFeedbackPolicy} that is sensitive to the canvas selection. Subclasses will typically\n * decorate the {@link draw2d.Figure figure} with things like selection handles and/or focus feedback.\n * <br>\n * If you want to change the handle visibility for a figure, then you should use SelectionFeedbackPolicy to do that.\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.DragDropEditPolicy\n */\ndraw2d.policy.figure.SelectionFeedbackPolicy = draw2d.policy.figure.SelectionPolicy.extend(\n  /** @lends draw2d.policy.figure.SelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.figure.SelectionFeedbackPolicy\",\n\n  /**\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   *\n   * @param {draw2d.Figure} figure the unselected figure\n   */\n  onUnselect: function (canvas, figure) {\n    this._super(canvas, figure)\n\n    figure.selectionHandles.each( (i, e) => e.hide())\n    figure.selectionHandles = new draw2d.util.ArrayList()\n  },\n\n  /**\n   * \n   * Called by the host if the policy has been installed.\n   *\n   * @param {draw2d.Figure} figure\n   */\n  onInstall: function (figure) {\n    this._super(figure)\n\n    let canvas = figure.getCanvas()\n    if (canvas !== null) {\n      if (canvas.getSelection().contains(figure)) {\n        this.onSelect(canvas, figure, true)\n      }\n    }\n  },\n\n\n  /**\n   * \n   * Called by the host if the policy has been uninstalled.\n   *\n   * @param {draw2d.Figure} figure\n   */\n  onUninstall: function (figure) {\n    this._super(figure)\n\n    figure.selectionHandles.each( (i, e) => e.hide())\n    figure.selectionHandles = new draw2d.util.ArrayList()\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A {@link  draw2d.policy.SelectionFeedbackPolicy} that is sensitive to the canvas selection. Subclasses will typically\n * decorate the {@link draw2d.Figure figure} with things like selection handles and/or focus feedback.\n * <br>\n * If you want to change the handle visibility for a figure, then you should use SelectionFeedbackPolicy to do that.\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.DragDropEditPolicy\n */\ndraw2d.policy.figure.SelectionPolicy = draw2d.policy.figure.DragDropEditPolicy.extend(\n  /** @lends draw2d.policy.figure.SelectionPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.figure.SelectionPolicy\",\n\n  /**\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   *\n   *\n   * @template\n   * @param figure\n   * @param isPrimarySelection\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n  },\n\n\n  /**\n   *\n   *\n   * @param {draw2d.Figure} figure the unselected figure\n   */\n  onUnselect: function (canvas, figure) {\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Add only very small resize handles to the figure.\n *\n *\n *\n * @example\n *      circle =new draw2d.shape.basic.Circle();\n *      circle.installEditPolicy(new draw2d.policy.SlimSelectionFeedbackPolicy());\n *      canvas.add(circle,90,50);\n *\n *      canvas.add(new draw2d.shape.basic.Label({text:\"Click on the circle to see the selection feedback\"}),20,10);\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.RectangleSelectionFeedbackPolicy\n */\ndraw2d.policy.figure.SlimSelectionFeedbackPolicy = draw2d.policy.figure.RectangleSelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.SlimSelectionFeedbackPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.figure.SlimSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  createResizeHandle: function (owner, type) {\n    return new draw2d.ResizeHandle({owner: owner, type: type, width: 6, height: 6, radius: 0})\n  }\n})\n","\n/**\n * @class\n *\n * Selection feedback policy for vertical bus figures.\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.BusSelectionFeedbackPolicy\n */\nimport draw2d from '../../packages'\n\ndraw2d.policy.figure.VBusSelectionFeedbackPolicy = draw2d.policy.figure.BusSelectionFeedbackPolicy.extend(\n    /** @lends draw2d.policy.figure.VBusSelectionFeedbackPolicy.prototype */\n    {\n    \n    NAME: \"draw2d.policy.figure.VBusSelectionFeedbackPolicy\",\n    /**\n     * Creates a new Router object\n     */\n    init: function( attr, setter, getter)\n    {\n        this._super( attr, setter, getter);\n    },\n\n\n    /**\n     *\n     * Callback if the figure has been moved\n     *\n     * @param {draw2d.Canvas} canvas The host canvas\n     * @param {draw2d.Figure} figure The related figure\n     *\n     **/\n    moved: function(canvas,figure)\n    {\n        if(figure.selectionHandles.isEmpty()){\n            return; // silently\n        }\n\n        var r2= figure.selectionHandles.find(function(handle){return handle.type===2});\n        var r6= figure.selectionHandles.find(function(handle){return handle.type===6});\n\n        var objWidth = figure.getWidth();\n        // adjust the resize handles on the left/right to the new dimension of the shape\n        //\n        r2.setDimension(objWidth, r2.getHeight());\n        r6.setDimension(objWidth, r6.getHeight());\n\n        this._super(canvas,figure);\n     }\n\n});\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Called by the framework if the user edit the position of a figure with a drag drop operation.\n * Sub class like SelectionEditPolicy or RegionEditPolicy cam adjust th e position of the figure or the selections handles.\n *\n * @author  Andreas Herz\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n */\ndraw2d.policy.figure.VertexSelectionFeedbackPolicy = draw2d.policy.figure.SelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.VertexSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.figure.VertexSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   *\n   *\n   * @param {draw2d.Canvas} canvas The host canvas\n   * @param {draw2d.Connection} connection the selected figure\n   * @param {Boolean} isPrimarySelection\n   */\n  onSelect: function (canvas, connection, isPrimarySelection) {\n//    \tthis._super(canvas, connection, isPrimarySelection);\n\n    let points = connection.getVertices()\n    for (let i = 0; i < points.getSize(); i++) {\n      let handle = new draw2d.shape.basic.VertexResizeHandle(connection, i)\n      connection.selectionHandles.add(handle)\n      handle.setDraggable(connection.isResizeable())\n      handle.show(canvas)\n\n      if (i !== 0) {\n        let handle = new draw2d.shape.basic.GhostVertexResizeHandle(connection, i - 1)\n        connection.selectionHandles.add(handle)\n        handle.setDraggable(connection.isResizeable())\n        handle.show(canvas)\n      }\n    }\n\n    this.moved(canvas, connection)\n  },\n\n  /**\n   *\n   * Callback method if the figure has been moved.\n   *\n   * @param {draw2d.Canvas} canvas The host canvas\n   * @param {draw2d.Figure} figure The related figure\n   */\n  moved: function (canvas, figure) {\n    figure.selectionHandles.each( (i, e) => e.relocate())\n  }\n\n\n})\n","\n/**\n * @class\n *\n * An EditPolicy for use with Figures. With this edit policy you can move the shape only in a vertical manner.\n *\n *\n * @example\n *      // add some demo figure to the canvas\n *      var circle =new draw2d.shape.basic.Circle({diameter:50, x:10, y:30});\n *      canvas.add(circle);\n *\n *      // add the edit policy to the shape. At this point you can move the shape only\n *      // horizontal\n *      circle.installEditPolicy(new draw2d.policy.figure.VerticalEditPolicy());\n *\n *\n * @author Andreas Herz\n *\n * @extends draw2d.policy.figure.DragDropEditPolicy\n */\nimport draw2d from '../../packages'\n\ndraw2d.policy.figure.VerticalEditPolicy = draw2d.policy.figure.DragDropEditPolicy.extend(\n    /** @lends draw2d.policy.figure.VerticalEditPolicy.prototype */\n    {\n    \n    NAME: \"draw2d.policy.figure.VerticalEditPolicy\",\n\n    /**\n     * Creates a new constraint object\n     */\n    init: function( attr, setter, getter)\n    {\n        this._super( attr, setter, getter);\n    },\n\n\n    /**\n     *\n     * It is only possible to drag&drop the element in a vertical line\n     *\n     * @param {draw2d.Figure} figure\n     * @param {Number|draw2d.geo.Point} x\n     * @param {number} [y]\n     * @returns {draw2d.geo.Point} the constraint position of the figure\n     */\n    adjustPosition: function(figure, x, y)\n    {\n        return new draw2d.geo.Point(figure.getX(),y);\n    }\n\n});\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * This selection shows only selection handles for the width. It is only possible to change the width\n * of an shaped. The height stays always the same or is recalculated by the figure itself.\n *\n * @example\n *      // add some demo figure to the canvas\n *      //\n *      let shape =new draw2d.shape.basic.Rectangle({width:50, height:100, x:10, y:30});\n *      canvas.add(shape);\n *\n *      // At this point you can only change the width of the shape\n *      //\n *      shape.installEditPolicy(new draw2d.policy.figure.WidthSelectionFeedbackPolicy());\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n */\ndraw2d.policy.figure.WidthSelectionFeedbackPolicy = draw2d.policy.figure.SelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.figure.BusSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.figure.BusSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   *\n   * Called by the framework of the Policy should show a resize handle for the given shape\n   *\n   * @param {draw2d.Canvas} canvas the host of the diagram\n   * @param {draw2d.Figure} figure the figure to select\n   * @param {Boolean} isPrimarySelection\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n    if (figure.selectionHandles.isEmpty()) {\n      let r4 = new draw2d.ResizeHandle({owner: figure, type: 4}) // 4 = RIGHT_MIDDLE\n      let r8 = new draw2d.ResizeHandle({owner: figure, type: 8}) // 8 = LEFT_MIDDLE\n\n      r4.installEditPolicy(new draw2d.policy.figure.HorizontalEditPolicy())\n      r8.installEditPolicy(new draw2d.policy.figure.HorizontalEditPolicy())\n      figure.selectionHandles.add(r4, r8)\n\n      r4.setDraggable(figure.isResizeable())\n      r8.setDraggable(figure.isResizeable())\n\n      r4.show(canvas)\n      r8.show(canvas)\n    }\n    this.moved(canvas, figure)\n  },\n\n\n  /**\n   *\n   * Callback if the figure has been moved\n   *\n   * @param {draw2d.Canvas} canvas The host canvas\n   * @param {draw2d.Figure} figure The related figure\n   *\n   * @template\n   */\n  moved: function (canvas, figure) {\n    if (figure.selectionHandles.isEmpty()) {\n      return // silently\n    }\n    let r4 = figure.selectionHandles.find(handle => handle.type === 4)\n    let r8 = figure.selectionHandles.find(handle => handle.type === 8)\n\n    let objWidth = figure.getWidth()\n\n    let xPos = figure.getX()\n    let yPos = figure.getY()\n    r4.setDimension(r4.getWidth(), figure.getHeight())\n    r8.setDimension(r8.getWidth(), figure.getHeight())\n    r4.setPosition(xPos + objWidth, yPos)\n    r8.setPosition(xPos - r8.getWidth(), yPos)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.SelectionFeedbackPolicy\n */\ndraw2d.policy.line.LineSelectionFeedbackPolicy = draw2d.policy.figure.SelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.line.LineSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.line.LineSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new selection feedback policy for a line or connection\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   * Called by the framework of the Policy should show a resize handle for the given shape\n   *\n   * @param {draw2d.Canvas} canvas The host canvas\n   * @param {draw2d.Figure} figure The related figure\n   * @param {Boolean} [isPrimarySelection]\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n    if (figure.selectionHandles.isEmpty()) {\n      figure.selectionHandles.add(new draw2d.shape.basic.LineStartResizeHandle(figure))\n      figure.selectionHandles.add(new draw2d.shape.basic.LineEndResizeHandle(figure))\n\n      figure.selectionHandles.each( (i, e) => {\n        e.setDraggable(figure.isResizeable())\n        e.show(canvas)\n      })\n    }\n    this.moved(canvas, figure)\n  },\n\n  /**\n   * \n   * Callback method if the figure has been moved.\n   *\n   * @template\n   */\n  moved: function (canvas, figure) {\n    figure.selectionHandles.each( (i, e) => e.relocate())\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Feedback and edit policy for the InteractiveManhattanRouter.\n *\n * @author  Andreas Herz\n * @extends draw2d.policy.line.LineSelectionFeedbackPolicy\n */\n// do not delete them\nimport plugin from \"lib/jquery.contextmenu\"\nimport css from 'css/contextmenu.css'\n\ndraw2d.policy.line.OrthogonalSelectionFeedbackPolicy = draw2d.policy.line.LineSelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.line.OrthogonalSelectionFeedbackPolicy.prototype */\n  {\n  \n  NAME: \"draw2d.policy.line.OrthogonalSelectionFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    // The ResizeHandle for the Policy. This is inline to avoid that a user want to use them without\n    // the right installed policy.\n    //\n    this.ResizeHandle = draw2d.ResizeHandle.extend(\n      /** @lends draw2d.policy.line.OrthogonalSelectionFeedbackPolicy.ResizeHandle.prototype */\n      {\n      \n      NAME: \"draw2d.policy.line.OrthogonalSelectionFeedbackPolicy.ResizeHandle\",\n\n      init: function (owner, index) {\n        this._super({owner})\n        this.index = index\n      },\n\n\n      /**\n       * \n       * Called if a drag&drop operation starts.<br>\n       * @param {Number} x the x-coordinate of the mouse up event\n       * @param {Number} y the y-coordinate of the mouse up event\n       * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n       * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n       *\n       * @private\n       **/\n      onDragStart: function (x, y, shiftKey, ctrlKey) {\n        this._super(x, y, shiftKey, ctrlKey)\n        this.command = this.getCanvas().getPrimarySelection().createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.MOVE_VERTICES))\n\n        // Vertex is a reference and not a copy of the point\n        this.vertex = this.owner.getVertex(this.index).clone()\n      },\n\n      /**\n       * \n       * Called from the framework during a drag&drop operation of the ResizeHandles\n       *\n       * @param {Number} dx the x difference between the start of the drag drop operation and now\n       * @param {Number} dy the y difference between the start of the drag drop operation and now\n       * @param {Number} dx2 The x diff since the last call of this dragging operation\n       * @param {Number} dy2 The y diff since the last call of this dragging operation\n       *\n       * @returns {Boolean}\n       **/\n      onDrag: function (dx, dy, dx2, dy2) {\n        if (this.command == null) {\n          return false\n        }\n\n        let MINDIST = this.owner.getRouter().MINDIST || 10\n\n        let fromDir = this.owner.getSource().getConnectionDirection(this.owner.getTarget())\n        let toDir = this.owner.getTarget().getConnectionDirection(this.owner.getSource())\n\n        this.vertex.translate(dx2, dy2)\n\n        let vertices = this.owner.getVertices()\n        let count = vertices.getSize()\n        //shortcut for math operations\n        let max = Math.max\n        let min = Math.min\n\n\n        // Keep in mind: \"p1\" is always the dragged handle in the coding below\n        //               marked with an '*' in the diagram\n        //\n\n        // FIRST handle of the connection\n        //\n        if (this.index === 1) {\n          let p0 = vertices.get(this.index - 1) // first vertex of the connection\n          let p1 = vertices.get(this.index) // dragged vertex\n          let p2 = vertices.get(this.index + 1) // additional neighbor\n\n          // vertex alignment to handle:\n          //\n          //      p0 +-----* p1       p1 *------+ p0\n          //               |             |\n          //               |             |\n          //               + p2       p2 +\n          if ((p1.x === p2.x) && (p0.y === p1.y)) {\n            switch (fromDir) {\n              case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n                // p0 is on the left of p1\n                //\n                this.owner.setVertex(1, max(p0.x + MINDIST, this.vertex.x), p1.y) // p1\n                this.owner.setVertex(2, max(p0.x + MINDIST, this.vertex.x), p2.y) // p2\n                break\n              // p0 is on the right of p2\n              //\n              case draw2d.geo.Rectangle.DIRECTION_LEFT:\n                this.owner.setVertex(1, min(p0.x - MINDIST, this.vertex.x), p1.y) // p1\n                this.owner.setVertex(2, min(p0.x - MINDIST, this.vertex.x), p2.y) // p2\n                break\n            }\n          }\n\n          // vertices alignment to handle:\n          //\n          //      p0 +              p1 *--------+ p2\n          //         |                 |\n          //         |                 |\n          //      p1 *-----+ p2     p0 +\n          else {\n            switch (fromDir) {\n              case draw2d.geo.Rectangle.DIRECTION_UP:\n                // p0 is below of p1\n                //\n                this.owner.setVertex(1, p1.x, min(p0.y - MINDIST, this.vertex.y)) // p1\n                this.owner.setVertex(2, p2.x, min(p0.y - MINDIST, this.vertex.y)) // p2\n                break\n              // p0 is above of p2\n              //\n              case draw2d.geo.Rectangle.DIRECTION_DOWN:\n                this.owner.setVertex(1, p1.x, max(p0.y + MINDIST, this.vertex.y)) // p1\n                this.owner.setVertex(2, p2.x, max(p0.y + MINDIST, this.vertex.y)) // p2\n                break\n            }\n          }\n        }\n\n        // LAST handle: Only the left hand side sibling can be changed\n        //\n        else if (this.index === (count - 2)) {\n          let p2 = vertices.get(this.index - 1)  // neighbor of the dragged vertex\n          let p1 = vertices.get(this.index)  // dragged vertex\n          let p0 = vertices.get(this.index + 1)  // last vertex of the connection\n\n          // vertices with this alignment.\n          //\n          //      p2 +-----* p1                 + p0\n          //               |                    |\n          //               |                    |\n          //               + p0     p2 +--------* p1\n          if ((p0.x === p1.x) && (p2.y === p1.y)) {\n            switch (toDir) {\n              // p0 is below of p1\n              case draw2d.geo.Rectangle.DIRECTION_UP:\n                this.owner.setVertex(count - 2, p1.x, min(p0.y - MINDIST, this.vertex.y)) // p1\n                this.owner.setVertex(count - 3, p2.x, min(p0.y - MINDIST, this.vertex.y)) // p2\n                break\n              // p0 is above p2\n              case draw2d.geo.Rectangle.DIRECTION_DOWN:\n                this.owner.setVertex(count - 2, p1.x, max(p0.y + MINDIST, this.vertex.y)) // p1\n                this.owner.setVertex(count - 3, p2.x, max(p0.y + MINDIST, this.vertex.y)) // p2\n                break\n            }\n          }\n\n          // vertices with this alignment.\n          //\n          //      p2 +              p0 +--------* p1\n          //         |                          |\n          //         |                          |\n          //      p1 *-----+ p0              p2 +\n          else {\n            switch (toDir) {\n              case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n                // p0 is on the left of p1\n                //\n                this.owner.setVertex(count - 2, max(p0.x + MINDIST, this.vertex.x), p1.y) // p1\n                this.owner.setVertex(count - 3, max(p0.x + MINDIST, this.vertex.x), p2.y) // p2\n                break\n              // p0 is on the right of p2\n              //\n              case draw2d.geo.Rectangle.DIRECTION_LEFT:\n                this.owner.setVertex(count - 2, min(p0.x - MINDIST, this.vertex.x), p1.y) // p1\n                this.owner.setVertex(count - 3, min(p0.x - MINDIST, this.vertex.x), p2.y) // p2\n                break\n            }\n          }\n        }\n        // The resize handle is in the middle of the connection.\n        // -> In this case the connection MUST HAVE at least 5 vertices\n        //\n        else {\n          let p_m1 = vertices.get(this.index - 2)\n          let p0 = vertices.get(this.index - 1)\n          let p1 = vertices.get(this.index)   // selected DragHandle\n          let p2 = vertices.get(this.index + 1)\n          let p3 = vertices.get(this.index + 2)\n\n          // vertices alignment to handle\n          //\n          //               .              .\n          //               .              .\n          //   p1 *------->+  p0      p0  +<---------* p1\n          //      |        .              .          |\n          //      |        .              .          |\n          //   p2 |                                  | p2\n          //   ...+...                         ......+.....\n          //\n          if ((p1.x === p2.x) && (p1.y === p0.y)) {\n            // Exception handling if the dragged handle (p1) is near by the start of the connection\n            // p_m1 is the start of the connection\n            // p0 must be the immediate neighbor of p_m1\n            //\n            if (this.index - 2 === 0) {\n              switch (fromDir) {\n                case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n                  this.owner.setVertex(this.index - 1, p0.x, max(this.vertex.y, p_m1.y - MINDIST))          // p0\n                  this.owner.setVertex(this.index, this.vertex.x, max(this.vertex.y, p_m1.y - MINDIST)) // p1\n                  this.owner.setVertex(this.index + 1, this.vertex.x, p2.y)                         // p2\n                  break\n                case draw2d.geo.Rectangle.DIRECTION_LEFT:\n                  this.owner.setVertex(this.index - 1, p0.x, min(this.vertex.y, p_m1.y + MINDIST))          // p0\n                  this.owner.setVertex(this.index, this.vertex.x, this.vertex.y) // p1\n                  this.owner.setVertex(this.index + 1, this.vertex.x, p2.y)                         // p2\n                  break\n                case draw2d.geo.Rectangle.DIRECTION_UP:\n                  this.owner.setVertex(this.index - 1, p0.x, min(this.vertex.y, p_m1.y - MINDIST))          // p0\n                  this.owner.setVertex(this.index, this.vertex.x, min(this.vertex.y, p_m1.y - MINDIST)) // p1\n                  this.owner.setVertex(this.index + 1, this.vertex.x, p2.y)                         // p2\n                  break\n                case draw2d.geo.Rectangle.DIRECTION_DOWN:\n                  this.owner.setVertex(this.index - 1, p0.x, max(this.vertex.y, p_m1.y + MINDIST))          // p0\n                  this.owner.setVertex(this.index, this.vertex.x, max(this.vertex.y, p_m1.y + MINDIST)) // p1\n                  this.owner.setVertex(this.index + 1, this.vertex.x, p2.y)                        // p2\n                  break\n              }\n            }\n            // Exception handling if the dragged handle (p1L) near by the end of the connection\n            // p3 is the end of the connection\n            //\n            else if ((this.index - count + 3) === 0) {\n              switch (toDir) {\n                case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n                  this.owner.setVertex(this.index - 1, p0.x, this.vertex.y)                       // p0\n                  this.owner.setVertex(this.index, max(this.vertex.x, p3.x + MINDIST), this.vertex.y) // p1\n                  this.owner.setVertex(this.index + 1, max(this.vertex.x, p3.x + MINDIST), p2.y)          // p2\n                  break\n                case draw2d.geo.Rectangle.DIRECTION_LEFT:\n                  this.owner.setVertex(this.index - 1, p0.x, this.vertex.y)                       // p0\n                  this.owner.setVertex(this.index, min(this.vertex.x, p3.x - MINDIST), this.vertex.y) // p1\n                  this.owner.setVertex(this.index + 1, min(this.vertex.x, p3.x - MINDIST), p2.y)          // p2\n                  break\n              }\n            }\n            else {\n              this.owner.setVertex(this.index - 1, p0.x, this.vertex.y)                          // p0\n              this.owner.setVertex(this.index, this.vertex)                                 // p1\n              this.owner.setVertex(this.index + 1, this.vertex.x, p2.y)                          // p2\n            }\n          }\n          // vertices alignment to handle\n          //\n          //  ...+...                            ...+...\n          //  p0 |                        .         | p0\n          //     |          .             .         |\n          //     |          .             .         |\n          //  p1 *----------+ p2      p2  +---------* p1\n          //                .             .\n          //                .             .\n          else if ((p0.x === p1.x) && (p1.y === p2.y)) {\n            // p_m1 is the start of the analyzed segment\n            // p0 must be the immediate neighbor of p_m1\n            //\n            if (this.index - 2 === 0) {\n              switch (fromDir) {\n                case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n                  this.owner.setVertex(this.index - 1, max(this.vertex.x, p_m1.x + MINDIST), p0.y)          // p0\n                  this.owner.setVertex(this.index, max(this.vertex.x, p_m1.x + MINDIST), this.vertex.y) // p1\n                  this.owner.setVertex(this.index + 1, p2.x, this.vertex.y)                              // p2\n                  break\n                case draw2d.geo.Rectangle.DIRECTION_LEFT:\n                  this.owner.setVertex(this.index - 1, min(this.vertex.x, p_m1.x - MINDIST), p0.y)          // p0\n                  this.owner.setVertex(this.index, min(this.vertex.x, p_m1.x - MINDIST), this.vertex.y) // p1\n                  this.owner.setVertex(this.index + 1, p2.x, this.vertex.y)                              // p2\n                  break\n              }\n            }\n            // p3 is the end point\n            //\n            else if ((this.index - count + 3) === 0) {\n              switch (toDir) {\n                case draw2d.geo.Rectangle.DIRECTION_UP:\n                  this.owner.setVertex(this.index - 1, this.vertex.x, max(this.vertex.y, p0.y))      // p0\n                  this.owner.setVertex(this.index, this.vertex.x, min(this.vertex.y, p3.y - MINDIST))   // p1\n                  this.owner.setVertex(this.index + 1, p2.x, min(this.vertex.y, p3.y - MINDIST))   // p2\n                  break\n                case draw2d.geo.Rectangle.DIRECTION_DOWN:\n                  this.owner.setVertex(this.index - 1, this.vertex.x, p0.y)                // p0\n                  this.owner.setVertex(this.index, this.vertex.x, max(this.vertex.y, p3.y + MINDIST))   // p1\n                  this.owner.setVertex(this.index + 1, p2.x, max(this.vertex.y, p3.y + MINDIST))   // p2\n                  break\n              }\n            }\n            // just any element in the middle of the connection\n            //\n            else {\n              this.owner.setVertex(this.index - 1, this.vertex.x, p0.y)                  // p0\n              this.owner.setVertex(this.index, this.vertex)                  // p1\n              this.owner.setVertex(this.index + 1, p2.x, this.vertex.y)                  // p2\n            }\n          }\n        }\n\n        this.relocate()\n\n        // update the command for the undo/redo stuff\n        //\n        if (this.command !== null) {\n          this.command.updateVertices(this.owner.getVertices().clone())\n        }\n\n        // note that the user has changed the routing manually.\n        // This skips the automatic routing.\n        this.owner._routingMetaData.routedByUserInteraction = true\n        return true\n      },\n\n      /**\n       *  Called after a drag and drop action.<br>\n       *        Sub classes can override this method to implement additional stuff. Don't forget to call the super implementation via <code>this._super();</code>\n       *\n       * @param {Number} x the x-coordinate of the mouse event\n       * @param {Number} y the y-coordinate of the mouse event\n       * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n       * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n       *\n       * @returns {Boolean}\n       */\n      onDragEnd: function (x, y, shiftKey, ctrlKey) {\n        let stack = this.getCanvas().getCommandStack()\n\n        stack.execute(this.command)\n        this.command = null\n        return true\n      },\n\n\n      /**\n       * \n       * Controls the location of the resize handle\n       *\n       * @template\n       **/\n      relocate: function () {\n\n        let resizeWidthHalf = this.getWidth() / 2\n        let resizeHeightHalf = this.getHeight() / 2\n\n        let anchor = this.owner.getVertices().get(this.index)\n        if (anchor)\n          this.setPosition(anchor.x - resizeWidthHalf, anchor.y - resizeHeightHalf)\n      }\n\n    })\n  },\n\n\n  /**\n   * \n   *\n   * @template\n   * @param {draw2d.Connection} connection the selected figure\n   * @param {Boolean} isPrimarySelection\n   */\n  onSelect: function (canvas, connection, isPrimarySelection) {\n    this._super(canvas, connection, isPrimarySelection)\n\n    let points = connection.getVertices()\n    let i = 1\n    for (; i < (points.getSize() - 1); i++) {\n      let handle = new this.ResizeHandle(connection, i)\n      connection.selectionHandles.add(handle)\n      handle.setDraggable(connection.isResizeable())\n      handle.show(canvas)\n    }\n\n    this.moved(canvas, connection)\n  },\n\n\n  /**\n   * \n   * remove the segment with the given index.\n   * You must check if it possible to remove the segment before. The method didn'T do any consistency checks.\n   *\n   * @param conn\n   * @param segmentIndex\n   */\n  removeSegment: function (conn, segmentIndex) {\n    let PADDING = 10\n\n    let segmentCount = conn.getVertices().getSize() - 1\n\n    let fromPt = conn.getStartPoint()\n    let fromDir = conn.getSource().getConnectionDirection(conn.getTarget())\n\n    let toPt = conn.getEndPoint()\n    let toDir = conn.getTarget().getConnectionDirection(conn.getSource())\n\n    let p0 = conn.getVertex(segmentIndex - 1)\n    let p1 = conn.getVertex(segmentIndex)\n    let p2 = conn.getVertex(segmentIndex + 1)\n    let p3 = conn.getVertex(segmentIndex + 2)\n\n    //                                             p0 .\n    // Es wird ein Horizontales Segment               .\n    // geloescht. Es muessen somit die Punkte         .\n    // p0 und p3 neu gesetzt werden.               p1 +------*-----+ p2\n    // Ihre neue X-Koordinate ist somit in der               ^     .\n    // Mitte des geloeschten Segmentes                      newX   .\n    //                                                             . p3\n    //\n    if (p1.y === p2.y) {\n      let newX = (p1.x + p2.x) / 2\n      // Die neue X-Koordinate muss auf jeden Falls zwischen p-1 und p4 liegen\n      //\n      if (segmentIndex === 1) {\n        switch (fromDir) {\n          case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n            newX = Math.max(newX, fromPt.x + PADDING)\n            break\n          case draw2d.geo.Rectangle.DIRECTION_LEFT:\n            newX = Math.min(newX, fromPt.x - PADDING)\n            break\n          case draw2d.geo.Rectangle.DIRECTION_UP:\n            newX = fromPt.x\n            break\n          case draw2d.geo.Rectangle.DIRECTION_DOWN:\n            newX = fromPt.x\n            break\n        }\n      }\n\n      if (segmentIndex === segmentCount - 2) {\n        switch (fromDir) {\n          case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n            newX = Math.max(newX, toPt.x + PADDING)\n            break\n          case draw2d.geo.Rectangle.DIRECTION_LEFT:\n            newX = Math.min(newX, toPt.x - PADDING)\n            break\n          case draw2d.geo.Rectangle.DIRECTION_UP:\n            newX = toPt.x\n            break\n          case draw2d.geo.Rectangle.DIRECTION_DOWN:\n            newX = toPt.x\n            break\n        }\n      }\n\n      conn.setVertex(segmentIndex - 1, new draw2d.geo.Point(newX, p0.y))\n      conn.setVertex(segmentIndex + 2, new draw2d.geo.Point(newX, p3.y))\n\n      conn.removeVertexAt(segmentIndex)\n      conn.removeVertexAt(segmentIndex)\n      conn._routingMetaData.routedByUserInteraction = true\n    }\n\n    //                                                         p2       p3\n    // Es wird ein vertikales Segment                        +..........+\n    // geloescht. Es muessen somit die Punkte                |\n    // p0 und p3 neu gesetzt werden.                         |\n    // Ihre neue Y-Koordinate ist somit in der               |\n    // Mitte des geloeschten Segmentes              p0       | p1\n    //                                              +........+\n    //\n    else if (p1.x === p2.x) {\n      let newY = (p1.y + p2.y) / 2\n      // Die neue Y-Koordinate muss auf jeden Falls zwischen p-1 und p4 liegen\n      //\n      if (segmentIndex === 1) {\n        switch (fromDir) {\n          case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n          case draw2d.geo.Rectangle.DIRECTION_LEFT:\n            newY = fromPt.y\n            break\n          case draw2d.geo.Rectangle.DIRECTION_UP:\n          case draw2d.geo.Rectangle.DIRECTION_DOWN:\n            debugger // newX is newer read....why did I calculate them?!\n            newX = fromPt.x\n            break\n        }\n      }\n      if (segmentIndex === segmentCount - 2) {\n        switch (toDir) {\n          case draw2d.geo.Rectangle.DIRECTION_RIGHT:\n          case draw2d.geo.Rectangle.DIRECTION_LEFT:\n            newY = toPt.y\n            break\n          case draw2d.geo.Rectangle.DIRECTION_UP:\n          case draw2d.geo.Rectangle.DIRECTION_DOWN:\n            debugger // newX is newer read....why did I calculate them?!\n            newX = toPt.x\n            break\n        }\n      }\n\n      conn.setVertex(segmentIndex - 1, new draw2d.geo.Point(p0.x, newY))\n      conn.setVertex(segmentIndex + 2, new draw2d.geo.Point(p3.x, newY))\n\n      conn.removeVertexAt(segmentIndex)\n      conn.removeVertexAt(segmentIndex)\n      conn._routingMetaData.routedByUserInteraction = true\n    }\n  },\n\n\n  /**\n   * \n   * split the segment with the given index and insert a new segment.\n   *\n   * @param conn\n   * @param segmentIndex\n   */\n  splitSegment: function (conn, segmentIndex, x, y) {\n    let segmentCount = conn.getVertices().getSize() - 1\n    let p1 = conn.getVertex(segmentIndex)\n    let p2 = conn.getVertex(segmentIndex + 1)\n    let length = 40\n\n    // the selected segment is vertical\n    //\n    if (p1.x === p2.x) {\n      conn._routingMetaData.routedByUserInteraction = true\n      // edge case of an ManhattanRouter: One segment. This happens if the source/target on the same x - coordinate\n      //\n      if (segmentCount === 1) {\n        //     + p1\n        //     |\n        // np1 +-----+ np2\n        //           |\n        //           |\n        // np3 +-----+ np3\n        //     |\n        //     |\n        //     + p2\n        //\n        let newSegLength = (p1.getDistance(p2) / 4) / 2\n        let np1 = new draw2d.geo.Point(p1.x, y - newSegLength)\n        let np2 = new draw2d.geo.Point(p2.x + length, y - newSegLength)\n        let np3 = new draw2d.geo.Point(p2.x + length, y + newSegLength)\n        let np4 = new draw2d.geo.Point(p2.x, y + newSegLength)\n\n        conn.insertVertexAt(segmentIndex + 1, np1)\n        conn.insertVertexAt(segmentIndex + 2, np2)\n        conn.insertVertexAt(segmentIndex + 3, np3)\n        conn.insertVertexAt(segmentIndex + 4, np4)\n      }\n      else {\n        let np1 = new draw2d.geo.Point(0, 0)\n        let np2 = new draw2d.geo.Point(0, 0)\n        //       p2 +\n        //          .\n        // np1 +----+ np2\n        //     .\n        //     .\n        //     + p1\n        // p1 ist der Startpunkt und darf somit nicht verschoben werden\n        //\n        if (segmentIndex === 0) {\n          np1.y = y\n          np1.x = p1.x\n          np2.y = y\n          np2.x = p2.x + length\n          conn.setVertex(segmentIndex + 1, new draw2d.geo.Point(np2.x, p2.y))\n        }\n        // p2 ist der Schlusspunkt und darf somit nicht veaendert werden\n        //\n        else if (segmentIndex === segmentCount - 1) {\n          np1.y = y\n          np1.x = p1.x - length\n          np2.y = y\n          np2.x = p2.x\n          conn.setVertex(segmentIndex, new draw2d.geo.Point(np1.x, p1.y))\n        }\n        else {\n          np1.y = y\n          np1.x = p1.x - (length / 2)\n          np2.y = y\n          np2.x = p2.x + (length / 2)\n          conn.setVertex(segmentIndex, new draw2d.geo.Point(np1.x, p1.y))\n          conn.setVertex(segmentIndex + 1, new draw2d.geo.Point(np2.x, p2.y))\n        }\n\n        conn.insertVertexAt(segmentIndex + 1, np1)\n        conn.insertVertexAt(segmentIndex + 2, np2)\n      }\n    }\n    // the selected segment is horizontal\n    //\n    else if (p1.y == p2.y) {\n      conn._routingMetaData.routedByUserInteraction = true\n      // edge case of an ManhattanRouter: One segment. This happens if the source/target on the same y - coordinate\n      //\n      if (segmentCount === 1) {\n        //     np2 +---------+ np3\n        //         |         |\n        // --------+np1   np4+--------\n        //\n        let newSegLength = (p1.getDistance(p2) / 4) / 2\n        let np1 = new draw2d.geo.Point(x - newSegLength, p1.y)\n        let np2 = new draw2d.geo.Point(x - newSegLength, p1.y - length)\n        let np3 = new draw2d.geo.Point(x + newSegLength, p1.y - length)\n        let np4 = new draw2d.geo.Point(x + newSegLength, p1.y)\n\n        conn.insertVertexAt(segmentIndex + 1, np1)\n        conn.insertVertexAt(segmentIndex + 2, np2)\n        conn.insertVertexAt(segmentIndex + 3, np3)\n        conn.insertVertexAt(segmentIndex + 4, np4)\n      }\n      else {\n        //     p1        np1\n        //   +.........+\n        //             |\n        //             |\n        //             | np2       p2\n        //             +.........+\n        let np1 = new draw2d.geo.Point(0, 0)\n        let np2 = new draw2d.geo.Point(0, 0)\n\n        // p1 ist der Startpunkt und darf somit nicht verschoben werden\n        //\n        if (segmentIndex === 0) {\n          np1.x = x\n          np1.y = p1.y\n          np2.x = x\n          np2.y = p2.y + length\n          conn.setVertex(segmentIndex + 1, new draw2d.geo.Point(p2.x, np2.y))\n        }\n        // p2 ist der Schlusspunkt und darf somit nicht veaendert werden\n        //\n        else if (segmentIndex === segmentCount - 1) {\n          np1.x = x\n          np1.y = p1.y - length\n          np2.x = x\n          np2.y = p2.y\n          conn.setVertex(segmentIndex, new draw2d.geo.Point(p1.x, np1.y))\n        }\n        else {\n          np1.x = x\n          np1.y = p1.y - (length / 2)\n          np2.x = x\n          np2.y = p2.y + (length / 2)\n          conn.setVertex(segmentIndex, new draw2d.geo.Point(p1.x, np1.y))\n          conn.setVertex(segmentIndex + 1, new draw2d.geo.Point(p2.x, np2.y))\n        }\n        conn.insertVertexAt(segmentIndex + 1, np1)\n        conn.insertVertexAt(segmentIndex + 2, np2)\n      }\n    }\n  },\n\n  /**\n   * \n   * Called if the user press the right mouse on the figure.<br>\n   * You can either override the \"onContextMenu\" method of the figure or install an editor policy and override this method.\n   * Booth is valid and possible.\n   *\n   * @param {draw2d.shape.basic.Line} conn the polyline below the mouse\n   * @param {Number} x the x-coordinate of the mouse down event\n   * @param {Number} y the y-coordinate of the mouse down event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   * @since 4.4.0\n   */\n  onRightMouseDown: function (conn, x, y, shiftKey, ctrlKey) {\n    let segment = conn.hitSegment(x, y)\n    let items = {\"split\": {name: draw2d.Configuration.i18n.menu.addSegment}}\n\n    if (segment === null) {\n      return\n    }\n\n    if (conn.getRouter().canRemoveSegmentAt(conn, segment.index)) {\n      items.remove = {name: draw2d.Configuration.i18n.menu.deleteSegment}\n    }\n\n    $.contextMenu({\n      selector: 'body',\n      events:\n        {\n          hide: function () {\n            $.contextMenu('destroy')\n          }\n        },\n      callback: (key, options) => {\n        switch (key) {\n          case \"remove\": {\n            // deep copy of the vertices of the connection for the command stack to avoid side effects\n            let originalVertices = conn.getVertices().clone(true)\n            this.removeSegment(conn, segment.index)\n            let newVertices = conn.getVertices().clone(true)\n            conn.getCanvas().getCommandStack().execute(new draw2d.command.CommandReplaceVertices(conn, originalVertices, newVertices))\n            }\n            break\n          case \"split\": {\n            // deep copy of the vertices of the connection for the command stack to avoid side effects\n            let originalVertices = conn.getVertices().clone(true)\n            this.splitSegment(conn, segment.index, x, y)\n            let newVertices = conn.getVertices().clone(true)\n            conn.getCanvas().getCommandStack().execute(new draw2d.command.CommandReplaceVertices(conn, originalVertices, newVertices))\n            }\n            break\n          default:\n            break\n        }\n\n      },\n      x: x,\n      y: y,\n      items: items\n    })\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Feedback and edit policy for the VertexRouter.\n *\n * @author  Andreas Herz\n * @extends draw2d.policy.line.LineSelectionFeedbackPolicy\n */\ndraw2d.policy.line.VertexSelectionFeedbackPolicy = draw2d.policy.line.LineSelectionFeedbackPolicy.extend(\n  /** @lends draw2d.policy.line.VertexSelectionFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.line.VertexSelectionFeedbackPolicy\",\n\n  /**\n   *\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n\n  /**\n   * \n   *\n   * @param {draw2d.Canvas} canvas the related canvas\n   * @param {draw2d.Connection} figure the selected figure\n   * @param {Boolean} isPrimarySelection\n   */\n  onSelect: function (canvas, figure, isPrimarySelection) {\n    let startHandle = new draw2d.shape.basic.LineStartResizeHandle(figure)\n    let endHandle = new draw2d.shape.basic.LineEndResizeHandle(figure)\n    figure.selectionHandles.add(startHandle)\n    figure.selectionHandles.add(endHandle)\n\n    let points = figure.getVertices()\n    let count = points.getSize() - 1\n    let i = 1\n    for (; i < count; i++) {\n      figure.selectionHandles.add(new draw2d.shape.basic.VertexResizeHandle(figure, i))\n      figure.selectionHandles.add(new draw2d.shape.basic.GhostVertexResizeHandle(figure, i - 1))\n    }\n\n    figure.selectionHandles.add(new draw2d.shape.basic.GhostVertexResizeHandle(figure, i - 1))\n\n    figure.selectionHandles.each( (i, e) => {\n      e.setDraggable(figure.isResizeable())\n      e.show(canvas)\n    })\n\n    this.moved(canvas, figure)\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A draw2d.policy.SelectionFeedbackPolicy that is sensitive to the canvas selection. Subclasses will typically\n * decorate the {@link draw2d.Figure figure} with things like selection handles and/or focus feedback.\n * <br>\n * If you want to change the handle visibility for a figure, then you should use SelectionFeedbackPolicy to do that.\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.DragDropEditPolicy\n */\ndraw2d.policy.port.ElasticStrapFeedbackPolicy = draw2d.policy.port.PortFeedbackPolicy.extend(\n  /** @lends draw2d.policy.port.ElasticStrapFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.port.ElasticStrapFeedbackPolicy\",\n\n  /**\n   * Creates a new Router object\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n    this.connectionLine = null\n  },\n\n  /**\n   *\n   * Called by the framework if the related shape has init a drag&drop\n   * operation\n   *\n   * @param {draw2d.Canvas} canvas The host canvas\n   * @param {draw2d.Figure} figure The related figure\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean} return <b>false</b> to send a veto to the drag operation\n   */\n  onDragStart: function (canvas, figure, x, y, shiftKey, ctrlKey) {\n    this.connectionLine = new draw2d.shape.basic.Line()\n    this.connectionLine.setCanvas(canvas)\n    this.connectionLine.getShapeElement()\n\n    this.onDrag(canvas, figure)\n\n    return true\n  },\n\n\n  /**\n   *\n   * Called by the framework during drag a figure.\n   *\n   * @param {draw2d.Canvas} canvas The host canvas\n   * @param {draw2d.Figure} figure The related figure\n   */\n  onDrag: function (canvas, figure) {\n    let x1 = figure.ox + figure.getParent().getAbsoluteX()\n    let y1 = figure.oy + figure.getParent().getAbsoluteY()\n\n    this.connectionLine.setStartPosition(x1, y1)\n    this.connectionLine.setEndPosition(figure.getAbsoluteX(), figure.getAbsoluteY())\n  },\n\n  /**\n   *\n   * Called by the framework if the drag drop operation ends.\n   *\n   * @param {draw2d.Canvas} canvas The host canvas\n   * @param {draw2d.Figure} figure The related figure\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onDragEnd: function (canvas, figure, x, y, shiftKey, ctrlKey) {\n    this.connectionLine.setCanvas(null)\n    this.connectionLine = null\n  },\n\n  onHoverEnter: function (canvas, draggedFigure, hoverFiger) {\n    this.connectionLine.setGlow(true)\n    hoverFiger.setGlow(true)\n  },\n\n  onHoverLeave: function (canvas, draggedFigure, hoverFiger) {\n    hoverFiger.setGlow(false)\n    this.connectionLine.setGlow(false)\n  }\n\n\n})\n","import draw2d from '../../packages'\nimport {Tweenable} from \"shifty\"\n\n\n/**\n * @class\n *\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.DragDropEditPolicy\n */\ndraw2d.policy.port.IntrusivePortsFeedbackPolicy = draw2d.policy.port.PortFeedbackPolicy.extend(\n  /** @lends draw2d.policy.port.IntrusivePortsFeedbackPolicy.prototype */\n  {\n\n    NAME: \"draw2d.policy.port.IntrusivePortsFeedbackPolicy\",\n\n    /**\n     */\n    init: function (attr, setter, getter) {\n      this._super(attr, setter, getter)\n      this.connectionLine = null\n      this.tweenable = null\n    },\n\n    /**\n     *\n     * Called by the framework if the related shape has init a drag&drop\n     * operation\n     *\n     * @param {draw2d.Canvas} canvas The host canvas\n     * @param {draw2d.Figure} figure The related figure\n     * @param {Number} x the x-coordinate of the mouse up event\n     * @param {Number} y the y-coordinate of the mouse up event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onDragStart: function (canvas, figure, x, y, shiftKey, ctrlKey) {\n      let start = 0\n      let allPorts = canvas.getAllPorts().clone()\n      allPorts.each(function (i, element) {\n        if (typeof element.__beforeInflate === \"undefined\") {\n          element.__beforeInflate = element.getWidth()\n        }\n        start = element.__beforeInflate\n      })\n\n\n      // filter all candidates for the DropEvent\n      //\n      allPorts.grep(function (p) {\n        return (p.NAME !== figure.NAME && p.parent !== figure.parent && p.getSemanticGroup() === figure.getSemanticGroup())\n          || (p instanceof draw2d.HybridPort)\n          || (figure instanceof draw2d.HybridPort)\n      })\n\n      // Animate the ports for a visual feedback\n      //\n      this.tweenable = new Tweenable()\n      this.tweenable.tween({\n        from: {'size': start / 2},\n        to: {'size': start},\n        duration: 200,\n        easing: \"easeOutSine\",\n        step: function (params) {\n          allPorts.each(function (i, element) {\n            // IMPORTANT shortcut to avoid rendering errors!!\n            // performance shortcut to avoid a lot of events and recalculate/routing of all related connections\n            // for each setDimension call. Additional the connection is following a port during Drag&Drop operation\n            element.shape.attr({rx: params.size, ry: params.size})\n            element.width = element.height = params.size * 2\n          })\n        }\n      })\n\n      this.connectionLine = new draw2d.shape.basic.Line()\n      this.connectionLine.setCanvas(canvas)\n      this.connectionLine.getShapeElement()\n      this.connectionLine.setDashArray(\"- \")\n      this.connectionLine.setColor(\"#30c48a\")\n\n      this.onDrag(canvas, figure)\n\n      return true\n    },\n\n\n    /**\n     *\n     * Called by the framework during drag a figure.\n     *\n     * @param {draw2d.Canvas} canvas The host canvas\n     * @param {draw2d.Figure} figure The related figure\n     * @template\n     */\n    onDrag: function (canvas, figure) {\n      let x1 = figure.ox + figure.getParent().getAbsoluteX()\n      let y1 = figure.oy + figure.getParent().getAbsoluteY()\n\n      this.connectionLine.setStartPosition(x1, y1)\n      this.connectionLine.setEndPosition(figure.getAbsoluteX(), figure.getAbsoluteY())\n    },\n\n    /**\n     *\n     * Called by the framework if the drag drop operation ends.\n     *\n     * @param {draw2d.Canvas} canvas The host canvas\n     * @param {draw2d.Figure} figure The related figure\n     * @param {Number} x the x-coordinate of the mouse event\n     * @param {Number} y the y-coordinate of the mouse event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     */\n    onDragEnd: function (canvas, figure, x, y, shiftKey, ctrlKey) {\n      if (this.tweenable) {\n        this.tweenable.stop(true)\n        this.tweenable.dispose()\n        this.tweenable = null\n      }\n\n      let allPorts = canvas.getAllPorts().clone()\n      // filter all candidates for the DropEvent\n      //\n      allPorts.grep(function (p) {\n        return p.__beforeInflate\n      })\n\n      allPorts.each(function (i, element) {\n        // IMPORTANT shortcut to avoid rendering errors!!\n        // performance shortcut to avoid a lot of events and recalculate/routing of all related connections\n        // for each setDimension call. Additional the connection is following a port during Drag&Drop operation\n        element.shape.attr({rx: element.__beforeInflate / 2, ry: element.__beforeInflate / 2})\n        element.width = element.height = element.__beforeInflate\n        delete element.__beforeInflate\n      })\n      this.connectionLine.setCanvas(null)\n      this.connectionLine = null\n    },\n\n    onHoverEnter: function (canvas, draggedFigure, hoverFigure) {\n      this.connectionLine.setGlow(true)\n      hoverFigure.setGlow(true)\n    },\n\n    onHoverLeave: function (canvas, draggedFigure, hoverFigure) {\n      hoverFigure.setGlow(false)\n      if (this.connectionLine === null) {\n        debugger\n      }\n      this.connectionLine.setGlow(false)\n    }\n\n\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Base class for all port feedback policies. Used for grow, highlight or\n * other decorations during drag&drop and connecting of ports.\n *\n * @author Andreas Herz\n * @extends draw2d.policy.figure.DragDropEditPolicy\n */\ndraw2d.policy.port.PortFeedbackPolicy = draw2d.policy.figure.DragDropEditPolicy.extend(\n  /** @lends draw2d.policy.port.PortFeedbackPolicy.prototype */\n  {\n\n  NAME: \"draw2d.policy.port.PortFeedbackPolicy\",\n\n  /**\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  },\n\n  /**\n   *\n   * Called if the dragged port hove another port\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {draw2d.Port}   draggedFigure\n   * @param {draw2d.Figure} hoverFigure\n   */\n  onHoverEnter: function (canvas, draggedFigure, hoverFigure) {\n  },\n\n  /**\n   *\n   * Fired if the dragged figures leaves the hover figure\n   *\n   * @param {draw2d.Canvas} canvas\n   * @param {draw2d.Port}   draggedFigure\n   * @param {draw2d.Figure} hoverFigure\n   */\n  onHoverLeave: function (canvas, draggedFigure, hoverFigure) {\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Hand drawn arrow which points down left\n *\n *\n * @example\n *    let figure =  new draw2d.shape.analog.OpAmp({x:10, y:10});\n *\n *    canvas.add(figure);\n *\n *\n * @extends draw2d.SVGFigure\n */\ndraw2d.shape.analog.OpAmp = draw2d.SVGFigure.extend(\n  /** @lends draw2d.shape.analog.OpAmp.prototype */\n  {\n\n  NAME: \"draw2d.shape.analog.OpAmp\",\n\n  // custom locator for the special design of the OpAmp Input area\n  MyInputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, port) {\n      let parent = port.getParent()\n      let calcY = (8 + 18.5 * index) * parent.scaleY\n      this.applyConsiderRotation(port, 1, calcY)\n    }\n  }),\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({stroke: 0, bgColor: \"#f0f0ff\"}, attr), setter, getter)\n\n    this.inputLocator = new this.MyInputPortLocator()\n\n    this.createPort(\"input\", this.inputLocator)\n    this.createPort(\"input\", this.inputLocator)\n\n    this.createPort(\"output\")\n\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getSVG: function () {\n    return '<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"50\"  height=\"50\">' +\n      '<path d=\"m8.2627,0l0,35.36035l31.23926,-17.76025l-31.23926,-17.60011l0,0l0,0.00001zm2.27832,27.36719l4.08105,0m-2.10449,-2.20703l0,4.27979m2.26367,-21.35938l-4.15918,0\"  stroke=\"#1B1B1B\" fill=\"none\"/>' +\n      '<line x1=\"0.53516\"  y1=\"8\"  x2=\"8.21191\"  y2=\"8\"  stroke=\"#010101\"/>' +\n      '<line x1=\"39.14941\" y1=\"18\" x2=\"45.81055\" y2=\"18\" stroke=\"#010101\" />' +\n      '<line x1=\"0.53516\"  y1=\"27\" x2=\"8.21191\"  y2=\"27\" stroke=\"#010101\" />' +\n      '</svg>'\n  },\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = attributes || {}\n\n    // redirect the backgroundColor to an internal SVG node.\n    // In this case only a small part of the shape are filled with the background color\n    // and not the complete rectangle/bounding box\n    //\n    attributes[\"fill\"] = \"none\"\n    if (this.bgColor != null) {\n      this.svgNodes[0].attr({fill: this.bgColor.rgba()})\n    }\n\n    this._super(attributes)\n\n    return this\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.analog.ResistorBridge({x:10, y:10});\n *\n *    canvas.add(figure);\n *\n *\n * @extends draw2d.SVGFigure\n */\ndraw2d.shape.analog.ResistorBridge = draw2d.SVGFigure.extend(\n  /** @lends draw2d.shape.analog.ResistorBridge.prototype */\n  {\n  \n  NAME: \"draw2d.shape.analog.ResistorBridge\",\n\n  // custom locator for the special design of the ResistorBridge Input area\n  MyInputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, figure) {\n      let w = figure.getParent().getWidth()\n      let h = figure.getParent().getHeight()\n      this.applyConsiderRotation(figure, w / 2 + 1, h * index)\n    }\n  }),\n\n  // custom locator for the special design of the ResistorBridge Input area\n  MyOutputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, figure) {\n      let w = figure.getParent().getWidth()\n      let h = figure.getParent().getHeight()\n\n      this.applyConsiderRotation(figure, w * (index - 2), h / 2)\n    }\n  }),\n\n\n  /**\n   * Create a new instance\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n\n    this.inputLocator = new this.MyInputPortLocator()\n    this.outputLocator = new this.MyOutputPortLocator()\n\n    this.createPort(\"hybrid\", this.inputLocator)\n    this.createPort(\"hybrid\", this.inputLocator)\n\n    this.createPort(\"hybrid\", this.outputLocator)\n    this.createPort(\"hybrid\", this.outputLocator)\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getSVG: function () {\n    return '<svg  xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">' +\n      '<path fill=\"#010101\" stroke=\"#010101\" stroke-miterlimit=\"14.3\" id=\"path12322\" d=\"m47.62207,22.71094l0,0c0.73145,0.73242 0.71777,1.93359 -0.03027,2.68164c-0.74805,0.74951 -1.94922,0.76123 -2.68073,0.0293c-0.73138,-0.73242 -0.71967,-1.93211 0.03033,-2.68115c0.74707,-0.74803 1.94727,-0.76219 2.68066,-0.02979l0,0z\"/>' +\n      '<path fill=\"#010101\" stroke=\"#010101\" stroke-miterlimit=\"14.3\" id=\"path12324\" d=\"m25.84082,0.93115l0,0c0.73145,0.73096 0.71875,1.93359 -0.02832,2.68066c-0.75,0.74951 -1.94922,0.76123 -2.68164,0.0293c-0.73242,-0.73241 -0.71973,-1.93164 0.0293,-2.68065c0.74805,-0.74756 1.94922,-0.76172 2.68066,-0.0293l0,0l0,-0.00002z\"/>' +\n      '<path fill=\"#010101\" stroke=\"#010101\" stroke-miterlimit=\"14.3\" id=\"path12326\" d=\"m25.75098,44.58203l0,0c0.73145,0.73193 0.71875,1.93311 -0.02832,2.68115c-0.75,0.74902 -1.94922,0.76074 -2.68262,0.0293c-0.73145,-0.73193 -0.71973,-1.93262 0.03033,-2.68164c0.74707,-0.74756 1.94922,-0.76123 2.68066,-0.02879l0,0l-0.00006,-0.00002z\"/>' +\n      '<path fill=\"#010101\" stroke=\"#010101\" stroke-miterlimit=\"14.3\" id=\"path12328\" d=\"m3.9707,22.80127l0,0c0.73242,0.73193 0.71777,1.93359 -0.0293,2.68115c-0.74902,0.74951 -1.94922,0.76172 -2.68164,0.0293c-0.73145,-0.73242 -0.71973,-1.93164 0.03027,-2.68115c0.74707,-0.74707 1.94922,-0.76074 2.68066,-0.0293l0,0z\"/>' +\n      '<polyline fill=\"none\" stroke=\"#010101\" id=\"polyline12334\" points=\"24.908203125,45.49267578125 31.71875,38.68310546875 31.2119140625,36.98876953125 34.892578125,37.95703125 33.953125,34.22265625 37.6650390625,35.18359375 36.6767578125,31.52490234375 40.3759765625,32.47314453125 39.873046875,30.52783203125 45.884765625,24.51708984375 \" stroke-miterlimit=\"14.3\"/>' +\n      '<polyline fill=\"#010101\" id=\"polyline12338\" points=\"36.3408203125,23.98876953125 38.146484375,29.55810546875 33.630859375,29.55810546875 35.435546875,23.98779296875 \"/>' +\n      '<line fill=\"none\" stroke=\"#010101\" id=\"line12340\" y2=\"28.90967\" x2=\"35.8877\" y1=\"41.13428\" x1=\"35.88867\" stroke-miterlimit=\"14.3\"/>' +\n      '<polyline fill=\"none\" stroke=\"#010101\" id=\"polyline12346\" points=\"3.2109375,23.79248046875 10.01953125,16.98388671875 9.513671875,15.2890625 13.193359375,16.25732421875 12.251953125,12.5234375 15.9658203125,13.48486328125 14.9775390625,9.82568359375 18.6767578125,10.7734375 18.173828125,8.82958984375 24.185546875,2.81787109375 \" stroke-miterlimit=\"14.3\"/>' +\n      '<polyline fill=\"#010101\" id=\"polyline12350\" points=\"13.126953125,23.80419921875 11.3212890625,18.236328125 15.8369140625,18.236328125 14.0322265625,23.806640625 \"/>' +\n      '<line fill=\"none\" stroke=\"#010101\" id=\"line12352\" y2=\"18.8833\" x2=\"13.58008\" y1=\"6.65967\" x1=\"13.5791\" stroke-miterlimit=\"14.3\"/>' +\n      '<polyline fill=\"none\" stroke=\"#010101\" id=\"polyline12358\" points=\"46.65625,24.33642578125 39.84765625,17.52783203125 38.154296875,18.033203125 39.1220703125,14.353515625 35.3876953125,15.29345703125 36.34765625,11.58056640625 32.689453125,12.56884765625 33.6376953125,8.86865234375 31.6923828125,9.373046875 24.322265625,2.00341796875 \" stroke-miterlimit=\"14.3\"/>' +\n      '<polyline fill=\"#010101\" id=\"polyline12362\" points=\"36.578125,1.87109375 38.3828125,7.439453125 33.8681640625,7.439453125 35.6728515625,1.869140625 \"/>' +\n      '<line fill=\"none\" stroke=\"#010101\" id=\"line12364\" y2=\"6.7915\" x2=\"36.125\" y1=\"19.01758\" x1=\"36.125\" stroke-miterlimit=\"14.3\"/>' +\n      '<polyline fill=\"none\" stroke=\"#010101\" id=\"polyline12370\" points=\"24.494140625,46.49951171875 17.685546875,39.69091796875 15.9921875,40.1953125 16.958984375,36.515625 13.2265625,37.45556640625 14.185546875,33.7421875 10.52734375,34.73193359375 11.474609375,31.03125 9.529296875,31.53515625 2.1611328125,24.166015625 \" stroke-miterlimit=\"14.3\"/>' +\n      '<polyline fill=\"#010101\" id=\"polyline12374\" points=\"12.150390625,44.80029296875 10.34765625,39.23193359375 14.861328125,39.23095703125 13.0556640625,44.80224609375 \"/>' +\n      '<line fill=\"none\" stroke=\"#010101\" id=\"line12376\" y2=\"39.87891\" x2=\"12.60352\" y1=\"27.6543\" x1=\"12.60352\" stroke-miterlimit=\"14.3\"/>' +\n      '</svg>'\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.analog.ResistorVertical({x:10, y:10});\n *\n *    canvas.add(figure);\n *\n *\n * @extends draw2d.SVGFigure\n */\ndraw2d.shape.analog.ResistorVertical = draw2d.SetFigure.extend(\n  /** @lends draw2d.shape.analog.ResistorVertical.prototype */\n  {\n\n  NAME: \"draw2d.shape.analog.ResistorVertical\",\n\n  // custom locator for the special design of the Input area\n  MyInputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, figure) {\n      let w = figure.getParent().getWidth()\n      let h = figure.getParent().getHeight()\n      this.applyConsiderRotation(figure, w / 2, h)\n    }\n  }),\n\n  // custom locator for the special design of the Output area\n  MyOutputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, figure) {\n      let w = figure.getParent().getWidth()\n      this.applyConsiderRotation(figure, w / 2, 0)\n    }\n  }),\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n\n    this._super(extend({width: 30, height: 50, bgColor: null}, attr), setter, getter)\n\n    this.inputLocator = new this.MyInputPortLocator()\n    this.outputLocator = new this.MyOutputPortLocator()\n\n    this.createPort(\"hybrid\", this.inputLocator)\n    this.createPort(\"hybrid\", this.outputLocator)\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  createSet: function () {\n    let set = this._super()\n\n    set.push(this.canvas.paper.path(\"M15,0 L15,5 L0,7.5 L30,10 L0,15 L30,20 L0,25 L30,30 L15,32.5 L15,40\"))\n\n    return set\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.analog.VoltageSupplyHorizontal({x:10, y:10});\n *\n *    canvas.add(figure);\n *\n *\n * @extends draw2d.SVGFigure\n */\ndraw2d.shape.analog.VoltageSupplyHorizontal = draw2d.SVGFigure.extend(\n  /** @lends draw2d.shape.analog.VoltageSupplyHorizontal.prototype */\n  {\n\n  NAME: \"draw2d.shape.analog.VoltageSupplyHorizontal\",\n\n  // custom locator for the special design of the Input area\n  MyInputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, figure) {\n      let h = figure.getParent().getHeight()\n      this.applyConsiderRotation(figure, 0, h / 2)\n    }\n  }),\n\n  // custom locator for the special design of the Output area\n  MyOutputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, figure) {\n      let w = figure.getParent().getWidth()\n      let h = figure.getParent().getHeight()\n      this.applyConsiderRotation(figure, w, h / 2)\n    }\n  }),\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 30}, attr), setter, getter)\n\n    this.createPort(\"hybrid\", new this.MyInputPortLocator())  // GND\n    this.createPort(\"hybrid\", new this.MyOutputPortLocator()) // VCC\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getSVG: function () {\n    return '<svg width=\"49\" height=\"28\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">' +\n      '<path d=\"m24.99933,18.95592l0,-9.54576m-5.78374,-9.40907l0,28.35939m-5.78718,-9.40457l0,-9.54576m-5.78374,-9.40907l0,28.35939\" id=\"path10566\" stroke-miterlimit=\"14.3\" stroke=\"#010101\" fill=\"none\"/>' +\n      '<path d=\"m26.79878,14.13039l6.90583,0m-33.22691,0l6.90583,0\" id=\"path10568\" stroke-miterlimit=\"14.3\" stroke-linecap=\"square\" stroke=\"#010101\" fill=\"none\"/>' +\n      '</svg>'\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.analog.VoltageSupplyVertical({x:10, y:10});\n *\n *    canvas.add(figure);\n *\n *\n * @extends draw2d.SVGFigure\n */\ndraw2d.shape.analog.VoltageSupplyVertical = draw2d.SVGFigure.extend(\n  /** @lends draw2d.shape.analog.VoltageSupplyVertical.prototype */\n  {\n\n  NAME: \"draw2d.shape.analog.VoltageSupplyVertical\",\n\n  // custom locator for the special design of the Input area\n  MyInputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, figure) {\n      let w = figure.getParent().getWidth()\n      let h = figure.getParent().getHeight()\n      this.applyConsiderRotation(figure, w / 2, h)\n    }\n  }),\n\n  // custom locator for the special design of the Output area\n  MyOutputPortLocator: draw2d.layout.locator.PortLocator.extend({\n    init: function () {\n      this._super()\n    },\n    relocate: function (index, figure) {\n      let w = figure.getParent().getWidth()\n      this.applyConsiderRotation(figure, w / 2, 0)\n    }\n  }),\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 30, height: 50}, attr), setter, getter)\n\n    this.inputLocator = new this.MyInputPortLocator()\n    this.outputLocator = new this.MyOutputPortLocator()\n\n    this.createPort(\"hybrid\", this.inputLocator) // GND\n    this.createPort(\"hybrid\", this.outputLocator)// VCC\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getSVG: function () {\n    return '<svg  xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">' +\n      '<path d=\"m19.62398,12.37594l-9.87926,0m-9.74355,8.22145l29.36289,0m-9.74007,8.22469l-9.87927,0m-9.74355,8.22145l29.36289,0\" id=\"path10560\" stroke-miterlimit=\"14.3\" stroke=\"#010101\" fill=\"none\"/>' +\n      '<path d=\"m14.63157,9.81646l0,-9.81646m0,47.2328l0,-9.81646\" id=\"path10562\" stroke-miterlimit=\"14.3\" stroke-linecap=\"square\" stroke=\"#010101\" fill=\"none\"/>' +\n      '</svg>'\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Hand drawn arrow which points down left\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.arrow.CalligrapherArrowDownLeft({x:10,y:10, color:\"#3d3d3d\"});\n *\n *    canvas.add(figure);\n *\n *\n * @extends draw2d.SVGFigure\n */\ndraw2d.shape.arrow.CalligrapherArrowDownLeft = draw2d.SVGFigure.extend(\n  /** @lends draw2d.shape.arrow.CalligrapherArrowDownLeft.prototype */\n  {\n\n  NAME: \"draw2d.shape.arrow.CalligrapherArrowDownLeft\",\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr)\n  },\n\n\n  getSVG: function () {\n    return '<svg width=\"180\" height=\"300\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">' +\n      '     <path style=\"fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none\" id=\"path3084\" d=\"m 159.63578,17.846597 c 0.43137,9.44641 -0.0636,18.88035 -0.8284,28.30165 c -1.73211,18.38336 -4.05381,36.71698 -6.08253,55.075313 c -1.61738,13.7075 -3.03402,27.43467 -3.97611,41.19113 c -1.09101,11.16584 -1.31019,22.36559 -1.28541,33.56466 c -0.1328,4.82188 0.3218,9.6468 0.14332,14.46812 c -0.0888,2.39977 -0.28315,3.73625 -0.55012,6.12095 c -0.85848,4.73147 -2.27416,9.40019 -4.7769,13.68272 c -1.47003,2.51544 -3.78493,5.6647 -5.47739,8.05048 c -5.02888,6.66256 -11.08555,12.65652 -18.10552,17.75963 c -4.23302,3.07716 -7.74942,5.12065 -12.22081,7.86298 c -13.253319,6.72606 -25.889792,15.11686 -40.84124,18.60576 c -3.016829,0.7039 -4.431417,0.8157 -7.450859,1.2076 c -6.983246,0.5774 -14.009174,0.3375 -21.010676,0.2509 c -3.278795,-0.033 -6.55749,0.01 -9.835897,0.045 c 0,0 20.838833,-13.2364 20.838833,-13.2364 l 0,0 c 3.147056,0.093 6.294483,0.1852 9.443646,0.2007 c 6.966697,0.011 13.971433,0.1301 20.897176,-0.6344 c 3.732439,-0.5577 7.321215,-1.2431 10.881203,-2.4145 c 1.517208,-0.4992 5.830867,-2.43339 4.487902,-1.6386 c -6.098183,3.6088 -25.104875,12.8748 -9.52514,5.223 c 4.40875,-2.5927 8.262057,-4.7459 12.425175,-7.65986 c 6.839117,-4.78709 12.633657,-10.50427 17.500607,-16.86761 c 2.53518,-3.56692 5.24684,-7.12748 7.07617,-11.03446 c 1.42357,-3.0404 2.21532,-6.28727 2.91146,-9.50152 c 0.91919,-6.88822 1.03991,-13.81392 1.25118,-20.74151 c 0.47683,-11.27871 0.96259,-22.55877 1.61689,-33.83062 c 1.21127,-14.03392 3.64191,-27.94339 5.46543,-41.92167 c 2.26899,-18.186603 4.6835,-36.384373 5.4487,-54.679643 c 0.0788,-2.46092 0.23808,-4.92087 0.23618,-7.38276 c -0.005,-6.45916 -0.62194,-13.00218 -2.13821,-19.32664 c 0,0 23.48134,-10.73998 23.48134,-10.73998 z\" inkscape:connector-curvature=\"0\" />' +\n      '     <path style=\"fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none\" id=\"path3086\" d=\"m 41.271518,252.40239 c 2.465518,-0.7264 4.879503,-1.7726 7.145328,-2.9859 c 0.955597,-0.5117 3.736822,-2.1986 2.791991,-1.6673 c -5.218817,2.9348 -10.409826,5.9187 -15.61474,8.878 c 5.366557,-3.4898 10.227818,-7.6685 14.119927,-12.75576 c 3.507157,-5.09382 4.097613,-11.17122 4.301158,-17.17644 c 0.02635,-3.95844 -0.31227,-7.90612 -0.635377,-11.84752 c 0,0 19.920693,-10.3059 19.920693,-10.3059 l 0,0 c 0.171761,4.05015 0.409899,8.09777 0.50079,12.15101 c -0.185739,6.23619 -0.347804,12.66862 -3.492579,18.24747 c -0.503375,0.75197 -0.961922,1.53596 -1.510126,2.25591 c -3.478528,4.56826 -8.226837,8.04586 -12.757403,11.47443 c -7.345206,4.3297 -14.671333,8.692 -22.035619,12.9891 c -3.551305,2.0723 -7.368692,3.8726 -11.394645,4.7773 c 0,0 18.660602,-14.0344 18.660602,-14.0344 z\" inkscape:connector-curvature=\"0\" />' +\n      '     <path style=\"fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none\" id=\"path3088\" d=\"m 37.815923,255.49919 c 3.41111,0.1581 6.814569,0.2213 10.182693,0.8184 c 6.92998,2.6928 13.533527,6.2357 20.043462,9.8162 c 3.912139,2.1362 7.91195,4.4644 10.690321,8.0298 c 1.039962,1.2802 1.510411,2.7604 1.893523,4.3313 c 0,0 -20.370847,10.9259 -20.370847,10.9259 l 0,0 c -0.225419,-1.2711 -0.55067,-2.4558 -1.329618,-3.5184 c -2.332229,-3.3633 -5.869056,-5.6279 -9.247191,-7.8233 c -6.335066,-3.7106 -12.98611,-7.1834 -20.232784,-8.6836 c -3.497247,-0.3814 -7.011372,-0.4307 -10.521829,-0.1703 c 0,0 18.89227,-13.726 18.89227,-13.726 z\" inkscape:connector-curvature=\"0\" />' +\n      '</svg>'\n  },\n\n  /**\n   *\n   * propagate all attributes like color, stroke,... to the shape element\n   **/\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n\n    if (this.svgNodes !== null) {\n      this.svgNodes.attr({fill: this.color.rgba()})\n    }\n\n    this._super(attributes)\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Hand drawn arrow to the left.\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.arrow.CalligrapherArrowLeft({x:10, y:10, color:\"#3d3d3d\"});\n *\n *    canvas.add(figure);\n *\n * @extends draw2d.SVGFigure\n */\ndraw2d.shape.arrow.CalligrapherArrowLeft = draw2d.SVGFigure.extend(\n  /** @lends draw2d.shape.arrow.CalligrapherArrowLeft.prototype */\n  {\n  NAME: \"draw2d.shape.arrow.CalligrapherArrowLeft\",\n\n  /**\n   * Creates a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr)\n  },\n\n\n  getSVG: function () {\n    return '<svg width=\"230\" height=\"60\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">' +\n      '  <path style=\"fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none\" id=\"path3024\" d=\"m 218.87943,27.464763 c -1.21088,-0.0563 -2.42064,-0.14616 -3.63262,-0.16893 c -5.82495,-0.10948 -18.61676,-0.0226 -22.97385,0.0122 c -7.12848,0.057 -14.25673,0.14021 -21.38495,0.22333 c -9.03765,0.10539 -18.07511,0.22813 -27.11266,0.3422 c -10.2269,0.11878 -20.4538,0.23756 -30.6807,0.35634 c -35.488759,0.4089 -70.975849,0.82793 -106.4669238,0.95195 c 0,0 7.9718628,-5.70244 7.9718628,-5.70244 l 0,0 c 6.374241,0.28694 12.745594,0.64561 19.122722,0.86083 c 28.09499,0.94816 56.21338,0.92473 84.315959,0.32205 c 10.51273,-0.32805 21.0288,-0.56402 31.53819,-0.98412 c 27.47361,-1.09824 54.91405,-2.91665 82.28177,-5.53697 c 0,0 -12.9788,9.32351 -12.9788,9.32351 z\" inkscape:connector-curvature=\"0\" />' +\n      '  <path style=\"fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none\" id=\"path3026\" d=\"m 100.75066,1.6309831 c -7.165239,3.9571 -14.284929,7.47866 -22.036659,10.2707299 c -5.00195,1.80163 -10.10374,3.31886 -15.2402,4.79424 c -8.25878,2.37815 -16.55626,4.65805 -24.9012,6.79479 c -2.89107,0.71593 -5.74687,1.56407 -8.66266,2.20424 c -3.211679,0.70512 -6.49468,1.17333 -9.752959,1.6747 c -5.447101,0.92112 -10.9044008,1.81762 -16.3983488,2.50082 c -1.608931,0.0814 -0.850754,0.10697 -2.275834,-0.0365 C 20.004071,21.041553 19.256899,21.517873 32.515691,19.216243 c 6.21537,-1.05913 12.34875,-2.37668 18.3945,-4.03234 c 8.12719,-2.02803 16.23765,-4.1157 24.26421,-6.4321199 c 5.23574,-1.55053 10.41682,-3.15473 15.46857,-5.12875 c 1.38953,-0.54295 2.7579,-1.12682 4.12253,-1.71603 c 0.98421,-0.42496 3.86537,-1.81801999 2.92296,-1.32600999 C 93.642191,2.6934931 89.529511,4.7073031 85.450031,6.7704531 l 15.300629,-5.1394 z\" inkscape:connector-curvature=\"0\" sodipodi:nodetypes=\"csccsccccccsssccc\" />' +\n      '  <path style=\"fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none\" id=\"path3028\" d=\"m 80.764281,58.068863 c -2.45498,-3.50762 -6.58178,-6.10525 -10.40324,-8.66732 c -4.30614,-2.72676 -7.93958,-6.28283 -12.6021,-8.28702 c -7.39912,-4.50257 -11.70055,-7.85592 -20.85866,-9.23429 c -4.9257,-0.85706 -17.294247,-1.32043 -22.226462,-2.15427 c -3.445882,-0.42869 -6.2035918,0.70541 -9.6845138,0.57715 c -1.496337,-0.0586 -2.99355,-0.0965 -4.491229,-0.12472 l 13.9525278,-6.24562 l 3.25,-1.17153 c 1.441459,0.0813 -1.116338,0.15309 0.325505,0.23016 c 3.574557,0.17902 7.211864,0.0695 10.712655,0.73822 c 4.723107,1.08097 9.443947,2.1624 14.234177,3.05317 c 2.76739,0.64203 3.92627,0.87082 6.64127,1.66289 c 4.42146,1.28993 8.60075,3.01513 12.86503,4.58129 c 1.90199,0.73446 5.05193,1.93181 6.89302,2.7216 c 4.92005,2.11061 9.5916,4.57045 13.9716,7.31023 c 4.16708,2.62011 8.48023,5.20033 11.72012,8.56863 z\" inkscape:connector-curvature=\"0\" sodipodi:nodetypes=\"ccccccccccccscsccc\" />' +\n      '</svg>'\n  },\n\n  /**\n   *\n   * propagate all attributes like color, stroke,... to the shape element\n   **/\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n\n    if (this.svgNodes !== null) {\n      this.svgNodes.attr({fill: this.color.rgba()})\n    }\n\n    this._super(attributes)\n  }\n\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n/**\n * @class\n * Oval figure.\n * @example\n *\n *    let arc =  new draw2d.shape.basic.Arc({diameter:150, x:50, y:10, startAngle:0, endAngle:45});\n *\n *    canvas.add(arc);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.VectorFigure\n */\ndraw2d.shape.basic.Arc = draw2d.SetFigure.extend(\n  /** @lends draw2d.shape.basic.Arc.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.Arc\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.startAngle = 180\n    this.endAngle = 360\n\n    this._super(extend({width: 80, height: 50, bgColor: null, color: \"#1B1B1B\"}, attr), setter, getter)\n    this.strokeScale = false // scale the stroke width of the children nodes if the parent resize\n  },\n\n\n  /**\n   * @template\n   **/\n  createSet: function () {\n    this.canvas.paper.setStart()\n\n\n    let flag = (this.endAngle - this.startAngle) > 180\n    let a1 = (this.startAngle % 360) * Math.PI / 180\n    let a2 = (this.endAngle % 360) * Math.PI / 180\n\n    let w2 = this.getWidth() / 2\n    let h2 = this.getHeight() / 2\n\n    this.canvas.paper.path([\n      [\"M\", w2, h2,\n        \"l\", w2 * Math.cos(a1), h2 * Math.sin(a1),\n        \"A\", w2, h2, 0, +flag, 1, w2 + w2 * Math.cos(a2), h2 + h2 * Math.sin(a2),\n        \"z\"]\n    ].join(\"\")).attr({\"fill\": \"#fff0f0\"})\n\n    return this.canvas.paper.setFinish()\n\n  }\n\n})\n\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n/**\n * @class\n * A circle figure with basic background and stroke API. <br>\n * A circle can not be streched. <strong>The aspect ration is always 1:1</strong>.\n *\n *\n * @example\n *\n *    let shape =  new draw2d.shape.basic.Circle({x:40,y:10, stroke:3, color:\"#3d3d3d\", bgColor:\"#3dff3d\"});\n *\n *    canvas.add(shape);\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Oval\n */\ndraw2d.shape.basic.Circle = draw2d.shape.basic.Oval.extend(\n  /** @lends draw2d.shape.basic.Circle.prototype */\n  {\n\n    NAME: \"draw2d.shape.basic.Circle\",\n\n    /**\n     *\n     * @param {Object} [attr] the configuration of the shape\n     * @param {Object} [setter] add or replace setter methods\n     * @param {Object} [getter] add or replace getter methods\n     **/\n    init: function (attr, setter, getter) {\n      this._super(\n        attr,\n        extend({\n          // @attr {Number} diameter the diameter of the circle */\n          diameter: this.setDiameter,\n          // @attr {Number} radius the radius of the circle */\n          radius: this.setRadius\n        }, setter),\n        extend({\n          diameter: this.getDiameter,\n          radius: this.getRadius\n        }, getter))\n\n      this.setKeepAspectRatio(true)\n    },\n\n    /**\n     *\n     * Set the diameter of the circle. The center of the circle will be retained.\n     *\n     * @param {Number} d The new diameter of the circle.\n     * @since 4.0.0\n     * @returns {this}\n     **/\n    setDiameter: function (d) {\n      let center = this.getCenter()\n      this.setDimension(d, d)\n      this.setCenter(center)\n      this.fireEvent(\"change:diameter\", {value: d})\n\n      return this\n    },\n\n    /**\n     *\n     * Get the diameter of the circle.\n     *\n     * @since 4.0.0\n     * @returns {Number} the diameter of the circle\n     **/\n    getDiameter: function () {\n      return this.getWidth()\n    },\n\n\n    /**\n     *\n     * Set the radius of the circle. The center of the circle will be retained.\n     *\n     * @param {Number} r The new radius of the circle.\n     * @since 4.0.0\n     * @returns {this}\n     **/\n    setRadius: function (r) {\n      this.setDiameter(r * 2)\n      this.fireEvent(\"change:radius\", {value: r})\n\n      return this\n    },\n\n    /**\n     * Get the radius of the circle\n     *\n     * @returns {Number} the radius of the circle\n     */\n    getRadius: function(){\n      return this.getWidth/2\n    },\n\n    /**\n     * @inheritdoc\n     * @returns {Object}\n     */\n    getPersistentAttributes: function () {\n      let memento = this._super()\n      // delete the radius attribute of the parent. Because the \"radius\" is the corner radius\n      // of the shape and not the \"radius\" of the circle. Design flaw.  :-/\n      delete memento.radius\n\n      return memento\n    }\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * A Diamond Figure.\n *\n *\n * @example\n *\n *    let d1 =  new draw2d.shape.basic.Diamond({x:10,y:10});\n *    let d2 =  new draw2d.shape.basic.Diamond({x:100,y:10, bgColor:\"#f0f000\", alpha:0.7, width:100, height:60});\n *\n *    canvas.add(d1);\n *    canvas.add(d2);\n *\n *    canvas.setCurrentSelection(d2);\n *\n * @author Andreas Herz\n * @extends draw2d.VectorFigure\n */\ndraw2d.shape.basic.Diamond = draw2d.shape.basic.Polygon.extend(\n  /** @lends draw2d.shape.basic.Diamond.prototype */\n  {\n  \n  NAME: \"draw2d.shape.basic.Diamond\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({bgColor: \"#00a3f6\", color: \"#1B1B1B\"}, attr), setter, getter)\n\n    let pos = this.getPosition()\n\n    this.resetVertices()\n\n    let box = this.getBoundingBox()\n    this.addVertex(box.w / 2, 0)       // Go to the top center..\n    this.addVertex(box.w, box.h / 2) // ...draw line to the right middle\n    this.addVertex(box.w / 2, box.h)   // ...bottom center...\n    this.addVertex(0, box.h / 2) // ...left middle...\n\n    // override the selection handler from the polygon. Because the vertices of\n    // the diamond are not selectable and modifiable\n    //\n    this.installEditPolicy(new draw2d.policy.figure.RectangleSelectionFeedbackPolicy())\n\n    this.setPosition(pos)\n  }\n\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * ResizeHandle for a vertex edit policy. Click of this kind of resize handles\n * adds a new vertex to the polyline or polygon.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.LineResizeHandle\n */\ndraw2d.shape.basic.GhostVertexResizeHandle = draw2d.shape.basic.LineResizeHandle.extend(\n  /** @lends draw2d.shape.basic.GhostVertexResizeHandle.prototype */\n  {\n  \n  NAME: \"draw2d.shape.basic.GhostVertexResizeHandle\",\n\n    /**\n     *\n     *\n     */\n    init: function (owner, precursorIndex) {\n    this.maxOpacity = 0.35\n    this.precursorIndex = precursorIndex\n\n    this._super({owner: owner, opacity: this.maxOpacity})\n  },\n\n  createShapeElement: function () {\n    let shape = this._super()\n\n    shape.attr({\"cursor\": \"pointer\"})\n\n    return shape\n  },\n\n  /**\n   *\n   * Set the alpha blending of this figure.\n   *\n   * @param {Number} percent Value between [0..1].\n   * @template\n   **/\n  setAlpha: function (percent) {\n    this._super(Math.min(this.maxOpacity, Math.max(0, parseFloat(percent))))\n\n    return this\n  },\n\n  /**\n   *\n   * Called when a user clicks on the element\n   *\n   * @template\n   */\n  onClick: function () {\n    let cmd = new draw2d.command.CommandAddVertex(this.owner, this.precursorIndex + 1, this.getAbsoluteX() + this.getWidth() / 2, this.getAbsoluteY() + this.getHeight() / 2)\n    this.getCanvas().getCommandStack().execute(cmd)\n  },\n\n  /**\n   * Called if the drag and drop action begins. You can return [false] if you\n   * want avoid the that the figure can be move.\n   *\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @type {Boolean}\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey) {\n    return true\n  },\n\n  /**\n   *\n   * Called from the framework during a drag&drop operation\n   *\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @returns {Boolean}\n   **/\n  onDrag: function (dx, dy, dx2, dy2) {\n    return true\n  },\n\n  /**\n   *  Called after a drag and drop action.<br>\n   *        Sub classes can override this method to implement additional stuff. Don't forget to call the super implementation via <code>this._super();</code>\n   *\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean}\n   */\n  onDragEnd: function (x, y, shiftKey, ctrlKey) {\n    // fire an event\n    // @since 5.3.3\n    this.fireEvent(\"dragend\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n\n    return true\n  },\n\n\n  /**\n   *\n   * Controls the location of the resize handle\n   *\n   * @template\n   **/\n  relocate: function () {\n    let p1 = this.owner.getVertices().get(this.precursorIndex)\n    let p2 = this.owner.getVertices().get(this.precursorIndex + 1)\n\n    this.setPosition(\n      ((p2.x - p1.x) / 2 + p1.x - this.getWidth() / 2),\n      ((p2.y - p1.y) / 2 + p1.y - this.getHeight() / 2)\n    )\n  }\n\n\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * Simple Image shape.\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.node.Node\n */\ndraw2d.shape.basic.Image = draw2d.shape.node.Node.extend(\n  /** @lends draw2d.shape.basic.Image.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.Image\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr,\n      extend({\n        // @attr {String} path the image path (absolute or relative) of the shape */\n        path: this.setPath\n      }, setter),\n      extend({\n        path: this.getPath\n      }, getter))\n  },\n\n\n  /**\n   * \n   * Set the image path attribute of the Image shape and repaint them.\n   * The path can be relative or absolute\n   *\n   * @param path\n   * @since 2.8.0\n   */\n  setPath: function (path) {\n    this.path = path\n\n    if (this.shape !== null) {\n      this.shape.attr({src: this.path})\n    }\n    this.fireEvent(\"change:path\", {value: this.path})\n\n    return this\n  },\n\n  /**\n   * \n   * Return the image path attribute of the shape.\n   *\n   * @returns {String}\n   * @since 2.8.0\n   */\n  getPath: function () {\n    return this.path\n  },\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return this\n    }\n\n    attributes = attributes || {}\n\n    attributes.x = this.getAbsoluteX()\n    attributes.y = this.getAbsoluteY()\n    attributes.width = this.getWidth()\n    attributes.height = this.getHeight()\n    attributes.src = this.path\n\n    // propagate the width/height and the display:inline-block as CSS attribute as well because Chrome\n    // did some \"flickering\" in some versions and sometimes the image disappear complete\n    $(this.shape.node).css({display: \"inline-block\", \"width\": attributes.width, \"height\": attributes.height})\n\n    this._super(attributes)\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createShapeElement: function () {\n    return this.canvas.paper.image(this.path, this.getX(), this.getY(), this.getWidth(), this.getHeight())\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getPersistentAttributes: function () {\n    return extend(this._super(), {\n      path: this.path\n    })\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n    if (typeof memento.path !== \"undefined\") {\n      this.setPath(memento.path)\n    }\n  }\n\n})\n\n","import draw2d from '../../packages'\nimport jsonUtil from '../../util/JSONUtil'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * Implements a simple text label.\n *\n *\n * @example\n *\n *    let shape =  new draw2d.shape.basic.Label({text:\"This is a simple label\", x:40, y:10});\n *\n *    canvas.add(shape);\n *\n * @author Andreas Herz\n * @extends draw2d.SetFigure\n */\ndraw2d.shape.basic.Label = draw2d.SetFigure.extend(\n  /** @lends draw2d.shape.basic.Label.prototype */\n  {\n  \n  NAME: \"draw2d.shape.basic.Label\",\n\n  FONT_FALLBACK: {\n    'Georgia': 'Georgia, serif',\n    'Palatino Linotype': '\"Palatino Linotype\", \"Book Antiqua\", Palatino, serif',\n    'Times New Roman': '\"Times New Roman\", Times, serif',\n    'Arial': 'Arial, Helvetica, sans-serif',\n    'Arial Black': '\"Arial Black\", Gadget, sans-serif',\n    'Comic Sans MS': '\"Comic Sans MS\", cursive, sans-serif',\n    'Impact': 'Impact, Charcoal, sans-serif',\n    'Lucida Sans Unicode': '\"Lucida Sans Unicode\", \"Lucida Grande\", sans-serif',\n    'Tahoma, Geneva': 'Tahoma, Geneva, sans-seri',\n    'Trebuchet MS': '\"Trebuchet MS\", Helvetica, sans-serif',\n    'Verdana': 'Verdana, Geneva, sans-serif',\n    'Courier New': '\"Courier New\", Courier, monospace',\n    'Lucida Console': '\"Lucida Console\", Monaco, monospace'\n  },\n\n\n  /**\n   * Creates a new text element.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n\n    this.text = \"\"\n    // for performance reasons\n    //\n    this.cachedWidth = null\n    this.cachedHeight = null\n    this.cachedMinWidth = null\n    this.cachedMinHeight = null\n\n    // appearance of the shape\n    //\n    this.fontSize = 12\n    this.fontColor = new draw2d.util.Color(\"#080808\")\n    this.fontFamily = null\n    this.padding = {top: 4, right: 4, bottom: 4, left: 4}\n\n    this.outlineStroke = 0\n    this.outlineColor = new draw2d.util.Color(null)\n\n    this.bold = false\n\n    // behavior of the shape\n    //\n    this.editor = null\n\n    this._super(\n      extend({stroke: 1, width: 1, height: 1, resizeable: false}, attr),\n      extend({\n        // @attr {String} text the text to show */\n        text: this.setText,\n        // @attr {String} set the editor to use see {@link draw2d.ui.LabelEditor} */\n        editor: this.installEditor,\n        // @attr {Number} outlineStroke the line width of the text to draw. Fill color and outline of the text can be different. */\n        outlineStroke: this.setOutlineStroke,\n        // @attr {String|draw2d.util.Color} outlineColor the outline color of the text */\n        outlineColor: this.setOutlineColor,\n        // @attr {String} fontFamily the font to use*/\n        fontFamily: this.setFontFamily,\n        // @attr {Number} fontSize the font size to use */\n        fontSize: this.setFontSize,\n        // @attr {String|draw2d.util.Color} fontColor the font color */\n        fontColor: this.setFontColor,\n        // @attr {Number} padding the padding in pixel around the text */\n        padding: this.setPadding,\n        // @attr {Boolean} bold indicator if bold text should be used*/\n        bold: this.setBold\n      }, setter),\n      extend({\n        text: this.getText,\n        outlineStroke: this.getOutlineStroke,\n        outlineColor: this.getOutlineColor,\n        fontFamily: this.getFontFamily,\n        fontSize: this.getFontSize,\n        fontColor: this.getFontColor,\n        padding: this.getPadding,\n        bold: this.isBold\n      }, getter))\n\n\n    this.installEditPolicy(new draw2d.policy.figure.AntSelectionFeedbackPolicy())\n\n\n    // some performance improvements\n    this.lastAppliedLabelRotation = \"\"\n    this.lastAppliedTextAttributes = {}\n  },\n\n  /**\n   *\n   * Creates the shape object for a text node.\n   *\n   * @private\n   **/\n  createSet: function () {\n    return this.canvas.paper.text(0, 0, this.text)\n  },\n\n  /**\n   *\n   * Set the canvas element of this figures.\n   *\n   * @param {draw2d.Canvas} canvas the new parent of the figure or null\n   * @private\n   */\n  setCanvas: function (canvas) {\n    this.clearCache()\n    this._super(canvas)\n    this.clearCache()\n  },\n\n  /**\n   *\n   * Trigger the repaint of the element and transport all style properties to the visual representation.<br>\n   * Called by the framework.\n   *\n   * @private\n   **/\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null || (this.parent && this.parent.repaintBlocked === true)) {\n      return\n    }\n\n    // style the label\n    let lattr = this.calculateTextAttr()\n    lattr.text = this.text\n\n    let attrDiff = jsonUtil.flatDiff(lattr, this.lastAppliedTextAttributes)\n    this.lastAppliedTextAttributes = lattr\n\n    // the two \"attr\" calls takes 2/3 of the complete method call (chrome performance check).\n    // now we check if any changes happens and call this method only if necessary.\n    if (Object.getOwnPropertyNames(attrDiff).length > 0) {\n      this.svgNodes.attr(lattr)\n      // set of the x/y must be done AFTER the font-size and bold has been set.\n      // Reason: the getBBox method needs the font attributes for calculation\n      this.svgNodes.attr({\n        x: (this.padding.left + this.stroke),\n        y: (this.svgNodes.getBBox(true).height / 2 + this.padding.top + this.getStroke())\n      })\n    }\n    this._super(attributes)\n  },\n\n\n  /**\n   *\n   * @private\n   */\n  calculateTextAttr: function () {\n    let lattr = {\n      \"text-anchor\": \"start\",\n      \"font-size\": this.fontSize,\n      \"font-weight\": (this.bold === true) ? \"bold\" : \"normal\",\n      fill: this.fontColor.rgba(),\n      stroke: this.outlineColor.rgba(),\n      \"stroke-width\": this.outlineStroke\n    }\n    if (this.fontFamily !== null) {\n      lattr[\"font-family\"] = this.fontFamily\n    }\n    return lattr\n  },\n\n  /**\n   * @private\n   * @returns {this}\n   */\n  applyTransformation: function () {\n    let ts = \"R\" + this.rotationAngle\n    //    if(ts!==this.lastAppliedLabelRotation){\n    this.shape.transform(ts)\n    this.lastAppliedLabelRotation = ts\n    //    }\n\n    this.svgNodes.transform(\n      \"R\" + this.rotationAngle +\n      \"T\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY())\n\n    return this\n  },\n\n\n  /**\n   *\n   * Set the new font size in [pt].\n   *\n   * @returns {this}\n   * @param {Number} size The new font size in <code>pt</code>\n   **/\n  setFontSize: function (size) {\n    this.clearCache()\n    this.fontSize = size\n\n    this.repaint()\n\n    this.fireEvent(\"change:fontSize\", {value: this.fontSize})\n    this.fireEvent(\"resize\")\n\n    // Update the resize handles if the user change the position of the element via an API call.\n    //\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n\n    return this\n  },\n\n  /**\n   *\n   * Return the current used font size in px.\n   *\n   * @returns {Number}\n   * @since 4.0.1\n   */\n  getFontSize: function () {\n    return this.fontSize\n  },\n\n\n  /**\n   *\n   * Set the label to <b>bold</b> or <b>normal</b> font weight.\n   *\n   * @param {Boolean} bold The bold flag for the label\n   * @since 2.4.1\n   * @returns {this}\n   **/\n  setBold: function (bold) {\n    this.clearCache()\n    this.bold = bold\n    this.repaint()\n\n    this.fireEvent(\"change:bold\", {value: this.bold})\n    this.fireEvent(\"resize\")\n\n    // Update the resize handles if the user change the position of the element via an API call.\n    //\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n    return this\n  },\n\n  /**\n   *\n   * Return the \"bold\" attribute of the label\n   *\n   * @since 5.0.0\n   * @returns {Boolean}\n   */\n  isBold: function () {\n    return this.bold\n  },\n\n  /**\n   *\n   * Set the outline color of the font.\n   *\n   * @param {draw2d.util.Color/String} color The new color of the line.\n   * @since 4.2.1\n   * @returns {this}\n   **/\n  setOutlineColor: function (color) {\n    this.outlineColor = new draw2d.util.Color(color)\n    this.repaint()\n    this.fireEvent(\"change:outlineColor\", {value: this.outlineColor})\n\n    return this\n  },\n\n  /**\n   *\n   * The outline color of the text\n   *\n   * @returns {draw2d.util.Color}\n   * @since 4.2.1\n   */\n  getOutlineColor: function () {\n    return this.outlineColor\n  },\n\n  /**\n   *\n   * Set the stroke of the text to use.\n   *\n   * @param {Number} w The new line width of the figure\n   * @since 4.2.1\n   * @returns {this}\n   **/\n  setOutlineStroke: function (w) {\n    this.outlineStroke = w\n    this.repaint()\n    this.fireEvent(\"change:outlineStroke\", {value: this.outlineStroke})\n\n    return this\n  },\n\n  /**\n   *\n   * The used outline line width.\n   *\n   * @type {Number}\n   * @since 4.2.1\n   **/\n  getOutlineStroke: function () {\n    return this.outlineStroke\n  },\n\n  /**\n   *\n   * Set the color of the font.\n   *\n   * @param {draw2d.util.Color|String} color The new color of the line.\n   * @returns {this}\n   **/\n  setFontColor: function (color) {\n    this.fontColor = new draw2d.util.Color(color)\n    this.repaint()\n    this.fireEvent(\"change:fontColor\", {value: this.fontColor})\n\n    return this\n  },\n\n  /**\n   *\n   * The current used font color\n   *\n   * @returns {draw2d.util.Color}\n   */\n  getFontColor: function () {\n    return this.fontColor\n  },\n\n  /**\n   *\n   * Set the padding of the element\n   *\n   *     // Alternatively you can use the attr method:\n   *     //\n   *     // set the padding for top,left,bottom,right in one call\n   *     figure.attr({\n   *       padding: 3\n   *     });\n   *\n   *     // update the padding left and top\n   *     figure.attr({\n   *       padding: {left:3, top:30}\n   *     });\n   *\n   * @param {Number|Object} padding The new padding\n   * @returns {this}\n   **/\n  setPadding: function (padding) {\n    this.clearCache()\n    if (typeof padding === \"number\") {\n      this.padding = {top: padding, right: padding, bottom: padding, left: padding}\n    }\n    else {\n      this.padding = extend(this.padding, padding)\n    }\n    this.repaint()\n    this.fireEvent(\"change:padding\", {value: this.padding})\n\n    return this\n  },\n\n\n  /**\n   *\n   * Get the padding of the element.\n   *\n   * @since 4.0.1\n   **/\n  getPadding: function () {\n    return this.padding\n  },\n\n  /**\n   *\n   * Set the font family to use. If you use the shown font names the typical fallback\n   * font are installed as well.\n   *\n   * <b>Serif Fonts</b>\n   * <ul>\n   *  <li><span style=\"font-family:'Georgia'\">Georgia</span></li>\n   *  <li><span style=\"font-family:'Palatino Linotype'\">Palatino Linotype</span></li>\n   *  <li><span style=\"font-family:'Times New Roman'\">Times New Roman</span></li>\n   * </ul>\n   *\n   * <b>Sans-Serif Fonts</b>\n   * <ul>\n   *  <li><span style=\"font-family:'Arial'\">Arial</span></li>\n   *  <li><span style=\"font-family:'Arial Black'\">Arial Black</span></li>\n   *  <li><span style=\"font-family:'Comic Sans MS'\">Comic Sans MS</span></li>\n   *  <li><span style=\"font-family:'Impact, Charcoal'\">Impact, Charcoal</span></li>\n   *  <li><span style=\"font-family:'Lucida Sans Unicode'\">Lucida Sans Unicode</span></li>\n   *  <li><span style=\"font-family:'Tahoma, Geneva'\">Tahoma, Geneva</span></li>\n   *  <li><span style=\"font-family:'Trebuchet MS'\">Trebuchet MS</span> </li>\n   *  <li><span style=\"font-family:'Verdana'\">Verdana</span></li>\n   * </ul>\n   *\n   * <b>Monospace Fonts</b>\n   * <ul>\n   *  <li><span style=\"font-family:'Courier New'\">Courier New</span></li>\n   *  <li><span style=\"font-family:'Lucida Console'\">Lucida Console</span></li>\n   * </ul>\n   *\n   * @param {String} font The font to use\n   * @returns {this}\n   **/\n  setFontFamily: function (font) {\n    this.clearCache()\n\n    // check for fallback\n    //\n    if ((typeof font !== \"undefined\") && font !== null && typeof this.FONT_FALLBACK[font] !== \"undefined\") {\n      font = this.FONT_FALLBACK[font]\n    }\n\n    this.fontFamily = font\n    this.repaint()\n    this.fireEvent(\"change:fontFamily\", {value: this.fontFamily})\n\n    return this\n  },\n\n\n  /**\n   *\n   * Returns the used font family of the label.\n   *\n   * @returns {String}\n   */\n  getFontFamily: function () {\n    return this.fontFamily\n  },\n\n\n  /**\n   *\n   * A Label did have \"autosize\". Do nothing at all.\n   *\n   * @returns {this}\n   **/\n  setDimension: function (w, h) {\n    this.clearCache()\n\n    this._super(w, h)\n\n    return this\n  },\n\n  /**\n   *\n   * clear the internal cache for width/height precalculation\n   * @private\n   */\n  clearCache: function () {\n    this.portRelayoutRequired = true\n    this.cachedMinWidth = null\n    this.cachedMinHeight = null\n    this.cachedWidth = null\n    this.cachedHeight = null\n    this.lastAppliedTextAttributes = {}\n\n    return this\n  },\n\n  /**\n   *\n   * This value is relevant for the interactive resize of the figure.\n   *\n   * @returns {Number} Returns the min. width of this object.\n   */\n  getMinWidth: function () {\n    if (this.shape === null) {\n      return 0\n    }\n\n    if (this.cachedMinWidth === null) {\n      this.cachedMinWidth = this.svgNodes.getBBox(true).width\n        + this.padding.left\n        + this.padding.right\n        + 2 * this.getStroke()\n    }\n\n    return this.cachedMinWidth\n  },\n\n  /**\n   *\n   * This value is relevant for the interactive resize of the figure.\n   *\n   * @returns {Number} Returns the min. width of this object.\n   */\n  getMinHeight: function () {\n    if (this.shape === null) {\n      return 0\n    }\n\n    if (this.cachedMinHeight === null) {\n      this.cachedMinHeight = this.svgNodes.getBBox(true).height\n        + this.padding.top\n        + this.padding.bottom\n        + (2 * this.getStroke())\n    }\n\n    return this.cachedMinHeight\n  },\n\n  /**\n   *\n   * Return the calculate width of the set. This calculates the bounding box of all elements.\n   *\n   * @returns {Number} the calculated width of the label\n   **/\n  getWidth: function () {\n    if (this.shape === null) {\n      return 0\n    }\n\n    if (this.cachedWidth === null) {\n      if (this.resizeable === true) {\n        this.cachedWidth = Math.max(this.width, this.getMinWidth())\n      }\n      else {\n        this.cachedWidth = this.getMinWidth()\n      }\n    }\n\n\n    return this.cachedWidth\n  },\n\n  /**\n   *\n   * Return the calculated height of the set. This calculates the bounding box of all elements.\n   *\n   * @returns {Number} the calculated height of the label\n   */\n  getHeight: function () {\n    if (this.shape === null) {\n      return 0\n    }\n\n    if (this.cachedHeight === null) {\n      this.cachedHeight = Math.max(this.height, this.getMinHeight())\n    }\n\n    return this.cachedHeight\n  },\n\n  /**\n   *\n   * Set an editor for the label. This can be a dialog or inplace editor for the\n   * Text.<br>\n   * The editor will be activated if you doubleClick on the label.\n   *\n   * @param {draw2d.ui.LabelEditor|String} editor\n   */\n  installEditor: function (editor) {\n    if (typeof editor === \"string\") {\n      editor = eval(\"new \" + editor + \"()\")\n    }\n    this.editor = editor\n\n    return this\n  },\n\n  /**\n   *\n   * Called when a user dbl clicks on the element\n   *\n   */\n  onDoubleClick: function () {\n    if (this.editor !== null) {\n      this.editor.start(this)\n    }\n  },\n\n\n  /**\n   *\n   * Returns the current text of the label.\n   *\n   * @returns the current display text of the label\n   * @type {String}\n   **/\n  getText: function () {\n    return this.text\n  },\n\n  /**\n   *\n   * Set the text for the label. Use \\n for multiline text.\n   *\n   * @param {String} text The new text for the label.\n   * @returns {this}\n   **/\n  setText: function (text) {\n    this.clearCache()\n    this.text = text\n\n    this.repaint()\n    // Update the resize handles if the user change the position of the element via an API call.\n    //\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n    this.fireEvent(\"resize\")\n    this.fireEvent(\"change:text\", {value: this.text})\n\n    if (this.parent !== null) {\n      this.parent.repaint()\n    }\n\n    return this\n  },\n\n\n    /**\n     *\n     * @param x\n     * @param y\n     * @returns {Boolean}\n     * @private\n     */\n  hitTest: function (x, y) {\n    // apply a simple bounding box test if the label isn'T rotated\n    //\n    if (this.rotationAngle === 0) {\n      return this._super(x, y)\n    }\n\n    // rotate the box with the current matrix of the\n    // shape\n    let matrix = this.shape.matrix\n    let points = this.getBoundingBox().getVertices()\n    points.each(function (i, point) {\n      let x = matrix.x(point.x, point.y)\n      let y = matrix.y(point.x, point.y)\n      point.x = x\n      point.y = y\n    })\n\n    let polySides = 4\n\n    let j = polySides - 1\n    let oddNodes = false\n\n    for (let i = 0; i < polySides; i++) {\n      let pi = points.get(i)\n      let pj = points.get(j)\n      if ((pi.y < y && pj.y >= y\n        || pj.y < y && pi.y >= y)\n        && (pi.x <= x || pj.x <= x)) {\n        if (pi.x + (y - pi.y) / (pj.y - pi.y) * (pj.x - pi.x) < x) {\n          oddNodes = !oddNodes\n        }\n      }\n      j = i\n    }\n    return oddNodes\n  },\n\n\n  /**\n   *\n   * Return an objects with all important attributes for XML or JSON serialization\n   *\n   * @returns {Object}\n   */\n  getPersistentAttributes: function () {\n    let memento = this._super()\n\n    memento.text = this.text\n    memento.outlineStroke = this.outlineStroke\n    memento.outlineColor = this.outlineColor.rgba()\n    memento.fontSize = this.fontSize\n    memento.fontColor = this.fontColor.rgba()\n    memento.fontFamily = this.fontFamily\n\n    if (this.editor !== null) {\n      memento.editor = this.editor.NAME\n    }\n    return memento\n  },\n\n  /**\n   *\n   * Apply all attributes from the serialized properties to the shape.\n   * Used during JSON serialisation.\n   *\n   * @param {Object} memento\n   * @returns {this}\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n    if (typeof memento.text !== \"undefined\") {\n      this.setText(memento.text)\n    }\n    if (typeof memento.outlineStroke !== \"undefined\") {\n      this.setOutlineStroke(memento.outlineStroke)\n    }\n    if (typeof memento.outlineColor !== \"undefined\") {\n      this.setOutlineColor(memento.outlineColor)\n    }\n    if (typeof memento.fontFamily !== \"undefined\") {\n      this.setFontFamily(memento.fontFamily)\n    }\n    if (typeof memento.fontSize !== \"undefined\") {\n      this.setFontSize(memento.fontSize)\n    }\n    if (typeof memento.fontColor !== \"undefined\") {\n      this.setFontColor(memento.fontColor)\n    }\n\n    if (typeof memento.editor === \"string\") {\n      this.installEditor(eval(\"new \" + memento.editor + \"()\"))\n    }\n\n    return this\n  }\n\n})\n\n\n\n","import draw2d from '../../packages'\nimport jsonUtil from '../../util/JSONUtil'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * The base class for all visible elements inside a canvas.\n *\n *\n * @example\n *\n *    // Create the line and modify the start/end after inserting them into\n *    // the canvas\n *    let line1 =  new draw2d.shape.basic.Line({startX:30, startY:30, endX:100, endY:80});\n *\n *    canvas.add(line1);\n *\n *    // Create the line with a given start/end coordinate in the constructor\n *    //\n *    let line2 = new draw2d.shape.basic.Line({\n *          startX:20,\n *          startY:80,\n *          endX:200,\n *          endY:150,\n *          stroke:3,\n *          color:\"#1d1dff\"\n *     });\n *    canvas.add(line2);\n *\n * @author Andreas Herz\n * @extends draw2d.Figure\n */\ndraw2d.shape.basic.Line = draw2d.Figure.extend(\n  /** @lends draw2d.shape.basic.Line.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.Line\",\n\n  DEFAULT_COLOR: new draw2d.util.Color(0, 0, 0),\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas witht he given start and\n   * end coordinate.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    // click area for the line hit test\n    this.corona = 10\n    this.isGlowing = false\n    this.lineColor = this.DEFAULT_COLOR\n    this.stroke = 1\n    this.outlineStroke = 0\n    this.outlineColor = new draw2d.util.Color(null)\n    this.outlineVisible = false\n\n    this.draggedSegment = null\n\n    this.dasharray = null\n\n    this.start = new draw2d.geo.Point(30, 30)\n    this.end = new draw2d.geo.Point(100, 100)\n\n    this.vertices = new draw2d.util.ArrayList()\n    this.vertices.add(this.start.clone())\n    this.vertices.add(this.end.clone())\n\n    this._super(\n      extend({\n        deleteable: false,\n        selectable: true\n      }, attr),\n      extend({}, {\n        // @attr {Number} start the  coordinates of the start point */\n        start: this.setStartPosition,\n        // @attr {Number} startX the x coordinate of the start point */\n        startX: this.setStartX,\n        // @attr {Number} startY the y coordinate of the start point */\n        startY: this.setStartY,\n        // @attr {Number} end the coordinates of the end point */\n        end: this.setEndPosition,\n        // @attr {Number} endX the x coordinate of the end */\n        endX: this.setEndX,\n        // @attr {Number} endY the y coordinate of the end */\n        endY: this.setEndY,\n        // @attr {Number} vertices the x coordinate of the start point */\n        vertices: this.setVertices,\n        // @attr {String | draw2d.util.Color} outlineColor the outline color of the line */\n        outlineColor: this.setOutlineColor,\n        // @attr {Number} outlineStroke the line width of the outline */\n        outlineStroke: this.setOutlineStroke,\n        // @attr {String|draw2d.util.Color} color the color of the line */\n        color: this.setColor,\n        // @attr {Number} stroke the line width of the color */\n        stroke: this.setStroke,\n        // @attr {String} dasharray the line pattern see {@link draw2d.shape.basic.Line#setDashArray} for more information*/\n        dasharray: this.setDashArray,\n        // @attr {Boolean} glow the glow flag for the shape. The representation of the \"glow\" depends on the shape */\n        glow: this.setGlow\n      }, setter),\n\n      extend({}, {\n        start: this.getStartPosition,\n        end: this.getEndPosition,\n        outlineColor: this.getOutlineColor,\n        outlineStroke: this.getOutlineStroke,\n        stroke: this.getStroke,\n        color: this.getColor,\n        dasharray: this.getDashArray,\n        vertices: this.getVertices\n      }, getter))\n\n    // some router installs a edit policy. In this case we want delete them\n    //\n    if (this.editPolicy.getSize() === 0) {\n      this.installEditPolicy(new draw2d.policy.line.LineSelectionFeedbackPolicy())\n    }\n  },\n\n  /**\n   *\n   * Set the outline color of the line.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       outlineColor: color\n   *     });\n   *\n   * @param {draw2d.util.Color/String} color The new color of the line.\n   * @since 4.2.1\n   **/\n  setOutlineColor: function (color) {\n    this.outlineColor = new draw2d.util.Color(color)\n    this.repaint()\n    this.fireEvent(\"change:outlineColor\", {value: this.outlineColor})\n\n    return this\n  },\n\n  /**\n   *\n   * The outline color of the text\n   *\n   * @returns {draw2d.util.Color}\n   * @since 4.2.1\n   */\n  getOutlineColor: function () {\n    return this.outlineColor\n  },\n\n  /**\n   *\n   * Set the outline stroke of the line to use.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       outlineStroke: w\n   *     });\n   *\n   * @param {Number} w The new outline width of the line\n   * @since 4.2.1\n   **/\n  setOutlineStroke: function (w) {\n    this.outlineStroke = w\n    this.repaint()\n    this.fireEvent(\"change:outlineStroke\", {value: this.outlineStroke})\n\n    return this\n  },\n\n  /**\n   *\n   * The used outline line width.\n   *\n   * @returns {Number}\n   * @since 4.2.1\n   **/\n  getOutlineStroke: function () {\n    return this.outlineStroke\n  },\n\n  /**\n   *\n   * Called if the drag and drop action begins. You can return [false] if you\n   * want avoid that the figure can be move.\n   *\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean} true if the figure accepts dragging\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey, isFaked) {\n    let result = this._super(x, y, shiftKey, ctrlKey)\n\n    if (result === true && isFaked !== true) {\n      this.draggedSegment = {index: 0, start: this.start, end: this.end}\n    }\n    return result\n  },\n\n  /**\n   *\n   * Don't call them manually. This will be done by the framework.<br>\n   * Will be called if the object are moved via drag and drop.\n   * Sub classes can override this method to implement additional stuff. Don't forget to call\n   * the super implementation via <code>this._super(dx, dy, dx2, dy2);</code>\n   * @private\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   **/\n  onDrag: function (dx, dy, dx2, dy2) {\n    if (this.command === null) {\n      return\n    }\n\n    this.vertices.each(function (i, e) {\n      e.translate(dx2, dy2)\n    })\n    this.command.updateVertices(this.vertices.clone())\n\n    // start/end are separate draw2d.geo.Point objects. Required for routing and determining if a node is dragged away\n    // from the connection. In this case we must modify the start/end by hand\n    this.start.translate(dx2, dy2)\n    this.end.translate(dx2, dy2)\n\n\n    this.svgPathString = null\n    this._super(dx, dy, dx2, dy2)\n  },\n\n  /**\n   *\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onDragEnd: function (x, y, shiftKey, ctrlKey) {\n    // Element ist zwar schon an seine Position, das Command muss aber trotzdem\n    // in dem CommandStack gelegt werden damit das Undo funktioniert.\n    //\n    this.isInDragDrop = false\n    this.draggedSegment = null\n\n    if (this.command === null) {\n      return\n    }\n\n    this.canvas.getCommandStack().execute(this.command)\n    this.command = null\n    this.isMoving = false\n\n    // notify all installed policies\n    //\n    this.editPolicy.each( (i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.onDragEnd(this.canvas, this, x, y, shiftKey, ctrlKey)\n      }\n    })\n\n    // inform all other listener\n    this.fireEvent(\"move\", {figure: this, dx: 0, dy: 0})\n\n    // fire an event\n    // @since 5.3.3\n    this.fireEvent(\"dragend\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n\n  },\n\n  /**\n   *\n   * Called when a user clicks on the element.\n   *\n   *     // Alternatively you can register for this event with\n   *     figure.on(\"click\", function(emitterFigure){\n   *         alert(\"clicked\");\n   *     });\n   *\n   * @template\n   * @since 4.0.0\n   */\n  onClick: function () {\n  },\n\n  /**\n   *\n   * Set the line style for this object.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       dasharray: dashPattern\n   *     });\n   *\n   * @param {String} dashPattern Can be one of this [\"\", \"-\", \".\", \"-.\", \"-..\", \". \", \"- \", \"--\", \"- .\", \"--.\", \"--..\"]\n   */\n  setDashArray: function (dashPattern) {\n    this.dasharray = dashPattern\n    this.repaint()\n\n    this.fireEvent(\"change:dashArray\", {value: this.dasharray})\n\n    return this\n  },\n\n  /**\n   *\n   * Get the line style for this object.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr(\"dasharray\");\n   *\n   * @since 5.1.0\n   */\n  getDashArray: function () {\n    return this.dasharray\n  },\n\n\n  /**\n   *\n   * Set the width for the click hit test of this line.\n   *\n   * @param {Number} width the width of the line hit test.\n   **/\n  setCoronaWidth: function (width) {\n    this.corona = width\n\n    return this\n  },\n\n\n  /**\n   *\n   * Called by the framework. Don't call them manually.\n   *\n   * @private\n   **/\n  createShapeElement: function () {\n    let set = this.canvas.paper.set()\n\n    // the drop shadow or border line\n    set.push(this.canvas.paper.path(\"M\" + this.start.x + \" \" + this.start.y + \"L\" + this.end.x + \" \" + this.end.y))\n    // the main path\n    set.push(this.canvas.paper.path(\"M\" + this.start.x + \" \" + this.start.y + \"L\" + this.end.x + \" \" + this.end.y))\n    set.node = set.items[1].node\n\n    // indicate that the outline is visible at the moment\n    // the repaint update the status correct and set the attributes for\n    // the first time\n    this.outlineVisible = true//this.outlineStroke>0;\n\n    return set\n  },\n\n  /**\n   * @inheritdoc\n   *\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    // don't override existing values\n    //\n    if (typeof attributes === \"undefined\") {\n      attributes = {\n        \"stroke\": this.lineColor.rgba(),\n        \"stroke-width\": this.stroke,\n        \"path\": [\"M\", this.start.x, this.start.y, \"L\", this.end.x, this.end.y].join(\" \")\n      }\n    }\n    else {\n      // may a router has calculate another path. don't override them.\n      if (typeof attributes.path === \"undefined\") {\n        attributes.path = [\"M\", this.start.x, this.start.y, \"L\", this.end.x, this.end.y].join(\" \")\n      }\n      jsonUtil.ensureDefault(attributes, \"stroke\", this.lineColor.rgba())\n      jsonUtil.ensureDefault(attributes, \"stroke-width\", this.stroke)\n    }\n\n    jsonUtil.ensureDefault(attributes, \"stroke-dasharray\", this.dasharray)\n    this._super(attributes)\n\n    if (this.outlineStroke > 0) {\n      this.shape.items[0].attr({\n        \"stroke-width\": (this.outlineStroke + this.stroke),\n        \"stroke\": this.outlineColor.rgba()\n      })\n      if (this.outlineVisible === false)\n        this.shape.items[0].show()\n      this.outlineVisible = true\n    }\n    else if (this.outlineVisible === true) {\n      // reset them once\n      this.shape.items[0].attr({\"stroke-width\": 0, \"stroke\": \"none\"})\n      this.shape.items[0].hide()\n      this.outlineVisible = false\n    }\n  },\n\n  /**\n   *\n   * Moves the element to the background. Additional\n   * the internal model changed as well.\n   *\n   * @since 4.7.2\n   */\n  toBack: function (figure) {\n    this._super(figure)\n\n    if (this.outlineVisible === true) {\n      this.shape.items[0].insertBefore(this.shape.items[1])\n    }\n\n    return this\n  },\n\n\n  /**\n   *\n   * Highlight the element or remove the highlighting\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       glow: flag\n   *     });\n   *\n   * @param {Boolean} flag indicates glow/noGlow\n   * @template\n   */\n  setGlow: function (flag) {\n    if (this.isGlowing === flag) {\n      return\n    }\n\n    if (flag === true) {\n      // store old values for restore\n      this._lineColor = this.lineColor\n      this._stroke = this.stroke\n\n      this.setColor(new draw2d.util.Color(\"#3f72bf\"))\n      this.setStroke((this.stroke * 4) | 0)\n    }\n    else {\n      this.setColor(this._lineColor)\n      this.setStroke(this._stroke)\n    }\n\n    this.isGlowing = flag\n\n    return this\n  },\n\n\n  /**\n   * You can't drag&drop the resize handles if the line not resizeable.\n   * @returns boolean\n   **/\n  isResizeable: function () {\n    return true\n  },\n\n\n  /**\n   * Set the line width. This enforce a repaint of the line.\n   * This method fires a <i>document dirty</i> event.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       stroke: w\n   *     });\n   *\n   * @param {Number} w The new line width of the figure.\n   **/\n  setStroke: function (w) {\n    this.stroke = parseFloat(w)\n\n    this.repaint()\n    this.fireEvent(\"change:stroke\", {value: this.stroke})\n\n    return this\n  },\n\n\n  /**\n   *\n   * The used line width.\n   *\n   * @returns {Number}\n   **/\n  getStroke: function () {\n    return this.stroke\n  },\n\n\n  /**\n   *\n   * Set the color of the line.\n   * This method fires a <i>document dirty</i> event.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       color: color\n   *     });\n   *\n   * @param {draw2d.util.Color|String} color The new color of the line.\n   **/\n  setColor: function (color) {\n    this.lineColor = new draw2d.util.Color(color)\n    this.repaint()\n    this.fireEvent(\"change:color\", {value: this.lineColor})\n\n    return this\n  },\n\n  /**\n   *\n   * Return the current paint color.\n   *\n   * @returns {draw2d.util.Color} The paint color of the line.\n   **/\n  getColor: function () {\n    return this.lineColor\n  },\n\n  /**\n   *\n   * Translate the line with the given x/y offset.\n   *\n   * @param {Number} dx The new x translate offset\n   * @param {Number} dy The new y translate offset\n   * @since 4.1.0\n   **/\n  translate: function (dx, dy) {\n    this.vertices.each(function (i, e) {\n      e.translate(dx, dy)\n    })\n\n    // update start/end if the first or last vertex has been changed\n    //\n    this.start = this.vertices.first().clone()\n    this.end = this.vertices.last().clone()\n\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n    this.svgPathString = null\n    this.repaint()\n\n    return this\n  },\n\n  /**\n   *\n   * return the bounding box of the line or polygon\n   *\n   * TODO: precalculate or cache this values\n   *\n   * @returns {draw2d.geo.Rectangle}\n   * @since 4.8.2\n   */\n  getBoundingBox: function () {\n    let minX = Math.min(...this.vertices.asArray().map(n => n.x))\n    let minY = Math.min(...this.vertices.asArray().map(n => n.y))\n    let maxX = Math.max(...this.vertices.asArray().map(n => n.x))\n    let maxY = Math.max(...this.vertices.asArray().map(n => n.y))\n    let width = maxX - minX\n    let height = maxY - minY\n\n    return new draw2d.geo.Rectangle(minX, minY, width, height)\n  },\n\n\n  /**\n   *\n   * Set the start point of the line.\n   * This method fires a <i>document dirty</i> event.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       startX: x,\n   *       startY: y\n   *     });\n   *\n   * @param {Number|draw2d.geo.Point} x the x coordinate of the start point\n   * @param {Number} [y] the y coordinate of the start point\n   **/\n  setStartPosition: function (x, y) {\n    let pos = new draw2d.geo.Point(x, y)\n    if (this.start.equals(pos)) {\n      return this\n    }\n\n    this.start.setPosition(pos)\n    this.vertices.first().setPosition(pos)\n    this.repaint()\n\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n    this.fireEvent(\"change:start\", {value: this.start})\n\n    return this\n  },\n  /** @deprecated */\n  setStartPoint: function (x, y) {\n    return this.setStartPosition(x, y)\n  },\n\n  setStartX: function (x) {\n    this.setStartPosition(x, this.start.y)\n  },\n\n  setStartY: function (y) {\n    this.setStartPosition(this.start.x, y)\n  },\n\n  setEndX: function (x) {\n    this.setEndPosition(x, this.end.y)\n  },\n\n  setEndY: function (y) {\n    this.setEndPosition(this.end.x, y)\n  },\n\n  /**\n   * Set the end point of the line.\n   * This method fires a <i>document dirty</i> event.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       endX: 3,\n   *       endY: 10\n   *     });\n   *\n   *     // or\n   *     figure.attr({\n   *       end: {x:3, y:10}\n   *     });\n   * @param {Number|draw2d.geo.Point} x the x coordinate or a draw2d.geo.Point of the end point\n   * @param {Number} [y] the y coordinate of the end point\n   **/\n  setEndPosition: function (x, y) {\n    let pos = new draw2d.geo.Point(x, y)\n    if (this.end.equals(pos)) {\n      return this\n    }\n\n    this.end.setPosition(pos)\n    this.vertices.last().setPosition(pos)\n    this.repaint()\n\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n    this.fireEvent(\"change:end\", {value: this.end})\n\n    return this\n  },\n  /** @deprecated **/\n  setEndPoint: function (x, y) {\n    return this.setEndPosition(x, y)\n  },\n\n  /**\n   *\n   * Return the x coordinate of the start.\n   * @returns {Number}\n   **/\n  getStartX: function () {\n    return this.start.x\n  },\n\n  /**\n   *\n   * Return the y coordinate of the start.\n   *\n   * @returns {Number}\n   **/\n  getStartY: function () {\n    return this.start.y\n  },\n\n  /**\n   *\n   * Return the start point.\n   *\n   * @returns {draw2d.geo.Point}\n   **/\n  getStartPosition: function () {\n    return this.start.clone()\n  },\n  /** @deprecated **/\n  getStartPoint: function () {\n    return this.getStartPosition()\n  },\n\n\n  /**\n   *\n   * Return the x coordinate of the end point\n   *\n   * @returns {Number}\n   **/\n  getEndX: function () {\n    return this.end.x\n  },\n\n  /**\n   *\n   * Return the y coordinate of the end point.\n   *\n   * @returns {Number}\n   **/\n  getEndY: function () {\n    return this.end.y\n  },\n\n  /**\n   *\n   * Return the end point.\n   *\n   * @returns {draw2d.geo.Point}\n   **/\n  getEndPosition: function () {\n    return this.end.clone()\n  },\n  /**\n   * @deprecated use `getEndPosition`\n   * @returns {draw2d.geo.Point}\n   **/\n  getEndPoint: function () {\n    return this.getEndPosition()\n  },\n\n  /**\n   *\n   * The x-offset related to the parent figure or canvas.\n   *\n   * @returns {Number} the x-offset to the parent figure\n   **/\n  getX: function () {\n    return this.getBoundingBox().x\n  },\n\n\n  /**\n   *\n   * The x-offset related to the parent figure or canvas.\n   *\n   * @returns {Number} the x-offset to the parent figure\n   **/\n  getY: function () {\n    return this.getBoundingBox().y\n  },\n\n\n  /**\n   *\n   * Return the Vertex with the given index.\n   *\n   * @param {Number} index the index of the vertex to return\n   */\n  getVertex: function (index) {\n    return this.vertices.get(index)\n  },\n\n\n  /**\n   *\n   * Update the vertex at the give position with the new coordinate\n   *\n   * @param {Number} index the index of the vertex to update\n   * @param {Number|draw2d.geo.Point} x the x coordinate or the draw2d.geo.Point object\n   * @param {Number} [y] the y coordinate or undefined of the second argument is a point\n   *\n   * @since 4.0.0\n   */\n  setVertex: function (index, x, y) {\n    if (x instanceof draw2d.geo.Point) {\n      y = x.y\n      x = x.x\n    }\n\n    let vertex = this.vertices.get(index)\n\n    // invalid point or nothing to do\n    //\n    if (vertex === null || (vertex.x === x && vertex.y === y)) {\n      return\n    }\n\n    vertex.x = parseFloat(x)\n    vertex.y = parseFloat(y)\n\n    // update start/end if the first or last vertex has been changed\n    //\n    this.start = this.vertices.first().clone()\n    this.end = this.vertices.last().clone()\n\n    this.svgPathString = null\n    this.routingRequired = true\n    this.repaint()\n\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return this\n  },\n\n  /**\n   *\n   * Returns the vertices of the connection\n   *\n   * @returns {draw2d.util.ArrayList} an draw2d.util.ArrayList of type draw2d.Point\n   **/\n  getVertices: function () {\n    return this.vertices\n  },\n\n  /**\n   *\n   * Update the vertices of the object. The given array is copied and assigned.\n   *\n   * @param {draw2d.util.ArrayList|Array} vertices the new vertices of the polyline.\n   *\n   * @since 4.0.1\n   */\n  setVertices: function (vertices) {\n    let _this = this\n    // convert json document/array to draw2d ArrayList\n    //\n    if (Array.isArray(vertices)) {\n      this.vertices = new draw2d.util.ArrayList()\n      vertices.forEach(element => {\n        this.vertices.add(new draw2d.geo.Point(element))\n      })\n    }\n    // use the given ArrayList\n    //\n    else if (vertices instanceof draw2d.util.ArrayList) {\n      this.vertices = vertices.clone(true)\n    }\n    else {\n      throw \"invalid argument for Line.setVertices\"\n    }\n\n    // can happen if the given vertices array is empty\n    //\n    if (this.vertices.getSize() > 1) {\n      this.start = this.vertices.first().clone()\n      this.end = this.vertices.last().clone()\n    }\n\n    // update the UI and the segment parts\n    this.svgPathString = null\n    this.repaint()\n\n    // align the SelectionHandles to the new situation\n    // This is a Hack....normally this should be done below and the Line shouldn't know\n    // something about this issue....this is complete a \"EditPolicy\" domain to handle this.\n    if (!this.selectionHandles.isEmpty()) {\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.SelectionFeedbackPolicy) {\n          e.onUnselect(_this.canvas, _this)\n          e.onSelect(_this.canvas, _this)\n        }\n      })\n    }\n\n    // notify the listener about the changes\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return this\n  },\n\n  /**\n   *\n   * Return the segments of the line with {start:s, end: e} JSON array list\n   *\n   * @returns {draw2d.util.ArrayList}\n   */\n  getSegments: function () {\n    let result = new draw2d.util.ArrayList()\n    result.add({start: this.getStartPosition(), end: this.getEndPosition()})\n\n    return result\n  },\n\n  /**\n   *\n   * Returns the length of the line.\n   *\n   * @returns {Number}\n   **/\n  getLength: function () {\n    return Math.sqrt((this.start.x - this.end.x) * (this.start.x - this.end.x) + (this.start.y - this.end.y) * (this.start.y - this.end.y))\n  },\n\n  /**\n   *\n   * Returns the angle of the line in degree.\n   *\n   * <pre>\n   *                                270°\n   *                              |\n   *                              |\n   *                              |\n   *                              |\n   * 180° -------------------------+------------------------> +X\n   *                              |                        0°\n   *                              |\n   *                              |\n   *                              |\n   *                              V +Y\n   *                             90°\n   * </pre>\n   * @returns {Number}\n   **/\n  getAngle: function () {\n    let length = this.getLength()\n    let angle = -(180 / Math.PI) * Math.asin((this.start.y - this.end.y) / length)\n\n    if (angle < 0) {\n      if (this.end.x < this.start.x) {\n        angle = Math.abs(angle) + 180\n      }\n      else {\n        angle = 360 - Math.abs(angle)\n      }\n    }\n    else {\n      if (this.end.x < this.start.x) {\n        angle = 180 - angle\n      }\n    }\n    return angle\n  },\n\n  /**\n   *\n   * Returns the Command to perform the specified Request or null if the shape want cancel the\n   * operation or it can't operate the command.\n   *\n   * @param {draw2d.command.CommandType} request describes the Command being requested\n   * @returns {draw2d.command.Command} null or a Command\n   * @private\n   **/\n  createCommand: function (request) {\n    if (request.getPolicy() === draw2d.command.CommandType.MOVE) {\n      if (this.isDraggable()) {\n        return new draw2d.command.CommandMoveVertices(this)\n      }\n    }\n\n    if (request.getPolicy() === draw2d.command.CommandType.DELETE) {\n      if (this.isDeleteable()) {\n        return new draw2d.command.CommandDelete(this)\n      }\n    }\n\n    if (request.getPolicy() === draw2d.command.CommandType.MOVE_BASEPOINT) {\n      if (this.isDraggable()) {\n        return new draw2d.command.CommandMoveVertex(this)\n      }\n    }\n\n    return null\n  },\n\n  installEditPolicy: function (policy) {\n    if (!(policy instanceof draw2d.policy.line.LineSelectionFeedbackPolicy) && policy instanceof draw2d.policy.figure.SelectionFeedbackPolicy) {\n      return// silently\n    }\n\n    this._super(policy)\n\n  },\n\n  /**\n   *\n   * Checks if the hands over coordinate close to the line. The 'corona' is considered\n   * for this test. This means the point isn't direct on the line. Is it only close to the\n   * line!\n   *\n   * @param {Number} px the x coordinate of the test point\n   * @param {Number} py the y coordinate of the test point\n   * @returns {Boolean}\n   **/\n  hitTest: function (px, py) {\n    return draw2d.shape.basic.Line.hit(this.corona + this.stroke, this.start.x, this.start.y, this.end.x, this.end.y, px, py)\n  },\n\n  /**\n   *\n   * Returns the projection of the point on the line.\n   *\n   * @param {Number} px the x coordinate of the test point\n   * @param {Number} py the y coordinate of the test point\n   * @returns {draw2d.geo.Point}\n   **/\n  pointProjection: function (px, py) {\n    let pt = new draw2d.geo.Point(px, py)\n    let p1 = this.getStartPosition()\n    let p2 = this.getEndPosition()\n    return draw2d.geo.Line.pointProjection(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y)\n  },\n\n\n  /**\n   *\n   * Returns the point onto the line which has the 'percentage' position onto the line.\n   *\n   * @param {Number} percentage value between [0..1]\n   * @returns {*}\n   */\n  lerp: function (percentage) {\n    let p1 = this.getStartPosition()\n    let p2 = this.getEndPosition()\n    percentage = Math.min(1, Math.max(0, percentage))\n    return new draw2d.geo.Point(p1.x + (p2.x - p1.x) * percentage, p1.y + (p2.y - p1.y) * percentage)\n  },\n\n\n  /**\n   *\n   * Return all intersection points between the given Line.\n   *\n   * @param {draw2d.shape.basic.Line} other\n   * @returns {draw2d.util.ArrayList}\n   */\n  intersection: function (other) {\n    let result = new draw2d.util.ArrayList()\n\n    // empty result. the lines are equal...infinit array\n    if (other === this) {\n      return result\n    }\n\n    let segments1 = this.getSegments()\n    let segments2 = other.getSegments()\n\n    segments1.each(function (i, s1) {\n      segments2.each(function (j, s2) {\n        let p = draw2d.shape.basic.Line.intersection(s1.start, s1.end, s2.start, s2.end)\n        if (p !== null) {\n          result.add(p)\n        }\n      })\n    })\n    return result\n  },\n\n\n  /**\n   *\n   * Return an objects with all important attributes for XML or JSON serialization\n   *\n   * @returns {Object}\n   */\n  getPersistentAttributes: function () {\n    let memento = this._super()\n    delete memento.x\n    delete memento.y\n    delete memento.width\n    delete memento.height\n\n    memento.stroke = this.stroke\n    memento.color = this.getColor().rgba()\n    memento.outlineStroke = this.outlineStroke\n    memento.outlineColor = this.outlineColor.rgba()\n    if (this.dasharray !== null) {\n      memento.dasharray = this.dasharray\n    }\n\n    if (this.editPolicy.getSize() > 0) {\n      memento.policy = this.editPolicy.first().NAME\n    }\n\n    // the attribute \"vertex\" will be overridden by a router if the element is a\n    // \"PolyLine\" instance and has the correct router. Connections mainly ignore this\n    // attribute because the start/end is defined by the ports and the vertices in between are\n    // calculated by a router.\n    memento.vertex = []\n    this.getVertices().each(function (i, e) {\n      memento.vertex.push({x: e.x, y: e.y})\n    })\n\n    return memento\n  },\n\n  /**\n   *\n   * Read all attributes from the serialized properties and transfer them into the shape.\n   *\n   * @param {Object} memento\n   * @returns {this}\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.dasharray === \"string\") {\n      this.dasharray = memento.dasharray\n    }\n    if (typeof memento.stroke !== \"undefined\") {\n      this.setStroke(parseFloat(memento.stroke))\n    }\n    if (typeof memento.color !== \"undefined\") {\n      this.setColor(memento.color)\n    }\n    if (typeof memento.outlineStroke !== \"undefined\") {\n      this.setOutlineStroke(memento.outlineStroke)\n    }\n    if (typeof memento.outlineColor !== \"undefined\") {\n      this.setOutlineColor(memento.outlineColor)\n    }\n    if (typeof memento.policy !== \"undefined\") {\n      try {\n        this.installEditPolicy(eval(\"new \" + memento.policy + \"()\"))\n      }\n      catch (exc) {\n        debug.warn(\"Unable to install edit policy '\" + memento.policy + \"' forced by \" + this.NAME + \".setPersistentAttributes. Using default.\")\n      }\n    }\n\n    // restore the vertex of the connection/line if any are given\n    //\n    // it makes no sense to restore vertices with only zero or one vertex. This\n    // isn't a \"line\" at all.\n    if (Array.isArray(memento.vertex) && memento.vertex.length > 1) {\n      this.setVertices(memento.vertex)\n    }\n\n    return this\n  }\n})\n\n\n/**\n * see: http://en.wikipedia.org/wiki/Line-line_intersection\n *\n * @param {draw2d.geo.Point} a1\n * @param {draw2d.geo.Point} a2\n * @param {draw2d.geo.Point} b1\n * @param {draw2d.geo.Point} b2\n *\n * @static\n * @private\n * @returns {draw2d.geo.Point}\n */\ndraw2d.shape.basic.Line.intersection = function (a1, a2, b1, b2) {\n  let result = null\n\n  let ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x)\n  let ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x)\n  let u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y)\n\n  if (u_b !== 0) {\n    let ua = ua_t / u_b\n    let ub = ub_t / u_b\n\n    if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n      result = new draw2d.geo.Point((a1.x + ua * (a2.x - a1.x)) | 0, (a1.y + ua * (a2.y - a1.y)) | 0)\n\n      // determine if the lines are crossing or just touching\n      //\n      result.justTouching = (0 === ua || ua === 1 || 0 === ub || ub === 1)\n    }\n  }\n\n  return result\n}\n\n\n/**\n * Static util function to determine is a point(px,py) on the line(x1,y1,x2,y2)\n * A simple hit test.\n *\n * @returns {Boolean}\n * @static\n * @private\n * @param {Number} coronaWidth the accepted corona for the hit test\n * @param {Number} X1 x coordinate of the start point of the line\n * @param {Number} Y1 y coordinate of the start point of the line\n * @param {Number} X2 x coordinate of the end point of the line\n * @param {Number} Y2 y coordinate of the end point of the line\n * @param {Number} px x coordinate of the point to test\n * @param {Number} py y coordinate of the point to test\n **/\ndraw2d.shape.basic.Line.hit = function (coronaWidth, X1, Y1, X2, Y2, px, py) {\n  return draw2d.geo.Line.distance(X1, Y1, X2, Y2, px, py) < coronaWidth\n}\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Selection handle for connections and normal lines.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.LineResizeHandle\n */\ndraw2d.shape.basic.LineEndResizeHandle = draw2d.shape.basic.LineResizeHandle.extend(\n  /** @lends draw2d.shape.basic.LineEndResizeHandle.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.LineEndResizeHandle\",\n\n  /**\n   *\n   */\n  init: function (figure) {\n    this._super({owner: figure, index: figure.getVertices().getSize() - 1})\n  },\n\n\n  /**\n   *\n   * Return the Port assigned to this ResizeHandle if the line is an instance of draw2d.Connection\n   *\n   * @returns {draw2d.Port}\n   */\n  getRelatedPort: function () {\n    if (this.owner instanceof draw2d.Connection) {\n      return this.owner.getTarget()\n    }\n\n    return null\n  },\n\n  /**\n   *\n   * Return the peer Port assigned to this ResizeHandle if the line is an instance of draw2d.Connection\n   *\n   * @returns {draw2d.Port}\n   */\n  getOppositePort: function () {\n    if (this.owner instanceof draw2d.Connection) {\n      return this.owner.getSource()\n    }\n\n    return null\n  },\n\n\n  /**\n   *\n   * Called from the framework during a drag&drop operation\n   *\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @returns {Boolean}\n   * @private\n   **/\n  onDrag: function (dx, dy, dx2, dy2) {\n    this._super(dx, dy, dx2, dy2)\n\n    let objPos = this.owner.getEndPoint().clone()\n    objPos.translate(dx2, dy2)\n\n    if (this.command !== null) {\n      this.command.updatePosition(objPos)\n    }\n\n    this.owner.setEndPoint(objPos)\n\n    this.owner.isMoving = true\n\n    return true\n  },\n\n  /**\n   *\n   * Resizehandle has been drop on a InputPort/OutputPort.\n   *\n   * @param {draw2d.Figure} dropTarget\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @private\n   **/\n  onDrop: function (dropTarget, x, y, shiftKey, ctrlKey) {\n    this.owner.isMoving = false\n\n    if (this.owner instanceof draw2d.Connection && this.command !== null) {\n      this.command.setNewPorts(this.owner.getSource(), dropTarget)\n      this.getCanvas().getCommandStack().execute(this.command)\n    }\n    this.command = null\n  },\n\n  /**\n   *\n   * Controls the location of the resize handle\n   *\n   **/\n  relocate: function () {\n\n    let resizeWidthHalf = this.getWidth() / 2\n    let resizeHeightHalf = this.getHeight() / 2\n\n    let anchor = this.owner.getEndPoint()\n\n    this.setPosition(anchor.x - resizeWidthHalf, anchor.y - resizeHeightHalf)\n\n    return this\n  }\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * Base class for selection handle for connections and normal lines.\n *\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Circle\n */\ndraw2d.shape.basic.LineResizeHandle = draw2d.shape.basic.Circle.extend(\n  /** @lends draw2d.shape.basic.LineResizeHandle.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.LineResizeHandle\",\n\n  /**\n   *\n   */\n  init: function (attr, setter, getter) {\n\n    this.zoomCallback = () => {\n      this.attr({\n        width: this.origWidth * this.getCanvas().getZoom(),\n        height: this.origHeight * this.getCanvas().getZoom(),\n        stroke: this.origStroke * this.getCanvas().getZoom()\n      })\n      // size of the ResizeHandle has changed. Force a reposition of handle\n      //\n      if (!this.blockEvent)\n        this.owner.fireEvent(\"move\", {})\n    }\n\n    this._super(\n      extend({\n        bgColor: \"#5bcaff\",\n        stroke: 1,\n        width: 10,\n        height: 10,\n        minWidth: 0.3,\n        minHeight: 0.3,\n        selectable: false\n      }, attr),\n      extend({\n        owner: this.setOwner,\n        index: this.setIndex\n      }, setter),\n      extend({\n        owner: this.getOwner,\n        index: this.getIndex\n      }, getter))\n\n    // required in the SelectionEditPolicy to indicate the type of figure\n    // which the user clicks\n    this.isResizeHandle = true\n    this.currentTarget = null\n\n    this.origWidth = this.width\n    this.origHeight = this.height\n    this.origStroke = this.stroke\n  },\n\n  /**\n   * \n   * Returns the current used SVG as string\n   *\n   * @returns {String}\n   */\n  getOwner: function () {\n    return this.owner\n  },\n\n  setOwner: function (owner) {\n    this.owner = owner\n    return this\n  },\n\n\n  /**\n   * \n   * Returns the index of the selection. In case of a PlyLine the count is dynamic.\n   *\n   * @returns {Number}\n   */\n  getIndex: function () {\n    return this.index\n  },\n\n  setIndex: function (index) {\n    this.index = index\n    return this\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  createShapeElement: function () {\n    let shape = this._super()\n\n    shape.attr({\"cursor\": \"move\"})\n    return shape\n  },\n\n  /**\n   * @inheritdoc\n   **/\n  setBackgroundColor: function (color) {\n    color = new draw2d.util.Color(color)\n\n    this.bgGradient = \"r(.4,.3)\" + color.hash() + \"-\" + color.darker(0.1).hash() + \":60-\" + color.darker(0.2).hash()\n    this._super(color)\n    this.setColor(color.darker(0.3))\n\n    return this\n  },\n\n\n  /**\n   * \n   * Return the port below the ResizeHandle.\n   *\n   * @template\n   * @returns {draw2d.Port}\n   */\n  getRelatedPort: function () {\n    return null\n  },\n\n\n  /**\n   * \n   * Return the port of the other side of the related connection.\n   *\n   * @template\n   * @returns {draw2d.Port}\n   */\n  getOppositePort: function () {\n    return null\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = attributes || {}\n\n\n    if (this.bgColor.hash() === \"none\") {\n      attributes.fill = this.bgColor.rgba()\n    }\n    else if (this.getAlpha() < 0.9) {\n      attributes.fill = this.bgColor.rgba()\n    }\n    else {\n      attributes.fill = this.bgGradient\n    }\n\n\n    this._super(attributes)\n  },\n\n  /**\n   * Called if the drag and drop action begins. You can return [false] if you\n   * want avoid the that the figure can be move.\n   *\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @type {Boolean}\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey) {\n    this.command = this.owner.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.MOVE_BASEPOINT))\n    // no drag&drop allowed if we didn'T have a valid command.\n    // This is one way to send a veto for Connection reconnect\n    if (this.command !== null) {\n      this.command.setIndex(this.index)\n    }\n\n    this.setAlpha(0.2)\n    this.shape.attr({\"cursor\": \"crosshair\"})\n\n    // fire an event\n    // @since 5.3.3\n    this.fireEvent(\"dragstart\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n\n    return true\n  },\n\n\n  /**\n   * \n   * Called from the framework during a drag&drop operation\n   *\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @returns {Boolean}\n   * @private\n   **/\n  onDrag: function (dx, dy, dx2, dy2) {\n    this.setPosition(this.x + dx2, this.y + dy2)\n\n    let port = this.getOppositePort()\n\n    let target = port !== null ? port.getCanvas().getBestFigure(this.getX(), this.getY(), [this, this.owner]) : null\n\n    // the hovering element has been changed\n    if (target !== this.currentTarget) {\n\n      if (this.currentTarget !== null) {\n        this.currentTarget.onDragLeave(port)\n        this.currentTarget.setGlow(false)\n        this.currentTarget.fireEvent(\"dragLeave\", {draggingElement: port})\n      }\n\n      if (target !== null) {\n        this.currentTarget = target.delegateTarget(port)\n        if (this.currentTarget !== null) {\n          this.currentTarget.setGlow(true)\n          this.currentTarget.onDragEnter(port) // legacy\n          this.currentTarget.fireEvent(\"dragEnter\", {draggingElement: port})\n        }\n      }\n    }\n\n    return true\n  },\n\n  /**\n   *  Called after a drag and drop action.<br>\n   *        Sub classes can override this method to implement additional stuff. Don't forget to call the super implementation via <code>this._super();</code>\n   *\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean}\n   */\n  onDragEnd: function (x, y, shiftKey, ctrlKey) {\n    if (!this.isDraggable()) {\n      return false\n    }\n\n    this.shape.attr({\"cursor\": \"move\"})\n\n    let port = this.getOppositePort()\n    if (port !== null) {\n      if (this.currentTarget !== null) {\n\n        this.onDrop(this.currentTarget, x, y, shiftKey, ctrlKey)\n        this.currentTarget.onDragLeave(port)\n        this.currentTarget.setGlow(false)\n        this.currentTarget.fireEvent(\"dragLeave\", {draggingElement: port})\n        this.currentTarget.onCatch(this, x, y, shiftKey, ctrlKey)\n        this.currentTarget = null\n      }\n    }\n\n    this.owner.isMoving = false\n    // A Connection is stuck to the corresponding ports. So we must reset the position\n    // to the origin port if we doesn't drop the ResizeHandle on a other port.\n    //\n    if (this.owner instanceof draw2d.Connection) {\n      if (this.command !== null) {\n        this.command.cancel()\n      }\n    }\n    //\n    else {\n      // An non draggable resizeHandle doesn't create a move/resize command.\n      // This happens if the selected figure has set \"isResizeable=false\".\n      //\n      if (this.command !== null) {\n        this.getCanvas().getCommandStack().execute(this.command)\n      }\n    }\n    this.command = null\n\n    this.setAlpha(1)\n\n    // fire an event\n    // @since 5.3.3\n    this.fireEvent(\"dragend\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n  },\n\n\n  /**\n   * \n   * Controls the position of the ResizeHandle\n   * Called by the framework.\n   *\n   **/\n  relocate: function () {\n\n    return this\n  },\n\n\n  /**\n   * \n   * The LineResizeHandle didn't support the SnapToHelper feature if the\n   * corresponding object is an Connection. A Connection is always bounded to\n   * Port. In this case it makes no sense to use a Grid or Geometry for snapping.\n   *\n   * @returns {Boolean} return false if the corresponding object didn't support snapTo\n   **/\n  supportsSnapToHelper: function () {\n    if (this.owner instanceof draw2d.Connection) {\n      return false\n    }\n\n    return true\n  },\n\n  /**\n   * \n   * Show the ResizeHandle and add it to the canvas.<br>\n   * Additional bring it in to the front of other figures.\n   *\n   * @param {draw2d.Canvas} canvas the canvas to use\n   * @param {Number} x the x-position\n   * @param {Number} y the y-position\n   **/\n  show: function (canvas, x, y) {\n    if (x)\n      debugger\n    // don't call the parent function. The parent functions make this object selectable/deleteable\n    // and a resize handle can't be deleted.\n    this.setCanvas(canvas)\n    try {\n      this.blockEvent = true\n      this.zoomCallback()\n    }\n    finally {\n      this.blockEvent = false\n    }\n\n    //     this.setPosition(x,y);\n    this.shape.toFront()\n    this.canvas.resizeHandles.add(this)\n  },\n\n  /**\n   * \n   * Hide the resize handle and remove it from the canvas.\n   *\n   **/\n  hide: function () {\n    // don't call the parent function. The parent functions delete this object\n    // and a resize handle shouldn't be deleted.\n    if (this.shape === null) {\n      return\n    }\n\n    this.canvas.resizeHandles.remove(this)\n    this.setCanvas(null)\n  },\n\n\n  setCanvas: function (canvas) {\n\n    if (this.canvas !== null) {\n      this.canvas.off(this.zoomCallback)\n    }\n\n    this._super(canvas)\n\n    if (this.canvas !== null) {\n      this.canvas.on(\"zoom\", this.zoomCallback)\n    }\n  },\n\n  /**\n   * \n   * Override this method and redirect them to the canvas. A ResizeHandle didn't support\n   * Keyboard interaction at the moment.\n   *\n   * @param {Number} keyCode the id of the pressed key\n   * @param {Boolean} ctrl true if the user has pressed the CTRL/STRG key as well.\n   **/\n  onKeyDown: function (keyCode, ctrl) {\n    // don't call the parent function. The parent functions delete this object\n    // and a resize handle can't be deleted.\n    this.canvas.onKeyDown(keyCode, ctrl)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Selection handle for connections and normal lines.\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.LineResizeHandle\n */\ndraw2d.shape.basic.LineStartResizeHandle = draw2d.shape.basic.LineResizeHandle.extend(\n  /** @lends draw2d.shape.basic.LineStartResizeHandle.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.LineStartResizeHandle\",\n\n  /**\n   *\n   */\n  init: function (figure) {\n    this._super({owner: figure, index: 0})\n  },\n\n  /**\n   * Returns the Port below the ResizeHandle\n   *\n   * @returns {draw2d.Port}\n   */\n  getRelatedPort: function () {\n    if (this.owner instanceof draw2d.Connection)\n      return this.owner.getSource()\n\n    return null\n  },\n\n  /**\n   * Returns the Port on the opposite side of the ResizeHandle\n   *\n   * @returns {draw2d.Port}\n   */\n  getOppositePort: function () {\n    if (this.owner instanceof draw2d.Connection)\n      return this.owner.getTarget()\n\n    return null\n  },\n\n  /**\n   * \n   * Called from the framework during a drag&drop operation\n   *\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   * @returns {Boolean}\n   **/\n  onDrag: function (dx, dy, dx2, dy2) {\n    this._super(dx, dy, dx2, dy2)\n\n    let objPos = this.owner.getStartPoint()\n    objPos.translate(dx2, dy2)\n\n    if (this.command !== null) {\n      this.command.updatePosition(objPos)\n\n    }\n    this.owner.setStartPoint(objPos)\n\n    this.owner.isMoving = true\n\n    return true\n  },\n\n  /**\n   * \n   * Resize handle has been drop on a InputPort/OutputPort.\n   *\n   * @param {draw2d.Port} dropTarget\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   **/\n  onDrop: function (dropTarget, x, y, shiftKey, ctrlKey) {\n    this.owner.isMoving = false\n\n    // The ResizeHandle of a Connection has been dropped on a Port\n    // This will enforce a ReconnectCommand\n    if (this.owner instanceof draw2d.Connection && this.command !== null) {\n      this.command.setNewPorts(dropTarget, this.owner.getTarget())\n      this.getCanvas().getCommandStack().execute(this.command)\n    }\n    this.command = null\n  },\n\n  /**\n   * \n   * Controls the location of the resize handle\n   **/\n  relocate: function () {\n    let resizeWidthHalf = this.getWidth() / 2\n    let resizeHeightHalf = this.getHeight() / 2\n\n    let anchor = this.owner.getStartPoint()\n\n    this.setPosition(anchor.x - resizeWidthHalf, anchor.y - resizeHeightHalf)\n\n    return this\n  }\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * Oval figure.\n *\n * @example\n *\n *    let oval =  new draw2d.shape.basic.Oval({width:150, height:100, x:50, y:10});\n *\n *    canvas.add(oval);\n *\n * @author Andreas Herz\n * @extends draw2d.VectorFigure\n */\ndraw2d.shape.basic.Oval = draw2d.VectorFigure.extend(\n  /** @lends draw2d.shape.basic.Oval.prototype */\n  {\n\n    NAME: \"draw2d.shape.basic.Oval\",\n\n    /**\n     *\n     * Creates a new figure element which are not assigned to any canvas.\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function (attr, setter, getter) {\n      this._super(\n        extend({\n          bgColor: \"#C02B1D\",\n          color: \"#1B1B1B\"\n        }, attr),\n        extend({\n          center: this.setCenter\n        }, setter),\n        getter)\n    },\n\n\n    /**\n     * @template\n     **/\n    createShapeElement: function () {\n      let halfW = this.getWidth() / 2\n      let halfH = this.getHeight() / 2\n\n      return this.canvas.paper.ellipse(this.getAbsoluteX() + halfW, this.getAbsoluteY() + halfH, halfW, halfH)\n    },\n\n\n    /**\n     *\n     * Get the center of the figure\n     *\n     */\n    getCenter: function () {\n      let w2 = this.getWidth() / 2\n      let h2 = this.getHeight() / 2\n\n      return this.getPosition().translate(w2, h2)\n    },\n\n    /**\n     *\n     * Set the center of the figure.\n     *\n     * @param {Number|draw2d.geo.Point} x the new x coordinate of the center or a draw2d.geo.Point object with the center\n     * @param {Number} [y] the y coordinate of the new center of the first argument isn't a draw2d.geo.Point object\n     */\n    setCenter: function (x, y) {\n      let pos = new draw2d.geo.Point(x, y)\n      let w2 = this.getWidth() / 2\n      let h2 = this.getHeight() / 2\n\n      pos.translate(-w2, -h2)\n      this.setPosition(pos)\n\n      this.fireEvent(\"change:center\", {value: {x: x, y: y}})\n\n      return this\n    },\n\n\n    /**\n     * @inheritdoc\n     *\n     * @template\n     **/\n    repaint: function (attributes) {\n      if (this.repaintBlocked === true || this.shape === null) {\n        return\n      }\n\n      attributes = attributes || {}\n\n\n      // don't override cx/cy if inherited class has set the center already.\n      if (typeof attributes.rx === \"undefined\") {\n        attributes.rx = this.width / 2\n        attributes.ry = this.height / 2\n      }\n\n      // don't override cx/cy if inherited class has set the center already.\n      if (typeof attributes.cx === \"undefined\") {\n        attributes.cx = this.getAbsoluteX() + attributes.rx\n        attributes.cy = this.getAbsoluteY() + attributes.ry\n      }\n\n      this._super(attributes)\n    },\n\n    /**\n     *\n     *\n     *   NOTE: Rotation will need to be added to this function\n     *\n     **/\n    intersectionWithLine: function (a1, a2) {\n      let rx = this.getWidth() / 2\n      let ry = this.getHeight() / 2\n\n      let result = new draw2d.util.ArrayList()\n\n      let origin = new draw2d.geo.Point(a1.x, a1.y)\n      let dir = a2.subtract(a1)\n      let center = new draw2d.geo.Point(this.getAbsoluteX() + rx, this.getAbsoluteY() + ry)\n      let diff = origin.subtract(center)\n      let mDir = new draw2d.geo.Point(dir.x / (rx * rx), dir.y / (ry * ry))\n      let mDiff = new draw2d.geo.Point(diff.x / (rx * rx), diff.y / (ry * ry))\n\n      let a = dir.dot(mDir)\n      let b = dir.dot(mDiff)\n      let c = diff.dot(mDiff) - 1.0\n      let d = b * b - a * c\n\n      if (d < 0) {\n        // \"Outside\"\n      } else if (d > 0) {\n        let root = Math.sqrt(d)\n        let t_a = (-b - root) / a\n        let t_b = (-b + root) / a\n\n        if ((t_a < 0 || 1 < t_a) && (t_b < 0 || 1 < t_b)) {\n          if ((t_a < 0 && t_b < 0) || (t_a > 1 && t_b > 1)) {\n            //\"Outside\";\n          } else {\n            //\"Inside\";\n          }\n        } else {\n          if (0 <= t_a && t_a <= 1)\n            result.add(a1.lerp(a2, t_a))\n          if (0 <= t_b && t_b <= 1)\n            result.add(a1.lerp(a2, t_b))\n        }\n      } else {\n        let t = -b / a\n        if (0 <= t && t <= 1) {\n          result.add(a1.lerp(a2, t))\n        } else {\n          //\"Outside\";\n        }\n      }\n\n      return result\n    }\n\n  })\n\n","import draw2d from '../../packages'\nimport jsonUtil from '../../util/JSONUtil'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n *\n * A PolyLine is a line with more than 2 points.\n *\n *\n * @example\n *\n *    let line = new draw2d.shape.basic.PolyLine();\n *    line.setVertices([{x:10,y:10},{x:80,y:70},{x:100,y:110}]);\n *    canvas.add(line);\n *\n *\n *    canvas.setCurrentSelection(line);\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Line\n */\ndraw2d.shape.basic.PolyLine = draw2d.shape.basic.Line.extend(\n  /** @lends draw2d.shape.basic.PolyLine.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.PolyLine\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    // internal status handling for performance reasons\n    //\n    this.svgPathString = null\n    this.oldPoint = null\n\n    this.router = null\n    this.routingRequired = true\n    this.lineSegments = new draw2d.util.ArrayList()\n\n    this.radius = \"\"\n\n    this._super(\n      extend(\n        {\n          router: new draw2d.layout.connection.VertexRouter()\n        }, attr),\n      extend({}, {\n        // @attr {draw2d.layout.connection.ConnectionRouter} the router to use to layout the polyline */\n        router: this.setRouter,\n        // @attr {Number} radius the radius to render the line edges */\n        radius: this.setRadius\n      }, setter),\n      extend({}, {\n        router: this.getRouter,\n        radius: this.getRadius\n      }, getter)\n    )\n  },\n\n  /**\n   * \n   * Sets the corner radius of the edges.\n   *\n   * @param {Number} radius the corner radius\n   * @since 4.2.1\n   */\n  setRadius: function (radius) {\n    this.radius = radius\n    this.svgPathString = null\n    this.repaint()\n    this.fireEvent(\"change:radius\", {value: this.radius})\n\n    return this\n  },\n\n\n  setOutlineStroke: function (w) {\n    if (this.outlineStroke !== w) {\n      this.svgPathString = null\n      this.routingRequired = true\n    }\n    this._super(w)\n\n    return this\n  },\n\n  /**\n   * \n   * Get the corner radius of the edges.\n   *\n   * @returns {Number}\n   * @since 4.2.1\n   */\n  getRadius: function () {\n    return this.radius\n  },\n\n\n  /**\n   * \n   * Set the start point of the line.\n   *\n   * @param {Number} x the x coordinate of the start point\n   * @param {Number} y the y coordinate of the start point\n   **/\n  setStartPoint: function (x, y) {\n    if (this.vertices.getSize() > 0) {\n      this.vertices.first().setPosition(x, y)\n    }\n    else {\n      this.vertices.add(new draw2d.geo.Point(x, y))\n    }\n    this.start = this.vertices.first().clone()\n    //     if(this.isInDragDrop===false)\n    this.calculatePath({startMoved: true, endMoved: false})\n\n    this.repaint()\n\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n    this.fireEvent(\"change:start\", {value: this.start})\n\n    return this\n  },\n\n  /**\n   * \n   * Set the end point of the line.\n   *\n   * @param {Number} x the x coordinate of the end point\n   * @param {Number} y the y coordinate of the end point\n   */\n  setEndPoint: function (x, y) {\n    if (this.vertices.getSize() > 1) {\n      this.vertices.last().setPosition(x, y)\n    }\n    else {\n      this.vertices.add(new draw2d.geo.Point(x, y))\n    }\n    this.end = this.vertices.last().clone()\n\n    if (this.isInDragDrop === false)\n      this.calculatePath({startMoved: false, endMoved: true})\n\n    this.repaint()\n\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n    this.fireEvent(\"change:end\", {value: this.end})\n\n    return this\n  },\n\n  /**\n   * \n   * Inserts the draw2d.geo.Point object into the vertex list of the polyline just after the object with the given index.\n   *\n   * @param {Number|draw2d.geo.Point} x the x coordinate or the draw2d.geo.Point object\n   * @param {Number} [y] the y coordinate or undefined of the second argument is a point\n   *\n   * @since 4.0.0\n   */\n  addVertex: function (x, y) {\n    this.vertices.add(new draw2d.geo.Point(x, y))\n\n    this.start = this.vertices.first().clone()\n    this.end = this.vertices.last().clone()\n\n    this.svgPathString = null\n    this.repaint()\n\n    if (!this.selectionHandles.isEmpty()) {\n      let _this = this\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.SelectionFeedbackPolicy) {\n          e.onUnselect(_this.canvas, _this)\n          e.onSelect(_this.canvas, _this)\n        }\n      })\n    }\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return this\n  },\n\n\n  /**\n   * \n   * Inserts the draw2d.geo.Point object into the vertex list of the polyline just after the object with the given index.\n   *\n   * @param {Number} index the insert index\n   * @param {Number|draw2d.geo.Point} x the x coordinate or the draw2d.geo.Point object\n   * @param {Number} [y] the y coordinate or undefined of the second argument is a point\n   *\n   * @since 4.0.0\n   */\n  insertVertexAt: function (index, x, y) {\n    let vertex = new draw2d.geo.Point(x, y)\n\n    this.vertices.insertElementAt(vertex, index)\n\n    this.start = this.vertices.first().clone()\n    this.end = this.vertices.last().clone()\n\n    this.svgPathString = null\n    this.repaint()\n\n    if (!this.selectionHandles.isEmpty()) {\n      let _this = this\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.SelectionFeedbackPolicy) {\n          e.onUnselect(_this.canvas, _this)\n          e.onSelect(_this.canvas, _this)\n        }\n      })\n    }\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return this\n  },\n\n\n  /**\n   * \n   * Remove a vertex from the polyline and return the removed point. The current installed connection router\n   * can send an veto for this operation.\n   *\n   * @param index\n   * @returns {draw2d.geo.Point} the removed point or null of the current router decline this operation\n   * @since 4.0.0\n   */\n  removeVertexAt: function (index) {\n    let removedPoint = this.vertices.removeElementAt(index)\n\n    this.start = this.vertices.first().clone()\n    this.end = this.vertices.last().clone()\n\n    this.svgPathString = null\n    this.repaint()\n\n    if (!this.selectionHandles.isEmpty()) {\n      let _this = this\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.SelectionFeedbackPolicy) {\n          e.onUnselect(_this.canvas, _this)\n          e.onSelect(_this.canvas, _this)\n        }\n      })\n    }\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return removedPoint\n  },\n\n\n  /**\n   * \n   * Set the router for this connection.\n   *\n   * @param {draw2d.layout.connection.ConnectionRouter} [router] the new router for this connection or null if the connection should use the default routing\n   **/\n  setRouter: function (router) {\n    if (this.router !== null) {\n      this.router.onUninstall(this)\n    }\n\n    if (typeof router === \"undefined\" || router === null) {\n      this.router = new draw2d.layout.connection.DirectRouter()\n    }\n    else {\n      this.router = router\n    }\n\n    this.router.onInstall(this)\n\n    this.routingRequired = true\n\n    // repaint the connection with the new router\n    this.repaint()\n\n    this.fireEvent(\"change:router\", {value: this.router})\n\n    return this\n  },\n\n  /**\n   * \n   * Return the current active router of this connection.\n   *\n   * @returns draw2d.layout.connection.ConnectionRouter\n   **/\n  getRouter: function () {\n    return this.router\n  },\n\n  /**\n   * \n   * Calculate the path of the polyline\n   *\n   * @param {Object} [routingHints] some helper attributes for the router\n   * @param {Boolean} routingHints.startMoved is true if just the start location has moved\n   * @param {Boolean} routingHints.endMoved is true if the destination location has changed\n   * @param {Boolean} routingHints.oldVertices store old vertices for after processing\n   *\n   * @private\n   */\n  calculatePath: function (routingHints) {\n    routingHints = routingHints || {}\n\n    if (this.shape === null) {\n      return\n    }\n\n    this.svgPathString = null\n\n    routingHints.oldVertices = this.vertices\n\n    // cleanup the routing cache\n    //\n    this.oldPoint = null\n    this.lineSegments = new draw2d.util.ArrayList()\n    this.vertices = new draw2d.util.ArrayList()\n\n    // Use the internal router\n    //\n    this.router.route(this, routingHints)\n    this.routingRequired = false\n    this.fireEvent(\"routed\")\n    this.fireEvent(\"change:route\", {})\n  },\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return this\n    }\n\n    if (this.svgPathString === null || this.routingRequired === true) {\n      this.calculatePath()\n    }\n\n    if (typeof attributes === \"undefined\") {\n      attributes = {}\n    }\n    attributes.path = this.svgPathString\n    jsonUtil.ensureDefault(attributes, \"stroke-linecap\", \"round\")\n    jsonUtil.ensureDefault(attributes, \"stroke-linejoin\", \"round\")\n\n    return this._super(attributes)\n  },\n\n\n  /**\n   * \n   * Return all line segments of the polyline.\n   *\n   * @returns {draw2d.util.ArrayList}\n   */\n  getSegments: function () {\n    return this.lineSegments\n  },\n\n\n    /**\n     * used for the router to add the calculated points\n     *\n     * @param p\n     * @param y\n     */\n  addPoint: function ( p, y) {\n    if (typeof y !== \"undefined\") {\n      p = new draw2d.geo.Point(p, y)\n    }\n    this.vertices.add(p)\n\n    if (this.oldPoint !== null) {\n      // store the painted line segment for the \"mouse selection test\"\n      // (required for user interaction)\n      this.lineSegments.add({\n        start: this.oldPoint,\n        end: p\n      })\n    }\n    this.svgPathString = null\n    this.oldPoint = p\n  },\n\n  /**\n   * \n   * Called if the drag and drop action begins. You can return [false] if you\n   * want avoid that the figure can be move.\n   *\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean} true if the figure accepts dragging\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey, isFaked) {\n    let result = this._super(x, y, shiftKey, ctrlKey, isFaked)\n\n    if (result === true && isFaked !== true) {\n      this.draggedSegment = this.hitSegment(x, y)\n    }\n    return result\n  },\n\n  /**\n   * \n   * Returns the length of the polyline.\n   *\n   * @returns {Number}\n   * @since 6.1.43\n   **/\n  getLength: function () {\n    let result = 0\n    for (let i = 0; i < this.lineSegments.getSize(); i++) {\n      let segment = this.lineSegments.get(i)\n      let p1 = segment.start\n      let p2 = segment.end\n      result += Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y))\n    }\n    return result\n  },\n\n  setVertices: function (vertices) {\n    // inform the router tha the vertices has set outside. This switch some\n    // router from full autoroute to half autoroute\n    this.router.verticesSet(this)\n\n    this._super(vertices)\n  },\n\n\n  /**\n   * \n   * Returns the projection of the point on the line.\n   *\n   * @param {Number} px the x coordinate of the test point\n   * @param {Number} py the y coordinate of the test point\n   * @returns {draw2d.geo.Point}\n   **/\n  pointProjection: function (px, py) {\n    let result = null,\n      projection = null,\n      p1 = null,\n      p2 = null,\n      segment = null\n    let lastDist = Number.MAX_SAFE_INTEGER\n    let pt = new draw2d.geo.Point(px, py)\n    for (let i = 0; i < this.lineSegments.getSize(); i++) {\n      segment = this.lineSegments.get(i)\n      p1 = segment.start\n      p2 = segment.end\n      projection = draw2d.geo.Line.pointProjection(p1.x, p1.y, p2.x, p2.y, pt.x, pt.y)\n      if (projection !== null) {\n        let dist = projection.distance(pt)\n        if (result == null || dist < lastDist) {\n          result = projection\n          result.index = i\n          lastDist = dist\n        }\n      }\n    }\n\n    if (result !== null) {\n      let length = 0\n      let segment\n      for (let i = 0; i < result.index; i++) {\n        segment = this.lineSegments.get(i)\n        length += segment.start.distance(segment.end)\n      }\n      segment = this.lineSegments.get(result.index)\n      p1 = segment.start\n      p2 = segment.end\n      length += p1.distance(p2) * draw2d.geo.Line.inverseLerp(p2.x, p2.y, p1.x, p1.y, result.x, result.y)\n      result.percentage = (1.0 / this.getLength()) * length\n    }\n    return result\n  },\n\n  /**\n   * \n   * Returns the point onto the line which has the relative 'percentage' position onto the line.\n   *\n   * @param {Number} percentage the relative position between [0..1]\n   * @returns {draw2d.geo.Point}\n   */\n  lerp: function (percentage) {\n    let length = this.getLength() * percentage\n    let lastValidLength = length\n    let segment = null, p1 = null, p2 = null\n    for (let i = 0; i < this.lineSegments.getSize(); i++) {\n      segment = this.lineSegments.get(i)\n      p1 = segment.start\n      p2 = segment.end\n      length = length - p1.distance(p2)\n      if (length <= 0) {\n        percentage = 1.0 / p1.distance(p2) * lastValidLength\n        return new draw2d.geo.Point(p1.x + (p2.x - p1.x) * percentage, p1.y + (p2.y - p1.y) * percentage)\n      }\n      lastValidLength = length\n    }\n    return p2\n  },\n\n  /**\n   * \n   * get the best segment of the line which is below the given coordinate or null if\n   * all segment are not below the coordinate. <br>\n   * The 'corona' property of the polyline is considered for this test. This means\n   * the point isn't direct on the line. Is it only close to the line!\n   *\n   * @param {Number} px the x coordinate of the test point\n   * @param {Number} py the y coordinate of the test point\n   * @returns {Object}\n   * @since 4.4.0\n   **/\n  hitSegment: function (px, py) {\n    for (let i = 0; i < this.lineSegments.getSize(); i++) {\n      let segment = this.lineSegments.get(i)\n      if (draw2d.shape.basic.Line.hit(this.corona + this.stroke, segment.start.x, segment.start.y, segment.end.x, segment.end.y, px, py)) {\n        return {index: i, start: segment.start, end: segment.end}\n      }\n    }\n    return null\n  },\n\n  /**\n   * \n   * Checks if the hands over coordinate close to the line. The 'corona' property of the polyline\n   * is considered for this test. This means the point isn't direct on the line. Is it only close to the\n   * line!\n   *\n   * @param {Number} px the x coordinate of the test point\n   * @param {Number} py the y coordinate of the test point\n   * @returns {Boolean}\n   **/\n  hitTest: function (px, py) {\n    return this.hitSegment(px, py) !== null\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createCommand: function (request) {\n\n    if (request.getPolicy() === draw2d.command.CommandType.DELETE) {\n      if (this.isDeleteable() === true) {\n        return new draw2d.command.CommandDelete(this)\n      }\n    }\n    else if (request.getPolicy() === draw2d.command.CommandType.MOVE_VERTEX) {\n      if (this.isResizeable() === true) {\n        return new draw2d.command.CommandMoveVertex(this)\n      }\n    }\n    else if (request.getPolicy() === draw2d.command.CommandType.MOVE_VERTICES) {\n      if (this.isResizeable() === true) {\n        return new draw2d.command.CommandMoveVertices(this)\n      }\n    }\n\n    return this._super(request)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getPersistentAttributes: function () {\n    let memento = extend(this._super(), {\n      router: this.router.NAME,\n      radius: this.radius\n    })\n\n    memento = this.router.getPersistentAttributes(this, memento)\n\n    return memento\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.router !== \"undefined\") {\n      try {\n        this.setRouter(eval(\"new \" + memento.router + \"()\"))\n      }\n      catch (exc) {\n        debug.warn(\"Unable to install router '\" + memento.router + \"' forced by \" + this.NAME + \".setPersistentAttributes. Using default\")\n      }\n    }\n\n    if (typeof memento.radius !== \"undefined\") {\n      this.setRadius(memento.radius)\n    }\n\n    this.router.setPersistentAttributes(this, memento)\n\n    if (this.vertices.getSize() > 1) {\n      this.start = this.vertices.first().clone()\n      this.end = this.vertices.last().clone()\n    }\n  }\n})\n","import draw2d from '../../packages'\nimport jsonUtil from '../../util/JSONUtil'\n\n\n/**\n * @class\n * A Polygon figure.\n *\n *\n * @example\n *\n *    let p1 =  new draw2d.shape.basic.Polygon({width:100, height:100});\n *    let p2 =  new draw2d.shape.basic.Polygon({width:100, height:60});\n *\n *    canvas.add(p1,10,10);\n *    canvas.add(p2,100,10);\n *\n *    p2.attr({color:\"#f0f000\", alpha:0.7});\n *\n *    canvas.setCurrentSelection(p2);\n *\n * @author Andreas Herz\n * @extends draw2d.VectorFigure\n */\ndraw2d.shape.basic.Polygon = draw2d.VectorFigure.extend(\n  /** @lends draw2d.shape.basic.Polygon.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.Polygon\",\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.minX = 0\n    this.minY = 0\n    this.maxX = 0\n    this.maxY = 0\n    this.vertices = new draw2d.util.ArrayList()\n\n    this._super(attr, setter, getter)\n\n    // we must cache the initial width/height because the width/height of the shape\n    // is recalculated in the addVertex method. After the first call this values are 0/0\n    if (this.vertices.getSize() === 0) {\n      let w = this.width\n      let h = this.height\n      let pos = this.getPosition()\n      this.addVertex(new draw2d.geo.Point(0, 0))\n      this.addVertex(new draw2d.geo.Point(w, 0))\n      this.addVertex(new draw2d.geo.Point(w, h))\n\n      this.setPosition(pos)\n    }\n\n    this.svgPathString = null\n\n    this.installEditPolicy(new draw2d.policy.figure.VertexSelectionFeedbackPolicy())\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setRadius: function (radius) {\n    this.svgPathString = null\n\n    this._super(radius)\n    this.fireEvent(\"change:radius\", {value: radius})\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createShapeElement: function () {\n    // return some good default...\n    return this.canvas.paper.path(\"M0 10L100 100\")\n  },\n\n  /**\n   * \n   * calculate the path of the polygon\n   *\n   */\n  calculatePath: function () {\n    let radius = this.getRadius()\n    let path = []\n    // hard corners\n    //\n    if (radius === 0) {\n      let length = this.vertices.getSize()\n      let p = this.vertices.get(0)\n      path.push(\"M\", p.x, \" \", p.y)\n      for (let i = 1; i < length; i++) {\n        p = this.vertices.get(i)\n        path.push(\"L\", p.x, \" \", p.y)\n      }\n      path.push(\"Z\")\n    }\n    // soften/round corners\n    //\n    else {\n      length = this.vertices.getSize()\n      let start = this.vertices.first()\n      let end = this.vertices.last()\n      if (start.equals(end)) {\n        length = length - 1\n        end = this.vertices.get(length - 1)\n      }\n      let begin = draw2d.geo.Util.insetPoint(start, end, radius)\n      path.push(\"M\", begin.x, \",\", begin.y)\n      for (let i = 0; i < length; i++) {\n        start = this.vertices.get(i)\n        end = this.vertices.get((i + 1) % length)\n        let modStart = draw2d.geo.Util.insetPoint(start, end, radius)\n        let modEnd = draw2d.geo.Util.insetPoint(end, start, radius)\n        path.push(\"Q\", start.x, \",\", start.y, \" \", modStart.x, \", \", modStart.y)\n        path.push(\"L\", modEnd.x, \",\", modEnd.y)\n      }\n    }\n    this.svgPathString = path.join(\"\")\n    return this\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    if (this.svgPathString === null) {\n      this.calculatePath()\n    }\n\n    attributes = attributes || {}\n\n    jsonUtil.ensureDefault(attributes, \"path\", this.svgPathString)\n\n    this._super(attributes)\n  },\n\n  /**\n   * \n   * Translate the figure with the given x/y offset. This method modifies all\n   * vertices and the bounding box.\n   *\n   * @param {Number} dx The new x translate offset\n   * @param {Number} dy The new y translate offset\n   **/\n  translate: function (dx, dy) {\n    let _this = this\n\n    // TODO: This is not good. If the polygon part of an \"Composite\" I should call\n    //       the adjustPosition. IF we DragDrap the composition the figures inside should follow\n    //       without modify the dx/dy.\n    //\n    dx = this.x + dx\n    dy = this.y + dy\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        let newPos = e.adjustPosition(_this, dx, dy)\n        dx = newPos.x\n        dy = newPos.y\n      }\n    })\n    dx = dx - this.x\n    dy = dy - this.y\n\n\n    this.vertices.each(function (i, e) {\n      e.translate(dx, dy)\n    })\n    this.svgPathString = null\n    this.updateBoundingBox()\n\n    this.repaint()\n\n\n    // Update the resize handles if the user change the position of the\n    // element via an API call.\n    //\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n    this.fireEvent(\"move\", {figure: this, dx: dx, dy: dy})\n    this.fireEvent(\"change:x\", {value: this.x})\n    this.fireEvent(\"change:y\", {value: this.y})\n\n    return this\n  },\n\n  /**\n   * \n   * Change the position of the polygon. This method updates all vertices.\n   *\n   * @param {Number|draw2d.geo.Point} x\n   * @param {Number} [y]\n   */\n  setPosition: function (x, y) {\n    if (x instanceof draw2d.geo.Point) {\n      y = x.y\n      x = x.x\n    }\n    this.svgPathString = null\n\n    let dx = x - this.minX\n    let dy = y - this.minY\n\n    this.translate(dx, dy)\n\n    this.x = x\n    this.y = y\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setDimension: function (w, h) {\n    let oldWidth = this.width\n    let oldHeight = this.height\n\n    this._super(w, h)\n\n    let fracWidth = (1 / oldWidth) * this.width\n    let fracHeight = (1 / oldHeight) * this.height\n\n    let thisX = this.x\n    let thisY = this.y\n    this.vertices.each(function (i, e) {\n      // calculate difference between point and figure origin\n      let diffX = (e.getX() - thisX) * fracWidth\n      let diffY = (e.getY() - thisY) * fracHeight\n      e.setPosition(thisX + diffX, thisY + diffY)\n    })\n\n    this.svgPathString = null\n    this.repaint()\n    this.fireEvent(\"change:dimension\", {value: {width: this.width, height: this.height}})\n\n    return this\n  },\n\n  /**\n   * \n   * Return all vertices of the polygon.\n   *\n   * @returns {draw2d.util.ArrayList}\n   */\n  getVertices: function () {\n    return this.vertices\n  },\n\n\n  /**\n   * \n   * Return the Vertex with the given index.\n   *\n   * @param {Number} index the index of the vertex to return\n   * @since 5.0.2\n   */\n  getVertex: function (index) {\n    return this.vertices.get(index)\n  },\n\n\n  resetVertices: function () {\n    this.vertices = new draw2d.util.ArrayList()\n\n    this.svgPathString = null\n    this.repaint()\n\n    this.updateBoundingBox()\n\n    this.editPolicy.each((i, e) => {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(this.canvas, this)\n      }\n    })\n\n    return this\n  },\n\n  /**\n   * \n   * Update the vertex at the given index. The method call didn't have any effect\n   * if the vertex didn't exists.\n   *\n   * @param {Number} index\n   * @param {Number} x\n   * @param {Number} y\n   */\n  setVertex: function (index, x, y) {\n    let vertex = this.vertices.get(index)\n\n    // invalid point or nothing to do\n    //\n    if (vertex === null || (vertex.x === x && vertex.y === y)) {\n      return this\n    }\n\n    vertex.x = parseFloat(x)\n    vertex.y = parseFloat(y)\n\n    this.svgPathString = null\n    this.repaint()\n\n    this.updateBoundingBox()\n\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return this\n  },\n\n  /**\n   * \n   * Append a new vertex to the polygon.\n   *\n   * @param {Number | draw2d.geo.Point} x\n   * @param {Number} [y]\n   */\n  addVertex: function (x, y) {\n    this.vertices.add(new draw2d.geo.Point(x, y))\n\n    this.svgPathString = null\n    this.repaint()\n\n    this.updateBoundingBox()\n\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return this\n  },\n\n  /**\n   * \n   * Insert a new vertex at the given index. All vertices will be shifted to\n   * free the requested index.\n   *\n   * @param {Number} index\n   * @param {Number} x\n   * @param {Number} y\n   */\n  insertVertexAt: function (index, x, y) {\n    this.vertices.insertElementAt(new draw2d.geo.Point(x, y), index)\n\n    this.svgPathString = null\n    this.repaint()\n\n    this.updateBoundingBox()\n\n    if (!this.selectionHandles.isEmpty()) {\n      let _this = this\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.SelectionFeedbackPolicy) {\n          e.onUnselect(_this.canvas, _this)\n          e.onSelect(_this.canvas, _this)\n        }\n      })\n    }\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return this\n  },\n\n\n  /**\n   * \n   * Remove a vertex from the polygon and return the removed point.\n   *\n   * @param {Number} index\n   *\n   * @returns {draw2d.geo.Point} the removed vertex\n   */\n  removeVertexAt: function (index) {\n    // a polygon need at least 3 vertices\n    //\n    if (this.vertices.getSize() <= 3) {\n      return null\n    }\n\n    let vertex = this.vertices.removeElementAt(index)\n\n    this.svgPathString = null\n    this.repaint()\n\n    this.updateBoundingBox()\n\n    if (!this.selectionHandles.isEmpty()) {\n      let _this = this\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.SelectionFeedbackPolicy) {\n          e.onUnselect(_this.canvas, _this)\n          e.onSelect(_this.canvas, _this)\n        }\n      })\n    }\n    this.fireEvent(\"change:vertices\", {value: this.vertices})\n\n    return vertex\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  setRotationAngle: function (angle) {\n    this.rotationAngle = 360 % angle\n\n    // The different to the other figures is, the the vertices must rotated instead of\n    // transform the shape with SVG matrix.\n    //\n    // Reason: the vertices are selectable and in this case the coordinates must transform\n    //         and not only the resulting SVG shape.\n    //\n    let radian = angle / (180 / Math.PI)\n    let center = this.getBoundingBox().getCenter()\n    let rotate = function (x, y, xm, ym, radian) {\n      let cos = Math.cos,\n        sin = Math.sin\n      return {\n        x: (x - xm) * cos(radian) - (y - ym) * sin(radian) + xm,\n        y: (x - xm) * sin(radian) + (y - ym) * cos(radian) + ym\n      }\n    }\n\n    this.vertices.each(function (i, e) {\n      let rot = rotate(e.x, e.y, center.x, center.y, radian)\n      e.setPosition(rot.x, rot.y)\n    })\n\n    this.updateBoundingBox()\n\n\n    // Update the resize handles if the user change the position of the element via an API call.\n    //\n    let _this = this\n    this.editPolicy.each(function (i, e) {\n      if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n        e.moved(_this.canvas, _this)\n      }\n    })\n\n    this.repaint()\n    this.fireEvent(\"change:angle\", {value: this.rotationAngle})\n\n    return this\n  },\n\n  /**\n   * \n   * Calculate the bounding box of the shape and store them in an internal\n   * variable for fast access.\n   *\n   * @private\n   */\n  updateBoundingBox: function () {\n    if (this.vertices.isEmpty()) {\n      this.minX = this.x\n      this.minY = this.y\n      this.maxX = this.x + this.width\n      this.maxY = this.y + this.height\n    }\n    else {\n      this.minX = this.x = Math.min(...this.vertices.asArray().map(n => n.x))\n      this.minY = this.y = Math.min(...this.vertices.asArray().map(n => n.y))\n      this.maxX = Math.max(...this.vertices.asArray().map(n => n.x))\n      this.maxY = Math.max(...this.vertices.asArray().map(n => n.y))\n      this.width = this.maxX - this.minX\n      this.height = this.maxY - this.minY\n    }\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  createCommand: function (request) {\n\n    if (request.getPolicy() === draw2d.command.CommandType.MOVE_VERTEX) {\n      if (this.isResizeable() === true) {\n        return new draw2d.command.CommandMoveVertex(this)\n      }\n    }\n\n    return this._super(request)\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getPersistentAttributes: function () {\n    let memento = this._super()\n\n    memento.vertices = []\n\n    this.vertices.each(function (i, e) {\n      memento.vertices.push({x: e.x, y: e.y})\n    })\n\n    return memento\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    // restore the points from the JSON data and add them to the polyline\n    //\n    if (typeof memento.vertices !== \"undefined\") {\n      this.vertices = new draw2d.util.ArrayList()\n      memento.vertices.forEach(point => {\n        this.addVertex(point)\n      })\n    }\n  }\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n/**\n * @class\n * A Rectangle Figure.\n *\n *\n * @example\n *\n *    let rect1 =  new draw2d.shape.basic.Rectangle({\n *    \tx:10,\n *     y:10\n *    });\n *\n *    let rect2 =  new draw2d.shape.basic.Rectangle({\n *      x: 100,\n *      y: 10,\n *      bgColor: \"#f0f000\",\n *      alpha  : 0.7,\n *      width: 100,\n *      height: 60,\n *      radius: 10\n *    });\n *\n *    canvas.add(rect1);\n *    canvas.add(rect2);\n *\n *    canvas.setCurrentSelection(rect2);\n *\n * @author Andreas Herz\n * @param {Object} [attr] the configuration of the shape\n * @param {Object} [setter] add or replace setter methods\n * @param {Object} [getter] add or replace getter methods\n * @extends draw2d.VectorFigure\n */\ndraw2d.shape.basic.Rectangle = draw2d.VectorFigure.extend(\n  /** @lends draw2d.shape.basic.Rectangle.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.Rectangle\",\n\n  init: function (attr, setter, getter) {\n    this.dasharray = null\n\n    this._super(\n      extend({bgColor: \"#a0a0a0\", color: \"#1B1B1B\"}, attr),\n      extend({}, {\n        // @attr {String} dash The dot/dash pattern for the line style. Valid values: [\"\", \"-\", \".\", \"-.\", \"-..\", \". \", \"- \", \"--\", \"- .\", \"--.\", \"--..\"]*/\n        dash: this.setDashArray,\n        // @attr {String} dasharray The dot/dash pattern for the line style. Valid values: [\"\", \"-\", \".\", \"-.\", \"-..\", \". \", \"- \", \"--\", \"- .\", \"--.\", \"--..\"]*/\n        dasharray: this.setDashArray\n      }, setter),\n      extend({}, {\n        dash: this.getDashArray,\n        dasharray: this.getDashArray\n      }, getter)\n    )\n  },\n\n  /**\n   * @inheritdoc\n   **/\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = extend({}, {\n      width: this.getWidth(),\n      height: this.getHeight(),\n      r: this.getRadius()\n    }, attributes)\n\n    if (this.dasharray !== null) {\n      attributes[\"stroke-dasharray\"] = this.dasharray\n    }\n\n    this._super(attributes)\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  applyTransformation: function () {\n    let ts = \"R\" + this.rotationAngle\n\n    if (this.getRotationAngle() === 90 || this.getRotationAngle() === 270) {\n      let ratio = this.getHeight() / this.getWidth()\n      ts = ts + \"S\" + ratio + \",\" + 1 / ratio + \",\" + (this.getAbsoluteX() + this.getWidth() / 2) + \",\" + (this.getAbsoluteY() + this.getHeight() / 2)\n    }\n\n    this.shape.transform(ts)\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createShapeElement: function () {\n    return this.canvas.paper.rect(this.getAbsoluteX(), this.getAbsoluteY(), this.getWidth(), this.getHeight())\n  },\n\n\n  /**\n   *\n   * Set the line style for dot/dash styling. Possible values are\n   * [\"\", \"-\", \".\", \"-.\", \"-..\", \". \", \"- \", \"--\", \"- .\", \"--.\", \"--..\"]\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       dash: pattern\n   *     });\n   *\n   * @param {String} pattern the string with the dot/dash pattern. valid values: [\"\", \"-\", \".\", \"-.\", \"-..\", \". \", \"- \", \"--\", \"- .\", \"--.\", \"--..\"]\n   */\n  setDashArray: function (pattern) {\n    this.dasharray = pattern\n    this.repaint()\n    this.fireEvent(\"change:dashArray\", {value: this.dasharray})\n\n    return this\n  },\n\n  /**\n   *\n   * Get the line style for this object.\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr(\"dash\");\n   *\n   * @since 5.1.0\n   */\n  getDashArray: function () {\n    return this.dasharray\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getPersistentAttributes: function () {\n    let memento = this._super()\n\n    if (this.dasharray !== null) {\n      memento.dasharray = this.dasharray\n    }\n\n    return memento\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.dasharray === \"string\") {\n      this.dasharray = memento.dasharray\n    }\n\n    return this\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Implements a simple text with word wrapping.<br>The height of the element is automatic calculated. The widht of\n * the element is changeable by the user and respect the minWidth constraint.\n * <br>\n *\n *\n * @example\n *\n *    let shape =  new draw2d.shape.basic.Text({text:\"This is a simple text with some loooooong word in.\"});\n *\n *    canvas.add(shape,40,10);\n *\n * @author Andreas Herz\n * @since 4.2.3\n * @extends draw2d.shape.basic.Label\n */\ndraw2d.shape.basic.Text = draw2d.shape.basic.Label.extend(\n  /** @lends draw2d.shape.basic.Text.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.Text\",\n\n  /**\n   * Creates a new text element.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.cachedWrappedAttr = null\n\n    this._super(extend({width: 100, height: 50, resizeable: true}, attr), setter, getter)\n\n    this.installEditPolicy(new draw2d.policy.figure.WidthSelectionFeedbackPolicy())\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    // style the label\n    this.svgNodes.attr(extend({}, this.calculateTextAttr(), this.wrappedTextAttr(this.text, this.getWidth() - this.padding.left - this.padding.right)))\n\n    // set of the x/y must be done AFTER the font-size and bold has been set.\n    // Reason: the getHeight method needs the font-size for calculation because\n    //         it redirects the calculation to the SVG element.\n    this.svgNodes.attr({x: this.padding.left, y: this.getHeight() / 2})\n\n    // this is an exception call. Don't call the super method (Label) to avoid\n    // the calculation in this method.\n    draw2d.SetFigure.prototype.repaint.call(this, attributes)\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  setDimension: function (w, h) {\n    this.clearCache()\n    let attr = this.wrappedTextAttr(this.text, w)\n\n    this.cachedMinWidth = Math.max(w, attr.width)\n    this.cachedMinHeight = attr.height\n\n    draw2d.shape.node.Node.prototype.setDimension.call(this, this.cachedMinWidth, this.cachedMinHeight)\n    //  this._super(Math.min(w,attr.width),attr.height);\n    this.fireEvent(\"change:dimension\", {value: {width: this.cachedMinWidth, height: this.cachedMinHeight}})\n\n    return this\n  },\n\n  /**\n   *\n   * clear the internal cache for width/height precalculation\n   * @private\n   */\n  clearCache: function () {\n    this._super()\n    this.cachedWrappedAttr = null\n\n    return this\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getMinWidth: function () {\n    if (this.shape === null) {\n      return 0\n    }\n\n    if (this.cachedMinWidth === null) {\n      // get the longest word in the text\n      //\n      let longestWord = this.text.split(\" \").reduce(function (arg1, arg2) {\n        return arg1.length > arg2.length ? arg1 : arg2\n      })\n      let svgText = this.canvas.paper\n        .text(0, 0, longestWord)\n        .attr(extend({}, this.calculateTextAttr(), {text: longestWord}))\n      this.cachedMinWidth = svgText.getBBox(true).width + this.padding.left + this.padding.right + 2 * this.getStroke()\n      svgText.remove()\n    }\n\n    return this.cachedMinWidth\n  },\n\n\n  /**\n   *\n   * calculates the attributes (wrapped text and width, height) with the given parameter\n   *\n   * @private\n   */\n  wrappedTextAttr: function (text, width) {\n    let words = text.split(\" \")\n    if (this.canvas === null || words.length === 0) {\n      return {text: text, width: width, height: 20}\n    }\n\n    if (this.cachedWrappedAttr === null) {\n      let abc = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n      let svgText = this.canvas.paper.text(0, 0, \"\").attr(extend({}, this.calculateTextAttr(), {text: abc}))\n\n      // get a good estimation of a letter width...not correct but this is working for the very first draft implementation\n      let letterWidth = svgText.getBBox(true).width / abc.length\n\n      let s = [words[0]], x = s[0].length * letterWidth\n      let w = null\n      for (let i = 1; i < words.length; i++) {\n        w = words[i]\n        let l = w.length * letterWidth\n        if ((x + l) > width) {\n          s.push(\"\\n\")\n          x = l\n        }\n        else {\n          s.push(\" \")\n          x += l\n        }\n        s.push(w)\n      }\n      // set the wrapped text and get the resulted boudning box\n      //\n      svgText.attr({text: s.join(\"\")})\n      let bbox = svgText.getBBox(true)\n      svgText.remove()\n      this.cachedWrappedAttr = {\n        text: s.join(\"\"),\n        width: (Math.max(width, bbox.width) + this.padding.left + this.padding.right),\n        height: (bbox.height + this.padding.top + this.padding.bottom)\n      }\n    }\n    return this.cachedWrappedAttr\n  }\n\n})\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Selection handle for polyline vertices.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.ResizeHandle\n */\ndraw2d.shape.basic.VertexResizeHandle = draw2d.ResizeHandle.extend(\n  /** @lends draw2d.shape.basic.VertexResizeHandle.prototype */\n  {\n\n  NAME: \"draw2d.shape.basic.VertexResizeHandle\",\n\n  SNAP_THRESHOLD: 3,\n  LINE_COLOR: \"#1387E6\",\n  FADEOUT_DURATION: 300,\n\n  init: function (owner, index) {\n    this._super({owner})\n    this.index = index\n    this.isDead = false\n  },\n\n\n  /**\n   * Called when a user double clicks on the element\n   *\n   * @template\n   */\n  onDoubleClick: function () {\n    let cmd = new draw2d.command.CommandRemoveVertex(this.owner, this.index)\n    this.getCanvas().getCommandStack().execute(cmd)\n\n    this.isDead = true\n  },\n\n\n  /**\n   *\n   * Called if a drag&drop operation starts.<br>\n   *\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @private\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey) {\n    if (this.isDead === true) {\n      return\n    }\n\n    this._super()\n    this.command = this.getCanvas().getPrimarySelection().createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.MOVE_VERTEX))\n    if (this.command != null) {\n      this.command.setIndex(this.index)\n      this.setAlpha(0.2)\n      this.shape.attr({\"cursor\": \"crosshair\"})\n    }\n\n    // Vertex is a reference and not a copy of the point\n    this.vertex = this.owner.getVertex(this.index).clone()\n\n    // fire an event\n    // @since 5.3.3\n    this.fireEvent(\"dragstart\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n\n    return true\n  },\n\n  /**\n   *\n   * Called from the framework during a drag&drop operation\n   *\n   * @param {Number} dx the x difference between the start of the drag drop operation and now\n   * @param {Number} dy the y difference between the start of the drag drop operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   **/\n  onDrag: function (dx, dy, dx2, dy2) {\n    if (this.isDead === true || this.command == null) {\n      return\n    }\n\n    this.setPosition(this.x + dx2, this.y + dy2)\n\n    // update the polyline for immediately  drag&drop feedback\n    //\n    this.vertex.translate(dx2, dy2)\n    let newPos = this.vertex.clone()\n    // Adjust the new location if the object can snap to a helper\n    // like grid, geometry, ruler,...\n    //\n    if (this.getCanSnapToHelper()) {\n      newPos = this.getCanvas().snapToHelper(this, newPos)\n    }\n\n    this.owner.setVertex(this.index, newPos.x, newPos.y)\n\n    // update the command for the undo/redo stuff\n    //\n    this.command.updatePosition(this.vertex.x, this.vertex.y)\n  },\n\n  /**\n   *  Called after a drag and drop action.<br>\n   *        Sub classes can override this method to implement additional stuff. Don't forget to call the super implementation via <code>this._super();</code>\n   *\n   * @param {Number} x the x-coordinate of the mouse event\n   * @param {Number} y the y-coordinate of the mouse event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   */\n  onDragEnd: function (x, y, shiftKey, ctrlKey) {\n    if (this.isDead === true || this.command === null) {\n      return\n    }\n\n    this.shape.attr({\"cursor\": \"move\"})\n\n    let stack = this.getCanvas().getCommandStack()\n\n    let transactionCommand = new draw2d.command.CommandCollection()\n\n    try {\n      transactionCommand.add(this.command)\n      this.command = null\n      if (this.getEnclosingAngle() > 178) {\n        transactionCommand.add(new draw2d.command.CommandRemoveVertex(this.owner, this.index))\n      }\n    }\n    finally {\n      stack.execute(transactionCommand)\n    }\n\n    this.setAlpha(1)\n\n    // fire an event\n    // @since 5.3.3\n    this.fireEvent(\"dragend\", {x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey})\n  },\n\n\n  /**\n   *\n   * Controls the location of the resize handle\n   *\n   * @template\n   **/\n  relocate: function () {\n    let resizeWidthHalf = this.getWidth() / 2\n    let resizeHeightHalf = this.getHeight() / 2\n\n    let anchor = this.owner.getVertex(this.index)\n\n    this.setPosition(anchor.x - resizeWidthHalf, anchor.y - resizeHeightHalf)\n  },\n\n  /**\n   *\n   * Calculates the angle between the siblings\n   *\n   * @returns {Number}\n   */\n  getEnclosingAngle: function () {\n    // calculate the angle between the siblings\n    let points = this.owner.getVertices()\n    let trans = this.vertex.getScaled(-1)\n    let size = points.getSize()\n    let left = points.get((this.index - 1 + size) % size).translated(trans) // % is just to ensure the [0, size] interval\n    let right = points.get((this.index + 1) % size).translated(trans)       // % is just to ensure the [0, size] interval\n\n    let dot = left.dot(right)\n\n    let acos = Math.acos(dot / (left.length() * right.length()))\n    return acos * 180 / Math.PI\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Base interface for the composite shapes\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Rectangle\n * @since 4.7.2\n */\ndraw2d.shape.composite.Composite = draw2d.SetFigure.extend(\n  /** @lends draw2d.shape.composite.Composite.prototype */\n  {\n\n    NAME: \"draw2d.shape.composite.Composite\",\n\n    /**\n     * Creates a new composite element which are not assigned to any canvas.\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function (attr, setter, getter) {\n      this._super(extend({stroke: 1, \"color\": \"#f0f0f0\"}, attr), setter, getter)\n    },\n\n    /**\n     *\n     * Called when a user dbl clicks on the element\n     *\n     * @template\n     */\n    onDoubleClick: function () {\n      // do nothing per default. no rotation of the shape.\n    },\n\n    /**\n     *\n     * Delegate method to calculate if a figure is selectable. A composite has the right to override the\n     * initial selectable flag of the figure.\n     *\n     * @param {draw2d.Figure} figure the figure to test\n     * @param {Boolean} selectable the initial selectable flag of the figure\n     * @returns {Boolean} returns `selectable`. A figure in a composite is per default selectable if the figure itself allows it.\n     *\n     */\n    isMemberSelectable: function (figure, selectable) {\n      return selectable\n    },\n\n    /**\n     *\n     * Delegate method to calculate if a figure is draggable. A composite has the right to override the\n     * initial draggable flag of the figure.\n     *\n     * @param {draw2d.Figure} figure the figure to test\n     * @param {Boolean} draggable the initial draggable flag of the figure\n     * @returns {Boolean} returns `draggable`. A figure in a composite is per default draggable if the figure itself allows it.\n     *\n     */\n    isMemberDraggable: function (figure, draggable) {\n      return draggable\n    },\n\n\n    /**\n     *\n     * Set the canvas element of this figures. This can be used to determine whenever an element\n     * is added or removed to the canvas.\n     *\n     * @param {draw2d.Canvas} canvas the new parent of the figure or null\n     * @returns {this}\n     */\n    setCanvas: function (canvas) {\n      this._super(canvas)\n\n      // an composite shape goes always in the background\n      //\n      if (canvas !== null) {\n        this.toBack()\n      }\n\n      return this\n    }\n\n  })\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A group is a figure that acts as a transparent container for other figures. A group\n * is a StrongComposite node that controls a set of child figures. The bounding rectangle of\n * a group is the union of the bounds of its children. Child nodes cannot be selected or\n * manipulated individually.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.composite.StrongComposite\n * @since 4.8.0\n */\ndraw2d.shape.composite.Group = draw2d.shape.composite.StrongComposite.extend(\n  /** @lends draw2d.shape.composite.Group.prototype */\n  {\n\n    NAME: \"draw2d.shape.composite.Group\",\n\n    /**\n     * Creates a new figure element which are not assigned to any canvas.\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function (attr, setter, getter) {\n      this._super(extend({bgColor: null, color: null, resizeable: false}, attr), setter, getter)\n\n      // used during figure assignment/unassignment. The Group is resizing during figure assignment\n      // and we want avoid that already assigned figures are moving during this resize.\n      //\n      this.stickFigures = false\n    },\n\n\n    /**\n     *\n     * Delegate method to calculate if a figure is selectable. A composite has the right to override the\n     * initial selectable flag of the figure.\n     *\n     * @param {draw2d.Figure} figure the figure to test\n     * @param {Boolean} selectable the initial selectable flag of the figure\n     * @returns {Boolean} returns false because it is not possible toselect single figures in the group\n     */\n    isMemberSelectable: function (figure, selectable) {\n      return false\n    },\n\n    /**\n     *\n     * Delegate method to calculate if a figure is draggable. A composite has the right to override the\n     * initial draggable flag of the figure.\n     * <br>\n     * Returns false because only the complete group is draggable\n     *\n     * @param {draw2d.Figure} figure the figure to test\n     * @param {Boolean} draggable the initial draggable flag of the figure\n     * @returns {Boolean} returns always false because it is not possible to drag&drop single figures in a group\n     *\n     */\n    isMemberDraggable: function (figure, draggable) {\n      return false\n    },\n\n    /**\n     *\n     * Set the position of the object.\n     *\n     * @param {Number/draw2d.geo.Point} x The new x coordinate of the figure\n     * @param {Number} [y] The new y coordinate of the figure\n     * @returns {this}\n     **/\n    setPosition: function (x, y) {\n      let oldX = this.x\n      let oldY = this.y\n\n\n      this._super(x, y)\n\n      let dx = this.x - oldX\n      let dy = this.y - oldY\n\n      if (dx === 0 && dy === 0) {\n        return this\n      }\n\n      if (this.stickFigures === false) {\n        this.assignedFigures.each(function (i, figure) {\n          figure.translate(dx, dy)\n        })\n      }\n\n      return this\n    },\n\n    /**\n     *\n     * Assign a figure to the given group.\n     * The bounding box of the group is recalculated and the union of the current bounding box with the\n     * figure bounding box.\n     *\n     * @param {draw2d.Figure} figure\n     * @returns {this}\n     */\n    assignFigure: function (figure) {\n      if (!this.assignedFigures.contains(figure)) {\n        let _this = this\n        this.stickFigures = true\n        if (this.assignedFigures.isEmpty() === true) {\n          this.setBoundingBox(figure.getBoundingBox())\n        } else {\n          this.setBoundingBox(this.getBoundingBox().merge(figure.getBoundingBox()))\n        }\n        this.assignedFigures.add(figure)\n        figure.setComposite(this)\n        // the selection adapter defines which figure should be selected if the user clicks on\n        // \"figure\". The \"group\" redirects to the group instead to allowing select the child.\n        figure.setSelectionAdapter(function () {\n          return _this\n        })\n        this.stickFigures = false\n      }\n      return this\n    },\n\n    /**\n     *\n     * Remove the given figure from the group assignment\n     *\n     * @param {draw2d.Figure} figure the figure to remove\n     * @returns {this}\n     */\n    unassignFigure: function (figure) {\n      if (this.assignedFigures.contains(figure)) {\n        this.stickFigures = true\n        figure.setComposite(null)\n        figure.setSelectionAdapter(null)\n        this.assignedFigures.remove(figure)\n        if (!this.assignedFigures.isEmpty()) {\n          let box = this.assignedFigures.first().getBoundingBox()\n          this.assignedFigures.each(function (i, figure) {\n            box.merge(figure.getBoundingBox())\n          })\n          this.setBoundingBox(box)\n        }\n        this.stickFigures = false\n      }\n\n      return this\n    },\n\n    /**\n     * @inheritDoc\n     */\n    createCommand: function (request) {\n      if (request === null) {\n        return null\n      }\n\n      if (request.getPolicy() === draw2d.command.CommandType.DELETE) {\n        if (!this.isDeleteable()) {\n          return null\n        }\n        return new draw2d.command.CommandDeleteGroup(this)\n      }\n\n      return this._super(request)\n    }\n\n  })\n\n\n\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A Jailhouse is a figure that acts as a container for other figures. A Jailhouse\n * is a StrongComposite node that controls a set of child figures. Child nodes can't\n * moved outside of the composite.<br>\n * Objects in a jailhouse have the same Z-order, which can be relatively controlled with\n * respect to other figures.\n *\n * @author Andreas Herz\n * @extends draw2d.shape.composite.StrongComposite\n * @since 4.8.0\n */\ndraw2d.shape.composite.Jailhouse = draw2d.shape.composite.StrongComposite.extend(\n  /** @lends draw2d.shape.composite.Jailhouse.prototype */\n  {\n\n  NAME: \"draw2d.shape.composite.Jailhouse\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.policy = new draw2d.policy.figure.RegionEditPolicy(0, 0, 10, 10)\n    this._super(extend({bgColor: \"#f0f0f0\", color: \"#333333\"}, attr), setter, getter)\n\n    this.stickFigures = false\n  },\n\n  /**\n   * \n   * Set the new width and height of the figure and update the constraint policy for the assigned\n   * figures..\n   *\n   * @param {Number} w The new width of the figure\n   * @param {Number} h The new height of the figure\n   **/\n  setDimension: function (w, h) {\n    this._super(w, h)\n    this.policy.setBoundingBox(this.getAbsoluteBounds())\n  },\n\n\n  /**\n   * \n   * Set the position of the object.\n   *\n   * @param {Number/draw2d.geo.Point} x The new x coordinate of the figure\n   * @param {Number} [y] The new y coordinate of the figure\n   **/\n  setPosition: function (x, y) {\n    let oldX = this.x\n    let oldY = this.y\n\n\n    this._super(x, y)\n\n    let dx = this.x - oldX\n    let dy = this.y - oldY\n\n    if (dx === 0 && dy === 0) {\n      return this\n    }\n    this.policy.setBoundingBox(this.getAbsoluteBounds())\n\n    if (this.stickFigures === false) {\n      this.assignedFigures.each(function (i, figure) {\n        figure.translate(dx, dy)\n      })\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Assign a figure to the given group.\n   * The bounding box of the group is recalculated and the union of the current bounding box with the\n   * figure bounding box.\n   *\n   * @param {draw2d.Figure} figure\n   */\n  assignFigure: function (figure) {\n    if (!this.assignedFigures.contains(figure) && figure !== this) {\n      this.stickFigures = true\n      this.setBoundingBox(this.getBoundingBox().merge(figure.getBoundingBox()))\n      this.assignedFigures.add(figure)\n      figure.setComposite(this)\n      figure.installEditPolicy(this.policy)\n      figure.toFront(this)\n      this.stickFigures = false\n    }\n    return this\n  },\n\n  /**\n   * \n   * Remove the given figure from the group assignment\n   *\n   * @param {draw2d.Figure} figure the figure to remove\n   *\n   */\n  unassignFigure: function (figure) {\n    if (this.assignedFigures.contains(figure)) {\n      this.stickFigures = true\n      figure.setComposite(null)\n      figure.uninstallEditPolicy(this.policy)\n      this.assignedFigures.remove(figure)\n      if (!this.assignedFigures.isEmpty()) {\n        let box = this.assignedFigures.first().getBoundingBox()\n        this.assignedFigures.each(function (i, figure) {\n          box.merge(figure.getBoundingBox())\n        })\n        this.setBoundingBox(box)\n      }\n      this.stickFigures = false\n    }\n\n    return this\n  },\n\n  onCatch: function (droppedFigure, x, y, shiftKey, ctrlKey) {\n    this.getCanvas().getCommandStack().execute(new draw2d.command.CommandAssignFigure(droppedFigure, this))\n  },\n\n\n  /**\n   * \n   * Return the minWidth of the jailhouse. The minWidth is calculated by care the assigned figures.\n   *\n   * @returns {Number} the minimum width for the figure\n   */\n  getMinWidth: function () {\n    let width = 0\n    this.assignedFigures.each(function (i, figure) {\n      width = Math.max(width, figure.getBoundingBox().getRight())\n    })\n    return width - this.getAbsoluteX()\n  },\n\n  /**\n   * \n   * @returns {Number} the minimum height of the figure\n   */\n  getMinHeight: function () {\n    let height = 0\n    this.assignedFigures.each(function (i, figure) {\n      height = Math.max(height, figure.getBoundingBox().getBottom())\n    })\n    return height - this.getAbsoluteY()\n  }\n})\n\n\n\n\n\n\n","import draw2d from '../../packages'\n\n/**\n * @class\n * Raft figures are shapes, which aggregate multiple figures. It works like a real raft. Aboard figures are\n * moved if the raft figures moves.\n *\n *\n * @example\n *\n *    let rect1 =  new draw2d.shape.composite.Raft({width:200, height:100});\n *    let rect2 =  new draw2d.shape.basic.Rectangle({width:50, height:50});\n *\n *    canvas.add(rect1,10,10);\n *    canvas.add(rect2,20,20);\n *\n *    rect2.attr({bgColor:\"#f0f000\", width:50, height:50, radius:10});\n *\n *    canvas.setCurrentSelection(rect1);\n *\n * @author Andreas Herz\n * @extends draw2d.shape.composite.WeakComposite\n * @since 4.7.0\n */\ndraw2d.shape.composite.Raft = draw2d.shape.composite.WeakComposite.extend(\n  /** @lends draw2d.shape.composite.Raft.prototype */\n  {\n\n    NAME: \"draw2d.shape.composite.Raft\",\n\n    /**\n     * Creates a new figure element which are not assigned to any canvas.\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function (attr, setter, getter) {\n\n      this.aboardFigures = new draw2d.util.ArrayList()\n\n      this._super(extend({bgColor: \"#f0f0f0\", color: \"#1B1B1B\"}, attr), setter, getter)\n    },\n\n\n    /**\n     *\n     * Will be called if the drag and drop action begins. You can return [false] if you\n     * want avoid that the figure can be move.\n     *\n     * @param {Number} x the x-coordinate of the mouse up event\n     * @param {Number} y the y-coordinate of the mouse up event\n     * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n     * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n     *\n     * @returns {Boolean} true if the figure accepts dragging\n     **/\n    onDragStart: function (x, y, shiftKey, ctrlKey) {\n      this._super(x, y, shiftKey, ctrlKey)\n\n      this.aboardFigures = new draw2d.util.ArrayList()\n      // force the recalculation of the aboard figures if the shape is in a drag&drop operation\n      this.getAboardFigures(this.isInDragDrop)\n\n      return true\n    },\n\n    /**\n     *\n     * Set the position of the object.\n     *\n     * @param {Number/draw2d.geo.Point} x The new x coordinate of the figure\n     * @param {Number} [y] The new y coordinate of the figure\n     * @param {boolean} [dontApplyToChildren] don't move the children if this flag is set.\n     **/\n    setPosition: function (x, y, dontApplyToChildren) {\n      let oldX = this.x\n      let oldY = this.y\n\n      // we need the figures before the composite has moved. Otherwise some figures are fall out of the raft\n      //\n      let aboardedFigures = (dontApplyToChildren) ? draw2d.util.ArrayList.EMPTY_LIST : this.getAboardFigures(this.isInDragDrop === false)\n\n      this._super(x, y)\n\n      let dx = this.x - oldX\n      let dy = this.y - oldY\n\n      if (dx === 0 && dy === 0) {\n        return this\n      }\n\n      // we must move circuits with \"user routed\" elements as well if the start/target is withing\n      // the raft. Some segments stay still because some coordinates has a fixed position\n      //\n      if (this.canvas !== null) {\n        aboardedFigures = aboardedFigures.clone()\n        this.canvas.getLines().each(function (i, line) {\n          if (line instanceof draw2d.Connection) {\n            if (aboardedFigures.contains(line.getSource().getRoot()) && aboardedFigures.contains(line.getTarget().getRoot())) {\n              aboardedFigures.add(line)\n            }\n          }\n        })\n      }\n\n      aboardedFigures.each(function (i, figure) {\n        figure.translate(dx, dy)\n      })\n\n      return this\n    },\n\n\n    onDrag: function (dx, dy, dx2, dy2, shiftKey, ctrlKey) {\n      let _this = this\n\n      // apply all EditPolicy for DragDrop Operations\n      //\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n          let newPos = e.adjustPosition(_this, _this.ox + dx, _this.oy + dy)\n          if (newPos) {\n            dx = newPos.x - _this.ox\n            dy = newPos.y - _this.oy\n          }\n        }\n      })\n\n      let newPos = new draw2d.geo.Point(this.ox + dx, this.oy + dy)\n\n      // Adjust the new location if the object can snap to a helper\n      // like grid, geometry, ruler,...\n      //\n      if (this.getCanSnapToHelper()) {\n        newPos = this.getCanvas().snapToHelper(this, newPos)\n      }\n\n\n      // push the shiftKey to the setPosition method and avoid to move the children objects\n      // if the user press the shift key\n      this.setPosition(newPos.x, newPos.y, shiftKey)\n\n      // notify all installed policies\n      //\n      this.editPolicy.each(function (i, e) {\n        if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n          e.onDrag(_this.canvas, _this)\n        }\n      })\n\n\n      // fire an event\n      // @since 5.3.3\n      this.fireEvent(\"drag\", {dx: dx, dy: dy, dx2: dx2, dy2: dy2, shiftKey: shiftKey, ctrlKey: ctrlKey})\n    },\n\n    /**\n     *\n     * Return all figures which are aboard of this shape. These shapes are moved as well if the raft\n     * is moving.\n     *\n     * @returns {draw2d.util.ArrayList}\n     */\n    getAboardFigures: function (recalculate) {\n      if (recalculate === true && this.canvas !== null) {\n        let raftBoundingBox = this.getBoundingBox()\n        let zIndex = this.getZOrder()\n        this.aboardFigures = new draw2d.util.ArrayList()\n\n        let _this = this\n        this.getCanvas().getFigures().each(function (i, figure) {\n          if (figure !== _this && figure.isSelectable() === true && figure.getBoundingBox().isInside(raftBoundingBox)) {\n            // Don't add the figure if it is already catched by another composite with a higher z-index\n            //\n            if (_this.getNextComposite(figure) !== _this) {\n              return\n            }\n            // only add the shape if it is in front of the raft\n            if (figure.getZOrder() > zIndex) {\n              _this.aboardFigures.add(figure)\n            }\n          }\n        })\n      }\n      return this.aboardFigures\n    },\n\n    /**\n     *\n     * return the next potential composite parent figure\n     *\n     * @param {draw2d.Figure} figureToTest\n     * @returns {draw2d.Figure}\n     */\n    getNextComposite: function (figureToTest) {\n      let nextComposite = null\n      this.getCanvas().getFigures().each(function (i, figure) {\n        if (figureToTest === figure) {\n          return\n        }\n        if (figure instanceof draw2d.shape.composite.Composite) {\n          if (nextComposite !== null && nextComposite.getZOrder() > figure.getZOrder()) {\n            return\n          }\n\n          if (figure.getBoundingBox().contains(figureToTest.getBoundingBox())) {\n            nextComposite = figure\n          }\n        }\n      })\n\n      return nextComposite\n    }\n  })\n\n\n\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * A StrongComposite is a composite figure with strong assignment of the children and the composite.\n * The child knows everything about the assigned composite and receives events about assignment to a\n * composite.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.composite.Composite\n * @since 4.8.0\n */\ndraw2d.shape.composite.StrongComposite = draw2d.shape.composite.Composite.extend(\n  /** @lends draw2d.shape.composite.StrongComposite.prototype */\n  {\n\n  NAME: \"draw2d.shape.composite.StrongComposite\",\n\n  /**\n   * Creates a new strong composite element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.assignedFigures = new draw2d.util.ArrayList()\n\n    this._super(attr, setter, getter)\n  },\n\n  /**\n   * \n   * Check to see if a figure is a descendant of another figure.\n   * <br>\n   * The contains() method returns true if the figure provided by the argument is a descendant of this figure,\n   * whether it is a direct child or nested more deeply. Otherwise, it returns false.\n   *\n   * @param {draw2d.Figure} containedFigure The figure that may be contained by (a descendant of) this figure.\n   * @since 5.5.4\n   */\n  contains: function (containedFigure) {\n    for (let i = 0, len = this.assignedFigures.getSize(); i < len; i++) {\n      let child = this.assignedFigures.get(i)\n      if (child === containedFigure || child.contains(containedFigure)) {\n        return true\n      }\n    }\n    return this._super(containedFigure)\n  },\n\n  /**\n   * \n   * Assign a figure to the composite.\n   *\n   * @param {draw2d.Figure} figure\n   * @template\n   */\n  assignFigure: function (figure) {\n    return this\n  },\n\n  /**\n   * \n   * Remove the given figure from the group assignment\n   *\n   * @param {draw2d.Figure} figure the figure to remove\n   * @template\n   */\n  unassignFigure: function (figure) {\n    return this\n  },\n\n  /**\n   * \n   * Return all assigned figures of the composite\n   *\n   * @returns {draw2d.util.ArrayList}\n   */\n  getAssignedFigures: function () {\n    return this.assignedFigures\n  },\n\n\n  /**\n   * \n   * Called if the user drop this element onto the dropTarget. This event is ONLY fired if the\n   * shape return \"this\" in the onDragEnter method.\n   *\n   *\n   * @param {draw2d.Figure} dropTarget The drop target.\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   * @since  4.7.4\n   **/\n  onDrop: function (dropTarget, x, y, shiftKey, ctrlKey) {\n  },\n\n  /**\n   * \n   * Called if the user dropped an figure onto this element. This event is ONLY fired if the\n   * shape return \"this\" in the onDragEnter method.\n   *\n   *\n   * @param {draw2d.Figure} droppedFigure The dropped figure.\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   * @template\n   * @since 4.7.4\n   **/\n  onCatch: function (droppedFigure, x, y, shiftKey, ctrlKey) {\n  },\n\n  /**\n   * \n   * Moves the element so it is the closest to the viewer’s eyes, on top of other elements. Additional\n   * the internal model changed as well.\n   *\n   * Optional: Inserts current object in front of the given one.\n   *\n   * @param {draw2d.Figure} [figure] move current object in front of the given one.\n   */\n  toFront: function (figure) {\n    this._super(figure)\n    // ensure that all assigned figures are in front of the composite\n    //\n    let figures = this.getAssignedFigures().clone()\n    figures.sort(function (a, b) {\n      // return 1  if a before b\n      // return -1 if b before a\n      return a.getZOrder() > b.getZOrder() ? -1 : 1\n    })\n    let _this = this\n    figures.each(function (i, f) {\n      f.toFront(_this)\n    })\n\n    return this\n  },\n\n  /**\n   * \n   * Moves the element to the background. Additional\n   * the internal model changed as well.\n   *\n   * @since 4.7.2\n   */\n  toBack: function (figure) {\n    this._super(figure)\n    // ensure that all assigned figures are in front of the composite\n    //\n    let figures = this.getAssignedFigures().clone()\n    figures.sort(function (a, b) {\n      // return 1  if a before b\n      // return -1 if b before a\n      return a.getZOrder() > b.getZOrder() ? -1 : 1\n    })\n\n    let _this = this\n    figures.each(function (i, f) {\n      f.toBack(_this)\n    })\n\n    return this\n  }\n})\n\n\n\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * A WeakComposite is a composite figure with loose coupling of the children and the composite.\n * The child didn't know anything about the assigned composite nor did they receive any events\n * about assignment to a composite.\n *\n * Assignment without obligation.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.composite.Composite\n * @since 4.8.0\n */\ndraw2d.shape.composite.WeakComposite = draw2d.shape.composite.Composite.extend(\n  /** @lends draw2d.shape.composite.WeakComposite.prototype */\n  {\n\n  NAME: \"draw2d.shape.composite.WeakComposite\",\n\n  /**\n   * Creates a new weak composite element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  }\n})\n\n\n\n\n\n\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\nimport jsonUtil from '../../util/JSONUtil'\n\n/**\n * @class\n *\n * Base class for all diagrams.\n *\n * @param {Object} [attr] the configuration of the shape\n * @extends draw2d.SetFigure\n */\ndraw2d.shape.diagram.Diagram = draw2d.SetFigure.extend(\n  /** @lends draw2d.shape.diagram.Diagram */\n  {\n\n  init: function (attr, setter, getter) {\n    this.data = []\n    this.cache = {}\n\n    this._super(\n      extend({data: [], bgColor: \"#8dabf2\", stroke: 1, color: \"#f0f0f0\", radius: 2, resizeable: true}, attr),\n      extend({}, {\n        // @attr {Array} data the data to display in the diagram */\n        data: this.setData\n      }, setter),\n      extend({}, {\n        data: this.getData\n      }, getter)\n    )\n  },\n\n  /**\n   * \n   * Set the data for the chart/diagram element\n   *\n   * @param {Array} data\n   *\n   */\n  setData: function (data) {\n    this.data = data\n    this.cache = {}\n\n\n    if (this.svgNodes !== null) {\n      this.svgNodes.remove()\n      this.svgNodes = this.createSet()\n    }\n\n    this.repaint()\n    this.fireEvent(\"change:data\", {value: data})\n\n  },\n\n  /**\n   * \n   * Return the data of the diagram\n   *\n   * @since 5.0.0\n   */\n  getData: function () {\n    return this.data\n  },\n\n\n  /**\n   * \n   * Set the dimension of the diagram and reset the cached calculation\n   *\n   * @since 5.0.0\n   */\n  setDimension: function (w, h) {\n    this.cache = {}\n    this._super(w, h)\n\n    return this\n  },\n\n\n  /**\n   * \n   * Return the calculate width of the set. This calculates the bounding box of all elements.\n   *\n   * @returns {Number} the calculated width of the label\n   **/\n  getWidth: function () {\n    return this.width\n  },\n\n  /**\n   * \n   * Return the calculated height of the set. This calculates the bounding box of all elements.\n   *\n   * @returns {Number} the calculated height of the label\n   */\n  getHeight: function () {\n    return this.height\n  },\n\n  /**\n   *\n   * @param attributes\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape == null) {\n      return this\n    }\n\n    attributes = attributes || {}\n\n    jsonUtil.ensureDefault(attributes, \"fill\", \"none\")\n\n    return this._super(attributes)\n  },\n\n  applyTransformation: function () {\n    if (this.isResizeable() === true) {\n      this.svgNodes.transform(\"S\" + this.scaleX + \",\" + this.scaleY + \",\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY() + \"t\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY())\n    }\n    else {\n      this.svgNodes.transform(\"T\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY())\n    }\n\n    return this\n  }\n\n\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n/**\n * @class\n *\n * Small data pie chart.\n *\n *\n * @example\n *\n *    let pie = new draw2d.shape.diagram.Pie({\n *       diameter:80,\n *       data:[30,60,122,4],\n *       x:100,\n *       y:60\n *    });\n *\n *    canvas.add( pie);\n *\n * @param {Object} [attr] the configuration of the shape\n * @extends draw2d.shape.diagram.Diagram\n */\ndraw2d.shape.diagram.Pie = draw2d.shape.diagram.Diagram.extend(\n  /** @lends draw2d.shape.diagram.Pie */\n  {\n\n  NAME: \"draw2d.shape.diagram.Pie\",\n  COLORS: ['#00A8F0', '#b9dd69', '#f3546a', '#4DA74D', '#9440ED'],\n  TWO_PI: Math.PI * 2,\n\n  init: function (attr, setter, getter) {\n\n\n    this._super(\n      extend({stroke: 0}, attr),\n      extend({\n        // @attr {Number} diameter the diameter of the pie chart */\n        diameter: this.setDiameter,\n        // @attr {Number} radius the radius of the pie chart */\n        radius: this.setRadius\n      }, setter),\n      extend({\n        diameter: this.getDiameter,\n        radius: this.getRadius\n      }, getter))\n  },\n\n  /**\n   *\n   * Set the diameter of the circle. The center of the circle will be retained.\n   *\n   * @param {Number} d The new diameter of the circle.\n   * @since 4.0.0\n   **/\n  setDiameter: function (d) {\n    let center = this.getCenter()\n    this.setDimension(d, d)\n    this.setCenter(center)\n    this.fireEvent(\"change:diameter\", {value: this.width})\n\n    return this\n  },\n\n  /**\n   *\n   * Get the diameter of the circle.\n   *\n   * @since 4.0.0\n   **/\n  getDiameter: function () {\n    return this.getWidth()\n  },\n\n\n  /**\n   *\n   * Set the radius of the circle. The center of the circle will be retained.\n   *\n   * @param {Number} r The new radius of the circle.\n   * @since 4.0.0\n   **/\n  setRadius: function (r) {\n    this.setDiameter(r * 2)\n    this.fireEvent(\"change:radius\", {value: this.width / 2})\n\n    return this\n  },\n\n\n  /**\n   *\n   * Get the center of the circle\n   *\n   */\n  getCenter: function () {\n    let d2 = this.getDiameter() / 2\n    return this.getPosition().translate(d2, d2)\n  },\n\n  /**\n   *\n   * Set the center of the circle.\n   *\n   * @param {Number|draw2d.geo.Point} x the new x coordinate of the center or a draw2d.geo.Point object with the center\n   * @param {Number} y the y coordinate of the new center of the first argument isn't a draw2d.geo.Point object\n   */\n  setCenter: function (x, y) {\n    let pos = new draw2d.geo.Point(x, y)\n    let d2 = this.getDiameter() / 2\n    pos.translate(-d2, -d2)\n    this.setPosition(pos)\n    this.fireEvent(\"change:center\", {value: {x: x, y: y}})\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setData: function (data) {\n\n    // Normalize the Data.\n    // The SUM must be == 1.\n    this.sum = 0\n    data.forEach(val => {\n      this.sum += val\n    })\n    let _sum = 1 / this.sum\n    data.forEach((val, i) => {\n      data[i] = _sum * val\n    })\n\n    //  pass the normalize data to the base implementation\n    //\n    this._super(data)\n    this.fireEvent(\"change:data\", {value: data})\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createSet: function () {\n    let radius = this.getWidth() / 2\n    let length = this.data.length\n\n    let pie = this.canvas.paper.set()\n\n    let offsetAngle = 0\n\n    for (let i = 0; i < length; i++) {\n      // angle is percent of TWO_PI\n      let angle = this.TWO_PI * this.data[i]\n      let color = this.COLORS[i % length]\n      let seg = this.drawSegment(radius, angle, offsetAngle, 0.1)\n      seg.attr({stroke: this.color.rgba(), fill: color})\n      pie.push(seg)\n      offsetAngle += angle\n    }\n    return pie\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setDimension: function (w, h) {\n    // keep the aspect ration\n    //\n    if (w > h) {\n      this._super(w, w)\n    }\n    else {\n      this._super(h, h)\n    }\n\n    // we must recreate the diagram if we change the size.\n    // low performance. Better: transfor/scale the set. Can be done in the next release\n    //\n    if (this.svgNodes !== null) {\n      this.svgNodes.remove()\n      this.svgNodes = this.createSet()\n    }\n\n    this.repaint()\n\n    return this\n  },\n\n  polarPath: function (radius, theta, rotation) {\n    let x, y\n    x = radius * Math.cos(theta + rotation) + radius\n    y = radius * Math.sin(theta + rotation) + radius\n    return \"L \" + x + \" \" + y + \" \"\n  },\n\n  drawSegment: function (radius, value, rotation, resolution) {\n    let path = \"M \" + radius + \" \" + radius\n\n    for (let i = 0; i < value; i += resolution) {\n      path += this.polarPath(radius, i, rotation)\n    }\n    path += this.polarPath(radius, value, rotation)\n\n    path += \"L \" + radius + \" \" + radius\n    return this.getCanvas().paper.path(path)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  applyTransformation: function () {\n    this.svgNodes.transform(\"T\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY())\n\n    return this\n  }\n\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n/**\n * @class\n *\n * Small data line diagram.\n *\n *\n * @example\n *\n *    let testData = [];\n *    for(let i=0;i<100;i++) {\n *      testData.push(Math.floor(Math.random() * 100));\n *    }\n *\n *    let sparkline = new draw2d.shape.diagram.Sparkline({\n *    \tdata: testData,\n *     width:150,\n *     height:50,\n *     x:100,\n *     y:60\n *    });\n *\n *    canvas.add( sparkline);\n *\n * @param {Object} [attr] the configuration of the shape\n * @extends draw2d.shape.diagram.Diagram\n */\ndraw2d.shape.diagram.Sparkline = draw2d.shape.diagram.Diagram.extend(\n  /** @lends draw2d.shape.diagram.Sparkline */\n  {\n\n  NAME : \"draw2d.shape.diagram.Sparkline\",\n\n  init: function (attr, setter, getter) {\n    this.min = 0\n    this.max = 10\n    this.padding = 4\n\n    this._super(extend({width: 180, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setData: function (data) {\n    if (data.length > 0) {\n      // get the min/max from an array and not only from two elements..\n      this.min = Math.min(...data)\n      this.max = Math.max(...data)\n    }\n    else {\n      this.min = 0\n      this.max = 1\n    }\n\n    if (this.max == this.min) {\n      this.max = this.min + 1\n    }\n\n    this._super(data)\n    this.fireEvent(\"change:data\", {value: data})\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M0 0 l0 0\")\n  },\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = attributes || {}\n\n    attributes.fill = \"90-#000:5-#4d4d4d:95\"\n\n    let padding = this.padding\n    let width = this.getWidth() - 2 * padding\n    let height = this.getHeight() - 2 * padding\n    let length = this.data.length\n    let min = this.min\n    let max = this.max\n    let toCoords = function (value, idx) {\n      let step = 1\n      // avoid divisionByZero\n      if (length > 1) {\n        step = (width / (length - 1))\n      }\n\n      return {\n        y: -((value - min) / (max - min) * height) + height + padding,\n        x: padding + idx * step\n      }\n    }\n\n    if (this.svgNodes !== null && (typeof this.cache.pathString === \"undefined\")) {\n      let prev_pt = null\n      this.data.forEach((item, idx) => {\n        let pt = toCoords(item, idx)\n        if (prev_pt === null) {\n          this.cache.pathString = [\"M\", pt.x, pt.y].join(\" \")\n        }\n        else {\n          this.cache.pathString = [this.cache.pathString, \"L\", pt.x, pt.y].join(\" \")\n        }\n        prev_pt = pt\n      })\n\n      this.svgNodes.attr({path: this.cache.pathString, stroke: \"#f0f0f0\"})\n\n    }\n    this._super(attributes)\n\n    return this\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * A Rectangle Figure in a dimetric perspective.\n *\n *\n * @example\n *\n *    let d1 =  new draw2d.shape.dimetric.Rectangle({x:10,y:10});\n *    let d2 =  new draw2d.shape.dimetric.Rectangle({x:100,y:10, bgColor:\"#f0f000\", alpha:0.7, width:100, height:60});\n *\n *    canvas.add(d1);\n *    canvas.add(d2);\n *\n *    canvas.setCurrentSelection(d2);\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Polygon\n */\ndraw2d.shape.dimetric.Rectangle = draw2d.shape.basic.Polygon.extend(\n  /** @lends draw2d.shape.dimetric.Rectangle.prototype */\n  {\n\n  NAME: \"draw2d.shape.dimetric.Rectangle\",\n\n  /**\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({bgColor: \"#00a3f6\", color: \"#1B1B1B\"}, attr), setter, getter)\n\n    let pos = this.getPosition()\n\n    this.resetVertices()\n\n    let angle26 = Math.atan(.5)\n    let cos30 = Math.cos(angle26)\n    let sin30 = Math.sin(angle26)\n\n    let box = this.getBoundingBox()\n    let w = box.w\n    let h = box.h\n\n    this.addVertex(0, 0) // topLeft\n    this.addVertex(cos30 * w, sin30 * w) // topRight\n    this.addVertex(cos30 * w - cos30 * h, sin30 * w + sin30 * h) // bottomRight\n    this.addVertex(-cos30 * h, sin30 * h) // bottomLeft\n\n    // override the selection handler from the polygon. Because the vertices of\n    // the diamond are not selectable and modifiable\n    //\n    this.installEditPolicy(new draw2d.policy.figure.RectangleSelectionFeedbackPolicy())\n\n    this.setPosition(pos)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Typical flowchart <b>Document</b> shape\n *\n *\n * @example\n *\n *    let figure = new draw2d.shape.flowchart.Document({\n *       x:100,\n *       y:60\n *    });\n *\n *    canvas.add( figure);\n *\n * @extends draw2d.VectorFigure\n */\ndraw2d.shape.flowchart.Document = draw2d.VectorFigure.extend(\n  /** @lends draw2d.shape.flowchart.Document.prototype */\n  {\n\n  NAME: \"draw2d.shape.flowchart.Document\",\n\n  /**\n   *\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.amplitude = 0.08 // percentage of height\n\n    this._super(extend({\n      width: 80,\n      height: 50,\n      bgColor: \"#2196f3\",\n      color: \"#1B1B1B\",\n      stroke: 1\n    }, attr), setter, getter)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  createShapeElement: function () {\n    return this.canvas.paper.path(this.calcPath())\n  },\n\n  calcPath: function () {\n    let w = this.getWidth()\n    let h = this.getHeight()\n    let w2 = w / 2\n    let w4 = w / 4\n    let h2 = (h * this.amplitude) | 0\n\n\n    return [\n      \"M\", this.getAbsoluteX(), \",\", this.getAbsoluteY(),\n      \"l\", w, \",\", 0,\n      \"l\", 0, \",\", h - h2,\n      \"q\", -w4, \",\", -h2, -w2, \",\", 0,\n      \"q\", -w4, \",\", h2, -w2, \",\", 0,\n      \"z\"].join(\" \")\n  },\n\n  /**\n   * @inheritdoc\n   **/\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = extend({}, {\n      path: this.calcPath()\n    }, attributes)\n\n    this._super(attributes)\n\n    return this\n  }\n  /*\n    function draw_curve(Ax, Ay, Bx, By, M) {\n\n    // Find midpoint J\n    let Jx = Ax + (Bx - Ax) / 2\n    let Jy = Ay + (By - Ay) / 2\n\n    // We need a and b to find theta, and we need to know the sign of each to make sure that the orientation is correct.\n    let a = Bx - Ax\n    let asign = (a < 0 ? -1 : 1)\n    let b = By - Ay\n    let bsign = (b < 0 ? -1 : 1)\n    let theta = Math.atan(b / a)\n\n    // Find the point that's perpendicular to J on side\n    let costheta = asign * Math.cos(theta)\n    let sintheta = asign * Math.sin(theta)\n\n    // Find c and d\n    let c = M * sintheta\n    let d = M * costheta\n\n    // Use c and d to find Kx and Ky\n    let Kx = Jx - c\n    let Ky = Jy + d\n\n    return \"M\" + Ax + \",\" + Ay +\n           \"Q\" + Kx + \",\" + Ky +\n           \" \" + Bx + \",\" + By\n   }*/\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Acw();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Acw = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Acw.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Acw\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M19.275,3.849l1.695,8.56l1.875-1.642c2.311,3.59,1.72,8.415-1.584,11.317c-2.24,1.96-5.186,2.57-7.875,1.908l-0.84,3.396c3.75,0.931,7.891,0.066,11.02-2.672c4.768-4.173,5.521-11.219,1.94-16.279l2.028-1.775L19.275,3.849zM8.154,20.232c-2.312-3.589-1.721-8.416,1.582-11.317c2.239-1.959,5.186-2.572,7.875-1.909l0.842-3.398c-3.752-0.93-7.893-0.067-11.022,2.672c-4.765,4.174-5.519,11.223-1.939,16.283l-2.026,1.772l8.26,2.812l-1.693-8.559L8.154,20.232z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Alarm();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Alarm = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Alarm.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Alarm\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M8.179,20.115c-0.478,0.277-0.642,0.889-0.365,1.366c0.275,0.479,0.889,0.642,1.365,0.366c0.479-0.275,0.643-0.888,0.367-1.367C9.27,20.004,8.658,19.84,8.179,20.115zM9.18,12.239c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,13.126,9.657,12.516,9.18,12.239zM8.625,17.043c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,18.043,8.624,17.596,8.625,17.043zM16.312,3.957V3.031h1c0.275,0,0.5-0.225,0.5-0.5v-0.5c0-0.275-0.225-0.5-0.5-0.5h-3.625c-0.275,0-0.5,0.225-0.5,0.5v0.5c0,0.275,0.225,0.5,0.5,0.5h1v0.926C7.819,4.381,2.376,10.068,2.374,17.042C2.376,24.291,8.251,30.166,15.5,30.169c7.249-0.003,13.124-5.878,13.125-13.127C28.624,10.067,23.181,4.38,16.312,3.957zM15.5,27.166C9.909,27.157,5.385,22.633,5.375,17.042C5.385,11.451,9.909,6.927,15.5,6.917c5.59,0.01,10.115,4.535,10.124,10.125C25.615,22.633,21.091,27.157,15.5,27.166zM12.062,22.998c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,23.887,12.54,23.275,12.062,22.998zM12.062,11.088c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,11.2,11.584,11.364,12.062,11.088zM22.822,13.971c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,14.083,22.344,14.247,22.822,13.971zM15.501,23.92c-0.552,0-1,0.447-1,1c0,0.552,0.448,1,1,1s1-0.448,1-1C16.501,24.367,16.053,23.92,15.501,23.92zM19.938,9.355c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,10.245,20.418,9.632,19.938,9.355zM23.378,16.042c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,16.492,23.929,16.042,23.378,16.042zM22.823,20.115c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.091,0.367,1.367c0.477,0.275,1.089,0.112,1.365-0.366C23.464,21.004,23.3,20.391,22.823,20.115zM15.501,8.167c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.366c0.275,0.479,0.889,0.642,1.365,0.366l3.305-1.676c0.055,0.006,0.109,0.017,0.166,0.017c0.828,0,1.5-0.672,1.5-1.5l-0.5-7.876C16.501,8.614,16.053,8.167,15.501,8.167zM18.939,22.998c-0.479,0.276-0.643,0.888-0.366,1.367c0.275,0.477,0.888,0.642,1.366,0.365c0.478-0.276,0.642-0.889,0.366-1.365C20.028,22.886,19.417,22.723,18.939,22.998zM11.197,3.593c-0.836-1.04-2.103-1.718-3.541-1.718c-2.52,0-4.562,2.042-4.562,4.562c0,0.957,0.297,1.843,0.8,2.576C5.649,6.484,8.206,4.553,11.197,3.593zM27.106,9.014c0.503-0.733,0.8-1.619,0.8-2.576c0-2.52-2.043-4.562-4.562-4.562c-1.438,0-2.704,0.678-3.541,1.717C22.794,4.553,25.351,6.484,27.106,9.014z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Anonymous();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Anonymous = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Anonymous.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Anonymous\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.523,23.813c-0.518-0.51-6.795-2.938-7.934-3.396c-1.132-0.451-1.584-1.697-1.584-1.697s-0.51,0.282-0.51-0.51c0-0.793,0.51,0.51,1.021-2.548c0,0,1.414-0.397,1.133-3.68l-0.338,0.001c0,0,0.85-3.511,0-4.699c-0.854-1.188-1.188-1.981-3.062-2.548c-1.869-0.567-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.793-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.32s0.283,3.059,0.566,3.624l-0.337,0.112c-0.283,3.283,1.132,3.681,1.132,3.681c0.509,3.058,1.019,1.755,1.019,2.548c0,0.792-0.51,0.51-0.51,0.51s-0.452,1.246-1.584,1.697c-1.132,0.453-7.416,2.887-7.927,3.396c-0.511,0.521-0.453,2.896-0.453,2.896h26.954C28.977,26.709,29.039,24.332,28.523,23.813zM16.618,13.693c-0.398-0.251-0.783-1.211-0.783-1.64c0-0.133,0-0.236,0-0.236c-0.105-0.106-0.574-0.096-0.67,0c0,0,0,0.104,0,0.236c0,0.429-0.385,1.389-0.783,1.64c-0.399,0.251-1.611,0.237-2.084-0.236c-0.473-0.473-0.524-1.663-0.643-1.78c-0.118-0.119-0.185-0.185-0.185-0.185l0.029-0.414c0,0,0.842-0.207,1.699-0.207s1.803,0.502,1.803,0.502c0.231-0.074,0.784-0.083,0.996,0c0,0,0.945-0.502,1.803-0.502s1.699,0.207,1.699,0.207l0.029,0.414c0,0-0.066,0.066-0.185,0.185c-0.118,0.118-0.169,1.308-0.643,1.78C18.229,13.93,17.018,13.944,16.618,13.693z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Apple();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Apple = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Apple.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Apple\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.32,10.85c-1.743,1.233-2.615,2.719-2.615,4.455c0,2.079,1.078,3.673,3.232,4.786c-0.578,1.677-1.416,3.134-2.514,4.375c-1.097,1.241-2.098,1.862-3.004,1.862c-0.427,0-1.009-0.143-1.748-0.423l-0.354-0.138c-0.725-0.281-1.363-0.423-1.92-0.423c-0.525,0-1.1,0.11-1.725,0.331l-0.445,0.16l-0.56,0.229c-0.441,0.176-0.888,0.264-1.337,0.264c-1.059,0-2.228-0.872-3.507-2.616c-1.843-2.498-2.764-5.221-2.764-8.167c0-2.095,0.574-3.781,1.725-5.061c1.149-1.279,2.673-1.92,4.568-1.92c0.709,0,1.371,0.13,1.988,0.389l0.423,0.172l0.445,0.183c0.396,0.167,0.716,0.251,0.959,0.251c0.312,0,0.659-0.072,1.04-0.217l0.582-0.229l0.435-0.16c0.693-0.251,1.459-0.377,2.297-0.377C21.512,8.576,23.109,9.334,24.32,10.85zM19.615,3.287c0.021,0.267,0.033,0.473,0.033,0.617c0,1.317-0.479,2.473-1.438,3.467s-2.075,1.49-3.347,1.49c-0.038-0.297-0.058-0.51-0.058-0.639c0-1.12,0.445-2.171,1.337-3.153c0.891-0.982,1.922-1.558,3.096-1.725C19.32,3.329,19.447,3.311,19.615,3.287z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Apps();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Apps = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Apps.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Apps\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.359,18.424l-2.326,1.215c0.708,1.174,1.384,2.281,1.844,3.033l2.043-1.066C25.538,20.822,24.966,19.652,24.359,18.424zM19.143,14.688c0.445,0.84,1.342,2.367,2.274,3.926l2.414-1.261c-0.872-1.769-1.72-3.458-2.087-4.122c-0.896-1.621-1.982-3.108-3.454-5.417c-1.673-2.625-3.462-5.492-4.052-4.947c-1.194,0.384,1.237,4.094,1.876,5.715C16.73,10.147,17.991,12.512,19.143,14.688zM26.457,22.673l-1.961,1.022l1.982,4.598c0,0,0.811,0.684,1.92,0.213c1.104-0.469,0.81-1.706,0.81-1.706L26.457,22.673zM24.35,15.711c0.168,0.339,2.924,5.93,2.924,5.93h1.983v-5.93H24.35zM18.34,15.704h-4.726l-3.424,5.935h11.66C21.559,21.159,18.771,16.479,18.34,15.704zM3.231,21.613l3.437-5.902H2.083v5.93h1.133L3.231,21.613zM15.048,10.145c0-0.93-0.754-1.685-1.685-1.685c-0.661,0-1.231,0.381-1.507,0.936l2.976,1.572C14.97,10.725,15.048,10.444,15.048,10.145zM14.343,12.06l-3.188-1.684L9.62,13.012l3.197,1.689L14.343,12.06zM3.192,26.886l-0.384,1.108v0.299l0.298-0.128l0.725-0.896l2.997-2.354l-3.137-1.651L3.192,26.886zM9.02,14.044l-4.757,8.17l3.23,1.706l4.728-8.186L9.02,14.044z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ArrowDown();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ArrowDown = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ArrowDown.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.ArrowDown\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M5.318,6.684L15.5,24.316L25.682,6.684H5.318z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ArrowLeft();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ArrowLeft = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ArrowLeft.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.ArrowLeft\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.316,5.318L6.684,15.5l17.632,10.182V5.318L24.316,5.318z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ArrowLeft2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ArrowLeft2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ArrowLeft2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.ArrowLeft2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.871,9.814 15.684,16.001 21.871,22.188 18.335,25.725 8.612,16.001 18.335,6.276z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ArrowRight();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ArrowRight = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ArrowRight.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.ArrowRight\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ArrowRight2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ArrowRight2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ArrowRight2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.ArrowRight2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M10.129,22.186 16.316,15.999 10.129,9.812 13.665,6.276 23.389,15.999 13.665,25.725z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ArrowUp();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ArrowUp = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ArrowUp.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.ArrowUp\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.682,24.316L15.5,6.684L5.318,24.316H25.682z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Aumade();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Aumade = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Aumade.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Aumade\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.513,24.52c-0.131-0.217-0.14-0.481-0.022-0.711l1.987-3.844l0,0c0.186-0.357,0.625-0.497,0.981-0.312c0.357,0.188,0.498,0.625,0.312,0.982l-1.801,3.48l2.228,3.699h12.269l-14.8-25.631L6.433,18.178c0.434,0.242,0.909,0.479,1.391,0.654c0.571,0.211,1.148,0.342,1.658,0.342c0.276,0,0.579-0.078,0.916-0.238c0.337-0.158,0.7-0.396,1.073-0.688c0.749-0.582,1.527-1.354,2.334-2.021c0.539-0.442,1.091-0.844,1.706-1.099c0.352-0.145,0.729-0.239,1.128-0.239c0.622,0,1.174,0.214,1.622,0.5c0.449,0.287,0.813,0.646,1.11,0.995c0.59,0.697,0.902,1.359,0.924,1.394l0,0c0.18,0.361,0.021,0.801-0.341,0.977c-0.356,0.176-0.798,0.021-0.978-0.34c0-0.002-0.002-0.004-0.004-0.007c-0.002-0.011-0.008-0.021-0.018-0.034c-0.018-0.033-0.043-0.082-0.078-0.146c-0.07-0.125-0.179-0.305-0.312-0.496c-0.271-0.391-0.668-0.845-1.092-1.104c-0.281-0.178-0.561-0.272-0.844-0.272c-0.216,0-0.479,0.069-0.788,0.229c-0.309,0.153-0.653,0.396-1.016,0.688c-0.727,0.584-1.511,1.362-2.351,2.033c-0.562,0.445-1.15,0.853-1.809,1.103c-0.375,0.143-0.776,0.229-1.195,0.229c-0.749,0-1.48-0.181-2.164-0.433c-0.58-0.219-1.125-0.482-1.613-0.764L0.86,27.816h15.63L14.513,24.52zM18.214,22.242c0.222-0.557,0.537-1.217,0.963-1.848c0.427-0.627,0.957-1.232,1.646-1.646c0.379-0.229,0.812-0.391,1.282-0.438l-0.604-0.934l0,0c-0.22-0.339-0.123-0.789,0.215-1.009c0.341-0.219,0.789-0.123,1.013,0.216l1.545,2.391c0.184,0.274,0.147,0.646-0.075,0.893c-0.228,0.247-0.591,0.305-0.886,0.145c-0.354-0.191-0.646-0.258-0.901-0.258c-0.291,0-0.562,0.084-0.845,0.25c-0.277,0.164-0.562,0.414-0.813,0.719c-0.519,0.607-0.937,1.422-1.185,2.055c-0.111,0.285-0.387,0.466-0.678,0.466c-0.092,0-0.183-0.021-0.271-0.056C18.249,23.039,18.064,22.615,18.214,22.242z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.BarChart();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.BarChart = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.BarChart.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.BarChart\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.25,8.375V28h6.5V8.375H21.25zM12.25,28h6.5V4.125h-6.5V28zM3.25,28h6.5V12.625h-6.5V28z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.BioHazard();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.BioHazard = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.BioHazard.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.BioHazard\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M26.154,13.988c-0.96-0.554-1.982-0.892-3.019-1.032c0.396-0.966,0.616-2.023,0.616-3.131c0-4.399-3.438-8.001-7.772-8.264c3.245,0.258,5.803,2.979,5.803,6.292c0,3.373-2.653,6.123-5.983,6.294v1.292c0.908,0.144,1.605,0.934,1.605,1.883c0,0.232-0.043,0.454-0.118,0.66l1.181,0.683c1.826-2.758,5.509-3.658,8.41-1.981c2.896,1.672,3.965,5.299,2.506,8.254C31.386,21.038,29.992,16.204,26.154,13.988zM4.122,16.587c2.92-1.686,6.628-0.764,8.442,2.034l1.141-0.657c-0.072-0.2-0.109-0.417-0.109-0.642c0-0.909,0.638-1.67,1.489-1.859v-1.319c-3.3-0.202-5.92-2.94-5.92-6.292c0-3.297,2.532-6.007,5.757-6.286c-4.312,0.285-7.729,3.875-7.729,8.258c0,1.078,0.206,2.106,0.581,3.05c-1.004,0.147-1.999,0.481-2.931,1.02c-3.812,2.201-5.209,6.985-3.264,10.87C0.174,21.823,1.251,18.244,4.122,16.587zM11.15,11.452c0.114,0.139,0.235,0.271,0.362,0.398c0.126,0.126,0.259,0.247,0.397,0.361c0.102,0.084,0.211,0.16,0.318,0.236c0.93-0.611,2.045-0.969,3.244-0.969c1.201,0,2.312,0.357,3.242,0.969c0.107-0.077,0.217-0.152,0.318-0.236c0.139-0.114,0.271-0.235,0.397-0.361c0.127-0.127,0.248-0.259,0.362-0.398c0.113-0.138,0.222-0.283,0.323-0.431c-1.307-0.956-2.908-1.528-4.643-1.528c-0.042,0-0.083-0.001-0.124,0c-0.019,0-0.04-0.001-0.06,0c-1.666,0.038-3.201,0.605-4.462,1.528C10.929,11.17,11.037,11.314,11.15,11.452zM9.269,16.787c-0.168-0.062-0.338-0.117-0.512-0.164c-0.173-0.047-0.348-0.083-0.525-0.113c-0.177-0.03-0.355-0.053-0.535-0.065c-0.175,1.609,0.13,3.282,0.998,4.786c0.868,1.503,2.164,2.606,3.645,3.259c0.079-0.162,0.15-0.328,0.212-0.496c0.063-0.169,0.118-0.338,0.164-0.512c0.047-0.173,0.087-0.349,0.115-0.525c0.022-0.13,0.034-0.262,0.046-0.394c-0.993-0.5-1.86-1.286-2.461-2.325c-0.6-1.04-0.847-2.182-0.783-3.294C9.512,16.889,9.392,16.833,9.269,16.787zM18.122,22.657c0.014,0.132,0.024,0.263,0.046,0.394c0.03,0.177,0.067,0.352,0.113,0.524c0.047,0.174,0.102,0.346,0.165,0.514c0.062,0.169,0.132,0.333,0.212,0.495c1.48-0.653,2.777-1.755,3.644-3.257c0.868-1.504,1.176-3.179,1.001-4.788c-0.18,0.013-0.358,0.035-0.535,0.065c-0.177,0.029-0.353,0.067-0.525,0.113s-0.345,0.101-0.513,0.163c-0.124,0.047-0.241,0.105-0.362,0.16c0.063,1.11-0.183,2.253-0.784,3.292C19.984,21.373,19.116,22.157,18.122,22.657zM20.569,27.611c-2.92-1.687-3.977-5.358-2.46-8.329l-1.192-0.689c-0.349,0.389-0.854,0.634-1.417,0.634c-0.571,0-1.086-0.254-1.436-0.653l-1.146,0.666c1.475,2.96,0.414,6.598-2.488,8.272c-2.888,1.668-6.552,0.791-8.386-1.935c2.38,3.667,7.249,4.87,11.079,2.658c0.929-0.535,1.711-1.227,2.339-2.018c0.64,0.832,1.45,1.554,2.416,2.112c3.835,2.213,8.709,1.006,11.086-2.671C27.132,28.396,23.463,29.282,20.569,27.611z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Book();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Book = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Book.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Book\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.754,4.626c-0.233-0.161-0.536-0.198-0.802-0.097L12.16,9.409c-0.557,0.213-1.253,0.316-1.968,0.316c-0.997,0.002-2.029-0.202-2.747-0.48C7.188,9.148,6.972,9.04,6.821,8.943c0.056-0.024,0.12-0.05,0.193-0.075L18.648,4.43l1.733,0.654V3.172c0-0.284-0.14-0.554-0.374-0.714c-0.233-0.161-0.538-0.198-0.802-0.097L6.414,7.241c-0.395,0.142-0.732,0.312-1.02,0.564C5.111,8.049,4.868,8.45,4.872,8.896c0,0.012,0.004,0.031,0.004,0.031v17.186c0,0.008-0.003,0.015-0.003,0.021c0,0.006,0.003,0.01,0.003,0.016v0.017h0.002c0.028,0.601,0.371,0.983,0.699,1.255c1.034,0.803,2.769,1.252,4.614,1.274c0.874,0,1.761-0.116,2.583-0.427l12.796-4.881c0.337-0.128,0.558-0.448,0.558-0.809V5.341C26.128,5.057,25.988,4.787,25.754,4.626zM5.672,11.736c0.035,0.086,0.064,0.176,0.069,0.273l0.004,0.054c0.016,0.264,0.13,0.406,0.363,0.611c0.783,0.626,2.382,1.08,4.083,1.093c0.669,0,1.326-0.083,1.931-0.264v1.791c-0.647,0.143-1.301,0.206-1.942,0.206c-1.674-0.026-3.266-0.353-4.509-1.053V11.736zM10.181,24.588c-1.674-0.028-3.266-0.354-4.508-1.055v-2.712c0.035,0.086,0.065,0.176,0.07,0.275l0.002,0.053c0.018,0.267,0.13,0.408,0.364,0.613c0.783,0.625,2.381,1.079,4.083,1.091c0.67,0,1.327-0.082,1.932-0.262v1.789C11.476,24.525,10.821,24.588,10.181,24.588z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Bookmark();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Bookmark = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Bookmark.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Bookmark\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M17.396,1.841L6.076,25.986l7.341-4.566l1.186,8.564l11.32-24.146L17.396,1.841zM19.131,9.234c-0.562-0.264-0.805-0.933-0.541-1.495c0.265-0.562,0.934-0.805,1.496-0.541s0.805,0.934,0.541,1.496S19.694,9.498,19.131,9.234z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Books();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Books = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Books.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Books\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M26.679,7.858c-0.176-0.138-0.404-0.17-0.606-0.083l-9.66,4.183c-0.42,0.183-0.946,0.271-1.486,0.271c-0.753,0.002-1.532-0.173-2.075-0.412c-0.194-0.083-0.356-0.176-0.471-0.259c0.042-0.021,0.09-0.042,0.146-0.064l8.786-3.804l1.31,0.561V6.612c0-0.244-0.106-0.475-0.283-0.612c-0.176-0.138-0.406-0.17-0.605-0.083l-9.66,4.183c-0.298,0.121-0.554,0.268-0.771,0.483c-0.213,0.208-0.397,0.552-0.394,0.934c0,0.01,0.003,0.027,0.003,0.027v14.73c0,0.006-0.002,0.012-0.002,0.019c0,0.005,0.002,0.007,0.002,0.012v0.015h0.002c0.021,0.515,0.28,0.843,0.528,1.075c0.781,0.688,2.091,1.073,3.484,1.093c0.66,0,1.33-0.1,1.951-0.366l9.662-4.184c0.255-0.109,0.422-0.383,0.422-0.692V8.471C26.961,8.227,26.855,7.996,26.679,7.858zM20.553,5.058c-0.017-0.221-0.108-0.429-0.271-0.556c-0.176-0.138-0.404-0.17-0.606-0.083l-9.66,4.183C9.596,8.784,9.069,8.873,8.53,8.873C7.777,8.874,6.998,8.699,6.455,8.46C6.262,8.378,6.099,8.285,5.984,8.202C6.026,8.181,6.075,8.16,6.13,8.138l8.787-3.804l1.309,0.561V3.256c0-0.244-0.106-0.475-0.283-0.612c-0.176-0.138-0.407-0.17-0.606-0.083l-9.66,4.183C5.379,6.864,5.124,7.011,4.907,7.227C4.693,7.435,4.51,7.779,4.513,8.161c0,0.011,0.003,0.027,0.003,0.027v14.73c0,0.006-0.001,0.013-0.001,0.019c0,0.005,0.001,0.007,0.001,0.012v0.016h0.002c0.021,0.515,0.28,0.843,0.528,1.075c0.781,0.688,2.091,1.072,3.485,1.092c0.376,0,0.754-0.045,1.126-0.122V11.544c-0.01-0.7,0.27-1.372,0.762-1.856c0.319-0.315,0.708-0.564,1.19-0.756L20.553,5.058z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Bubble();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Bubble = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Bubble.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Bubble\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,5.333c-7.732,0-14,4.701-14,10.5c0,1.982,0.741,3.833,2.016,5.414L2,25.667l5.613-1.441c2.339,1.317,5.237,2.107,8.387,2.107c7.732,0,14-4.701,14-10.5C30,10.034,23.732,5.333,16,5.333z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Bug();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Bug = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Bug.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Bug\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.589,10.903l-5.828,1.612c-0.534-1.419-1.338-2.649-2.311-3.628l3.082-5.44c0.271-0.48,0.104-1.092-0.38-1.365c-0.479-0.271-1.09-0.102-1.36,0.377l-2.924,5.162c-0.604-0.383-1.24-0.689-1.9-0.896c-0.416-1.437-1.652-2.411-3.058-2.562c-0.001-0.004-0.002-0.008-0.003-0.012c-0.061-0.242-0.093-0.46-0.098-0.65c-0.005-0.189,0.012-0.351,0.046-0.479c0.037-0.13,0.079-0.235,0.125-0.317c0.146-0.26,0.34-0.43,0.577-0.509c0.023,0.281,0.142,0.482,0.352,0.601c0.155,0.088,0.336,0.115,0.546,0.086c0.211-0.031,0.376-0.152,0.496-0.363c0.105-0.186,0.127-0.389,0.064-0.607c-0.064-0.219-0.203-0.388-0.414-0.507c-0.154-0.087-0.314-0.131-0.482-0.129c-0.167,0.001-0.327,0.034-0.481,0.097c-0.153,0.063-0.296,0.16-0.429,0.289c-0.132,0.129-0.241,0.271-0.33,0.426c-0.132,0.234-0.216,0.496-0.25,0.783c-0.033,0.286-0.037,0.565-0.009,0.84c0.017,0.16,0.061,0.301,0.094,0.449c-0.375-0.021-0.758,0.002-1.14,0.108c-0.482,0.133-0.913,0.36-1.28,0.653c-0.052-0.172-0.098-0.344-0.18-0.518c-0.116-0.249-0.263-0.486-0.438-0.716c-0.178-0.229-0.384-0.41-0.618-0.543C9.904,3.059,9.737,2.994,9.557,2.951c-0.18-0.043-0.352-0.052-0.516-0.027s-0.318,0.08-0.463,0.164C8.432,3.172,8.318,3.293,8.23,3.445C8.111,3.656,8.08,3.873,8.136,4.092c0.058,0.221,0.181,0.384,0.367,0.49c0.21,0.119,0.415,0.138,0.611,0.056C9.31,4.556,9.451,4.439,9.539,4.283c0.119-0.21,0.118-0.443-0.007-0.695c0.244-0.055,0.497-0.008,0.757,0.141c0.081,0.045,0.171,0.115,0.27,0.208c0.097,0.092,0.193,0.222,0.286,0.388c0.094,0.166,0.179,0.368,0.251,0.608c0.013,0.044,0.023,0.098,0.035,0.146c-0.911,0.828-1.357,2.088-1.098,3.357c-0.582,0.584-1.072,1.27-1.457,2.035l-5.16-2.926c-0.48-0.271-1.092-0.102-1.364,0.377C1.781,8.404,1.95,9.016,2.43,9.289l5.441,3.082c-0.331,1.34-0.387,2.807-0.117,4.297l-5.828,1.613c-0.534,0.147-0.846,0.699-0.698,1.231c0.147,0.53,0.697,0.843,1.231,0.694l5.879-1.627c0.503,1.057,1.363,2.28,2.371,3.443l-3.194,5.639c-0.272,0.481-0.104,1.092,0.378,1.363c0.239,0.137,0.512,0.162,0.758,0.094c0.248-0.068,0.469-0.229,0.604-0.471l2.895-5.109c2.7,2.594,5.684,4.123,5.778,1.053c1.598,2.56,3.451-0.338,4.502-3.976l5.203,2.947c0.24,0.138,0.514,0.162,0.762,0.094c0.246-0.067,0.467-0.229,0.603-0.471c0.272-0.479,0.104-1.091-0.377-1.362l-5.701-3.229c0.291-1.505,0.422-2.983,0.319-4.138l5.886-1.627c0.53-0.147,0.847-0.697,0.696-1.229C29.673,11.068,29.121,10.756,28.589,10.903z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Calendar();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Calendar = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Calendar.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Calendar\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M11.758,15.318c0.312-0.3,0.408-0.492,0.408-0.492h0.024c0,0-0.012,0.264-0.012,0.528v5.469h-1.871v1.031h4.87v-1.031H13.33v-7.436h-1.055l-2.027,1.967l0.719,0.744L11.758,15.318zM16.163,21.207c0,0.205,0.024,0.42,0.06,0.647h5.457v-1.031h-4.197c0.023-1.931,4.065-2.362,4.065-5.146c0-1.463-1.114-2.436-2.674-2.436c-1.907,0-2.675,1.607-2.675,1.607l0.875,0.587c0,0,0.6-1.08,1.716-1.08c0.887,0,1.522,0.563,1.522,1.403C20.312,17.754,16.163,18.186,16.163,21.207zM12,3.604h-2v3.335h2V3.604zM23,4.77v3.17h-4V4.77h-6v3.168H9.002V4.77H6.583v21.669h18.833V4.77H23zM24.417,25.438H7.584V10.522h16.833V25.438zM22,3.604h-2v3.335h2V3.604z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Cart();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Cart = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Cart.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Cart\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M29.02,11.754L8.416,9.473L7.16,4.716C7.071,4.389,6.772,4.158,6.433,4.158H3.341C3.114,3.866,2.775,3.667,2.377,3.667c-0.686,0-1.242,0.556-1.242,1.242c0,0.686,0.556,1.242,1.242,1.242c0.399,0,0.738-0.201,0.965-0.493h2.512l5.23,19.8c-0.548,0.589-0.891,1.373-0.891,2.242c0,1.821,1.473,3.293,3.293,3.293c1.82,0,3.294-1.472,3.297-3.293c0-0.257-0.036-0.504-0.093-0.743h5.533c-0.056,0.239-0.092,0.486-0.092,0.743c0,1.821,1.475,3.293,3.295,3.293s3.295-1.472,3.295-3.293c0-1.82-1.473-3.295-3.295-3.297c-0.951,0.001-1.801,0.409-2.402,1.053h-7.136c-0.601-0.644-1.451-1.052-2.402-1.053c-0.379,0-0.738,0.078-1.077,0.196l-0.181-0.685H26.81c1.157-0.027,2.138-0.83,2.391-1.959l1.574-7.799c0.028-0.145,0.041-0.282,0.039-0.414C30.823,12.733,30.051,11.86,29.02,11.754zM25.428,27.994c-0.163,0-0.295-0.132-0.297-0.295c0.002-0.165,0.134-0.297,0.297-0.297s0.295,0.132,0.297,0.297C25.723,27.862,25.591,27.994,25.428,27.994zM27.208,20.499l0.948-0.948l-0.318,1.578L27.208,20.499zM12.755,11.463l1.036,1.036l-1.292,1.292l-1.292-1.292l1.087-1.087L12.755,11.463zM17.253,11.961l0.538,0.538l-1.292,1.292l-1.292-1.292l0.688-0.688L17.253,11.961zM9.631,14.075l0.868-0.868l1.292,1.292l-1.292,1.292l-0.564-0.564L9.631,14.075zM9.335,12.956l-0.328-1.24L9.792,12.5L9.335,12.956zM21.791,16.499l-1.292,1.292l-1.292-1.292l1.292-1.292L21.791,16.499zM21.207,14.5l1.292-1.292l1.292,1.292l-1.292,1.292L21.207,14.5zM18.5,15.791l-1.293-1.292l1.292-1.292l1.292,1.292L18.5,15.791zM17.791,16.499L16.5,17.791l-1.292-1.292l1.292-1.292L17.791,16.499zM14.499,15.791l-1.292-1.292l1.292-1.292l1.292,1.292L14.499,15.791zM13.791,16.499l-1.292,1.291l-1.292-1.291l1.292-1.292L13.791,16.499zM10.499,17.207l1.292,1.292l-0.785,0.784l-0.54-2.044L10.499,17.207zM11.302,20.404l1.197-1.197l1.292,1.292L12.5,21.791l-1.131-1.13L11.302,20.404zM13.208,18.499l1.291-1.292l1.292,1.292L14.5,19.791L13.208,18.499zM16.5,19.207l1.292,1.292L16.5,21.79l-1.292-1.291L16.5,19.207zM17.208,18.499l1.292-1.292l1.291,1.292L18.5,19.79L17.208,18.499zM20.499,19.207l1.292,1.292L20.5,21.79l-1.292-1.292L20.499,19.207zM21.207,18.499l1.292-1.292l1.292,1.292l-1.292,1.292L21.207,18.499zM23.207,16.499l1.292-1.292l1.292,1.292l-1.292,1.292L23.207,16.499zM25.207,14.499l1.292-1.292L27.79,14.5l-1.291,1.292L25.207,14.499zM24.499,13.792l-1.156-1.156l2.082,0.23L24.499,13.792zM21.791,12.5l-1.292,1.292L19.207,12.5l0.29-0.29l2.253,0.25L21.791,12.5zM14.5,11.791l-0.152-0.152l0.273,0.03L14.5,11.791zM10.5,11.792l-0.65-0.65l1.171,0.129L10.5,11.792zM14.5,21.207l1.205,1.205h-2.409L14.5,21.207zM18.499,21.207l1.206,1.206h-2.412L18.499,21.207zM22.499,21.207l1.208,1.207l-2.414-0.001L22.499,21.207zM23.207,20.499l1.292-1.292l1.292,1.292l-1.292,1.292L23.207,20.499zM25.207,18.499l1.292-1.291l1.291,1.291l-1.291,1.292L25.207,18.499zM28.499,17.791l-1.291-1.292l1.291-1.291l0.444,0.444l-0.429,2.124L28.499,17.791zM29.001,13.289l-0.502,0.502l-0.658-0.658l1.016,0.112C28.911,13.253,28.956,13.271,29.001,13.289zM13.487,27.994c-0.161,0-0.295-0.132-0.295-0.295c0-0.165,0.134-0.297,0.295-0.297c0.163,0,0.296,0.132,0.296,0.297C13.783,27.862,13.651,27.994,13.487,27.994zM26.81,22.414h-1.517l1.207-1.207l0.93,0.93C27.243,22.306,27.007,22.428,26.81,22.414z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Ccw();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Ccw = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Ccw.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Ccw\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Chat();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Chat = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Chat.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Chat\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.985,5.972c-7.563,0-13.695,4.077-13.695,9.106c0,2.877,2.013,5.44,5.147,7.108c-0.446,1.479-1.336,3.117-3.056,4.566c0,0,4.015-0.266,6.851-3.143c0.163,0.04,0.332,0.07,0.497,0.107c-0.155-0.462-0.246-0.943-0.246-1.443c0-3.393,3.776-6.05,8.599-6.05c3.464,0,6.379,1.376,7.751,3.406c1.168-1.34,1.847-2.892,1.847-4.552C29.68,10.049,23.548,5.972,15.985,5.972zM27.68,22.274c0-2.79-3.401-5.053-7.599-5.053c-4.196,0-7.599,2.263-7.599,5.053c0,2.791,3.403,5.053,7.599,5.053c0.929,0,1.814-0.116,2.637-0.319c1.573,1.597,3.801,1.744,3.801,1.744c-0.954-0.804-1.447-1.713-1.695-2.534C26.562,25.293,27.68,23.871,27.68,22.274z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Check();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Check = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Check.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Check\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M2.379,14.729 5.208,11.899 12.958,19.648 25.877,6.733 28.707,9.561 12.958,25.308z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Chrome();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Chrome = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Chrome.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Chrome\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.318,7.677c0.071-0.029,0.148-0.046,0.229-0.046h11.949c-2.533-3.915-6.938-6.506-11.949-6.506c-5.017,0-9.428,2.598-11.959,6.522l4.291,7.431C8.018,11.041,11.274,7.796,15.318,7.677zM28.196,8.84h-8.579c2.165,1.357,3.605,3.763,3.605,6.506c0,1.321-0.334,2.564-0.921,3.649c-0.012,0.071-0.035,0.142-0.073,0.209l-5.973,10.347c7.526-0.368,13.514-6.587,13.514-14.205C29.77,13.002,29.201,10.791,28.196,8.84zM15.547,23.022c-2.761,0-5.181-1.458-6.533-3.646c-0.058-0.046-0.109-0.103-0.149-0.171L2.89,8.855c-1,1.946-1.565,4.153-1.565,6.492c0,7.624,5.999,13.846,13.534,14.205l4.287-7.425C18.073,22.698,16.848,23.022,15.547,23.022zM9.08,15.347c0,1.788,0.723,3.401,1.894,4.573c1.172,1.172,2.785,1.895,4.573,1.895c1.788,0,3.401-0.723,4.573-1.895s1.895-2.785,1.895-4.573c0-1.788-0.723-3.4-1.895-4.573c-1.172-1.171-2.785-1.894-4.573-1.894c-1.788,0-3.401,0.723-4.573,1.894C9.803,11.946,9.081,13.559,9.08,15.347z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Clip();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Clip = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Clip.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Clip\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M23.898,6.135c-1.571-1.125-3.758-0.764-4.884,0.808l-8.832,12.331c-0.804,1.122-0.546,2.684,0.577,3.488c1.123,0.803,2.684,0.545,3.488-0.578l6.236-8.706l-0.813-0.583l-6.235,8.707h0c-0.483,0.672-1.42,0.828-2.092,0.347c-0.673-0.481-0.827-1.419-0.345-2.093h0l8.831-12.33l0.001-0.001l-0.002-0.001c0.803-1.119,2.369-1.378,3.489-0.576c1.12,0.803,1.379,2.369,0.577,3.489v-0.001l-9.68,13.516l0.001,0.001c-1.124,1.569-3.316,1.931-4.885,0.808c-1.569-1.125-1.93-3.315-0.807-4.885l7.035-9.822l-0.813-0.582l-7.035,9.822c-1.447,2.02-0.982,4.83,1.039,6.277c2.021,1.448,4.831,0.982,6.278-1.037l9.68-13.516C25.83,9.447,25.47,7.261,23.898,6.135z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Clock();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Clock = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Clock.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Clock\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Cloud();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Cloud = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Cloud.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Cloud\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h15.875c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Cloud2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Cloud2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Cloud2.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Cloud2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M7.562,24.812c-3.313,0-6-2.687-6-6l0,0c0.002-2.659,1.734-4.899,4.127-5.684l0,0c0.083-2.26,1.937-4.064,4.216-4.066l0,0c0.73,0,1.415,0.19,2.01,0.517l0,0c1.266-2.105,3.57-3.516,6.208-3.517l0,0c3.947,0.002,7.157,3.155,7.248,7.079l0,0c2.362,0.804,4.062,3.034,4.064,5.671l0,0c0,3.313-2.687,6-6,6l0,0H7.562L7.562,24.812zM24.163,14.887c-0.511-0.095-0.864-0.562-0.815-1.079l0,0c0.017-0.171,0.027-0.336,0.027-0.497l0,0c-0.007-2.899-2.352-5.245-5.251-5.249l0,0c-2.249-0.002-4.162,1.418-4.911,3.41l0,0c-0.122,0.323-0.406,0.564-0.748,0.63l0,0c-0.34,0.066-0.694-0.052-0.927-0.309l0,0c-0.416-0.453-0.986-0.731-1.633-0.731l0,0c-1.225,0.002-2.216,0.993-2.22,2.218l0,0c0,0.136,0.017,0.276,0.045,0.424l0,0c0.049,0.266-0.008,0.54-0.163,0.762l0,0c-0.155,0.223-0.392,0.371-0.657,0.414l0,0c-1.9,0.313-3.352,1.949-3.35,3.931l0,0c0.004,2.209,1.792,3.995,4.001,4.001l0,0h15.874c2.209-0.006,3.994-1.792,3.999-4.001l0,0C27.438,16.854,26.024,15.231,24.163,14.887L24.163,14.887\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.CloudDown();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.CloudDown = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.CloudDown.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.CloudDown\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h3.404l-0.707-0.707c-0.377-0.377-0.585-0.879-0.585-1.413c0-0.533,0.208-1.035,0.585-1.412l0.556-0.557c0.4-0.399,0.937-0.628,1.471-0.628c0.027,0,0.054,0,0.08,0.002v-0.472c0-1.104,0.898-2.002,2-2.002h3.266c1.103,0,2,0.898,2,2.002v0.472c0.027-0.002,0.054-0.002,0.081-0.002c0.533,0,1.07,0.229,1.47,0.63l0.557,0.552c0.78,0.781,0.78,2.05,0,2.828l-0.706,0.707h2.403c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z M21.033,20.986l-0.556-0.555c-0.39-0.389-0.964-0.45-1.276-0.137c-0.312,0.312-0.568,0.118-0.568-0.432v-1.238c0-0.55-0.451-1-1-1h-3.265c-0.55,0-1,0.45-1,1v1.238c0,0.55-0.256,0.744-0.569,0.432c-0.312-0.313-0.887-0.252-1.276,0.137l-0.556,0.555c-0.39,0.389-0.39,1.024-0.001,1.413l4.328,4.331c0.194,0.194,0.451,0.291,0.707,0.291s0.512-0.097,0.707-0.291l4.327-4.331C21.424,22.011,21.423,21.375,21.033,20.986z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.CloudUp();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.CloudUp = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.CloudUp.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.CloudUp\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h2.312c-0.126-0.266-0.2-0.556-0.2-0.859c0-0.535,0.208-1.04,0.587-1.415l4.325-4.329c0.375-0.377,0.877-0.585,1.413-0.585c0.54,0,1.042,0.21,1.417,0.587l4.323,4.329c0.377,0.373,0.585,0.878,0.585,1.413c0,0.304-0.073,0.594-0.2,0.859h1.312c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z M16.706,17.916c-0.193-0.195-0.45-0.291-0.706-0.291s-0.512,0.096-0.707,0.291l-4.327,4.33c-0.39,0.389-0.389,1.025,0.001,1.414l0.556,0.555c0.39,0.389,0.964,0.449,1.276,0.137s0.568-0.119,0.568,0.432v1.238c0,0.549,0.451,1,1,1h3.265c0.551,0,1-0.451,1-1v-1.238c0-0.551,0.256-0.744,0.569-0.432c0.312,0.312,0.887,0.252,1.276-0.137l0.556-0.555c0.39-0.389,0.39-1.025,0.001-1.414L16.706,17.916z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Cloudy();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Cloudy = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Cloudy.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Cloudy\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.378,6.781c0.41,0.988,1.938,0.346,1.524-0.648C15.708,5.667,15.515,5.2,15.32,4.734c-0.289-0.695-0.875-3.233-2.042-2.747c-1.03,0.433-0.128,1.846,0.142,2.494C13.739,5.248,14.059,6.015,14.378,6.781M20.8,7.223c1.094,0.453,1.538-1.551,1.813-2.216c0.281-0.677,1.478-2.565,0.357-3.029c-1.092-0.453-1.537,1.548-1.813,2.216C20.876,4.872,19.68,6.757,20.8,7.223M18.137,6.692c1.183,0,0.829-2.019,0.829-2.742c0-0.732,0.383-2.935-0.829-2.935c-1.183,0-0.828,2.019-0.828,2.742C17.309,4.49,16.926,6.692,18.137,6.692M23.058,8.729c0.852,0.85,2.142-0.972,2.659-1.49c0.512-0.513,2.187-1.687,1.352-2.524c-0.834-0.836-2.013,0.843-2.522,1.353C24.028,6.585,22.198,7.874,23.058,8.729M24.565,10.986c0.448,1.091,2.183-0.01,2.849-0.286c0.676-0.28,2.858-0.771,2.394-1.89c-0.455-1.091-2.181,0.008-2.849,0.285C26.281,9.377,24.102,9.866,24.565,10.986M12.036,8.742c0.752,0.75,1.932-0.415,1.17-1.173c-0.253-0.347-0.646-0.645-0.949-0.946c-0.541-0.539-2.162-2.799-3.068-1.889c-0.79,0.791,0.586,1.755,1.083,2.25C10.859,7.57,11.447,8.156,12.036,8.742M29.365,17.397c-0.768-0.317-1.534-0.635-2.302-0.952c-0.646-0.268-2.07-1.169-2.495-0.135c-0.481,1.168,2.054,1.747,2.751,2.035c0.455,0.188,0.911,0.377,1.367,0.565C29.7,19.331,30.379,17.816,29.365,17.397M29.942,12.817c-0.83,0-1.66,0-2.49,0c-0.701,0-2.357-0.288-2.355,0.83c0,1.262,2.567,0.827,3.319,0.827c0.493,0,0.986,0,1.479-0.001C30.99,14.473,31.043,12.815,29.942,12.817M24.234,18.568c-0.673-0.673-1.773,0.189-1.281,1.007c-0.295-0.264-0.614-0.499-0.961-0.69c3.894-2.866,3.328-9.006-1.021-11.107c-2.024-0.978-4.481-0.828-6.368,0.394c-0.871,0.564-1.603,1.336-2.119,2.236c-0.262,0.456-0.468,0.943-0.612,1.449c-0.074,0.258-0.131,0.521-0.172,0.786c-0.083,0.534-0.109,0.553-0.553,0.871c-0.182-0.957-1.64-0.675-2.326-0.674c-0.815,0.001-1.963-0.217-2.752,0.046c-0.867,0.289-0.652,1.615,0.263,1.613c0.324,0.052,0.701-0.001,1.028-0.001c0.904-0.001,1.809-0.002,2.713-0.003c-0.308,0.352-0.496,0.969-0.94,0.77c-0.467-0.209-0.978-0.319-1.49-0.319c-0.951,0-1.877,0.375-2.561,1.036c-0.681,0.658-1.088,1.569-1.123,2.516c-0.944,0.31-1.791,0.891-2.421,1.658c-2.756,3.354-0.265,8.554,4.058,8.554v-0.002c3.597,0,7.194,0,10.792,0c1.341,0,2.843,0.167,4.168-0.113c3.652-0.772,5.361-5.21,3.133-8.229c0.548,0.547,1.096,1.094,1.644,1.641c0.183,0.183,0.364,0.424,0.575,0.574c0.552,0.552,1.524,0.066,1.403-0.713c-0.097-0.622-1.042-1.267-1.448-1.673C25.319,19.652,24.776,19.11,24.234,18.568M18.137,8.787c4.559,0.009,6.576,5.979,2.912,8.734c-0.637-3.505-4.161-5.824-7.629-5.03C13.943,10.367,15.852,8.792,18.137,8.787M22.895,24.08c-0.633,3.346-4.149,2.879-6.68,2.879c-3.017,0-6.033,0-9.049,0c-0.767,0-1.62,0.084-2.373-0.095c-2.274-0.538-3.416-3.242-2.172-5.235c0.678-1.087,1.568-1.19,2.626-1.67c0.604-0.273,0.456-0.807,0.456-1.331c0.002-0.597,0.284-1.169,0.756-1.533c0.787-0.608,1.943-0.497,2.611,0.234c1.098,1.205,1.96-1.346,2.507-1.893c2.025-2.025,5.475-1.708,7.068,0.684c0.344,0.516,0.581,1.102,0.693,1.712c0.097,0.529-0.115,1.341,0.188,1.796c0.291,0.47,0.943,0.463,1.397,0.68c0.508,0.23,0.963,0.591,1.304,1.034C22.834,22.125,23.064,23.107,22.895,24.08M6.906,9.917c0.881,0.364,1.763,0.727,2.644,1.091c0.353,0.146,0.707,0.292,1.06,0.437c0.997,0.412,1.637-1.119,0.642-1.526C10.47,9.441,9.456,9.177,8.609,8.828c-0.354-0.146-0.707-0.292-1.06-0.437C6.554,7.98,5.912,9.505,6.906,9.917\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Code();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Code = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Code.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Code\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M8.982,7.107L0.322,15.77l8.661,8.662l3.15-3.15L6.621,15.77l5.511-5.511L8.982,7.107zM21.657,7.107l-3.148,3.151l5.511,5.511l-5.511,5.511l3.148,3.15l8.662-8.662L21.657,7.107z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.CodeTalk();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.CodeTalk = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.CodeTalk.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.CodeTalk\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM13.704,19.47l-2.338,2.336l-6.43-6.431l6.429-6.432l2.339,2.341l-4.091,4.091L13.704,19.47zM20.775,21.803l-2.337-2.339l4.092-4.09l-4.092-4.092l2.337-2.339l6.43,6.426L20.775,21.803z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.CommandLine();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.CommandLine = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.CommandLine.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.CommandLine\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M2.021,9.748L2.021,9.748V9.746V9.748zM2.022,9.746l5.771,5.773l-5.772,5.771l2.122,2.123l7.894-7.895L4.143,7.623L2.022,9.746zM12.248,23.269h14.419V20.27H12.248V23.269zM16.583,17.019h10.084V14.02H16.583V17.019zM12.248,7.769v3.001h14.419V7.769H12.248z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Connect();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Connect = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Connect.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Connect\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.06,13.719c-0.944-5.172-5.461-9.094-10.903-9.094v4c3.917,0.006,7.085,3.176,7.094,7.094c-0.009,3.917-3.177,7.085-7.094,7.093v4.002c5.442-0.004,9.959-3.926,10.903-9.096h4.69v-3.999H25.06zM20.375,15.719c0-3.435-2.784-6.219-6.219-6.219c-2.733,0-5.05,1.766-5.884,4.218H1.438v4.001h6.834c0.833,2.452,3.15,4.219,5.884,4.219C17.591,21.938,20.375,19.153,20.375,15.719z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Contract();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Contract = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Contract.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Contract\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.083,18.895l-8.428-2.259l2.258,8.428l1.838-1.837l7.053,7.053l2.476-2.476l-7.053-7.053L25.083,18.895zM5.542,11.731l8.428,2.258l-2.258-8.428L9.874,7.398L3.196,0.72L0.72,3.196l6.678,6.678L5.542,11.731zM7.589,20.935l-6.87,6.869l2.476,2.476l6.869-6.869l1.858,1.857l2.258-8.428l-8.428,2.258L7.589,20.935zM23.412,10.064l6.867-6.87l-2.476-2.476l-6.868,6.869l-1.856-1.856l-2.258,8.428l8.428-2.259L23.412,10.064z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Crop();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Crop = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Crop.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Crop\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.303,21.707V8.275l4.48-4.421l-2.021-2.048l-4.126,4.07H8.761V2.083H5.882v3.793H1.8v2.877h4.083v15.832h15.542v4.609h2.878v-4.609H29.2v-2.878H24.303zM19.72,8.753L8.761,19.565V8.753H19.72zM10.688,21.706l10.735-10.591l0.001,10.592L10.688,21.706z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Cross();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Cross = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Cross.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Cross\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Cube();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Cube = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Cube.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Cube\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.5,3.029l-10.8,6.235L4.7,21.735L15.5,27.971l10.8-6.235V9.265L15.5,3.029zM24.988,10.599L16,15.789v10.378c0,0.275-0.225,0.5-0.5,0.5s-0.5-0.225-0.5-0.5V15.786l-8.987-5.188c-0.239-0.138-0.321-0.444-0.183-0.683c0.138-0.238,0.444-0.321,0.683-0.183l8.988,5.189l8.988-5.189c0.238-0.138,0.545-0.055,0.684,0.184C25.309,10.155,25.227,10.461,24.988,10.599z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Customer();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Customer = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Customer.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Customer\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.523,23.813c-0.518-0.51-6.795-2.938-7.934-3.396c-1.132-0.451-1.584-1.697-1.584-1.697s-0.51,0.282-0.51-0.51c0-0.793,0.51,0.51,1.021-2.548c0,0,1.414-0.397,1.133-3.68l-0.338,0.001c0,0,0.85-3.511,0-4.699c-0.854-1.188-1.188-1.981-3.062-2.548c-1.869-0.567-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.793-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.32s0.283,3.059,0.566,3.624l-0.337,0.112c-0.283,3.283,1.132,3.681,1.132,3.681c0.509,3.058,1.019,1.755,1.019,2.548c0,0.792-0.51,0.51-0.51,0.51s-0.452,1.246-1.584,1.697c-1.132,0.453-7.416,2.887-7.927,3.396c-0.511,0.521-0.453,2.896-0.453,2.896h12.036l0.878-3.459l-0.781-0.781l1.344-1.344l1.344,1.344l-0.781,0.781l0.879,3.459h12.035C28.977,26.709,29.039,24.332,28.523,23.813z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Db();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Db = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Db.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Db\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.499,23.438c-3.846,0-7.708-0.987-9.534-3.117c-0.054,0.236-0.09,0.48-0.09,0.737v3.877c0,3.435,4.988,4.998,9.625,4.998s9.625-1.563,9.625-4.998v-3.877c0-0.258-0.036-0.501-0.09-0.737C23.209,22.451,19.347,23.438,15.499,23.438zM15.499,15.943c-3.846,0-7.708-0.987-9.533-3.117c-0.054,0.236-0.091,0.479-0.091,0.736v3.877c0,3.435,4.988,4.998,9.625,4.998s9.625-1.563,9.625-4.998v-3.877c0-0.257-0.036-0.501-0.09-0.737C23.209,14.956,19.347,15.943,15.499,15.943zM15.5,1.066c-4.637,0-9.625,1.565-9.625,5.001v3.876c0,3.435,4.988,4.998,9.625,4.998s9.625-1.563,9.625-4.998V6.067C25.125,2.632,20.137,1.066,15.5,1.066zM15.5,9.066c-4.211,0-7.625-1.343-7.625-3c0-1.656,3.414-3,7.625-3s7.625,1.344,7.625,3C23.125,7.724,19.711,9.066,15.5,9.066z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Detour();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Detour = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Detour.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Detour\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M29.342,15.5l-7.556-4.363v2.614H18.75c-1.441-0.004-2.423,1.002-2.875,1.784c-0.735,1.222-1.056,2.561-1.441,3.522c-0.135,0.361-0.278,0.655-0.376,0.817c-1.626,0-0.998,0-2.768,0c-0.213-0.398-0.571-1.557-0.923-2.692c-0.237-0.676-0.5-1.381-1.013-2.071C8.878,14.43,7.89,13.726,6.75,13.75H2.812v3.499c0,0,0.358,0,1.031,0h2.741c0.008,0.013,0.018,0.028,0.029,0.046c0.291,0.401,0.634,1.663,1.031,2.888c0.218,0.623,0.455,1.262,0.92,1.897c0.417,0.614,1.319,1.293,2.383,1.293H11c2.25,0,1.249,0,3.374,0c0.696,0.01,1.371-0.286,1.809-0.657c1.439-1.338,1.608-2.886,2.13-4.127c0.218-0.608,0.453-1.115,0.605-1.314c0.006-0.01,0.012-0.018,0.018-0.025h2.85v2.614L29.342,15.5zM10.173,14.539c0.568,0.76,0.874,1.559,1.137,2.311c0.04,0.128,0.082,0.264,0.125,0.399h2.58c0.246-0.697,0.553-1.479,1.005-2.228c0.252-0.438,0.621-0.887,1.08-1.272H9.43C9.735,14.003,9.99,14.277,10.173,14.539z\")\n  }\n})\n\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Diagram();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Diagram = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Diagram.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Diagram\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M6.812,17.202l7.396-3.665v-2.164h-0.834c-0.414,0-0.808-0.084-1.167-0.237v1.159l-7.396,3.667v2.912h2V17.202zM26.561,18.875v-2.913l-7.396-3.666v-1.158c-0.358,0.152-0.753,0.236-1.166,0.236h-0.832l-0.001,2.164l7.396,3.666v1.672H26.561zM16.688,18.875v-7.501h-2v7.501H16.688zM27.875,19.875H23.25c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C29.875,20.771,28.979,19.875,27.875,19.875zM8.125,19.875H3.5c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C10.125,20.771,9.229,19.875,8.125,19.875zM13.375,10.375H18c1.104,0,2-0.896,2-2V3.75c0-1.104-0.896-2-2-2h-4.625c-1.104,0-2,0.896-2,2v4.625C11.375,9.479,12.271,10.375,13.375,10.375zM18,19.875h-4.625c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2H18c1.104,0,2-0.896,2-2v-4.625C20,20.771,19.104,19.875,18,19.875z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Disconnect();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Disconnect = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Disconnect.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Disconnect\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M9.219,9.5c-2.733,0-5.05,1.766-5.884,4.218H1.438v4.001h1.897c0.833,2.452,3.15,4.219,5.884,4.219c3.435,0,6.219-2.784,6.219-6.219S12.653,9.5,9.219,9.5zM27.685,13.719c-0.944-5.172-5.461-9.094-10.903-9.094v4c3.917,0.006,7.085,3.176,7.094,7.094c-0.009,3.917-3.177,7.085-7.094,7.093v4.002c5.442-0.004,9.959-3.926,10.903-9.096h2.065v-3.999H27.685z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.DockBottom();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.DockBottom = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.DockBottom.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.DockBottom\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M3.083,7.333v16.334h24.833V7.333H3.083zM24.915,16.833H6.083v-6.501h18.833L24.915,16.833L24.915,16.833z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.DockLeft();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.DockLeft = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.DockLeft.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.DockLeft\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M3.084,7.333v16.334h24.832V7.333H3.084z M11.667,10.332h13.251v10.336H11.667V10.332z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.DockRight();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.DockRight = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.DockRight.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.DockRight\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M3.083,7.333v16.334h24.833V7.333H3.083z M19.333,20.668H6.083V10.332h13.25V20.668z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.DockTop();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.DockTop = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.DockTop.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.DockTop\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.916,23.667V7.333H3.083v16.334H27.916zM24.915,20.668H6.083v-6.501h18.833L24.915,20.668L24.915,20.668z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Download();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Download = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Download.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Download\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,28.792c-1.549,0-2.806-1.256-2.806-2.806s1.256-2.806,2.806-2.806c1.55,0,2.806,1.256,2.806,2.806S17.55,28.792,16,28.792zM16,21.087l-7.858-6.562h3.469V5.747h8.779v8.778h3.468L16,21.087z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Dry();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Dry = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Dry.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Dry\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.784,26.991c0,1.238-1.329,1.696-1.835,1.696c-0.504,0-1.536-0.413-1.65-1.812c0-0.354-0.288-0.642-0.644-0.642c-0.354,0-0.641,0.287-0.641,0.642c0.045,1.056,0.756,3.052,2.935,3.052c2.432,0,3.166-1.882,3.166-3.144v-8.176l-1.328-0.024C14.787,18.584,14.784,25.889,14.784,26.991zM15.584,9.804c-6.807,0-11.084,4.859-11.587,8.326c0.636-0.913,1.694-1.51,2.89-1.51c1.197,0,2.22,0.582,2.855,1.495c0.638-0.904,1.69-1.495,2.88-1.495c1.2,0,2.26,0.6,2.896,1.517c0.635-0.917,1.83-1.517,3.03-1.517c1.19,0,2.241,0.591,2.879,1.495c0.636-0.913,1.659-1.495,2.855-1.495c1.197,0,2.254,0.597,2.89,1.51C26.669,14.663,22.393,9.804,15.584,9.804zM14.733,7.125v2.081h1.323V7.125c0-0.365-0.296-0.661-0.661-0.661C15.029,6.464,14.733,6.76,14.733,7.125zM7.562,6.015c0.54,0.312,1.229,0.128,1.54-0.412c0.109-0.189,0.157-0.398,0.15-0.602L9.251,3.09L7.59,4.047c-0.178,0.095-0.333,0.24-0.441,0.428C6.837,5.015,7.022,5.703,7.562,6.015zM5.572,11.717c0.109-0.19,0.158-0.398,0.151-0.602L5.721,9.203l-1.66,0.957c-0.178,0.096-0.333,0.241-0.441,0.429c-0.311,0.539-0.127,1.229,0.413,1.539C4.571,12.44,5.26,12.256,5.572,11.717zM10.523,9.355c0.539,0.312,1.229,0.126,1.541-0.412c0.109-0.189,0.156-0.398,0.15-0.603L12.214,6.43l-1.662,0.956c-0.177,0.097-0.332,0.241-0.441,0.43C9.799,8.354,9.984,9.044,10.523,9.355zM15.251,3.998c0.539,0.312,1.229,0.126,1.54-0.412c0.11-0.19,0.157-0.398,0.15-0.603L16.94,1.072l-1.661,0.956c-0.178,0.097-0.332,0.242-0.441,0.43C14.526,2.998,14.711,3.687,15.251,3.998zM19.348,8.914c0.539,0.312,1.228,0.128,1.541-0.412c0.109-0.189,0.156-0.398,0.149-0.602h-0.001V5.988l-1.661,0.957c-0.178,0.096-0.332,0.241-0.441,0.429C18.623,7.914,18.809,8.603,19.348,8.914zM23.633,5.196c0.54,0.312,1.23,0.126,1.542-0.413c0.109-0.189,0.156-0.398,0.149-0.602h-0.001V2.27l-1.662,0.957c-0.177,0.096-0.331,0.24-0.44,0.43C22.909,4.195,23.094,4.885,23.633,5.196zM27.528,8.51l-1.659,0.956c-0.18,0.097-0.334,0.242-0.443,0.43c-0.312,0.539-0.127,1.229,0.413,1.54c0.539,0.312,1.229,0.127,1.541-0.412c0.109-0.19,0.158-0.398,0.151-0.603L27.528,8.51z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Employee();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Employee = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Employee.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Employee\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.523,23.813c-0.518-0.51-6.795-2.938-7.934-3.396c-1.132-0.451-1.584-1.697-1.584-1.697s-0.51,0.282-0.51-0.51c0-0.793,0.51,0.51,1.021-2.548c0,0,1.414-0.397,1.133-3.68l-0.338,0.001c0,0,0.85-3.511,0-4.699c-0.854-1.188-1.188-1.981-3.062-2.548c-1.869-0.567-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.793-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.32s0.283,3.059,0.566,3.624l-0.337,0.112c-0.283,3.283,1.132,3.681,1.132,3.681c0.509,3.058,1.019,1.755,1.019,2.548c0,0.792-0.51,0.51-0.51,0.51s-0.452,1.246-1.584,1.697c-1.132,0.453-7.416,2.887-7.927,3.396c-0.511,0.521-0.453,2.896-0.453,2.896h26.954C28.977,26.709,29.039,24.332,28.523,23.813zM22.188,26.062h-4.562v-1.25h4.562V26.062z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.End();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.End = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.End.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.End\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.167,5.5,21.167,13.681,6.684,5.318,6.684,25.682,21.167,17.318,21.167,25.5,25.5,25.5,25.5,5.5z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Ethernet();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Ethernet = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Ethernet.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Ethernet\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.5,8.5v3.168l3.832,3.832L22.5,19.332V22.5l7-7L22.5,8.5zM8.5,22.5v-3.168L4.667,15.5L8.5,11.668V8.5l-7,7L8.5,22.5zM15.5,14.101c-0.928,0-1.68,0.751-1.68,1.68c0,0.927,0.752,1.681,1.68,1.681c0.927,0,1.68-0.754,1.68-1.681C17.18,14.852,16.427,14.101,15.5,14.101zM10.46,14.101c-0.928,0-1.68,0.751-1.68,1.68c0,0.927,0.752,1.681,1.68,1.681s1.68-0.754,1.68-1.681C12.14,14.852,11.388,14.101,10.46,14.101zM20.541,14.101c-0.928,0-1.682,0.751-1.682,1.68c0,0.927,0.754,1.681,1.682,1.681s1.68-0.754,1.68-1.681C22.221,14.852,21.469,14.101,20.541,14.101z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Exchange();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Exchange = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Exchange.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Exchange\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.786,12.876l7.556-4.363l-7.556-4.363v2.598H2.813v3.5h18.973V12.876zM10.368,18.124l-7.556,4.362l7.556,4.362V24.25h18.974v-3.501H10.368V18.124z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Expand();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Expand = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Expand.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Expand\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.545,23.328,17.918,15.623,25.534,8.007,27.391,9.864,29.649,1.436,21.222,3.694,23.058,5.53,15.455,13.134,7.942,5.543,9.809,3.696,1.393,1.394,3.608,9.833,5.456,8.005,12.98,15.608,5.465,23.123,3.609,21.268,1.351,29.695,9.779,27.438,7.941,25.6,15.443,18.098,23.057,25.791,21.19,27.638,29.606,29.939,27.393,21.5z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Export();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Export = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Export.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Export\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.086,20.904c-1.805,3.113-5.163,5.212-9.023,5.219c-5.766-0.01-10.427-4.672-10.438-10.435C4.636,9.922,9.297,5.261,15.063,5.25c3.859,0.007,7.216,2.105,9.022,5.218l3.962,2.284l0.143,0.082C26.879,6.784,21.504,2.25,15.063,2.248C7.64,2.25,1.625,8.265,1.624,15.688c0.002,7.42,6.017,13.435,13.439,13.437c6.442-0.002,11.819-4.538,13.127-10.589l-0.141,0.081L24.086,20.904zM28.4,15.688l-7.15-4.129v2.297H10.275v3.661H21.25v2.297L28.4,15.688z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Fave();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Fave = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Fave.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Fave\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.132,7.971c-2.203-2.205-5.916-2.098-8.25,0.235L15.5,8.588l-0.382-0.382c-2.334-2.333-6.047-2.44-8.25-0.235c-2.204,2.203-2.098,5.916,0.235,8.249l8.396,8.396l8.396-8.396C26.229,13.887,26.336,10.174,24.132,7.971z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Feed();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Feed = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Feed.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Feed\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.135,16.762c3.078,0,5.972,1.205,8.146,3.391c2.179,2.187,3.377,5.101,3.377,8.202h4.745c0-9.008-7.299-16.335-16.269-16.335V16.762zM4.141,8.354c10.973,0,19.898,8.975,19.898,20.006h4.743c0-13.646-11.054-24.749-24.642-24.749V8.354zM10.701,25.045c0,1.815-1.471,3.287-3.285,3.287s-3.285-1.472-3.285-3.287c0-1.813,1.471-3.285,3.285-3.285S10.701,23.231,10.701,25.045z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Ff();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Ff = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Ff.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Ff\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.5,15.5,15.2,9.552,15.2,15.153,5.5,9.552,5.5,21.447,15.2,15.847,15.2,21.447z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Firefox();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Firefox = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Firefox.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Firefox\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.4,22.469c0.479-0.964,0.851-1.991,1.095-3.066c0.953-3.661,0.666-6.854,0.666-6.854l-0.327,2.104c0,0-0.469-3.896-1.044-5.353c-0.881-2.231-1.273-2.214-1.274-2.21c0.542,1.379,0.494,2.169,0.483,2.288c-0.01-0.016-0.019-0.032-0.027-0.047c-0.131-0.324-0.797-1.819-2.225-2.878c-2.502-2.481-5.943-4.014-9.745-4.015c-4.056,0-7.705,1.745-10.238,4.525C5.444,6.5,5.183,5.938,5.159,5.317c0,0-0.002,0.002-0.006,0.005c0-0.011-0.003-0.021-0.003-0.031c0,0-1.61,1.247-1.436,4.612c-0.299,0.574-0.56,1.172-0.777,1.791c-0.375,0.817-0.75,2.004-1.059,3.746c0,0,0.133-0.422,0.399-0.988c-0.064,0.482-0.103,0.971-0.116,1.467c-0.09,0.845-0.118,1.865-0.039,3.088c0,0,0.032-0.406,0.136-1.021c0.834,6.854,6.667,12.165,13.743,12.165l0,0c1.86,0,3.636-0.37,5.256-1.036C24.938,27.771,27.116,25.196,28.4,22.469zM16.002,3.356c2.446,0,4.73,0.68,6.68,1.86c-2.274-0.528-3.433-0.261-3.423-0.248c0.013,0.015,3.384,0.589,3.981,1.411c0,0-1.431,0-2.856,0.41c-0.065,0.019,5.242,0.663,6.327,5.966c0,0-0.582-1.213-1.301-1.42c0.473,1.439,0.351,4.17-0.1,5.528c-0.058,0.174-0.118-0.755-1.004-1.155c0.284,2.037-0.018,5.268-1.432,6.158c-0.109,0.07,0.887-3.189,0.201-1.93c-4.093,6.276-8.959,2.539-10.934,1.208c1.585,0.388,3.267,0.108,4.242-0.559c0.982-0.672,1.564-1.162,2.087-1.047c0.522,0.117,0.87-0.407,0.464-0.872c-0.405-0.466-1.392-1.105-2.725-0.757c-0.94,0.247-2.107,1.287-3.886,0.233c-1.518-0.899-1.507-1.63-1.507-2.095c0-0.366,0.257-0.88,0.734-1.028c0.58,0.062,1.044,0.214,1.537,0.466c0.005-0.135,0.006-0.315-0.001-0.519c0.039-0.077,0.015-0.311-0.047-0.596c-0.036-0.287-0.097-0.582-0.19-0.851c0.01-0.002,0.017-0.007,0.021-0.021c0.076-0.344,2.147-1.544,2.299-1.659c0.153-0.114,0.55-0.378,0.506-1.183c-0.015-0.265-0.058-0.294-2.232-0.286c-0.917,0.003-1.425-0.894-1.589-1.245c0.222-1.231,0.863-2.11,1.919-2.704c0.02-0.011,0.015-0.021-0.008-0.027c0.219-0.127-2.524-0.006-3.76,1.604C9.674,8.045,9.219,7.95,8.71,7.95c-0.638,0-1.139,0.07-1.603,0.187c-0.05,0.013-0.122,0.011-0.208-0.001C6.769,8.04,6.575,7.88,6.365,7.672c0.161-0.18,0.324-0.356,0.495-0.526C9.201,4.804,12.43,3.357,16.002,3.356z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Flag();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Flag = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Flag.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Flag\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M26.04,9.508c0.138-0.533,0.15-1.407,0.028-1.943l-0.404-1.771c-0.122-0.536-0.665-1.052-1.207-1.146l-3.723-0.643c-0.542-0.094-1.429-0.091-1.97,0.007l-4.033,0.726c-0.542,0.098-1.429,0.108-1.973,0.023L8.812,4.146C8.817,4.165,8.826,4.182,8.83,4.201l2.701,12.831l1.236,0.214c0.542,0.094,1.428,0.09,1.97-0.007l4.032-0.727c0.541-0.097,1.429-0.107,1.973-0.022l4.329,0.675c0.544,0.085,0.906-0.288,0.807-0.829l-0.485-2.625c-0.1-0.541-0.069-1.419,0.068-1.952L26.04,9.508zM6.667,3.636C6.126,3.75,5.78,4.279,5.894,4.819l5.763,27.378H13.7L7.852,4.409C7.736,3.867,7.207,3.521,6.667,3.636z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Flickr();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Flickr = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Flickr.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Flickr\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.77,8.895c-2.379,0-4.479,1.174-5.77,2.969c-1.289-1.795-3.39-2.969-5.77-2.969c-3.924,0-7.105,3.181-7.105,7.105c0,3.924,3.181,7.105,7.105,7.105c2.379,0,4.48-1.175,5.77-2.97c1.29,1.795,3.391,2.97,5.77,2.97c3.925,0,7.105-3.182,7.105-7.105C28.875,12.075,25.694,8.895,21.77,8.895zM21.769,21.822c-3.211,0-5.821-2.61-5.821-5.821c0-3.213,2.61-5.824,5.821-5.824c3.213,0,5.824,2.611,5.824,5.824C27.593,19.212,24.981,21.822,21.769,21.822z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Folder();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Folder = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Folder.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Folder\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.625,26.75h-26.5V8.375h1.124c1.751,0,0.748-3.125,3-3.125c3.215,0,1.912,0,5.126,0c2.251,0,1.251,3.125,3.001,3.125h14.25V26.75z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Font();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Font = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Font.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Font\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.255,19.327l-1.017,0.131c-0.609,0.081-1.067,0.208-1.375,0.382c-0.521,0.293-0.779,0.76-0.779,1.398c0,0.484,0.178,0.867,0.532,1.146c0.354,0.28,0.774,0.421,1.262,0.421c0.593,0,1.164-0.138,1.72-0.412c0.938-0.453,1.4-1.188,1.4-2.229v-1.354c-0.205,0.131-0.469,0.229-0.792,0.328C22.883,19.229,22.564,19.29,22.255,19.327zM8.036,18.273h4.309l-2.113-6.063L8.036,18.273zM28.167,7.75H3.168c-0.552,0-1,0.448-1,1v16.583c0,0.553,0.448,1,1,1h24.999c0.554,0,1-0.447,1-1V8.75C29.167,8.198,28.721,7.75,28.167,7.75zM14.305,23.896l-1.433-4.109H7.488L6,23.896H4.094L9.262,10.17h2.099l4.981,13.727H14.305L14.305,23.896zM26.792,23.943c-0.263,0.074-0.461,0.121-0.599,0.141c-0.137,0.02-0.323,0.027-0.562,0.027c-0.579,0-0.999-0.204-1.261-0.615c-0.138-0.219-0.231-0.525-0.29-0.926c-0.344,0.449-0.834,0.839-1.477,1.169c-0.646,0.329-1.354,0.493-2.121,0.493c-0.928,0-1.688-0.28-2.273-0.844c-0.589-0.562-0.884-1.271-0.884-2.113c0-0.928,0.29-1.646,0.868-2.155c0.578-0.511,1.34-0.824,2.279-0.942l2.682-0.336c0.388-0.05,0.646-0.211,0.775-0.484c0.063-0.146,0.104-0.354,0.104-0.646c0-0.575-0.203-0.993-0.604-1.252c-0.408-0.26-0.99-0.389-1.748-0.389c-0.877,0-1.5,0.238-1.865,0.713c-0.205,0.263-0.34,0.654-0.399,1.174H17.85c0.031-1.237,0.438-2.097,1.199-2.582c0.77-0.484,1.659-0.726,2.674-0.726c1.176,0,2.131,0.225,2.864,0.673c0.729,0.448,1.093,1.146,1.093,2.093v5.766c0,0.176,0.035,0.313,0.106,0.422c0.071,0.104,0.223,0.156,0.452,0.156c0.076,0,0.16-0.005,0.254-0.015c0.093-0.011,0.191-0.021,0.299-0.041L26.792,23.943L26.792,23.943z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Fork();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Fork = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Fork.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Fork\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M13.741,10.249h8.045v2.627l7.556-4.363l-7.556-4.363v2.598H9.826C11.369,7.612,12.616,8.922,13.741,10.249zM21.786,20.654c-0.618-0.195-1.407-0.703-2.291-1.587c-1.79-1.756-3.712-4.675-5.731-7.227c-2.049-2.486-4.159-4.972-7.451-5.091h-3.5v3.5h3.5c0.656-0.027,1.683,0.486,2.879,1.683c1.788,1.753,3.712,4.674,5.731,7.226c1.921,2.331,3.907,4.639,6.863,5.016v2.702l7.556-4.362l-7.556-4.362V20.654z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ForkAlt();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ForkAlt = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ForkAlt.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.ForkAlt\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.786,12.873l7.556-4.361l-7.556-4.362v2.701c-2.929,0.374-4.905,2.64-6.809,4.952c0.545,0.703,1.08,1.418,1.604,2.127c0.192,0.26,0.383,0.514,0.573,0.77c0.802-1.043,1.584-1.999,2.341-2.74c0.884-0.885,1.673-1.393,2.291-1.588V12.873zM17.661,17.006c-1.893-2.371-3.815-5.354-6.009-7.537c-1.461-1.428-3.155-2.664-5.34-2.693h-3.5v3.5h3.5c0.971-0.119,2.845,1.333,4.712,3.771c1.895,2.371,3.815,5.354,6.011,7.537c1.326,1.297,2.847,2.426,4.751,2.645v2.646l7.556-4.363l-7.556-4.362v2.535C20.746,20.346,19.205,19.022,17.661,17.006z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.FullCube();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.FullCube = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.FullCube.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.FullCube\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.5,3.029l-10.8,6.235L4.7,21.735L15.5,27.971l10.8-6.235V9.265L15.5,3.029zM15.5,7.029l6.327,3.652L15.5,14.334l-6.326-3.652L15.5,7.029zM24.988,10.599L16,15.789v10.378c0,0.275-0.225,0.5-0.5,0.5s-0.5-0.225-0.5-0.5V15.786l-8.987-5.188c-0.239-0.138-0.321-0.444-0.183-0.683c0.138-0.238,0.444-0.321,0.683-0.183l8.988,5.189l8.988-5.189c0.238-0.138,0.545-0.055,0.684,0.184C25.309,10.155,25.227,10.461,24.988,10.599z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Future();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Future = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Future.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Future\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M17.001,15.5l-0.5-7.876c0-0.552-0.448-1-1-1c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.89-0.365,1.365c0.275,0.479,0.889,0.644,1.365,0.367l3.305-1.677C15.39,16.99,15.444,17,15.501,17C16.329,17,17.001,16.329,17.001,15.5zM18.939,21.455c-0.479,0.277-0.644,0.889-0.366,1.367c0.274,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.89,0.365-1.365C20.027,21.344,19.417,21.18,18.939,21.455zM19.938,7.813c-0.477-0.276-1.09-0.111-1.364,0.366c-0.275,0.48-0.111,1.091,0.366,1.367c0.477,0.276,1.088,0.112,1.365-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM21.823,20.305c0.477,0.274,1.089,0.112,1.364-0.365c0.276-0.479,0.112-1.092-0.364-1.367c-0.48-0.275-1.093-0.111-1.367,0.365C21.182,19.416,21.344,20.029,21.823,20.305zM22.822,12.428c0.478-0.275,0.643-0.888,0.365-1.366c-0.274-0.478-0.89-0.642-1.365-0.366c-0.479,0.278-0.643,0.89-0.366,1.367S22.344,12.705,22.822,12.428zM24.378,15.5c0-0.551-0.448-1-1-1c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1C23.93,16.5,24.378,16.053,24.378,15.5zM9.546,12.062c0.275-0.478,0.111-1.089-0.366-1.366c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366C8.658,12.704,9.269,12.541,9.546,12.062zM6.624,15.5c0,0.553,0.449,1,1,1c0.552,0,1-0.447,1.001-1c-0.001-0.552-0.448-0.999-1.001-1C7.071,14.5,6.624,14.948,6.624,15.5zM9.179,20.305c0.479-0.275,0.643-0.888,0.367-1.367c-0.276-0.477-0.888-0.641-1.367-0.365c-0.478,0.277-0.642,0.889-0.365,1.367C8.089,20.418,8.703,20.58,9.179,20.305zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM14.501,23.377c0,0.553,0.448,1,1,1c0.552,0,1-0.447,1-1s-0.448-1-1-1C14.949,22.377,14.501,22.824,14.501,23.377zM10.696,21.822c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.276,1.091,0.11,1.365-0.365c0.277-0.479,0.113-1.09-0.365-1.367C11.584,21.18,10.973,21.344,10.696,21.822zM28.674,14.087l-3.27-1.186c0.291,1.105,0.41,2.274,0.309,3.478c-0.492,5.639-5.449,9.809-11.091,9.333c-5.639-0.495-9.809-5.45-9.333-11.09c0.494-5.641,5.449-9.812,11.089-9.335c2.428,0.212,4.567,1.266,6.194,2.833l-1.637,1.377l7.031,2.548l-1.309-7.364l-1.771,1.492c-2.133-2.151-4.996-3.597-8.25-3.877C9.346,1.67,2.926,7.072,2.297,14.364c-0.625,7.291,4.777,13.71,12.066,14.339c7.293,0.625,13.713-4.776,14.342-12.066C28.779,15.771,28.762,14.919,28.674,14.087z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.GRaphael();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.GRaphael = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.GRaphael.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.GRaphael\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.833,15.709c0-1.477-0.574-2.862-1.617-3.904l-7.002-7.001l-0.003,0.002c-1.027-1.03-2.445-1.62-3.9-1.62c-1.455,0-2.871,0.59-3.9,1.621l-0.002-0.002l-7,7C4.376,12.836,3.79,14.25,3.79,15.709s0.586,2.873,1.619,3.902l6.312,6.312c0.253,0.285,0.519,0.556,0.8,0.8c1.049,0.989,2.463,1.534,3.908,1.51c1.417-0.021,2.783-0.604,3.785-1.604l6.812-6.812c0.021-0.021,0.035-0.029,0.062-0.062l0.143-0.146c0.271-0.271,0.484-0.562,0.725-0.86l-0.012-0.002C28.516,17.85,28.833,16.805,28.833,15.709zM18.77,25.17c-1.121,1.119-2.917,1.336-4.271,0.514l0.002-0.002c-0.213-0.145-0.414-0.303-0.61-0.471c-0.016-0.016-7.04-7.041-7.04-7.041c-1.34-1.34-1.342-3.584,0-4.92l7-6.998c1.121-1.121,2.908-1.338,4.259-0.512v0.002c0.213,0.141,0.414,0.299,0.604,0.467c0.021,0.016,7.053,7.043,7.053,7.043c0.396,0.388,0.655,0.852,0.818,1.348l-2.607,0.006c-0.537-3.754-3.769-6.641-7.667-6.641c-4.277,0-7.744,3.468-7.745,7.746c0.001,4.277,3.468,7.744,7.745,7.744c3.917,0,7.156-2.91,7.668-6.688l2.638-0.021c-0.16,0.521-0.441,1.02-0.849,1.412L18.77,25.17zM16.312,16.789c0.002,0,0.002,0,0.004,0l5.476-0.02c-0.5,2.562-2.76,4.518-5.48,4.521c-3.084-0.004-5.578-2.5-5.584-5.582c0.006-3.084,2.5-5.58,5.584-5.584c2.708,0.004,4.959,1.929,5.472,4.484l-5.476,0.018c-0.596,0.002-1.078,0.488-1.076,1.084C15.233,16.308,15.715,16.789,16.312,16.789z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Gear();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Gear = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Gear.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Gear\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M26.974,16.514l3.765-1.991c-0.074-0.738-0.217-1.454-0.396-2.157l-4.182-0.579c-0.362-0.872-0.84-1.681-1.402-2.423l1.594-3.921c-0.524-0.511-1.09-0.977-1.686-1.406l-3.551,2.229c-0.833-0.438-1.73-0.77-2.672-0.984l-1.283-3.976c-0.364-0.027-0.728-0.056-1.099-0.056s-0.734,0.028-1.099,0.056l-1.271,3.941c-0.967,0.207-1.884,0.543-2.738,0.986L7.458,4.037C6.863,4.466,6.297,4.932,5.773,5.443l1.55,3.812c-0.604,0.775-1.11,1.629-1.49,2.55l-4.05,0.56c-0.178,0.703-0.322,1.418-0.395,2.157l3.635,1.923c0.041,1.013,0.209,1.994,0.506,2.918l-2.742,3.032c0.319,0.661,0.674,1.303,1.085,1.905l4.037-0.867c0.662,0.72,1.416,1.351,2.248,1.873l-0.153,4.131c0.663,0.299,1.352,0.549,2.062,0.749l2.554-3.283C15.073,26.961,15.532,27,16,27c0.507,0,1.003-0.046,1.491-0.113l2.567,3.301c0.711-0.2,1.399-0.45,2.062-0.749l-0.156-4.205c0.793-0.513,1.512-1.127,2.146-1.821l4.142,0.889c0.411-0.602,0.766-1.243,1.085-1.905l-2.831-3.131C26.778,18.391,26.93,17.467,26.974,16.514zM20.717,21.297l-1.785,1.162l-1.098-1.687c-0.571,0.22-1.186,0.353-1.834,0.353c-2.831,0-5.125-2.295-5.125-5.125c0-2.831,2.294-5.125,5.125-5.125c2.83,0,5.125,2.294,5.125,5.125c0,1.414-0.573,2.693-1.499,3.621L20.717,21.297z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Gear2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Gear2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Gear2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Gear2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M17.047,27.945c-0.34,0.032-0.688,0.054-1.046,0.054l0,0c-0.32,0-0.631-0.017-0.934-0.043l0,0l-2.626,3.375l-0.646-0.183c-0.758-0.213-1.494-0.48-2.202-0.8l0,0L8.979,30.07l0.158-4.24c-0.558-0.39-1.079-0.825-1.561-1.302l0,0L3.424,25.42l-0.379-0.557c-0.445-0.654-0.824-1.339-1.16-2.032l0,0l-0.292-0.605l2.819-3.12c-0.176-0.661-0.293-1.343-0.353-2.038l0,0l-3.736-1.975l0.068-0.669c0.08-0.801,0.235-1.567,0.42-2.303l0,0l0.165-0.653l4.167-0.577c0.297-0.627,0.647-1.221,1.041-1.78l0,0l-1.59-3.914l0.48-0.47c0.564-0.55,1.168-1.048,1.798-1.503l0,0l0.546-0.394l3.597,2.259c0.606-0.279,1.24-0.509,1.897-0.685l0,0l1.304-4.046l0.672-0.051c0.362-0.027,0.751-0.058,1.174-0.058l0,0c0.422,0,0.81,0.031,1.172,0.058l0,0l0.672,0.051l1.318,4.088c0.632,0.176,1.244,0.401,1.831,0.674l0,0l3.647-2.291l0.548,0.394c0.63,0.455,1.235,0.954,1.798,1.501l0,0l0.482,0.47l-1.639,4.031c0.357,0.519,0.679,1.068,0.954,1.646l0,0l4.297,0.595l0.167,0.653c0.188,0.735,0.342,1.501,0.42,2.303l0,0l0.068,0.669l-3.866,2.044c-0.058,0.634-0.161,1.258-0.315,1.866l0,0l2.913,3.218l-0.293,0.608c-0.335,0.695-0.712,1.382-1.159,2.034l0,0l-0.379,0.555l-4.255-0.912c-0.451,0.451-0.939,0.866-1.461,1.241l0,0l0.162,4.323l-0.615,0.278c-0.709,0.319-1.444,0.587-2.202,0.8l0,0l-0.648,0.183L17.047,27.945L17.047,27.945zM20.424,29.028c0.227-0.076,0.45-0.157,0.671-0.244l0,0l-0.152-4.083l0.479-0.307c0.717-0.466,1.37-1.024,1.95-1.658l0,0l0.386-0.423l4.026,0.862c0.121-0.202,0.238-0.409,0.351-0.62l0,0l-2.754-3.045l0.171-0.544c0.243-0.783,0.381-1.623,0.422-2.5l0,0l0.025-0.571l3.658-1.933c-0.038-0.234-0.082-0.467-0.132-0.7l0,0l-4.07-0.563l-0.219-0.527c-0.327-0.787-0.76-1.524-1.277-2.204l0,0l-0.342-0.453l1.548-3.808c-0.179-0.157-0.363-0.31-0.552-0.458l0,0l-3.455,2.169L20.649,7.15c-0.754-0.397-1.569-0.698-2.429-0.894l0,0l-0.556-0.127l-1.248-3.87c-0.121-0.006-0.239-0.009-0.354-0.009l0,0c-0.117,0-0.235,0.003-0.357,0.009l0,0l-1.239,3.845l-0.564,0.12c-0.875,0.188-1.709,0.494-2.486,0.896l0,0l-0.508,0.264L7.509,5.249c-0.188,0.148-0.372,0.301-0.55,0.458l0,0l1.507,3.708L8.112,9.869c-0.552,0.709-1.011,1.485-1.355,2.319l0,0l-0.218,0.529l-3.939,0.545c-0.05,0.233-0.094,0.466-0.131,0.7l0,0l3.531,1.867l0.022,0.575c0.037,0.929,0.192,1.82,0.459,2.653l0,0l0.175,0.548l-2.667,2.95c0.112,0.212,0.229,0.419,0.351,0.621l0,0l3.916-0.843l0.39,0.423c0.601,0.657,1.287,1.229,2.043,1.703l0,0l0.488,0.305l-0.149,4.02c0.221,0.087,0.445,0.168,0.672,0.244l0,0l2.479-3.188l0.566,0.07c0.427,0.054,0.843,0.089,1.257,0.089l0,0c0.445,0,0.894-0.039,1.353-0.104l0,0l0.571-0.08L20.424,29.028L20.424,29.028zM21.554,20.75l0.546,0.839l-3.463,2.253l-1.229-1.891l0,0c-0.447,0.109-0.917,0.173-1.406,0.173l0,0c-3.384,0-6.126-2.743-6.126-6.123l0,0c0-3.384,2.742-6.126,6.126-6.126l0,0c3.38,0,6.123,2.742,6.123,6.126l0,0c0,1.389-0.467,2.676-1.25,3.704l0,0L21.554,20.75M19.224,21.073l0.108-0.069l-0.987-1.519l0.572-0.572c0.748-0.75,1.207-1.773,1.207-2.912l0,0c-0.004-2.278-1.848-4.122-4.123-4.126l0,0c-2.28,0.004-4.122,1.846-4.126,4.126l0,0c0.004,2.275,1.848,4.119,4.126,4.123l0,0c0.509,0,0.999-0.104,1.473-0.286l0,0l0.756-0.29L19.224,21.073L19.224,21.073z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.GitHub();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.GitHub = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.GitHub.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.GitHub\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.436,15.099c-1.201-0.202-2.451-0.335-3.466-0.371l-0.179-0.006c0.041-0.09,0.072-0.151,0.082-0.16c0.022-0.018,0.04-0.094,0.042-0.168c0-0.041,0.018-0.174,0.046-0.35c0.275,0.01,0.64,0.018,1.038,0.021c1.537,0.012,3.145,0.136,4.248,0.331c0.657,0.116,0.874,0.112,0.389-0.006c-0.491-0.119-1.947-0.294-3.107-0.37c-0.779-0.053-1.896-0.073-2.554-0.062c0.019-0.114,0.041-0.241,0.064-0.371c0.093-0.503,0.124-1.009,0.126-2.016c0.002-1.562-0.082-1.992-0.591-3.025c-0.207-0.422-0.441-0.78-0.724-1.104c0.247-0.729,0.241-1.858-0.015-2.848c-0.211-0.812-0.285-0.864-1.021-0.708C22.19,4.019,21.69,4.2,21.049,4.523c-0.303,0.153-0.721,0.391-1.024,0.578c-0.79-0.278-1.607-0.462-2.479-0.561c-0.884-0.1-3.051-0.044-3.82,0.098c-0.752,0.139-1.429,0.309-2.042,0.511c-0.306-0.189-0.75-0.444-1.067-0.604C9.973,4.221,9.473,4.041,8.847,3.908c-0.734-0.157-0.81-0.104-1.02,0.708c-0.26,1.003-0.262,2.151-0.005,2.878C7.852,7.577,7.87,7.636,7.877,7.682c-1.042,1.312-1.382,2.78-1.156,4.829c0.059,0.534,0.15,1.024,0.277,1.473c-0.665-0.004-1.611,0.02-2.294,0.064c-1.162,0.077-2.618,0.25-3.109,0.369c-0.484,0.118-0.269,0.122,0.389,0.007c1.103-0.194,2.712-0.32,4.248-0.331c0.29-0.001,0.561-0.007,0.794-0.013c0.07,0.237,0.15,0.463,0.241,0.678L7.26,14.759c-1.015,0.035-2.264,0.168-3.465,0.37c-0.901,0.151-2.231,0.453-2.386,0.54c-0.163,0.091-0.03,0.071,0.668-0.106c1.273-0.322,2.928-0.569,4.978-0.741l0.229-0.02c0.44,1.022,1.118,1.802,2.076,2.41c0.586,0.373,1.525,0.756,1.998,0.816c0.13,0.016,0.508,0.094,0.84,0.172c0.333,0.078,0.984,0.195,1.446,0.262h0.011c-0.009,0.006-0.017,0.01-0.025,0.016c-0.56,0.291-0.924,0.744-1.169,1.457c-0.11,0.033-0.247,0.078-0.395,0.129c-0.529,0.18-0.735,0.217-1.271,0.221c-0.556,0.004-0.688-0.02-1.02-0.176c-0.483-0.225-0.933-0.639-1.233-1.133c-0.501-0.826-1.367-1.41-2.089-1.41c-0.617,0-0.734,0.25-0.288,0.615c0.672,0.549,1.174,1.109,1.38,1.537c0.116,0.24,0.294,0.611,0.397,0.824c0.109,0.227,0.342,0.535,0.564,0.748c0.522,0.498,1.026,0.736,1.778,0.848c0.504,0.074,0.628,0.074,1.223-0.002c0.287-0.035,0.529-0.076,0.746-0.127c0,0.244,0,0.525,0,0.855c0,1.766-0.021,2.334-0.091,2.5c-0.132,0.316-0.428,0.641-0.716,0.787c-0.287,0.146-0.376,0.307-0.255,0.455c0.067,0.08,0.196,0.094,0.629,0.066c0.822-0.051,1.403-0.355,1.699-0.891c0.095-0.172,0.117-0.518,0.147-2.318c0.032-1.953,0.046-2.141,0.173-2.42c0.077-0.166,0.188-0.346,0.25-0.395c0.104-0.086,0.111,0.084,0.111,2.42c-0.001,2.578-0.027,2.889-0.285,3.385c-0.058,0.113-0.168,0.26-0.245,0.33c-0.135,0.123-0.192,0.438-0.098,0.533c0.155,0.154,0.932-0.088,1.356-0.422c0.722-0.572,0.808-1.045,0.814-4.461l0.003-2.004l0.219,0.021l0.219,0.02l0.036,2.621c0.041,2.951,0.047,2.994,0.549,3.564c0.285,0.322,0.572,0.5,1.039,0.639c0.625,0.188,0.813-0.102,0.393-0.605c-0.457-0.547-0.479-0.756-0.454-3.994c0.017-2.076,0.017-2.076,0.151-1.955c0.282,0.256,0.336,0.676,0.336,2.623c0,2.418,0.069,2.648,0.923,3.07c0.399,0.195,0.511,0.219,1.022,0.221c0.544,0.002,0.577-0.006,0.597-0.148c0.017-0.115-0.05-0.193-0.304-0.348c-0.333-0.205-0.564-0.467-0.709-0.797c-0.055-0.127-0.092-0.959-0.117-2.672c-0.036-2.393-0.044-2.502-0.193-2.877c-0.201-0.504-0.508-0.902-0.897-1.166c-0.101-0.066-0.202-0.121-0.333-0.162c0.161-0.016,0.317-0.033,0.468-0.055c1.572-0.209,2.403-0.383,3.07-0.641c1.411-0.543,2.365-1.445,2.882-2.724c0.046-0.114,0.092-0.222,0.131-0.309l0.398,0.033c2.051,0.173,3.706,0.42,4.979,0.743c0.698,0.177,0.831,0.198,0.668,0.105C30.666,15.551,29.336,15.25,28.436,15.099zM22.422,15.068c-0.233,0.512-0.883,1.17-1.408,1.428c-0.518,0.256-1.33,0.451-2.25,0.544c-0.629,0.064-4.137,0.083-4.716,0.026c-1.917-0.188-2.991-0.557-3.783-1.296c-0.75-0.702-1.1-1.655-1.039-2.828c0.039-0.734,0.216-1.195,0.679-1.755c0.421-0.51,0.864-0.825,1.386-0.985c0.437-0.134,1.778-0.146,3.581-0.03c0.797,0.051,1.456,0.051,2.252,0c1.886-0.119,3.145-0.106,3.61,0.038c0.731,0.226,1.397,0.834,1.797,1.644c0.18,0.362,0.215,0.516,0.241,1.075C22.808,13.699,22.675,14.517,22.422,15.068zM12.912,11.762c-1.073-0.188-1.686,1.649-0.863,2.587c0.391,0.445,0.738,0.518,1.172,0.248c0.402-0.251,0.62-0.72,0.62-1.328C13.841,12.458,13.472,11.862,12.912,11.762zM19.425,11.872c-1.073-0.188-1.687,1.647-0.864,2.586c0.392,0.445,0.738,0.519,1.173,0.247c0.401-0.25,0.62-0.72,0.62-1.328C20.354,12.569,19.985,11.971,19.425,11.872zM16.539,15.484c-0.023,0.074-0.135,0.184-0.248,0.243c-0.286,0.147-0.492,0.096-0.794-0.179c-0.187-0.169-0.272-0.258-0.329-0.081c-0.053,0.164,0.28,0.493,0.537,0.594c0.236,0.094,0.405,0.097,0.661-0.01c0.254-0.106,0.476-0.391,0.476-0.576C16.842,15.303,16.595,15.311,16.539,15.484zM16.222,14.909c0.163-0.144,0.2-0.44,0.044-0.597s-0.473-0.133-0.597,0.043c-0.144,0.206-0.067,0.363,0.036,0.53C15.865,15.009,16.08,15.034,16.222,14.909z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.GitHubAlt();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.GitHubAlt = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.GitHubAlt.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.GitHubAlt\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M23.356,17.485c-0.004,0.007-0.007,0.013-0.01,0.021l0.162,0.005c0.107,0.004,0.218,0.01,0.33,0.016c-0.046-0.004-0.09-0.009-0.136-0.013L23.356,17.485zM15.5,1.249C7.629,1.25,1.25,7.629,1.249,15.5C1.25,23.371,7.629,29.75,15.5,29.751c7.871-0.001,14.25-6.38,14.251-14.251C29.75,7.629,23.371,1.25,15.5,1.249zM3.771,17.093c0.849-0.092,1.833-0.148,2.791-0.156c0.262,0,0.507-0.006,0.717-0.012c0.063,0.213,0.136,0.419,0.219,0.613H7.492c-0.918,0.031-2.047,0.152-3.134,0.335c-0.138,0.023-0.288,0.051-0.441,0.08C3.857,17.67,3.81,17.383,3.771,17.093zM12.196,22.224c-0.1,0.028-0.224,0.07-0.357,0.117c-0.479,0.169-0.665,0.206-1.15,0.206c-0.502,0.015-0.621-0.019-0.921-0.17C9.33,22.171,8.923,21.8,8.651,21.353c-0.453-0.746-1.236-1.275-1.889-1.275c-0.559,0-0.664,0.227-0.261,0.557c0.608,0.496,1.062,0.998,1.248,1.385c0.105,0.215,0.266,0.546,0.358,0.744c0.099,0.206,0.311,0.474,0.511,0.676c0.472,0.441,0.928,0.659,1.608,0.772c0.455,0.06,0.567,0.06,1.105-0.004c0.26-0.03,0.479-0.067,0.675-0.118v0.771c0,1.049-0.008,1.628-0.031,1.945c-1.852-0.576-3.507-1.595-4.848-2.934c-1.576-1.578-2.706-3.592-3.195-5.848c0.952-0.176,2.073-0.32,3.373-0.43l0.208-0.018c0.398,0.925,1.011,1.631,1.876,2.179c0.53,0.337,1.38,0.685,1.808,0.733c0.118,0.02,0.46,0.09,0.76,0.16c0.302,0.066,0.89,0.172,1.309,0.236h0.009c-0.007,0.018-0.014,0.02-0.022,0.02C12.747,21.169,12.418,21.579,12.196,22.224zM13.732,27.207c-0.168-0.025-0.335-0.056-0.5-0.087c0.024-0.286,0.038-0.785,0.054-1.723c0.028-1.767,0.041-1.94,0.156-2.189c0.069-0.15,0.17-0.32,0.226-0.357c0.095-0.078,0.101,0.076,0.101,2.188C13.769,26.143,13.763,26.786,13.732,27.207zM15.5,27.339c-0.148,0-0.296-0.006-0.443-0.012c0.086-0.562,0.104-1.428,0.106-2.871l0.003-1.82l0.197,0.019l0.199,0.02l0.032,2.365c0.017,1.21,0.027,1.878,0.075,2.296C15.613,27.335,15.558,27.339,15.5,27.339zM17.006,27.24c-0.039-0.485-0.037-1.243-0.027-2.553c0.019-1.866,0.019-1.866,0.131-1.769c0.246,0.246,0.305,0.623,0.305,2.373c0,0.928,0.011,1.497,0.082,1.876C17.334,27.196,17.17,27.22,17.006,27.24zM27.089,17.927c-0.155-0.029-0.307-0.057-0.446-0.08c-0.96-0.162-1.953-0.275-2.804-0.32c1.25,0.108,2.327,0.248,3.246,0.418c-0.479,2.289-1.618,4.33-3.214,5.928c-1.402,1.4-3.15,2.448-5.106,3.008c-0.034-0.335-0.058-1.048-0.066-2.212c-0.03-2.167-0.039-2.263-0.17-2.602c-0.181-0.458-0.47-0.811-0.811-1.055c-0.094-0.057-0.181-0.103-0.301-0.14c0.145-0.02,0.282-0.021,0.427-0.057c1.418-0.188,2.168-0.357,2.772-0.584c1.263-0.492,2.129-1.301,2.606-2.468c0.044-0.103,0.088-0.2,0.123-0.279l0.011,0.001c0.032-0.07,0.057-0.118,0.064-0.125c0.02-0.017,0.036-0.085,0.038-0.151c0-0.037,0.017-0.157,0.041-0.317c0.249,0.01,0.58,0.018,0.938,0.02c0.959,0.008,1.945,0.064,2.794,0.156C27.194,17.356,27.148,17.644,27.089,17.927zM25.823,16.87c-0.697-0.049-1.715-0.064-2.311-0.057c0.02-0.103,0.037-0.218,0.059-0.336c0.083-0.454,0.111-0.912,0.113-1.823c0.002-1.413-0.074-1.801-0.534-2.735c-0.188-0.381-0.399-0.705-0.655-0.998c0.225-0.659,0.207-1.68-0.02-2.575c-0.19-0.734-0.258-0.781-0.924-0.64c-0.563,0.12-1.016,0.283-1.598,0.576c-0.274,0.138-0.652,0.354-0.923,0.522c-0.715-0.251-1.451-0.419-2.242-0.508c-0.799-0.092-2.759-0.04-3.454,0.089c-0.681,0.126-1.293,0.28-1.848,0.462c-0.276-0.171-0.678-0.4-0.964-0.547C9.944,8.008,9.491,7.846,8.925,7.727c-0.664-0.144-0.732-0.095-0.922,0.64c-0.235,0.907-0.237,1.945-0.004,2.603c0.026,0.075,0.043,0.129,0.05,0.17c-0.942,1.187-1.25,2.515-1.046,4.367c0.053,0.482,0.136,0.926,0.251,1.333c-0.602-0.004-1.457,0.018-2.074,0.057c-0.454,0.031-0.957,0.076-1.418,0.129c-0.063-0.5-0.101-1.008-0.101-1.524c0-3.273,1.323-6.225,3.468-8.372c2.146-2.144,5.099-3.467,8.371-3.467c3.273,0,6.226,1.323,8.371,3.467c2.145,2.147,3.468,5.099,3.468,8.372c0,0.508-0.036,1.008-0.098,1.499C26.78,16.946,26.276,16.899,25.823,16.87z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Glasses();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Glasses = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Glasses.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Glasses\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.075,9.531c0,0-2.705-1.438-5.158-1.438c-2.453,0-4.862,0.593-4.862,0.593L3.971,9.869c0,0,0.19,0.19,0.528,0.53c0.338,0.336,0.486,3.741,1.838,5.094c1.353,1.354,4.82,1.396,5.963,0.676c1.14-0.718,2.241-3.466,2.241-4.693c0-0.38,0-0.676,0-0.676c0.274-0.275,1.615-0.303,1.917,0c0,0,0,0.296,0,0.676c0,1.227,1.101,3.975,2.241,4.693c1.144,0.72,4.611,0.678,5.963-0.676c1.355-1.353,1.501-4.757,1.839-5.094c0.338-0.34,0.528-0.53,0.528-0.53l-0.084-1.183c0,0-2.408-0.593-4.862-0.593c-2.453,0-5.158,1.438-5.158,1.438C16.319,9.292,14.737,9.32,14.075,9.531z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Globe();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Globe = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Globe.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Globe\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM19.158,23.269c-0.079,0.064-0.183,0.13-0.105,0.207c0.078,0.078-0.09,0.131-0.09,0.17s0.104,0.246,0.052,0.336c-0.052,0.092-0.091,0.223-0.13,0.301c-0.039,0.077-0.131,0.155-0.104,0.272c0.025,0.116-0.104,0.077-0.104,0.194c0,0.116,0.116,0.065,0.09,0.208c-0.025,0.144-0.09,0.183-0.09,0.285c0,0.104,0.064,0.247,0.064,0.286s-0.064,0.17-0.155,0.272c-0.092,0.104-0.155,0.17-0.144,0.233c0.014,0.065,0.104,0.144,0.091,0.184c-0.013,0.037-0.129,0.168-0.116,0.259c0.014,0.09,0.129,0.053,0.155,0.116c0.026,0.065-0.155,0.118-0.078,0.183c0.078,0.064,0.183,0.051,0.156,0.208c-0.019,0.112,0.064,0.163,0.126,0.198c-0.891,0.221-1.818,0.352-2.777,0.352C9.639,27.533,4.466,22.36,4.466,16c0-2.073,0.557-4.015,1.518-5.697c0.079-0.042,0.137-0.069,0.171-0.062c0.065,0.013,0.079,0.104,0.183,0.13c0.104,0.026,0.195-0.078,0.26-0.117c0.064-0.039,0.116-0.195,0.051-0.182c-0.065,0.013-0.234,0-0.234,0s0.183-0.104,0.183-0.169s0.025-0.169,0.129-0.208C6.83,9.655,6.83,9.681,6.765,9.837C6.7,9.993,6.896,9.928,6.973,9.863s0.13-0.013,0.272-0.104c0.143-0.091,0.143-0.143,0.221-0.143c0.078,0,0.221,0.143,0.299,0.091c0.077-0.052,0.299,0.065,0.429,0.065c0.129,0,0.545,0.169,0.624,0.169c0.078,0,0.312,0.09,0.325,0.259c0.013,0.169,0.09,0.156,0.168,0.156s0.26,0.065,0.26,0.13c0,0.065-0.052,0.325,0.078,0.39c0.129,0.064,0.247,0.169,0.299,0.143c0.052-0.026,0-0.233-0.064-0.26c-0.065-0.026-0.027-0.117-0.052-0.169c-0.026-0.051,0.078-0.051,0.117,0.039c0.039,0.091,0.143,0.26,0.208,0.26c0.064,0,0.208,0.156,0.168,0.247c-0.039,0.091,0.039,0.221,0.156,0.221c0.116,0,0.26,0.182,0.312,0.195c0.052,0.013,0.117,0.078,0.117,0.117c0,0.04,0.065,0.26,0.065,0.351c0,0.09-0.04,0.454-0.053,0.597s0.104,0.39,0.234,0.52c0.129,0.13,0.246,0.377,0.324,0.429c0.079,0.052,0.13,0.195,0.247,0.182c0.117-0.013,0.195,0.078,0.299,0.26c0.104,0.182,0.208,0.48,0.286,0.506c0.078,0.026,0.208,0.117,0.142,0.182c-0.064,0.064-0.168,0.208-0.051,0.208c0.117,0,0.156-0.065,0.247,0.053c0.09,0.116,0.208,0.181,0.194,0.26c-0.013,0.077,0.104,0.103,0.156,0.116c0.052,0.013,0.169,0.247,0.286,0.143c0.117-0.104-0.155-0.259-0.234-0.326c-0.078-0.064,0-0.207-0.182-0.35c-0.182-0.143-0.156-0.247-0.286-0.351c-0.13-0.104-0.233-0.195-0.104-0.286c0.13-0.091,0.143,0.091,0.195,0.208c0.052,0.116,0.324,0.351,0.441,0.454c0.117,0.104,0.326,0.468,0.39,0.468s0.247,0.208,0.247,0.208s0.103,0.168,0.064,0.22c-0.039,0.052,0.053,0.247,0.144,0.299c0.09,0.052,0.455,0.22,0.507,0.247c0.052,0.027,0.155,0.221,0.299,0.221c0.142,0,0.247,0.014,0.286,0.053c0.039,0.038,0.155,0.194,0.234,0.104c0.078-0.092,0.09-0.131,0.208-0.131c0.117,0,0.168,0.091,0.233,0.156c0.065,0.065,0.247,0.235,0.338,0.222c0.091-0.013,0.208,0.104,0.273,0.064s0.169,0.025,0.22,0.052c0.054,0.026,0.234,0.118,0.222,0.272c-0.013,0.157,0.103,0.195,0.182,0.234c0.078,0.039,0.182,0.13,0.248,0.195c0.064,0.063,0.206,0.077,0.246,0.116c0.039,0.039,0.065,0.117,0.182,0.052c0.116-0.064,0.092-0.181,0.092-0.181s0.129-0.026,0.194,0.026c0.064,0.05,0.104,0.22,0.144,0.246c0.038,0.026,0.115,0.221,0.063,0.362c-0.051,0.145-0.038,0.286-0.091,0.286c-0.052,0-0.116,0.17-0.195,0.209c-0.076,0.039-0.285,0.221-0.272,0.286c0.013,0.063,0.131,0.258,0.104,0.35c-0.025,0.091-0.194,0.195-0.154,0.338c0.038,0.144,0.312,0.183,0.323,0.312c0.014,0.131,0.209,0.417,0.235,0.546c0.025,0.13,0.246,0.272,0.246,0.453c0,0.184,0.312,0.3,0.377,0.312c0.063,0.013,0.182,0.131,0.272,0.17s0.169,0.116,0.233,0.221s0.053,0.261,0.053,0.299c0,0.039-0.039,0.44-0.078,0.674C19.145,23.021,19.235,23.203,19.158,23.269zM10.766,11.188c0.039,0.013,0.117,0.091,0.156,0.091c0.04,0,0.234,0.156,0.286,0.208c0.053,0.052,0.053,0.195-0.013,0.208s-0.104-0.143-0.117-0.208c-0.013-0.065-0.143-0.065-0.208-0.104C10.805,11.344,10.66,11.152,10.766,11.188zM27.51,16.41c-0.144,0.182-0.13,0.272-0.195,0.286c-0.064,0.013,0.065,0.065,0.09,0.194c0.022,0.112-0.065,0.224,0.063,0.327c-0.486,4.619-3.71,8.434-8.016,9.787c-0.007-0.011-0.019-0.025-0.021-0.034c-0.027-0.078-0.027-0.233,0.064-0.285c0.091-0.053,0.312-0.233,0.363-0.272c0.052-0.04,0.13-0.221,0.091-0.247c-0.038-0.026-0.232,0-0.26-0.039c-0.026-0.039-0.026-0.092,0.104-0.182c0.13-0.091,0.195-0.222,0.247-0.26c0.052-0.039,0.155-0.117,0.195-0.209c0.038-0.09-0.041-0.039-0.118-0.039s-0.117-0.142-0.117-0.207s0.195,0.026,0.339,0.052c0.143,0.024,0.077-0.065,0.064-0.142c-0.013-0.078,0.026-0.209,0.105-0.17c0.076,0.039,0.479-0.013,0.531-0.026c0.052-0.013,0.194-0.246,0.246-0.312c0.053-0.065,0.064-0.129,0-0.168c-0.065-0.04-0.143-0.184-0.168-0.221c-0.026-0.041-0.039-0.274-0.013-0.34c0.025-0.063,0,0.377,0.181,0.43c0.183,0.052,0.286,0.078,0.455-0.078c0.169-0.155,0.298-0.26,0.312-0.363c0.013-0.104,0.052-0.209,0.117-0.246c0.065-0.039,0.104,0.103,0.182-0.065c0.078-0.17,0.156-0.157,0.234-0.299c0.077-0.144-0.13-0.325,0.024-0.43c0.157-0.103,0.43-0.233,0.43-0.233s0.078-0.039,0.234-0.078c0.155-0.038,0.324-0.014,0.376-0.09c0.052-0.079,0.104-0.247,0.182-0.338c0.079-0.092,0.169-0.234,0.13-0.299c-0.039-0.065,0.104-0.352,0.091-0.429c-0.013-0.078-0.13-0.261,0.065-0.416s0.402-0.391,0.416-0.454c0.012-0.065,0.169-0.338,0.154-0.469c-0.012-0.129-0.154-0.285-0.245-0.325c-0.092-0.037-0.286-0.05-0.364-0.154s-0.299-0.208-0.377-0.182c-0.077,0.026-0.208,0.051-0.312-0.015c-0.104-0.063-0.272-0.143-0.337-0.194c-0.066-0.051-0.234-0.09-0.312-0.09s-0.065-0.053-0.182,0.103c-0.117,0.157,0,0.209-0.208,0.182c-0.209-0.024,0.025-0.038,0.144-0.194c0.115-0.155-0.014-0.247-0.144-0.207c-0.13,0.039-0.039,0.117-0.247,0.156c-0.207,0.038-0.207-0.092-0.077-0.117c0.13-0.026,0.363-0.143,0.363-0.194c0-0.053-0.026-0.196-0.13-0.196s-0.078-0.129-0.233-0.297c-0.156-0.17-0.351-0.274-0.508-0.249c-0.154,0.026-0.272,0.065-0.35-0.076c-0.078-0.144-0.169-0.17-0.222-0.247c-0.051-0.078-0.182,0-0.221-0.039s-0.039-0.039-0.039-0.039s-0.169,0.039-0.077-0.078c0.09-0.117,0.129-0.338,0.09-0.325c-0.038,0.013-0.104,0.196-0.168,0.183c-0.064-0.013-0.014-0.04-0.144-0.117c-0.13-0.078-0.337-0.013-0.337,0.052c0,0.065-0.065,0.117-0.065,0.117s-0.039-0.038-0.078-0.117c-0.039-0.078-0.221-0.091-0.312-0.013c-0.09,0.078-0.142-0.196-0.207-0.196s-0.194,0.065-0.26,0.184c-0.064,0.116-0.038,0.285-0.092,0.272c-0.05-0.013-0.063-0.233-0.05-0.312c0.012-0.079,0.155-0.208,0.05-0.234c-0.103-0.026-0.259,0.13-0.323,0.143c-0.065,0.013-0.195,0.104-0.273,0.209c-0.077,0.103-0.116,0.168-0.195,0.207c-0.077,0.039-0.193,0-0.167-0.039c0.025-0.039-0.222-0.181-0.261-0.13c-0.04,0.052-0.155,0.091-0.272,0.144c-0.117,0.052-0.222-0.065-0.247-0.117s-0.079-0.064-0.091-0.234c-0.013-0.168,0.027-0.351,0.065-0.454c0.038-0.104-0.195-0.312-0.286-0.3c-0.091,0.015-0.182,0.105-0.272,0.091c-0.092-0.012-0.052-0.038-0.195-0.038c-0.143,0-0.026-0.025,0-0.143c0.025-0.116-0.052-0.273,0.092-0.377c0.142-0.104,0.091-0.351,0-0.363c-0.092-0.014-0.261,0.039-0.377,0.026c-0.116-0.014-0.208,0.091-0.169,0.207c0.039,0.117-0.065,0.195-0.104,0.183c-0.039-0.013-0.09-0.078-0.234,0.026c-0.142,0.103-0.194,0.064-0.337-0.052c-0.143-0.118-0.299-0.234-0.325-0.416c-0.026-0.182-0.04-0.364,0.013-0.468c0.051-0.104,0.051-0.285-0.026-0.312c-0.078-0.025,0.09-0.155,0.181-0.181c0.092-0.026,0.234-0.143,0.26-0.195c0.026-0.052,0.156-0.04,0.298-0.04c0.143,0,0.169,0,0.312,0.078c0.143,0.078,0.169-0.039,0.169-0.078c0-0.039,0.052-0.117,0.208-0.104c0.156,0.013,0.376-0.052,0.416-0.013s0.116,0.195,0.194,0.143c0.079-0.051,0.104-0.143,0.131,0.014c0.025,0.155,0.09,0.39,0.208,0.429c0.116,0.039,0.052,0.194,0.168,0.207c0.115,0.013,0.17-0.246,0.131-0.337c-0.04-0.09-0.118-0.363-0.183-0.428c-0.064-0.065-0.064-0.234,0.064-0.286c0.13-0.052,0.442-0.312,0.532-0.389c0.092-0.079,0.338-0.144,0.261-0.248c-0.078-0.104-0.104-0.168-0.104-0.247s0.078-0.052,0.117,0s0.194-0.078,0.155-0.143c-0.038-0.064-0.026-0.155,0.065-0.143c0.091,0.013,0.116-0.065,0.078-0.117c-0.039-0.052,0.091-0.117,0.182-0.091c0.092,0.026,0.325-0.013,0.364-0.065c0.038-0.052-0.078-0.104-0.078-0.208c0-0.104,0.155-0.195,0.247-0.208c0.091-0.013,0.207,0,0.221-0.039c0.012-0.039,0.143-0.143,0.155-0.052c0.014,0.091,0,0.247,0.104,0.247c0.104,0,0.232-0.117,0.272-0.129c0.038-0.013,0.286-0.065,0.338-0.078c0.052-0.013,0.363-0.039,0.325-0.13c-0.039-0.09-0.078-0.181-0.118-0.22c-0.039-0.039-0.077,0.013-0.13,0.078c-0.051,0.065-0.143,0.065-0.168,0.013c-0.026-0.051,0.012-0.207-0.078-0.156c-0.092,0.052-0.104,0.104-0.157,0.078c-0.052-0.026-0.103-0.117-0.103-0.117s0.129-0.064,0.038-0.182c-0.09-0.117-0.221-0.091-0.35-0.025c-0.13,0.064-0.118,0.051-0.273,0.09s-0.234,0.078-0.234,0.078s0.209-0.129,0.299-0.208c0.091-0.078,0.209-0.117,0.286-0.195c0.078-0.078,0.285,0.039,0.285,0.039s0.105-0.104,0.105-0.039s-0.027,0.234,0.051,0.234c0.079,0,0.299-0.104,0.21-0.131c-0.093-0.026,0.129,0,0.219-0.065c0.092-0.065,0.194-0.065,0.247-0.09c0.052-0.026,0.092-0.143,0.182-0.143c0.092,0,0.13,0.117,0,0.195s-0.143,0.273-0.208,0.325c-0.064,0.052-0.026,0.117,0.078,0.104c0.104-0.013,0.194,0.013,0.286-0.013s0.143,0.026,0.168,0.065c0.026,0.039,0.104-0.039,0.104-0.039s0.169-0.039,0.221,0.026c0.053,0.064,0.092-0.039,0.053-0.104c-0.039-0.064-0.092-0.129-0.13-0.208c-0.039-0.078-0.091-0.104-0.194-0.078c-0.104,0.026-0.13-0.026-0.195-0.064c-0.065-0.04-0.118,0.052-0.065-0.04c0.053-0.09,0.078-0.117,0.117-0.195c0.039-0.078,0.209-0.221,0.039-0.259c-0.169-0.04-0.222-0.065-0.247-0.143c-0.026-0.078-0.221-0.221-0.272-0.221c-0.053,0-0.233,0-0.247-0.065c-0.013-0.065-0.143-0.208-0.208-0.273c-0.064-0.065-0.312-0.351-0.351-0.377c-0.039-0.026-0.091-0.013-0.208,0.143c-0.116,0.157-0.22,0.183-0.312,0.144c-0.091-0.039-0.104-0.026-0.193-0.13c-0.093-0.104,0.09-0.117,0.051-0.182c-0.04-0.064-0.247-0.091-0.377-0.104c-0.13-0.013-0.221-0.156-0.416-0.169c-0.194-0.013-0.428,0.026-0.493,0.026c-0.064,0-0.064,0.091-0.09,0.234c-0.027,0.143,0.09,0.182-0.027,0.208c-0.116,0.026-0.169,0.039-0.052,0.091c0.117,0.052,0.273,0.26,0.273,0.26s0,0.117-0.092,0.182c-0.09,0.065-0.182,0.13-0.233,0.053c-0.053-0.079-0.195-0.065-0.155,0.013c0.038,0.078,0.116,0.117,0.116,0.195c0,0.077,0.117,0.272,0.039,0.337c-0.078,0.065-0.168,0.014-0.233,0.026s-0.131-0.104-0.078-0.13c0.051-0.026-0.014-0.221-0.014-0.221s-0.155,0.221-0.143,0.104c0.014-0.117-0.064-0.13-0.064-0.221c0-0.091-0.079-0.13-0.194-0.104c-0.118,0.026-0.26-0.04-0.482-0.079c-0.22-0.039-0.311-0.064-0.493-0.156c-0.182-0.091-0.247-0.026-0.338-0.013c-0.091,0.013-0.052-0.182-0.169-0.207c-0.116-0.027-0.181,0.025-0.207-0.144c-0.026-0.168,0.039-0.208,0.324-0.39c0.286-0.182,0.247-0.26,0.468-0.286c0.22-0.026,0.325,0.026,0.325-0.039s0.052-0.325,0.052-0.195S16.95,9.109,16.832,9.2c-0.116,0.091-0.052,0.104,0.04,0.104c0.091,0,0.259-0.091,0.259-0.091s0.208-0.091,0.26-0.013c0.053,0.078,0.053,0.156,0.144,0.156s0.285-0.104,0.116-0.195c-0.168-0.091-0.272-0.078-0.376-0.182s-0.078-0.065-0.195-0.039c-0.116,0.026-0.116-0.039-0.156-0.039s-0.104,0.026-0.13-0.026c-0.025-0.052,0.014-0.065,0.145-0.065c0.129,0,0.285,0.039,0.285,0.039s0.155-0.052,0.194-0.065c0.039-0.013,0.247-0.039,0.208-0.155c-0.04-0.117-0.169-0.117-0.208-0.156s0.078-0.09,0.143-0.117c0.065-0.026,0.247,0,0.247,0s0.117,0.013,0.117-0.039S17.897,8.2,17.976,8.239s0,0.156,0.117,0.13c0.116-0.026,0.143,0,0.207,0.039c0.065,0.039-0.013,0.195-0.077,0.221c-0.065,0.025-0.169,0.077-0.026,0.09c0.144,0.014,0.246,0.014,0.246,0.014s0.092-0.091,0.131-0.169c0.038-0.078,0.104-0.026,0.155,0c0.052,0.025,0.247,0.065,0.065,0.117c-0.183,0.052-0.221,0.117-0.26,0.182c-0.038,0.065-0.053,0.104-0.221,0.065c-0.17-0.039-0.26-0.026-0.299,0.039c-0.039,0.064-0.013,0.273,0.053,0.247c0.063-0.026,0.129-0.026,0.207-0.052c0.078-0.026,0.39,0.026,0.467,0.013c0.078-0.013,0.209,0.13,0.248,0.104c0.039-0.026,0.117,0.052,0.194,0.104c0.078,0.052,0.052-0.117,0.194-0.013c0.144,0.104,0.065,0.104,0.144,0.104c0.076,0,0.246,0.013,0.246,0.013s0.014-0.129,0.144-0.104c0.13,0.026,0.245,0.169,0.232,0.064c-0.012-0.103,0.013-0.181-0.09-0.259c-0.104-0.078-0.272-0.13-0.299-0.169c-0.026-0.039-0.052-0.091-0.013-0.117c0.039-0.025,0.221,0.013,0.324,0.079c0.104,0.065,0.195,0.13,0.273,0.078c0.077-0.052,0.17-0.078,0.208-0.117c0.038-0.04,0.13-0.156,0.13-0.156s-0.391-0.051-0.441-0.117c-0.053-0.065-0.235-0.156-0.287-0.156s-0.194,0.091-0.246-0.039s-0.052-0.286-0.105-0.299c-0.05-0.013-0.597-0.091-0.674-0.13c-0.078-0.039-0.39-0.13-0.507-0.195s-0.286-0.156-0.389-0.156c-0.104,0-0.533,0.052-0.611,0.039c-0.078-0.013-0.312,0.026-0.403,0.039c-0.091,0.013,0.117,0.182-0.077,0.221c-0.195,0.039-0.169,0.065-0.13-0.13c0.038-0.195-0.131-0.247-0.299-0.169c-0.169,0.078-0.442,0.13-0.377,0.221c0.065,0.091-0.012,0.157,0.117,0.247c0.13,0.091,0.183,0.117,0.35,0.104c0.17-0.013,0.339,0.025,0.339,0.025s0,0.157-0.064,0.182c-0.065,0.026-0.169,0.026-0.196,0.104c-0.025,0.078-0.155,0.117-0.155,0.078s0.065-0.169-0.026-0.234c-0.09-0.065-0.117-0.078-0.221-0.013c-0.104,0.065-0.116,0.091-0.169-0.013C16.053,8.291,15.897,8.2,15.897,8.2s-0.104-0.129-0.182-0.194c-0.077-0.065-0.22-0.052-0.234,0.013c-0.013,0.064,0.026,0.129,0.078,0.247c0.052,0.117,0.104,0.337,0.013,0.351c-0.091,0.013-0.104,0.026-0.195,0.052c-0.091,0.026-0.13-0.039-0.13-0.143s-0.04-0.195-0.013-0.234c0.026-0.039-0.104,0.027-0.234,0c-0.13-0.025-0.233,0.052-0.104,0.092c0.13,0.039,0.157,0.194,0.039,0.233c-0.117,0.039-0.559,0-0.702,0s-0.35,0.039-0.39-0.039c-0.039-0.078,0.118-0.129,0.208-0.129c0.091,0,0.363,0.012,0.467-0.13c0.104-0.143-0.13-0.169-0.233-0.169c-0.104,0-0.183-0.039-0.299-0.155c-0.118-0.117,0.078-0.195,0.052-0.247c-0.026-0.052-0.156-0.014-0.272-0.014c-0.117,0-0.299-0.09-0.299,0.014c0,0.104,0.143,0.402,0.052,0.337c-0.091-0.064-0.078-0.156-0.143-0.234c-0.065-0.078-0.168-0.065-0.299-0.052c-0.129,0.013-0.35,0.052-0.415,0.039c-0.064-0.013-0.013-0.013-0.156-0.078c-0.142-0.065-0.208-0.052-0.312-0.117C12.091,7.576,12.182,7.551,12,7.538c-0.181-0.013-0.168,0.09-0.35,0.065c-0.182-0.026-0.234,0.013-0.416,0c-0.182-0.013-0.272-0.026-0.299,0.065c-0.025,0.091-0.078,0.247-0.156,0.247c-0.077,0-0.169,0.091,0.078,0.104c0.247,0.013,0.105,0.129,0.325,0.117c0.221-0.013,0.416-0.013,0.468-0.117c0.052-0.104,0.091-0.104,0.117-0.065c0.025,0.039,0.22,0.272,0.22,0.272s0.131,0.104,0.183,0.13c0.051,0.026-0.052,0.143-0.156,0.078c-0.104-0.065-0.299-0.051-0.377-0.116c-0.078-0.065-0.429-0.065-0.52-0.052c-0.09,0.013-0.247-0.039-0.299-0.039c-0.051,0-0.221,0.13-0.221,0.13S10.532,8.252,10.494,8.2c-0.039-0.052-0.104,0.052-0.156,0.065c-0.052,0.013-0.208-0.104-0.364-0.052C9.818,8.265,9.87,8.317,9.649,8.304s-0.272-0.052-0.35-0.039C9.22,8.278,9.22,8.278,9.22,8.278S9.233,8.33,9.143,8.382C9.052,8.434,8.986,8.499,8.921,8.421C8.857,8.343,8.818,8.343,8.779,8.33c-0.04-0.013-0.118-0.078-0.286-0.04C8.324,8.33,8.064,8.239,8.013,8.239c-0.04,0-0.313-0.015-0.491-0.033c2.109-2.292,5.124-3.74,8.478-3.74c2.128,0,4.117,0.589,5.83,1.598c-0.117,0.072-0.319,0.06-0.388,0.023c-0.078-0.043-0.158-0.078-0.475-0.061c-0.317,0.018-0.665,0.122-0.595,0.226c0.072,0.104-0.142,0.165-0.197,0.113c-0.055-0.052-0.309,0.06-0.293,0.165c0.016,0.104-0.039,0.225-0.175,0.199c-0.134-0.027-0.229,0.06-0.237,0.146c-0.007,0.087-0.309,0.147-0.332,0.147c-0.024,0-0.412-0.008-0.27,0.095c0.097,0.069,0.15,0.027,0.27,0.052c0.119,0.026,0.214,0.217,0.277,0.243c0.062,0.026,0.15,0,0.189-0.052c0.04-0.052,0.095-0.234,0.095-0.234s0,0.173,0.097,0.208c0.095,0.035,0.331-0.026,0.395-0.017c0.064,0.008,0.437,0.061,0.538,0.112c0.104,0.052,0.356,0.087,0.428,0.199c0.071,0.113,0.08,0.503,0.119,0.546c0.04,0.043,0.174-0.139,0.205-0.182c0.031-0.044,0.198-0.018,0.254,0.042c0.056,0.061,0.182,0.208,0.175,0.269C21.9,8.365,21.877,8.459,21.83,8.425c-0.048-0.034-0.127-0.025-0.096-0.095c0.032-0.069,0.048-0.217-0.015-0.217c-0.064,0-0.119,0-0.119,0s-0.12-0.035-0.199,0.095s-0.015,0.26,0.04,0.26s0.184,0,0.184,0.034c0,0.035-0.136,0.139-0.128,0.2c0.009,0.061,0.11,0.268,0.144,0.312c0.031,0.043,0.197,0.086,0.244,0.096c0.049,0.008-0.111,0.017-0.07,0.077c0.04,0.061,0.102,0.208,0.189,0.243c0.087,0.035,0.333,0.19,0.363,0.26c0.032,0.069,0.222-0.052,0.262-0.061c0.04-0.008,0.032,0.182,0.143,0.191c0.11,0.008,0.15-0.018,0.245-0.096s0.072-0.182,0.079-0.26c0.009-0.078,0-0.138,0.104-0.113c0.104,0.026,0.158-0.018,0.15-0.104c-0.008-0.087-0.095-0.191,0.07-0.217c0.167-0.026,0.254-0.138,0.357-0.138c0.103,0,0.389,0.043,0.419,0c0.032-0.043,0.167-0.243,0.254-0.251c0.067-0.007,0.224-0.021,0.385-0.042c1.582,1.885,2.561,4.284,2.673,6.905c-0.118,0.159-0.012,0.305,0.021,0.408c0.001,0.03,0.005,0.058,0.005,0.088c0,0.136-0.016,0.269-0.021,0.404C27.512,16.406,27.512,16.408,27.51,16.41zM17.794,12.084c-0.064,0.013-0.169-0.052-0.169-0.143s-0.091,0.169-0.04,0.247c0.053,0.078-0.104,0.169-0.155,0.169s-0.091-0.116-0.078-0.233c0.014-0.117-0.077-0.221-0.221-0.208c-0.143,0.014-0.208,0.13-0.259,0.169c-0.053,0.039-0.053,0.259-0.04,0.312s0.013,0.235-0.116,0.221c-0.118-0.013-0.092-0.233-0.079-0.312c0.014-0.078-0.039-0.273,0.014-0.376c0.053-0.104,0.207-0.143,0.312-0.156s0.324,0.065,0.363,0.052c0.04-0.014,0.222-0.014,0.312,0C17.729,11.837,17.858,12.071,17.794,12.084zM18.027,12.123c0.04,0.026,0.311-0.039,0.364,0.026c0.051,0.065-0.054,0.078-0.183,0.13c-0.129,0.052-0.169,0.039-0.221,0.104s-0.221,0.09-0.299,0.168c-0.078,0.079-0.217,0.125-0.246,0.065c-0.04-0.078,0.013-0.039,0.025-0.078c0.013-0.039,0.245-0.129,0.245-0.129S17.988,12.097,18.027,12.123zM16.988,11.668c-0.038,0.013-0.182-0.026-0.3-0.026c-0.116,0-0.091-0.078-0.143-0.064c-0.051,0.013-0.168,0.039-0.247,0.078c-0.078,0.039-0.208,0.03-0.208-0.04c0-0.104,0.052-0.078,0.221-0.143c0.169-0.065,0.352-0.247,0.429-0.169c0.078,0.078,0.221,0.169,0.312,0.182C17.144,11.5,17.026,11.655,16.988,11.668zM15.659,7.637c-0.079,0.026-0.347,0.139-0.321,0.199c0.01,0.023,0.078,0.069,0.19,0.052c0.113-0.018,0.276-0.035,0.355-0.043c0.078-0.009,0.095-0.139,0.009-0.147C15.805,7.689,15.736,7.611,15.659,7.637zM14.698,7.741c-0.061,0.026-0.243-0.043-0.338,0.018c-0.061,0.038-0.026,0.164,0.07,0.172c0.095,0.009,0.259-0.06,0.276-0.008c0.018,0.052,0.078,0.286,0.234,0.208c0.156-0.078,0.147-0.147,0.19-0.156c0.043-0.009-0.008-0.199-0.078-0.243C14.983,7.689,14.758,7.715,14.698,7.741zM14.385,7.005c0.017,0.044-0.008,0.078,0.113,0.095c0.121,0.018,0.173,0.035,0.243,0.035c0.069,0,0.042-0.113-0.018-0.19c-0.061-0.078-0.043-0.069-0.199-0.113c-0.156-0.043-0.312-0.043-0.416-0.035c-0.104,0.009-0.217-0.017-0.243,0.104c-0.013,0.062,0.07,0.112,0.174,0.112S14.368,6.962,14.385,7.005zM14.611,7.481c0.043,0.095,0.043,0.051,0.165,0.061C14.896,7.551,14.991,7.421,15,7.378c0.009-0.044-0.061-0.13-0.225-0.113c-0.165,0.017-0.667-0.026-0.736,0.034c-0.066,0.058,0,0.233-0.026,0.251c-0.026,0.017,0.009,0.095,0.077,0.078c0.069-0.017,0.104-0.182,0.157-0.182C14.299,7.447,14.568,7.386,14.611,7.481zM12.982,7.126c0.052,0.043,0.183,0.008,0.173-0.035c-0.008-0.043,0.053-0.217-0.051-0.225C13,6.858,12.854,6.962,12.697,7.014c-0.101,0.033-0.078,0.13-0.009,0.13S12.931,7.083,12.982,7.126zM13.72,7.282c-0.087,0.043-0.114,0.069-0.191,0.052c-0.078-0.017-0.078-0.156-0.217-0.13c-0.138,0.026-0.164,0.104-0.207,0.139s-0.139,0.061-0.173,0.043c-0.034-0.017-0.234-0.129-0.234-0.129s-0.416-0.018-0.433-0.07c-0.017-0.052-0.086-0.138-0.277-0.121s-0.52,0.13-0.572,0.13c-0.052,0,0.062,0.104-0.009,0.104c-0.069,0-0.155-0.008-0.181,0.069c-0.018,0.053,0.078,0.052,0.189,0.052c0.112,0,0.295,0,0.347-0.026c0.052-0.026,0.312-0.087,0.303-0.009c-0.009,0.079,0.104,0.199,0.164,0.182c0.061-0.017,0.183-0.13,0.243-0.086c0.061,0.043,0.07,0.146,0.13,0.173c0.061,0.025,0.226,0.025,0.304,0c0.077-0.027,0.294-0.027,0.389-0.009c0.095,0.018,0.373,0.069,0.399,0.018c0.026-0.053,0.104-0.061,0.112-0.113s0.051-0.216,0.051-0.216S13.806,7.239,13.72,7.282zM18.105,16.239c-0.119,0.021-0.091,0.252,0.052,0.21C18.3,16.407,18.223,16.217,18.105,16.239zM19.235,15.929c-0.104-0.026-0.221,0-0.299,0.013c-0.078,0.013-0.299,0.208-0.299,0.208s0.143,0.026,0.233,0.026c0.092,0,0.144,0.051,0.221,0.09c0.078,0.04,0.221-0.052,0.272-0.052c0.053,0,0.118,0.156,0.131-0.013C19.508,16.032,19.339,15.955,19.235,15.929zM15.616,7.507c-0.043-0.104-0.259-0.139-0.304-0.035C15.274,7.563,15.659,7.611,15.616,7.507zM18.093,15.292c0.143-0.026,0.064-0.144-0.053-0.13C17.922,15.175,17.949,15.318,18.093,15.292zM19.82,16.095c-0.119,0.022-0.092,0.253,0.051,0.211C20.015,16.264,19.937,16.074,19.82,16.095zM18.247,15.708c-0.09,0.013-0.285-0.09-0.389-0.182c-0.104-0.091-0.299-0.091-0.377-0.091c-0.077,0-0.39,0.091-0.39,0.091c-0.013,0.13,0.117,0.091,0.273,0.091s0.429-0.026,0.479,0.039c0.053,0.064,0.286,0.168,0.352,0.221c0.064,0.052,0.272,0.065,0.285,0.013S18.338,15.695,18.247,15.708zM16.698,7.412c-0.13-0.009-0.295-0.009-0.399,0c-0.104,0.008-0.182-0.069-0.26-0.113c-0.077-0.043-0.251-0.182-0.354-0.199c-0.104-0.017-0.086-0.017-0.303-0.069c-0.11-0.027-0.294-0.061-0.294-0.086c0-0.026-0.052,0.121,0.043,0.165c0.095,0.043,0.251,0.121,0.363,0.164c0.114,0.043,0.329,0.052,0.399,0.139c0.069,0.086,0.303,0.156,0.303,0.156l0.277,0.026c0,0,0.191-0.043,0.39-0.026c0.199,0.017,0.493,0.043,0.659,0.035c0.163-0.008,0.189-0.061,0.208-0.095c0.016-0.035-0.304-0.104-0.383-0.095C17.271,7.42,16.827,7.42,16.698,7.412zM17.182,9.404c-0.034,0.039,0.157,0.095,0.191,0.043C17.407,9.396,17.271,9.309,17.182,9.404zM17.764,9.585c0.086-0.035,0.043-0.139-0.079-0.104C17.547,9.521,17.676,9.62,17.764,9.585z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.GlobeAlt();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.GlobeAlt = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.GlobeAlt.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.GlobeAlt\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM27.436,17.39c0.001,0.002,0.004,0.002,0.005,0.004c-0.022,0.187-0.054,0.37-0.085,0.554c-0.015-0.012-0.034-0.025-0.047-0.036c-0.103-0.09-0.254-0.128-0.318-0.115c-0.157,0.032,0.229,0.305,0.267,0.342c0.009,0.009,0.031,0.03,0.062,0.058c-1.029,5.312-5.709,9.338-11.319,9.338c-4.123,0-7.736-2.18-9.776-5.441c0.123-0.016,0.24-0.016,0.28-0.076c0.051-0.077,0.102-0.241,0.178-0.331c0.077-0.089,0.165-0.229,0.127-0.292c-0.039-0.064,0.101-0.344,0.088-0.419c-0.013-0.076-0.127-0.256,0.064-0.407s0.394-0.382,0.407-0.444c0.012-0.063,0.166-0.331,0.152-0.458c-0.012-0.127-0.152-0.28-0.24-0.318c-0.09-0.037-0.28-0.05-0.356-0.151c-0.077-0.103-0.292-0.203-0.368-0.178c-0.076,0.025-0.204,0.05-0.305-0.015c-0.102-0.062-0.267-0.139-0.33-0.189c-0.065-0.05-0.229-0.088-0.305-0.088c-0.077,0-0.065-0.052-0.178,0.101c-0.114,0.153,0,0.204-0.204,0.177c-0.204-0.023,0.025-0.036,0.141-0.189c0.113-0.152-0.013-0.242-0.141-0.203c-0.126,0.038-0.038,0.115-0.241,0.153c-0.203,0.036-0.203-0.09-0.076-0.115s0.355-0.139,0.355-0.19c0-0.051-0.025-0.191-0.127-0.191s-0.077-0.126-0.229-0.291c-0.092-0.101-0.196-0.164-0.299-0.204c-0.09-0.579-0.15-1.167-0.15-1.771c0-2.844,1.039-5.446,2.751-7.458c0.024-0.02,0.048-0.034,0.069-0.036c0.084-0.009,0.31-0.025,0.51-0.059c0.202-0.034,0.418-0.161,0.489-0.153c0.069,0.008,0.241,0.008,0.186-0.042C8.417,8.2,8.339,8.082,8.223,8.082S8.215,7.896,8.246,7.896c0.03,0,0.186,0.025,0.178,0.11C8.417,8.091,8.471,8.2,8.625,8.167c0.156-0.034,0.132-0.162,0.102-0.195C8.695,7.938,8.672,7.853,8.642,7.794c-0.031-0.06-0.023-0.136,0.14-0.153C8.944,7.625,9.168,7.708,9.16,7.573s0-0.28,0.046-0.356C9.253,7.142,9.354,7.09,9.299,7.065C9.246,7.04,9.176,7.099,9.121,6.972c-0.054-0.127,0.047-0.22,0.108-0.271c0.02-0.015,0.067-0.06,0.124-0.112C11.234,5.257,13.524,4.466,16,4.466c3.213,0,6.122,1.323,8.214,3.45c-0.008,0.022-0.01,0.052-0.031,0.056c-0.077,0.013-0.166,0.063-0.179-0.051c-0.013-0.114-0.013-0.331-0.102-0.203c-0.089,0.127-0.127,0.127-0.127,0.191c0,0.063,0.076,0.127,0.051,0.241C23.8,8.264,23.8,8.341,23.84,8.341c0.036,0,0.126-0.115,0.239-0.141c0.116-0.025,0.319-0.088,0.332,0.026c0.013,0.115,0.139,0.152,0.013,0.203c-0.128,0.051-0.267,0.026-0.293-0.051c-0.025-0.077-0.114-0.077-0.203-0.013c-0.088,0.063-0.279,0.292-0.279,0.292s-0.306,0.139-0.343,0.114c-0.04-0.025,0.101-0.165,0.203-0.228c0.102-0.064,0.178-0.204,0.14-0.242c-0.038-0.038-0.088-0.279-0.063-0.343c0.025-0.063,0.139-0.152,0.013-0.216c-0.127-0.063-0.217-0.14-0.318-0.178s-0.216,0.152-0.305,0.204c-0.089,0.051-0.076,0.114-0.191,0.127c-0.114,0.013-0.189,0.165,0,0.254c0.191,0.089,0.255,0.152,0.204,0.204c-0.051,0.051-0.267-0.025-0.267-0.025s-0.165-0.076-0.268-0.076c-0.101,0-0.229-0.063-0.33-0.076c-0.102-0.013-0.306-0.013-0.355,0.038c-0.051,0.051-0.179,0.203-0.28,0.152c-0.101-0.051-0.101-0.102-0.241-0.051c-0.14,0.051-0.279-0.038-0.355,0.038c-0.077,0.076-0.013,0.076-0.255,0c-0.241-0.076-0.189,0.051-0.419,0.089s-0.368-0.038-0.432,0.038c-0.064,0.077-0.153,0.217-0.19,0.127c-0.038-0.088,0.126-0.241,0.062-0.292c-0.062-0.051-0.33-0.025-0.367,0.013c-0.039,0.038-0.014,0.178,0.011,0.229c0.026,0.05,0.064,0.254-0.011,0.216c-0.077-0.038-0.064-0.166-0.141-0.152c-0.076,0.013-0.165,0.051-0.203,0.077c-0.038,0.025-0.191,0.025-0.229,0.076c-0.037,0.051,0.014,0.191-0.051,0.203c-0.063,0.013-0.114,0.064-0.254-0.025c-0.14-0.089-0.14-0.038-0.178-0.012c-0.038,0.025-0.216,0.127-0.229,0.012c-0.013-0.114,0.025-0.152-0.089-0.229c-0.115-0.076-0.026-0.076,0.127-0.025c0.152,0.05,0.343,0.075,0.622-0.013c0.28-0.089,0.395-0.127,0.28-0.178c-0.115-0.05-0.229-0.101-0.406-0.127c-0.179-0.025-0.42-0.025-0.7-0.127c-0.279-0.102-0.343-0.14-0.457-0.165c-0.115-0.026-0.813-0.14-1.132-0.089c-0.317,0.051-1.193,0.28-1.245,0.318s-0.128,0.19-0.292,0.318c-0.165,0.127-0.47,0.419-0.712,0.47c-0.241,0.051-0.521,0.254-0.521,0.305c0,0.051,0.101,0.242,0.076,0.28c-0.025,0.038,0.05,0.229,0.191,0.28c0.139,0.05,0.381,0.038,0.393-0.039c0.014-0.076,0.204-0.241,0.217-0.127c0.013,0.115,0.14,0.292,0.114,0.368c-0.025,0.077,0,0.153,0.09,0.14c0.088-0.012,0.559-0.114,0.559-0.114s0.153-0.064,0.127-0.166c-0.026-0.101,0.166-0.241,0.203-0.279c0.038-0.038,0.178-0.191,0.014-0.241c-0.167-0.051-0.293-0.064-0.115-0.216s0.292,0,0.521-0.229c0.229-0.229-0.051-0.292,0.191-0.305c0.241-0.013,0.496-0.025,0.444,0.051c-0.05,0.076-0.342,0.242-0.508,0.318c-0.166,0.077-0.14,0.216-0.076,0.292c0.063,0.076,0.09,0.254,0.204,0.229c0.113-0.025,0.254-0.114,0.38-0.101c0.128,0.012,0.383-0.013,0.42-0.013c0.039,0,0.216,0.178,0.114,0.203c-0.101,0.025-0.229,0.013-0.445,0.025c-0.215,0.013-0.456,0.013-0.456,0.051c0,0.039,0.292,0.127,0.19,0.191c-0.102,0.063-0.203-0.013-0.331-0.026c-0.127-0.012-0.203,0.166-0.241,0.267c-0.039,0.102,0.063,0.28-0.127,0.216c-0.191-0.063-0.331-0.063-0.381-0.038c-0.051,0.025-0.203,0.076-0.331,0.114c-0.126,0.038-0.076-0.063-0.242-0.063c-0.164,0-0.164,0-0.164,0l-0.103,0.013c0,0-0.101-0.063-0.114-0.165c-0.013-0.102,0.05-0.216-0.013-0.241c-0.064-0.026-0.292,0.012-0.33,0.088c-0.038,0.076-0.077,0.216-0.026,0.28c0.052,0.063,0.204,0.19,0.064,0.152c-0.14-0.038-0.317-0.051-0.419,0.026c-0.101,0.076-0.279,0.241-0.279,0.241s-0.318,0.025-0.318,0.102c0,0.077,0,0.178-0.114,0.191c-0.115,0.013-0.268,0.05-0.42,0.076c-0.153,0.025-0.139,0.088-0.317,0.102s-0.204,0.089-0.038,0.114c0.165,0.025,0.418,0.127,0.431,0.241c0.014,0.114-0.013,0.242-0.076,0.356c-0.043,0.079-0.305,0.026-0.458,0.026c-0.152,0-0.456-0.051-0.584,0c-0.127,0.051-0.102,0.305-0.064,0.419c0.039,0.114-0.012,0.178-0.063,0.216c-0.051,0.038-0.065,0.152,0,0.204c0.063,0.051,0.114,0.165,0.166,0.178c0.051,0.013,0.215-0.038,0.279,0.025c0.064,0.064,0.127,0.216,0.165,0.178c0.039-0.038,0.089-0.203,0.153-0.166c0.064,0.039,0.216-0.012,0.331-0.025s0.177-0.14,0.292-0.204c0.114-0.063,0.05-0.063,0.013-0.14c-0.038-0.076,0.114-0.165,0.204-0.254c0.088-0.089,0.253-0.013,0.292-0.115c0.038-0.102,0.051-0.279,0.151-0.267c0.103,0.013,0.243,0.076,0.331,0.076c0.089,0,0.279-0.14,0.332-0.165c0.05-0.025,0.241-0.013,0.267,0.102c0.025,0.114,0.241,0.254,0.292,0.279c0.051,0.025,0.381,0.127,0.433,0.165c0.05,0.038,0.126,0.153,0.152,0.254c0.025,0.102,0.114,0.102,0.128,0.013c0.012-0.089-0.065-0.254,0.025-0.242c0.088,0.013,0.191-0.026,0.191-0.026s-0.243-0.165-0.331-0.203c-0.088-0.038-0.255-0.114-0.331-0.241c-0.076-0.127-0.267-0.153-0.254-0.279c0.013-0.127,0.191-0.051,0.292,0.051c0.102,0.102,0.356,0.241,0.445,0.33c0.088,0.089,0.229,0.127,0.267,0.242c0.039,0.114,0.152,0.241,0.19,0.292c0.038,0.051,0.165,0.331,0.204,0.394c0.038,0.063,0.165-0.012,0.229-0.063c0.063-0.051,0.179-0.076,0.191-0.178c0.013-0.102-0.153-0.178-0.203-0.216c-0.051-0.038,0.127-0.076,0.191-0.127c0.063-0.05,0.177-0.14,0.228-0.063c0.051,0.077,0.026,0.381,0.051,0.432c0.025,0.051,0.279,0.127,0.331,0.191c0.05,0.063,0.267,0.089,0.304,0.051c0.039-0.038,0.242,0.026,0.294,0.038c0.049,0.013,0.202-0.025,0.304-0.05c0.103-0.025,0.204-0.102,0.191,0.063c-0.013,0.165-0.051,0.419-0.179,0.546c-0.127,0.127-0.076,0.191-0.202,0.191c-0.06,0-0.113,0-0.156,0.021c-0.041-0.065-0.098-0.117-0.175-0.097c-0.152,0.038-0.344,0.038-0.47,0.19c-0.128,0.153-0.178,0.165-0.204,0.114c-0.025-0.051,0.369-0.267,0.317-0.331c-0.05-0.063-0.355-0.038-0.521-0.038c-0.166,0-0.305-0.102-0.433-0.127c-0.126-0.025-0.292,0.127-0.418,0.254c-0.128,0.127-0.216,0.038-0.331,0.038c-0.115,0-0.331-0.165-0.331-0.165s-0.216-0.089-0.305-0.089c-0.088,0-0.267-0.165-0.318-0.165c-0.05,0-0.19-0.115-0.088-0.166c0.101-0.05,0.202,0.051,0.101-0.229c-0.101-0.279-0.33-0.216-0.419-0.178c-0.088,0.039-0.724,0.025-0.775,0.025c-0.051,0-0.419,0.127-0.533,0.178c-0.116,0.051-0.318,0.115-0.369,0.14c-0.051,0.025-0.318-0.051-0.433,0.013c-0.151,0.084-0.291,0.216-0.33,0.216c-0.038,0-0.153,0.089-0.229,0.28c-0.077,0.19,0.013,0.355-0.128,0.419c-0.139,0.063-0.394,0.204-0.495,0.305c-0.102,0.101-0.229,0.458-0.355,0.623c-0.127,0.165,0,0.317,0.025,0.419c0.025,0.101,0.114,0.292-0.025,0.471c-0.14,0.178-0.127,0.266-0.191,0.279c-0.063,0.013,0.063,0.063,0.088,0.19c0.025,0.128-0.114,0.255,0.128,0.369c0.241,0.113,0.355,0.217,0.418,0.367c0.064,0.153,0.382,0.407,0.382,0.407s0.229,0.205,0.344,0.293c0.114,0.089,0.152,0.038,0.177-0.05c0.025-0.09,0.178-0.104,0.355-0.104c0.178,0,0.305,0.04,0.483,0.014c0.178-0.025,0.356-0.141,0.42-0.166c0.063-0.025,0.279-0.164,0.443-0.063c0.166,0.103,0.141,0.241,0.23,0.332c0.088,0.088,0.24,0.037,0.355-0.051c0.114-0.09,0.064-0.052,0.203,0.025c0.14,0.075,0.204,0.151,0.077,0.267c-0.128,0.113-0.051,0.293-0.128,0.47c-0.076,0.178-0.063,0.203,0.077,0.278c0.14,0.076,0.394,0.548,0.47,0.638c0.077,0.088-0.025,0.342,0.064,0.495c0.089,0.151,0.178,0.254,0.077,0.331c-0.103,0.075-0.28,0.216-0.292,0.47s0.051,0.431,0.102,0.521s0.177,0.331,0.241,0.419c0.064,0.089,0.14,0.305,0.152,0.445c0.013,0.14-0.024,0.306,0.039,0.381c0.064,0.076,0.102,0.191,0.216,0.292c0.115,0.103,0.152,0.318,0.152,0.318s0.039,0.089,0.051,0.229c0.012,0.14,0.025,0.228,0.152,0.292c0.126,0.063,0.215,0.076,0.28,0.013c0.063-0.063,0.381-0.077,0.546-0.063c0.165,0.013,0.355-0.075,0.521-0.19s0.407-0.419,0.496-0.508c0.089-0.09,0.292-0.255,0.268-0.356c-0.025-0.101-0.077-0.203,0.024-0.254c0.102-0.052,0.344-0.152,0.356-0.229c0.013-0.077-0.09-0.395-0.115-0.457c-0.024-0.064,0.064-0.18,0.165-0.306c0.103-0.128,0.421-0.216,0.471-0.267c0.051-0.053,0.191-0.267,0.217-0.433c0.024-0.167-0.051-0.369,0-0.457c0.05-0.09,0.013-0.165-0.103-0.268c-0.114-0.102-0.089-0.407-0.127-0.457c-0.037-0.051-0.013-0.319,0.063-0.345c0.076-0.023,0.242-0.279,0.344-0.393c0.102-0.114,0.394-0.47,0.534-0.496c0.139-0.025,0.355-0.229,0.368-0.343c0.013-0.115,0.38-0.547,0.394-0.635c0.013-0.09,0.166-0.42,0.102-0.497c-0.062-0.076-0.559,0.115-0.622,0.141c-0.064,0.025-0.241,0.127-0.446,0.113c-0.202-0.013-0.114-0.177-0.127-0.254c-0.012-0.076-0.228-0.368-0.279-0.381c-0.051-0.012-0.203-0.166-0.267-0.317c-0.063-0.153-0.152-0.343-0.254-0.458c-0.102-0.114-0.165-0.38-0.268-0.559c-0.101-0.178-0.189-0.407-0.279-0.572c-0.021-0.041-0.045-0.079-0.067-0.117c0.118-0.029,0.289-0.082,0.31-0.009c0.024,0.088,0.165,0.279,0.19,0.419s0.165,0.089,0.178,0.216c0.014,0.128,0.14,0.433,0.19,0.47c0.052,0.038,0.28,0.242,0.318,0.318c0.038,0.076,0.089,0.178,0.127,0.369c0.038,0.19,0.076,0.444,0.179,0.482c0.102,0.038,0.444-0.064,0.508-0.102s0.482-0.242,0.635-0.255c0.153-0.012,0.179-0.115,0.368-0.152c0.191-0.038,0.331-0.177,0.458-0.28c0.127-0.101,0.28-0.355,0.33-0.444c0.052-0.088,0.179-0.152,0.115-0.253c-0.063-0.103-0.331-0.254-0.433-0.268c-0.102-0.012-0.089-0.178-0.152-0.178s-0.051,0.088-0.178,0.153c-0.127,0.063-0.255,0.19-0.344,0.165s0.026-0.089-0.113-0.203s-0.192-0.14-0.192-0.228c0-0.089-0.278-0.255-0.304-0.382c-0.026-0.127,0.19-0.305,0.254-0.19c0.063,0.114,0.115,0.292,0.279,0.368c0.165,0.076,0.318,0.204,0.395,0.229c0.076,0.025,0.267-0.14,0.33-0.114c0.063,0.024,0.191,0.253,0.306,0.292c0.113,0.038,0.495,0.051,0.559,0.051s0.33,0.013,0.381-0.063c0.051-0.076,0.089-0.076,0.153-0.076c0.062,0,0.177,0.229,0.267,0.254c0.089,0.025,0.254,0.013,0.241,0.179c-0.012,0.164,0.076,0.305,0.165,0.317c0.09,0.012,0.293-0.191,0.293-0.191s0,0.318-0.012,0.433c-0.014,0.113,0.139,0.534,0.139,0.534s0.19,0.393,0.241,0.482s0.267,0.355,0.267,0.47c0,0.115,0.025,0.293,0.103,0.293c0.076,0,0.152-0.203,0.24-0.331c0.091-0.126,0.116-0.305,0.153-0.432c0.038-0.127,0.038-0.356,0.038-0.444c0-0.09,0.075-0.166,0.255-0.242c0.178-0.076,0.304-0.292,0.456-0.407c0.153-0.115,0.141-0.305,0.446-0.305c0.305,0,0.278,0,0.355-0.077c0.076-0.076,0.151-0.127,0.19,0.013c0.038,0.14,0.254,0.343,0.292,0.394c0.038,0.052,0.114,0.191,0.103,0.344c-0.013,0.152,0.012,0.33,0.075,0.33s0.191-0.216,0.191-0.216s0.279-0.189,0.267,0.013c-0.014,0.203,0.025,0.419,0.025,0.545c0,0.053,0.042,0.135,0.088,0.21c-0.005,0.059-0.004,0.119-0.009,0.178C27.388,17.153,27.387,17.327,27.436,17.39zM20.382,12.064c0.076,0.05,0.102,0.127,0.152,0.203c0.052,0.076,0.14,0.05,0.203,0.114c0.063,0.064-0.178,0.14-0.075,0.216c0.101,0.077,0.151,0.381,0.165,0.458c0.013,0.076-0.279,0.114-0.369,0.102c-0.089-0.013-0.354-0.102-0.445-0.127c-0.089-0.026-0.139-0.343-0.025-0.331c0.116,0.013,0.141-0.025,0.267-0.139c0.128-0.115-0.189-0.166-0.278-0.191c-0.089-0.025-0.268-0.305-0.331-0.394c-0.062-0.089-0.014-0.228,0.141-0.331c0.076-0.051,0.279,0.063,0.381,0c0.101-0.063,0.203-0.14,0.241-0.165c0.039-0.025,0.293,0.038,0.33,0.114c0.039,0.076,0.191,0.191,0.141,0.229c-0.052,0.038-0.281,0.076-0.356,0c-0.075-0.077-0.255,0.012-0.268,0.152C20.242,12.115,20.307,12.013,20.382,12.064zM16.875,12.28c-0.077-0.025,0.025-0.178,0.102-0.229c0.075-0.051,0.164-0.178,0.241-0.305c0.076-0.127,0.178-0.14,0.241-0.127c0.063,0.013,0.203,0.241,0.241,0.318c0.038,0.076,0.165-0.026,0.217-0.051c0.05-0.025,0.127-0.102,0.14-0.165s0.127-0.102,0.254-0.102s0.013,0.102-0.076,0.127c-0.09,0.025-0.038,0.077,0.113,0.127c0.153,0.051,0.293,0.191,0.459,0.279c0.165,0.089,0.19,0.267,0.088,0.292c-0.101,0.025-0.406,0.051-0.521,0.038c-0.114-0.013-0.254-0.127-0.419-0.153c-0.165-0.025-0.369-0.013-0.433,0.077s-0.292,0.05-0.395,0.05c-0.102,0-0.228,0.127-0.253,0.077C16.875,12.534,16.951,12.306,16.875,12.28zM17.307,9.458c0.063-0.178,0.419,0.038,0.355,0.127C17.599,9.675,17.264,9.579,17.307,9.458zM17.802,18.584c0.063,0.102-0.14,0.431-0.254,0.407c-0.113-0.027-0.076-0.318-0.038-0.382C17.548,18.545,17.769,18.529,17.802,18.584zM13.189,12.674c0.025-0.051-0.039-0.153-0.127-0.013C13.032,12.71,13.164,12.725,13.189,12.674zM20.813,8.035c0.141,0.076,0.339,0.107,0.433,0.013c0.076-0.076,0.013-0.204-0.05-0.216c-0.064-0.013-0.104-0.115,0.062-0.203c0.165-0.089,0.343-0.204,0.534-0.229c0.19-0.025,0.622-0.038,0.774,0c0.152,0.039,0.382-0.166,0.445-0.254s-0.203-0.152-0.279-0.051c-0.077,0.102-0.444,0.076-0.521,0.051c-0.076-0.025-0.686,0.102-0.812,0.102c-0.128,0-0.179,0.152-0.356,0.229c-0.179,0.076-0.42,0.191-0.509,0.229c-0.088,0.038-0.177,0.19-0.101,0.216C20.509,7.947,20.674,7.959,20.813,8.035zM14.142,12.674c0.064-0.089-0.051-0.217-0.114-0.217c-0.12,0-0.178,0.191-0.103,0.254C14.002,12.776,14.078,12.763,14.142,12.674zM14.714,13.017c0.064,0.025,0.114,0.102,0.165,0.114c0.052,0.013,0.217,0,0.167-0.127s-0.167-0.127-0.204-0.127c-0.038,0-0.203-0.038-0.267,0C14.528,12.905,14.65,12.992,14.714,13.017zM11.308,10.958c0.101,0.013,0.217-0.063,0.305-0.101c0.088-0.038,0.216-0.114,0.216-0.229c0-0.114-0.025-0.216-0.077-0.267c-0.051-0.051-0.14-0.064-0.216-0.051c-0.115,0.02-0.127,0.14-0.203,0.14c-0.076,0-0.165,0.025-0.14,0.114s0.077,0.152,0,0.19C11.117,10.793,11.205,10.946,11.308,10.958zM11.931,10.412c0.127,0.051,0.394,0.102,0.292,0.153c-0.102,0.051-0.28,0.19-0.305,0.267s0.216,0.153,0.216,0.153s-0.077,0.089-0.013,0.114c0.063,0.025,0.102-0.089,0.203-0.089c0.101,0,0.304,0.063,0.406,0.063c0.103,0,0.267-0.14,0.254-0.229c-0.013-0.089-0.14-0.229-0.254-0.28c-0.113-0.051-0.241-0.28-0.317-0.331c-0.076-0.051,0.076-0.178-0.013-0.267c-0.09-0.089-0.153-0.076-0.255-0.14c-0.102-0.063-0.191,0.013-0.254,0.089c-0.063,0.076-0.14-0.013-0.217,0.012c-0.102,0.035-0.063,0.166-0.012,0.229C11.714,10.221,11.804,10.361,11.931,10.412zM24.729,17.198c-0.083,0.037-0.153,0.47,0,0.521c0.152,0.052,0.241-0.202,0.191-0.267C24.868,17.39,24.843,17.147,24.729,17.198zM20.114,20.464c-0.159-0.045-0.177,0.166-0.304,0.306c-0.128,0.141-0.267,0.254-0.317,0.241c-0.052-0.013-0.331,0.089-0.242,0.279c0.089,0.191,0.076,0.382-0.013,0.472c-0.089,0.088,0.076,0.342,0.052,0.482c-0.026,0.139,0.037,0.229,0.215,0.229s0.242-0.064,0.318-0.229c0.076-0.166,0.088-0.331,0.164-0.47c0.077-0.141,0.141-0.434,0.179-0.51c0.038-0.075,0.114-0.316,0.102-0.457C20.254,20.669,20.204,20.489,20.114,20.464zM10.391,8.802c-0.069-0.06-0.229-0.102-0.306-0.11c-0.076-0.008-0.152,0.06-0.321,0.06c-0.168,0-0.279,0.067-0.347,0C9.349,8.684,9.068,8.65,9.042,8.692C9.008,8.749,8.941,8.751,9.008,8.87c0.069,0.118,0.12,0.186,0.179,0.178s0.262-0.017,0.288,0.051C9.5,9.167,9.569,9.226,9.712,9.184c0.145-0.042,0.263-0.068,0.296-0.119c0.033-0.051,0.263-0.059,0.263-0.059S10.458,8.861,10.391,8.802z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.GlobeAlt2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.GlobeAlt2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.GlobeAlt2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.GlobeAlt2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM8.251,7.48c0.122,0.055,0.255,0.104,0.28,0.137C8.57,7.668,8.621,7.823,8.557,7.861C8.492,7.9,8.39,7.887,8.376,7.771c-0.013-0.115-0.026-0.128-0.18-0.18c-0.022-0.007-0.035-0.01-0.051-0.015C8.18,7.544,8.216,7.512,8.251,7.48zM7.733,7.974c0.031,0.087,0.113,0.125,0,0.17C7.673,8.168,7.611,8.172,7.559,8.165C7.617,8.102,7.672,8.035,7.733,7.974zM16,27.533C9.639,27.533,4.466,22.36,4.466,16c0-0.085,0.011-0.168,0.013-0.254c0.004-0.003,0.008-0.006,0.012-0.009c0.129-0.102,0.283-0.359,0.334-0.45c0.052-0.089,0.181-0.154,0.116-0.256c-0.059-0.096-0.292-0.23-0.407-0.261c0.01-0.099,0.032-0.195,0.045-0.294c0.063,0.077,0.137,0.17,0.208,0.194c0.115,0.038,0.501,0.052,0.566,0.052c0.063,0,0.334,0.014,0.386-0.064c0.051-0.077,0.09-0.077,0.154-0.077c0.064,0,0.18,0.231,0.271,0.257c0.089,0.026,0.257,0.013,0.244,0.181c-0.012,0.166,0.077,0.309,0.167,0.321c0.09,0.013,0.296-0.194,0.296-0.194s0,0.322-0.012,0.438C6.846,15.698,7,16.124,7,16.124s0.193,0.397,0.244,0.488c0.052,0.09,0.27,0.36,0.27,0.476c0,0.117,0.026,0.297,0.104,0.297s0.155-0.206,0.244-0.335c0.091-0.128,0.117-0.31,0.155-0.438c0.039-0.129,0.039-0.36,0.039-0.45c0-0.091,0.076-0.168,0.257-0.245c0.181-0.077,0.309-0.296,0.463-0.412c0.155-0.116,0.142-0.309,0.452-0.309c0.308,0,0.282,0,0.36-0.078c0.077-0.077,0.154-0.128,0.192,0.013c0.039,0.142,0.257,0.347,0.296,0.399c0.039,0.052,0.116,0.193,0.104,0.348c-0.013,0.153,0.012,0.334,0.077,0.334c0.064,0,0.193-0.219,0.193-0.219s0.283-0.192,0.27,0.014c-0.014,0.205,0.025,0.425,0.025,0.552c0,0.13,0.232,0.438,0.232,0.362c0-0.079,0.103-0.296,0.103-0.413c0-0.114,0.064-0.063,0.231,0.051c0.167,0.116,0.283,0.349,0.283,0.349s0.168,0.154,0.193,0.219c0.026,0.064,0.206-0.025,0.244-0.104c0.039-0.076,0.065-0.115,0.167-0.141c0.104-0.026,0.231-0.026,0.271-0.168c0.039-0.142,0.154-0.308,0-0.502c-0.154-0.193-0.232-0.321-0.347-0.412c-0.117-0.09-0.206-0.322-0.206-0.322s0.244-0.218,0.321-0.296c0.079-0.077,0.193-0.025,0.207,0.064c0.013,0.091-0.115,0.168-0.141,0.361c-0.026,0.192,0.154,0.257,0.206,0.192c0.051-0.065,0.18-0.219,0.18-0.257c0-0.039-0.089-0.026-0.102-0.167c-0.013-0.142,0.166-0.245,0.23-0.207c0.066,0.039,0.477-0.051,0.67-0.154s0.308-0.322,0.425-0.412c0.116-0.089,0.515-0.386,0.489-0.527c-0.026-0.142,0.012-0.334-0.09-0.515c-0.103-0.18-0.232-0.295-0.283-0.373c-0.051-0.077,0.219-0.09,0.347-0.206c0.129-0.116,0-0.219-0.064-0.206c-0.064,0.013-0.232,0.052-0.296,0.039c-0.064-0.013-0.103-0.077-0.206-0.155c-0.102-0.077,0.026-0.192,0.091-0.179c0.064,0.013,0.23-0.129,0.308-0.193c0.077-0.064,0.193-0.115,0.154-0.051c-0.038,0.064-0.128,0.296-0.026,0.309c0.104,0.013,0.348-0.193,0.388-0.18c0.038,0.013,0.102,0.18,0.064,0.257c-0.039,0.077-0.039,0.206,0.013,0.193c0.051-0.013,0.154-0.129,0.18-0.09c0.027,0.039,0.154,0.116,0.09,0.257c-0.063,0.142-0.193,0.193-0.039,0.284c0.154,0.089,0.206,0.012,0.322-0.052c0.115-0.064,0.193-0.347,0.128-0.438c-0.064-0.09-0.218-0.27-0.218-0.334c0-0.064,0.257-0.064,0.257-0.167s0.09-0.18,0.18-0.219c0.091-0.039,0.206-0.206,0.244-0.154c0.039,0.052,0.271,0.116,0.334,0.039c0.064-0.077,0.4-0.36,0.605-0.515c0.206-0.154,0.283-0.334,0.336-0.515c0.051-0.18,0.128-0.296,0.102-0.437v0c0.077,0.18,0.09,0.309,0.077,0.45c-0.013,0.142,0,0.438,0.026,0.476c0.025,0.039,0.129,0.128,0.192,0.103c0.064-0.025-0.025-0.283-0.025-0.334c0-0.052,0.09-0.129,0.142-0.142c0.052-0.013,0-0.231-0.065-0.322c-0.063-0.09-0.154-0.142-0.102-0.154c0.051-0.013,0.115-0.116,0.077-0.142c-0.039-0.025-0.014-0.116-0.103-0.09c-0.065,0.019-0.241-0.015-0.235,0.095c-0.037-0.11-0.116-0.183-0.216-0.172c-0.116,0.013-0.181,0.077-0.296,0.077s-0.025-0.18-0.077-0.18c-0.051,0-0.168,0.167-0.231,0.077c-0.064-0.09,0.18-0.206,0.373-0.27c0.192-0.064,0.514-0.438,0.644-0.451c0.128-0.013,0.45,0.026,0.733,0.013c0.283-0.013,0.373-0.129,0.463-0.064s0.283,0.142,0.399,0.129c0.116-0.014,0.064,0,0.244-0.129c0.18-0.129,0.348-0.193,0.438-0.296c0.09-0.103,0.335-0.18,0.348-0.077c0.014,0.103-0.026,0.206,0.077,0.206s0.258-0.103,0.386-0.154c0.129-0.051,0.231-0.116,0.231-0.116s-0.527,0.36-0.655,0.438c-0.129,0.077-0.438,0.129-0.567,0.283c-0.128,0.155-0.205,0.206-0.192,0.374c0.014,0.167,0.231,0.386,0.128,0.54c-0.103,0.154-0.141,0.373-0.141,0.373s0.154-0.219,0.373-0.36s0.348-0.334,0.425-0.412s0.309-0.091,0.309-0.181s0.064-0.206,0.104-0.309c0.038-0.103-0.077-0.078,0-0.206c0.076-0.129,0.064-0.232,0.45-0.232s0.257,0.026,0.566,0.013c0.309-0.013,0.424-0.167,0.72-0.245c0.296-0.077,0.527-0.128,0.618-0.089c0.09,0.038,0.232,0.012,0.141-0.078c-0.089-0.09-0.295-0.219-0.193-0.245c0.104-0.026,0.207-0.039,0.246-0.142c0.039-0.103-0.142-0.283-0.039-0.386c0.104-0.103-0.077-0.231-0.207-0.257c-0.128-0.025-0.63,0.026-0.731-0.025c-0.104-0.052-0.271-0.116-0.322-0.078c-0.052,0.039-0.168,0.245-0.168,0.245s-0.09,0.025-0.168-0.09c-0.076-0.116-0.5-0.103-0.629-0.103s-0.271,0.025-0.413,0.039c-0.141,0.013-0.219,0.052-0.322-0.039c-0.102-0.09-0.243-0.129-0.296-0.167c-0.051-0.039-0.334-0.039-0.553-0.012c-0.218,0.025-0.438,0.025-0.438,0.025s-0.104-0.039-0.257-0.129c-0.154-0.09-0.309-0.154-0.361-0.154c-0.051,0-0.449,0.064-0.539,0c-0.091-0.064-0.181-0.103-0.245-0.103s-0.115-0.103-0.038-0.103s0.437-0.103,0.437-0.103s-0.103-0.142-0.231-0.142c-0.128,0-0.359-0.064-0.424-0.064s-0.014,0.064-0.142,0.039c-0.13-0.026-0.258-0.078-0.335-0.026c-0.076,0.051-0.258,0.128-0.064,0.18c0.193,0.052,0.373,0,0.425,0.078c0.052,0.077,0,0.115,0,0.167s-0.103,0.193-0.167,0.219c-0.064,0.025-0.143-0.039-0.27,0.025c-0.129,0.064-0.451,0.013-0.49,0.052c-0.038,0.039-0.115-0.103-0.18-0.077c-0.064,0.025-0.232,0.193-0.322,0.18c-0.089-0.013-0.206-0.103-0.206-0.206s-0.038-0.232-0.077-0.258c-0.038-0.025-0.322-0.039-0.425-0.025c-0.103,0.013-0.424,0.038-0.477,0.09c-0.052,0.052-0.193,0.09-0.283,0.09s-0.167-0.09-0.36-0.116c-0.192-0.026-0.617-0.039-0.669-0.026s-0.218-0.025-0.155-0.077c0.065-0.051,0.257-0.219,0.143-0.295c-0.117-0.078-0.375-0.078-0.489-0.09c-0.117-0.013-0.232-0.039-0.413-0.013c-0.181,0.026-0.219,0.116-0.296,0.039c-0.077-0.077,0.193,0.039-0.077-0.077c-0.27-0.116-0.399-0.103-0.477-0.064c-0.077,0.039,0.013,0.025-0.192,0.103c-0.206,0.078-0.322,0.116-0.374,0.129c-0.051,0.012-0.372-0.065-0.411-0.091c-0.038-0.025-0.181,0.013-0.309,0.064S9.895,7.025,9.767,7C9.638,6.973,9.432,6.973,9.303,7.025C9.174,7.076,9.084,7.076,8.956,7.166c-0.13,0.09-0.373,0.142-0.373,0.142S8.522,7.305,8.448,7.301C10.474,5.541,13.111,4.466,16,4.466c6.361,0,11.534,5.173,11.534,11.534S22.36,27.533,16,27.533zM14.888,19.92c0,0,0.207-0.026,0.207-0.117c0-0.089-0.207-0.205-0.282-0.102c-0.078,0.102-0.219,0.205-0.207,0.296C14.625,20.138,14.888,19.92,14.888,19.92zM14.875,17.023c-0.181,0.233-0.167,0.182-0.296,0.128c-0.128-0.05-0.334,0.116-0.296,0.182c0.039,0.064,0.322-0.014,0.386,0.102c0.065,0.116,0.065,0.129,0.193,0.104c0.128-0.026,0.257-0.205,0.219-0.295C15.043,17.151,14.875,17.023,14.875,17.023zM14.837,18.245c-0.051,0-0.412,0.064-0.451,0.079c-0.039,0.013-0.27-0.025-0.27-0.025c-0.09,0.089-0.026,0.179,0.116,0.166s0.438-0.052,0.502-0.052C14.799,18.413,14.888,18.245,14.837,18.245zM14.284,14.668c-0.19,0.03-0.308,0.438-0.155,0.425C14.284,15.081,14.451,14.643,14.284,14.668zM14.734,16.959c-0.052-0.064-0.181-0.271-0.323-0.219c-0.042,0.017-0.153,0.245-0.012,0.245C14.541,16.985,14.786,17.023,14.734,16.959zM14.85,16.805c0.232-0.013,0.167-0.245-0.013-0.257C14.786,16.544,14.618,16.818,14.85,16.805zM17.591,18.928c-0.193-0.039-0.244-0.102-0.45-0.205c-0.207-0.103-0.67-0.103-0.682-0.039c-0.014,0.064,0,0-0.155-0.05c-0.153-0.054-0.271,0-0.309-0.091c-0.038-0.091-0.128-0.117-0.244-0.002c-0.097,0.097-0.142,0.104,0.078,0.143c0.218,0.039,0.283,0.039,0.192,0.141c-0.09,0.104-0.154,0.233-0.077,0.244c0.077,0.015,0.309-0.05,0.334,0c0.026,0.054-0.051,0.064,0.207,0.105c0.258,0.037,0.309,0.128,0.359,0.178c0.051,0.052,0.206,0.22,0.104,0.22c-0.104,0-0.219,0.128-0.142,0.143c0.077,0.013,0.309-0.039,0.321,0c0.014,0.037,0.143,0.283,0.271,0.271c0.129-0.013,0.206-0.244,0.27-0.31c0.065-0.064,0.322-0.104,0.349,0.012c0.026,0.116,0.104,0.233,0.257,0.311c0.154,0.076,0.335,0.154,0.348,0.089c0.013-0.064-0.077-0.309-0.181-0.346c-0.103-0.041-0.282-0.259-0.282-0.348c0-0.091-0.155-0.117-0.232-0.182C17.849,19.147,17.784,18.967,17.591,18.928zM8.042,17.023c-0.084,0.037-0.155,0.476,0,0.527c0.154,0.052,0.244-0.205,0.193-0.271C8.183,17.218,8.158,16.973,8.042,17.023zM15.429,18.117c-0.118-0.05-0.335,0.424-0.181,0.463C15.403,18.62,15.518,18.156,15.429,18.117zM15.687,13.703c0.077,0,0.18-0.051,0.18-0.193c0-0.142,0.18,0,0.27-0.013s0.141-0.103,0.18-0.206c0.005-0.013,0.008-0.021,0.009-0.027c-0.003,0.024-0.001,0.093,0.095,0.117c0.154,0.038,0.205-0.064,0.205-0.103s0.283-0.103,0.336-0.142c0.051-0.038,0.258-0.103,0.27-0.154c0.013-0.051,0-0.348,0.064-0.373c0.064-0.026,0.154-0.026,0.052-0.206c-0.104-0.181-0.104-0.348-0.232-0.271c-0.095,0.057-0.038,0.284-0.115,0.438s-0.142,0.296-0.193,0.296s-0.321,0.103-0.399,0.18c-0.076,0.077-0.45-0.064-0.501,0c-0.052,0.064-0.154,0.141-0.219,0.193c-0.065,0.051-0.245,0.013-0.207,0.167C15.518,13.562,15.609,13.703,15.687,13.703zM17.449,12.056c0.18-0.013,0.348-0.064,0.348-0.064s0.271,0.013,0.232-0.116c-0.04-0.128-0.322-0.141-0.375-0.128c-0.051,0.013-0.142-0.142-0.244-0.116c-0.096,0.023-0.128,0.155-0.128,0.193c0,0.039-0.36,0.115-0.245,0.219C17.153,12.146,17.27,12.069,17.449,12.056zM13.91,19.058c0.104,0.064,0.296-0.219,0.349-0.13c0.051,0.091-0.013,0.13,0.076,0.246c0.091,0.114,0.258,0.102,0.258,0.102s-0.013-0.309-0.155-0.387c-0.142-0.077-0.232-0.166-0.064-0.141c0.167,0.026,0.257-0.039,0.219-0.114c-0.039-0.078-0.283-0.039-0.361-0.026s-0.193-0.052-0.193-0.052c-0.077,0.024-0.063,0.089-0.09,0.219C13.923,18.902,13.807,18.992,13.91,19.058zM20.924,21.618c-0.231-0.052-0.077,0.039,0,0.154c0.077,0.116,0.232,0.176,0.258,0.05C21.193,21.759,21.155,21.67,20.924,21.618zM21.915,24.744c-0.077,0.064,0,0.091-0.219,0.22c-0.22,0.13-0.49,0.271-0.541,0.386c-0.052,0.116,0.051,0.181,0.258,0.192c0.206,0.013,0.154,0.053,0.296-0.103s0.271-0.244,0.438-0.373c0.168-0.128,0.168-0.322,0.168-0.322s-0.181-0.178-0.193-0.141C22.1,24.665,21.992,24.681,21.915,24.744zM18.504,21.618c0.014-0.116-0.219-0.116-0.334-0.207c-0.116-0.089-0.128-0.359-0.193-0.515c-0.064-0.153-0.192-0.257-0.322-0.397c-0.128-0.143-0.192-0.465-0.23-0.438c-0.039,0.025-0.154,0.399-0.064,0.515c0.09,0.116-0.039,0.348-0.103,0.503c-0.065,0.153-0.22-0.026-0.349-0.104c-0.129-0.078-0.308-0.128-0.398-0.219c-0.09-0.091,0.155-0.335,0.091-0.426c-0.065-0.09-0.412-0.013-0.45-0.013c-0.039,0-0.116-0.128-0.194-0.128c-0.077,0-0.064,0.258-0.064,0.258s-0.078-0.091-0.193-0.207c-0.117-0.115,0.012,0.077-0.103,0.193c-0.117,0.117-0.079,0.078-0.129,0.206c-0.051,0.129-0.167,0.077-0.283-0.052c-0.116-0.128-0.179-0.037-0.258,0c-0.077,0.039-0.141,0.259-0.18,0.309c-0.039,0.052-0.309,0.117-0.374,0.182c-0.064,0.062-0.09,0.27-0.09,0.322c0,0.05-0.271,0.023-0.361,0.089c-0.09,0.064-0.23,0.025-0.321,0.025c-0.09,0-0.399,0.244-0.502,0.308c-0.103,0.066-0.103,0.298-0.051,0.362c0.051,0.063,0.154,0.219,0.09,0.244c-0.064,0.026-0.104,0.206,0.051,0.359c0.154,0.155,0.103,0.194,0.115,0.271c0.014,0.077,0.078,0.104,0.181,0.232c0.102,0.128-0.181,0.231-0.219,0.31c-0.039,0.076,0.091,0.192,0.167,0.257c0.077,0.063,0.271,0.026,0.386-0.013c0.117-0.039,0.245-0.143,0.321-0.155c0.079-0.013,0.438-0.026,0.438-0.026s0.129-0.192,0.219-0.296c0.089-0.102,0.372-0.013,0.372-0.013s0.117-0.076,0.426-0.141c0.309-0.065,0.179,0.064,0.296,0.104c0.115,0.037,0.27,0.062,0.359,0.128c0.09,0.064,0,0.218-0.012,0.283c-0.014,0.064,0.219,0.038,0.23-0.026c0.014-0.064,0.077-0.128,0.207-0.205c0.128-0.078,0.025,0.114,0.076,0.231c0.052,0.116,0.129-0.157,0.129-0.026c0,0.039,0.039,0.078,0.051,0.116c0.014,0.039,0.181,0.052,0.181,0.18c0,0.13,0,0.207,0.039,0.231c0.038,0.026,0.244,0,0.335,0.155c0.089,0.154,0.154,0.013,0.205-0.052c0.052-0.064,0.231,0.026,0.283,0.078c0.052,0.05,0.193-0.104,0.387-0.155c0.192-0.051,0.167-0.039,0.219-0.115c0.051-0.078,0.09-0.283,0.205-0.438c0.115-0.153,0.271-0.424,0.271-0.631c0-0.206-0.014-0.682-0.155-0.899C18.761,21.953,18.492,21.733,18.504,21.618zM18.029,24.77c-0.065-0.013-0.207-0.062-0.207-0.062c-0.142,0.141,0.142,0.141,0.104,0.283c-0.039,0.141,0.193,0.089,0.257,0.064c0.063-0.027,0.22-0.323,0.193-0.399C18.351,24.577,18.093,24.783,18.029,24.77zM22.803,24.178c-0.052,0-0.077,0.064-0.192,0c-0.117-0.063-0.091-0.037-0.168-0.167c-0.077-0.127-0.091-0.296-0.219-0.23c-0.051,0.025,0,0.168,0.051,0.218c0.053,0.052,0.077,0.231,0.064,0.283c-0.012,0.052-0.231,0.116-0.129,0.18c0.104,0.064,0.297,0,0.271,0.078c-0.025,0.077-0.129,0.179-0.013,0.205c0.115,0.025,0.154-0.089,0.207-0.178c0.051-0.093,0.089-0.169,0.179-0.221C22.944,24.294,22.854,24.178,22.803,24.178zM22.815,21.18c0.168,0.064,0.464-0.231,0.347-0.27C23.047,20.871,22.815,21.18,22.815,21.18zM13.923,19.906c-0.029,0.115,0.193,0.167,0.206,0.039C14.141,19.816,13.949,19.803,13.923,19.906zM14.27,16.47c-0.064,0.065-0.257,0.193-0.283,0.31c-0.025,0.115,0.309-0.182,0.399-0.296c0.091-0.117,0.27-0.052,0.308-0.117c0.04-0.063,0.04-0.063,0.04-0.063s-0.142-0.025-0.257-0.063c-0.117-0.039-0.258,0.102-0.193-0.104c0.064-0.206,0.257-0.167,0.219-0.322c-0.039-0.154-0.168-0.193-0.207-0.193c-0.09,0,0.013,0.141-0.116,0.231c-0.128,0.09-0.271,0.128-0.193,0.283C14.064,16.29,14.334,16.405,14.27,16.47zM13.254,19.751c0.013-0.076-0.142-0.192-0.206-0.192c-0.065,0-0.386-0.077-0.386-0.077c-0.058,0.023-0.135,0.045-0.158,0.077c-0.007-0.011-0.022-0.024-0.049-0.039c-0.142-0.075-0.309,0-0.361-0.102c-0.05-0.104-0.127-0.104-0.179-0.039c-0.094,0.117,0.025,0.206,0.063,0.231c0.038,0.024,0.181,0.052,0.309,0.039c0.08-0.008,0.181-0.027,0.21-0.059c0.004,0.014,0.016,0.027,0.035,0.044c0.103,0.092,0.167,0.13,0.321,0.116C13.009,19.74,13.241,19.829,13.254,19.751zM12.881,18.992c0.065,0,0.193,0,0.283,0.026c0.09,0.025,0.386,0.05,0.373-0.064c-0.013-0.115-0.038-0.297,0.089-0.411c0.13-0.117,0.257-0.18,0.193-0.348c-0.063-0.167-0.193-0.271-0.103-0.349c0.09-0.076,0.192-0.102,0.192-0.166c0-0.065-0.217,0.18-0.244-0.246c-0.005-0.091-0.206,0.025-0.219,0.116c-0.012,0.091,0.142,0.167-0.103,0.167c-0.245,0-0.257,0.194-0.309,0.232c-0.052,0.039-0.103,0.051-0.207,0.076c-0.102,0.026-0.127,0.13-0.153,0.194c-0.025,0.063-0.206-0.116-0.257-0.064c-0.051,0.052-0.013,0.296,0.077,0.501C12.585,18.863,12.816,18.992,12.881,18.992zM11.979,18.928c0.065-0.077,0.038-0.192-0.063-0.18c-0.103,0.013-0.193-0.168-0.36-0.283c-0.168-0.114-0.296-0.194-0.451-0.36c-0.154-0.167-0.347-0.271-0.45-0.359c-0.104-0.091-0.257-0.13-0.322-0.116c-0.159,0.032,0.231,0.309,0.271,0.346c0.039,0.041,0.387,0.335,0.387,0.478s0.231,0.476,0.296,0.527c0.064,0.052,0.385,0.244,0.437,0.348c0.052,0.103,0.167,0.13,0.167-0.013C11.89,19.174,11.916,19.006,11.979,18.928zM11.002,17.474c0.064,0.232,0.193,0.464,0.244,0.555c0.052,0.089,0.271,0.217,0.348,0.281c0.077,0.064,0.192-0.024,0.143-0.102c-0.052-0.078-0.155-0.192-0.167-0.283c-0.013-0.091-0.078-0.233-0.181-0.387c-0.102-0.153-0.192-0.192-0.257-0.295c-0.064-0.104-0.296-0.297-0.296-0.297c-0.102,0.013-0.102,0.205-0.051,0.271C10.834,17.28,10.938,17.243,11.002,17.474z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Hail();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Hail = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Hail.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Hail\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.372,6.912c-0.093-3.925-3.302-7.078-7.248-7.08c-2.638,0.002-4.942,1.412-6.208,3.518c-0.595-0.327-1.28-0.518-2.01-0.518C7.627,2.834,5.773,4.639,5.69,6.898c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.875c3.312,0,6-2.688,6-6C29.434,9.944,27.732,7.715,25.372,6.912zM23.436,16.584H7.562c-2.209-0.006-3.997-1.793-4.001-4c-0.002-1.983,1.45-3.619,3.35-3.933c0.265-0.043,0.502-0.19,0.657-0.414C7.723,8.015,7.78,7.74,7.731,7.475C7.703,7.326,7.686,7.187,7.686,7.051c0.004-1.225,0.995-2.217,2.22-2.219c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.31c0.342-0.066,0.626-0.308,0.748-0.631c0.749-1.992,2.662-3.412,4.911-3.41c2.898,0.004,5.244,2.351,5.251,5.25c0,0.16-0.009,0.325-0.026,0.496c-0.05,0.518,0.305,0.984,0.814,1.079c1.859,0.345,3.273,1.966,3.271,3.923C27.43,14.791,25.645,16.578,23.436,16.584zM11.503,23.709c-0.784-0.002-1.418-0.636-1.418-1.416c0-0.785,0.634-1.416,1.418-1.418c0.78,0.002,1.413,0.633,1.416,1.418C12.917,23.073,12.284,23.707,11.503,23.709zM19.002,23.709c-0.783-0.002-1.418-0.636-1.418-1.416c0-0.785,0.635-1.416,1.418-1.418c0.779,0.002,1.414,0.633,1.414,1.418C20.417,23.073,19.784,23.707,19.002,23.709zM7.503,28.771c-0.783-0.002-1.417-0.637-1.417-1.418s0.634-1.414,1.417-1.416c0.78,0.002,1.415,0.635,1.415,1.416C8.917,28.135,8.284,28.77,7.503,28.771zM15.001,28.771c-0.782-0.002-1.417-0.637-1.417-1.418s0.634-1.414,1.417-1.416c0.78,0.002,1.413,0.635,1.415,1.416C16.415,28.135,15.784,28.77,15.001,28.771zM22.5,28.771c-0.782-0.002-1.416-0.634-1.416-1.416c0-0.785,0.634-1.418,1.416-1.42c0.781,0.002,1.414,0.635,1.418,1.42C23.915,28.138,23.282,28.77,22.5,28.771z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Hammer();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Hammer = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Hammer.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Hammer\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M7.831,29.354c0.685,0.353,1.62,1.178,2.344,0.876c0.475-0.195,0.753-1.301,1.048-1.883c2.221-4.376,4.635-9.353,6.392-13.611c0-0.19,0.101-0.337-0.049-0.595c0.983-1.6,1.65-3.358,2.724-5.138c0.34-0.566,0.686-1.351,1.163-1.577l0.881-0.368c1.12-0.288,1.938-0.278,2.719,0.473c0.396,0.383,0.578,1.015,0.961,1.395c0.259,0.26,1.246,0.899,1.613,0.8c0.285-0.077,0.52-0.364,0.72-0.728l0.696-1.286c0.195-0.366,0.306-0.718,0.215-0.999c-0.117-0.362-1.192-0.84-1.552-0.915c-0.528-0.113-1.154,0.081-1.692-0.041c-1.057-0.243-1.513-0.922-1.883-2.02c-2.608-1.533-6.119-2.53-10.207-1.244c-1.109,0.349-2.172,0.614-2.901,1.323c-0.146,0.412,0.143,0.494,0.446,0.489c-0.237,0.216-0.62,0.341-0.399,0.848c2.495-1.146,7.34-1.542,7.669,0.804c0.072,0.522-0.395,1.241-0.682,1.835c-0.905,1.874-2.011,3.394-2.813,5.091c-0.298,0.017-0.366,0.18-0.525,0.287c-2.604,3.8-5.451,8.541-7.9,12.794c-0.326,0.566-1.098,1.402-1.002,1.906C5.961,28.641,7.146,29,7.831,29.354z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.HammerAndScrewDriver();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.HammerAndScrewDriver = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.HammerAndScrewDriver.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.HammerAndScrewDriver\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.537,9.859c-0.473-0.259-1.127-0.252-1.609-0.523c-0.943-0.534-1.186-1.316-1.226-2.475c-2.059-2.215-5.138-4.176-9.424-4.114c-1.162,0.017-2.256-0.035-3.158,0.435c-0.258,0.354-0.004,0.516,0.288,0.599c-0.29,0.138-0.692,0.147-0.626,0.697c2.72-0.383,7.475,0.624,7.116,2.966c-0.08,0.521-0.735,1.076-1.179,1.563c-1.263,1.382-2.599,2.45-3.761,3.667l0.336,0.336c0.742-0.521,1.446-0.785,2.104-0.785c0.707,0,1.121,0.297,1.276,0.433c0.575-0.618,1.166-1.244,1.839-1.853c0.488-0.444,1.047-1.099,1.566-1.178l0.949-0.101c1.156,0.047,1.937,0.29,2.471,1.232c0.27,0.481,0.262,1.139,0.521,1.613c0.175,0.324,0.937,1.218,1.316,1.228c0.294,0.009,0.603-0.199,0.899-0.49l1.033-1.034c0.291-0.294,0.501-0.6,0.492-0.896C29.754,10.801,28.861,10.035,28.537,9.859zM13.021,15.353l-0.741-0.741c-3.139,2.643-6.52,5.738-9.531,8.589c-0.473,0.443-1.452,1.021-1.506,1.539c-0.083,0.781,0.95,1.465,1.506,2c0.556,0.533,1.212,1.602,1.994,1.51c0.509-0.043,1.095-1.029,1.544-1.502c2.255-2.374,4.664-4.976,6.883-7.509c-0.312-0.371-0.498-0.596-0.498-0.596C12.535,18.451,11.779,17.272,13.021,15.353zM20.64,15.643c-0.366-0.318-1.466,0.143-1.777-0.122c-0.311-0.266,0.171-1.259-0.061-1.455c-0.482-0.406-0.77-0.646-0.77-0.646s-0.862-0.829-2.812,0.928L7.44,6.569C7.045,6.173,7.203,4.746,7.203,4.746L3.517,2.646L2.623,3.541l2.1,3.686c0,0,1.428-0.158,1.824,0.237l7.792,7.793c-1.548,1.831-0.895,2.752-0.895,2.752s0.238,0.288,0.646,0.771c0.196,0.23,1.188-0.249,1.455,0.061c0.264,0.312-0.196,1.41,0.12,1.777c2.666,3.064,6.926,7.736,8.125,7.736c0.892,0,2.021-0.724,2.948-1.64c0.925-0.917,1.639-2.055,1.639-2.947C28.377,22.567,23.704,18.309,20.64,15.643z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.HangUp();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.HangUp = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.HangUp.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.HangUp\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.563,10.494c-7.35-7.349-19.265-7.348-26.612,0.001c-1.796,1.796-0.247,6.84-0.247,6.84c0.135,0.443,0.616,0.72,1.067,0.614l6.898-1.604c0.451-0.105,0.82-0.57,0.82-1.033l0.001-3.685c0-0.463,0.379-0.842,0.842-0.842h8.285c0.464,0,0.843,0.379,0.843,0.842l-0.001,3.471c0.001,0.462,0.375,0.907,0.83,0.986l7.635,1.316c0.456,0.08,0.873-0.232,0.926-0.692C29.851,16.708,30.359,12.29,28.563,10.494zM17.264,14.072h-3.501v4.39h-2.625l4.363,7.556l4.363-7.556h-2.6V14.072z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Help();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Help = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Help.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Help\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.834,4.834L4.833,4.833c-5.889,5.892-5.89,15.443,0.001,21.334s15.44,5.888,21.33-0.002c5.891-5.891,5.893-15.44,0.002-21.33C20.275-1.056,10.725-1.056,4.834,4.834zM25.459,5.542c0.833,0.836,1.523,1.757,2.104,2.726l-4.08,4.08c-0.418-1.062-1.053-2.06-1.912-2.918c-0.859-0.859-1.857-1.494-2.92-1.913l4.08-4.08C23.7,4.018,24.622,4.709,25.459,5.542zM10.139,20.862c-2.958-2.968-2.959-7.758-0.001-10.725c2.966-2.957,7.756-2.957,10.725,0c2.954,2.965,2.955,7.757-0.001,10.724C17.896,23.819,13.104,23.817,10.139,20.862zM5.542,25.459c-0.833-0.837-1.524-1.759-2.105-2.728l4.081-4.081c0.418,1.063,1.055,2.06,1.914,2.919c0.858,0.859,1.855,1.494,2.917,1.913l-4.081,4.081C7.299,26.982,6.379,26.292,5.542,25.459zM8.268,3.435l4.082,4.082C11.288,7.935,10.29,8.571,9.43,9.43c-0.858,0.859-1.494,1.855-1.912,2.918L3.436,8.267c0.58-0.969,1.271-1.89,2.105-2.727C6.377,4.707,7.299,4.016,8.268,3.435zM22.732,27.563l-4.082-4.082c1.062-0.418,2.061-1.053,2.919-1.912c0.859-0.859,1.495-1.857,1.913-2.92l4.082,4.082c-0.58,0.969-1.271,1.891-2.105,2.728C24.623,26.292,23.701,26.983,22.732,27.563z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.History();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.History = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.History.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.History\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M10.666,18.292c0.275,0.479,0.889,0.644,1.365,0.367l3.305-1.677C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876c0-0.552-0.448-1-1-1c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96C10.553,17.204,10.389,17.816,10.666,18.292zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.888,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM6.624,15.5c0,0.553,0.449,1,1,1c0.552,0,1-0.447,1.001-1c-0.001-0.552-0.448-0.999-1.001-1C7.071,14.5,6.624,14.948,6.624,15.5zM14.501,23.377c0,0.553,0.448,1,1,1c0.552,0,1-0.447,1-1s-0.448-1-1-1C14.949,22.377,14.501,22.824,14.501,23.377zM10.696,21.822c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.276,1.091,0.11,1.365-0.365c0.277-0.479,0.113-1.09-0.365-1.367C11.584,21.18,10.973,21.344,10.696,21.822zM21.822,10.696c-0.479,0.278-0.643,0.89-0.366,1.367s0.888,0.642,1.366,0.365c0.478-0.275,0.643-0.888,0.365-1.366C22.913,10.584,22.298,10.42,21.822,10.696zM21.456,18.938c-0.274,0.479-0.112,1.092,0.367,1.367c0.477,0.274,1.089,0.112,1.364-0.365c0.276-0.479,0.112-1.092-0.364-1.367C22.343,18.297,21.73,18.461,21.456,18.938zM24.378,15.5c0-0.551-0.448-1-1-1c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1C23.93,16.5,24.378,16.053,24.378,15.5zM18.573,22.822c0.274,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.89,0.365-1.365c-0.277-0.479-0.888-0.643-1.365-0.367C18.46,21.732,18.296,22.344,18.573,22.822zM18.939,9.546c0.477,0.276,1.088,0.112,1.365-0.366c0.276-0.478,0.113-1.091-0.367-1.367c-0.477-0.276-1.09-0.111-1.364,0.366C18.298,8.659,18.462,9.27,18.939,9.546zM28.703,14.364C28.074,7.072,21.654,1.67,14.364,2.295c-3.254,0.281-6.118,1.726-8.25,3.877L4.341,4.681l-1.309,7.364l7.031-2.548L8.427,8.12c1.627-1.567,3.767-2.621,6.194-2.833c5.64-0.477,10.595,3.694,11.089,9.335c0.477,5.64-3.693,10.595-9.333,11.09c-5.643,0.476-10.599-3.694-11.092-9.333c-0.102-1.204,0.019-2.373,0.31-3.478l-3.27,1.186c-0.089,0.832-0.106,1.684-0.031,2.55c0.629,7.29,7.048,12.691,14.341,12.066C23.926,28.074,29.328,21.655,28.703,14.364z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Home();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Home = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Home.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Home\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.812,16l-3.062-3.062V5.625h-2.625v4.688L16,4.188L4.188,16L7,15.933v11.942h17.875V16H27.812zM16,26.167h-5.833v-7H16V26.167zM21.667,23.167h-3.833v-4.042h3.833V23.167z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.IMac();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.IMac = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.IMac.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.IMac\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.936,2.099H2.046c-0.506,0-0.919,0.414-0.919,0.92v21.097c0,0.506,0.413,0.919,0.919,0.919h17.062v-0.003h9.828c0.506,0,0.92-0.413,0.92-0.921V3.019C29.854,2.513,29.439,2.099,28.936,2.099zM28.562,20.062c0,0.412-0.338,0.75-0.75,0.75H3.062c-0.413,0-0.75-0.338-0.75-0.75v-16c0-0.413,0.337-0.75,0.75-0.75h24.75c0.412,0,0.75,0.337,0.75,0.75V20.062zM20.518,28.4c-0.033-0.035-0.062-0.055-0.068-0.062l-0.01-0.004l-0.008-0.004c0,0-0.046-0.021-0.119-0.062c-0.108-0.056-0.283-0.144-0.445-0.237c-0.162-0.097-0.32-0.199-0.393-0.271c-0.008-0.014-0.035-0.079-0.058-0.17c-0.083-0.32-0.161-0.95-0.22-1.539h-7.5c-0.023,0.23-0.048,0.467-0.076,0.691c-0.035,0.272-0.073,0.524-0.113,0.716c-0.02,0.096-0.039,0.175-0.059,0.23c-0.009,0.025-0.018,0.05-0.024,0.062c-0.003,0.006-0.005,0.01-0.007,0.013c-0.094,0.096-0.34,0.246-0.553,0.36c-0.107,0.062-0.209,0.11-0.283,0.146c-0.074,0.037-0.119,0.062-0.119,0.062l-0.007,0.004l-0.008,0.004c-0.01,0.009-0.038,0.022-0.07,0.062c-0.031,0.037-0.067,0.103-0.067,0.185c0.002,0.002-0.004,0.037-0.006,0.088c0,0.043,0.007,0.118,0.068,0.185c0.061,0.062,0.143,0.08,0.217,0.08h9.716c0.073,0,0.153-0.021,0.215-0.08c0.062-0.063,0.068-0.142,0.068-0.185c-0.001-0.051-0.008-0.086-0.007-0.088C20.583,28.503,20.548,28.439,20.518,28.4z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.SetFigure\n */\ndraw2d.shape.icon.Icon = draw2d.SetFigure.extend(\n  /** @lends draw2d.shape.icon.Icon.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Icon\",\n\n  /**\n   *\n   * Creates a new figure element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n    this.setBackgroundColor(\"#333333\")\n    this.keepAspectRatio = false\n  },\n\n  /**\n   * \n   * propagate all attributes like color, stroke,... to the shape element\n   **/\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = attributes || {}\n\n    // redirect the bgColor to the inner set and not to the outer container\n    //\n    attributes.fill = \"none\"\n    if (this.svgNodes !== null) {\n      this.svgNodes.attr({fill: this.bgColor.rgba(), stroke: \"none\"})\n    }\n\n    this._super(attributes)\n  },\n\n  applyTransformation: function () {\n    let trans = []\n\n\n    if (this.rotationAngle !== 0) {\n      trans.push(\"R\" + this.rotationAngle)\n    }\n\n    if (this.getRotationAngle() === 90 || this.getRotationAngle() === 270) {\n      let ratio = this.getHeight() / this.getWidth()\n      trans.push(\"T\" + (-this.offsetY) + \",\" + (-this.offsetX))\n      trans.push(\"S\" + ratio + \",\" + 1 / ratio + \",0,0\")\n    }\n    else {\n      trans.push(\"T\" + (-this.offsetX) + \",\" + (-this.offsetY))\n\n    }\n    if (this.isResizeable() === true) {\n      trans.push(\n        \"T\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY() +\n        \"S\" + this.scaleX + \",\" + this.scaleY + \",\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY()\n      )\n    }\n    else {\n      trans.push(\"T\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY())\n    }\n\n    this.svgNodes.transform(trans.join(\" \"))\n\n    return this\n  },\n\n  /**\n   * @private\n   */\n  createShapeElement: function () {\n    let shape = this._super()\n\n    let bb = this.svgNodes.getBBox()\n\n    this.offsetX = bb.x\n    this.offsetY = bb.y\n\n    return shape\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Icons();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Icons = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Icons.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Icons\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.083,14H14V4.083H4.083V14zM17,4.083V14h9.917V4.083H17zM17,26.917h9.917v-9.918H17V26.917zM4.083,26.917H14v-9.918H4.083V26.917z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Ie();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Ie = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Ie.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Ie\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.998,2.266c-2.12-1.91-6.925,0.382-9.575,1.93c-0.76-0.12-1.557-0.185-2.388-0.185c-3.349,0-6.052,0.985-8.106,2.843c-2.336,2.139-3.631,4.94-3.631,8.177c0,0.028,0.001,0.056,0.001,0.084c3.287-5.15,8.342-7.79,9.682-8.487c0.212-0.099,0.338,0.155,0.141,0.253c-0.015,0.042-0.015,0,0,0c-2.254,1.35-6.434,5.259-9.146,10.886l-0.003-0.007c-1.717,3.547-3.167,8.529-0.267,10.358c2.197,1.382,6.13-0.248,9.295-2.318c0.764,0.108,1.567,0.165,2.415,0.165c5.84,0,9.937-3.223,11.399-7.924l-8.022-0.014c-0.337,1.661-1.464,2.548-3.223,2.548c-2.21,0-3.729-1.211-3.828-4.012l15.228-0.014c0.028-0.578-0.042-0.985-0.042-1.436c0-5.251-3.143-9.355-8.255-10.663c2.081-1.294,5.974-3.209,7.848-1.681c1.407,1.14,0.633,3.533,0.295,4.518c-0.056,0.254,0.24,0.296,0.296,0.057C28.814,5.573,29.026,3.194,27.998,2.266zM13.272,25.676c-2.469,1.475-5.873,2.539-7.539,1.289c-1.243-0.935-0.696-3.468,0.398-5.938c0.664,0.992,1.495,1.886,2.473,2.63C9.926,24.651,11.479,25.324,13.272,25.676zM12.714,13.046c0.042-2.435,1.787-3.49,3.617-3.49c1.928,0,3.49,1.112,3.49,3.49H12.714z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Ie9();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Ie9 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Ie9.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Ie9\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.751,17.887c0.054-0.434,0.081-0.876,0.081-1.324c0-1.744-0.413-3.393-1.146-4.854c1.133-2.885,1.155-5.369-0.201-6.777c-1.756-1.822-5.391-1.406-9.433,0.721c-0.069-0.001-0.138-0.003-0.206-0.003c-6.069,0-10.988,4.888-10.988,10.917c0,0.183,0.005,0.354,0.014,0.529c-2.688,4.071-3.491,7.967-1.688,9.838c1.557,1.613,4.691,1.344,8.2-0.392c1.363,0.604,2.873,0.938,4.462,0.938c4.793,0,8.867-3.049,10.369-7.299H21.26c-0.814,1.483-2.438,2.504-4.307,2.504c-2.688,0-4.867-2.104-4.867-4.688c0-0.036,0.002-0.071,0.003-0.106h15.662V17.887zM26.337,6.099c0.903,0.937,0.806,2.684-0.087,4.818c-1.27-2.083-3.221-3.71-5.546-4.576C23.244,5.217,25.324,5.047,26.337,6.099zM16.917,10.372c2.522,0,4.585,1.991,4.748,4.509h-9.496C12.333,12.363,14.396,10.372,16.917,10.372zM5.687,26.501c-1.103-1.146-0.712-3.502,0.799-6.298c0.907,2.546,2.736,4.658,5.09,5.938C8.92,27.368,6.733,27.587,5.687,26.501z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Import();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Import = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Import.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Import\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.067,2.25c-5.979,0-11.035,3.91-12.778,9.309h3.213c1.602-3.705,5.271-6.301,9.565-6.309c5.764,0.01,10.428,4.674,10.437,10.437c-0.009,5.764-4.673,10.428-10.437,10.438c-4.294-0.007-7.964-2.605-9.566-6.311H2.289c1.744,5.399,6.799,9.31,12.779,9.312c7.419-0.002,13.437-6.016,13.438-13.438C28.504,8.265,22.486,2.252,15.067,2.25zM10.918,19.813l7.15-4.126l-7.15-4.129v2.297H-0.057v3.661h10.975V19.813z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.InkScape();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.InkScape = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.InkScape.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.InkScape\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.402,17.626c0.84-0.772,2.468-0.381,5.979-1.853c1.716-0.72,1.572-1.265,1.566-1.928c-0.001-0.014,0-0.027,0-0.041h-0.005c-0.012-0.667-0.291-1.332-0.846-1.845L17.049,2.684c-0.566-0.522-1.304-0.782-2.042-0.782V1.898c-0.738,0-1.475,0.261-2.04,0.783l-10.05,9.276c-0.554,0.512-0.832,1.176-0.843,1.844H2.07c0,0,0.003,0.011,0.004,0.011c0,0.012-0.004,0.024-0.004,0.034h0.017c0.193,0.676,5.164,1.536,5.718,2.049c0.838,0.774-3.211,1.339-2.374,2.114c0.838,0.773,5.062,1.496,5.898,2.271c0.838,0.771-1.711,1.596-0.874,2.366c0.837,0.773,3.651-0.191,3.142,1.822c1.13,1.045,3.49,0.547,5.071-0.498c0.837-0.771-1.607-0.703-0.77-1.477c0.836-0.774,2.949-0.777,4.73-2.627C21.913,18.838,19.566,18.398,20.402,17.626zM10.973,16.868l-0.42-0.504c1.497,0.358,3.162,0.827,4.498,0.837l0.058,0.554C13.964,17.646,11.544,17.137,10.973,16.868zM18.161,8.58l-1.396-0.74L14.53,9.594l-1.067-3.192l-1.177,2.545L8.998,9.25l0.036-1.352c0-0.324,1.895-2.596,3.05-3.136l2.112-1.401c0.312-0.186,0.53-0.261,0.727-0.257c0.327,0.011,0.593,0.239,1.112,0.55l4.748,3.25c0.357,0.215,0.619,0.522,0.626,0.898l-2.813-1.254L18.161,8.58zM26.434,19.594c-0.313-0.07-1.688-0.691-2.035,0.165c0.968,0.981,2.645,2.181,3.316,1.482C28.391,20.543,27.102,19.745,26.434,19.594zM4.663,21.566c-0.315,0.074-1.842,0.115-1.719,1.021c1.351,0.451,3.438,0.792,3.684-0.113C6.873,21.566,5.33,21.414,4.663,21.566zM17.877,26.396c-0.232,0.209-1.53,0.953-0.929,1.681c1.413-0.236,3.403-0.914,3.12-1.812C19.786,25.369,18.37,25.953,17.877,26.396z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Ipad();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Ipad = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Ipad.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Ipad\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.221,1.417H6.11c-0.865,0-1.566,0.702-1.566,1.566v25.313c0,0.865,0.701,1.565,1.566,1.565h19.111c0.865,0,1.565-0.7,1.565-1.565V2.984C26.787,2.119,26.087,1.417,25.221,1.417zM15.666,29.299c-0.346,0-0.626-0.279-0.626-0.625s0.281-0.627,0.626-0.627c0.346,0,0.627,0.281,0.627,0.627S16.012,29.299,15.666,29.299zM24.376,26.855c0,0.174-0.142,0.312-0.313,0.312H7.27c-0.173,0-0.313-0.142-0.313-0.312V4.3c0-0.173,0.14-0.313,0.313-0.313h16.792c0.172,0,0.312,0.14,0.312,0.313L24.376,26.855L24.376,26.855z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Iphone();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Iphone = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Iphone.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Iphone\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.755,1H10.62C9.484,1,8.562,1.921,8.562,3.058v24.385c0,1.136,0.921,2.058,2.058,2.058h10.135c1.136,0,2.058-0.922,2.058-2.058V3.058C22.812,1.921,21.891,1,20.755,1zM14.659,3.264h2.057c0.101,0,0.183,0.081,0.183,0.18c0,0.1-0.082,0.18-0.183,0.18h-2.057c-0.1,0-0.181-0.081-0.181-0.18C14.478,3.344,14.559,3.264,14.659,3.264zM13.225,3.058c0.199,0,0.359,0.162,0.359,0.36c0,0.198-0.161,0.36-0.359,0.36c-0.2,0-0.36-0.161-0.36-0.36S13.025,3.058,13.225,3.058zM15.688,28.473c-0.796,0-1.44-0.646-1.44-1.438c0-0.799,0.645-1.439,1.44-1.439s1.44,0.646,1.44,1.439S16.483,28.473,15.688,28.473zM22.041,24.355c0,0.17-0.139,0.309-0.309,0.309H9.642c-0.17,0-0.308-0.139-0.308-0.309V6.042c0-0.17,0.138-0.309,0.308-0.309h12.09c0.17,0,0.309,0.138,0.309,0.309V24.355z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.JQuery();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.JQuery = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.JQuery.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.JQuery\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M10.322,23.041C4.579,18.723,2.777,11.07,5.494,4.583c-0.254,0.291-0.502,0.59-0.739,0.904c-5.177,6.887-4.008,16.505,2.613,21.482c6.62,4.979,16.184,3.432,21.362-3.455c0.237-0.314,0.454-0.635,0.663-0.959C23.915,26.963,16.064,27.357,10.322,23.041zM13.662,18.598c4.765,3.582,11.604,2.564,15.567-2.198c-3.609,2.641-9.09,2.475-13.361-0.736S9.916,7.231,11.451,3.03C7.976,8.161,8.897,15.015,13.662,18.598zM18.642,11.976c3.254,2.447,8.146,1.438,10.967-2.242c-2.604,1.921-6.341,1.955-9.157-0.164c-2.819-2.118-3.826-5.718-2.701-8.754C14.998,4.549,15.387,9.528,18.642,11.976z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Jigsaw();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Jigsaw = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Jigsaw.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Jigsaw\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M3.739,13.619c0,0,3.516-4.669,5.592-3.642c2.077,1.027-0.414,2.795,1.598,3.719c2.011,0.924,5.048-0.229,4.376-2.899c-0.672-2.67-1.866-0.776-2.798-2.208c-0.934-1.432,4.586-4.59,4.586-4.59s3.361,6.651,4.316,4.911c1.157-2.105,3.193-4.265,5.305-1.025c0,0,1.814,2.412,0.246,3.434s-2.917,0.443-3.506,1.553c-0.586,1.112,3.784,4.093,3.784,4.093s-2.987,4.81-4.926,3.548c-1.939-1.262,0.356-3.364-2.599-3.989c-1.288-0.23-3.438,0.538-3.818,2.34c-0.13,2.709,1.604,2.016,2.797,3.475c1.191,1.457-4.484,4.522-4.484,4.522s-1.584-3.923-3.811-4.657c-2.227-0.735-0.893,2.135-2.917,2.531c-2.024,0.396-4.816-2.399-3.46-4.789c1.358-2.391,3.275-0.044,3.441-1.951C7.629,16.087,3.739,13.619,3.739,13.619z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Key();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Key = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Key.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Key\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M18.386,16.009l0.009-0.006l-0.58-0.912c1.654-2.226,1.876-5.319,0.3-7.8c-2.043-3.213-6.303-4.161-9.516-2.118c-3.212,2.042-4.163,6.302-2.12,9.517c1.528,2.402,4.3,3.537,6.944,3.102l0.424,0.669l0.206,0.045l0.779-0.447l-0.305,1.377l2.483,0.552l-0.296,1.325l1.903,0.424l-0.68,3.06l1.406,0.313l-0.424,1.906l4.135,0.918l0.758-3.392L18.386,16.009z M10.996,8.944c-0.685,0.436-1.593,0.233-2.029-0.452C8.532,7.807,8.733,6.898,9.418,6.463s1.594-0.233,2.028,0.452C11.883,7.6,11.68,8.509,10.996,8.944z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Lab();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Lab = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Lab.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Lab\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.121,24.438l-3.362-7.847c-0.329-0.769-0.599-2.081-0.599-2.917s0.513-1.521,1.14-1.521s1.141-0.513,1.141-1.14s-0.685-1.14-1.521-1.14h-6.84c-0.836,0-1.52,0.513-1.52,1.14s0.513,1.14,1.14,1.14s1.14,0.685,1.14,1.521s-0.269,2.148-0.599,2.917l-3.362,7.847C8.55,25.206,8.28,26.177,8.28,26.595s0.342,1.103,0.76,1.521s1.444,0.76,2.28,0.76h8.359c0.836,0,1.862-0.342,2.28-0.76s0.76-1.103,0.76-1.521S22.45,25.206,22.121,24.438zM16.582,7.625c0,0.599,0.484,1.083,1.083,1.083s1.083-0.484,1.083-1.083s-0.484-1.084-1.083-1.084S16.582,7.026,16.582,7.625zM13.667,7.792c0.276,0,0.5-0.224,0.5-0.5s-0.224-0.5-0.5-0.5s-0.5,0.224-0.5,0.5S13.391,7.792,13.667,7.792zM15.584,5.292c0.874,0,1.583-0.709,1.583-1.583c0-0.875-0.709-1.584-1.583-1.584C14.709,2.125,14,2.834,14,3.709C14,4.583,14.709,5.292,15.584,5.292z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Lamp();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Lamp = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Lamp.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Lamp\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.5,2.833c-3.866,0-7,3.134-7,7c0,3.859,3.945,4.937,4.223,9.499h5.553c0.278-4.562,4.224-5.639,4.224-9.499C22.5,5.968,19.366,2.833,15.5,2.833zM15.5,28.166c1.894,0,2.483-1.027,2.667-1.666h-5.334C13.017,27.139,13.606,28.166,15.5,28.166zM12.75,25.498h5.5v-5.164h-5.5V25.498z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Lamp_alt();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Lamp_alt = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Lamp_alt.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Lamp_alt\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M12.75,25.498h5.5v-5.164h-5.5V25.498zM15.5,28.166c1.894,0,2.483-1.027,2.667-1.666h-5.334C13.017,27.139,13.606,28.166,15.5,28.166zM15.5,2.833c-3.866,0-7,3.134-7,7c0,3.859,3.945,4.937,4.223,9.499h1.271c-0.009-0.025-0.024-0.049-0.029-0.078L11.965,8.256c-0.043-0.245,0.099-0.485,0.335-0.563c0.237-0.078,0.494,0.026,0.605,0.25l0.553,1.106l0.553-1.106c0.084-0.17,0.257-0.277,0.446-0.277c0.189,0,0.362,0.107,0.446,0.277l0.553,1.106l0.553-1.106c0.084-0.17,0.257-0.277,0.448-0.277c0.189,0,0.36,0.107,0.446,0.277l0.554,1.106l0.553-1.106c0.111-0.224,0.368-0.329,0.604-0.25s0.377,0.318,0.333,0.563l-1.999,10.998c-0.005,0.029-0.02,0.053-0.029,0.078h1.356c0.278-4.562,4.224-5.639,4.224-9.499C22.5,5.968,19.366,2.833,15.5,2.833zM17.458,10.666c-0.191,0-0.364-0.107-0.446-0.275l-0.554-1.106l-0.553,1.106c-0.086,0.168-0.257,0.275-0.446,0.275c-0.191,0-0.364-0.107-0.449-0.275l-0.553-1.106l-0.553,1.106c-0.084,0.168-0.257,0.275-0.446,0.275c-0.012,0-0.025,0-0.037-0.001l1.454,8.001h1.167l1.454-8.001C17.482,10.666,17.47,10.666,17.458,10.666z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Landing();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Landing = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Landing.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Landing\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M23.322,19.491c0,0,1.903,0.342,0.299-1.869c-1.353-1.866-5.261-3.104-5.261-3.104l-4.213-8.229l-2.47-0.394l0.973,5.449L9.241,10.11L8.772,7.273L7.008,6.302c0,0-0.496,2.742-0.149,5.271C6.859,11.573,13.965,17.999,23.322,19.491zM3.251,23.106v1.998h24.498v-1.998H3.251zM14,17.94c0,0.414,0.336,0.75,0.75,0.75s0.75-0.336,0.75-0.75s-0.336-0.75-0.75-0.75S14,17.526,14,17.94z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Landscape1();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Landscape1 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Landscape1.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Landscape1\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M19.883,5.71H2.746c-0.163,0-0.319,0.071-0.435,0.188c-0.118,0.117-0.18,0.272-0.18,0.435v18.364c0,0.164,0.063,0.318,0.18,0.436c0.123,0.117,0.287,0.18,0.435,0.18h25.75c0.164,0,0.324-0.066,0.438-0.18c0.118-0.114,0.182-0.273,0.182-0.436V14.551c-0.002-0.102-0.01-0.188-0.021-0.271c-0.186-1.543-1.543-3.424-3.236-5.168C24.039,7.31,21.869,5.753,19.883,5.71zM26.914,12.314c-0.008-0.005-0.019-0.007-0.029-0.01c-1.092-0.293-2.33-0.355-3.199-0.355c-0.162,0-0.312,0.002-0.445,0.004c-0.037-0.604-0.129-1.604-0.356-2.625c-0.11-0.461-0.246-0.94-0.433-1.42c0.857,0.541,1.748,1.264,2.535,2.068C25.74,10.718,26.41,11.551,26.914,12.314zM3.365,6.947h16.517c0.058,0,0.12,0,0.183,0.004c0.694,0.105,1.307,1.221,1.616,2.646c0.335,1.484,0.354,2.997,0.354,3l0.007,0.656l0.651-0.051c0,0,0.398-0.027,0.99-0.025c0.809,0,1.977,0.062,2.871,0.312c0.939,0.275,1.352,0.635,1.326,1.051h0.002v9.542H3.365V6.951V6.947z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Landscape2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Landscape2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Landscape2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Landscape2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M19.883,5.71H2.746c-0.163,0-0.319,0.071-0.435,0.188c-0.118,0.117-0.18,0.272-0.18,0.435v18.364c0,0.164,0.063,0.318,0.18,0.436c0.123,0.117,0.287,0.18,0.435,0.18h25.75c0.164,0,0.324-0.066,0.438-0.18c0.118-0.114,0.182-0.273,0.182-0.436V14.551c-0.002-0.102-0.01-0.188-0.021-0.271c-0.186-1.543-1.543-3.424-3.236-5.168C24.039,7.31,21.869,5.753,19.883,5.71zM3.365,6.947h16.517c0.058,0,0.12,0,0.183,0.004c0.694,0.105,1.307,1.221,1.616,2.646c0.335,1.484,0.354,2.997,0.354,3l0.007,0.656l0.651-0.051c0,0,0.398-0.027,0.99-0.025c0.809,0,1.977,0.062,2.871,0.312c0.939,0.275,1.352,0.635,1.326,1.051h0.002v9.542H3.365V6.951V6.947z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.LineChart();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.LineChart = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.LineChart.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.LineChart\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M3.625,25.062c-0.539-0.115-0.885-0.646-0.77-1.187l0,0L6.51,6.584l2.267,9.259l1.923-5.188l3.581,3.741l3.883-13.103l2.934,11.734l1.96-1.509l5.271,11.74c0.226,0.504,0,1.095-0.505,1.321l0,0c-0.505,0.227-1.096,0-1.322-0.504l0,0l-4.23-9.428l-2.374,1.826l-1.896-7.596l-2.783,9.393l-3.754-3.924L8.386,22.66l-1.731-7.083l-1.843,8.711c-0.101,0.472-0.515,0.794-0.979,0.794l0,0C3.765,25.083,3.695,25.076,3.625,25.062L3.625,25.062z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Link();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Link = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Link.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Link\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16.45,18.085l-2.47,2.471c0.054,1.023-0.297,2.062-1.078,2.846c-1.465,1.459-3.837,1.459-5.302-0.002c-1.461-1.465-1.46-3.836-0.001-5.301c0.783-0.781,1.824-1.131,2.847-1.078l2.469-2.469c-2.463-1.057-5.425-0.586-7.438,1.426c-2.634,2.637-2.636,6.907,0,9.545c2.638,2.637,6.909,2.635,9.545,0l0.001,0.002C17.033,23.511,17.506,20.548,16.45,18.085zM14.552,12.915l2.467-2.469c-0.053-1.023,0.297-2.062,1.078-2.848C19.564,6.139,21.934,6.137,23.4,7.6c1.462,1.465,1.462,3.837,0,5.301c-0.783,0.783-1.822,1.132-2.846,1.079l-2.469,2.468c2.463,1.057,5.424,0.584,7.438-1.424c2.634-2.639,2.633-6.91,0-9.546c-2.639-2.636-6.91-2.637-9.545-0.001C13.967,7.489,13.495,10.451,14.552,12.915zM18.152,10.727l-7.424,7.426c-0.585,0.584-0.587,1.535,0,2.121c0.585,0.584,1.536,0.584,2.121-0.002l7.425-7.424c0.584-0.586,0.584-1.535,0-2.121C19.687,10.141,18.736,10.142,18.152,10.727z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.LinkedIn();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.LinkedIn = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.LinkedIn.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.LinkedIn\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.25,3.125h-22c-1.104,0-2,0.896-2,2v22c0,1.104,0.896,2,2,2h22c1.104,0,2-0.896,2-2v-22C29.25,4.021,28.354,3.125,27.25,3.125zM11.219,26.781h-4v-14h4V26.781zM9.219,11.281c-1.383,0-2.5-1.119-2.5-2.5s1.117-2.5,2.5-2.5s2.5,1.119,2.5,2.5S10.602,11.281,9.219,11.281zM25.219,26.781h-4v-8.5c0-0.4-0.403-1.055-0.687-1.213c-0.375-0.211-1.261-0.229-1.665-0.034l-1.648,0.793v8.954h-4v-14h4v0.614c1.583-0.723,3.78-0.652,5.27,0.184c1.582,0.886,2.73,2.864,2.73,4.702V26.781z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Linux();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Linux = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Linux.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Linux\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M11.791,25.229c1.027-0.104,1.162-1.191,0.68-1.666c-0.398-0.392-2.598-2.022-3.171-2.664C9.033,20.6,8.673,20.454,8.52,20.12c-0.352-0.771-0.598-1.869-0.151-2.658c0.081-0.144,0.133-0.078,0.071,0.22c-0.351,1.684,0.746,3.059,0.986,2.354c0.167-0.487,0.013-1.358,0.102-2.051c0.158-1.226,1.273-3.577,1.763-3.712c-0.755-1.398,0.886-2.494,0.866-3.723c-0.014-0.798,0.701,0.982,1.419,1.359c0.802,0.422,1.684-0.794,2.936-1.41c0.354-0.176,0.809-0.376,0.776-0.524c-0.146-0.718-1.644,0.886-2.979,0.939c-0.61,0.024-0.837-0.12-1.072-0.347c-0.712-0.689,0.073-0.115,1.132-0.307c0.471-0.085,0.629-0.163,1.128-0.365c0.5-0.201,1.069-0.5,1.636-0.654c0.395-0.106,0.361-0.402,0.208-0.491c-0.088-0.051-0.219-0.046-0.321,0.133c-0.244,0.419-1.383,0.661-1.74,0.771c-0.457,0.14-0.962,0.271-1.634,0.243c-1.021-0.042-0.782-0.509-1.513-0.928c-0.213-0.122-0.156-0.444,0.129-0.729c0.148-0.148,0.557-0.232,0.76-0.572c0.028-0.047,0.289-0.32,0.494-0.461c0.07-0.049,0.076-1.295-0.562-1.32c-0.543-0.021-0.697,0.398-0.675,0.818c0.022,0.419,0.245,0.765,0.393,0.764c0.285-0.004,0.019,0.311-0.138,0.361c-0.237,0.078-0.562-0.934-0.525-1.418c0.039-0.506,0.303-1.4,0.942-1.383c0.576,0.016,0.993,0.737,0.973,1.983c-0.003,0.211,0.935-0.101,1.247,0.229c0.224,0.236-0.767-2.207,1.438-2.375c0.582,0.111,1.14,0.305,1.371,1.641c-0.086,0.139,0.146,1.07-0.215,1.182c-0.438,0.135-0.707-0.02-0.453-0.438c0.172-0.418,0.004-1.483-0.882-1.42c-0.887,0.064-0.769,1.637-0.526,1.668c0.243,0.031,0.854,0.465,1.282,0.549c1.401,0.271,0.371,1.075,0.555,2.048c0.205,1.099,0.929,0.809,1.578,3.717c0.137,0.177,0.676,0.345,1.199,2.579c0.473,2.011-0.195,3.473,0.938,3.353c0.256-0.026,0.629-0.1,0.792-0.668c0.425-1.489-0.213-3.263-0.855-4.46c-0.375-0.698-0.729-1.174-0.916-1.337c0.738,0.436,1.683,1.829,1.898,2.862c0.286,1.358,0.49,1.934,0.059,3.37c0.25,0.125,0.871,0.39,0.871,0.685c-0.647-0.53-2.629-0.625-2.68,0.646c-0.338,0.008-0.594,0.034-0.811,0.293c-0.797,0.944-0.059,2.842-0.139,3.859c-0.07,0.896-0.318,1.783-0.46,2.683c-0.474-0.019-0.428-0.364-0.274-0.852c0.135-0.431,0.351-0.968,0.365-1.484c0.012-0.467-0.039-0.759-0.156-0.831c-0.118-0.072-0.303,0.074-0.559,0.485c-0.543,0.875-1.722,1.261-2.821,1.397c-1.099,0.138-2.123,0.028-2.664-0.578c-0.186-0.207-0.492,0.058-0.529,0.111c-0.049,0.074,0.18,0.219,0.352,0.533c0.251,0.461,0.49,1.159-0.105,1.479C12.83,26.314,12.316,26.221,11.791,25.229L11.791,25.229zM11.398,25.188c0.395,0.621,1.783,3.232-0.652,3.571c-0.814,0.114-2.125-0.474-3.396-0.784c-1.142-0.279-2.301-0.444-2.949-0.627c-0.391-0.108-0.554-0.25-0.588-0.414c-0.091-0.434,0.474-1.041,0.503-1.555c0.028-0.514-0.188-0.779-0.364-1.199c-0.177-0.42-0.224-0.734-0.081-0.914c0.109-0.141,0.334-0.199,0.698-0.164c0.462,0.047,1.02-0.049,1.319-0.23c0.505-0.309,0.742-0.939,0.516-1.699c0,0.744-0.244,1.025-0.855,1.366c-0.577,0.319-1.467,0.062-1.875,0.416c-0.492,0.427,0.175,1.528,0.12,2.338c-0.042,0.622-0.69,1.322-0.401,1.946c0.291,0.627,1.648,0.695,3.064,0.99c2.012,0.422,3.184,1.153,4.113,1.188c1.356,0.05,1.564-1.342,3.693-1.36c0.621-0.033,1.229-0.052,1.835-0.06c0.688-0.009,1.375-0.003,2.079,0.014c1.417,0.034,0.931,0.773,1.851,1.246c0.774,0.397,2.17,0.241,2.504-0.077c0.451-0.431,1.662-1.467,2.592-1.935c1.156-0.583,3.876-1.588,1.902-2.812c-0.461-0.285-1.547-0.588-1.639-2.676c-0.412,0.366-0.365,2.312,0.784,2.697c1.283,0.431,2.085,1.152-0.301,1.969c-1.58,0.54-1.849,0.706-3.099,1.747c-1.267,1.054-3.145,0.636-2.815-1.582c0.171-1.155,0.269-2.11-0.019-3.114c-0.142-0.49-0.211-1.119-0.114-1.562c0.187-0.858,0.651-1.117,1.106-0.293c0.285,0.519,0.385,1.122,1.408,1.171c1.607,0.077,1.926-1.553,2.439-1.627c0.343-0.05,0.686-1.02,0.425-2.589c-0.28-1.681-1.269-4.332-2.536-5.677c-1.053-1.118-1.717-2.098-2.135-3.497c-0.352-1.175-0.547-2.318-0.475-3.412c0.094-1.417-0.691-3.389-1.943-4.316c-0.782-0.581-2.011-0.893-3.122-0.88c-0.623,0.007-1.21,0.099-1.661,0.343c-1.855,1.008-2.113,2.445-2.086,4.088c0.025,1.543,0.078,3.303,0.254,4.977c-0.208,0.77-1.288,2.227-1.979,3.114C8.59,14.233,8.121,16.01,7.52,17.561c-0.321,0.828-0.862,1.2-0.908,2.265C6.6,20.122,6.61,20.891,6.894,20.672C7.98,19.829,9.343,21.95,11.398,25.188L11.398,25.188zM17.044,2.953c-0.06,0.176-0.3,0.321-0.146,0.443c0.152,0.123,0.24-0.171,0.549-0.281c0.08-0.028,0.449,0.012,0.519-0.164c0.03-0.077-0.19-0.164-0.321-0.291c-0.133-0.125-0.262-0.236-0.386-0.229C16.938,2.451,17.096,2.798,17.044,2.953L17.044,2.953zM18.934,9.35c0.115-0.121,0.174,0.207,0.483,0.402c0.244,0.154,0.481,0.04,0.545,0.354c0.044,0.225-0.097,0.467-0.284,0.436C19.35,10.486,18.596,9.705,18.934,9.35L18.934,9.35zM13.832,7.375c-0.508-0.037-0.543,0.33-0.375,0.324C13.629,7.693,13.523,7.408,13.832,7.375L13.832,7.375zM12.96,6.436c0.06-0.013,0.146,0.09,0.119,0.233c-0.037,0.199-0.021,0.324,0.117,0.325c0.022,0,0.048-0.005,0.056-0.057c0.066-0.396-0.14-0.688-0.225-0.711C12.834,6.178,12.857,6.458,12.96,6.436L12.96,6.436zM16.663,6.268c0.129,0.039,0.253,0.262,0.28,0.504c0.002,0.021,0.168-0.035,0.17-0.088c0.011-0.389-0.321-0.571-0.408-0.562C16.506,6.139,16.562,6.238,16.663,6.268L16.663,6.268zM14.765,7.423c0.463-0.214,0.625,0.118,0.465,0.171C15.066,7.648,15.065,7.345,14.765,7.423L14.765,7.423zM9.178,15.304c-0.219-0.026,0.063-0.19,0.184-0.397c0.131-0.227,0.105-0.511,0.244-0.469s0.061,0.2-0.033,0.461C9.491,15.121,9.258,15.313,9.178,15.304L9.178,15.304z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.List();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.List = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.List.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.List\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.082,4.083v2.999h22.835V4.083H4.082zM4.082,20.306h22.835v-2.999H4.082V20.306zM4.082,13.694h22.835v-2.999H4.082V13.694zM4.082,26.917h22.835v-2.999H4.082V26.917z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Location();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Location = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Location.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Location\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,3.5c-4.142,0-7.5,3.358-7.5,7.5c0,4.143,7.5,18.121,7.5,18.121S23.5,15.143,23.5,11C23.5,6.858,20.143,3.5,16,3.5z M16,14.584c-1.979,0-3.584-1.604-3.584-3.584S14.021,7.416,16,7.416S19.584,9.021,19.584,11S17.979,14.584,16,14.584z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Lock();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Lock = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Lock.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Lock\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.335,12.833V9.999h-0.001C22.333,6.501,19.498,3.666,16,3.666S9.666,6.502,9.666,10h0v2.833H7.375V25h17.25V12.833H22.335zM11.667,10C11.667,10,11.667,10,11.667,10c0-2.39,1.944-4.334,4.333-4.334c2.391,0,4.335,1.944,4.335,4.333c0,0,0,0,0,0v2.834h-8.668V10z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Locked();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Locked = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Locked.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Locked\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M26.711,14.085L16.914,4.29c-0.778-0.778-2.051-0.778-2.829,0L4.29,14.086c-0.778,0.778-0.778,2.05,0,2.829l9.796,9.796c0.778,0.777,2.051,0.777,2.829,0l9.797-9.797C27.488,16.136,27.488,14.863,26.711,14.085zM8.218,16.424c-0.4-0.153-0.687-0.533-0.687-0.987s0.287-0.834,0.687-0.987V16.424zM8.969,16.424v-1.974c0.4,0.152,0.687,0.533,0.687,0.987S9.369,16.272,8.969,16.424zM13.5,19.188l1.203-3.609c-0.689-0.306-1.172-0.994-1.172-1.797c0-1.087,0.881-1.969,1.969-1.969c1.087,0,1.969,0.881,1.969,1.969c0,0.803-0.482,1.491-1.172,1.797l1.203,3.609H13.5zM22.03,16.549c-0.399-0.152-0.687-0.533-0.687-0.986s0.287-0.834,0.687-0.987V16.549zM22.781,16.549v-1.973c0.4,0.152,0.688,0.533,0.688,0.987S23.182,16.397,22.781,16.549z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Magic();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Magic = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Magic.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Magic\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M23.043,4.649l-0.404-2.312l-1.59,1.727l-2.323-0.33l1.151,2.045l-1.032,2.108l2.302-0.463l1.686,1.633l0.271-2.332l2.074-1.099L23.043,4.649zM26.217,18.198l-0.182-1.25l-0.882,0.905l-1.245-0.214l0.588,1.118l-0.588,1.118l1.245-0.214l0.882,0.905l0.182-1.25l1.133-0.56L26.217,18.198zM4.92,7.672L5.868,7.3l0.844,0.569L6.65,6.853l0.802-0.627L6.467,5.97L6.118,5.013L5.571,5.872L4.553,5.908l0.647,0.786L4.92,7.672zM10.439,10.505l1.021-1.096l1.481,0.219l-0.727-1.31l0.667-1.341l-1.47,0.287l-1.069-1.048L10.16,7.703L8.832,8.396l1.358,0.632L10.439,10.505zM17.234,12.721c-0.588-0.368-1.172-0.618-1.692-0.729c-0.492-0.089-1.039-0.149-1.425,0.374L2.562,30.788h6.68l9.669-15.416c0.303-0.576,0.012-1.041-0.283-1.447C18.303,13.508,17.822,13.09,17.234,12.721zM13.613,21.936c-0.254-0.396-0.74-0.857-1.373-1.254c-0.632-0.396-1.258-0.634-1.726-0.69l4.421-7.052c0.064-0.013,0.262-0.021,0.543,0.066c0.346,0.092,0.785,0.285,1.225,0.562c0.504,0.313,0.908,0.677,1.133,0.97c0.113,0.145,0.178,0.271,0.195,0.335c0.002,0.006,0.004,0.011,0.004,0.015L13.613,21.936z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Magnet();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Magnet = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Magnet.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Magnet\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.812,19.5h5.002v-6.867c-0.028-1.706-0.61-3.807-2.172-5.841c-1.539-2.014-4.315-3.72-7.939-3.687C12.076,3.073,9.3,4.779,7.762,6.792C6.2,8.826,5.617,10.928,5.588,12.634V19.5h5v-6.866c-0.027-0.377,0.303-1.789,1.099-2.748c0.819-0.979,1.848-1.747,4.014-1.778c2.165,0.032,3.195,0.799,4.013,1.778c0.798,0.959,1.126,2.372,1.099,2.748V19.5L20.812,19.5zM25.814,25.579c0,0,0-2.354,0-5.079h-5.002c0,2.727,0,5.08,0,5.08l5.004-0.001H25.814zM5.588,25.58h5c0,0,0-2.354,0-5.08h-5C5.588,23.227,5.588,25.58,5.588,25.58z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Mail();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Mail = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Mail.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Mail\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.516,7.167H3.482l12.517,7.108L28.516,7.167zM16.74,17.303C16.51,17.434,16.255,17.5,16,17.5s-0.51-0.066-0.741-0.197L2.5,10.06v14.773h27V10.06L16.74,17.303z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Man();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Man = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Man.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Man\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.021,16.349c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.103,1.031c-1.164,0-2.231-0.391-3.105-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.578,5.192-0.35,5.874c0.55,0.307,1.127,0.078,1.723-0.496c-0.105,0.582-0.166,1.213-0.166,1.873c0,2.932,1.139,5.307,2.543,5.307c0.846,0,1.265-0.865,1.466-2.189c0.201,1.324,0.62,2.189,1.463,2.189c1.406,0,2.545-2.375,2.545-5.307c0-0.66-0.061-1.291-0.168-1.873c0.598,0.574,1.174,0.803,1.725,0.496C22.602,21.541,22.443,18.912,21.021,16.349zM15.808,13.757c2.362,0,4.278-1.916,4.278-4.279s-1.916-4.279-4.278-4.279c-2.363,0-4.28,1.916-4.28,4.279S13.445,13.757,15.808,13.757z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Merge();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Merge = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Merge.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Merge\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M29.342,15.5l-7.556-4.363v2.613h-1.411c-0.788-0.01-1.331-0.241-2.019-0.743c-1.021-0.745-2.094-2.181-3.551-3.568C13.367,8.06,11.291,6.73,8.5,6.749H2.812v3.5H8.5c2.231,0.012,3.441,1.185,5.07,2.934c0.697,0.753,1.428,1.58,2.324,2.323c-1.396,1.165-2.412,2.516-3.484,3.501c-1.183,1.081-2.202,1.723-3.912,1.741H2.813v3.5h5.716c3.752,0.001,6.035-2.319,7.619-4.066c0.817-0.895,1.537-1.691,2.209-2.191c0.686-0.502,1.23-0.732,2.017-0.742h1.412v2.614L29.342,15.5z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Mic();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Mic = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Mic.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Mic\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.5,21.125c2.682,0,4.875-2.25,4.875-5V5.875c0-2.75-2.193-5-4.875-5s-4.875,2.25-4.875,5v10.25C10.625,18.875,12.818,21.125,15.5,21.125zM21.376,11v5.125c0,3.308-2.636,6-5.876,6s-5.875-2.691-5.875-6V11H6.626v5.125c0,4.443,3.194,8.132,7.372,8.861v2.139h-3.372v3h9.749v-3h-3.376v-2.139c4.181-0.727,7.375-4.418,7.375-8.861V11H21.376z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.MicMute();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.MicMute = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.MicMute.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.MicMute\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M10.121,18.529c-0.317-0.736-0.496-1.549-0.496-2.404V11H6.626v5.125c0,1.693,0.466,3.275,1.272,4.627L10.121,18.529zM20.375,8.276V5.875c0-2.75-2.193-5-4.875-5s-4.875,2.25-4.875,5v10.25c0,0.568,0.113,1.105,0.285,1.615L20.375,8.276zM21.376,12.931v3.195c0,3.308-2.636,6-5.876,6c-0.958,0-1.861-0.24-2.661-0.657l-2.179,2.179c0.995,0.659,2.123,1.128,3.338,1.34v2.139h-3.372v3h9.749v-3h-3.376v-2.139c4.181-0.727,7.375-4.418,7.375-8.861V11h-1.068L21.376,12.931zM20.375,16.125v-2.194l-6.788,6.788c0.588,0.26,1.234,0.405,1.913,0.405C18.182,21.125,20.375,18.875,20.375,16.125zM25.542,4.522L4.855,25.209l1.415,1.416L26.956,5.937L25.542,4.522z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Minus();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Minus = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Minus.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Minus\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.979,12.896,5.979,12.896,5.979,19.562,25.979,19.562z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.NewWindow();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.NewWindow = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.NewWindow.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.NewWindow\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M5.896,5.333V21.25h23.417V5.333H5.896zM26.312,18.25H8.896V8.334h17.417V18.25L26.312,18.25zM4.896,9.542H1.687v15.917h23.417V22.25H4.896V9.542z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.No();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.No = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.No.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.No\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,2.939C9.006,2.942,3.338,8.61,3.335,15.605C3.335,22.6,9.005,28.268,16,28.27c6.994-0.002,12.662-5.67,12.664-12.664C28.663,8.61,22.995,2.939,16,2.939zM25.663,15.605c-0.003,1.943-0.583,3.748-1.569,5.264L10.736,7.513c1.515-0.988,3.32-1.569,5.265-1.573C21.337,5.951,25.654,10.269,25.663,15.605zM6.335,15.605c0.004-1.943,0.584-3.75,1.573-5.266l13.355,13.357c-1.516,0.986-3.32,1.566-5.264,1.569C10.664,25.26,6.346,20.941,6.335,15.605z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.NoMagnet();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.NoMagnet = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.NoMagnet.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.NoMagnet\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M10.59,17.857v-5.225c-0.027-0.376,0.303-1.789,1.099-2.748c0.819-0.979,1.849-1.748,4.014-1.778c1.704,0.026,2.699,0.508,3.447,1.189l3.539-3.539c-1.616-1.526-4.01-2.679-6.986-2.652C12.077,3.073,9.3,4.779,7.762,6.793C6.2,8.826,5.617,10.928,5.59,12.634V19.5h3.357L10.59,17.857zM5.59,20.5v2.357L7.947,20.5H5.59zM20.812,13.29v6.21h5.002v-6.866c-0.021-1.064-0.252-2.283-0.803-3.542L20.812,13.29zM25.339,4.522L4.652,25.209l1.415,1.416L26.753,5.937L25.339,4.522zM20.812,25.58h5.002c0,0,0-2.354,0-5.08h-5.002C20.812,23.227,20.812,25.58,20.812,25.58zM10.59,25.58c0,0,0-0.827,0-2.064L8.525,25.58H10.59z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.NodeJs();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.NodeJs = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.NodeJs.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.NodeJs\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.783,4.458L2.59,3.196C2.553,3.174,2.511,3.163,2.469,3.161H2.447C2.405,3.163,2.363,3.174,2.326,3.196L0.133,4.458C0.051,4.505,0,4.593,0,4.688l0.005,3.398c0,0.047,0.024,0.092,0.066,0.114c0.041,0.024,0.091,0.024,0.132,0l1.303-0.746c0.083-0.049,0.132-0.136,0.132-0.229V5.637c0-0.095,0.05-0.183,0.132-0.229l0.555-0.32c0.041-0.023,0.086-0.035,0.132-0.035c0.045,0,0.092,0.012,0.132,0.035l0.555,0.32c0.082,0.047,0.133,0.135,0.133,0.229v1.588c0,0.094,0.051,0.182,0.132,0.229l1.303,0.746c0.041,0.024,0.092,0.024,0.132,0c0.041-0.022,0.066-0.067,0.066-0.114l0.004-3.398C4.915,4.593,4.865,4.505,4.783,4.458zM17.93,0.745l-1.305-0.729c-0.042-0.023-0.091-0.022-0.132,0.001c-0.041,0.024-0.065,0.067-0.065,0.114v3.365c0,0.033-0.018,0.064-0.046,0.081s-0.064,0.017-0.093,0l-0.549-0.316c-0.082-0.047-0.183-0.047-0.265,0l-2.193,1.266c-0.082,0.047-0.133,0.135-0.133,0.229V7.29c0,0.095,0.051,0.182,0.132,0.229l2.194,1.267c0.082,0.048,0.183,0.048,0.265,0l2.194-1.267c0.082-0.048,0.133-0.135,0.133-0.229V0.977C18.066,0.88,18.014,0.792,17.93,0.745zM16.421,6.458c0,0.023-0.013,0.045-0.033,0.057l-0.753,0.435c-0.021,0.012-0.045,0.012-0.066,0l-0.753-0.435c-0.021-0.012-0.033-0.034-0.033-0.057v-0.87c0-0.023,0.013-0.045,0.033-0.058l0.753-0.435c0.021-0.012,0.045-0.012,0.066,0l0.753,0.435c0.021,0.012,0.033,0.034,0.033,0.058V6.458zM24.473,4.493l-2.18-1.266c-0.082-0.047-0.183-0.048-0.265,0l-2.193,1.266c-0.082,0.047-0.132,0.135-0.132,0.229v2.532c0,0.096,0.051,0.184,0.133,0.23l2.18,1.242c0.08,0.045,0.179,0.046,0.26,0.001l1.318-0.732c0.042-0.023,0.067-0.067,0.068-0.115c0-0.048-0.025-0.092-0.066-0.116l-2.207-1.266c-0.041-0.023-0.066-0.067-0.066-0.115V5.59c0-0.047,0.025-0.091,0.065-0.115l0.688-0.396c0.041-0.024,0.091-0.024,0.132,0l0.688,0.396c0.041,0.023,0.066,0.067,0.066,0.115v0.625c0,0.047,0.025,0.091,0.066,0.114c0.041,0.024,0.092,0.024,0.132,0l1.314-0.764c0.081-0.047,0.132-0.135,0.132-0.229V4.722C24.605,4.628,24.555,4.541,24.473,4.493zM11.363,4.48L9.169,3.214c-0.082-0.047-0.183-0.047-0.265,0L6.711,4.48C6.629,4.527,6.579,4.615,6.579,4.709v2.534c0,0.095,0.051,0.182,0.133,0.229l2.193,1.267c0.082,0.048,0.183,0.048,0.265,0l2.193-1.267c0.082-0.048,0.132-0.135,0.132-0.229V4.709C11.495,4.615,11.445,4.527,11.363,4.48zM31.019,4.382L28.95,3.187c-0.13-0.074-0.304-0.074-0.435,0l-2.068,1.195c-0.135,0.077-0.218,0.222-0.218,0.377v2.386c0,0.156,0.083,0.301,0.218,0.378l0.542,0.312c0.263,0.13,0.356,0.13,0.477,0.13c0.389,0,0.612-0.236,0.612-0.646V4.962c0-0.033-0.027-0.06-0.06-0.06h-0.263c-0.033,0-0.061,0.026-0.061,0.06v2.356c0,0.182-0.188,0.363-0.495,0.209l-0.566-0.326c-0.021-0.012-0.033-0.033-0.033-0.057V4.759c0-0.023,0.013-0.045,0.033-0.057l2.067-1.193c0.019-0.011,0.044-0.011,0.063,0l2.067,1.193c0.02,0.012,0.032,0.034,0.032,0.057v2.386c0,0.023-0.013,0.046-0.032,0.057l-2.068,1.193c-0.018,0.012-0.045,0.012-0.063,0l-0.53-0.314c-0.017-0.01-0.036-0.013-0.052-0.004c-0.146,0.083-0.175,0.094-0.312,0.143c-0.034,0.012-0.084,0.031,0.019,0.09l0.691,0.408c0.065,0.038,0.141,0.059,0.217,0.059s0.151-0.021,0.218-0.059l2.068-1.194c0.134-0.078,0.217-0.222,0.217-0.378V4.759C31.235,4.604,31.152,4.459,31.019,4.382zM29.371,6.768c-0.548,0-0.668-0.138-0.708-0.41c-0.005-0.029-0.029-0.051-0.06-0.051h-0.268c-0.033,0-0.06,0.026-0.06,0.06c0,0.349,0.189,0.765,1.095,0.765c0.655,0,1.031-0.259,1.031-0.709c0-0.447-0.302-0.566-0.938-0.65c-0.643-0.085-0.708-0.128-0.708-0.279c0-0.125,0.056-0.29,0.531-0.29c0.425,0,0.581,0.091,0.646,0.378c0.006,0.027,0.03,0.047,0.059,0.047h0.269c0.017,0,0.032-0.007,0.044-0.019c0.011-0.013,0.017-0.029,0.016-0.046c-0.042-0.493-0.37-0.723-1.032-0.723c-0.59,0-0.941,0.249-0.941,0.666c0,0.453,0.35,0.578,0.916,0.634c0.677,0.066,0.729,0.166,0.729,0.298C29.992,6.669,29.807,6.768,29.371,6.768zM22.128,5.446l-0.42,0.243c-0.016,0.009-0.025,0.026-0.025,0.044v0.486c0,0.019,0.01,0.035,0.025,0.044l0.42,0.243c0.016,0.009,0.035,0.009,0.052,0l0.421-0.243c0.016-0.009,0.025-0.025,0.025-0.044V5.733c0-0.018-0.01-0.035-0.025-0.044L22.18,5.446C22.163,5.438,22.144,5.438,22.128,5.446z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Notebook();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Notebook = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Notebook.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Notebook\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.875,1.375H8c-1.033,0-1.874,0.787-1.979,1.792h1.604c1.102,0,2,0.898,2,2c0,1.102-0.898,2-2,2H6v0.999h1.625c1.104,0,2.002,0.898,2.002,2.002c0,1.104-0.898,2.001-2.002,2.001H6v0.997h1.625c1.102,0,2,0.898,2,2c0,1.104-0.898,2.004-2,2.004H6v0.994h1.625c1.102,0,2,0.898,2,2.002s-0.898,2.002-2,2.002H6v0.997h1.624c1.104,0,2.002,0.897,2.002,2.001c0,1.104-0.898,2.002-2.002,2.002H6.004C6.027,28.252,6.91,29.125,8,29.125h16.875c1.104,0,2-0.896,2-2V3.375C26.875,2.271,25.979,1.375,24.875,1.375zM25.25,8.375c0,0.552-0.447,1-1,1H14c-0.553,0-1-0.448-1-1V4c0-0.552,0.447-1,1-1h10.25c0.553,0,1,0.448,1,1V8.375zM8.625,25.166c0-0.554-0.449-1.001-1-1.001h-3.25c-0.552,0-1,0.447-1,1.001c0,0.552,0.449,1,1,1h3.25C8.176,26.166,8.625,25.718,8.625,25.166zM4.375,6.166h3.251c0.551,0,0.999-0.448,0.999-0.999c0-0.555-0.448-1-0.999-1H4.375c-0.553,0-1,0.445-1,1C3.374,5.718,3.822,6.166,4.375,6.166zM4.375,11.167h3.25c0.553,0,1-0.448,1-1s-0.448-1-1-1h-3.25c-0.553,0-1,0.448-1,1S3.822,11.167,4.375,11.167zM4.375,16.167h3.25c0.551,0,1-0.448,1-1.001s-0.448-0.999-1-0.999h-3.25c-0.553,0-1.001,0.446-1.001,0.999S3.822,16.167,4.375,16.167zM3.375,20.165c0,0.553,0.446,1.002,1,1.002h3.25c0.551,0,1-0.449,1-1.002c0-0.552-0.448-1-1-1h-3.25C3.821,19.165,3.375,19.613,3.375,20.165z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Noview();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Noview = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Noview.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Noview\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M11.478,17.568c-0.172-0.494-0.285-1.017-0.285-1.568c0-2.65,2.158-4.807,4.807-4.807c0.552,0,1.074,0.113,1.568,0.285l2.283-2.283C18.541,8.647,17.227,8.286,16,8.286C8.454,8.286,2.5,16,2.5,16s2.167,2.791,5.53,5.017L11.478,17.568zM23.518,11.185l-3.056,3.056c0.217,0.546,0.345,1.138,0.345,1.76c0,2.648-2.158,4.807-4.807,4.807c-0.622,0-1.213-0.128-1.76-0.345l-2.469,2.47c1.327,0.479,2.745,0.783,4.229,0.783c5.771,0,13.5-7.715,13.5-7.715S26.859,13.374,23.518,11.185zM25.542,4.917L4.855,25.604L6.27,27.02L26.956,6.332L25.542,4.917z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Opera();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Opera = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Opera.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Opera\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.954,2.046c-7.489,0-12.872,5.432-12.872,13.581c0,7.25,5.234,13.835,12.873,13.835c7.712,0,12.974-6.583,12.974-13.835C28.929,7.413,23.375,2.046,15.954,2.046zM15.952,26.548L15.952,26.548c-2.289,0-3.49-1.611-4.121-3.796c-0.284-1.037-0.458-2.185-0.563-3.341c-0.114-1.374-0.129-2.773-0.129-4.028c0-0.993,0.018-1.979,0.074-2.926c0.124-1.728,0.386-3.431,0.89-4.833c0.694-1.718,1.871-2.822,3.849-2.822c2.5,0,3.763,1.782,4.385,4.322c0.429,1.894,0.56,4.124,0.56,6.274c0,2.299-0.103,5.153-0.763,7.442C19.473,24.979,18.242,26.548,15.952,26.548z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Package();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Package = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Package.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Package\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M17.078,22.004l-1.758-4.129l-2.007,4.752l-7.519-3.289l0.174,3.905l9.437,4.374l10.909-5.365l-0.149-4.989L17.078,22.004zM29.454,6.619L18.521,3.383l-3.006,2.671l-3.091-2.359L1.546,8.199l3.795,3.048l-3.433,5.302l10.879,4.757l2.53-5.998l2.257,5.308l11.393-5.942l-3.105-4.709L29.454,6.619zM15.277,14.579l-9.059-3.83l9.275-4.101l9.608,3.255L15.277,14.579z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Page();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Page = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Page.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Page\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M23.024,5.673c-1.744-1.694-3.625-3.051-5.168-3.236c-0.084-0.012-0.171-0.019-0.263-0.021H7.438c-0.162,0-0.322,0.063-0.436,0.18C6.889,2.71,6.822,2.87,6.822,3.033v25.75c0,0.162,0.063,0.317,0.18,0.435c0.117,0.116,0.271,0.179,0.436,0.179h18.364c0.162,0,0.317-0.062,0.434-0.179c0.117-0.117,0.182-0.272,0.182-0.435V11.648C26.382,9.659,24.824,7.49,23.024,5.673zM25.184,28.164H8.052V3.646h9.542v0.002c0.416-0.025,0.775,0.386,1.05,1.326c0.25,0.895,0.313,2.062,0.312,2.871c0.002,0.593-0.027,0.991-0.027,0.991l-0.049,0.652l0.656,0.007c0.003,0,1.516,0.018,3,0.355c1.426,0.308,2.541,0.922,2.645,1.617c0.004,0.062,0.005,0.124,0.004,0.182V28.164z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Page2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Page2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Page2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Page2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M23.024,5.673c-1.744-1.694-3.625-3.051-5.168-3.236c-0.084-0.012-0.171-0.019-0.263-0.021H7.438c-0.162,0-0.322,0.063-0.436,0.18C6.889,2.71,6.822,2.87,6.822,3.033v25.75c0,0.162,0.063,0.317,0.18,0.435c0.117,0.116,0.271,0.179,0.436,0.179h18.364c0.162,0,0.317-0.062,0.434-0.179c0.117-0.117,0.182-0.272,0.182-0.435V11.648C26.382,9.659,24.824,7.49,23.024,5.673zM22.157,6.545c0.805,0.786,1.529,1.676,2.069,2.534c-0.468-0.185-0.959-0.322-1.42-0.431c-1.015-0.228-2.008-0.32-2.625-0.357c0.003-0.133,0.004-0.283,0.004-0.446c0-0.869-0.055-2.108-0.356-3.2c-0.003-0.01-0.005-0.02-0.009-0.03C20.584,5.119,21.416,5.788,22.157,6.545zM25.184,28.164H8.052V3.646h9.542v0.002c0.416-0.025,0.775,0.386,1.05,1.326c0.25,0.895,0.313,2.062,0.312,2.871c0.002,0.593-0.027,0.991-0.027,0.991l-0.049,0.652l0.656,0.007c0.003,0,1.516,0.018,3,0.355c1.426,0.308,2.541,0.922,2.645,1.617c0.004,0.062,0.005,0.124,0.004,0.182V28.164z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Pallete();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Pallete = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Pallete.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Pallete\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.653,7.25c-3.417,0-8.577,0.983-8.577,3.282c0,1.91,2.704,3.229,1.691,3.889c-1.02,0.666-2.684-1.848-4.048-1.848c-1.653,0-2.815,1.434-2.815,2.926c0,4.558,6.326,8.25,13.749,8.25c7.424,0,13.443-3.692,13.443-8.25C29.096,10.944,23.077,7.25,15.653,7.25zM10.308,13.521c0-0.645,0.887-1.166,1.98-1.166c1.093,0,1.979,0.521,1.979,1.166c0,0.644-0.886,1.166-1.979,1.166C11.195,14.687,10.308,14.164,10.308,13.521zM14.289,22.299c-1.058,0-1.914-0.68-1.914-1.518s0.856-1.518,1.914-1.518c1.057,0,1.914,0.68,1.914,1.518S15.346,22.299,14.289,22.299zM19.611,21.771c-1.057,0-1.913-0.681-1.913-1.519c0-0.84,0.856-1.521,1.913-1.521c1.059,0,1.914,0.681,1.914,1.521C21.525,21.092,20.67,21.771,19.611,21.771zM20.075,10.66c0-0.838,0.856-1.518,1.914-1.518s1.913,0.68,1.913,1.518c0,0.839-0.855,1.518-1.913,1.518C20.934,12.178,20.075,11.499,20.075,10.66zM24.275,19.482c-1.057,0-1.914-0.681-1.914-1.519s0.857-1.518,1.914-1.518c1.059,0,1.914,0.68,1.914,1.518S25.334,19.482,24.275,19.482zM25.286,15.475c-1.058,0-1.914-0.68-1.914-1.519c0-0.838,0.856-1.518,1.914-1.518c1.057,0,1.913,0.68,1.913,1.518C27.199,14.795,26.343,15.475,25.286,15.475z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Palm();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Palm = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Palm.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Palm\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.296,27.885v-2.013c0,0-0.402-1.408-1.073-2.013c-0.671-0.604-1.274-1.274-1.409-1.61c0,0-0.268,0.135-0.737-0.335s-1.812-2.616-1.812-2.616l-0.671-0.872c0,0-0.47-0.671-1.275-1.342c-0.805-0.672-0.938-0.067-1.476-0.738s0.604-1.275,1.006-1.409c0.403-0.134,1.946,0.134,2.684,0.872c0.738,0.738,0.738,0.738,0.738,0.738l1.073,1.141l0.537,0.201l0.671-1.073l-0.269-2.281c0,0-0.604-2.55-0.737-4.764c-0.135-2.214-0.47-5.703,1.006-5.837s1.007,2.55,1.073,3.489c0.067,0.938,0.806,5.232,1.208,5.568c0.402,0.335,0.671,0.066,0.671,0.066l0.402-7.514c0,0-0.479-2.438,1.073-2.549c0.939-0.067,0.872,1.543,0.872,2.147c0,0.604,0.269,7.514,0.269,7.514l0.537,0.135c0,0,0.402-2.214,0.604-3.153s0.604-2.416,0.537-3.087c-0.067-0.671-0.135-2.348,1.006-2.348s0.872,1.812,0.939,2.415s-0.134,3.153-0.134,3.757c0,0.604-0.738,3.623-0.537,3.824s2.08-2.817,2.349-3.958c0.268-1.141,0.201-3.02,1.408-2.885c1.208,0.134,0.47,2.817,0.402,3.086c-0.066,0.269-0.671,2.349-0.872,2.952s-0.805,1.476-1.006,2.013s0.402,2.349,0,4.629c-0.402,2.281-1.61,5.166-1.61,5.166l0.604,2.08c0,0-1.744,0.671-3.824,0.805C16.443,28.221,14.296,27.885,14.296,27.885z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Paper();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Paper = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Paper.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Paper\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.916,8.009L15.953,1.888c-0.251-0.119-0.548-0.115-0.798,0.008c-0.25,0.125-0.433,0.357-0.491,0.629c-0.002,0.01-1.04,4.83-2.578,9.636c-0.526,1.646-1.114,3.274-1.728,4.704l1.665,0.786c2-4.643,3.584-11.052,4.181-13.614l11.264,5.316c-0.346,1.513-1.233,5.223-2.42,8.927c-0.767,2.399-1.665,4.797-2.585,6.532c-0.889,1.79-1.958,2.669-2.197,2.552c-1.419,0.03-2.418-1.262-3.09-2.918c-0.32-0.803-0.53-1.63-0.657-2.246c-0.127-0.618-0.166-1.006-0.168-1.006c-0.034-0.317-0.232-0.597-0.52-0.731l-12.962-6.12c-0.301-0.142-0.654-0.11-0.925,0.081c-0.27,0.193-0.416,0.518-0.38,0.847c0.008,0.045,0.195,1.848,0.947,3.736c0.521,1.321,1.406,2.818,2.845,3.575l12.956,6.131l0.006-0.013c0.562,0.295,1.201,0.487,1.947,0.496c1.797-0.117,2.777-1.668,3.818-3.525c3-5.69,5.32-16.602,5.338-16.642C29.512,8.615,29.302,8.19,28.916,8.009z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Parent();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Parent = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Parent.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Parent\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.423,12.17c-0.875,0.641-1.941,1.031-3.102,1.031c-1.164,0-2.231-0.391-3.104-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.578,5.192-0.35,5.874c0.549,0.312,1.127,0.078,1.723-0.496c-0.105,0.582-0.166,1.213-0.166,1.873c0,2.938,1.139,5.312,2.543,5.312c0.846,0,1.265-0.865,1.466-2.188c0.2,1.314,0.62,2.188,1.461,2.188c1.396,0,2.545-2.375,2.545-5.312c0-0.66-0.062-1.291-0.168-1.873c0.6,0.574,1.176,0.812,1.726,0.496c1.227-0.682,1.068-3.311-0.354-5.874C15.921,13.689,15.173,12.795,14.423,12.17zM11.32,12.201c2.361,0,4.277-1.916,4.277-4.279s-1.916-4.279-4.277-4.279c-2.363,0-4.28,1.916-4.28,4.279S8.957,12.201,11.32,12.201zM21.987,17.671c1.508,0,2.732-1.225,2.732-2.735c0-1.51-1.225-2.735-2.732-2.735c-1.511,0-2.736,1.225-2.736,2.735C19.251,16.446,20.477,17.671,21.987,17.671zM25.318,19.327c-0.391-0.705-0.869-1.277-1.349-1.677c-0.56,0.41-1.24,0.659-1.982,0.659c-0.744,0-1.426-0.25-1.983-0.659c-0.479,0.399-0.958,0.972-1.35,1.677c-0.909,1.638-1.009,3.318-0.224,3.754c0.351,0.2,0.721,0.05,1.101-0.317c-0.067,0.372-0.105,0.775-0.105,1.197c0,1.878,0.728,3.396,1.625,3.396c0.54,0,0.808-0.553,0.937-1.398c0.128,0.841,0.396,1.398,0.934,1.398c0.893,0,1.627-1.518,1.627-3.396c0-0.422-0.04-0.825-0.107-1.197c0.383,0.367,0.752,0.52,1.104,0.317C26.328,22.646,26.227,20.965,25.318,19.327z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Pc();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Pc = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Pc.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Pc\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M29.249,3.14h-9.188l-0.459,0.459v18.225l0.33,2.389H19.57v0.245h-0.307v-0.306h-0.611v0.244h-0.311v-0.367h-0.486v0.307h-1.104l-2.022-0.367v-0.92h0.858l0.302-1.47h2.728c0.188,0,0.339-0.152,0.339-0.339V7.828c0-0.187-0.149-0.338-0.339-0.338H1.591c-0.187,0-0.339,0.152-0.339,0.338V21.24c0,0.187,0.152,0.339,0.339,0.339h3.016l0.199,1.47h1.409l-3.4,3.4L2.11,27.951c0,0,2.941,1.102,6.678,1.102c3.737,0,9.679-0.857,10.476-0.857s4.84,0,4.84,0v-1.225l-0.137-1.068h1.744c-0.2,0.106-0.322,0.244-0.322,0.396v0.979c0,0.341,0.604,0.613,1.352,0.613c0.742,0,1.348-0.272,1.348-0.613v-0.979c0-0.339-0.604-0.611-1.348-0.611c-0.188,0-0.364,0.019-0.525,0.049v-0.17h-2.29l-0.055-0.432h5.382L29.249,3.14L29.249,3.14zM2.478,20.17V8.714h15.07V20.17H2.478z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Pen();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Pen = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Pen.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Pen\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M13.587,12.074c-0.049-0.074-0.11-0.147-0.188-0.202c-0.333-0.243-0.803-0.169-1.047,0.166c-0.244,0.336-0.167,0.805,0.167,1.048c0.303,0.22,0.708,0.167,0.966-0.091l-7.086,9.768l-2.203,7.997l6.917-4.577L26.865,4.468l-4.716-3.42l-1.52,2.096c-0.087-0.349-0.281-0.676-0.596-0.907c-0.73-0.529-1.751-0.369-2.28,0.363C14.721,6.782,16.402,7.896,13.587,12.074zM10.118,25.148L6.56,27.503l1.133-4.117L10.118,25.148zM14.309,11.861c2.183-3.225,1.975-4.099,3.843-6.962c0.309,0.212,0.664,0.287,1.012,0.269L14.309,11.861z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Pensil();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Pensil = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Pensil.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Pensil\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.31,2.872l-3.384-2.127c-0.854-0.536-1.979-0.278-2.517,0.576l-1.334,2.123l6.474,4.066l1.335-2.122C26.42,4.533,26.164,3.407,25.31,2.872zM6.555,21.786l6.474,4.066L23.581,9.054l-6.477-4.067L6.555,21.786zM5.566,26.952l-0.143,3.819l3.379-1.787l3.14-1.658l-6.246-3.925L5.566,26.952z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.People();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.People = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.People.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.People\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.066,20.667c1.227-0.682,1.068-3.311-0.354-5.874c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.102,1.031c-1.164,0-2.231-0.391-3.104-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.578,5.192-0.35,5.874c0.549,0.312,1.127,0.078,1.723-0.496c-0.105,0.582-0.166,1.213-0.166,1.873c0,2.938,1.139,5.312,2.543,5.312c0.846,0,1.265-0.865,1.466-2.188c0.2,1.314,0.62,2.188,1.461,2.188c1.396,0,2.545-2.375,2.545-5.312c0-0.66-0.062-1.291-0.168-1.873C19.939,20.745,20.516,20.983,21.066,20.667zM15.5,12.201c2.361,0,4.277-1.916,4.277-4.279S17.861,3.644,15.5,3.644c-2.363,0-4.28,1.916-4.28,4.279S13.137,12.201,15.5,12.201zM24.094,14.914c1.938,0,3.512-1.573,3.512-3.513c0-1.939-1.573-3.513-3.512-3.513c-1.94,0-3.513,1.573-3.513,3.513C20.581,13.341,22.153,14.914,24.094,14.914zM28.374,17.043c-0.502-0.907-1.116-1.641-1.732-2.154c-0.718,0.526-1.594,0.846-2.546,0.846c-0.756,0-1.459-0.207-2.076-0.55c0.496,1.093,0.803,2.2,0.861,3.19c0.093,1.516-0.381,2.641-1.329,3.165c-0.204,0.117-0.426,0.183-0.653,0.224c-0.056,0.392-0.095,0.801-0.095,1.231c0,2.412,0.935,4.361,2.088,4.361c0.694,0,1.039-0.71,1.204-1.796c0.163,1.079,0.508,1.796,1.199,1.796c1.146,0,2.09-1.95,2.09-4.361c0-0.542-0.052-1.06-0.139-1.538c0.492,0.472,0.966,0.667,1.418,0.407C29.671,21.305,29.541,19.146,28.374,17.043zM6.906,14.914c1.939,0,3.512-1.573,3.512-3.513c0-1.939-1.573-3.513-3.512-3.513c-1.94,0-3.514,1.573-3.514,3.513C3.392,13.341,4.966,14.914,6.906,14.914zM9.441,21.536c-1.593-0.885-1.739-3.524-0.457-6.354c-0.619,0.346-1.322,0.553-2.078,0.553c-0.956,0-1.832-0.321-2.549-0.846c-0.616,0.513-1.229,1.247-1.733,2.154c-1.167,2.104-1.295,4.262-0.287,4.821c0.451,0.257,0.925,0.064,1.414-0.407c-0.086,0.479-0.136,0.996-0.136,1.538c0,2.412,0.935,4.361,2.088,4.361c0.694,0,1.039-0.71,1.204-1.796c0.165,1.079,0.509,1.796,1.201,1.796c1.146,0,2.089-1.95,2.089-4.361c0-0.432-0.04-0.841-0.097-1.233C9.874,21.721,9.651,21.656,9.441,21.536z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Phone();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Phone = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Phone.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Phone\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.065,18.53c-0.467-0.29-1.167-0.21-1.556,0.179l-3.093,3.092c-0.389,0.389-1.025,0.389-1.414,0L9.05,14.848c-0.389-0.389-0.389-1.025,0-1.414l2.913-2.912c0.389-0.389,0.447-1.075,0.131-1.524L6.792,1.485C6.476,1.036,5.863,0.948,5.433,1.29c0,0-4.134,3.281-4.134,6.295c0,12.335,10,22.334,22.334,22.334c3.015,0,5.948-5.533,5.948-5.533c0.258-0.486,0.087-1.122-0.38-1.412L22.065,18.53z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Photo();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Photo = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Photo.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Photo\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.25,10.25H20.5v-1.5h-9.375v1.5h-3.75c-1.104,0-2,0.896-2,2v10.375c0,1.104,0.896,2,2,2H24.25c1.104,0,2-0.896,2-2V12.25C26.25,11.146,25.354,10.25,24.25,10.25zM15.812,23.499c-3.342,0-6.06-2.719-6.06-6.061c0-3.342,2.718-6.062,6.06-6.062s6.062,2.72,6.062,6.062C21.874,20.78,19.153,23.499,15.812,23.499zM15.812,13.375c-2.244,0-4.062,1.819-4.062,4.062c0,2.244,1.819,4.062,4.062,4.062c2.244,0,4.062-1.818,4.062-4.062C19.875,15.194,18.057,13.375,15.812,13.375z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Picker();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Picker = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Picker.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Picker\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.221,10.853c-0.111-0.414-0.261-0.412,0.221-1.539l1.66-3.519c0.021-0.051,0.2-0.412,0.192-0.946c0.015-0.529-0.313-1.289-1.119-1.642c-1.172-0.555-1.17-0.557-2.344-1.107c-0.784-0.396-1.581-0.171-1.979,0.179c-0.42,0.333-0.584,0.7-0.609,0.75L16.58,6.545c-0.564,1.084-0.655,0.97-1.048,1.147c-0.469,0.129-1.244,0.558-1.785,1.815c-1.108,2.346-1.108,2.346-1.108,2.346l-0.276,0.586l1.17,0.553l-3.599,7.623c-0.38,0.828-0.166,1.436-0.166,2.032c0.01,0.627-0.077,1.509-0.876,3.21l-0.276,0.586l3.517,1.661l0.276-0.585c0.808-1.699,1.431-2.326,1.922-2.717c0.46-0.381,1.066-0.6,1.465-1.42l3.599-7.618l1.172,0.554l0.279-0.589c0,0,0,0,1.105-2.345C22.578,12.166,22.419,11.301,22.221,10.853zM14.623,22.83c-0.156,0.353-0.413,0.439-1.091,0.955c-0.577,0.448-1.264,1.172-2.009,2.6l-1.191-0.562c0.628-1.48,0.75-2.474,0.73-3.203c-0.031-0.851-0.128-1.104,0.045-1.449l3.599-7.621l3.517,1.662L14.623,22.83z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Picture();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Picture = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Picture.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Picture\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M2.5,4.833v22.334h27V4.833H2.5zM25.25,25.25H6.75V6.75h18.5V25.25zM11.25,14c1.426,0,2.583-1.157,2.583-2.583c0-1.427-1.157-2.583-2.583-2.583c-1.427,0-2.583,1.157-2.583,2.583C8.667,12.843,9.823,14,11.25,14zM24.251,16.25l-4.917-4.917l-6.917,6.917L10.5,16.333l-2.752,2.752v5.165h16.503V16.25z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.PieChart();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.PieChart = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.PieChart.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.PieChart\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.583,15.917l1.648-10.779C16.692,5.056,16.145,5,15.583,5C9.554,5,4.666,9.888,4.666,15.917c0,6.029,4.888,10.917,10.917,10.917S26.5,21.946,26.5,15.917c0-0.256-0.021-0.507-0.038-0.759L15.583,15.917zM19.437,3.127l-1.648,10.779l10.879-0.759C28.313,8.026,24.436,3.886,19.437,3.127z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Plane();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Plane = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Plane.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Plane\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M19.671,8.11l-2.777,2.777l-3.837-0.861c0.362-0.505,0.916-1.683,0.464-2.135c-0.518-0.517-1.979,0.278-2.305,0.604l-0.913,0.913L7.614,8.804l-2.021,2.021l2.232,1.061l-0.082,0.082l1.701,1.701l0.688-0.687l3.164,1.504L9.571,18.21H6.413l-1.137,1.138l3.6,0.948l1.83,1.83l0.947,3.598l1.137-1.137V21.43l3.725-3.725l1.504,3.164l-0.687,0.687l1.702,1.701l0.081-0.081l1.062,2.231l2.02-2.02l-0.604-2.689l0.912-0.912c0.326-0.326,1.121-1.789,0.604-2.306c-0.452-0.452-1.63,0.101-2.135,0.464l-0.861-3.838l2.777-2.777c0.947-0.947,3.599-4.862,2.62-5.839C24.533,4.512,20.618,7.163,19.671,8.11z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Plugin();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Plugin = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Plugin.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Plugin\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M26.33,15.836l-3.893-1.545l3.136-7.9c0.28-0.705-0.064-1.505-0.771-1.785c-0.707-0.28-1.506,0.065-1.785,0.771l-3.136,7.9l-4.88-1.937l3.135-7.9c0.281-0.706-0.064-1.506-0.77-1.786c-0.706-0.279-1.506,0.065-1.785,0.771l-3.136,7.9L8.554,8.781l-1.614,4.066l2.15,0.854l-2.537,6.391c-0.61,1.54,0.143,3.283,1.683,3.895l1.626,0.646L8.985,26.84c-0.407,1.025,0.095,2.188,1.122,2.596l0.93,0.369c1.026,0.408,2.188-0.095,2.596-1.121l0.877-2.207l1.858,0.737c1.54,0.611,3.284-0.142,3.896-1.682l2.535-6.391l1.918,0.761L26.33,15.836z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Plus();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Plus = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Plus.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Plus\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.979,12.896 19.312,12.896 19.312,6.229 12.647,6.229 12.647,12.896 5.979,12.896 5.979,19.562 12.647,19.562 12.647,26.229 19.312,26.229 19.312,19.562 25.979,19.562z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Power();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Power = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Power.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Power\",\n\n  /**\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.542,8.354c-1.47-1.766-2.896-2.617-3.025-2.695c-0.954-0.565-2.181-0.241-2.739,0.724c-0.556,0.961-0.24,2.194,0.705,2.763c0,0,0.001,0,0.002,0.001c0.001,0,0.002,0.001,0.003,0.002c0.001,0,0.003,0.001,0.004,0.001c0.102,0.062,1.124,0.729,2.08,1.925c1.003,1.261,1.933,3.017,1.937,5.438c-0.001,2.519-1.005,4.783-2.64,6.438c-1.637,1.652-3.877,2.668-6.368,2.669c-2.491-0.001-4.731-1.017-6.369-2.669c-1.635-1.654-2.639-3.919-2.64-6.438c0.005-2.499,0.995-4.292,2.035-5.558c0.517-0.625,1.043-1.098,1.425-1.401c0.191-0.152,0.346-0.263,0.445-0.329c0.049-0.034,0.085-0.058,0.104-0.069c0.005-0.004,0.009-0.006,0.012-0.008s0.004-0.002,0.004-0.002l0,0c0.946-0.567,1.262-1.802,0.705-2.763c-0.559-0.965-1.785-1.288-2.739-0.724c-0.128,0.079-1.555,0.93-3.024,2.696c-1.462,1.751-2.974,4.511-2.97,8.157C2.49,23.775,8.315,29.664,15.5,29.667c7.186-0.003,13.01-5.892,13.012-13.155C28.516,12.864,27.005,10.105,25.542,8.354zM15.5,17.523c1.105,0,2.002-0.907,2.002-2.023h-0.001V3.357c0-1.118-0.896-2.024-2.001-2.024s-2.002,0.906-2.002,2.024V15.5C13.498,16.616,14.395,17.523,15.5,17.523z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Ppt();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Ppt = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Ppt.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Ppt\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16.604,1.914c0-0.575-0.466-1.041-1.041-1.041s-1.041,0.466-1.041,1.041v1.04h2.082V1.914zM16.604,22.717h-2.082v3.207c0,0.574-4.225,4.031-4.225,4.031l2.468-0.003l2.807-2.673l3.013,2.693l2.272-0.039l-4.254-4.011V22.717L16.604,22.717zM28.566,7.113c0.86,0,1.56-0.698,1.56-1.56c0-0.861-0.698-1.56-1.56-1.56H2.561c-0.861,0-1.56,0.699-1.56,1.56c0,0.862,0.699,1.56,1.56,1.56h1.583v12.505l-0.932-0.022c-0.861,0-1.213,0.467-1.213,1.04c0,0.576,0.352,1.041,1.213,1.041h24.597c0.86,0,1.299-0.465,1.299-1.041c0-1.094-1.299-1.04-1.299-1.04l-0.804,0.109V7.113H28.566zM11.435,17.516c-3.771,0-4.194-4.191-4.194-4.191c0-4.096,4.162-4.161,4.162-4.161v4.161h4.193C15.596,17.516,11.435,17.516,11.435,17.516zM18.716,13.388h-1.071v-1.073h1.071V13.388zM18.716,10.267h-1.071V9.194h1.071V10.267zM23.314,13.388H20.26c-0.296,0-0.535-0.24-0.535-0.536c0-0.297,0.239-0.537,0.535-0.537h3.057c0.297,0,0.535,0.24,0.535,0.537C23.852,13.147,23.611,13.388,23.314,13.388zM23.314,10.267H20.26c-0.296,0-0.535-0.239-0.535-0.535c0-0.297,0.239-0.537,0.535-0.537h3.057c0.297,0,0.535,0.24,0.535,0.537C23.852,10.027,23.611,10.267,23.314,10.267z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Printer();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Printer = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Printer.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Printer\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.569,12.125h-2.12c-0.207-1.34-1.247-2.759-2.444-3.967c-1.277-1.24-2.654-2.234-3.784-2.37c-0.062-0.008-0.124-0.014-0.198-0.015H8.594c-0.119,0-0.235,0.047-0.319,0.132c-0.083,0.083-0.132,0.2-0.132,0.32v5.9H6.069c-1.104,0-2,0.896-2,2V23h4.074v2.079c0,0.118,0.046,0.23,0.132,0.318c0.086,0.085,0.199,0.131,0.319,0.131h13.445c0.118,0,0.232-0.046,0.318-0.131s0.138-0.199,0.138-0.318V23h4.074v-8.875C26.569,13.021,25.674,12.125,24.569,12.125zM21.589,24.626H9.043V21.5h12.546V24.626zM21.589,13.921c0-0.03,0-0.063-0.003-0.096c-0.015-0.068-0.062-0.135-0.124-0.2H9.043v-6.95h6.987v0.001c0.305-0.019,0.567,0.282,0.769,0.971c0.183,0.655,0.229,1.509,0.229,2.102c0.001,0.433-0.019,0.725-0.019,0.725l-0.037,0.478l0.48,0.005c0.002,0,1.109,0.014,2.196,0.26c1.044,0.226,1.86,0.675,1.938,1.184c0.003,0.045,0.003,0.091,0.003,0.133V13.921z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Quote();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Quote = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Quote.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Quote\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.505,5.873c-3.937,2.52-5.904,5.556-5.904,9.108c0,1.104,0.192,1.656,0.576,1.656l0.396-0.107c0.312-0.12,0.563-0.18,0.756-0.18c1.128,0,2.07,0.411,2.826,1.229c0.756,0.82,1.134,1.832,1.134,3.037c0,1.157-0.408,2.14-1.224,2.947c-0.816,0.807-1.801,1.211-2.952,1.211c-1.608,0-2.935-0.661-3.979-1.984c-1.044-1.321-1.565-2.98-1.565-4.977c0-2.259,0.443-4.327,1.332-6.203c0.888-1.875,2.243-3.57,4.067-5.085c1.824-1.514,2.988-2.272,3.492-2.272c0.336,0,0.612,0.162,0.828,0.486c0.216,0.324,0.324,0.606,0.324,0.846L14.505,5.873zM27.465,5.873c-3.937,2.52-5.904,5.556-5.904,9.108c0,1.104,0.192,1.656,0.576,1.656l0.396-0.107c0.312-0.12,0.563-0.18,0.756-0.18c1.104,0,2.04,0.411,2.808,1.229c0.769,0.82,1.152,1.832,1.152,3.037c0,1.157-0.408,2.14-1.224,2.947c-0.816,0.807-1.801,1.211-2.952,1.211c-1.608,0-2.935-0.661-3.979-1.984c-1.044-1.321-1.565-2.98-1.565-4.977c0-2.284,0.449-4.369,1.35-6.256c0.9-1.887,2.256-3.577,4.068-5.067c1.812-1.49,2.97-2.236,3.474-2.236c0.336,0,0.612,0.162,0.828,0.486c0.216,0.324,0.324,0.606,0.324,0.846L27.465,5.873z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Rain();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Rain = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Rain.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Rain\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.371,7.306c-0.092-3.924-3.301-7.077-7.248-7.079c-2.638,0.001-4.942,1.412-6.208,3.517c-0.595-0.327-1.28-0.517-2.01-0.517C7.626,3.229,5.772,5.033,5.689,7.293c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.874c3.312,0,6-2.688,6-6C29.434,10.34,27.732,8.11,25.371,7.306zM23.436,16.979H7.561c-2.209-0.006-3.997-1.792-4.001-4.001c-0.002-1.982,1.45-3.618,3.35-3.931c0.265-0.043,0.502-0.191,0.657-0.414C7.722,8.41,7.779,8.136,7.73,7.87C7.702,7.722,7.685,7.582,7.685,7.446C7.689,6.221,8.68,5.23,9.905,5.228c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.309c0.342-0.066,0.626-0.307,0.748-0.63c0.749-1.992,2.662-3.412,4.911-3.41c2.899,0.004,5.244,2.35,5.251,5.249c0,0.161-0.009,0.326-0.027,0.497c-0.049,0.517,0.305,0.984,0.815,1.079c1.86,0.344,3.274,1.966,3.271,3.923C27.43,15.186,25.645,16.973,23.436,16.979zM9.029,26.682c0-1.115,0.021-5.425,0.021-5.432c0.002-0.409-0.247-0.779-0.628-0.932c-0.38-0.152-0.815-0.059-1.099,0.24c-0.006,0.008-1.037,1.098-2.081,2.342c-0.523,0.627-1.048,1.287-1.463,1.896c-0.399,0.648-0.753,1.066-0.811,1.885C2.971,28.355,4.324,29.711,6,29.714C7.672,29.71,9.029,28.354,9.029,26.682zM4.971,26.727c0.091-0.349,1.081-1.719,1.993-2.764c0.025-0.029,0.051-0.061,0.076-0.089c-0.005,1.124-0.01,2.294-0.01,2.808c0,0.567-0.461,1.028-1.029,1.03C5.447,27.71,4.997,27.273,4.971,26.727zM16.425,26.682c0-1.115,0.021-5.424,0.021-5.43c0.002-0.41-0.247-0.779-0.628-0.934c-0.381-0.152-0.814-0.058-1.1,0.242c-0.006,0.008-1.035,1.094-2.08,2.342c-0.522,0.623-1.047,1.285-1.463,1.894c-0.399,0.649-0.753,1.068-0.809,1.888c0,1.672,1.354,3.028,3.029,3.028C15.068,29.711,16.425,28.354,16.425,26.682zM12.365,26.729c0.092-0.349,1.081-1.72,1.993-2.765c0.025-0.03,0.05-0.06,0.075-0.089c-0.005,1.123-0.011,2.294-0.011,2.807c-0.002,0.568-0.461,1.027-1.028,1.029C12.84,27.709,12.392,27.273,12.365,26.729zM23.271,20.317c-0.38-0.153-0.816-0.06-1.099,0.24c-0.009,0.008-1.037,1.097-2.08,2.342c-0.523,0.625-1.049,1.285-1.462,1.896c-0.402,0.649-0.754,1.067-0.812,1.886c0,1.672,1.354,3.029,3.03,3.029c1.673,0,3.027-1.357,3.027-3.029c0-1.115,0.022-5.425,0.022-5.431C23.9,20.84,23.651,20.47,23.271,20.317zM21.879,26.681c-0.004,0.568-0.463,1.027-1.031,1.029c-0.553-0.002-1.002-0.438-1.028-0.982c0.092-0.349,1.081-1.72,1.993-2.765c0.025-0.028,0.05-0.059,0.074-0.088C21.883,24.998,21.879,26.167,21.879,26.681z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Raphael();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Raphael = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Raphael.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Raphael\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.777,18.941c0.584-0.881,0.896-1.914,0.896-2.998c0-1.457-0.567-2.826-1.598-3.854l-6.91-6.911l-0.003,0.002c-0.985-0.988-2.35-1.6-3.851-1.6c-1.502,0-2.864,0.612-3.85,1.6H12.46l-6.911,6.911c-1.031,1.029-1.598,2.398-1.598,3.854c0,1.457,0.567,2.826,1.598,3.854l6.231,6.229c0.25,0.281,0.512,0.544,0.789,0.785c1.016,0.961,2.338,1.49,3.743,1.49c1.456,0,2.825-0.565,3.854-1.598l6.723-6.725c0.021-0.019,0.034-0.032,0.051-0.051l0.14-0.138c0.26-0.26,0.487-0.54,0.688-0.838c0.004-0.008,0.01-0.015,0.014-0.021L27.777,18.941zM26.658,15.946c0,0.678-0.197,1.326-0.561,1.879c-0.222,0.298-0.447,0.559-0.684,0.784L25.4,18.625c-1.105,1.052-2.354,1.35-3.414,1.35c-0.584,0-1.109-0.09-1.523-0.195c-2.422-0.608-5.056-2.692-6.261-5.732c0.649,0.274,1.362,0.426,2.11,0.426c2.811,0,5.129-2.141,5.415-4.877l3.924,3.925C26.301,14.167,26.658,15.029,26.658,15.946zM16.312,5.6c1.89,0,3.426,1.538,3.426,3.427c0,1.89-1.536,3.427-3.426,3.427c-1.889,0-3.426-1.537-3.426-3.427C12.886,7.138,14.423,5.6,16.312,5.6zM6.974,18.375c-0.649-0.648-1.007-1.512-1.007-2.429c0-0.917,0.357-1.78,1.007-2.428l2.655-2.656c-0.693,2.359-0.991,4.842-0.831,7.221c0.057,0.854,0.175,1.677,0.345,2.46L6.974,18.375zM11.514,11.592c0.583,4.562,4.195,9.066,8.455,10.143c0.693,0.179,1.375,0.265,2.033,0.265c0.01,0,0.02,0,0.027,0l-3.289,3.289c-0.648,0.646-1.512,1.006-2.428,1.006c-0.638,0-1.248-0.177-1.779-0.5l0.001-0.002c-0.209-0.142-0.408-0.295-0.603-0.461c-0.015-0.019-0.031-0.026-0.046-0.043l-0.665-0.664c-1.367-1.567-2.227-3.903-2.412-6.671C10.669,15.856,10.921,13.673,11.514,11.592\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ReflectH();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ReflectH = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ReflectH.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.ReflectH\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.57,20.273h0.854v-1.705H15.57V20.273zM15.57,23.686h0.854V21.98H15.57V23.686zM15.57,27.096h0.854v-1.705H15.57V27.096zM15.57,29.689h0.854V28.8H15.57V29.689zM15.57,16.865h0.854V15.16H15.57V16.865zM15.57,3.225h0.854V1.52H15.57V3.225zM15.57,6.635h0.854V4.93H15.57V6.635zM15.57,10.045h0.854V8.34H15.57V10.045zM15.57,13.455h0.854V11.75H15.57V13.455zM18.41,3.327V25.46h12.015L18.41,3.327zM19.264,6.68l9.729,17.93h-9.729V6.68zM13.535,25.46V3.327L1.521,25.46H13.535z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ReflectV();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ReflectV = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ReflectV.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.ReflectV\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.643,16.008v-0.854h-1.705v0.854H20.643zM24.053,16.008v-0.854h-1.705v0.854H24.053zM27.463,16.008v-0.854h-1.705v0.854H27.463zM30.059,16.008v-0.854h-0.891v0.854H30.059zM17.232,16.008v-0.854h-1.709v0.854H17.232zM3.593,16.008v-0.854H1.888v0.854H3.593zM7.003,16.008v-0.854H5.298v0.854H7.003zM10.414,16.008v-0.854H8.709v0.854H10.414zM13.824,16.008v-0.854h-1.705v0.854H13.824zM3.694,13.167h22.134V1.152L3.694,13.167zM7.048,12.314l17.929-9.729v9.729H7.048zM25.828,18.042H3.694l22.134,12.015V18.042z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Refresh();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Refresh = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Refresh.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Refresh\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.083,15.5c-0.009,4.739-3.844,8.574-8.583,8.583c-4.741-0.009-8.577-3.844-8.585-8.583c0.008-4.741,3.844-8.577,8.585-8.585c1.913,0,3.665,0.629,5.09,1.686l-1.782,1.783l8.429,2.256l-2.26-8.427l-1.89,1.89c-2.072-1.677-4.717-2.688-7.587-2.688C8.826,3.418,3.418,8.826,3.416,15.5C3.418,22.175,8.826,27.583,15.5,27.583S27.583,22.175,27.583,15.5H24.083z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Resize2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Resize2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Resize2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Resize2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M1.999,2.332v26.499H28.5V2.332H1.999zM26.499,26.832H4V12.5h8.167V4.332h14.332V26.832zM15.631,17.649l5.468,5.469l-1.208,1.206l5.482,1.469l-1.47-5.481l-1.195,1.195l-5.467-5.466l1.209-1.208l-5.482-1.469l1.468,5.48L15.631,17.649z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Rotate();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Rotate = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Rotate.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Rotate\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.5,5.27c1.914,0,3.666,0.629,5.089,1.686l-1.781,1.783l8.428,2.256l-2.26-8.427l-1.889,1.89C21.016,2.781,18.371,1.77,15.5,1.77C8.827,1.773,3.418,7.181,3.417,13.855c0.001,4.063,2.012,7.647,5.084,9.838v-4.887c-0.993-1.4-1.583-3.105-1.585-4.952C6.923,9.114,10.759,5.278,15.5,5.27zM9.5,29.23h12V12.355h-12V29.23z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Ruler();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Ruler = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Ruler.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Ruler\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M6.63,21.796l-5.122,5.121h25.743V1.175L6.63,21.796zM18.702,10.48c0.186-0.183,0.48-0.183,0.664,0l1.16,1.159c0.184,0.183,0.186,0.48,0.002,0.663c-0.092,0.091-0.213,0.137-0.332,0.137c-0.121,0-0.24-0.046-0.33-0.137l-1.164-1.159C18.519,10.96,18.519,10.664,18.702,10.48zM17.101,12.084c0.184-0.183,0.48-0.183,0.662,0l2.156,2.154c0.184,0.183,0.184,0.48,0.002,0.661c-0.092,0.092-0.213,0.139-0.334,0.139s-0.24-0.046-0.33-0.137l-2.156-2.154C16.917,12.564,16.917,12.267,17.101,12.084zM15.497,13.685c0.184-0.183,0.48-0.183,0.664,0l1.16,1.161c0.184,0.183,0.182,0.48-0.002,0.663c-0.092,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.24-0.046-0.332-0.138l-1.16-1.16C15.314,14.166,15.314,13.868,15.497,13.685zM13.896,15.288c0.184-0.183,0.48-0.181,0.664,0.002l1.158,1.159c0.183,0.184,0.183,0.48,0,0.663c-0.092,0.092-0.212,0.138-0.332,0.138c-0.119,0-0.24-0.046-0.332-0.138l-1.158-1.161C13.713,15.767,13.713,15.471,13.896,15.288zM12.293,16.892c0.183-0.184,0.479-0.184,0.663,0l2.154,2.153c0.184,0.184,0.184,0.481,0,0.665c-0.092,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.242-0.046-0.334-0.138l-2.153-2.155C12.11,17.371,12.11,17.075,12.293,16.892zM10.302,24.515c-0.091,0.093-0.212,0.139-0.332,0.139c-0.119,0-0.238-0.045-0.33-0.137l-2.154-2.153c-0.184-0.183-0.184-0.479,0-0.663s0.479-0.184,0.662,0l2.154,2.153C10.485,24.036,10.485,24.332,10.302,24.515zM10.912,21.918c-0.093,0.093-0.214,0.139-0.333,0.139c-0.12,0-0.24-0.045-0.33-0.137l-1.162-1.161c-0.184-0.183-0.184-0.479,0-0.66c0.184-0.185,0.48-0.187,0.664-0.003l1.161,1.162C11.095,21.438,11.095,21.735,10.912,21.918zM12.513,20.316c-0.092,0.092-0.211,0.138-0.332,0.138c-0.119,0-0.239-0.046-0.331-0.138l-1.159-1.16c-0.184-0.184-0.184-0.48,0-0.664s0.48-0.182,0.663,0.002l1.159,1.161C12.696,19.838,12.696,20.135,12.513,20.316zM22.25,21.917h-8.67l8.67-8.67V21.917zM22.13,10.7c-0.09,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.242-0.046-0.334-0.138l-1.16-1.159c-0.184-0.183-0.184-0.479,0-0.663c0.182-0.183,0.479-0.183,0.662,0l1.16,1.159C22.312,10.221,22.313,10.517,22.13,10.7zM24.726,10.092c-0.092,0.092-0.213,0.137-0.332,0.137s-0.24-0.045-0.33-0.137l-2.154-2.154c-0.184-0.183-0.184-0.481,0-0.664s0.482-0.181,0.664,0.002l2.154,2.154C24.911,9.613,24.909,9.91,24.726,10.092z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Run();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Run = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Run.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Run\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M17.41,20.395l-0.778-2.723c0.228-0.2,0.442-0.414,0.644-0.643l2.721,0.778c0.287-0.418,0.534-0.862,0.755-1.323l-2.025-1.96c0.097-0.288,0.181-0.581,0.241-0.883l2.729-0.684c0.02-0.252,0.039-0.505,0.039-0.763s-0.02-0.51-0.039-0.762l-2.729-0.684c-0.061-0.302-0.145-0.595-0.241-0.883l2.026-1.96c-0.222-0.46-0.469-0.905-0.756-1.323l-2.721,0.777c-0.201-0.228-0.416-0.442-0.644-0.643l0.778-2.722c-0.418-0.286-0.863-0.534-1.324-0.755l-1.96,2.026c-0.287-0.097-0.581-0.18-0.883-0.241l-0.683-2.73c-0.253-0.019-0.505-0.039-0.763-0.039s-0.51,0.02-0.762,0.039l-0.684,2.73c-0.302,0.061-0.595,0.144-0.883,0.241l-1.96-2.026C7.048,3.463,6.604,3.71,6.186,3.997l0.778,2.722C6.736,6.919,6.521,7.134,6.321,7.361L3.599,6.583C3.312,7.001,3.065,7.446,2.844,7.907l2.026,1.96c-0.096,0.288-0.18,0.581-0.241,0.883l-2.73,0.684c-0.019,0.252-0.039,0.505-0.039,0.762s0.02,0.51,0.039,0.763l2.73,0.684c0.061,0.302,0.145,0.595,0.241,0.883l-2.026,1.96c0.221,0.46,0.468,0.905,0.755,1.323l2.722-0.778c0.2,0.229,0.415,0.442,0.643,0.643l-0.778,2.723c0.418,0.286,0.863,0.533,1.323,0.755l1.96-2.026c0.288,0.097,0.581,0.181,0.883,0.241l0.684,2.729c0.252,0.02,0.505,0.039,0.763,0.039s0.51-0.02,0.763-0.039l0.683-2.729c0.302-0.061,0.596-0.145,0.883-0.241l1.96,2.026C16.547,20.928,16.992,20.681,17.41,20.395zM11.798,15.594c-1.877,0-3.399-1.522-3.399-3.399s1.522-3.398,3.399-3.398s3.398,1.521,3.398,3.398S13.675,15.594,11.798,15.594zM27.29,22.699c0.019-0.547-0.06-1.104-0.23-1.654l1.244-1.773c-0.188-0.35-0.4-0.682-0.641-0.984l-2.122,0.445c-0.428-0.364-0.915-0.648-1.436-0.851l-0.611-2.079c-0.386-0.068-0.777-0.105-1.173-0.106l-0.974,1.936c-0.279,0.054-0.558,0.128-0.832,0.233c-0.257,0.098-0.497,0.22-0.727,0.353L17.782,17.4c-0.297,0.262-0.568,0.545-0.813,0.852l0.907,1.968c-0.259,0.495-0.437,1.028-0.519,1.585l-1.891,1.06c0.019,0.388,0.076,0.776,0.164,1.165l2.104,0.519c0.231,0.524,0.541,0.993,0.916,1.393l-0.352,2.138c0.32,0.23,0.66,0.428,1.013,0.6l1.715-1.32c0.536,0.141,1.097,0.195,1.662,0.15l1.452,1.607c0.2-0.057,0.399-0.118,0.596-0.193c0.175-0.066,0.34-0.144,0.505-0.223l0.037-2.165c0.455-0.339,0.843-0.747,1.152-1.206l2.161-0.134c0.152-0.359,0.279-0.732,0.368-1.115L27.29,22.699zM23.127,24.706c-1.201,0.458-2.545-0.144-3.004-1.345s0.143-2.546,1.344-3.005c1.201-0.458,2.547,0.144,3.006,1.345C24.931,22.902,24.328,24.247,23.127,24.706z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Rw();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Rw = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Rw.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Rw\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M5.5,15.499,15.8,21.447,15.8,15.846,25.5,21.447,25.5,9.552,15.8,15.152,15.8,9.552z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Safari();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Safari = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Safari.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Safari\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16.154,5.135c-0.504,0-1,0.031-1.488,0.089l-0.036-0.18c-0.021-0.104-0.06-0.198-0.112-0.283c0.381-0.308,0.625-0.778,0.625-1.306c0-0.927-0.751-1.678-1.678-1.678s-1.678,0.751-1.678,1.678c0,0.745,0.485,1.376,1.157,1.595c-0.021,0.105-0.021,0.216,0,0.328l0.033,0.167C7.645,6.95,3.712,11.804,3.712,17.578c0,6.871,5.571,12.441,12.442,12.441c6.871,0,12.441-5.57,12.441-12.441C28.596,10.706,23.025,5.135,16.154,5.135zM16.369,8.1c4.455,0,8.183,3.116,9.123,7.287l-0.576,0.234c-0.148-0.681-0.755-1.191-1.48-1.191c-0.837,0-1.516,0.679-1.516,1.516c0,0.075,0.008,0.148,0.018,0.221l-2.771-0.028c-0.054-0.115-0.114-0.226-0.182-0.333l3.399-5.11l0.055-0.083l-4.766,4.059c-0.352-0.157-0.74-0.248-1.148-0.256l0.086-0.018l-1.177-2.585c0.64-0.177,1.111-0.763,1.111-1.459c0-0.837-0.678-1.515-1.516-1.515c-0.075,0-0.147,0.007-0.219,0.018l0.058-0.634C15.357,8.141,15.858,8.1,16.369,8.1zM12.146,3.455c0-0.727,0.591-1.318,1.318-1.318c0.727,0,1.318,0.591,1.318,1.318c0,0.425-0.203,0.802-0.516,1.043c-0.183-0.123-0.413-0.176-0.647-0.13c-0.226,0.045-0.413,0.174-0.535,0.349C12.542,4.553,12.146,4.049,12.146,3.455zM7.017,17.452c0-4.443,3.098-8.163,7.252-9.116l0.297,0.573c-0.61,0.196-1.051,0.768-1.051,1.442c0,0.837,0.678,1.516,1.515,1.516c0.068,0,0.135-0.006,0.2-0.015l-0.058,2.845l0.052-0.011c-0.442,0.204-0.824,0.513-1.116,0.895l0.093-0.147l-1.574-0.603l1.172,1.239l0.026-0.042c-0.19,0.371-0.306,0.788-0.324,1.229l-0.003-0.016l-2.623,1.209c-0.199-0.604-0.767-1.041-1.438-1.041c-0.837,0-1.516,0.678-1.516,1.516c0,0.064,0.005,0.128,0.013,0.191l-0.783-0.076C7.063,18.524,7.017,17.994,7.017,17.452zM16.369,26.805c-4.429,0-8.138-3.078-9.106-7.211l0.691-0.353c0.146,0.686,0.753,1.2,1.482,1.2c0.837,0,1.515-0.679,1.515-1.516c0-0.105-0.011-0.207-0.031-0.307l2.858,0.03c0.045,0.095,0.096,0.187,0.15,0.276l-3.45,5.277l0.227-0.195l4.529-3.92c0.336,0.153,0.705,0.248,1.094,0.266l-0.019,0.004l1.226,2.627c-0.655,0.166-1.142,0.76-1.142,1.468c0,0.837,0.678,1.515,1.516,1.515c0.076,0,0.151-0.007,0.225-0.018l0.004,0.688C17.566,26.746,16.975,26.805,16.369,26.805zM18.662,26.521l-0.389-0.6c0.661-0.164,1.152-0.759,1.152-1.47c0-0.837-0.68-1.516-1.516-1.516c-0.066,0-0.13,0.005-0.193,0.014v-2.86l-0.025,0.004c0.409-0.185,0.77-0.459,1.055-0.798l1.516,0.659l-1.104-1.304c0.158-0.335,0.256-0.704,0.278-1.095l2.552-1.164c0.19,0.618,0.766,1.068,1.447,1.068c0.838,0,1.516-0.679,1.516-1.516c0-0.069-0.006-0.137-0.016-0.204l0.65,0.12c0.089,0.517,0.136,1.049,0.136,1.591C25.722,21.826,22.719,25.499,18.662,26.521z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ScrewDriver();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ScrewDriver = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ScrewDriver.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.ScrewDriver\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M19.387,14.373c2.119-2.619,5.322-6.77,5.149-7.75c-0.128-0.729-0.882-1.547-1.763-2.171c-0.883-0.625-1.916-1.044-2.645-0.915c-0.98,0.173-3.786,4.603-5.521,7.49c-0.208,0.344,0.328,1.177,0.156,1.468c-0.172,0.292-1.052,0.042-1.18,0.261c-0.263,0.451-0.417,0.722-0.417,0.722s-0.553,0.823,1.163,2.163l-5.233,7.473c-0.267,0.381-1.456,0.459-1.456,0.459l-1.184,3.312l0.859,0.602l2.708-2.246c0,0-0.334-1.143-0.068-1.523l5.242-7.489c1.719,1,2.377,0.336,2.377,0.336s0.201-0.238,0.536-0.639c0.161-0.194-0.374-0.936-0.159-1.197C18.169,14.467,19.133,14.685,19.387,14.373z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Search();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Search = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Search.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Search\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Sencha();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Sencha = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Sencha.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Sencha\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M18.265,22.734c1.365,0.662,2.309,2.062,2.309,3.682c0,1.566-0.881,2.928-2.176,3.615l1.922-0.98c3.16-1.58,5.332-4.846,5.332-8.617c0-3.719-2.109-6.945-5.195-8.547l-6.272-3.144c-1.366-0.662-2.308-2.062-2.308-3.682c0-1.567,0.881-2.928,2.175-3.614L12.13,2.428c-3.161,1.578-5.332,4.843-5.332,8.616c0,3.718,2.108,6.944,5.195,8.546L18.265,22.734z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Settings();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Settings = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Settings.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Settings\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16.015,12.03c-2.156,0-3.903,1.747-3.903,3.903c0,2.155,1.747,3.903,3.903,3.903c0.494,0,0.962-0.102,1.397-0.27l0.836,1.285l1.359-0.885l-0.831-1.276c0.705-0.706,1.142-1.681,1.142-2.757C19.918,13.777,18.171,12.03,16.015,12.03zM16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM26.174,20.809c-0.241,0.504-0.513,0.99-0.826,1.45L22.19,21.58c-0.481,0.526-1.029,0.994-1.634,1.385l0.119,3.202c-0.507,0.23-1.028,0.421-1.569,0.57l-1.955-2.514c-0.372,0.051-0.75,0.086-1.136,0.086c-0.356,0-0.706-0.029-1.051-0.074l-1.945,2.5c-0.541-0.151-1.065-0.342-1.57-0.569l0.117-3.146c-0.634-0.398-1.208-0.88-1.712-1.427L6.78,22.251c-0.313-0.456-0.583-0.944-0.826-1.448l2.088-2.309c-0.226-0.703-0.354-1.451-0.385-2.223l-2.768-1.464c0.055-0.563,0.165-1.107,0.301-1.643l3.084-0.427c0.29-0.702,0.675-1.352,1.135-1.942L8.227,7.894c0.399-0.389,0.83-0.744,1.283-1.07l2.663,1.672c0.65-0.337,1.349-0.593,2.085-0.75l0.968-3.001c0.278-0.021,0.555-0.042,0.837-0.042c0.282,0,0.56,0.022,0.837,0.042l0.976,3.028c0.72,0.163,1.401,0.416,2.036,0.75l2.704-1.697c0.455,0.326,0.887,0.681,1.285,1.07l-1.216,2.986c0.428,0.564,0.793,1.181,1.068,1.845l3.185,0.441c0.135,0.535,0.247,1.081,0.302,1.643l-2.867,1.516c-0.034,0.726-0.15,1.43-0.355,2.1L26.174,20.809z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.SettingsAlt();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.SettingsAlt = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.SettingsAlt.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.SettingsAlt\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM24.386,14.968c-1.451,1.669-3.706,2.221-5.685,1.586l-7.188,8.266c-0.766,0.88-2.099,0.97-2.979,0.205s-0.973-2.099-0.208-2.979l7.198-8.275c-0.893-1.865-0.657-4.164,0.787-5.824c1.367-1.575,3.453-2.151,5.348-1.674l-2.754,3.212l0.901,2.621l2.722,0.529l2.761-3.22C26.037,11.229,25.762,13.387,24.386,14.968z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Shuffle();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Shuffle = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Shuffle.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Shuffle\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.786,20.654c-0.618-0.195-1.407-0.703-2.291-1.587c-0.757-0.742-1.539-1.698-2.34-2.741c-0.191,0.256-0.382,0.51-0.574,0.77c-0.524,0.709-1.059,1.424-1.604,2.127c1.904,2.31,3.88,4.578,6.809,4.952v2.701l7.556-4.362l-7.556-4.362V20.654zM9.192,11.933c0.756,0.741,1.538,1.697,2.339,2.739c0.195-0.262,0.39-0.521,0.587-0.788c0.52-0.703,1.051-1.412,1.592-2.11c-2.032-2.463-4.133-4.907-7.396-5.025h-3.5v3.5h3.5C6.969,10.223,7.996,10.735,9.192,11.933zM21.786,10.341v2.535l7.556-4.363l-7.556-4.363v2.647c-1.904,0.219-3.425,1.348-4.751,2.644c-2.196,2.183-4.116,5.167-6.011,7.538c-1.867,2.438-3.741,3.888-4.712,3.771h-3.5v3.5h3.5c2.185-0.029,3.879-1.266,5.34-2.693c2.194-2.184,4.116-5.167,6.009-7.538C19.205,12.003,20.746,10.679,21.786,10.341z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Skull();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Skull = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Skull.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Skull\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.947,11.14c0-5.174-3.979-9.406-10.613-9.406c-6.633,0-10.282,4.232-10.282,9.406c0,5.174,1.459,4.511,1.459,7.43c0,1.095-1.061,0.564-1.061,2.919c0,2.587,3.615,2.223,4.677,3.283c1.061,1.062,0.961,3.019,0.961,3.019s0.199,0.796,0.564,0.563c0,0,0.232,0.564,0.498,0.232c0,0,0.265,0.563,0.531,0.1c0,0,0.265,0.631,0.696,0.166c0,0,0.431,0.63,0.929,0.133c0,0,0.564,0.53,1.194,0.133c0.63,0.397,1.194-0.133,1.194-0.133c0.497,0.497,0.929-0.133,0.929-0.133c0.432,0.465,0.695-0.166,0.695-0.166c0.268,0.464,0.531-0.1,0.531-0.1c0.266,0.332,0.498-0.232,0.498-0.232c0.365,0.232,0.564-0.563,0.564-0.563s-0.1-1.957,0.961-3.019c1.062-1.061,4.676-0.696,4.676-3.283c0-2.354-1.061-1.824-1.061-2.919C24.488,15.651,25.947,16.314,25.947,11.14zM10.333,20.992c-1.783,0.285-2.59-0.215-2.785-1.492c-0.508-3.328,2.555-3.866,4.079-3.683c0.731,0.088,1.99,0.862,1.99,1.825C13.617,20.229,11.992,20.727,10.333,20.992zM16.461,25.303c-0.331,0-0.862-0.431-0.895-1.227c-0.033,0.796-0.63,1.227-0.961,1.227c-0.332,0-0.83-0.331-0.863-1.127c-0.033-0.796,1.028-4.013,1.792-4.013c0.762,0,1.824,3.217,1.791,4.013S16.794,25.303,16.461,25.303zM23.361,19.5c-0.195,1.277-1.004,1.777-2.787,1.492c-1.658-0.266-3.283-0.763-3.283-3.35c0-0.963,1.258-1.737,1.99-1.825C20.805,15.634,23.869,16.172,23.361,19.5z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Skype();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Skype = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Skype.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Skype\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.777,18.438c0.209-0.948,0.318-1.934,0.318-2.944c0-7.578-6.144-13.722-13.724-13.722c-0.799,0-1.584,0.069-2.346,0.2C11.801,1.199,10.35,0.75,8.793,0.75c-4.395,0-7.958,3.562-7.958,7.958c0,1.47,0.399,2.845,1.094,4.024c-0.183,0.893-0.277,1.814-0.277,2.76c0,7.58,6.144,13.723,13.722,13.723c0.859,0,1.699-0.078,2.515-0.23c1.119,0.604,2.399,0.945,3.762,0.945c4.395,0,7.957-3.562,7.957-7.959C29.605,20.701,29.309,19.502,28.777,18.438zM22.412,22.051c-0.635,0.898-1.573,1.609-2.789,2.115c-1.203,0.5-2.646,0.754-4.287,0.754c-1.971,0-3.624-0.346-4.914-1.031C9.5,23.391,8.74,22.717,8.163,21.885c-0.583-0.842-0.879-1.676-0.879-2.479c0-0.503,0.192-0.939,0.573-1.296c0.375-0.354,0.857-0.532,1.432-0.532c0.471,0,0.878,0.141,1.209,0.422c0.315,0.269,0.586,0.662,0.805,1.174c0.242,0.558,0.508,1.027,0.788,1.397c0.269,0.355,0.656,0.656,1.151,0.89c0.497,0.235,1.168,0.354,1.992,0.354c1.135,0,2.064-0.241,2.764-0.721c0.684-0.465,1.016-1.025,1.016-1.711c0-0.543-0.173-0.969-0.529-1.303c-0.373-0.348-0.865-0.621-1.465-0.807c-0.623-0.195-1.47-0.404-2.518-0.623c-1.424-0.306-2.634-0.668-3.596-1.076c-0.984-0.419-1.777-1-2.357-1.727c-0.59-0.736-0.889-1.662-0.889-2.75c0-1.036,0.314-1.971,0.933-2.776c0.613-0.8,1.51-1.423,2.663-1.849c1.139-0.422,2.494-0.635,4.027-0.635c1.225,0,2.303,0.141,3.201,0.421c0.904,0.282,1.668,0.662,2.267,1.13c0.604,0.472,1.054,0.977,1.335,1.5c0.284,0.529,0.43,1.057,0.43,1.565c0,0.49-0.189,0.937-0.563,1.324c-0.375,0.391-0.851,0.589-1.408,0.589c-0.509,0-0.905-0.124-1.183-0.369c-0.258-0.227-0.523-0.58-0.819-1.09c-0.342-0.65-0.756-1.162-1.229-1.523c-0.463-0.351-1.232-0.529-2.292-0.529c-0.984,0-1.784,0.197-2.379,0.588c-0.572,0.375-0.85,0.805-0.85,1.314c0,0.312,0.09,0.574,0.273,0.799c0.195,0.238,0.471,0.447,0.818,0.621c0.36,0.182,0.732,0.326,1.104,0.429c0.382,0.106,1.021,0.263,1.899,0.466c1.11,0.238,2.131,0.506,3.034,0.793c0.913,0.293,1.703,0.654,2.348,1.072c0.656,0.429,1.178,0.979,1.547,1.635c0.369,0.658,0.558,1.471,0.558,2.416C23.371,20.119,23.049,21.148,22.412,22.051z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.SlideShare();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.SlideShare = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.SlideShare.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.SlideShare\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.952,12.795c-0.956,1.062-5.073,2.409-5.604,2.409h-4.513c-0.749,0-1.877,0.147-2.408,0.484c0.061,0.054,0.122,0.108,0.181,0.163c0.408,0.379,1.362,0.913,2.206,0.913c0.397,0,0.723-0.115,1-0.354c1.178-1.007,1.79-1.125,2.145-1.125c0.421,0,0.783,0.193,0.996,0.531c0.4,0.626,0.106,1.445-0.194,2.087c-0.718,1.524-3.058,3.171-5.595,3.171c-0.002,0-0.002,0-0.004,0c-0.354,0-0.701-0.033-1.033-0.099v3.251c0,0.742,1.033,2.533,4.167,2.533s3.955-3.701,3.955-4.338v-4.512c2.23-1.169,4.512-1.805,5.604-3.895C30.882,12.05,29.907,11.733,28.952,12.795zM21.942,17.521c0.796-1.699-0.053-1.699-1.54-0.425s-3.665,0.105-4.408-0.585c-0.743-0.689-1.486-1.22-2.814-1.167c-1.328,0.053-4.46-0.161-6.267-0.585c-1.805-0.425-4.895-3-5.15-2.335c-0.266,0.69,0.211,1.168,1.168,2.335c0.955,1.169,5.075,2.778,5.075,2.778s0,3.453,0,4.886c0,1.435,2.973,3.61,4.512,3.61s2.708-1.062,2.708-1.806v-4.512C17.775,21.045,21.146,19.221,21.942,17.521zM20.342,13.73c1.744,0,3.159-1.414,3.159-3.158c0-1.745-1.415-3.159-3.159-3.159s-3.158,1.414-3.158,3.159C17.184,12.316,18.598,13.73,20.342,13.73zM12.019,13.73c1.744,0,3.158-1.414,3.158-3.158c0-1.745-1.414-3.159-3.158-3.159c-1.745,0-3.159,1.414-3.159,3.159C8.86,12.316,10.273,13.73,12.019,13.73z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Smile();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Smile = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Smile.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Smile\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM20.729,7.375c0.934,0,1.688,1.483,1.688,3.312S21.661,14,20.729,14c-0.932,0-1.688-1.483-1.688-3.312S19.798,7.375,20.729,7.375zM11.104,7.375c0.932,0,1.688,1.483,1.688,3.312S12.037,14,11.104,14s-1.688-1.483-1.688-3.312S10.172,7.375,11.104,7.375zM16.021,26c-2.873,0-5.563-1.757-7.879-4.811c2.397,1.564,5.021,2.436,7.774,2.436c2.923,0,5.701-0.98,8.215-2.734C21.766,24.132,18.99,26,16.021,26z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Smile2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Smile2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Smile2.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Smile2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,29.534C8.539,29.534,2.466,23.462,2.466,16C2.466,8.539,8.539,2.466,16,2.466c7.462,0,13.535,6.072,13.535,13.533C29.534,23.462,23.462,29.534,16,29.534zM11.104,14c0.932,0,1.688-1.483,1.688-3.312s-0.755-3.312-1.688-3.312s-1.688,1.483-1.688,3.312S10.172,14,11.104,14zM20.729,14c0.934,0,1.688-1.483,1.688-3.312s-0.756-3.312-1.688-3.312c-0.932,0-1.688,1.483-1.688,3.312S19.798,14,20.729,14zM8.143,21.189C10.458,24.243,13.148,26,16.021,26c2.969,0,5.745-1.868,8.11-5.109c-2.515,1.754-5.292,2.734-8.215,2.734C13.164,23.625,10.54,22.756,8.143,21.189z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Snow();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Snow = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Snow.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Snow\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.372,6.912c-0.093-3.925-3.302-7.078-7.248-7.08c-2.638,0.002-4.942,1.412-6.208,3.518c-0.595-0.327-1.28-0.518-2.01-0.518C7.627,2.834,5.773,4.639,5.69,6.898c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.875c3.312,0,6-2.688,6-6C29.434,9.944,27.732,7.715,25.372,6.912zM23.436,16.584H7.562c-2.209-0.006-3.997-1.793-4.001-4c-0.002-1.983,1.45-3.619,3.35-3.933c0.265-0.043,0.502-0.19,0.657-0.414C7.723,8.015,7.78,7.74,7.731,7.475C7.703,7.326,7.686,7.187,7.686,7.051c0.004-1.225,0.995-2.217,2.22-2.219c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.31c0.342-0.066,0.626-0.308,0.748-0.631c0.749-1.992,2.662-3.412,4.911-3.41c2.898,0.004,5.244,2.351,5.251,5.25c0,0.16-0.009,0.325-0.026,0.496c-0.05,0.518,0.305,0.984,0.814,1.079c1.859,0.345,3.273,1.966,3.271,3.923C27.43,14.791,25.645,16.578,23.436,16.584zM16.667,24.09l1.119-1.119c0.389-0.391,0.389-1.025,0-1.416c-0.392-0.391-1.025-0.391-1.415,0l-1.119,1.119l-1.119-1.119c-0.391-0.391-1.025-0.391-1.415,0c-0.391,0.391-0.391,1.025,0,1.416l1.118,1.117l-1.12,1.121c-0.389,0.393-0.389,1.021,0,1.414c0.195,0.188,0.451,0.293,0.707,0.293c0.256,0,0.512-0.104,0.708-0.293l1.12-1.119l1.12,1.119c0.195,0.188,0.451,0.293,0.708,0.293c0.256,0,0.512-0.104,0.707-0.293c0.391-0.396,0.391-1.021,0-1.414L16.667,24.09zM25.119,21.817c-0.393-0.392-1.025-0.392-1.415,0l-1.12,1.121l-1.12-1.121c-0.391-0.392-1.022-0.392-1.414,0c-0.39,0.392-0.39,1.022,0,1.416l1.119,1.119l-1.119,1.119c-0.39,0.391-0.39,1.022,0,1.413c0.195,0.195,0.451,0.294,0.707,0.294c0.257,0,0.513-0.099,0.707-0.294l1.12-1.118l1.12,1.118c0.194,0.195,0.45,0.294,0.707,0.294c0.256,0,0.513-0.099,0.708-0.294c0.389-0.391,0.389-1.022,0-1.413l-1.12-1.119l1.12-1.119C25.507,22.842,25.507,22.209,25.119,21.817zM9.334,23.953l1.119-1.119c0.389-0.394,0.389-1.021,0-1.414c-0.391-0.394-1.025-0.394-1.415,0l-1.119,1.119l-1.12-1.121c-0.391-0.39-1.023-0.39-1.415,0c-0.391,0.396-0.391,1.024,0,1.418l1.119,1.117l-1.12,1.118c-0.391,0.394-0.391,1.025,0,1.414c0.196,0.195,0.452,0.293,0.708,0.293c0.256,0,0.511-0.098,0.707-0.293l1.12-1.119l1.121,1.121c0.195,0.195,0.451,0.293,0.707,0.293s0.513-0.098,0.708-0.293c0.389-0.391,0.389-1.022,0-1.416L9.334,23.953z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Split();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Split = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Split.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Split\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.786,20.698c-1.792-0.237-2.912-1.331-4.358-2.886c-0.697-0.751-1.428-1.577-2.324-2.319c1.396-1.165,2.411-2.519,3.483-3.503c1.01-0.92,1.901-1.519,3.199-1.688v2.574l7.556-4.363L21.786,4.15v2.652c-3.34,0.266-5.45,2.378-6.934,4.013c-0.819,0.896-1.537,1.692-2.212,2.192c-0.685,0.501-1.227,0.731-2.013,0.742c-0.001,0-0.002,0-0.003,0H2.812v3.5h0.001v0.001c0,0,0.046-0.001,0.136-0.001h7.677c0.786,0.011,1.33,0.241,2.017,0.743c1.021,0.743,2.095,2.181,3.552,3.568c1.312,1.258,3.162,2.46,5.592,2.649v2.664l7.556-4.36l-7.556-4.361V20.698z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Star();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Star = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Star.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Star\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,22.375L7.116,28.83l3.396-10.438l-8.883-6.458l10.979,0.002L16.002,1.5l3.391,10.434h10.981l-8.886,6.457l3.396,10.439L16,22.375L16,22.375z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Star2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Star2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Star2.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Star2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.615,4.928c0.487-0.986,1.284-0.986,1.771,0l2.249,4.554c0.486,0.986,1.775,1.923,2.864,2.081l5.024,0.73c1.089,0.158,1.335,0.916,0.547,1.684l-3.636,3.544c-0.788,0.769-1.28,2.283-1.095,3.368l0.859,5.004c0.186,1.085-0.459,1.553-1.433,1.041l-4.495-2.363c-0.974-0.512-2.567-0.512-3.541,0l-4.495,2.363c-0.974,0.512-1.618,0.044-1.432-1.041l0.858-5.004c0.186-1.085-0.307-2.6-1.094-3.368L3.93,13.977c-0.788-0.768-0.542-1.525,0.547-1.684l5.026-0.73c1.088-0.158,2.377-1.095,2.864-2.081L14.615,4.928z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Star2Off();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Star2Off = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Star2Off.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Star2Off\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M26.522,12.293l-5.024-0.73c-1.089-0.158-2.378-1.095-2.864-2.081l-2.249-4.554c-0.487-0.986-1.284-0.986-1.771,0l-2.247,4.554c-0.487,0.986-1.776,1.923-2.864,2.081l-5.026,0.73c-1.088,0.158-1.334,0.916-0.547,1.684l3.637,3.544c0.788,0.769,1.28,2.283,1.094,3.368l-0.858,5.004c-0.186,1.085,0.458,1.553,1.432,1.041l4.495-2.363c0.974-0.512,2.566-0.512,3.541,0l4.495,2.363c0.974,0.512,1.618,0.044,1.433-1.041l-0.859-5.004c-0.186-1.085,0.307-2.6,1.095-3.368l3.636-3.544C27.857,13.209,27.611,12.452,26.522,12.293zM22.037,16.089c-1.266,1.232-1.966,3.394-1.67,5.137l0.514,2.984l-2.679-1.409c-0.757-0.396-1.715-0.612-2.702-0.612s-1.945,0.216-2.7,0.61l-2.679,1.409l0.511-2.982c0.297-1.743-0.404-3.905-1.671-5.137l-2.166-2.112l2.995-0.435c1.754-0.255,3.592-1.591,4.373-3.175L15.5,7.652l1.342,2.716c0.781,1.583,2.617,2.92,4.369,3.173l2.992,0.435L22.037,16.089z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Star3();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Star3 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Star3.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Star3\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.441,28.181c-0.419,0-0.835-0.132-1.189-0.392l-5.751-4.247L9.75,27.789c-0.354,0.26-0.771,0.392-1.189,0.392c-0.412,0-0.824-0.128-1.175-0.384c-0.707-0.511-1-1.422-0.723-2.25l2.26-6.783l-5.815-4.158c-0.71-0.509-1.009-1.416-0.74-2.246c0.268-0.826,1.037-1.382,1.904-1.382c0.004,0,0.01,0,0.014,0l7.15,0.056l2.157-6.816c0.262-0.831,1.035-1.397,1.906-1.397s1.645,0.566,1.906,1.397l2.155,6.816l7.15-0.056c0.004,0,0.01,0,0.015,0c0.867,0,1.636,0.556,1.903,1.382c0.271,0.831-0.028,1.737-0.739,2.246l-5.815,4.158l2.263,6.783c0.276,0.826-0.017,1.737-0.721,2.25C23.268,28.053,22.854,28.181,22.441,28.181L22.441,28.181z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Star3Off();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Star3Off = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Star3Off.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Star3Off\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M28.631,12.359c-0.268-0.826-1.036-1.382-1.903-1.382h-0.015l-7.15,0.056l-2.155-6.816c-0.262-0.831-1.035-1.397-1.906-1.397s-1.645,0.566-1.906,1.397l-2.157,6.816l-7.15-0.056H4.273c-0.868,0-1.636,0.556-1.904,1.382c-0.27,0.831,0.029,1.737,0.74,2.246l5.815,4.158l-2.26,6.783c-0.276,0.828,0.017,1.739,0.723,2.25c0.351,0.256,0.763,0.384,1.175,0.384c0.418,0,0.834-0.132,1.189-0.392l5.751-4.247l5.751,4.247c0.354,0.26,0.771,0.392,1.189,0.392c0.412,0,0.826-0.128,1.177-0.384c0.704-0.513,0.997-1.424,0.721-2.25l-2.263-6.783l5.815-4.158C28.603,14.097,28.901,13.19,28.631,12.359zM19.712,17.996l2.729,8.184l-6.94-5.125L8.56,26.18l2.729-8.184l-7.019-5.018l8.627,0.066L15.5,4.82l2.603,8.225l8.627-0.066L19.712,17.996z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.StarOff();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.StarOff = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.StarOff.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.StarOff\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,22.375L7.116,28.83l3.396-10.438l-8.883-6.458l10.979,0.002L16.002,1.5l3.391,10.434h10.981l-8.886,6.457l3.396,10.439L16,22.375L16,22.375zM22.979,26.209l-2.664-8.205l6.979-5.062h-8.627L16,4.729l-2.666,8.206H4.708l6.979,5.07l-2.666,8.203L16,21.146L22.979,26.209L22.979,26.209z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Start();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Start = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Start.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Start\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Sticker();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Sticker = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Sticker.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Sticker\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.5,1.999c-1.042,0-1.916,0.377-2.57,1.088L2.895,13.138C2.302,13.784,1.999,14.58,1.999,15.5C1.999,22.943,8.057,29,15.5,29S29,22.943,29,15.5S22.943,1.999,15.5,1.999zM15.5,28C8.596,28,3,22.404,3,15.5c0-3.452,5.239-2.737,7.501-4.999C12.762,8.239,12.048,3,15.5,3C22.404,3,28,8.597,28,15.5S22.404,28,15.5,28z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Stop();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Stop = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Stop.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Stop\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M5.5,5.5h20v20h-20z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.StopWatch();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.StopWatch = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.StopWatch.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.StopWatch\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.216,18.533c0-3.636-1.655-6.883-4.253-9.032l0.733-0.998l0.482,0.354c0.198,0.146,0.481,0.104,0.628-0.097l0.442-0.604c0.146-0.198,0.103-0.482-0.097-0.628l-2.052-1.506c-0.199-0.146-0.481-0.103-0.628,0.097L22.03,6.724c-0.146,0.199-0.104,0.482,0.096,0.628l0.483,0.354l-0.736,1.003c-1.28-0.834-2.734-1.419-4.296-1.699c0.847-0.635,1.402-1.638,1.403-2.778h-0.002c0-1.922-1.557-3.48-3.479-3.48c-1.925,0-3.48,1.559-3.48,3.48c0,1.141,0.556,2.144,1.401,2.778c-1.549,0.277-2.99,0.857-4.265,1.68L8.424,7.684l0.484-0.353c0.198-0.145,0.245-0.428,0.098-0.628l-0.44-0.604C8.42,5.899,8.136,5.855,7.937,6.001L5.881,7.5c-0.2,0.146-0.243,0.428-0.099,0.628l0.442,0.604c0.145,0.2,0.428,0.244,0.627,0.099l0.483-0.354l0.729,0.999c-2.615,2.149-4.282,5.407-4.282,9.057c0,6.471,5.245,11.716,11.718,11.716c6.47,0,11.716-5.243,11.718-11.716H27.216zM12.918,4.231c0.002-1.425,1.155-2.58,2.582-2.582c1.426,0.002,2.579,1.157,2.581,2.582c-0.002,1.192-0.812,2.184-1.908,2.482v-1.77h0.6c0.246,0,0.449-0.203,0.449-0.449V3.746c0-0.247-0.203-0.449-0.449-0.449h-2.545c-0.247,0-0.449,0.202-0.449,0.449v0.749c0,0.246,0.202,0.449,0.449,0.449h0.599v1.77C13.729,6.415,12.919,5.424,12.918,4.231zM15.5,27.554c-4.983-0.008-9.015-4.038-9.022-9.021c0.008-4.982,4.039-9.013,9.022-9.022c4.981,0.01,9.013,4.04,9.021,9.022C24.513,23.514,20.481,27.546,15.5,27.554zM15.5,12.138c0.476,0,0.861-0.385,0.861-0.86s-0.386-0.861-0.861-0.861s-0.861,0.386-0.861,0.861S15.024,12.138,15.5,12.138zM15.5,24.927c-0.476,0-0.861,0.386-0.861,0.861s0.386,0.861,0.861,0.861s0.861-0.386,0.861-0.861S15.976,24.927,15.5,24.927zM12.618,11.818c-0.237-0.412-0.764-0.553-1.176-0.315c-0.412,0.238-0.554,0.765-0.315,1.177l2.867,6.722c0.481,0.831,1.543,1.116,2.375,0.637c0.829-0.479,1.114-1.543,0.635-2.374L12.618,11.818zM18.698,24.07c-0.412,0.237-0.555,0.765-0.316,1.176c0.237,0.412,0.764,0.554,1.176,0.315c0.413-0.238,0.553-0.765,0.316-1.176C19.635,23.974,19.108,23.832,18.698,24.07zM8.787,15.65c0.412,0.238,0.938,0.097,1.176-0.315c0.237-0.413,0.097-0.938-0.314-1.176c-0.412-0.239-0.938-0.098-1.177,0.313C8.234,14.886,8.375,15.412,8.787,15.65zM22.215,21.413c-0.412-0.236-0.938-0.096-1.176,0.316c-0.238,0.412-0.099,0.938,0.314,1.176c0.41,0.238,0.937,0.098,1.176-0.314C22.768,22.178,22.625,21.652,22.215,21.413zM9.107,18.531c-0.002-0.476-0.387-0.86-0.861-0.86c-0.477,0-0.862,0.385-0.862,0.86c0.001,0.476,0.386,0.86,0.861,0.861C8.722,19.393,9.106,19.008,9.107,18.531zM21.896,18.531c0,0.477,0.384,0.862,0.859,0.86c0.476,0.002,0.862-0.382,0.862-0.859s-0.387-0.86-0.862-0.862C22.279,17.671,21.896,18.056,21.896,18.531zM8.787,21.413c-0.412,0.238-0.554,0.765-0.316,1.176c0.239,0.412,0.765,0.553,1.177,0.316c0.413-0.239,0.553-0.765,0.315-1.178C9.725,21.317,9.198,21.176,8.787,21.413zM21.352,14.157c-0.411,0.238-0.551,0.764-0.312,1.176c0.237,0.413,0.764,0.555,1.174,0.315c0.412-0.236,0.555-0.762,0.316-1.176C22.29,14.06,21.766,13.921,21.352,14.157zM12.304,24.067c-0.413-0.235-0.939-0.096-1.176,0.315c-0.238,0.413-0.098,0.939,0.312,1.178c0.413,0.236,0.939,0.096,1.178-0.315C12.857,24.832,12.715,24.308,12.304,24.067zM18.698,12.992c0.41,0.238,0.938,0.099,1.174-0.313c0.238-0.411,0.1-0.938-0.314-1.177c-0.414-0.238-0.937-0.097-1.177,0.315C18.144,12.229,18.286,12.755,18.698,12.992z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Sun();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Sun = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Sun.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Sun\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.502,7.504c-4.35,0-7.873,3.523-7.873,7.873c0,4.347,3.523,7.872,7.873,7.872c4.346,0,7.871-3.525,7.871-7.872C23.374,11.027,19.85,7.504,15.502,7.504zM15.502,21.25c-3.244-0.008-5.866-2.63-5.874-5.872c0.007-3.243,2.63-5.866,5.874-5.874c3.242,0.008,5.864,2.631,5.871,5.874C21.366,18.62,18.744,21.242,15.502,21.25zM15.502,6.977c0.553,0,1-0.448,1-1.001V1.125c-0.002-0.553-0.448-1-1-1c-0.553,0-1.001,0.449-1,1.002v4.85C14.502,6.528,14.949,6.977,15.502,6.977zM18.715,7.615c0.125,0.053,0.255,0.076,0.382,0.077c0.394,0,0.765-0.233,0.925-0.618l1.856-4.483c0.21-0.511-0.031-1.095-0.541-1.306c-0.511-0.211-1.096,0.031-1.308,0.541L18.174,6.31C17.963,6.82,18.205,7.405,18.715,7.615zM21.44,9.436c0.195,0.194,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293l3.43-3.433c0.391-0.39,0.39-1.023,0-1.415c-0.392-0.39-1.025-0.39-1.415,0.002L21.44,8.021C21.049,8.412,21.049,9.045,21.44,9.436zM23.263,12.16c0.158,0.385,0.531,0.617,0.923,0.617c0.127,0,0.257-0.025,0.383-0.078l4.48-1.857c0.511-0.211,0.753-0.797,0.541-1.307s-0.796-0.752-1.307-0.54l-4.481,1.857C23.292,11.064,23.051,11.65,23.263,12.16zM29.752,14.371l-4.851,0.001c-0.552,0-1,0.448-0.998,1.001c0,0.553,0.447,0.999,0.998,0.999l4.852-0.002c0.553,0,0.999-0.449,0.999-1C30.752,14.817,30.304,14.369,29.752,14.371zM29.054,19.899l-4.482-1.854c-0.512-0.212-1.097,0.03-1.307,0.541c-0.211,0.511,0.031,1.096,0.541,1.308l4.482,1.854c0.126,0.051,0.256,0.075,0.383,0.075c0.393,0,0.765-0.232,0.925-0.617C29.806,20.695,29.563,20.109,29.054,19.899zM22.86,21.312c-0.391-0.391-1.023-0.391-1.414,0.001c-0.391,0.39-0.39,1.022,0,1.413l3.434,3.429c0.195,0.195,0.45,0.293,0.706,0.293s0.513-0.098,0.708-0.293c0.391-0.392,0.389-1.025,0-1.415L22.86,21.312zM20.029,23.675c-0.211-0.511-0.796-0.752-1.307-0.541c-0.51,0.212-0.752,0.797-0.54,1.308l1.86,4.48c0.159,0.385,0.531,0.617,0.925,0.617c0.128,0,0.258-0.024,0.383-0.076c0.511-0.211,0.752-0.797,0.54-1.309L20.029,23.675zM15.512,23.778c-0.553,0-1,0.448-1,1l0.004,4.851c0,0.553,0.449,0.999,1,0.999c0.553,0,1-0.448,0.998-1l-0.003-4.852C16.511,24.226,16.062,23.777,15.512,23.778zM12.296,23.142c-0.51-0.21-1.094,0.031-1.306,0.543l-1.852,4.483c-0.21,0.511,0.033,1.096,0.543,1.307c0.125,0.052,0.254,0.076,0.382,0.076c0.392,0,0.765-0.234,0.924-0.619l1.853-4.485C13.051,23.937,12.807,23.353,12.296,23.142zM9.57,21.325c-0.392-0.391-1.025-0.389-1.415,0.002L4.729,24.76c-0.391,0.392-0.389,1.023,0.002,1.415c0.195,0.194,0.45,0.292,0.706,0.292c0.257,0,0.513-0.098,0.708-0.293l3.427-3.434C9.961,22.349,9.961,21.716,9.57,21.325zM7.746,18.604c-0.213-0.509-0.797-0.751-1.307-0.54L1.96,19.925c-0.511,0.212-0.752,0.798-0.54,1.308c0.16,0.385,0.531,0.616,0.924,0.616c0.127,0,0.258-0.024,0.383-0.076l4.479-1.861C7.715,19.698,7.957,19.113,7.746,18.604zM7.1,15.392c0-0.553-0.447-0.999-1-0.999l-4.851,0.006c-0.553,0-1.001,0.448-0.999,1.001c0.001,0.551,0.449,1,1,0.998l4.852-0.006C6.654,16.392,7.102,15.942,7.1,15.392zM1.944,10.869l4.485,1.85c0.125,0.053,0.254,0.076,0.381,0.076c0.393,0,0.766-0.232,0.925-0.618c0.212-0.511-0.032-1.097-0.544-1.306L2.708,9.021c-0.511-0.21-1.095,0.032-1.306,0.542C1.19,10.074,1.435,10.657,1.944,10.869zM8.137,9.451c0.195,0.193,0.449,0.291,0.705,0.291s0.513-0.098,0.709-0.295c0.391-0.389,0.389-1.023-0.004-1.414L6.113,4.609C5.723,4.219,5.088,4.221,4.699,4.612c-0.391,0.39-0.389,1.024,0.002,1.414L8.137,9.451zM10.964,7.084c0.16,0.384,0.532,0.615,0.923,0.615c0.128,0,0.258-0.025,0.384-0.077c0.51-0.212,0.753-0.798,0.54-1.307l-1.864-4.479c-0.212-0.51-0.798-0.751-1.308-0.539C9.129,1.51,8.888,2.096,9.1,2.605L10.964,7.084z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Svg();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Svg = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Svg.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Svg\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M31.274,15.989c0-2.473-2.005-4.478-4.478-4.478l0,0c0.81-0.811,1.312-1.93,1.312-3.167c0-2.474-2.005-4.479-4.479-4.479c-1.236,0-2.356,0.501-3.167,1.312c0-2.473-2.005-4.478-4.478-4.478c-2.474,0-4.479,2.005-4.479,4.478c-0.811-0.81-1.93-1.312-3.167-1.312c-2.474,0-4.479,2.005-4.479,4.479c0,1.236,0.501,2.356,1.312,3.166c-2.474,0-4.479,2.005-4.479,4.479c0,2.474,2.005,4.479,4.479,4.479c-0.811,0.81-1.312,1.93-1.312,3.167c0,2.473,2.005,4.478,4.479,4.478c1.236,0,2.356-0.501,3.167-1.312c0,2.473,2.005,4.479,4.479,4.479c2.473,0,4.478-2.006,4.478-4.479l0,0c0.811,0.811,1.931,1.312,3.167,1.312c2.474,0,4.478-2.005,4.478-4.478c0-1.237-0.501-2.357-1.312-3.168c0.001,0,0.001,0,0.001,0C29.27,20.467,31.274,18.463,31.274,15.989zM23.583,21.211c0.016,0,0.031-0.001,0.047-0.001c1.339,0,2.424,1.085,2.424,2.425c0,1.338-1.085,2.424-2.424,2.424s-2.424-1.086-2.424-2.424c0-0.017,0.001-0.031,0.001-0.047l-3.541-3.542v5.009c0.457,0.44,0.743,1.06,0.743,1.746c0,1.339-1.086,2.424-2.424,2.424c-1.339,0-2.425-1.085-2.425-2.424c0-0.687,0.286-1.306,0.743-1.746v-5.009l-3.541,3.542c0,0.016,0.001,0.031,0.001,0.047c0,1.338-1.085,2.424-2.424,2.424s-2.424-1.086-2.424-2.424c0-1.34,1.085-2.425,2.424-2.425c0.015,0,0.031,0.001,0.046,0.001l3.542-3.541H6.919c-0.44,0.458-1.06,0.743-1.746,0.743c-1.339,0-2.424-1.085-2.424-2.424s1.085-2.424,2.424-2.424c0.686,0,1.305,0.285,1.746,0.744h5.008l-3.542-3.542c-0.015,0-0.031,0.001-0.046,0.001c-1.339,0-2.424-1.085-2.424-2.424S7.001,5.92,8.34,5.92s2.424,1.085,2.424,2.424c0,0.015-0.001,0.031-0.001,0.046l3.541,3.542V6.924c-0.457-0.441-0.743-1.06-0.743-1.746c0-1.339,1.086-2.425,2.425-2.425c1.338,0,2.424,1.085,2.424,2.425c0,0.686-0.286,1.305-0.743,1.746v5.008l3.541-3.542c0-0.015-0.001-0.031-0.001-0.046c0-1.339,1.085-2.424,2.424-2.424s2.424,1.085,2.424,2.424c0,1.339-1.085,2.424-2.424,2.424c-0.016,0-0.031-0.001-0.047-0.001l-3.541,3.542h5.008c0.441-0.458,1.061-0.744,1.747-0.744c1.338,0,2.423,1.085,2.423,2.424s-1.085,2.424-2.423,2.424c-0.687,0-1.306-0.285-1.747-0.743h-5.008L23.583,21.211z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.TShirt();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.TShirt = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.TShirt.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.TShirt\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.1,4.039c-0.681,1.677-2.32,2.862-4.24,2.862c-1.921,0-3.56-1.185-4.24-2.862L1.238,8.442l2.921,6.884l3.208-1.361V28h17.099V14.015l3.093,1.312l2.922-6.884L20.1,4.039z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Tag();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Tag = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Tag.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Tag\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.263,2.826H7.904L2.702,8.028v6.359L18.405,30.09l11.561-11.562L14.263,2.826zM6.495,8.859c-0.619-0.619-0.619-1.622,0-2.24C7.114,6,8.117,6,8.736,6.619c0.62,0.62,0.619,1.621,0,2.241C8.117,9.479,7.114,9.479,6.495,8.859z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.TakeOff();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.TakeOff = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.TakeOff.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.TakeOff\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M10.27,19.267c0,0,9.375-1.981,16.074-8.681c0,0,1.395-1.339-1.338-1.339c-2.305,0-5.6,2.438-5.6,2.438l-9.137-1.42l-1.769,1.769l4.983,2.411l-3.001,2.035l-2.571-1.285L6.09,16.052C6.09,16.052,8.02,18.062,10.27,19.267zM3.251,23.106v1.998h24.498v-1.998H3.251z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Talke();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Talke = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Talke.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Talke\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM16.982,21.375h-1.969v-1.889h1.969V21.375zM16.982,17.469v0.625h-1.969v-0.769c0-2.321,2.641-2.689,2.641-4.337c0-0.752-0.672-1.329-1.553-1.329c-0.912,0-1.713,0.672-1.713,0.672l-1.12-1.393c0,0,1.104-1.153,3.009-1.153c1.81,0,3.49,1.121,3.49,3.009C19.768,15.437,16.982,15.741,16.982,17.469z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Talkq();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Talkq = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Talkq.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Talkq\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM16.868,21.375h-1.969v-1.889h1.969V21.375zM16.772,18.094h-1.777l-0.176-8.083h2.113L16.772,18.094z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Thunder();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Thunder = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Thunder.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Thunder\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.371,7.306c-0.092-3.924-3.301-7.077-7.248-7.079c-2.638,0.001-4.942,1.412-6.208,3.517c-0.595-0.327-1.28-0.517-2.01-0.517C7.626,3.229,5.772,5.033,5.689,7.293c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h5.271l-2.166,3.398l1.977-0.411L10,30.875l9.138-10.102L17,21l2.167-2.023h4.269c3.312,0,6-2.688,6-6C29.434,10.34,27.732,8.11,25.371,7.306zM23.436,16.979H7.561c-2.209-0.006-3.997-1.792-4.001-4.001c-0.002-1.982,1.45-3.618,3.35-3.931c0.265-0.043,0.502-0.191,0.657-0.414C7.722,8.41,7.779,8.136,7.73,7.87C7.702,7.722,7.685,7.582,7.685,7.446C7.689,6.221,8.68,5.23,9.905,5.228c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.309c0.342-0.066,0.626-0.307,0.748-0.63c0.749-1.992,2.662-3.412,4.911-3.41c2.899,0.004,5.244,2.35,5.251,5.249c0,0.161-0.009,0.326-0.027,0.497c-0.049,0.517,0.305,0.984,0.815,1.079c1.86,0.344,3.274,1.966,3.271,3.923C27.43,15.186,25.645,16.973,23.436,16.979z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Trash();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Trash = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Trash.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Trash\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.826,5.75l0.396,1.188c1.54,0.575,2.589,1.44,2.589,2.626c0,2.405-4.308,3.498-8.312,3.498c-4.003,0-8.311-1.093-8.311-3.498c0-1.272,1.21-2.174,2.938-2.746l0.388-1.165c-2.443,0.648-4.327,1.876-4.327,3.91v2.264c0,1.224,0.685,2.155,1.759,2.845l0.396,9.265c0,1.381,3.274,2.5,7.312,2.5c4.038,0,7.313-1.119,7.313-2.5l0.405-9.493c0.885-0.664,1.438-1.521,1.438-2.617V9.562C24.812,7.625,23.101,6.42,20.826,5.75zM11.093,24.127c-0.476-0.286-1.022-0.846-1.166-1.237c-1.007-2.76-0.73-4.921-0.529-7.509c0.747,0.28,1.58,0.491,2.45,0.642c-0.216,2.658-0.43,4.923,0.003,7.828C11.916,24.278,11.567,24.411,11.093,24.127zM17.219,24.329c-0.019,0.445-0.691,0.856-1.517,0.856c-0.828,0-1.498-0.413-1.517-0.858c-0.126-2.996-0.032-5.322,0.068-8.039c0.418,0.022,0.835,0.037,1.246,0.037c0.543,0,1.097-0.02,1.651-0.059C17.251,18.994,17.346,21.325,17.219,24.329zM21.476,22.892c-0.143,0.392-0.69,0.95-1.165,1.235c-0.474,0.284-0.817,0.151-0.754-0.276c0.437-2.93,0.214-5.209-0.005-7.897c0.881-0.174,1.708-0.417,2.44-0.731C22.194,17.883,22.503,20.076,21.476,22.892zM11.338,9.512c0.525,0.173,1.092-0.109,1.268-0.633h-0.002l0.771-2.316h4.56l0.771,2.316c0.14,0.419,0.53,0.685,0.949,0.685c0.104,0,0.211-0.017,0.316-0.052c0.524-0.175,0.808-0.742,0.633-1.265l-1.002-3.001c-0.136-0.407-0.518-0.683-0.945-0.683h-6.002c-0.428,0-0.812,0.275-0.948,0.683l-1,2.999C10.532,8.77,10.815,9.337,11.338,9.512z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Twitter();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Twitter = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Twitter.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Twitter\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M23.295,22.567h-7.213c-2.125,0-4.103-2.215-4.103-4.736v-1.829h11.232c1.817,0,3.291-1.469,3.291-3.281c0-1.813-1.474-3.282-3.291-3.282H11.979V6.198c0-1.835-1.375-3.323-3.192-3.323c-1.816,0-3.29,1.488-3.29,3.323v11.633c0,6.23,4.685,11.274,10.476,11.274h7.211c1.818,0,3.318-1.463,3.318-3.298S25.112,22.567,23.295,22.567z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.TwitterBird();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.TwitterBird = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.TwitterBird.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.TwitterBird\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.605,13.11c0.913-2.851,2.029-4.698,3.313-6.038c0.959-1,1.453-1.316,0.891-0.216c0.25-0.199,0.606-0.464,0.885-0.605c1.555-0.733,1.442-0.119,0.373,0.54c2.923-1.045,2.82,0.286-0.271,0.949c2.527,0.047,5.214,1.656,5.987,5.077c0.105,0.474-0.021,0.428,0.464,0.514c1.047,0.186,2.03,0.174,2.991-0.13c-0.104,0.708-1.039,1.167-2.497,1.471c-0.541,0.112-0.651,0.083-0.005,0.229c0.799,0.179,1.69,0.226,2.634,0.182c-0.734,0.846-1.905,1.278-3.354,1.296c-0.904,3.309-2.976,5.678-5.596,7.164c-6.152,3.492-15.108,2.984-19.599-3.359c2.947,2.312,7.312,2.821,10.555-0.401c-2.125,0-2.674-1.591-0.99-2.449c-1.595-0.017-2.608-0.521-3.203-1.434c-0.226-0.347-0.229-0.374,0.14-0.64c0.405-0.293,0.958-0.423,1.528-0.467c-1.651-0.473-2.66-1.335-3.009-2.491c-0.116-0.382-0.134-0.363,0.256-0.462c0.38-0.097,0.87-0.148,1.309-0.17C6.11,10.88,5.336,9.917,5.139,8.852c-0.186-1.006,0.005-0.748,0.758-0.46C9.263,9.68,12.619,11.062,14.605,13.11L14.605,13.11z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Umbrella();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Umbrella = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Umbrella.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Umbrella\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M14.784,26.991c0,1.238-1.329,1.696-1.835,1.696c-0.504,0-1.536-0.413-1.65-1.812c0-0.354-0.288-0.642-0.644-0.642c-0.354,0-0.641,0.287-0.641,0.642c0.045,1.056,0.756,3.052,2.935,3.052c2.432,0,3.166-1.882,3.166-3.144v-8.176l-1.328-0.024C14.787,18.584,14.784,25.889,14.784,26.991zM15.584,9.804c-6.807,0-11.084,4.859-11.587,8.326c0.636-0.913,1.694-1.51,2.89-1.51c1.197,0,2.22,0.582,2.855,1.495c0.638-0.904,1.69-1.495,2.88-1.495c1.2,0,2.26,0.6,2.896,1.517c0.635-0.917,1.83-1.517,3.03-1.517c1.19,0,2.241,0.591,2.879,1.495c0.636-0.913,1.659-1.495,2.855-1.495c1.197,0,2.254,0.597,2.89,1.51C26.669,14.663,22.393,9.804,15.584,9.804zM14.733,7.125v2.081h1.323V7.125c0-0.365-0.296-0.661-0.661-0.661C15.029,6.464,14.733,6.76,14.733,7.125z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Undo();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Undo = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Undo.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Undo\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M12.981,9.073V6.817l-12.106,6.99l12.106,6.99v-2.422c3.285-0.002,9.052,0.28,9.052,2.269c0,2.78-6.023,4.263-6.023,4.263v2.132c0,0,13.53,0.463,13.53-9.823C29.54,9.134,17.952,8.831,12.981,9.073z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Unlock();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Unlock = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Unlock.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Unlock\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.375,12.833h-2.209V10c0,0,0,0,0-0.001c0-2.389,1.945-4.333,4.334-4.333c2.391,0,4.335,1.944,4.335,4.333c0,0,0,0,0,0v2.834h2V9.999h-0.001c-0.001-3.498-2.836-6.333-6.334-6.333S16.166,6.502,16.166,10v2.833H3.125V25h17.25V12.833z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Usb();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Usb = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Usb.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Usb\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M15.5,1.667L13.745,4.74h1.252v15.709L11.8,17.391c-0.205-0.26-0.351-0.601-0.358-0.952c0-1.417-0.001-2.258-0.001-2.568c0.592-0.21,1.02-0.774,1.02-1.444c0-0.849-0.682-1.538-1.521-1.538c-0.84,0-1.521,0.689-1.521,1.538c0,0.67,0.427,1.234,1.019,1.444l-0.001,2.539c0,0.688,0.373,1.409,0.812,1.868c-0.013-0.013-0.027-0.025,0,0c0.011,0.01,3.392,3.245,3.392,3.245c0.205,0.26,0.35,0.6,0.357,0.951v1.776c-1.161,0.236-2.036,1.272-2.036,2.517c0,1.418,1.137,2.566,2.539,2.566c1.403,0,2.54-1.148,2.54-2.566c0-1.244-0.875-2.28-2.038-2.517v-1.746c0-0.005,0-0.009,0-0.014v-3.861c0.008-0.35,0.152-0.689,0.358-0.949c0,0,3.38-3.234,3.392-3.245c0.027-0.026,0.012-0.013,0,0c0.438-0.459,0.811-1.181,0.811-1.869V10.12h1.02V7.046h-3.041v3.075h1.018c0,0-0.002,0.644-0.002,2.476c-0.008,0.351-0.152,0.692-0.357,0.952l-3.198,3.06V4.74h1.254L15.5,1.667z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.User();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.User = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.User.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.User\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.771,12.364c0,0,0.849-3.51,0-4.699c-0.85-1.189-1.189-1.981-3.058-2.548s-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.792-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.321s0.283,3.058,0.566,3.624l-0.337,0.113c-0.283,3.283,1.132,3.68,1.132,3.68c0.509,3.058,1.019,1.756,1.019,2.548s-0.51,0.51-0.51,0.51s-0.452,1.245-1.584,1.698c-1.132,0.452-7.416,2.886-7.927,3.396c-0.511,0.511-0.453,2.888-0.453,2.888h26.947c0,0,0.059-2.377-0.452-2.888c-0.512-0.511-6.796-2.944-7.928-3.396c-1.132-0.453-1.584-1.698-1.584-1.698s-0.51,0.282-0.51-0.51s0.51,0.51,1.02-2.548c0,0,1.414-0.397,1.132-3.68H20.771z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Users();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Users = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Users.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Users\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.053,20.8c-1.132-0.453-1.584-1.698-1.584-1.698s-0.51,0.282-0.51-0.51s0.51,0.51,1.02-2.548c0,0,1.414-0.397,1.132-3.68h-0.34c0,0,0.849-3.51,0-4.699c-0.85-1.189-1.189-1.981-3.058-2.548s-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.792-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.321s0.283,3.058,0.566,3.624l-0.337,0.113c-0.283,3.283,1.132,3.68,1.132,3.68c0.509,3.058,1.019,1.756,1.019,2.548s-0.51,0.51-0.51,0.51s-0.452,1.245-1.584,1.698c-1.132,0.452-7.416,2.886-7.927,3.396c-0.511,0.511-0.453,2.888-0.453,2.888h26.947c0,0,0.059-2.377-0.452-2.888C28.469,23.686,22.185,21.252,21.053,20.8zM8.583,20.628c-0.099-0.18-0.148-0.31-0.148-0.31s-0.432,0.239-0.432-0.432s0.432,0.432,0.864-2.159c0,0,1.199-0.336,0.959-3.119H9.538c0,0,0.143-0.591,0.237-1.334c-0.004-0.308,0.006-0.636,0.037-0.996l0.038-0.426c-0.021-0.492-0.107-0.939-0.312-1.226C8.818,9.619,8.53,8.947,6.947,8.467c-1.583-0.48-1.008-0.385-2.159-0.336C3.636,8.179,2.676,8.802,2.676,9.139c0,0-0.72,0.048-1.008,0.336c-0.271,0.271-0.705,1.462-0.757,1.885v0.281c0.047,0.653,0.258,2.449,0.469,2.872l-0.286,0.096c-0.239,2.783,0.959,3.119,0.959,3.119c0.432,2.591,0.864,1.488,0.864,2.159s-0.432,0.432-0.432,0.432s-0.383,1.057-1.343,1.439c-0.061,0.024-0.139,0.056-0.232,0.092v5.234h0.575c-0.029-1.278,0.077-2.927,0.746-3.594C2.587,23.135,3.754,22.551,8.583,20.628zM30.913,11.572c-0.04-0.378-0.127-0.715-0.292-0.946c-0.719-1.008-1.008-1.679-2.59-2.159c-1.584-0.48-1.008-0.385-2.16-0.336C24.72,8.179,23.76,8.802,23.76,9.139c0,0-0.719,0.048-1.008,0.336c-0.271,0.272-0.709,1.472-0.758,1.891h0.033l0.08,0.913c0.02,0.231,0.022,0.436,0.027,0.645c0.09,0.666,0.21,1.35,0.33,1.589l-0.286,0.096c-0.239,2.783,0.96,3.119,0.96,3.119c0.432,2.591,0.863,1.488,0.863,2.159s-0.432,0.432-0.432,0.432s-0.053,0.142-0.163,0.338c4.77,1.9,5.927,2.48,6.279,2.834c0.67,0.667,0.775,2.315,0.746,3.594h0.48v-5.306c-0.016-0.006-0.038-0.015-0.052-0.021c-0.959-0.383-1.343-1.439-1.343-1.439s-0.433,0.239-0.433-0.432s0.433,0.432,0.864-2.159c0,0,0.804-0.229,0.963-1.841v-1.227c-0.001-0.018-0.001-0.033-0.003-0.051h-0.289c0,0,0.215-0.89,0.292-1.861V11.572z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Video();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Video = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Video.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Video\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.188,4.875v1.094h-4.5V4.875H8.062v1.094h-4.5V4.875h-1v21.25h1v-1.094h4.5v1.094h14.625v-1.094h4.5v1.094h1.25V4.875H27.188zM8.062,23.719h-4.5v-3.125h4.5V23.719zM8.062,19.281h-4.5v-3.125h4.5V19.281zM8.062,14.844h-4.5v-3.125h4.5V14.844zM8.062,10.406h-4.5V7.281h4.5V10.406zM11.247,20.59V9.754l9.382,5.418L11.247,20.59zM27.188,23.719h-4.5v-3.125h4.5V23.719zM27.188,19.281h-4.5v-3.125h4.5V19.281zM27.188,14.844h-4.5v-3.125h4.5V14.844zM27.188,10.406h-4.5V7.281h4.5V10.406z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.View();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.View = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.View.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.View\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M16,8.286C8.454,8.286,2.5,16,2.5,16s5.954,7.715,13.5,7.715c5.771,0,13.5-7.715,13.5-7.715S21.771,8.286,16,8.286zM16,20.807c-2.649,0-4.807-2.157-4.807-4.807s2.158-4.807,4.807-4.807s4.807,2.158,4.807,4.807S18.649,20.807,16,20.807zM16,13.194c-1.549,0-2.806,1.256-2.806,2.806c0,1.55,1.256,2.806,2.806,2.806c1.55,0,2.806-1.256,2.806-2.806C18.806,14.451,17.55,13.194,16,13.194z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Vim();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Vim = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Vim.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Vim\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M25.012,10.44l4.571-4.645c0.11-0.113,0.173-0.264,0.173-0.423V3.134c0-0.159-0.064-0.314-0.177-0.427l-0.604-0.602c-0.111-0.112-0.261-0.176-0.42-0.177l-9.646-0.086C18.71,1.84,18.523,1.935,18.41,2.099L17.807,2.96c-0.033,0.047-0.059,0.099-0.076,0.154l-2.144-2.156l0,0l-1.646,1.666l-0.447-0.497c-0.112-0.125-0.27-0.197-0.438-0.199L3.324,1.756c-0.163-0.003-0.322,0.06-0.437,0.176L2.284,2.535C2.171,2.647,2.107,2.803,2.107,2.962v2.325c0,0.164,0.066,0.32,0.183,0.434l0.657,0.635C3.056,6.461,3.2,6.521,3.352,6.525l0.285,0.007l0.007,6.512l-2.527,2.557l2.533,2.533l0.008,8.084c0,0.159,0.065,0.314,0.177,0.427l0.861,0.861c0.112,0.111,0.268,0.176,0.427,0.176h2.67c0.161,0,0.317-0.064,0.43-0.181l2.378-2.417l4.9,4.9l14.47-14.558L25.012,10.44zM9.747,24.232l-2.208,2.242H5.372l-0.509-0.509L4.856,19.34l-0.008-7.515L4.842,5.943c0-0.328-0.261-0.594-0.588-0.603L3.617,5.326L3.313,5.031v-1.82l0.245-0.245l9.215,0.163l0.319,0.354l0.126,0.141v1.419l-0.352,0.362H12.26c-0.331,0-0.6,0.266-0.603,0.597l-0.076,7.203c-0.002,0.244,0.141,0.463,0.365,0.56c0.224,0.096,0.482,0.049,0.657-0.12l7.495-7.235c0.174-0.171,0.23-0.432,0.139-0.66c-0.09-0.228-0.312-0.377-0.56-0.377h-0.479l-0.296-0.379V3.496l0.312-0.445l9.083,0.081l0.252,0.252v1.743l-4.388,4.458L9.747,24.232z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Volume0();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Volume0 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Volume0.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Volume0\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Volume1();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Volume1 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Volume1.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.Volume1\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Volume2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Volume2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Volume2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Volume2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z M21.101,8.925c-0.393-0.391-1.024-0.391-1.413,0c-0.392,0.391-0.392,1.025,0,1.414c1.45,1.451,2.344,3.447,2.344,5.661c0,2.212-0.894,4.207-2.342,5.659c-0.392,0.39-0.392,1.023,0,1.414c0.195,0.195,0.451,0.293,0.708,0.293c0.256,0,0.512-0.098,0.707-0.293c1.808-1.809,2.929-4.315,2.927-7.073C24.033,13.24,22.912,10.732,21.101,8.925z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Volume3();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Volume3 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Volume3.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Volume3\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z M21.101,8.925c-0.393-0.391-1.024-0.391-1.413,0c-0.392,0.391-0.392,1.025,0,1.414c1.45,1.451,2.344,3.447,2.344,5.661c0,2.212-0.894,4.207-2.342,5.659c-0.392,0.39-0.392,1.023,0,1.414c0.195,0.195,0.451,0.293,0.708,0.293c0.256,0,0.512-0.098,0.707-0.293c1.808-1.809,2.929-4.315,2.927-7.073C24.033,13.24,22.912,10.732,21.101,8.925z M23.28,6.746c-0.393-0.391-1.025-0.389-1.414,0.002c-0.391,0.389-0.391,1.023,0.002,1.413h-0.002c2.009,2.009,3.248,4.773,3.248,7.839c0,3.063-1.239,5.828-3.246,7.838c-0.391,0.39-0.391,1.023,0.002,1.415c0.194,0.194,0.45,0.291,0.706,0.291s0.513-0.098,0.708-0.293c2.363-2.366,3.831-5.643,3.829-9.251C27.115,12.389,25.647,9.111,23.28,6.746z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Warning();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Warning = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Warning.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Warning\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M29.225,23.567l-3.778-6.542c-1.139-1.972-3.002-5.2-4.141-7.172l-3.778-6.542c-1.14-1.973-3.003-1.973-4.142,0L9.609,9.853c-1.139,1.972-3.003,5.201-4.142,7.172L1.69,23.567c-1.139,1.974-0.207,3.587,2.071,3.587h23.391C29.432,27.154,30.363,25.541,29.225,23.567zM16.536,24.58h-2.241v-2.151h2.241V24.58zM16.428,20.844h-2.023l-0.201-9.204h2.407L16.428,20.844z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.WheelChair();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.WheelChair = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.WheelChair.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.WheelChair\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.373,19.85c0,4.079-3.318,7.397-7.398,7.397c-4.079,0-7.398-3.318-7.398-7.397c0-2.466,1.213-4.652,3.073-5.997l-0.251-2.21c-2.875,1.609-4.825,4.684-4.825,8.207c0,5.184,4.217,9.4,9.401,9.4c4.395,0,8.093-3.031,9.117-7.111L20.37,19.73C20.37,19.771,20.373,19.81,20.373,19.85zM11.768,6.534c1.321,0,2.392-1.071,2.392-2.392c0-1.321-1.071-2.392-2.392-2.392c-1.321,0-2.392,1.071-2.392,2.392C9.375,5.463,10.446,6.534,11.768,6.534zM27.188,22.677l-5.367-7.505c-0.28-0.393-0.749-0.579-1.226-0.538c-0.035-0.003-0.071-0.006-0.106-0.006h-6.132l-0.152-1.335h4.557c0.53,0,0.96-0.429,0.96-0.959c0-0.53-0.43-0.959-0.96-0.959h-4.776l-0.25-2.192c-0.146-1.282-1.303-2.203-2.585-2.057C9.869,7.271,8.948,8.428,9.094,9.71l0.705,6.19c0.136,1.197,1.154,2.078,2.332,2.071c0.004,0,0.007,0.001,0.012,0.001h8.023l4.603,6.436c0.439,0.615,1.338,0.727,2.007,0.248C27.442,24.178,27.628,23.292,27.188,22.677z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Windows();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Windows = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Windows.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Windows\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M20.023,17.484c-1.732-0.205-3.022-0.908-4.212-1.701l0,0l-0.559,0.279l-2.578,8.924l0,0c1.217,0.805,2.905,1.707,4.682,1.914c2.686,0.312,5.56-0.744,6.391-1.195l2.617-9.061l-0.559-0.279C25.805,16.365,23.193,17.857,20.023,17.484zM14.424,14.825c-1.267-0.87-2.578-1.652-4.375-1.816c-0.318-0.029-0.627-0.042-0.925-0.042c-3.011,0-4.948,1.347-4.948,1.347l-2.565,8.877l0,0l0.526,0.281c0.981-0.476,2.78-1.145,5.09-0.984c1.665,0.113,2.92,0.781,4.117,1.531l0.507-0.26l0,0L14.424,14.825zM10.201,12.094c1.664,0.114,2.921,0.78,4.117,1.533l0.509-0.26l0,0L17.4,4.431c-1.27-0.87-2.579-1.653-4.377-1.816c-0.318-0.029-0.626-0.042-0.924-0.042C9.088,2.573,7.15,3.92,7.15,3.92l-2.566,8.878L5.11,13.08C6.092,12.604,7.891,11.936,10.201,12.094zM28.779,5.971L28.779,5.971c0,0.001-2.609,1.492-5.779,1.119c-1.734-0.204-3.023-0.907-4.213-1.701L18.227,5.67l-2.576,8.923l0,0c1.215,0.803,2.906,1.709,4.68,1.915c2.687,0.312,5.558-0.745,6.392-1.197l2.615-9.059L28.779,5.971z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Woman();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Woman = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Woman.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Woman\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M21.022,16.349c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.104,1.031c-1.164,0-2.231-0.391-3.105-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.579,5.192-0.351,5.874c0.55,0.307,1.127,0.078,1.723-0.496c-0.105,0.582-0.167,1.213-0.167,1.873c0,2.932,1.139,5.307,2.543,5.307c0.846,0,1.265-0.865,1.466-2.189c0.201,1.324,0.62,2.189,1.464,2.189c1.406,0,2.545-2.375,2.545-5.307c0-0.66-0.061-1.291-0.168-1.873c0.598,0.574,1.174,0.803,1.725,0.496C22.603,21.541,22.444,18.912,21.022,16.349zM15.808,13.757c2.363,0,4.279-1.916,4.279-4.279s-1.916-4.279-4.279-4.279c-2.363,0-4.28,1.916-4.28,4.279S13.445,13.757,15.808,13.757zM18.731,4.974c1.235,0.455,0.492-0.725,0.492-1.531s0.762-1.792-0.492-1.391c-1.316,0.422-2.383,0.654-2.383,1.461S17.415,4.489,18.731,4.974zM15.816,4.4c0.782,0,0.345-0.396,0.345-0.884c0-0.488,0.438-0.883-0.345-0.883s-0.374,0.396-0.374,0.883C15.442,4.005,15.034,4.4,15.816,4.4zM12.884,4.974c1.316-0.484,2.383-0.654,2.383-1.461S14.2,2.474,12.884,2.052c-1.254-0.402-0.492,0.584-0.492,1.391S11.648,5.428,12.884,4.974z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Wrench();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Wrench = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Wrench.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Wrench\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M26.834,14.693c1.816-2.088,2.181-4.938,1.193-7.334l-3.646,4.252l-3.594-0.699L19.596,7.45l3.637-4.242c-2.502-0.63-5.258,0.13-7.066,2.21c-1.907,2.193-2.219,5.229-1.039,7.693L5.624,24.04c-1.011,1.162-0.888,2.924,0.274,3.935c1.162,1.01,2.924,0.888,3.935-0.274l9.493-10.918C21.939,17.625,24.918,16.896,26.834,14.693z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Wrench2();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Wrench2 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Wrench2.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Wrench2\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M24.946,9.721l-2.872-0.768l-0.771-2.874l3.188-3.231c-1.992-0.653-4.268-0.192-5.848,1.391c-1.668,1.668-2.095,4.111-1.279,6.172l-3.476,3.478l-3.478,3.478c-2.062-0.816-4.504-0.391-6.173,1.277c-1.583,1.581-2.043,3.856-1.39,5.849l3.231-3.188l2.874,0.77l0.769,2.872l-3.239,3.197c1.998,0.665,4.288,0.207,5.876-1.384c1.678-1.678,2.1-4.133,1.271-6.202l3.463-3.464l3.464-3.463c2.069,0.828,4.523,0.406,6.202-1.272c1.592-1.589,2.049-3.878,1.384-5.876L24.946,9.721z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.Wrench3();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.Wrench3 = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.Wrench3.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.Wrench3\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   *\n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M27.839,6.775l-3.197,3.239L21.77,9.246l-0.771-2.874l3.188-3.231c-1.992-0.653-4.268-0.192-5.848,1.391c-1.668,1.668-2.095,4.111-1.279,6.172L7.42,20.344c-0.204-0.032-0.408-0.062-0.621-0.062c-2.173,0-3.933,1.759-3.933,3.933c0,2.173,1.76,3.933,3.933,3.933c2.171,0,3.931-1.76,3.933-3.933c0-0.24-0.03-0.473-0.071-0.7l9.592-9.59c2.069,0.828,4.523,0.406,6.202-1.272C28.047,11.062,28.504,8.772,27.839,6.775zM6.799,25.146c-0.517,0-0.933-0.418-0.935-0.933c0.002-0.515,0.418-0.933,0.935-0.933c0.514,0,0.932,0.418,0.932,0.933S7.313,25.146,6.799,25.146z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ZoomIn();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ZoomIn = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ZoomIn.prototype */\n  {\n\n  NAME: \"draw2d.shape.icon.ZoomIn\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM15.687,9.051h-4v2.833H8.854v4.001h2.833v2.833h4v-2.834h2.832v-3.999h-2.833V9.051z\")\n  }\n})\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n\n *\n * @example\n *\n *    let icon =  new draw2d.shape.icon.ZoomOut();\n *\n *    canvas.add(icon,50,10);\n *\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.shape.icon.Icon\n */\ndraw2d.shape.icon.ZoomOut = draw2d.shape.icon.Icon.extend(\n  /** @lends draw2d.shape.icon.ZoomOut.prototype */\n  {\n  \n  NAME: \"draw2d.shape.icon.ZoomOut\",\n\n  /**\n   *\n   * Creates a new icon element which are not assigned to any canvas.\n   * \n   * @param {Object} attr the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 50, height: 50}, attr), setter, getter)\n  },\n\n  /**\n   * @private\n   * @returns {Object} the raphaelJS path object\n   */\n  createSet: function () {\n    return this.canvas.paper.path(\"M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM8.854,11.884v4.001l9.665-0.001v-3.999L8.854,11.884z\")\n  }\n})\n\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n/**\n * @class\n *\n * FlexGridLayout is a powerful, flexible and precise layout manager that aligns components vertically and\n * horizontally in a dynamic rectangular grid of cells, with each component occupying in one or more cell.\n * To define a form layout you specify the form's columns, rows. Everyhing that applies to columns applies\n * to rows too - just with a different orientation. FlexGridLayout uses the same API, algorithms and implementation\n * for column and rows.\n *\n * FlexGridLayout focuses on form-oriented panels much like the 'Segment' panel. Nevertheless, it is a general purpose\n * layout system that can be used for the vast majority of rectangular layouts.\n *\n * Define your layout with:\n * <ul>\n *  <li>[number]px</li>\n *  <li>grow</li>\n *  <li>pref</li>\n * </ul>\n *\n * e.g. we want build a shape with a border on the left and right and a label in the\n * center. We allow the center to grow, the shape is resizeable.\n *\n * <pre>\n *    10px       grow         10px\n *\n *    -----+------------------+-----\n *    |    |  [LABEL]         |    |\n *    |    |                  |    |\n *    |    |                  |    |    grow\n *    |    |                  |    |\n *    |    |                  |    |\n *    -----+------------------+-----\n * </pre>\n *\n * The number forces the exact width or height of the cell. <b>grow</b> respect the minimum width of the\n * element and allows to resize the shape. The row/col with the <b>grow</b> declaration will be resized.\n * The <b>pref</b> declaration forces the cell to the minimum width/height of the embedded figure.\n *\n * Example Implementation of a shape:\n *\n * @example\n *    let PredefinedProcess = draw2d.shape.layout.FlexGridLayout.extend({\n *\n *\n *         //     10px       grow         10px\n *         //\n *         //    -----+------------------+-----\n *         //    |    |  [LABEL]         |    |\n *         //    |    |                  |    |\n *         //    |    |                  |    |    grow\n *         //    |    |                  |    |\n *         //    |    |                  |    |\n *         //    -----+------------------+-----\n *         //\n *         // @param attr\n *         //\n *        init: function(attr, setter, getter)\n *        {\n *           this._super(extend({\n *                columns:\"10px, grow, 10px\",\n *                rows:   \"grow\",\n *                bgColor:\"#FFFFFF\",\n *                stroke:2\n *            },attr),\n *           setter,\n *            getter);\n *\n *\n *            this.label = new draw2d.shape.basic.Label({text:\"Process Name\", resizeable:true, stroke:2});\n *            this.label.installEditor(new draw2d.ui.LabelInplaceEditor());\n *            this.add(this.label, {row:0, col:1});\n *\n *            this.setDimension(120,80);\n *        }\n *    });\n *    let shape = new PredefinedProcess();\n *    canvas.add(shape,10,10);\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.layout.Layout\n * @since 2.5.1\n */\ndraw2d.shape.layout.FlexGridLayout = draw2d.shape.layout.Layout.extend(\n  /** @lends draw2d.shape.layout.FlexGridLayout.prototype */\n  {\n  \n  NAME: \"draw2d.shape.layout.FlexGridLayout\",\n\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    let _this = this\n    this.cellLocator = {\n      relocate: function (index, figure) {\n        if (_this.gridDef.layoutRequired === true) {\n          _this._layout()\n        }\n        let cell = figure.__cellConstraint\n        let x = cell.x\n        let y = cell.y\n\n        // stretch the figure to fill the complete cell\n        //\n        if (figure.isResizeable()) {\n          figure.setDimension(\n            Math.max(figure.getMinWidth(), cell.width),\n            Math.max(figure.getMinHeight(), cell.height))\n        }\n        // else apply the valign and align property\n        //\n        else {\n          // apply vertical alignment\n          //\n          switch (cell.valign) {\n            case \"middle\":\n              y = y + (cell.height - figure.getHeight()) / 2\n              break\n            case \"bottom\":\n              y = y + (cell.height - figure.getHeight())\n              break\n          }\n\n          // apply horizontal alignment\n          //\n          switch (cell.align) {\n            case \"center\":\n              x = x + (cell.width - figure.getWidth()) / 2\n              break\n            case \"right\":\n              x = x + (cell.width - figure.getWidth())\n              break\n          }\n        }\n        figure.setPosition(x, y)\n      },\n      bind: function () {\n      },\n      unbind: function () {\n      },\n      translate: function (figure, diff) {\n        figure.setPosition(figure.x + diff.x, figure.y + diff.y)\n      }\n    }\n\n    this.debug = false\n    this.gridDef = {\n      debugLines: [],\n      def_cols: [],\n      def_rows: [],\n      min_height: [],\n      min_width: [],\n      minGridWidth: 10,\n      minGridHeight: 10,\n      hResizeable: false,\n      vResizeable: false,\n      layoutRequired: true\n    }\n\n    this._super(\n      extend({stroke: 2}, attr),\n      extend({}, setter),\n      extend({}, getter))\n\n    this.resizeListener = function (figure) {\n      _this.gridDef.layoutRequired = true\n      // propagate the event to the parent or other listener if existing\n      //\n      if (_this.getParent() instanceof draw2d.shape.layout.Layout) {\n        _this.fireEvent(\"resize\")\n      }\n      // or we are the parent and must consume it self\n      else {\n        _this.setDimension(\n          _this.gridDef.hResizeable === true ? _this.getWidth() : 1,\n          _this.gridDef.vResizeable === true ? _this.getHeight() : 1\n        )\n\n      }\n    }\n\n    let rows = attr.rows.split(\",\")\n    let columns = attr.columns.split(\",\")\n    for (let i = 0; i < columns.length; i++) {\n      this.gridDef.def_cols[i] = this.cellWidthFromDef(columns[i])\n    }\n\n    for (let i = 0; i < rows.length; i++) {\n      this.gridDef.def_rows[i] = this.cellWidthFromDef(rows[i])\n    }\n\n    this.installEditPolicy(new draw2d.policy.figure.RectangleSelectionFeedbackPolicy())\n  },\n\n  add: function (figure, cellConstraint) {\n\n    figure.__cellConstraint = extend({}, {\n      row: 0,\n      col: 0,\n      rowspan: 1,\n      colspan: 1,\n      align: \"left\",\n      valign: \"top\",\n      width: 1,\n      height: 1\n    }, cellConstraint)\n    this.gridDef.layoutRequired = true\n    this._super(figure, this.cellLocator)\n    this._layout()\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getMinWidth: function () {\n    return this.gridDef.minGridWidth\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getMinHeight: function () {\n    return this.gridDef.minGridHeight\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setCanvas: function (canvas) {\n    // layout must be recalculated if the shape will be assigned\n    // to a canvas. \"Text\" elements can now calculate correct with the right font settings.\n    //\n    this.gridDef.layoutRequired = true\n    this._super(canvas)\n\n    return this\n  },\n\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return this\n    }\n    this._super(attributes)\n    if (this.debug) {\n      this.paintDebugGrid()\n    }\n\n    return this\n  },\n\n  setDimension: function (w, h) {\n    // we need the calculated layout to determine the min width/height of the figure\n    //\n    if (this.gridDef.layoutRequired === true) {\n      this._layout()\n    }\n    // set the new dimension\n    this._super(w, h)\n\n    // after setting the new dimension a recalculation of the layout is required. May the shape\n    // has grown up\n    this.gridDef.layoutRequired = true\n    this.repaint()\n\n    return this\n  },\n\n  _layout: function () {\n    this.gridDef.layoutRequired = false\n\n    let figures = this.getChildren()\n\n    // copy the initial requested width/heights\n    //\n    this.gridDef.min_height = this.gridDef.def_rows.slice(0)\n    this.gridDef.min_width = this.gridDef.def_cols.slice(0)\n\n    // Calculate the basic width/height of the elements without considering the \"span\" and \"grow\"\n    //\n    for (let i = 0; i < figures.getSize(); i++) {\n      let figure = figures.get(i)\n      let cell = figure.__cellConstraint\n      // ermitteln der derzeitig zur verfügung stehenden weite\n      this.gridDef.min_width[cell.col] = Math.max(this.gridDef.min_width[cell.col], figure.getMinWidth())\n\n      // Falls das Elemente eine y_span hat, dann versuchen ob es auf die ganze\n      // höhe rein passt. Wenn nicht wird der Teil der 'grow' angegeben hat verändert.\n      // Wenn kein Element 'grow' angegeben hat, dann wird das letzte Element verändert\n      if (cell.rowspan > 1) {\n        let eHeight = figure.getMinHeight()\n        let cHeight = this.cellHeight(cell.row, cell.row + cell.rowspan)\n        if (cHeight < eHeight) {\n          let diff = eHeight - cHeight\n          this.gridDef.min_height[cell.row + cell.rowspan - 1] = this.gridDef.min_height[cell.row + cell.rowspan - 1] + diff\n        }\n      }\n      else {\n        this.gridDef.min_height[cell.row] = Math.max(this.gridDef.min_height[cell.row], figure.getMinHeight())\n      }\n    }\n    this.gridDef.minGridWidth = this._getGridWidth()\n    this.gridDef.minGridHeight = this._getGridHeight()\n\n    // Resize the grid height if at least one row supports \"grow\"\n    //\n    let gridHeight = this._getGridHeight()\n    for (let i = 0; i < this.gridDef.def_rows.length; i++) {\n      // row found which can grow\n      if (this.gridDef.def_rows[i] === -1) {\n        this.gridDef.min_height[i] = this.gridDef.min_height[i] + Math.max(0, this.getHeight() - gridHeight)\n        this.gridDef.vResizeable = true\n        break\n      }\n    }\n\n    // Resize the grid if at least one column supports \"grow\"\n    //\n    let gridWidth = this._getGridWidth()\n    for (let i = 0; i < this.gridDef.def_cols.length; i++) {\n      // column found which can grow\n      if (this.gridDef.def_cols[i] === -1) {\n        this.gridDef.min_width[i] = this.gridDef.min_width[i] + Math.max(0, this.getWidth() - gridWidth)\n        this.gridDef.hResizeable = true\n        break\n      }\n    }\n\n    // apply the cell constraints to the elements\n    //\n    for (let i = 0; i < figures.getSize(); i++) {\n      let cell = figures.get(i).__cellConstraint\n      cell.width = this.cellWidth(cell.col, cell.col + cell.colspan)\n      cell.height = this.cellHeight(cell.row, cell.row + cell.rowspan)\n      cell.x = this.cellX(cell.col)\n      cell.y = this.cellY(cell.row)\n    }\n\n    return this\n  },\n\n  cellX: function (col) {\n    let r = 0\n    for (let i = 0; i < col; i++) {\n      r = r + this.gridDef.min_width[i]\n    }\n\n    return r\n  },\n\n  cellY: function (row) {\n    let r = 0\n    for (let i = 0; i < row; i++) {\n      r = r + this.gridDef.min_height[i]\n    }\n\n    return r\n  },\n\n  cellWidth: function (from, to) {\n    let r = 0\n    for (let i = from; i < to; i++) {\n      r = r + this.gridDef.min_width[i]\n    }\n\n    return r\n  },\n\n  cellHeight: function (from, to) {\n    let r = 0\n    for (let i = from; i < to; i++) {\n      r = r + this.gridDef.min_height[i]\n    }\n\n    return r\n  },\n\n  paintDebugGrid: function () {\n    // alte Linien erstmal entfernen bevor man neue zeichnet\n    //\n    for (let i = 0; i < this.gridDef.debugLines.length; i++)\n      this.gridDef.debugLines[i].remove()\n    this.gridDef.debugLines = []\n\n    let gridHeight = this._getGridHeight()\n    let gridWidth = this._getGridWidth()\n    let posX = this.getAbsoluteX()\n    let posY = this.getAbsoluteY()\n\n    // draw the cols first\n    let x = posX\n    for (let i = 0; i <= this.gridDef.min_width.length; i++) {\n      let newLine = this.canvas.paper.path(\"M \" + x + \" \" + posY + \" l 0 \" + gridHeight).attr({\n        \"stroke\": \"#FF0000\",\n        \"stroke-width\": 1\n      })\n      this.gridDef.debugLines.push(newLine)\n      if (i < this.gridDef.min_width.length)\n        x = x + this.gridDef.min_width[i]\n    }\n\n    let y = posY\n    for (let i = 0; i <= this.gridDef.min_height.length; i++) {\n      let newLine = this.canvas.paper.path(\"M \" + posX + \" \" + y + \" l \" + gridWidth + \" 0\").attr({\n        \"stroke\": \"#FF0000\",\n        \"stroke-width\": 1\n      })\n      this.gridDef.debugLines.push(newLine)\n      if (i < this.gridDef.min_height.length)\n        y = y + this.gridDef.min_height[i]\n    }\n  },\n\n  _getGridWidth: function () {\n    let gridWidth = 0\n    for (let i = 0; i < this.gridDef.min_width.length; i++) {\n      gridWidth = gridWidth + this.gridDef.min_width[i]\n    }\n\n    return gridWidth\n  },\n\n  _getGridHeight: function () {\n    let gridHeight = 0\n    for (let i = 0; i < this.gridDef.min_height.length; i++) {\n      gridHeight = gridHeight + this.gridDef.min_height[i]\n    }\n\n    return gridHeight\n  },\n\n\n  cellWidthFromDef: function (def) {\n    let pattern = new RegExp(\"(\\\\d+)(?:px)?\")\n    let match = def.match(pattern)\n\n    if (match != null) {\n      return parseInt(match[1])\n    }\n\n    pattern = new RegExp(\"p(?:ref)?\")\n    match = def.match(pattern)\n    if (match != null) {\n      return 0\n    }\n\n    pattern = new RegExp(\"g(?:row)?\")\n    match = def.match(pattern)\n    if (match != null) {\n      this.autoResize = false\n      return -1\n    }\n\n    return 0\n  }\n\n\n})\n\n\n\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * The HorizontalLayout class arranges the layout elements in a horizontal sequence,\n * left to right, with optional gaps between the elements.\n *\n * During the execution of the setDimension() method, the minimum width of the container is calculated\n * by accumulating the minimum sizes of the elements, including stroke, gaps and padding.\n *\n *\n * See the example below with and without gap and border settings\n *\n *\n * @example\n *\n *    // first container without any gap and a border of the parent\n *    // container\n *    let label1 =  new draw2d.shape.basic.Label({text:\"Label 1\"});\n *    let label2 =  new draw2d.shape.basic.Label({text:\"Label 2\"});\n *    let label3 =  new draw2d.shape.basic.Label({text:\"Label 3\"});\n *\n *    let container1 = new draw2d.shape.layout.HorizontalLayout();\n *\n *    container1.add(label1);\n *    container1.add(label2);\n *    container1.add(label3);\n *    container1.setGap(10);\n *    container1.setStroke(2);\n *    canvas.add(container1,50,10);\n *\n *    // second container without any gab or border\n *    //\n *    let label11 =  new draw2d.shape.basic.Label({text:\"Label 1\"});\n *    let label12 =  new draw2d.shape.basic.Label({text:\"Label 2\"});\n *    let label13 =  new draw2d.shape.basic.Label({text:\"Label 3\"});\n *\n *    let container2 = new draw2d.shape.layout.HorizontalLayout();\n *\n *    container2.add(label11);\n *    container2.add(label12);\n *    container2.add(label13);\n *\n *    canvas.add(container2,50,90);\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.layout.Layout\n * @since 2.5.1\n */\ndraw2d.shape.layout.HorizontalLayout = draw2d.shape.layout.Layout.extend(\n  /** @lends draw2d.shape.layout.HorizontalLayout.prototype */\n  {\n\n    NAME: \"draw2d.shape.layout.HorizontalLayout\",\n\n    /**\n     * Create a new instance\n     *\n     * @param {Object} [attr] the configuration of the shape\n     */\n    init: function (attr, setter, getter) {\n      this.gap = 0\n      let _this = this\n      this.locator = {\n        translate: function (figure, diff) {\n          figure.setPosition(figure.x + diff.x, figure.y + diff.y)\n        },\n        bind: function () {\n        },\n        unbind: function () {\n        },\n        relocate: function (index, target) {\n          let stroke = _this.getStroke()\n          let yPos = stroke + _this.padding.top\n          let xPos = stroke + _this.padding.left // respect the border and padding of the parent\n          for (let i = 0; i < index; i++) {\n            let child = _this.children.get(i).figure\n            if (child.isVisible()) {\n              xPos += child.getWidth() + _this.gap\n            }\n          }\n\n          target.setPosition(xPos, yPos)\n        }\n      }\n\n      this._super(\n        extend({width: 1, height: 1, gap: 0}, attr),\n        extend({\n          // @attr {Number} gap the gap between the children shapes */\n          gap: this.setGap\n        }, setter),\n        extend({\n          gap: this.getGap\n        }, getter))\n\n    },\n\n\n    /**\n     * @inheritdoc\n     */\n    add: function (child, locator, index) {\n      this._super(child, this.locator, index)\n\n      this.setDimension(1, 1)\n\n      return this\n    },\n\n    /**\n     *\n     * Set the gap width between child components within this layout.\n     * This will only affect the space between components, not the space around all the components in the layout.\n     *\n     * @param {Number} gap The space, in pixels, between items.\n     * @since 2.5.1\n     */\n    setGap: function (gap) {\n      this.gap = gap\n      // this forces a relayout of the element\n      this.setDimension(1, 1)\n\n      return this\n    },\n\n    /**\n     *\n     * Return the gap between the children shapes\n     *\n     * @since 5.0.0\n     *\n     */\n    getGap: function () {\n      return this.gap\n    },\n\n    /**\n     * @inheritdoc\n     */\n    getMinWidth: function () {\n      let _this = this\n      let width = this.stroke * 2 + this.padding.left + this.padding.right\n      let gap = 0\n\n      this.children.each(function (i, e) {\n        if (e.figure.isVisible()) {\n          width += (e.figure.isResizeable() ? e.figure.getMinWidth() : e.figure.getWidth() + gap)\n          gap = _this.gap\n        }\n      })\n\n      return width\n    },\n\n    /**\n     * @inheritdoc\n     */\n    getMinHeight: function () {\n      let markup = (this.stroke * 2) + this.padding.top + this.padding.bottom\n      let height = 0\n\n      this.children.each(function (i, e) {\n        height = Math.max(height, (e.figure.isResizeable() ? e.figure.getMinHeight() : e.figure.getHeight()))\n      })\n\n      return height + markup\n    },\n\n    /**\n     * @inheritdoc\n     */\n    setDimension: function (w, h) {\n      this._super(w, h)\n\n      let diff = this.width - this.getMinWidth()\n      if (diff > 0) {\n        diff = (diff / this.children.getSize()) | 0\n        this.children.each(function (i, e) {\n          if (e.figure.isResizeable() === true) {\n            e.figure.setDimension(e.figure.getMinWidth() + diff, e.figure.getHeight())\n          }\n        })\n      } else {\n        let minHeight = this.getMinHeight()\n        this.children.each(function (i, e) {\n          // The layout respect the \"resizeable\" flag because a layout is a kind of layouter and\n          // any kind of autolayouter must respect this flag\n          if (e.figure.isResizeable() === true) {\n            // reset the shape to the minimum width/height. see setMinWidth/setMinHeight\n            e.figure.setDimension(1, minHeight)\n          }\n        })\n      }\n\n      return this\n    },\n\n\n    /**\n     * @inheritdoc\n     */\n    getPersistentAttributes: function () {\n      let memento = this._super()\n\n      memento.gap = this.gap\n\n      return memento\n    },\n\n\n    /**\n     * @inheritdoc\n     */\n    setPersistentAttributes: function (memento) {\n      this._super(memento)\n\n      if (typeof memento.gap === \"number\") {\n        this.gap = memento.gap\n      }\n\n      return this\n    }\n\n  })\n\n\n\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n *\n * A base class for positioning child figures and determining the ideal size for\n * a figure with children.\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Rectangle\n */\ndraw2d.shape.layout.Layout = draw2d.shape.basic.Rectangle.extend(\n  /** @lends draw2d.shape.layout.Layout.prototype */\n  {\n\n  NAME: \"draw2d.shape.layout.Layout\",\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    // @since 4.3.3\n    this.padding = {top: 0, right: 0, bottom: 0, left: 0}\n\n    this._super(extend({bgColor: null, radius: 0, stroke: 0}, attr),\n      extend({\n        // @attr {Number} padding the padding in pixel around the text */\n        padding: this.setPadding\n      }, setter),\n      extend({\n        padding: this.getPadding\n      }, getter))\n\n\n    this.resizeListener =  figure => {\n      // propagate the event to the parent or other listener if existing\n      //\n      if (this.getParent() instanceof draw2d.shape.layout.Layout) {\n        this.fireEvent(\"resize\")\n      }\n      // or we are the parent and must consume it self\n      else {\n        this.setDimension(1, 1)\n        this.fireEvent(\"resize\")\n      }\n    }\n\n    this.installEditPolicy(new draw2d.policy.figure.AntSelectionFeedbackPolicy())\n  },\n\n  /**\n   * @inheritdoc\n   */\n  add: function (child, locator, index) {\n    this._super(child, locator, index)\n\n    child.on(\"resize\", this.resizeListener)\n    child.on(\"change:visibility\", this.resizeListener)\n\n    // don't use the getter/setter. This considers the canvas assignment and\n    // the child is always invisible. BIG BUG. The example shape_db will break if you change this.\n//       child.setVisible(this.isVisible());\n    // respect the \"visible\" flag of the child as well\n    child.visible = child.visible && this.visible\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  remove: function (child) {\n    let r = this._super(child)\n    child.off(this.resizeListener)\n    this.setDimension(1, 1)\n\n    return r\n  },\n\n\n  /**\n   * \n   * Set the padding of the element\n   *\n   *     // Alternatively you can use the attr method:\n   *     //\n   *     // set the padding for top,left,bottom,right in one call\n   *     figure.attr({\n   *       padding: 3\n   *     });\n   *\n   *     // update the padding left and top\n   *     figure.attr({\n   *       padding: {left:3, top:30}\n   *     });\n   *\n   * @param {Number|Object} padding The new padding\n   * @since 4.3.3\n   **/\n  setPadding: function (padding) {\n    if (typeof padding === \"number\") {\n      this.padding = {top: padding, right: padding, bottom: padding, left: padding}\n    }\n    else {\n      this.padding = extend(this.padding, padding)\n    }\n    this.fireEvent(\"change:padding\", {value: this.padding})\n\n    // force a relayout of the figure\n    this.setDimension(1, 1)\n\n\n    return this\n  },\n\n\n  /**\n   * \n   * Get the padding of the element.\n   *\n   * @since 4.3.3\n   * @returns {this}\n   **/\n  getPadding: function () {\n    return this.padding\n  },\n\n  /**\n   * @inheritdoc\n   * @returns {this}\n   */\n  setVisible: function (flag) {\n    // propagate the visibility to all children too.\n    //\n    this.children.each(function (i, e) {\n      e.figure.setVisible(flag)\n    })\n\n\n    this._super(flag)\n\n    // force a relayout of the shape because the dimension has been changed\n    // by enable/disable of child shapes\n    this.setDimension(1, 1)\n\n    return this\n  },\n\n  /**\n   * \n   * Returns the Command to perform the specified Request or null.\n   *\n   * @param {draw2d.command.CommandType} request describes the Command being requested\n   * @returns {draw2d.command.Command} null or a Command\n   * @private\n   **/\n  createCommand: function (request) {\n    // it is not possible to rate a layout object\n    // ..at the moment\n    if (request.getPolicy() === draw2d.command.CommandType.ROTATE) {\n      return null\n    }\n\n\n    return this._super(request)\n  }\n})\n\n\n\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n * Using the StackLayout as their layout shape have their children placed on top of one another.\n * Order of placement is determined by the order in which the children were added, first child\n * added placed on the bottom. Only one child is visible at once.\n *\n * @author Andreas Herz\n * @extends draw2d.shape.layout.Layout\n */\ndraw2d.shape.layout.StackLayout = draw2d.shape.layout.Layout.extend(\n  /** @lends draw2d.shape.layout.StackLayout.prototype */\n  {\n  \n  NAME: \"draw2d.shape.layout.StackLayout\",\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.visibleLayer = 0\n    this.locator = new draw2d.layout.locator.XYAbsPortLocator(0, 0)\n\n    this._super(\n      extend({resizeable: true, width: 10, height: 10}, attr),\n      extend({}, setter),\n      extend({}, getter))\n\n    this.resizeListener = function (figure) {\n    }\n    // install default selection handler. Can be overridden or replaced\n    this.installEditPolicy(new draw2d.policy.figure.RectangleSelectionFeedbackPolicy())\n  },\n\n  /**\n   *\n   * Set the current visible layer of the stack layout\n   *\n   * @param {Number} visibleLayer\n   */\n  setVisibleLayer: function (visibleLayer, duration) {\n    this.getChildren().get(this.visibleLayer).setVisible(false, duration)\n    this.visibleLayer = Math.min(this.getChildren().getSize() - 1, Math.max(0, visibleLayer))\n\n    this.getChildren().get(this.visibleLayer).setVisible(true, duration)\n    return this\n  },\n\n  /**\n   *\n   * Returns the current visible layer\n   *\n   * @returns {Number}\n   */\n  getVisibleLayer: function () {\n    return this.visibleLayer\n  },\n\n  /**\n   * @inheritdoc\n   */\n  add: function (child, locator, index) {\n    // the child didn'T care about events...at the moment\n    //\n    child.hitTest = function () {\n      return false\n    }\n\n    // make all existing shapes invisible\n    //\n    this.getChildren().each(function (i, c) {\n      c.setVisible(false)\n    })\n    this.visibleLayer = this.getChildren().getSize()\n\n    // ignore the parameter \"locator\" and use the locator for the stack layout instead\n    return this._super(child, this.locator, index)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setVisible: function (flag) {\n    draw2d.shape.basic.Rectangle.prototype.setVisible.call(this, flag)\n\n\n    return this\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getMinWidth: function () {\n    let markup = (this.stroke * 2) + this.padding.left + this.padding.right\n    let width = 10\n    this.children.each(function (i, e) {\n      width = Math.max(width, e.figure.isResizeable() ? e.figure.getMinWidth() : e.figure.getWidth())\n    })\n    return width + markup\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getMinHeight: function () {\n    let markup = (this.stroke * 2) + this.padding.top + this.padding.bottom\n    let height = 10\n    this.children.each(function (i, e) {\n      height = Math.max(height, e.figure.isResizeable() ? e.figure.getMinHeight() : e.figure.getHeight())\n    })\n    return height + markup\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setDimension: function (w, h) {\n    this._super(w, h)\n\n    let width = this.width - this.padding.left - this.padding.right\n    let height = this.height - this.padding.top - this.padding.bottom\n    if (width === this._recursiveWidth && height === this._recursiveHeight) {\n      return this\n    }\n    this._recursiveHeight = height\n    this._recursiveWidth = width\n\n    this.children.each(function (i, e) {\n      if (e.figure.isResizeable()) {\n        e.figure.setDimension(width, height)\n      }\n    })\n\n    delete this._recursiveHeight\n    delete this._recursiveWidth\n\n    return this\n  }\n\n})\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * The TableLayout class arranges the children in a row/column order. Each cell can be styled\n * with valign, align and padding.\n *\n *\n * See the example below with and without padding or alignment settings\n *\n *\n * @example\n *\n *        let label1 =  new draw2d.shape.basic.Label({text:\"[0,1] with long long long long label\", fontColor:\"#00AF00\"});\n *        let label2 =  new draw2d.shape.basic.Label({text:\"[1,1] padding:10\", fontColor:\"#00AF00\"});\n *        let label3 =  new draw2d.shape.basic.Label({text:\"[2,1] align:right\", fontColor:\"#00AF00\"});\n *        let label4 =  new draw2d.shape.basic.Label({text:\"[3,1] resize:true\",resizeable:true, fontColor:\"#00AF00\"});\n *\n *        let container = new draw2d.shape.layout.TableLayout();\n *\n *        container.addRow(\"[0,0]\", label1 ,\"[0,2] align:center\");\n *        container.addRow(\"[1,0] valign:bottom\", label2,\"[1,2] long long long label\");\n *        container.addRow(\"[2,0]\", label3,\"[2,2]\");\n *        container.addRow(\"[3,0]\", label4,\"[3,2]\");\n *\n *        container.setPadding(0);\n *        container.setCellPadding(1,1, 10);\n *\n *        container.setCellAlign(0,2, \"center\");\n *        container.setCellAlign(2,1, \"right\");\n *\n *        container.setCellVerticalAlign(1, 0, \"bottom\");\n *        canvas.add(container,10,10);\n *\n *\n * @author Andreas Herz\n * @extends draw2d.shape.layout.Layout\n * @since 5.3.0\n */\ndraw2d.shape.layout.TableLayout = draw2d.shape.layout.Layout.extend(\n  /** @lends draw2d.shape.layout.TableLayout.prototype */\n  {\n\n  NAME: \"draw2d.shape.layout.TableLayout\",\n\n  DUMMY_CELL: {\n    getMinHeight: function () {\n      return 1\n    },\n    getMinWidth: function () {\n      return 1\n    },\n    off: function () {\n    }\n  },\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    let _this = this\n    this.cellLocator = {\n      relocate: function (index, figure) {\n        if (_this.repaintBlocked === true) {\n          return\n        }\n        let cell = figure.__cell\n        let layout = _this.getCellLayout(cell.row, cell.column)\n        let outerWidth = _this.getWidth()\n        let minWidth = _this.getMinWidth()\n        let widthOffset = 0\n        if (outerWidth != minWidth) {\n          widthOffset = ((outerWidth - minWidth) / _this.layoutInfos[0].length) * cell.column\n        }\n\n        let width = figure.getWidth()\n        let height = figure.getHeight()\n        let x = layout.x + _this.padding.left + layout.padding.left + widthOffset\n        let y = layout.y + _this.padding.top + layout.padding.top\n\n        // stretch the figure to fill the complete cell\n        //\n        if (figure.isResizeable()) {\n          let w = Math.max(figure.getMinWidth(), layout.w - (layout.padding.left + layout.padding.right) + widthOffset)\n          let h = Math.max(figure.getMinHeight(), layout.h - (layout.padding.top + layout.padding.bottom))\n          figure.setDimension(w, h)\n        }\n        // else apply the valign and align property\n        //\n        else {\n          // apply vertical alignment\n          //\n          switch (layout.valign) {\n            case \"middle\":\n              y = y + (layout.h - (height + layout.padding.top + layout.padding.bottom)) / 2\n              break\n            case \"bottom\":\n              y = y + (layout.h - (height + layout.padding.top + layout.padding.bottom))\n              break\n          }\n\n          // apply horizontal alignment\n          //\n          switch (layout.align) {\n            case \"center\":\n              x = x + (layout.w - (width + layout.padding.left + layout.padding.right)) / 2 + (widthOffset / 2)\n              break\n            case \"right\":\n              x = x + (layout.w - (width + layout.padding.left + layout.padding.right)) + widthOffset\n              break\n          }\n        }\n        figure.setPosition(x, y)\n      },\n      bind: function () {\n      },\n      unbind: function () {\n      },\n      translate: function (figure, diff) {\n        figure.setPosition(figure.x + diff.x, figure.y + diff.y)\n      }\n    }\n\n    this.padding = {top: 4, right: 4, bottom: 4, left: 4}\n\n    this.grid = []\n    this.layoutInfos = []\n    this.layoutInfos[0] = []\n    this.layoutInfos[0][0] = {x: 0, y: 0, w: 1, h: 1, valign: \"top\", align: \"left\"}\n\n\n    this._super(\n      extend({stroke: 1, resizeable: false}, attr),\n      extend({\n        // @attr {Number} padding the padding in pixel around the text */\n        padding: this.setPadding\n      }, setter),\n      extend({\n        padding: this.getPadding\n      }, getter))\n\n\n  },\n\n  /**\n   * \n   * Set the padding of the given cell.\n   *\n   *\n   * @param {Number|Object} padding The new padding\n   **/\n  setCellPadding: function (row, column, padding) {\n    let layout = this.getCellLayout(row, column)\n    if (layout === null) {\n      return this\n    }\n\n    if (typeof padding === \"number\") {\n      layout.padding = {top: padding, right: padding, bottom: padding, left: padding}\n    }\n    else {\n      extend(layout.padding, padding)\n    }\n\n    this.calculateLayout()\n    this.setDimension(1, 1)\n\n    return this\n  },\n\n  /**\n   * \n   * Get the padding of the outer grid.\n   *\n   **/\n  getCellPadding: function (row, column) {\n\n    let layout = this.getCellLayout(row, column)\n    if (layout === null || typeof layout.padding === \"undefined\") {\n      return {top: 0, right: 0, bottom: 0, left: 0}\n    }\n    return layout.padding\n  },\n\n\n  /**\n   * \n   * Set the padding of the outer grid.\n   *\n   *     // Alternatively you can use the attr method:\n   *     //\n   *     // set the padding for top,left,bottom,right in one call\n   *     figure.attr({\n   *       padding: 3\n   *     });\n   *\n   *     // update the padding left and top\n   *     figure.attr({\n   *       padding: {left:3, top:30}\n   *     });\n   *\n   * @param {Number|Object} padding The new padding\n   **/\n  setPadding: function (padding) {\n    if (typeof padding === \"number\") {\n      this.padding = {top: padding, right: padding, bottom: padding, left: padding}\n    }\n    else {\n      this.padding = extend(this.padding, padding)\n    }\n    this.calculateLayout()\n    this.setDimension(1, 1)\n    this.fireEvent(\"change:padding\", {value: this.padding})\n\n    return this\n  },\n\n  /**\n   * \n   * Get the padding of the outer grid.\n   *\n   **/\n  getPadding: function () {\n    return this.padding\n  },\n\n  setCanvas: function (canvas) {\n    this._super(canvas)\n    this.calculateLayout()\n    this.setDimension(2, 2)\n\n    return this\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  add: function (child, locator, index) {\n    this._super(child, locator, index)\n\n    this.setDimension(1, 1)\n\n    return this\n  },\n\n  /**\n   *\n   * \n   * Removes the row from the TableLayout\n   *\n   * @returns the removed row\n   */\n  removeRow: function (index) {\n    let _this = this\n    let removedRow = this.grid.splice(index, 1)\n    removedRow[0].forEach(function (figure) {\n      _this.remove(figure)\n    })\n\n    this.calculateLayout()\n    this.setDimension(2, 2)\n\n    return removedRow\n  },\n\n\n  /**\n   * \n   * Add a row to the table grid.\n   * This method has a variable argument list. All arguments are added in one row.\n   *\n   * @param {Array} figures variable count of figures to add as one row\n   */\n  addRow: function () {\n    let figuresToAdd = []\n    let _this = this\n    let args = Array.prototype.slice.call(arguments) // sometimes js is stupid...\n\n    let rowCount = this.grid.length + 1\n    let columnCount = this.grid.length > 0 ? Math.max(this.grid[0].length, args.length) : args.length\n\n    let row = []\n\n    args.forEach(function (figure, index) {\n      if (typeof figure === \"string\") {\n        figure = new draw2d.shape.basic.Label({text: figure})\n      }\n      row.push(figure)\n      figuresToAdd.push(figure)\n    })\n    this.grid.push(row)\n\n    // adjust the columns. All rows must have the same column count. Add empty cells\n    // if required.\n    //\n    this.grid.forEach(function (row, index) {\n      let missingColumns = columnCount - row.length\n      for (let i = 0; i < missingColumns; i++) {\n        row.push(_this.DUMMY_CELL)\n      }\n    })\n\n    let orig = this.repaintBlocked\n    this.repaintBlocked = true\n    figuresToAdd.forEach(function (figure) {\n      _this.add(figure, _this.cellLocator)\n    })\n    this.repaintBlocked = orig\n\n    this.calculateLayout()\n    this.setDimension(1, 1)\n\n    return this\n  },\n\n  getMinWidth: function () {\n    // return some good default if we are not part of the canvas.\n    // A real width/height calculation isn'T possible if the canvas not set\n    if (this.canvas === null || this.layoutInfos.length === 0) {\n      return 10\n    }\n\n    let bottom = this.layoutInfos[this.layoutInfos.length - 1]\n    let layout = bottom[bottom.length - 1]\n\n    return layout.w + layout.x + this.padding.left + this.padding.right\n  },\n\n  getMinHeight: function () {\n    // return some good default if we are not part of the canvas.\n    // A real width/height calculation isn'T possible if the canvas not set\n    if (this.canvas === null || this.layoutInfos.length === 0) {\n      return 10\n    }\n\n    let bottom = this.layoutInfos[this.layoutInfos.length - 1]\n    let layout = bottom[bottom.length - 1]\n\n    return layout.h + layout.y + this.padding.top + this.padding.bottom\n  },\n\n\n  /**\n   * \n   * Set the vertical alignment of a cell. Possible values are\n   * <ul>\n   * <li>top</li>\n   * <li>middle</li>\n   * <li>bottom</li>\n   * </ul>\n   *\n   * @param {Number} row  The row index of the cell. Starting by 0\n   * @param {Number} column The column index of the cell. Starting by 0\n   * @param {String} align The vertical alignment of the cell\n   */\n  setCellVerticalAlign: function (row, column, valign) {\n    let layout = this.getCellLayout(row, column)\n    if (layout === null) {\n      return // silently\n    }\n\n    switch (valign) {\n      case \"top\":\n      case \"middle\":\n      case \"bottom\":\n        layout.valign = valign\n        this.calculateLayout()\n        this.setDimension(1, 1)\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Get the vertical alignment of a cell. Possible values are\n   * <ul>\n   * <li>top</li>\n   * <li>middle</li>\n   * <li>bottom</li>\n   * </ul>\n   *\n   * @param {Number} row  The row index of the cell. Starting by 0\n   * @param {Number} column The column index of the cell. Starting by 0\n   * @returns {String} The vertical alignment of the cell\n   */\n  getCellVerticalAlign: function (row, column) {\n    let layout = this.getCellLayout(row, column)\n    if (layout === null) {\n      return \"top\"\n    }\n\n    return layout.valign\n  },\n\n\n  /**\n   * \n   * Set the alignment of a cell. Possible values are\n   * <ul>\n   * <li>left</li>\n   * <li>center</li>\n   * <li>right</li>\n   * </ul>\n   *\n   *\n   * @param {Number} row  The row index of the cell. Starting by 0\n   * @param {Number} column The column index of the cell. Starting by 0\n   * @param {String} align The horizontal alignment of the cell\n   */\n  setCellAlign: function (row, column, align) {\n\n    let layout = this.getCellLayout(row, column)\n    if (layout === null) {\n      return // silently\n    }\n\n    switch (align) {\n      case \"left\":\n      case \"center\":\n      case \"right\":\n        layout.align = align\n        this.calculateLayout()\n        this.setDimension(1, 1)\n    }\n\n    return this\n  },\n\n  /**\n   * \n   * Return the alignment of a cell. Possible values are\n   * <ul>\n   * <li>left</li>\n   * <li>center</li>\n   * <li>right</li>\n   * </ul>\n   *\n   *\n   * @param {Number} row  The row index of the cell. Starting by 0\n   * @param {Number} column The column index of the cell. Starting by 0\n   * return {String} The horizontal alignment of the cell\n   */\n  getCellAlign: function (row, column) {\n\n    let layout = this.getCellLayout(row, column)\n    if (layout === null) {\n      return \"left\"\n    }\n    return layout.align\n  },\n\n\n  /**\n   * \n   * Return the layout information for the given row/column or <b>null</b>\n   * if the row/column index is out of range.\n   *\n   * @private\n   */\n  getCellLayout: function (row, column) {\n    if (row < 0 || column < 0) {\n      return null // silently\n    }\n\n    if (row >= this.layoutInfos.length) {\n      return null // silently\n    }\n\n    let layouts = this.layoutInfos[row]\n    if (column >= layouts.length) {\n      return null // silently\n    }\n\n    return layouts[column]\n  },\n\n  /**\n   * \n   * Recalculate the layout of the table\n   *\n   * @private\n   */\n  calculateLayout: function () {\n    let _this = this\n    let rowCount = this.grid.length\n    let columnCount = this.grid.length > 0 ? this.grid[0].length : 0\n\n    let newLayoutInfos = []\n    for (let row = 0; row < rowCount; row++) {\n      newLayoutInfos[row] = []\n      for (let column = 0; column < columnCount; column++) {\n        newLayoutInfos[row][column] = {\n          width: 0,\n          height: 0,\n          x: 0,\n          y: 0,\n          valign: this.getCellVerticalAlign(row, column),\n          align: this.getCellAlign(row, column),\n          padding: this.getCellPadding(row, column)\n        }\n      }\n    }\n\n    // determine the heights/widths of the grid\n    //\n    let layoutWidths = new Array(columnCount + 1).join('0').split('').map(parseFloat)\n    let layoutHeights = new Array(rowCount + 1).join('0').split('').map(parseFloat)\n    this.grid.forEach(function (figures, row) {\n      for (let column = 0; column < columnCount; column++) {\n        let layout = newLayoutInfos[row][column]\n        let figure = figures[column]\n        figure.__cell = {row: row, column: column}\n        layoutHeights[row] = Math.max(layoutHeights[row], figure.getMinHeight() + layout.padding.top + layout.padding.bottom)\n        layoutWidths[column] = Math.max(layoutWidths[column], figure.getMinWidth() + layout.padding.left + layout.padding.right)\n      }\n    })\n\n    let x = 0, y = 0\n    for (let row = 0; row < rowCount; row++) {\n      for (let column = 0; column < columnCount; column++) {\n        let layout = newLayoutInfos[row][column]\n        layout.w = layoutWidths[column]\n        layout.h = layoutHeights[row]\n        layout.x = x\n        layout.y = y\n        x = x + layout.w\n      }\n      y = y + layoutHeights[row]\n      x = 0\n    }\n\n    this.layoutInfos = newLayoutInfos\n\n    return this\n  }\n})\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * The VerticalLayout class arranges the layout elements in a vertical sequence,\n * left to right, with optional gaps between the elements.\n *\n * During the execution of the setDimension() method, the minimum height of the container is calculated\n * by accumulating the minimum sizes of the elements, including stroke, gaps and padding.\n *\n * See the example below with and without gap and border settings\n *\n *\n * @example\n *\n *    // first container without any gap and a border of the parent\n *    // container\n *    let label1 =  new draw2d.shape.basic.Label({text:\"Label 1\"});\n *    let label2 =  new draw2d.shape.basic.Label({text:\"Label 2\"});\n *    let label3 =  new draw2d.shape.basic.Label({text:\"Label 3\"});\n *\n *    let container1 = new draw2d.shape.layout.VerticalLayout();\n *\n *    container1.add(label1);\n *    container1.add(label2);\n *    container1.add(label3);\n *    container1.setGap(10);\n *    container1.setStroke(2);\n *    canvas.add(container1,50,10);\n *\n *    // second container without any gab or border\n *    //\n *    let label11 =  new draw2d.shape.basic.Label({text:\"Label 1\"});\n *    let label12 =  new draw2d.shape.basic.Label({text:\"Label 2\"});\n *    let label13 =  new draw2d.shape.basic.Label({text:\"Label 3\"});\n *\n *    let container2 = new draw2d.shape.layout.VerticalLayout();\n *\n *    container2.add(label11);\n *    container2.add(label12);\n *    container2.add(label13);\n *\n *    canvas.add(container2,150,10);\n *\n * @author Andreas Herz\n * @extends draw2d.shape.layout.Layout\n */\ndraw2d.shape.layout.VerticalLayout = draw2d.shape.layout.Layout.extend(\n  /** @lends draw2d.shape.layout.VerticalLayout.prototype */\n  {\n\n  NAME: \"draw2d.shape.layout.VerticalLayout\",\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    // some layout parameter\n    //\n    this.gap = 0\n\n    // \"this\" shortcut to avoid $.proxy\n    let _this = this\n\n    this.locator = {\n      translate: function (figure, diff) {\n        figure.setPosition(figure.x + diff.x, figure.y + diff.y)\n      },\n      bind: function () {\n      },\n      unbind: function () {\n      },\n      relocate: function (index, target) {\n        let stroke = _this.getStroke()\n        let yPos = stroke + _this.padding.top // respect the border and padding of the shape\n        let xPos = _this.padding.left\n\n        for (let i = 0; i < index; i++) {\n          let child = _this.children.get(i).figure\n          if (child.isVisible()) {\n            yPos += child.getHeight() + _this.gap\n          }\n        }\n\n        target.setPosition(xPos, yPos)\n      }\n    }\n\n    this._super(\n      extend({width: 10, height: 10}, attr),\n      extend({\n        // @attr {Number} gap the gap between the children shapes */\n        gap: this.setGap\n      }, setter),\n      extend({\n        gap: this.getGap\n      }, getter))\n\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  add: function (child, locator, index) {\n    this._super(child, this.locator, index)\n\n    this.setDimension(1, 1)\n\n    return this\n  },\n\n\n  /**\n   * \n   * Set the gap width between child components within this layout.\n   * This will only affect the space between components, not the space around all the components in the layout.\n   *\n   * @param {Number} gap The space, in pixels, between items.\n   */\n  setGap: function (gap) {\n    this.gap = gap\n    // this forces a relayout of the element\n    this.setDimension(1, 1)\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getMinWidth: function () {\n    let markup = (this.stroke * 2) + this.padding.left + this.padding.right\n    let width = 10\n    this.children.each(function (i, e) {\n      if (e.figure.isVisible())\n        width = Math.max(width, e.figure.isResizeable() ? e.figure.getMinWidth() : e.figure.getWidth())\n    })\n    return width + markup\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getMinHeight: function () {\n    let _this = this\n    let gap = 0\n    let markup = (this.stroke * 2) + this.padding.top + this.padding.bottom\n    let height = 0\n\n    this.children.each(function (i, e) {\n      if (e.figure.isVisible()) {\n        height += ((e.figure.isResizeable() ? e.figure.getMinHeight() : e.figure.getHeight()) + gap)\n        // first element is iterated. Now we must add the gap to all next elements\n        gap = _this.gap\n      }\n    })\n\n    return height + markup\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setDimension: function (w, h) {\n    this._super(w, h)\n\n    let width = this.width - this.padding.left - this.padding.right\n    if (width === this._recursiveWidth) {\n      return this\n    }\n    this._recursiveWidth = width\n\n    this.children.each(function (i, e) {\n      if (e.figure.isResizeable() && e.figure.isVisible()) {\n        e.figure.setDimension(width, e.figure.getMinHeight())\n      }\n    })\n\n    delete this._recursiveWidth\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getPersistentAttributes: function () {\n    let memento = this._super()\n\n    memento.gap = this.gap\n\n    return memento\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.gap === \"number\") {\n      this.gap = memento.gap\n    }\n\n    return this\n  }\n\n\n})\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * A simple Node which has a  InputPort and OutputPort. Mainly used for demo and examples.\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.node.Between({color: \"#3d3d3d\"});\n *\n *    canvas.add(figure,50,10);\n *\n * @extends draw2d.shape.basic.Rectangle\n */\ndraw2d.shape.node.Between = draw2d.shape.basic.Rectangle.extend(\n  /** @lends draw2d.shape.node.Between.prototype */\n  {\n  \n  NAME: \"draw2d.shape.node.Between\",\n\n  DEFAULT_COLOR: new draw2d.util.Color(\"#4D90FE\"),\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({\n      bgColor: this.DEFAULT_COLOR,\n      color: this.DEFAULT_COLOR.darker(),\n      width: 50,\n      height: 50\n    }, attr), setter, getter)\n\n    this.createPort(\"output\")\n    this.createPort(\"input\")\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * A simple Node which has a InputPort. Mainly used for demo and examples.\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.node.End({color: \"#3d3d3d\"});\n *\n *    canvas.add(figure,50,10);\n *\n * @extends draw2d.shape.basic.Rectangle\n */\ndraw2d.shape.node.End = draw2d.shape.basic.Rectangle.extend(\n  /** @lends draw2d.shape.node.End.prototype */\n  {\n  \n  NAME: \"draw2d.shape.node.End\",\n\n  DEFAULT_COLOR: new draw2d.util.Color(\"#4D90FE\"),\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({\n      bgColor: this.DEFAULT_COLOR,\n      color: this.DEFAULT_COLOR.darker(),\n      width: 50,\n      height: 50\n    }, attr), setter, getter)\n\n    this.createPort(\"input\")\n\n  }\n\n})\n","import draw2d from '../../packages'\nimport jsonUtil from '../../util/JSONUtil'\n\n\n/**\n * @class\n *\n * A horizontal bus shape with a special kind of port handling. The hole figure is a hybrid port.\n *\n *\n * @example\n *\n *    canvas.add( new draw2d.shape.node.Fulcrum(),50,10);\n *    canvas.add( new draw2d.shape.node.Fulcrum(),80,100);\n *    canvas.add( new draw2d.shape.node.Fulcrum(),150,50);\n *\n * @extends draw2d.shape.node.Hub\n */\ndraw2d.shape.node.Fulcrum = draw2d.shape.node.Hub.extend(\n  /** @lends draw2d.shape.node.Fulcrum.prototype */\n  {\n\n  NAME: \"draw2d.shape.node.Fulcrum\",\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({width: 40, height: 40}, attr), setter, getter)\n\n\n    this.port.setConnectionAnchor(new draw2d.layout.anchor.ConnectionAnchor(this.port))\n    this.port.setVisible(true)\n    this.port.hitTest = this.port._orig_hitTest\n\n    this.setConnectionDirStrategy(0)\n    this.setColor(null)\n    this.setRadius(10)\n    this.setBackgroundColor(null)\n    this.setStroke(0)\n    this.installEditPolicy(new draw2d.policy.figure.AntSelectionFeedbackPolicy())\n  },\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return this\n    }\n\n    attributes = attributes || {}\n\n    // set some good defaults if the parent didn't\n    jsonUtil.ensureDefault(attributes, \"fill\", this.bgColor.rgba())\n\n    return this._super(attributes)\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A horizontal bus shape with a special kind of port handling. The hole figure is a hybrid port.\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.node.HorizontalBus({width:300, height:20, text:\"Horizontal Bus\"});\n *\n *    canvas.add(figure,50,10);\n *\n * @extends draw2d.shape.node.Hub\n */\ndraw2d.shape.node.HorizontalBus = draw2d.shape.node.Hub.extend(\n  /** @lends draw2d.shape.node.HorizontalBus.prototype */\n  {\n\n  NAME: \"draw2d.shape.node.HorizontalBus\",\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.setConnectionDirStrategy(1)\n\n    this.installEditPolicy(new draw2d.policy.figure.HBusSelectionFeedbackPolicy())\n  }\n\n})\n","import draw2d from '../../packages'\nimport Color from '../../util/Color'\n\n\n/**\n * @class\n *\n * A hub is a shape with a special kind of port handling. The hole figure is a hybrid port. You can drag&drop a Port directly on\n * the figure.\n *\n *\n * @example\n *\n *\n *    canvas.add(new draw2d.shape.node.Start({x:50, y:50}));\n *    canvas.add(new draw2d.shape.node.Hub({x:150, y:50}));\n *\n * @extends draw2d.shape.basic.Rectangle\n */\ndraw2d.shape.node.Hub = draw2d.shape.basic.Rectangle.extend(\n  /** @lends draw2d.shape.node.Hub.prototype */\n  {\n\n  NAME: \"draw2d.shape.node.Hub\",\n\n  DEFAULT_COLOR: new Color(\"#4DF0FE\"),\n  BACKGROUND_COLOR: new Color(\"#29AA77\"),\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.label = null\n\n    this._super(\n      extend({color: this.DEFAULT_COLOR.darker(), bgColor: this.BACKGROUND_COLOR}, attr),\n      extend({\n        // deprecated\n        label: this.setLabel,\n        // @attr {String} text the text to display in the center of the hub */\n        text: this.setLabel\n      }, setter),\n      extend({\n        label: this.getLabel,\n        text: this.getLabel\n      }, getter))\n\n    let _port = this.port = this.createPort(\"hybrid\", new draw2d.layout.locator.CenterLocator())\n\n    let r = draw2d.geo.Rectangle\n    this.CONNECTION_DIR_STRATEGY = [function (peerPort) {\n      return _port.getParent().getBoundingBox().getDirection(peerPort.getAbsolutePosition())\n    },\n      function (peerPort) {\n        return _port.getAbsoluteY() > peerPort.getAbsoluteY() ? r.DIRECTION_UP : r.DIRECTION_DOWN\n      },\n      function (peerPort) {\n        return _port.getAbsoluteX() > peerPort.getAbsoluteX() ? r.DIRECTION_LEFT : r.DIRECTION_RIGHT\n      }]\n\n    // redirect the glow effect and the hitTest for the port to the parent node\n    //\n    this.port.setGlow = this.setGlow.bind(this)\n    this.port._orig_hitTest = this.port.hitTest\n    this.port.hitTest = this.hitTest.bind(this)\n\n\n    // provide a special connection anchor for this port. We use the bounding box of the\n    // parent as connection border\n    //\n    this.port.setConnectionAnchor(new draw2d.layout.anchor.ShortesPathConnectionAnchor(this.port))\n    this.port.setVisible(false)\n    this.port.setVisible = function () {\n    }\n\n    this.setConnectionDirStrategy(0)\n  },\n\n  /**\n   * \n   * Called by the framework during drag&drop operations if the user drag a figure over this figure\n   *\n   * @param {draw2d.Figure} draggedFigure The figure which is currently dragging\n   *\n   * @returns {draw2d.Figure} the figure which should receive the drop event or null if the element didn't want a drop event\n   **/\n  delegateTarget: function (draggedFigure) {\n    // redirect the dragEnter handling to the hybrid port\n    //\n    return this.getHybridPort(0).delegateTarget(draggedFigure)\n  },\n\n\n  /**\n   * \n   * This value is relevant for the interactive resize of the figure.\n   *\n   * @returns {Number} Returns the min. width of this object.\n   */\n  getMinWidth: function () {\n    if (this.label !== null) {\n      return Math.max(this.label.getMinWidth(), this._super())\n    }\n    return this._super()\n  },\n\n\n  /**\n   * @inheritdoc\n   *\n   * @private\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = attributes || {}\n\n    // set some good defaults if the parent didn't\n    if (typeof attributes.fill === \"undefined\") {\n      if (this.bgColor !== null) {\n        attributes.fill = \"90-\" + this.bgColor.hash() + \":5-\" + this.bgColor.lighter(0.3).hash() + \":95\"\n      }\n      else {\n        attributes.fill = \"none\"\n      }\n    }\n\n    this._super(attributes)\n  },\n\n  /**\n   * \n   * Set the label for the Hub\n   *\n   *     // Alternatively you can use the attr method:\n   *     figure.attr({\n   *       text: label\n   *     });\n   *\n   *\n   * @param {String} label\n   * @since 3.0.4\n   */\n  setLabel: function (label) {\n    // Create any Draw2D figure as decoration for the connection\n    //\n    if (this.label === null) {\n      let _this = this\n\n      this.label = new draw2d.shape.basic.Label({text: label, color: \"#0d0d0d\", fontColor: \"#0d0d0d\", stroke: 0})\n      // add the new decoration to the connection with a position locator.\n      //\n      this.add(this.label, new draw2d.layout.locator.CenterLocator())\n      this.label.setSelectionAdapter(function () {\n        return _this\n      })\n      this.label.delegateTarget = function () {\n        return _this.port\n      }\n    }\n    else {\n      this.label.setText(label)\n    }\n\n  },\n\n  /**\n   * \n   * Set the strategy for the connection direction calculation.<br>\n   * <br>\n   *\n   * <ul>\n   * <li>0 - Use the best/shortest direction (UP/RIGHT/DOWN/LEFT) for the connection routing (default)</li>\n   * <li>1 - Use UP/DOWN for the connection direction</li>\n   * <li>2 - Use LEFT/RIGHT</li>\n   * </ul>\n   * @param {Number} strategy the connection routing strategy to use\n   * @since 2.4.3\n   */\n  setConnectionDirStrategy: function (strategy) {\n    switch (strategy) {\n      case 0:\n      case 1:\n      case 2:\n        this.port.getConnectionDirection = this.CONNECTION_DIR_STRATEGY[strategy]\n        break\n    }\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getPersistentAttributes: function () {\n    let memento = this._super()\n\n    memento.dirStrategy = this.CONNECTION_DIR_STRATEGY.indexOf(this.port.getConnectionDirection)\n    if (this.label !== null) {\n      memento.label = this.label.getText()\n    }\n\n    return memento\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.dirStrategy === \"number\") {\n      this.setConnectionDirStrategy(memento.dirStrategy)\n    }\n\n    if (typeof memento.label !== \"undefined\") {\n      this.setLabel(memento.label)\n    }\n  }\n\n})\n","import draw2d from '../../packages'\nimport extend from '../../util/extend'\n\n\n/**\n * @class\n *\n * A Node is the base class for all figures which can have {@link draw2d.Port}s. A {@link draw2d.Port} is the\n * anchor for a {@link draw2d.Connection} line.<br><br>A {@link draw2d.Port} is a green dot which can\n * be dragged and dropped over another port.<br>\n * @inheritable\n * @author Andreas Herz\n * @extends draw2d.Figure\n */\ndraw2d.shape.node.Node = draw2d.Figure.extend(\n  /** @lends draw2d.shape.node.Node.prototype */\n  {\n  \n  NAME: \"draw2d.shape.node.Node\",\n\n  /**\n   * Creates a new Node element which are not assigned to any canvas.\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this.inputPorts = new draw2d.util.ArrayList()\n    this.outputPorts = new draw2d.util.ArrayList()\n    this.hybridPorts = new draw2d.util.ArrayList()\n\n    // flag which indicates if the figure should read/write ports to\n    // JSON\n    this.persistPorts = true\n\n    // Flags just for performance reasons\n    //\n    this.portRelayoutRequired = true\n\n    // just for performance reasons\n    //\n    this.cachedPorts = null\n\n    this._super(\n      extend({width: 50, height: 50}, attr),\n      extend({\n        // @attr {Number} indicate whenever you want persists the ports too */\n        persistPorts: this.setPersistPorts\n      }, setter),\n      extend({\n        persistPorts: this.getPersistPorts\n      }, getter))\n  },\n\n\n  /**\n   *\n   * Indicates if the node should read/write the ports via the draw2d.Figure.getPersistenAttributes\n   * to the JSON object\n   *\n   * @param {Boolean} flag\n   * @since 5.0.4\n   */\n  setPersistPorts: function (flag) {\n    this.persistPorts = flag\n    this.fireEvent(\"change:persistPorts\", {value: this.persistPorts})\n\n    return this\n  },\n\n  /**\n   *\n   * Indicates if the figure writes the ports to the JSON structore too.\n   * Default is \"false\"\n   *\n   * @returns {Boolean}\n   */\n  getPersistPorts: function () {\n    return this.persistPorts\n  },\n\n  /**\n   * @inheritdoc\n   */\n  toFront: function (figure) {\n    this._super(figure)\n\n    this.getPorts().each((i, port) => {\n      port.getConnections().each((i, connection) => connection.toFront(figure))\n      port.toFront(this)\n    })\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  toBack: function (figure) {\n\n    this.getPorts().each((i, port) => {\n      port.getConnections().each((i, connection) => connection.toBack(figure))\n      port.toBack(figure)\n    })\n\n    this._super(figure)\n\n    return this\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setVisible: function (flag, duration) {\n    // adjust the visibility of the ports to the parent state\n    //\n    if (!flag) {\n      this.getPorts().each(function (i, port) {\n        port.__initialVisibilityState = port.isVisible()\n        port.setVisible(false, duration)\n      })\n    }\n    else {\n      this.getPorts().each(function (i, port) {\n        if (typeof port.__initialVisibilityState !== \"undefined\") {\n          port.setVisible(port.__initialVisibilityState, duration)\n        }\n        else {\n          port.setVisible(true, duration)\n        }\n        delete port.__initialVisibilityState\n      })\n    }\n    this._super(flag, duration)\n  },\n\n\n  /**\n   *\n   * Return all ports of the node. The results contains\n   * all ports of the children too per default. Set <b>recursive</b>\n   * to false to retrieve direct assigned ports only.\n   *\n   * @param {Boolean} [recursive] indicates if the method should return children ports too. Default is <b>true</b>\n   * @returns  {draw2d.util.ArrayList}\n   **/\n  getPorts: function (recursive) {\n\n    if (typeof recursive === \"boolean\" && recursive === false) {\n      let ports = new draw2d.util.ArrayList()\n      ports.addAll(this.inputPorts)\n      ports.addAll(this.outputPorts)\n      ports.addAll(this.hybridPorts)\n      return ports\n    }\n\n    if (this.cachedPorts === null) {\n      this.cachedPorts = new draw2d.util.ArrayList()\n      this.cachedPorts.addAll(this.inputPorts)\n      this.cachedPorts.addAll(this.outputPorts)\n      this.cachedPorts.addAll(this.hybridPorts)\n\n      this.children.each((i, e) => {\n        this.cachedPorts.addAll(e.figure.getPorts())\n      })\n    }\n    return this.cachedPorts\n  },\n\n\n  /**\n   *\n   * Return all input ports of the node.\n   *\n   * @returns {draw2d.util.ArrayList}\n   **/\n  getInputPorts: function () {\n    return this.inputPorts\n      .clone()\n      .addAll(this.hybridPorts)\n  },\n\n  /**\n   *\n   * Return all output ports of the node.\n   *\n   * @returns {draw2d.util.ArrayList}\n   **/\n  getOutputPorts: function () {\n    return this.outputPorts\n      .clone()\n      .addAll(this.hybridPorts)\n  },\n\n\n  /**\n   *\n   * Clone the figure. <br>\n   * You must override and implement the methods <b>getPersistentAttributes</b> and <b>setPersistentAttributes</b> for your custom\n   * figures if the have special attributes.\n   *\n   * The clone() method performs a deep copy of the object, meaning that it copies the children, ports and decorations\n   * per default. You can control the clone procedure with the 'cloneMetaData'.\n   *\n   *\n   * @param {Object} [cloneMetaData] controls the clone procedure\n   * @param {Boolean} [cloneMetaData.excludeChildren] set it to true if you want exclude the children.\n   * @param {Boolean} [cloneMetaData.excludePorts] set it to true if you want exclude the ports of the node.\n   *\n   * @since 4.1.0\n   * @experimental\n   */\n  clone: function (cloneMetaData) {\n    cloneMetaData = extend({excludePorts: false}, cloneMetaData)\n\n    let clone = this._super(cloneMetaData)\n\n    // remove all ports of the clone. the \"init\" method can have create some. but this must\n    // removed because we want a clone of an existing figure\n    //\n    if (cloneMetaData.excludePorts === false) {\n      clone.resetPorts()\n      let ports = this.getPorts(false)\n\n      ports.each(function (i, port) {\n        let clonePort = port.clone()\n        let locator = port.getLocator().clone()\n        clone.addPort(clonePort, locator)\n      })\n    }\n\n    return clone\n  },\n\n  /**\n   *\n   * Return the port with the corresponding name.\n   *\n   *\n   * @param {String} portName The name of the port to return.\n   * @returns {draw2d.Port} Returns the port with the hands over name or null.\n   **/\n  getPort: function (portName) {\n    return this.getPorts().find(e => e.getName() === portName)\n  },\n\n  /**\n   *\n   * Return the input port with the corresponding name.\n   *\n   *\n   * @param {String/Number} portNameOrIndex The name or numeric index of the port to return.\n   * @returns {draw2d.InputPort} Returns the port with the hands over name or null.\n   **/\n  getInputPort: function (portNameOrIndex) {\n    if (typeof portNameOrIndex === \"number\") {\n      return this.inputPorts.get(portNameOrIndex)\n    }\n\n    for (let i = 0; i < this.inputPorts.getSize(); i++) {\n      let port = this.inputPorts.get(i)\n      if (port.getName() === portNameOrIndex) {\n        return port\n      }\n    }\n\n    return null\n  },\n\n  /**\n   *\n   * Return the output port with the corresponding name.\n   *\n   * @param {String/Number} portNameOrIndex The name or the numeric index of the port to return.\n   * @returns {draw2d.OutputPort} Returns the port with the hands over name or null.\n   **/\n  getOutputPort: function (portNameOrIndex) {\n    if (typeof portNameOrIndex === \"number\") {\n      return this.outputPorts.get(portNameOrIndex)\n    }\n\n    for (let i = 0; i < this.outputPorts.getSize(); i++) {\n      let port = this.outputPorts.get(i)\n      if (port.getName() === portNameOrIndex) {\n        return port\n      }\n    }\n\n    return null\n  },\n\n  /**\n   *\n   * Return the input port with the corresponding name.\n   *\n   *\n   * @param {String/Number} portNameOrIndex The name or numeric index of the port to return.\n   * @returns {draw2d.InputPort} Returns the port with the hands over name or null.\n   **/\n  getHybridPort: function (portNameOrIndex) {\n    if (typeof portNameOrIndex === \"number\") {\n      return this.hybridPorts.get(portNameOrIndex)\n    }\n\n    for (let i = 0; i < this.hybridPorts.getSize(); i++) {\n      let port = this.hybridPorts.get(i)\n      if (port.getName() === portNameOrIndex) {\n        return port\n      }\n    }\n\n    return null\n  },\n\n  /**\n   *\n   * Add a port to this node at the given position.<br>\n   *\n   * @param {draw2d.Port} port The new port to add.\n   * @param {draw2d.layout.locator.Locator} locator The layout for the port.\n   **/\n  addPort: function (port, locator) {\n    if (!(port instanceof draw2d.Port)) {\n      throw \"Argument is not typeof 'draw2d.Port'. \\nFunction: draw2d.shape.node.Node#addPort\"\n    }\n\n    // add to the internal cache if already build\n    if (this.cachedPorts !== null) {\n      this.cachedPorts.add(port)\n    }\n\n    this.portRelayoutRequired = true\n\n    if (port instanceof draw2d.InputPort) {\n      this.inputPorts.add(port)\n    }\n    else if (port instanceof draw2d.OutputPort) {\n      this.outputPorts.add(port)\n    }\n    else if (port instanceof draw2d.HybridPort) {\n      this.hybridPorts.add(port)\n    }\n\n    if ((typeof locator !== \"undefined\") && (locator instanceof draw2d.layout.locator.Locator)) {\n      port.setLocator(locator)\n    }\n\n    port.setParent(this)\n    port.setCanvas(this.canvas)\n\n    // You can't delete a port with the [DEL] key if a port is a child of a node\n    port.setDeleteable(false)\n\n    if (this.canvas !== null) {\n      port.getShapeElement()\n      this.canvas.registerPort(port)\n    }\n\n    return port\n  },\n\n  /**\n   *\n   * Remove all ports of this node\n   *\n   * @since 5.0.0\n   * @returns {this}\n   */\n  resetPorts: function () {\n    this.getPorts().each((i, port) => this.removePort(port))\n    return this\n  },\n\n\n  /**\n   *\n   * Removes a port and all related connections from this node.<br>\n   *\n   * @param {draw2d.Port} port The port to remove.\n   * @returns {this}\n   **/\n  removePort: function (port) {\n    this.portRelayoutRequired = true\n\n    this.cachedPorts = null\n    this.inputPorts.remove(port)\n    this.outputPorts.remove(port)\n    this.hybridPorts.remove(port)\n\n    if (port.getCanvas() !== null) {\n      port.getCanvas().unregisterPort(port)\n      // remove the related connections of the port too.\n      let connections = port.getConnections()\n      for (let i = 0; i < connections.getSize(); ++i) {\n        port.getCanvas().remove(connections.get(i))\n      }\n    }\n\n    port.setCanvas(null)\n\n    return this\n  },\n\n  /**\n   *\n   * Create a standard Port for this element. Inherited class can override this\n   * method to create its own type of ports.\n   *\n   * @param {String} type the type of the requested port. possible [\"input\", \"output\"]\n   * @param {draw2d.layout.locator.Locator} [locator] the layouter to use for this port\n   * @template\n   */\n  createPort: function (type, locator) {\n    let newPort = null\n    let count = 0\n\n    switch (type) {\n      case \"input\":\n        newPort = draw2d.Configuration.factory.createInputPort(this)\n        count = this.inputPorts.getSize()\n        break\n      case \"output\":\n        newPort = draw2d.Configuration.factory.createOutputPort(this)\n        count = this.outputPorts.getSize()\n        break\n      case \"hybrid\":\n        newPort = draw2d.Configuration.factory.createHybridPort(this)\n        count = this.hybridPorts.getSize()\n        break\n      default:\n        throw \"Unknown type [\" + type + \"] of port requested\"\n    }\n\n    newPort.setName(type + count)\n\n    this.addPort(newPort, locator)\n    // relayout the ports\n    this.setDimension(this.width, this.height)\n\n    return newPort\n  },\n\n  /**\n   *\n   * Return all connections related to this node.\n   *\n   * @returns {draw2d.util.ArrayList}\n   */\n  getConnections: function () {\n    let connections = new draw2d.util.ArrayList()\n    let ports = this.getPorts()\n    for (let i = 0; i < ports.getSize(); i++) {\n      let port = ports.get(i)\n      // Do NOT add twice the same connection if it is linking ports from the same node\n      for (let c = 0, c_size = port.getConnections().getSize(); c < c_size; c++) {\n        if (!connections.contains(port.getConnections().get(c))) {\n          connections.add(port.getConnections().get(c))\n        }\n      }\n    }\n    return connections\n  },\n\n\n  /**\n   * @returns {this}\n   */\n  setCanvas: function (canvas) {\n    let oldCanvas = this.canvas\n    this._super(canvas)\n\n    let ports = this.getPorts()\n    if (oldCanvas !== null) {\n      ports.each((i, port) => oldCanvas.unregisterPort(port))\n    }\n\n    if (canvas !== null) {\n      ports.each((i, port) => {\n        port.setCanvas(canvas)\n        canvas.registerPort(port)\n      })\n      // relayout the ports\n      this.setDimension(this.width, this.height)\n    }\n    else {\n      ports.each((i, port) => port.setCanvas(null))\n    }\n    return this\n  },\n\n  /**\n   * @returns {this}\n   */\n  setRotationAngle: function (angle) {\n    this.portRelayoutRequired = true\n    this._super(angle)\n\n    this.layoutPorts()\n\n    return this\n  },\n\n  /**\n   * @returns {this}\n   */\n  setDimension: function (w, h) {\n    this.portRelayoutRequired = true\n    this._super(w, h)\n\n    return this\n  },\n\n  /**\n   *\n   * Called if the value of any port has been changed\n   *\n   * @param {draw2d.Port} relatedPort\n   * @template\n   */\n  onPortValueChanged: function (relatedPort) {\n  },\n\n  /**\n   * @private\n   * @return {this}\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return this\n    }\n\n    this._super(attributes)\n    this.layoutPorts()\n\n    return this\n  },\n\n  /**\n   *\n   *\n   * @private\n   * @returns {this}\n   */\n  layoutPorts: function () {\n    if (this.portRelayoutRequired === false) {\n      return this//silently\n    }\n    this.portRelayoutRequired = false\n\n    // layout the ports\n    //\n    this.outputPorts.each((i, port) => port.locator.relocate(i, port))\n    this.inputPorts.each((i, port) => port.locator.relocate(i, port))\n    this.hybridPorts.each((i, port) => port.locator.relocate(i, port))\n\n    return this\n  },\n\n  /**\n   *\n   * Returns the Command to perform the specified Request or null.\n   *\n   * @param {draw2d.command.CommandType} request describes the Command being requested\n   * @returns {draw2d.command.Command} null or a Command\n   * @private\n   **/\n  createCommand: function (request) {\n    if (request === null) {\n      return null\n    }\n\n    if (request.getPolicy() === draw2d.command.CommandType.ROTATE) {\n      return new draw2d.command.CommandRotate(this, (this.getRotationAngle() + 90) % 360)\n    }\n\n\n    return this._super(request)\n  },\n\n\n  /**\n   *\n   * Return an objects with all important attributes for XML or JSON serialization\n   *\n   * @returns {Object}\n   */\n  getPersistentAttributes: function () {\n    let memento = this._super()\n\n    // write all ports to the JSON\n    //\n    if (this.persistPorts === true) {\n      memento.ports = []\n      this.getPorts().each(function (i, port) {\n        console.log(port.getLocator())\n        console.log(port.getLocator().attr())\n        memento.ports.push(extend(port.getPersistentAttributes(), {\n          name: port.getName(),\n          port: port.NAME,\n          locator: port.getLocator().NAME,\n          locatorAttr: port.getLocator().attr()\n        }))\n      })\n    }\n\n    return memento\n  },\n\n  /**\n   *\n   * Read all attributes from the serialized properties and transfer them into the shape.\n   *\n   * @param {Object} memento\n   * @returns {this}\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.ports !== \"undefined\") {\n      // we read the ports from the JSON and now we save it to the JSON too.\n      this.persistPorts = true\n\n      // remove all ports created in the init method\n      //\n      this.resetPorts()\n\n      // and restore all ports of the JSON document instead.\n      //\n      memento.ports.forEach((e) => {\n        let locator = eval(\"new \" + e.locator + \"()\")\n        if(e.locatorAttr) {\n          locator.attr(e.locatorAttr)\n        }\n\n        let port = eval(\"new \" + e.port + \"()\")\n        port.setPersistentAttributes(e)\n        this.addPort(port, locator)\n      })\n    }\n\n    return this\n  }\n\n})\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A generic Node which has an OutputPort. Mainly used for demos and examples.\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.node.Start({color: \"#3d3d3d\"});\n *\n *    canvas.add(figure,50,10);\n *\n * @extends draw2d.shape.basic.Rectangle\n */\ndraw2d.shape.node.Start = draw2d.shape.basic.Rectangle.extend(\n  /** @lends draw2d.shape.node.Start.prototype */\n  {\n\n  NAME: \"draw2d.shape.node.Start\",\n  DEFAULT_COLOR: new draw2d.util.Color(\"#4D90FE\"),\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(extend({\n      bgColor: this.DEFAULT_COLOR,\n      color: this.DEFAULT_COLOR.darker(),\n      width: 50,\n      height: 50\n    }, attr), setter, getter)\n    this.createPort(\"output\")\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A horizontal bus shape with a special kind of port handling. The hole figure is a hybrid port.\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.node.VerticalBus({width:40, height:300, text:\"Vertical Bus\"});\n *\n *    canvas.add(figure,50,10);\n *\n * @extends draw2d.shape.node.Hub\n */\ndraw2d.shape.node.VerticalBus = draw2d.shape.node.Hub.extend(\n  /** @lends draw2d.shape.node.VerticalBus.prototype */\n  {\n  \n  NAME: \"draw2d.shape.node.VerticalBus\",\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.setConnectionDirStrategy(2)\n    this.installEditPolicy(new draw2d.policy.figure.VBusSelectionFeedbackPolicy())\n  },\n\n\n  /**\n   * \n   * set the label for the Hub\n   *\n   * @param {String} labelString\n   * @since 3.0.4\n   */\n  setLabel: function (labelString) {\n    let mustAdjustTheAngel = this.label === null\n\n    this._super(labelString)\n\n    if (mustAdjustTheAngel === true && this.label !== null) {\n      this.label.setRotationAngle(90)\n    }\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getMinHeight: function () {\n    if (this.shape === null && this.label === null) {\n      return 0\n    }\n\n    if (this.label !== null) {\n      return this.label.getMinWidth()\n    }\n\n    return this._super()\n  },\n\n  /**\n   * @inheritdoc\n   */\n  getMinWidth: function () {\n    if (this.shape === null && this.label === null) {\n      return 0\n    }\n\n    if (this.label !== null) {\n      return this.label.getMinHeight()\n    }\n\n    return this._super()\n  }\n\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Simple Post-it like figure with text. Can be used for annotations or documentation.\n *\n *\n * @example\n *\n *    let shape =  new draw2d.shape.note.PostIt({\n *       text:\"This is a simple sticky note\",\n *       color:\"#000000\",\n *       padding:20\n *    });\n *\n *    canvas.add(shape,40,10);\n *\n * @author Andreas Herz\n * @extends draw2d.shape.basic.Label\n */\ndraw2d.shape.note.PostIt = draw2d.shape.basic.Label.extend(\n  /** @lends draw2d.shape.note.PostIt.prototype */\n  {\n\n  NAME: \"draw2d.shape.note.PostIt\",\n\n  /**\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.setStroke(1)\n    this.setBackgroundColor(\"#5b5b5b\")\n    this.setColor(\"#FFFFFF\")\n    this.setFontColor(\"#ffffff\")\n    this.setFontSize(14)\n    this.setPadding(5)\n    this.setRadius(5)\n  }\n})\n\n\n\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * NOT FOR PRODUCTIVE\n *\n * Checkout [Wikipedia PERT][1] for more information.\n *\n * Double click on the Task name or the top middle number to change the value.\n *\n *\n * @example\n *\n *    canvas.add( new draw2d.shape.pert.Start(),10,10);\n *    canvas.add( new draw2d.shape.pert.Activity(),80,130);\n *    canvas.add( new draw2d.shape.pert.Activity(),180,50);\n *\n * [1] http://en.wikipedia.org/wiki/Program_Evaluation_and_Review_Technique\n *\n * @extends draw2d.shape.layout.VerticalLayout\n */\ndraw2d.shape.pert.Activity = draw2d.shape.layout.VerticalLayout.extend(\n  /** @lends draw2d.shape.pert.Activity.prototype */\n  {\n\n  NAME: \"draw2d.shape.pert.Activity\",\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    // shortcut for some callback methods to avoid $.proxy wrapper\n    let _this = this\n\n    // persistence values for the activity\n    // will be stored/read in the JSON\n    this.mementoValues = {\n      duration: null\n    }\n\n    // just some color attributes for the rendering/gradient\n    this.bgColor = new draw2d.util.Color(\"#f3f3f3\")\n    this.lighterBgColor = this.bgColor.lighter(0.2).rgba()\n    this.darkerBgColor = this.bgColor.darker(0.2).rgba()\n\n\n    this._super(extend({bgColor: this.bgColor, stroke: 2, radius: 2, color: this.darkerBgColor}, attr), setter, getter)\n\n    // Compose the top row of the shape\n    //\n    let top = new draw2d.shape.layout.HorizontalLayout({stroke: 0})\n\n\n    this.earlyStartLabel = this.createLabel(\"Early Start\").setStroke(0)\n\n    this.durationLabel = new draw2d.shape.basic.Label({\n      text: \"Duration\",\n      stroke: 1,\n      color: this.darkerBgColor,\n      radius: 0,\n      bgColor: null,\n      padding: 5\n    })\n    // duration label has a inplaceEditor for the value\n    this.durationLabel.installEditor(new draw2d.ui.LabelEditor({\n      onCommit: function (value) {\n        _this.setDuration(parseFloat(value))\n      }\n    }))\n\n    this.earlyEndLabel = this.createLabel({text: \"Early End\", stroke: 0})\n\n    top.add(this.earlyStartLabel)\n    top.add(this.durationLabel)\n    top.add(this.earlyEndLabel)\n\n\n    // the middle part of the shape\n    // This part contains the ports for the connection\n    //\n    this.activityLabel = new draw2d.shape.basic.Label({\n      text: \"Activity Name\",\n      radius: 0,\n      padding: 10,\n      color: this.darkerBgColor,\n      bgColor: null\n    })\n    // direct editor for the label\n    this.activityLabel.installEditor(new draw2d.ui.LabelInplaceEditor())\n\n    this.inputPort = this.activityLabel.createPort(\"input\")\n    this.inputPort.getActivity = function () {\n      return _this\n    }\n    this.inputPort.onConnect = function () {\n      _this.setDuration(_this.mementoValues.duration)\n    }\n    this.inputPort.onDisconnect = function () {\n      _this.setDuration(_this.mementoValues.duration)\n    }\n    this.inputPort.setValue = function (anyValue) {\n      _this.setDuration(_this.mementoValues.duration)\n    }\n\n    this.outputPort = this.activityLabel.createPort(\"output\")\n    this.outputPort.getActivity = function () {\n      return _this\n    }\n    this.outputPort.onConnect = function () {\n      _this.setDuration(_this.mementoValues.duration)\n    }\n    this.outputPort.onDisconnect = function () {\n      _this.setDuration(_this.mementoValues.duration)\n    }\n\n\n    // the bottom of the activity shape\n    //\n    let bottom = new draw2d.shape.layout.HorizontalLayout({stroke: 0})\n\n\n    this.lateStartLabel = this.createLabel(\"Late Start\").setStroke(0)\n    this.stackLabel = this.createLabel(\"Stack\")\n    this.lateEndLabel = this.createLabel(\"Late End\").setStroke(0)\n\n    bottom.add(this.lateStartLabel)\n    bottom.add(this.stackLabel)\n    bottom.add(this.lateEndLabel)\n\n    // finally compose the shape with top/middle/bottom in VerticalLayout\n    //\n    this.add(top)\n    this.add(this.activityLabel)\n    this.add(bottom)\n\n\n    // set some good default value for the activity\n    //\n    this.setDuration(1)\n  },\n\n  /**\n   * \n   * Set the duration for the activity. This triggers a complete recalculation of the complete\n   * diagram. No further calls are required\n   *\n   * @param {Number} duration the new Duration for the activity\n   */\n  setDuration: function (duration) {\n\n    if (this.mementoValues.duration !== duration) {\n      // store the new value\n      this.mementoValues.duration = duration\n\n      // update the labels for duration\n      this.durationLabel.setText(this.mementoValues.duration)\n    }\n\n    // calculate the earlyStart and latestEnd and set the labels\n    //\n    let start = this.getEarlyStart()\n\n    this.earlyStartLabel.setText(start)\n    this.earlyEndLabel.setText(start + this.mementoValues.duration)\n\n    // notify all children that a parent value has been changed\n    // Just knock on the inputPort...\n    //\n    let connections = this.outputPort.getConnections()\n    connections.each(function (i, conn) {\n      let targetPort = conn.getTarget()\n      targetPort.setValue()\n    })\n\n    // propagate the lateFinish up to all parent nodes if we are a leaf\n    //\n    if (connections.getSize() === 0) {\n      let lateFinish = parseFloat(this.earlyEndLabel.getText())\n      this.setLateFinish(lateFinish)\n    }\n  },\n\n  getEarlyEnd: function () {\n    return this.getEarlyStart() + this.mementoValues.duration\n  },\n\n  getEarlyStart: function () {\n    let latestEarlyEnd = 0\n\n    // retrieve the greatest \"earlyStart\" from all parent activities\n    this.inputPort.getConnections().each(function (i, conn) {\n      let parentActivity = conn.getSource().getActivity()\n      latestEarlyEnd = Math.max(latestEarlyEnd, parentActivity.getEarlyEnd())\n    })\n\n    return latestEarlyEnd\n  },\n\n  setLateFinish: function (value) {\n    let lateStart = value - this.mementoValues.duration\n\n    this.lateEndLabel.setText(value)\n    this.lateStartLabel.setText(lateStart)\n    this.stackLabel.setText(lateStart - parseFloat(this.earlyStartLabel.getText()))\n\n    let connections = this.inputPort.getConnections()\n    connections.each(function (i, conn) {\n      let sourcePort = conn.getSource()\n      sourcePort.getActivity().setLateFinish(lateStart)\n    })\n  },\n\n  /**\n   * \n   * help method to create some labels\n   *\n   * @param {String} txt the label to display\n   * @returns {draw2d.shape.basic.Label}\n   */\n  createLabel: function (txt) {\n    let label = new draw2d.shape.basic.Label({text: txt})\n    label.setStroke(1)\n    label.setColor(this.darkerBgColor)\n    label.setRadius(0)\n    label.setBackgroundColor(null)\n    label.setPadding(5)\n    label.setColor(this.bgColor.darker(0.2))\n    label.onDoubleClick = function (angle) {/* ignore them for the layout elements*/\n    }\n\n    return label\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setBackgroundColor: function (color) {\n    this._super(color)\n\n    // calculate the new lighter and darker colors for the gradient\n    //\n    this.lighterBgColor = this.bgColor.lighter(0.2).rgba()\n    this.darkerBgColor = this.bgColor.darker(0.2).rgba()\n  },\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n\n    // repaint can be blocked during deserialization and if the shape\n    // not part of any canvas.\n    //\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n\n    attributes = attributes || {}\n\n    if (this.getAlpha() < 0.9) {\n      attributes.fill = this.bgColor.rgba()\n    }\n    else {\n      attributes.fill = [\"90\", this.bgColor.hash(), this.lighterBgColor].join(\"-\")\n    }\n\n\n    this._super(attributes)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * NOT FOR PRODUCTIVE\n *\n * Checkout [Wikipedia PERT][1] for more information.\n *\n * Double click on the Task name or the top middle number to change the value.\n *\n *\n * @example\n *\n *    canvas.add( new draw2d.shape.pert.Start(),10,10);\n *    canvas.add( new draw2d.shape.pert.Activity(),80,130);\n *    canvas.add( new draw2d.shape.pert.Activity(),180,50);\n *\n * [1] http://en.wikipedia.org/wiki/Program_Evaluation_and_Review_Technique\n *\n * @extends draw2d.shape.layout.VerticalLayout\n */\ndraw2d.shape.pert.Start = draw2d.shape.layout.VerticalLayout.extend(\n  /** @lends draw2d.shape.pert.Start.prototype */\n  {\n\n  NAME: \"draw2d.shape.pert.Start\",\n\n  /**\n   * Create a new instance\n   *\n   * @param {Object} [attr] the configuration of the shape\n   */\n  init: function (attr, setter, getter) {\n    // shortcut for some callback methods to avoid $.proxy wrapper\n    let _this = this\n\n    // persistence values for the activity\n    // will be stored/read in the JSON\n    this.mementoValues = {\n      duration: null\n    }\n\n    // just some color attributes for the rendering/gradient\n    this.bgColor = new draw2d.util.Color(\"#f3f3f3\")\n    this.lighterBgColor = this.bgColor.lighter(0.2).rgba()\n    this.darkerBgColor = this.bgColor.darker(0.2).rgba()\n\n\n    this._super(extend({bgColor: this.bgColor, stroke: 2, radius: 2, color: this.darkerBgColor}, attr), setter, getter)\n\n    // Compose the top row of the shape\n    //\n    let top = new draw2d.shape.layout.HorizontalLayout({stroke: 0})\n\n\n    this.durationLabel = new draw2d.shape.basic.Label({\n      text: \"Duration\",\n      stroke: 1,\n      color: this.darkerBgColor,\n      radius: 0,\n      bgColor: null,\n      padding: 5\n    })\n    // duration label has a inplaceEditor for the value\n    this.durationLabel.installEditor(new draw2d.ui.LabelEditor({\n      text: \"Enter new duration\",\n      onCommit: function (value) {\n        _this.setDuration(parseFloat(value))\n      }\n    }))\n\n    this.earlyEndLabel = this.createLabel({text: \"Early End\", stroke: 0})\n\n    top.add(this.durationLabel)\n    top.add(this.earlyEndLabel)\n\n\n    // the middle part of the shape\n    // This part contains the ports for the connection\n    //\n    this.activityLabel = new draw2d.shape.basic.Label({\n      text: \"Start\",\n      radius: 0,\n      padding: 10,\n      color: this.darkerBgColor,\n      bgColor: null\n    })\n    // direct editor for the label\n    this.activityLabel.installEditor(new draw2d.ui.LabelInplaceEditor())\n\n    this.outputPort = this.activityLabel.createPort(\"output\")\n    this.outputPort.getActivity = function () {\n      return _this\n    }\n    this.outputPort.onConnect = function () {\n      _this.setDuration(_this.mementoValues.duration)\n    }\n    this.outputPort.onDisconnect = function () {\n      _this.setDuration(_this.mementoValues.duration)\n    }\n\n\n    // the bottom of the activity shape\n    //\n    let bottom = this.createLabel(\" \")\n    bottom.setPadding(10)\n    bottom.setStroke(0)\n    this.lateEndLabel = bottom\n\n    // finally compose the shape with top/middle/bottom in VerticalLayout\n    //\n    this.add(top)\n    this.add(this.activityLabel)\n    this.add(bottom)\n\n    // set some good default value for the activity\n    //\n    this.setDuration(1)\n  },\n\n  /**\n   * \n   * Set the duration for the activity. This triggers a complete recalculation of the complete\n   * diagram. No further calls are required\n   *\n   * @param {Number} duration the new Duration for the activity\n   */\n  setDuration: function (duration) {\n\n    if (this.mementoValues.duration !== duration) {\n      // store the new value\n      this.mementoValues.duration = duration\n\n      // update the labels for duration\n      this.durationLabel.setText(this.mementoValues.duration)\n    }\n\n    this.earlyEndLabel.setText(this.mementoValues.duration)\n\n    // notify all children that a parent value has been changed\n    // Just knock on the inputPort...\n    //\n    let connections = this.outputPort.getConnections()\n    connections.each(function (i, conn) {\n      let targetPort = conn.getTarget()\n      targetPort.setValue()\n    })\n\n    // propagate the lateFinish up to all parent nodes if we are a leaf\n    //\n    if (connections.getSize() === 0) {\n      let lateFinish = parseFloat(this.earlyEndLabel.getText())\n      this.setLateFinish(lateFinish)\n    }\n  },\n\n  getEarlyEnd: function () {\n    return this.mementoValues.duration\n  },\n\n\n  setLateFinish: function (value) {\n    let lateStart = value - this.mementoValues.duration\n\n    this.lateEndLabel.setText(value)\n\n  },\n\n  /**\n   * \n   * help method to create some labels\n   *\n   * @param {String} txt the label to display\n   * @returns {draw2d.shape.basic.Label}\n   */\n  createLabel: function (txt) {\n    let label = new draw2d.shape.basic.Label({text: txt})\n    label.setStroke(1)\n    label.setColor(this.darkerBgColor)\n    label.setRadius(0)\n    label.setBackgroundColor(null)\n    label.setPadding(5)\n    label.setColor(this.bgColor.darker(0.2))\n    label.onDoubleClick = function (angle) {/* ignore them for the layout elements*/\n    }\n\n    return label\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setBackgroundColor: function (color) {\n    this._super(color)\n\n    // calculate the new lighter and darker colors for the gradient\n    //\n    this.lighterBgColor = this.bgColor.lighter(0.2).rgba()\n    this.darkerBgColor = this.bgColor.darker(0.2).rgba()\n  },\n\n  /**\n   * @inheritdoc\n   */\n  repaint: function (attributes) {\n\n    // repaint can be blocked during deserialization and if the shape\n    // not part of any canvas.\n    //\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n\n    attributes = attributes || {}\n\n    if (this.getAlpha() < 0.9) {\n      attributes.fill = this.bgColor.rgba()\n    }\n    else {\n      attributes.fill = [\"90\", this.bgColor.hash(), this.lighterBgColor].join(\"-\")\n    }\n\n    this._super(attributes)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * Connection designed for a state diagram with arrow decoration at the\n * target of the connection and a label\n *\n *\n * @example\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let start = new draw2d.shape.state.Start();\n *    let end   = new draw2d.shape.state.End();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( end, 230,180);\n *\n *    // Create a Connection and connect the Start and End node\n *    //\n *    let c = new draw2d.shape.state.Connection({\n *    \t source : start.getOutputPort(0),\n *      target : end.getInputPort(0)\n *    });\n *\n *    // and finally add the connection to the canvas\n *    canvas.add(c);\n *\n *\n * @extends draw2d.Connection\n */\ndraw2d.shape.state.Connection = draw2d.Connection.extend(\n  /** @lends draw2d.shape.state.Connection.prototype */\n  {\n  NAME: \"draw2d.shape.state.Connection\",\n\n  DEFAULT_COLOR: new draw2d.util.Color(\"#4D90FE\"),\n\n  init: function (attr, setter, getter) {\n    this._super(extend({router: null, stroke: 2}, attr), setter, getter)\n\n    this.setTargetDecorator(new draw2d.decoration.connection.ArrowDecorator(17, 8))\n\n\n    this.label = new draw2d.shape.basic.Label({text: \"label\"})\n    this.label.setStroke(1)\n    this.label.setPadding(2)\n    this.label.setBackgroundColor(\"#f0f0f0\")\n    this.add(this.label, new draw2d.layout.locator.ParallelMidpointLocator())\n\n  },\n  /**\n   * \n   * Set the text to show if the state shape\n   *\n   * @param {String} text\n   */\n  setLabel: function (text) {\n    this.label.setText(text)\n\n    // hide the label if no text available\n    this.label.setVisible(!(text === null || text === \"\"))\n    this.fireEvent(\"change:label\", {value: text})\n\n    return this\n  },\n\n\n  /**\n   * \n   * Return the label of the shape\n   *\n   */\n  getLabel: function () {\n    return this.label.getText()\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getPersistentAttributes: function () {\n    return extend(this._super(), {\n      label: this.getLabel()\n    })\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.label !== \"undefined\") {\n      this.setLabel(memento.label)\n    }\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * The end node for a state diagram\n *\n *\n * @example\n *    let end   = new draw2d.shape.state.End();\n\n *    // ...add it to the canvas\n *    canvas.add( end, 230,80);\n *\n * @extends draw2d.shape.basic.Circle\n */\ndraw2d.shape.state.End = draw2d.shape.basic.Circle.extend(\n  /** @lends draw2d.shape.state.End.prototype */\n  {\n  \n  NAME: \"draw2d.shape.state.End\",\n\n  DEFAULT_COLOR: new draw2d.util.Color(\"#4D90FE\"),\n\n  init: function (attr, setter, getter) {\n    this.innerCircle = new draw2d.shape.basic.Circle(20)\n\n    this._super(attr, setter, getter)\n\n    this.port = this.createPort(\"input\", new draw2d.layout.locator.TopLocator())\n    this.port.setConnectionAnchor(new draw2d.layout.anchor.ShortesPathConnectionAnchor(this.port))\n\n    this.setDimension(50, 50)\n    this.setBackgroundColor(this.DEFAULT_COLOR)\n    this.installEditPolicy(new draw2d.policy.figure.AntSelectionFeedbackPolicy())\n\n    this.innerCircle.setStroke(2)\n    this.innerCircle.setBackgroundColor(null)\n    this.add(this.innerCircle, new draw2d.layout.locator.CenterLocator())\n\n    this.setStroke(0)\n    //this.setColor(this.DEFAULT_COLOR.darker());\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setDimension: function (w, h) {\n    this._super(w, h)\n    this.innerCircle.setDimension(this.getWidth() - 10, this.getHeight() - 10)\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * The start node for a state diagram\n *\n *\n * @example\n *\n *    let figure =  new draw2d.shape.state.Start({color:\"#3d3d3d\"});\n *\n *    canvas.add(figure,50,10);\n *\n * @extends draw2d.shape.basic.Rectangle\n */\ndraw2d.shape.state.Start = draw2d.shape.basic.Circle.extend(\n  /** @lends draw2d.shape.state.Start.prototype */\n  {\n\n  NAME: \"draw2d.shape.state.Start\",\n\n  DEFAULT_COLOR: new draw2d.util.Color(\"#3369E8\"),\n\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.port = this.createPort(\"output\", new draw2d.layout.locator.BottomLocator())\n    this.port.setConnectionAnchor(new draw2d.layout.anchor.ShortesPathConnectionAnchor(this.port))\n\n    this.setDimension(50, 50)\n    this.setBackgroundColor(this.DEFAULT_COLOR)\n    this.installEditPolicy(new draw2d.policy.figure.AntSelectionFeedbackPolicy())\n\n    this.setStroke(0)\n    //this.setColor(this.DEFAULT_COLOR.darker());\n\n    let label = new draw2d.shape.basic.Label({text: \"START\"})\n    label.setStroke(0)\n    label.setFontColor(\"#ffffff\")\n    label.setFontFamily('\"Open Sans\",sans-serif')\n    this.add(label, new draw2d.layout.locator.CenterLocator())\n  }\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * a state shape for a state diagram\n *\n * @example\n *\n *    // create and add two nodes which contains Ports (In and OUT)\n *    //\n *    let start = new draw2d.shape.state.Start();\n *    let state   = new draw2d.shape.state.State();\n\n *    // ...add it to the canvas\n *    canvas.add( start, 50,50);\n *    canvas.add( state, 230,180);\n *\n *    // Create a Connection and connect the Start and End node\n *    //\n *    let c = new draw2d.shape.state.Connection({\n *    \t\tsource : start.getOutputPort(0),\n *         target : state.getInputPort(0)\n *    });\n *\n *\n *    // and finally add the connection to the canvas\n *    canvas.add(c);\n *\n * @extends draw2d.shape.layout.VerticalLayout\n */\ndraw2d.shape.state.State = draw2d.shape.layout.VerticalLayout.extend(\n  /** @lends draw2d.shape.state.State.prototype */\n  {\n\n  NAME: \"draw2d.shape.state.State\",\n\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n\n    this.port = this.createPort(\"hybrid\", new draw2d.layout.locator.BottomLocator())\n    this.port.setConnectionAnchor(new draw2d.layout.anchor.ChopboxConnectionAnchor(this.port))\n\n\n    this.setBackgroundColor(\"#f3f3f3\")\n\n    // UI representation\n    this.setStroke(1)\n    this.setColor(\"#e0e0e0\")\n    this.setRadius(5)\n\n    // Compose the top row of the shape\n    //\n    let top = this.createLabel(\"State\").setStroke(0)\n    this.label = top\n\n    // the middle part of the shape\n    // This part contains the ports for the connection\n    //\n    let center = new draw2d.shape.basic.Rectangle()\n    center.getHeight = function () {\n      return 1\n    }\n    center.setMinWidth(90)\n    center.setColor(\"#e0e0e0\")\n\n    // the bottom of the activity shape\n    //\n    let bottom = new draw2d.shape.basic.Rectangle()\n    bottom.setMinHeight(30)\n    bottom.setStroke(0)\n    bottom.setBackgroundColor(null)\n\n    // finally compose the shape with top/middle/bottom in VerticalLayout\n    //\n    this.add(top)\n    this.add(center)\n    this.add(bottom)\n  },\n\n  /**\n   *\n   * Set the text to show if the state shape\n   *\n   * @param {String} text\n   */\n  setLabel: function (text) {\n    this.label.setText(text)\n    this.fireEvent(\"change:label\", {value: text})\n\n    return this\n  },\n\n\n  /**\n   *\n   * Return the label of the shape\n   *\n   */\n  getLabel: function () {\n    return this.label.getText()\n  },\n\n\n  /**\n   *\n   * helper method to create some labels\n   *\n   * @param {String} txt the label to display\n   * @returns {draw2d.shape.basic.Label}\n   * @private\n   */\n  createLabel: function (txt) {\n    let label = new draw2d.shape.basic.Label(txt)\n    label.setStroke(1)\n    label.setColor(this.darkerBgColor)\n    label.setRadius(0)\n    label.setBackgroundColor(null)\n    label.setPadding(5)\n    label.setColor(this.bgColor.darker(0.2))\n    label.onDoubleClick = function (angle) {/* ignore them for the layout elements*/\n    }\n\n    return label\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  getPersistentAttributes: function () {\n    return extend(this._super(), {\n      label: this.getLabel()\n    })\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setPersistentAttributes: function (memento) {\n    this._super(memento)\n\n    if (typeof memento.label !== \"undefined\") {\n      this.setLabel(memento.label)\n    }\n\n  }\n})\n","import draw2d from '../../packages'\nimport {Tweenable} from 'shifty'\n\n\n/**\n * @class\n *\n * @example\n *\n *    let slider = new draw2d.shape.widget.Slider({width:120, height:20});\n *    canvas.add( slider,100,60);\n *\n * @extends draw2d.shape.widget.Widget\n */\ndraw2d.shape.widget.Slider = draw2d.shape.widget.Widget.extend(\n  /** @lends draw2d.shape.widget.Slider.prototype */\n  {\n\n  NAME: \"draw2d.shape.widget.Slider\",\n\n  DEFAULT_COLOR_THUMB: new draw2d.util.Color(\"#bddf69\"),\n  DEFAULT_COLOR_BG: new draw2d.util.Color(\"#d3d3d3\"),\n\n\n  init: function (attr, setter, getter) {\n    this.currentValue = 0 // [0..100]\n    this.slideBoundingBox = new draw2d.geo.Rectangle(0, 0, 10, 20)\n    this.padding = {top: 4, right: 4, bottom: 4, left: 4}\n    this.panning = false\n    this.thumbGrow = 0\n\n    this._super(\n      extend({\n        width: 150,\n        height: 15,\n        stroke: 1,\n        radius: 4,\n        resizeable: true,\n        color: this.DEFAULT_COLOR_THUMB,\n        bgColor: this.DEFAULT_COLOR_BG,\n        value: 50\n      }, attr),\n      extend({\n        // @attr {Number} padding the padding in pixel around the text */\n        padding: this.setPadding,\n        // @attr {Number} value the new value of the slider. values must be in range of [0..100] */\n        value: this.setValue\n      }, setter),\n      extend({\n        padding: this.getPadding,\n        value: this.getValue\n      }, getter))\n\n    this.setMinHeight(15)\n    this.setMinWidth(80)\n  },\n\n  /**\n   * \n   * Create the additional elements for the figure\n   *\n   */\n  createSet: function () {\n    let result = this.canvas.paper.set()\n    let thumb = this.canvas.paper.rect(0, 0, 10, 20)\n    thumb.node.style.cursor = \"col-resize\"\n    result.push(thumb)\n\n    return result\n  },\n\n  /**\n   * @inheritdoc\n   */\n  setDimension: function (w, h) {\n    this._super(w, h)\n    this.slideBoundingBox.setBoundary(this.padding.left, 0, this.getWidth() - this.padding.right, this.getHeight())\n    this.slideBoundingBox.setHeight(this.getHeight() + 1)\n\n    // TODO: and repaint again.....two repaints for one \"setDimension\"....BAD\n    //\n    this.repaint()\n  },\n\n\n  /**\n   * \n   * Set the padding of the element\n   *\n   *     // Alternatively you can use the attr method:\n   *     //\n   *     // set the padding for top,left,bottom,right in one call\n   *     figure.attr({\n   *       padding: 3\n   *     });\n   *\n   *     // update the padding left and top\n   *     figure.attr({\n   *       padding: {left:3, top:30}\n   *     });\n   *\n   * @param {Number|Object} padding The new padding\n   * @since 5.6.0\n   **/\n  setPadding: function (padding) {\n    this.clearCache()\n    if (typeof padding === \"number\") {\n      this.padding = {top: padding, right: padding, bottom: padding, left: padding}\n    }\n    else {\n      this.padding = extend(this.padding, padding)\n    }\n    this.repaint()\n    this.fireEvent(\"change:padding\", {value: this.padding})\n\n    return this\n  },\n\n\n  /**\n   * \n   * Get the padding of the element.\n   *\n   * @since 5.6.0\n   **/\n  getPadding: function () {\n    return this.padding\n  },\n\n  /**\n   * \n   * Called if the value of the slider has been changed.\n   *\n   * @param {Number} value The new value of the slider in percentage [0..100]\n   * @template\n   */\n  onValueChange: function (value) {\n  },\n\n  /**\n   * \n   * Will be called if the drag and drop action begins. You can return [false] if you\n   * want avoid that the figure can be move.\n   *\n   * @param {Number} x the x-coordinate of the mouse up event\n   * @param {Number} y the y-coordinate of the mouse up event\n   * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n   * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n   *\n   * @returns {Boolean} true if the figure accepts dragging\n   **/\n  onDragStart: function (x, y, shiftKey, ctrlKey) {\n    // check if the use has been clicked on the thumb.\n    // Return \"false\" to prevent drag&drop operation.\n    //\n    if (this.slideBoundingBox.hitTest(x, y)) {\n\n      this.panningX = x\n      this.panningY = y\n      this.panning = true\n      let tweenable = new Tweenable()\n      tweenable.tween({\n        from: {grow: this.thumbGrow},\n        to: {grow: 10},\n        duration: 500,\n        easing: 'easeOutQuart',\n        step: function (state) {\n          this.thumbGrow = state.grow\n          this.repaint()\n        }.bind(this),\n        finish: function () {\n          tweenable.dispose()\n        }\n      })\n      return false\n    }\n\n    return this._super(x, y, shiftKey, ctrlKey)\n  },\n\n  /**\n   * \n   * Called by the framework if the figure returns false for the drag operation. In this\n   * case we send a \"panning\" event - mouseDown + mouseMove. This is very useful for\n   * UI-Widget like slider, spinner,...\n   *\n   * @param {Number} dx the x difference between the mouse down operation and now\n   * @param {Number} dy the y difference between the mouse down operation and now\n   * @param {Number} dx2 The x diff since the last call of this dragging operation\n   * @param {Number} dy2 The y diff since the last call of this dragging operation\n   */\n  onPanning: function (dx, dy, dx2, dy2) {\n    // calculate the current position of the mouse pos\n    //\n    let thumbW2 = this.slideBoundingBox.w / 2\n    let width = this.getWidth()\n    let sliderWidth = width - this.padding.left - this.padding.right\n\n    let figurePos = Math.min(width, Math.max(0, this.panningX + dx))\n    let sliderPos = Math.min(width - this.padding.left - this.padding.right, figurePos - this.padding.left) - thumbW2\n\n    this.setValue(100 / sliderWidth * sliderPos)\n  },\n\n\n  /**\n   * @inheritdoc\n   */\n  onPanningEnd: function () {\n    this.panning = false\n\n    let tweenable = new Tweenable()\n    tweenable.tween({\n      from: {grow: this.thumbGrow},\n      to: {grow: 0},\n      duration: 300,\n      easing: 'easeOutQuart',\n      step: function (state) {\n        this.thumbGrow = state.grow\n        this.repaint()\n      }.bind(this),\n      finish: function () {\n        tweenable.dispose()\n      }\n    })\n    this.thumbGrow = 0\n    this.repaint()\n  },\n\n  /**\n   * \n   * Set the current value of the slider. Valid values are [0..100]\n   *\n   * @param {Number} value values between [0..100]\n   */\n  setValue: function (value) {\n    this.currentValue = Math.min(Math.max(0, (value | 0)), 100)\n    this.repaint()\n    this.onValueChange(this.currentValue)\n    this.fireEvent(\"change:value\", {value: this.currentValue})\n\n    return this\n  },\n\n  /**\n   * \n   * Returns the current value of the slider\n   *\n   * @since 5.6.0\n   *\n   * @returns {Number}\n   */\n  getValue: function () {\n    return this.currentValue\n  },\n\n  /**\n   *\n   * @param attributes\n   */\n  repaint: function (attributes) {\n    if (this.repaintBlocked === true || this.shape === null) {\n      return\n    }\n\n    attributes = attributes || {}\n\n    // adjust the slider to the current value and the new dimension of the widget\n    //\n    let thumbX = (((this.getWidth() - this.padding.left - this.padding.right) / 100 * this.currentValue) + this.padding.left) | 0\n    this.slideBoundingBox.setX(thumbX)\n\n\n    // update slider\n    //\n    if (this.svgNodes !== null) {\n      let attr = this.slideBoundingBox.toJSON()\n      attr.y -= (this.thumbGrow / 2)\n      attr.height += this.thumbGrow\n      attr.fill = this.getColor().rgba()\n      attr.stroke = this.getColor().darker(0.2).rgba()\n      attr.r = 4\n      this.svgNodes.attr(attr)\n    }\n\n\n    attributes.fill = \"90-\" + this.bgColor.hash() + \":5-\" + this.bgColor.lighter(0.3).hash() + \":95\"\n    attributes.stroke = this.bgColor.darker(0.1).rgba()\n\n    this._super(attributes)\n  },\n\n\n  applyTransformation: function () {\n    this.svgNodes.transform(\"T\" + this.getAbsoluteX() + \",\" + this.getAbsoluteY())\n\n    return this\n  }\n\n})\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n * Base class for all diagrams.\n *\n * @extends draw2d.SetFigure\n */\ndraw2d.shape.widget.Widget = draw2d.SetFigure.extend({\n\n  init: function (attr, setter, getter) {\n    this._super(attr, setter, getter)\n  }\n})\n","import draw2d from '../packages'\n\n\n/**\n * @class\n *\n * Base class for all draw2d.shape.basic.Label editors. The default implementation is to open\n * a simple javascript prompt dialog.<br>\n * Use LabelInplaceEditor or your own implementation if you need more comfort.\n *\n * @example\n *\n *    let label =  new draw2d.shape.basic.Label({text:\"Double Click on me\"});\n *\n *    label.installEditor(new draw2d.ui.LabelEditor({\n *       // called after the value has been set to the LabelFigure\n *       onCommit: $.proxy(function(value){\n *           alert(\"new value set to:\"+value);\n *       },this),\n *       // called if the user abort the operation\n *       onCancel: function(){\n *       }\n *    }));\n *\n *    canvas.add(label,50,10);\n *\n *\n * @author Andreas Herz\n */\ndraw2d.ui.LabelEditor = Class.extend(\n  /** @lends draw2d.ui.LabelEditor.prototype */\n  {\n    NAME: \"draw2d.ui.LabelEditor\",\n\n    /**\n     *\n     * @param {Object} attr callback handler and configuration. **{ onCommit:function(){}}, onCancel: function(){}, onStart: function(){}, text:'My Dialog Title' }**\n     */\n    init: function (attr) {\n      // register some default listener and override this with the handover one\n      this.configuration = extend({\n          onCommit: function () {\n          },\n          onCancel: function () {\n          },\n          onStart: function () {\n          },\n          text: \"Value\"\n        },\n        attr)\n    },\n\n    /**\n     *\n     * Trigger the edit of the label text.\n     *\n     * @param {draw2d.shape.basic.Label} label the label to edit\n     */\n    start: function (label) {\n      this.configuration.onStart()\n      let newText = prompt(this.configuration.text, label.getText())\n      if (newText) {\n        let cmd = new draw2d.command.CommandAttr(label, {text: newText})\n        label.getCanvas().getCommandStack().execute(cmd)\n\n        this.configuration.onCommit(label.getText())\n      } else {\n        this.configuration.onCancel()\n      }\n    }\n  })\n","import draw2d from '../packages'\nimport r from \"lib/jquery.autoresize\"\n\n\n/**\n * @class\n *\n * Inplace editor for draw2d.shape.base.Label\n *\n * @example\n *\n *    var label =  new draw2d.shape.basic.Label({text:\"Double Click on me\"});\n *\n *    label.installEditor(new draw2d.ui.LabelInplaceEditor({\n *       // called after the value has been set to the LabelFigure\n *       onCommit: $.proxy(function(value){\n *           alert(\"new value set to:\"+value);\n *       },this),\n *       // called if the user abort the operation\n *       onCancel: function(){\n *       }\n *    }));\n *\n *    canvas.add(label,50,10);\n *\n * @author Andreas Herz\n * @extends draw2d.ui.LabelEditor\n */\ndraw2d.ui.LabelInplaceEditor = draw2d.ui.LabelEditor.extend(\n  /** @lends draw2d.ui.LabelInplaceEditor.prototype */\n  {\n\n    NAME: \"draw2d.ui.LabelInplaceEditor\",\n\n    init: function (listener) {\n      this._super();\n\n      // register some default listener and override this with the handover one\n      this.listener = extend({\n        onCommit: function () {\n        },\n        onCancel: function () {\n        },\n        onStart: function () {\n        }\n      }, listener);\n    },\n\n    /**\n     *\n     * Trigger the edit of the label text.\n     *\n     * @param {draw2d.shape.basic.Label} label the label to edit\n     */\n    start: function (label) {\n      this.label = label;\n\n      this.commitCallback = this.commit.bind(this);\n\n      // commit the editor if the user clicks anywhere in the document\n      //\n      $(\"body\").bind(\"click\", this.commitCallback);\n\n      // append the input field to the document and register\n      // the ENTER and ESC key to commit /cancel the operation\n      //\n      this.html = $('<input id=\"inplaceeditor\">');\n      this.html.val(label.getText());\n      this.html.hide();\n\n      $(\"body\").append(this.html);\n\n      this.html.autoResize();\n\n      this.html.bind(\"keyup\", function (e) {\n        switch (e.which) {\n          case 13:\n            this.commit();\n            break;\n          case 27:\n            this.cancel();\n            break;\n        }\n      }.bind(this));\n\n      this.html.bind(\"blur\", this.commitCallback);\n\n      // avoid commit of the operation if we click inside the editor\n      //\n      this.html.bind(\"click\", function (e) {\n        e.stopPropagation();\n        e.preventDefault();\n      });\n\n      // Position the INPUT and init the autoresize of the element\n      //\n      var canvas = this.label.getCanvas();\n      var bb = this.label.getBoundingBox();\n\n      bb.setPosition(canvas.fromCanvasToDocumentCoordinate(bb.x, bb.y));\n\n      // remove the scroll from the body if we add the canvas directly into the body\n      var scrollDiv = canvas.getScrollArea();\n      if (scrollDiv.is($(\"body\"))) {\n        bb.translate(canvas.getScrollLeft(), canvas.getScrollTop());\n      }\n\n      bb.translate(-1, -1);\n      bb.resize(2, 2);\n\n      this.html.css({\n        position: \"absolute\",\n        \"top\": bb.y,\n        \"left\": bb.x,\n        \"min-width\": bb.w * (1 / canvas.getZoom()),\n        \"height\": Math.max(25, bb.h * (1 / canvas.getZoom()))\n      });\n      this.html.fadeIn(() => {\n        this.html.focus();\n        this.listener.onStart()\n      });\n    },\n\n    /**\n     *\n     * Transfer the data from the editor into the label.<br>\n     * Remove the editor.<br>\n     *\n     * @private\n     */\n    commit: function () {\n      this.html.unbind(\"blur\", this.commitCallback);\n      $(\"body\").unbind(\"click\", this.commitCallback);\n      var label = this.html.val();\n      var cmd = new draw2d.command.CommandAttr(this.label, {text: label});\n      this.label.getCanvas().getCommandStack().execute(cmd);\n      this.html.fadeOut(() => {\n        this.html.remove();\n        this.html = null;\n        this.listener.onCommit(this.label.getText());\n      });\n    },\n\n    /**\n     *\n     * Transfer the data from the editor into the label.<br>\n     * Remove the editor.<br>\n     * @private\n     */\n    cancel: function () {\n      this.html.unbind(\"blur\", this.commitCallback);\n      $(\"body\").unbind(\"click\", this.commitCallback);\n      this.html.fadeOut(() => {\n        this.html.remove();\n        this.html = null;\n        this.listener.onCancel();\n      });\n\n    }\n  });\n\n","import draw2d from '../packages'\n\n/**\n * @class\n *\n * <Disclaimer> Writing my own class for arrays was one of my worst ideas...\n *\n * An ArrayList stores a variable number of objects. This is similar to making an array of\n * objects, but with an ArrayList, items can be easily added and removed from the ArrayList\n * and it is resized dynamically. This can be very convenient, but it's slower than making\n * an array of objects when using many elements.\n */\ndraw2d.util.ArrayList = Class.extend(\n  /** @lends draw2d.util.ArrayList */\n  {\n\n    init: function (a) {\n      if (Array.isArray(a)) {\n        this.data = a\n      } else {\n        this.data = []\n      }\n    },\n\n\n    /**\n     *\n     * Clears the array\n     *\n     * @since 6.1.0\n     * @returns {this}\n     */\n    clear: function () {\n      this.data = []\n\n      return this\n    },\n\n    /**\n     *\n     * Reverses the order of the elements in the ArrayList. The array will be modified!\n     *\n     * @returns {this}\n     */\n    reverse: function () {\n      this.data.reverse()\n\n      return this\n    },\n\n    /**\n     *\n     * The size/count of the stored objects.\n     *\n     * @returns {Number}\n     */\n    getSize: function () {\n      return this.data.length\n    },\n\n\n    /**\n     *\n     * checks to see if the Vector has any elements.\n     *\n     * @returns {Boolean} true if the list is empty\n     **/\n    isEmpty: function () {\n      return this.getSize() === 0\n    },\n\n    /**\n     *\n     * return the last element.\n     *\n     * @returns {Object}\n     */\n    last: function () {\n      return this.data[this.data.length - 1]\n    },\n\n    /**\n     *\n     * Return a reference to the internal javascript native array.\n     *\n     * @returns {Array}\n     */\n    asArray: function () {\n      return this.data\n    },\n\n    /**\n     *\n     * returns the first element\n     *\n     * @returns {Object}\n     */\n    first: function () {\n      if (this.data.length > 0) {\n        return this.data[0]\n      }\n      return null\n    },\n\n\n    /**\n     *\n     * returns an element at a specified index\n     *\n     * @param {Number} i\n     * @returns {Object}\n     */\n    get: function (i) {\n      return this.data[i]\n    },\n\n    /**\n     *\n     * Adds a element at the end of the Vector.\n     *\n     * @param {Object} obj the object to add\n     * @returns {this}\n     */\n    add: function (...objs) {\n      this.data.push(...objs)\n\n      return this\n    },\n\n    /**\n     *\n     *\n     * The method removes items from an array as necessary so that all remaining items pass a\n     * provided test. The test is a function that is passed an array item and the index of the\n     * item within the array. Only if the test returns true will the item stay in the array.\n     *\n     * @param {Function} func the filter function(element,index)\n     * @param {Object} func.value value of the element in iteration.\n     * @since 2.0.0\n     * @returns {this}\n     */\n    grep: function (func) {\n      this.data = this.data.filter(func)\n\n      return this\n    },\n\n    /**\n     *\n     *\n     * Return ONE element which matches by the given function or <b>null</b>\n     * if no element is found.\n     *\n     *    var r1= figures.find(function(figure){\n     *                  return figure.id===123456\n     *            });\n     *\n     * @param {Function} func the filter function\n     * @param {Object} func.value value of the element in iteration.\n     * @param {Object} func.index index of the element in collection.\n     * @since 2.0.0\n     */\n    find: function (func) {\n      let result = this.data.filter(func)\n      if (result.length === 0) {\n        return null\n      }\n      return result[0]\n    },\n\n    /**\n     *\n     * Translate all items in the array into new items. The array list is modified after this call.\n     * You must clone the array before if you want avoid this.\n     *\n     *    var labels = this.commands.clone().map(function(e){\n     *         return e.getLabel();\n     *    });\n     *\n     * @param {Function} func The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property.\n     * @param {Object} func.value value of the element in iteration.\n     * @param {Number} func.i index of the element in iteration\n     *\n     * @since 4.0.0\n     * @returns {this}\n     */\n    map: function (func) {\n      this.data = this.data.map(func)\n\n      return this\n    },\n\n    /**\n     *\n     * Removes any duplicate elements from the array. The array is modified after this call. You\n     * must clone the array before if you want avoid this\n     *\n     * @since 4.0.0\n     * @returns {this}\n     */\n    unique: function () {\n      this.data = this.data.filter((value, index, self) => self.indexOf(value) === index)\n\n      return this\n    },\n\n\n    /**\n     *\n     * Add all elements into this array.\n     *\n     * @param {draw2d.util.ArrayList} list\n     * @param {Boolean} [avoidDuplicates] checks whenever the new elements exists before insert if the parameter is to [true]\n     * @returns {this}\n     */\n    addAll: function (list, avoidDuplicates) {\n      if (!(list instanceof draw2d.util.ArrayList)) {\n        throw \"Unable to handle unknown object type in ArrayList.addAll\"\n      }\n\n      this.data = this.data.concat(list.data)\n      if (avoidDuplicates) {\n        this.unique()\n      }\n      return this\n    },\n\n    /**\n     *\n     * You can use the Array list as Stack as well. this is the pop method to remove one element\n     * at the end of the stack.\n     *\n     * @returns {Object} the remove object\n     */\n    pop: function () {\n      return this.removeElementAt(this.data.length - 1)\n    },\n\n    /**\n     * Push one element at the top of the stack/array\n     *\n     * @param {Object} value The object to add\n     * @returns {this}\n     */\n    push: function (value) {\n      this.add(value)\n    },\n\n    /**\n     *\n     * Remove the element from the list\n     *\n     * @param {Object} obj the object to remove\n     *\n     * @returns {Object} the removed object or null\n     */\n    remove: function (obj) {\n      let index = this.indexOf(obj)\n      if (index >= 0) {\n        return this.removeElementAt(index)\n      }\n\n      return null\n    },\n\n\n    /**\n     *\n     * Inserts an element at a given position. Existing elements will be shifted\n     * to the right.\n     *\n     * @param {Object} obj the object to insert.\n     * @param {Number} index the insert position.\n     * @returns {this}\n     */\n    insertElementAt: function (obj, index) {\n      this.data.splice(index, 0, obj)\n\n      return this\n    },\n\n    /**\n     *\n     * Removes an element at a specific index.\n     *\n     * @param {Number} index the index of the element to remove\n     * @returns {Object} the removed object\n     */\n    removeElementAt: function (index) {\n      let element = this.data[index]\n\n      this.data.splice(index, 1)\n\n      return element\n    },\n\n    /**\n     *\n     * removes all given elements in the ArrayList\n     *\n     * @param {draw2d.util.ArrayList} elements The elements to remove\n     * @returns {this}\n     */\n    removeAll: function (elements) {\n      if (elements instanceof draw2d.util.ArrayList) {\n        elements = elements.data\n      }\n\n      if (Array.isArray(elements)) {\n        elements.forEach((e) => {\n          this.remove(e)\n        })\n      }\n\n      return this\n    },\n\n    /**\n     *\n     * Return the zero based index of the given element or -1 if the element\n     * not in the list.\n     *\n     * @param {Object} obj the element to check\n     *\n     * @returns {Number} the index of the element or -1\n     */\n    indexOf: function (obj) {\n      return this.data.indexOf(obj)\n    },\n\n    /**\n     *\n     * returns true if the element is in the Vector, otherwise false.\n     *\n     * @param {Object} obj the object to check\n     *\n     * @returns {Boolean}\n     */\n    contains: function (obj) {\n      return this.indexOf(obj) !== -1\n    },\n\n\n    /**\n     *\n     * Sorts the collection based on a field name or sort a function. See on http://www.w3schools.com/jsref/jsref_sort.asp\n     * if you use a sort function.\n     *\n     * @param {String|Function} f the field name for the sorting or a sort function\n     *\n     * @returns {this}\n     *\n     */\n    sort: function (f) {\n      if (typeof f === \"function\") {\n        this.data.sort(f)\n      } else {\n        this.data.sort(function (a, b) {\n          if (a[f] < b[f])\n            return -1\n          if (a[f] > b[f])\n            return 1\n          return 0\n        })\n      }\n      return this\n    },\n\n    /**\n     *\n     * Copies the contents of a Vector to another Vector returning the new Vector.\n     *\n     * @param {Boolean} [deep] call \"clone\" of each elements and add the clone to the new ArrayList\n     *\n     * @returns {draw2d.util.ArrayList} the new ArrayList\n     */\n    clone: function (deep) {\n      let newVector = new draw2d.util.ArrayList()\n\n\n      if (deep) {\n        for (let i = 0; i < this.data.length; i++) {\n          newVector.data.push(this.data[i].clone())\n        }\n      } else {\n        newVector.data = this.data.slice(0)\n      }\n\n      return newVector\n    },\n\n\n    /**\n     *\n     * Iterates over the list of elements, yielding each in turn to an iterator\n     * function.\n     * Each invocation of iterator is called with two arguments: (index, element).\n     *\n     * @param {Function} func the callback function to call for each element\n     * @param {Number} func.i index of the element in iteration\n     * @param {Object} func.value value of the element in iteration.\n     * @param {Boolean} [reverse] optional parameter. Iterate the collection reverse if it set to <b>true</b>\n     * @returns {this}\n     */\n    each: function (func, reverse) {\n      if (typeof reverse !== \"undefined\" && reverse === true) {\n        for (let i = this.data.length - 1; i >= 0; i--) {\n          if (func(i, this.data[i]) === false)\n            break\n        }\n      } else {\n        for (let i = 0; i < this.data.length; i++) {\n          if (func(i, this.data[i]) === false)\n            break\n        }\n      }\n\n      return this\n    },\n\n\n    /**\n     * overwrites the element with an object at the specific index.\n     *\n     * @param {Object} obj The object to add\n     * @param {Number} index the index where the object should places.\n     *\n     * @returns {this}\n     */\n    overwriteElementAt: function (obj, index) {\n      this.data[index] = obj\n\n      return this\n    },\n\n    /**\n     *\n     * @returns {Object} the attributes which are required for persistence\n     */\n    getPersistentAttributes: function () {\n      return {data: this.data}\n    },\n\n    /**\n     *\n     * Read all attributes from the serialized properties and transfer them into the shape.\n     *\n     * @param {Object} memento\n     * @returns {this}\n     */\n    setPersistentAttributes: function (memento) {\n      this.data = memento.data\n\n      return this\n    }\n\n\n  })\n\ndraw2d.util.ArrayList.EMPTY_LIST = new draw2d.util.ArrayList()\n\n\n","import draw2d from '../packages'\n\n\ndraw2d.util.Base64 = {\n\n    /**\n     * Maps bytes to characters.\n     * @type {Object}\n     * @private\n     */\n    byteToCharMap_ :null,\n\n\n    /**\n     * Maps characters to bytes.\n     * @type {Object}\n     * @private\n     */\n    charToByteMap_: null,\n\n\n    /**\n     * Maps bytes to websafe characters.\n     * @type {Object}\n     * @private\n     */\n    byteToCharMapWebSafe_ : null,\n\n    /**\n     * Maps websafe characters to bytes.\n     * @type {Object}\n     * @private\n     */\n    charToByteMapWebSafe_ : null,\n\n\n    /**\n     * Our default alphabet, shared between\n     * ENCODED_VALS and ENCODED_VALS_WEBSAFE\n     * @type {string}\n     */\n    ENCODED_VALS_BASE : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',\n\n    /**\n     * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\n     * @type {string}\n     */\n    ENCODED_VALS : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + '+/=',\n\n\n    /**\n     * Our websafe alphabet.\n     * @type {string}\n     */\n    ENCODED_VALS_WEBSAFE :'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + '-_.',\n\n\n    encodeByteArray: function(input, opt_webSafe) {\n        draw2d.util.Base64.init();\n\n        var byteToCharMap = opt_webSafe ?  draw2d.util.Base64.byteToCharMapWebSafe_ : draw2d.util.Base64.byteToCharMap_;\n\n        var output = [];\n\n        for (var i = 0; i < input.length; i += 3) {\n          var byte1 = input[i];\n          var haveByte2 = i + 1 < input.length;\n          var byte2 = haveByte2 ? input[i + 1] : 0;\n          var haveByte3 = i + 2 < input.length;\n          var byte3 = haveByte3 ? input[i + 2] : 0;\n\n          var outByte1 = byte1 >> 2;\n          var outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\n          var outByte3 = ((byte2 & 0x0F) << 2) | (byte3 >> 6);\n          var outByte4 = byte3 & 0x3F;\n\n          if (!haveByte3) {\n            outByte4 = 64;\n\n            if (!haveByte2) {\n              outByte3 = 64;\n            }\n          }\n\n          output.push(byteToCharMap[outByte1],\n                      byteToCharMap[outByte2],\n                      byteToCharMap[outByte3],\n                      byteToCharMap[outByte4]);\n        }\n\n        return output.join('');\n      },\n\n\n      /**\n       * \n       * Base64-encode a string.\n       *\n       * @param {string} input A string to encode.\n       * @param {boolean=} opt_webSafe If true, we should use the alternative alphabet.\n       * @returns {string} The base64 encoded string.\n       */\n     encode: function(input, opt_webSafe) {\n        return draw2d.util.Base64.encodeByteArray( draw2d.util.Base64.stringToByteArray(input), opt_webSafe);\n      },\n\n\n      /**\n       * \n       * Base64-decode a string.\n       *\n       * @param {String} input to decode (length not required to be a multiple of 4).\n       * @param {boolean=} opt_webSafe True if we should use the\n       *    alternative alphabet.\n       * @returns {Array} bytes representing the decoded value.\n       */\n      decode: function(input, opt_webSafe) {\n        draw2d.util.Base64.init();\n\n        var charToByteMap = opt_webSafe ?draw2d.util.Base64.charToByteMapWebSafe_ : draw2d.util.Base64.charToByteMap_;\n\n        var output = [];\n\n        for (var i = 0; i < input.length; ) {\n          var byte1 = charToByteMap[input.charAt(i++)];\n\n          var haveByte2 = i < input.length;\n          var byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\n          ++i;\n\n          var haveByte3 = i < input.length;\n          var byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 0;\n          ++i;\n\n          var haveByte4 = i < input.length;\n          var byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 0;\n          ++i;\n\n          if (byte1 == null || byte2 == null ||\n              byte3 == null || byte4 == null) {\n            throw Error();\n          }\n\n          var outByte1 = (byte1 << 2) | (byte2 >> 4);\n          output.push(outByte1);\n\n          if (byte3 != 64) {\n            var outByte2 = ((byte2 << 4) & 0xF0) | (byte3 >> 2);\n            output.push(outByte2);\n\n            if (byte4 != 64) {\n              var outByte3 = ((byte3 << 6) & 0xC0) | byte4;\n              output.push(outByte3);\n            }\n          }\n        }\n\n        return output;\n     },\n\n    /**\n     * Turns a string into an array of bytes; a \"byte\" being a JS number in the\n     * range 0-255.\n     * @param {string} str String value to arrify.\n     * @returns {!Array.<number>} Array of numbers corresponding to the\n     *    UCS character codes of each character in str.\n     */\n    stringToByteArray: function(str) {\n      var output = [], p = 0;\n      for (var i = 0; i < str.length; i++) {\n        var c = str.charCodeAt(i);\n        while (c > 0xff) {\n          output[p++] = c & 0xff;\n          c >>= 8;\n        }\n        output[p++] = c;\n      }\n      return output;\n    },\n\n    init: function() {\n        if (!draw2d.util.Base64.byteToCharMap_) {\n            draw2d.util.Base64.byteToCharMap_ = {};\n            draw2d.util.Base64.charToByteMap_ = {};\n            draw2d.util.Base64.byteToCharMapWebSafe_ = {};\n            draw2d.util.Base64.charToByteMapWebSafe_ = {};\n\n          // We want quick mappings back and forth, so we precompute two maps.\n          for (var i = 0; i < draw2d.util.Base64.ENCODED_VALS.length; i++) {\n              draw2d.util.Base64.byteToCharMap_[i] = draw2d.util.Base64.ENCODED_VALS.charAt(i);\n              draw2d.util.Base64.charToByteMap_[draw2d.util.Base64.byteToCharMap_[i]] = i;\n              draw2d.util.Base64.byteToCharMapWebSafe_[i] = draw2d.util.Base64.ENCODED_VALS_WEBSAFE.charAt(i);\n              draw2d.util.Base64.charToByteMapWebSafe_[draw2d.util.Base64.byteToCharMapWebSafe_[i]] = i;\n          }\n        }\n    }\n};\n","import draw2d from '../packages'\n\n/**\n * @class\n * Util class to handle colors in the draw2d enviroment.\n *\n * @example\n *     // Create a new Color with RGB values\n *     var color = new draw2d.util.Color(127,0,0);\n *\n *     // of from a hex string\n *     var color2 = new draw2d.util.Color(\"#f00000\");\n *\n *     // Create a little bit darker color\n *     var darkerColor = color.darker(0.2); // 20% darker\n *\n *     // create a optimal text color if 'color' the background color\n *     // (best in meaning of contrast and readability)\n *     var fontColor = color.getIdealTextColor();\n *\n * @param {Number|String|draw2d.util.Color|Array} red\n * @param {Number} green\n * @param {Number} blue\n * @param {Number} [alpha]\n */\ndraw2d.util.Color = Class.extend(\n  /** @lends draw2d.util.Color */\n  {\n\n    init: function(red, green, blue, alpha) {\n\n      this.hashString = null;\n\n      if(typeof red === \"undefined\" || red===null){\n          this.hashString = \"none\";\n      }\n      else if(red instanceof draw2d.util.Color){\n          if(red.hashString===\"none\"){\n              this.hashString = \"none\";\n          }\n          else{\n              this.red = red.red;\n              this.green = red.green;\n              this.blue = red.blue;\n              this.alpha = red.alpha;\n          }\n      }\n      else if(typeof red === \"string\")\n      {\n           if (red === \"none\") {\n              this.hashString = \"none\";\n           }\n           else {\n              let rgba = this.hex2rgb(red);\n              this.red = rgba[0];\n              this.green = rgba[1];\n              this.blue = rgba[2];\n              this.alpha = rgba[3];\n          }\n      }\n      // JSON struct of {red:###, green:###, blue:### }\n      else if(typeof red === \"object\" && typeof red.red===\"number\")\n      {\n        this.red= red.red;\n        this.green = red.green;\n        this.blue = red.blue;\n        this.alpha = red.alpha;\n      }\n      // array detection 1\n      else if(red instanceof Array && red.length===3)\n      {\n        this.red= red[0];\n        this.green = red[1];\n        this.blue = red[2];\n        this.alpha = red[3];\n      }\n      // array detection 2\n      else if(typeof red === \"object\" && typeof red.length ===\"number\" && red.length===3)\n      {\n        this.red= red[0]\n        this.green = red[1]\n        this.blue = red[2]\n        this.alpha = red[3]\n      }\n      else\n      {\n        this.red= parseInt(red)\n        this.green = parseInt(green)\n        this.blue = parseInt(blue)\n        this.alpha = (typeof alpha === 'undefined')? 1 : parseFloat(alpha)\n      }\n    },\n\n\n    /**\n     * \n     * Convert the color object into a HTML CSS representation\n     * @returns {String} the color in rgb(##,##,##) representation\n     **/\n    getHTMLStyle: function()\n    {\n      if(typeof this.red ===\"undefined\")\n        return \"rgba(0,0,0,0)\";\n\n      return \"rgba(\"+this.red+\",\"+this.green+\",\"+this.blue+\",\"+this.alpha+\")\"\n    },\n\n\n    /**\n     * \n     * The red part of the color.\n     *\n     * @returns {Number} the [red] part of the color.\n     **/\n    getRed: function()\n    {\n      return this.red\n    },\n\n\n    /**\n     * \n     * The green part of the color.\n     *\n     * @returns {Number} the [green] part of the color.\n     **/\n    getGreen: function()\n    {\n      return this.green;\n    },\n\n\n    /**\n     * \n     * The blue part of the color\n     *\n     * @returns {Number} the [blue] part of the color.\n     **/\n    getBlue: function()\n    {\n      return this.blue;\n    },\n\n\n    /**\n     * \n     * The alpha part of the color\n     *\n     * @returns {Number} the [alpha] part of the color.\n     **/\n    getAlpha: function()\n    {\n      return this.alpha;\n    },\n\n    /**\n     * \n     * Returns the ideal Text Color. Useful for font color selection by a given background color.\n     *\n     * @returns {draw2d.util.Color} The <i>ideal</i> inverse color.\n     **/\n    getIdealTextColor: function()\n    {\n       let nThreshold = 105;\n       let bgDelta = (this.red * 0.299) + (this.green * 0.587) + (this.blue * 0.114);\n       return (255 - bgDelta < nThreshold) ? new  draw2d.util.Color(0,0,0) : new  draw2d.util.Color(255,255,255);\n    },\n\n    /**\n     * return array of [r,g,b,a] from any valid color. if failed returns [0,0,0,1]\n     *\n     * @param hexcolor\n     * @returns {*}\n     */\n    hex2rgb: function(color)\n    {\n      if (!color) {\n        return [0, 0, 0, 1]\n      }\n\n      if (color.toLowerCase() === 'transparent') {\n        return [0, 0, 0, 0]\n      }\n\n      if (color[0] === '#'){\n        if (color.length < 7){\n          // convert #RGB and #RGBA to #RRGGBB and #RRGGBBAA\n          color = '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3] + (color.length > 4 ? color[4] + color[4] : '');\n        }\n        return [parseInt(color.substr(1, 2), 16),\n          parseInt(color.substr(3, 2), 16),\n          parseInt(color.substr(5, 2), 16),\n          color.length > 7 ? parseInt(color.substr(7, 2), 16)/255 : 1]\n      }\n\n      if (color.indexOf('rgb') === -1){\n        // convert named colors\n        let temp_elem = document.body.appendChild(document.createElement('fictum')); // intentionally use unknown tag to lower chances of css rule override with !important\n        let flag = 'rgb(1, 2, 3)' // this flag tested on chrome 59, ff 53, ie9, ie10, ie11, edge 14\n        temp_elem.style.color = flag\n        if (temp_elem.style.color !== flag) {\n          return [0, 0, 0, 1] // color set failed - some monstrous css rule is probably taking over the color of our object\n        }\n        temp_elem.style.color = color\n\n        if (temp_elem.style.color === flag || temp_elem.style.color === '') {\n          return [0, 0, 0, 1] // color parse failed\n        }\n        color = getComputedStyle(temp_elem).color\n        document.body.removeChild(temp_elem)\n      }\n\n      if (color.indexOf('rgb') === 0) {\n        if (color.indexOf('rgba') === -1) {\n          color += ',1'; // convert 'rgb(R,G,B)' to 'rgb(R,G,B)A' which looks awful but will pass the regxep below\n        }\n        return color.match(/[\\.\\d]+/g).map( a => +a);\n      }\n    },\n\n    /**\n     *\n     **/\n    hex: function()\n    {\n      return(\n        this.int2hex(this.red)+\n        this.int2hex(this.green)+\n        this.int2hex(this.blue)\n        // breaks raphaelJS...so don'T use it right now\n        //(this.alpha * 255).toString(16).substring(0,2).toUpperCase()\n      );\n    },\n\n\n    /**\n     * \n     * Convert the color object into a HTML CSS representation\n     * @returns {String} the color in rgb(##,##,##) representation\n     **/\n    rgba: function()\n    {\n      return this.getHTMLStyle()\n    },\n\n\n    /**\n     * \n     * Convert the color object into a HTML CSS representation\n     * @returns {String} the color in #RRGGBB representation\n     **/\n    hash: function()\n    {\n        if(this.hashString===null){\n            this.hashString= \"#\"+this.hex();\n        }\n        return this.hashString;\n    },\n\n    /**\n     * @private\n     */\n    int2hex: function(v)\n    {\n      v=Math.round(Math.min(Math.max(0,v),255));\n      return(\"0123456789ABCDEF\".charAt((v-v%16)/16)+\"0123456789ABCDEF\".charAt(v%16));\n    },\n\n    /**\n     * \n     * Returns a darker color of the given one. The original color is unchanged.\n     *\n     * @param {Number} fraction  Darkness fraction between [0..1].\n     * @return{draw2d.util.Color}        Darker color.\n     */\n    darker: function(fraction)\n    {\n       // we can't \"darker\" a undefined color. In this case we return the undefnied color itself\n       //\n       if(this.hashString===\"none\")\n           return this;\n\n       fraction = (typeof fraction === 'undefined') ? 0.1 : fraction;\n\n       let red   = parseInt(Math.round (this.getRed()   * (1.0 - fraction)));\n       let green = parseInt(Math.round (this.getGreen() * (1.0 - fraction)));\n       let blue  = parseInt(Math.round (this.getBlue()  * (1.0 - fraction)));\n\n       if (red   < 0) red   = 0; else if (red   > 255) red   = 255;\n       if (green < 0) green = 0; else if (green > 255) green = 255;\n       if (blue  < 0) blue  = 0; else if (blue  > 255) blue  = 255;\n\n       return new draw2d.util.Color(red, green, blue, this.alpha);\n    },\n\n\n    /**\n     * \n     * Make a color lighter. The original color is unchanged.\n     *\n     * @param {Number} fraction  lighter fraction between [0..1].\n     * @returns {draw2d.util.Color} Lighter color.\n     */\n    lighter: function( fraction)\n    {\n        // we can't \"lighter\" a undefined color. In this case we return the undefined color itself\n        //\n        if(this.hashString===\"none\")\n            return this;\n\n        fraction = (typeof fraction === 'undefined') ? 0.1 : fraction;\n\n        let red   = parseInt(Math.round (this.getRed()   * (1.0 + fraction)));\n        let green = parseInt(Math.round (this.getGreen() * (1.0 + fraction)));\n        let blue  = parseInt(Math.round (this.getBlue()  * (1.0 + fraction)));\n\n        if (red   < 0) red   = 0; else if (red   > 255) red   = 255;\n        if (green < 0) green = 0; else if (green > 255) green = 255;\n        if (blue  < 0) blue  = 0; else if (blue  > 255) blue  = 255;\n\n        return new draw2d.util.Color(red, green, blue, this.alpha);\n    },\n\n    /**\n     * \n     * Return a new color wich is faded to the given color.\n     * @param {draw2d.util.Color} color\n     * @param {Number} pc the fade percentage in [0..1]\n     * @returns {draw2d.util.Color}\n     *\n     * @since 2.1.0\n     */\n    fadeTo: function(color, pc){\n\n        let r= Math.floor(this.red+(pc*(color.red-this.red)) + .5);\n        let g= Math.floor(this.green+(pc*(color.green-this.green)) + .5);\n        let b= Math.floor(this.blue+(pc*(color.blue-this.blue)) + .5);\n        let a= Math.floor(this.alpha+(pc*(color.alpha-this.alpha)) + .5);\n\n        return new draw2d.util.Color(r,g,b,a);\n    },\n\n\t/**\n\t * \n\t * Compares two color objects\n\t *\n\t * @param {draw2d.util.Color} o\n\t * @returns {Boolean}\n\t **/\n\tequals: function( o)\n\t{\n\t\tif(!(o instanceof draw2d.util.Color)){\n\t\t\treturn false;\n\t\t}\n\t\treturn this.rgba()===o.rgba();\n\t}\n\n});\n\nmodule.exports = draw2d.util.Color;\n","\n\n/*!\n * JavaScript Debug - v0.4 - 6/22/2010\n * http://benalman.com/projects/javascript-debug-console-log/\n *\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n *\n * With lots of help from Paul Irish!\n * http://paulirish.com/\n */\n// Script: JavaScript Debug: A simple wrapper for console.log\n//\n// *Version: 0.4, Last Updated: 6/22/2010*\n//\n// Tested with Internet Explorer 6-8, Firefox 3-3.6, Safari 3-4, Chrome 3-5, Opera 9.6-10.5\n//\n// Home       - http://benalman.com/projects/javascript-debug-console-log/\n// GitHub     - http://github.com/cowboy/javascript-debug/\n// Source     - http://github.com/cowboy/javascript-debug/raw/master/ba-debug.js\n// (Minified) - http://github.com/cowboy/javascript-debug/raw/master/ba-debug.min.js (1.1kb)\n//\n// About: License\n//\n// Copyright (c) 2010 \"Cowboy\" Ben Alman,\n// Dual licensed under the MIT and GPL licenses.\n// http://benalman.com/about/license/\n//\n// About: Support and Testing\n//\n// Information about what browsers this code has been tested in.\n//\n// Browsers Tested - Internet Explorer 6-8, Firefox 3-3.6, Safari 3-4, Chrome\n// 3-5, Opera 9.6-10.5\n//\n// About: Examples\n//\n// These working examples, complete with fully commented code, illustrate a few\n// ways in which this plugin can be used.\n//\n// Examples - http://benalman.com/code/projects/javascript-debug/examples/debug/\n//\n// About: Revision History\n//\n// 0.4 - (6/22/2010) Added missing passthrough methods: exception,\n//       groupCollapsed, table\n// 0.3 - (6/8/2009) Initial release\n//\n// Topic: Pass-through console methods\n//\n// assert, clear, count, dir, dirxml, exception, group, groupCollapsed,\n// groupEnd, profile, profileEnd, table, time, timeEnd, trace\n//\n// These console methods are passed through (but only if both the console and\n// the method exists), so use them without fear of reprisal. Note that these\n// methods will not be passed through if the logging level is set to 0 via\n// <debug.setLevel>.\n\nwindow.debug = (function(){\n  var window = this,\n\n    // Some convenient shortcuts.\n    aps = Array.prototype.slice,\n    con = console,\n\n    // Public object to be returned.\n    that = {},\n\n    callback_func,\n    callback_force,\n\n    // Default logging level, show everything.\n    log_level = 9,\n\n    // Logging methods, in \"priority order\". Not all console implementations\n    // will utilize these, but they will be used in the callback passed to\n    // setCallback.\n    log_methods = [ 'error', 'warn', 'info', 'debug', 'log' ],\n\n    // Pass these methods through to the console if they exist, otherwise just\n    // fail gracefully. These methods are provided for convenience.\n    pass_methods = 'assert clear count dir dirxml exception group groupCollapsed groupEnd profile profileEnd table time timeEnd trace'.split(' '),\n    idx = pass_methods.length,\n\n    // Logs are stored here so that they can be recalled as necessary.\n    logs = [];\n\n  while ( --idx >= 0 ) {\n    (function( method ){\n\n      // Generate pass-through methods. These methods will be called, if they\n      // exist, as long as the logging level is non-zero.\n      that[ method ] = function() {\n        log_level !== 0 && con && con[ method ]\n          && con[ method ].apply( con, arguments );\n      };\n\n    })( pass_methods[idx] );\n  }\n\n  idx = log_methods.length;\n  while ( --idx >= 0 ) {\n    (function( idx, level ){\n\n      // Method: debug.log\n      //\n      // Call the console.log method if available. Adds an entry into the logs\n      // array for a callback specified via <debug.setCallback>.\n      //\n      // Usage:\n      //\n      //  debug.log( object [, object, ...] );                               - -\n      //\n      // Arguments:\n      //\n      //  object - (Object) Any valid JavaScript object.\n\n      // Method: debug.debug\n      //\n      // Call the console.debug method if available, otherwise call console.log.\n      // Adds an entry into the logs array for a callback specified via\n      // <debug.setCallback>.\n      //\n      // Usage:\n      //\n      //  debug.debug( object [, object, ...] );                             - -\n      //\n      // Arguments:\n      //\n      //  object - (Object) Any valid JavaScript object.\n\n      // Method: debug.info\n      //\n      // Call the console.info method if available, otherwise call console.log.\n      // Adds an entry into the logs array for a callback specified via\n      // <debug.setCallback>.\n      //\n      // Usage:\n      //\n      //  debug.info( object [, object, ...] );                              - -\n      //\n      // Arguments:\n      //\n      //  object - (Object) Any valid JavaScript object.\n\n      // Method: debug.warn\n      //\n      // Call the console.warn method if available, otherwise call console.log.\n      // Adds an entry into the logs array for a callback specified via\n      // <debug.setCallback>.\n      //\n      // Usage:\n      //\n      //  debug.warn( object [, object, ...] );                              - -\n      //\n      // Arguments:\n      //\n      //  object - (Object) Any valid JavaScript object.\n\n      // Method: debug.error\n      //\n      // Call the console.error method if available, otherwise call console.log.\n      // Adds an entry into the logs array for a callback specified via\n      // <debug.setCallback>.\n      //\n      // Usage:\n      //\n      //  debug.error( object [, object, ...] );                             - -\n      //\n      // Arguments:\n      //\n      //  object - (Object) Any valid JavaScript object.\n\n      that[ level ] = function() {\n        var args = aps.call( arguments ),\n          log_arr = [ level ].concat( args );\n\n        logs.push( log_arr );\n        exec_callback( log_arr );\n\n        if ( !con || !is_level( idx ) ) { return; }\n\n        con.firebug ? con[ level ].apply( window, args )\n          : con[ level ] ? con[ level ]( args )\n          : con.log( args );\n      };\n\n    })( idx, log_methods[idx] );\n  }\n\n  // Execute the callback function if set.\n  function exec_callback( args ) {\n    if ( callback_func && (callback_force || !con || !con.log) ) {\n      callback_func.apply( window, args );\n    }\n  };\n\n  // Method: debug.setLevel\n  //\n  // Set a minimum or maximum logging level for the console. Doesn't affect\n  // the <debug.setCallback> callback function, but if set to 0 to disable\n  // logging, <Pass-through console methods> will be disabled as well.\n  //\n  // Usage:\n  //\n  //  debug.setLevel( [ level ] )                                            - -\n  //\n  // Arguments:\n  //\n  //  level - (Number) If 0, disables logging. If negative, shows N lowest\n  //    priority levels of log messages. If positive, shows N highest priority\n  //    levels of log messages.\n  //\n  // Priority levels:\n  //\n  //   log (1) < debug (2) < info (3) < warn (4) < error (5)\n\n  that.setLevel = function( level ) {\n    log_level = typeof level === 'number' ? level : 9;\n  };\n\n  // Determine if the level is visible given the current log_level.\n  function is_level( level ) {\n    return log_level > 0\n      ? log_level > level\n      : log_methods.length + log_level <= level;\n  };\n\n  // Method: debug.setCallback\n  //\n  // Set a callback to be used if logging isn't possible due to console.log\n  // not existing. If unlogged logs exist when callback is set, they will all\n  // be logged immediately unless a limit is specified.\n  //\n  // Usage:\n  //\n  //  debug.setCallback( callback [, force ] [, limit ] )\n  //\n  // Arguments:\n  //\n  //  callback - (Function) The aforementioned callback function. The first\n  //    argument is the logging level, and all subsequent arguments are those\n  //    passed to the initial debug logging method.\n  //  force - (Boolean) If false, log to console.log if available, otherwise\n  //    callback. If true, log to both console.log and callback.\n  //  limit - (Number) If specified, number of lines to limit initial scrollback\n  //    to.\n\n  that.setCallback = function() {\n    var args = aps.call( arguments ),\n      max = logs.length,\n      i = max;\n\n    callback_func = args.shift() || null;\n    callback_force = typeof args[0] === 'boolean' ? args.shift() : false;\n\n    i -= typeof args[0] === 'number' ? args.shift() : max;\n\n    while ( i < max ) {\n      exec_callback( logs[i++] );\n    }\n  };\n\n  return that;\n})();\n\n","import draw2d from '../packages'\n\n\ndraw2d.util.JSON = {\n\n        /**\n         * \n         * Given a dot deliminated string set will create an object\n         * based on the structure of the string with the desired value\n         *\n         * @param {Object} data   the json object to modify\n         * @param {String} path   path indicating where value should be placed\n         * @param {Object} value  the value desired to be set at the location determined by path\n         */\n        set: function(data, path, value) {\n          if(!path || path===''){\n              return;\n          }\n\n          let re = /[\\w-]+|\\[\\]|([^\\[[\\w]\\]]|[\"'](.*?)['\"])/g;\n          // parse path on dots, and brackets\n          let pathList = path.match(re);\n          let parent = data;\n          let parentKey;\n          let grandParent = null;\n          let grandParentKey = null;\n\n          let addObj = function(obj, key, data) {\n            if(key === '[]') {\n              obj.push(data);\n            } else {\n              obj[key] = data;\n            }\n          };\n\n          while(pathList.length > 0) {\n            parentKey = pathList.shift().replace(/[\"']/g, '');\n\n            // Number, treat it as an array\n            if (!isNaN(+parentKey) || parentKey === \"[]\") {\n              if(parent.constructor !== Array ) {\n                parent = [];\n                addObj(grandParent, grandParentKey, parent);\n              }\n            // String, treat it as a key\n            }\n            else if (typeof parentKey===\"string\") {\n              if(!$.isPlainObject(parent)) {\n                parent = {};\n                addObj(grandParent, grandParentKey, parent);\n              }\n            }\n            // Next\n            grandParent = parent;\n            grandParentKey = parentKey;\n            parent = parent[parentKey];\n          }\n\n          addObj(grandParent, grandParentKey, value);\n        },\n\n        /**\n         * \n         * Returns the value defined by the path passed in\n         *\n         * @param  {Object} data the JSON data object\n         * @param  {String} path string leading to a desired value\n         */\n        get: function(data, path) {\n          let regex = /[\\w-]+|\\[\\]|([^\\[[\\w]\\]]|[\"'](.*?)['\"])/g;\n          //check if path is truthy\n          if (!path){\n              return undefined;\n          }\n          //parse path on dots and brackets\n          let paths = path.match(regex);\n          //step through data object until all keys in path have been processed\n          while (data !== null && paths.length > 0) {\n            if(data.propertyIsEnumerable(paths[0].replace(/\"/g, ''))){\n              data = data[paths.shift().replace(/\"/g, '')];\n            }\n            else{\n              return undefined;\n            }\n          }\n          return data;\n        },\n\n        /**\n         * \n         * calculates the diff between the given json objects\n         *\n         */\n        diff: function(obj1, obj2) {\n            let result = {};\n            for(let key in obj1) {\n              let v1 = obj1[key];\n              let v2 = obj2[key];\n                if(v1 !== v2) {\n                \tif(v1.equals ){\n                \t\tif(!v1.equals(v2)){\n                \t\t\tresult[key] = obj1[key];\n                \t\t}\n                \t}\n                \telse{\n            \t\t\tresult[key] = obj1[key];\n                \t}\n                }\n            }\n            return result;\n        },\n\n        flatDiff: function(obj1, obj2) {\n          let result = {};\n            for(let key in obj1) {\n                if(obj1[key] !== obj2[key]) {\n                    result[key] = obj1[key];\n                }\n            }\n            return result;\n        },\n\n        ensureDefault:function( json, attribute, value)\n        {\n            if (!json.hasOwnProperty(attribute)) {\n                json[attribute] = value;\n            }\n        }\n};\n\nmodule.exports = draw2d.util.JSON;\n","\n\n// avoid iPad bounce effect during DragDrop//\ndocument.ontouchmove = function(e){e.preventDefault();};\n\n\n","\n// extending raphael with a polygon function\nRaphael.fn.polygon = function(pointString) {\n  var poly  = ['M'];\n  var point = pointString.split(' ');\n      \n  for(var i=0; i < point.length; i++) {\n     var c = point[i].split(',');\n     for(var j=0; j < c.length; j++) {\n        var d = parseFloat(c[j]);\n        if (!isNaN(d))\n          poly.push(d);\n     };\n     if (i == 0)\n      poly.push('L');\n  }\n  poly.push('Z');\n  \n  return this.path(poly);\n};","import draw2d from '../packages'\n\n/**\n * @class\n * Generates a (pseudo) UUID's\n *\n * @example\n *     // a UUID in the format\n *     // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)\n *     var id = draw2d.util.UUID.create();\n *\n * @author Andreas Herz\n */\ndraw2d.util.UUID = {\n  /**\n   *\n   * Generates a unique id.<br>\n   * But just for the correctness: <strong>this is no Global Unique Identifier</strong>, it is just a random generator\n   * with the output that looks like a GUID. <br>\n   * But may be also useful.\n   *\n   * @returns {String} the  UUID in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)\n   **/\n  create: function () {\n    let segment = function () {\n      return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)\n    }\n    return (segment() + segment() + \"-\" + segment() + \"-\" + segment() + \"-\" + segment() + \"-\" + segment() + segment() + segment())\n  }\n}\n\nmodule.exports = draw2d.util.UUID\n","\n\n// Pass in the objects to merge as arguments.// For a deep extend, set the first argument to `true`.\nlet fn = function () {\n\n  // Variables\n  let extended = {}\n  let deep = false\n  let i = 0\n  let length = arguments.length\n\n  // Check if a deep merge\n  if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {\n    deep = arguments[0]\n    i++\n  }\n\n  // Merge the object into the extended object\n  /**\n   *\n   * @param obj\n   */\n  let merge = function (obj) {\n    for ( let prop in obj ) {\n      if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {\n        // If deep merge and property is an object, merge properties\n        if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {\n          extended[prop] = extend( true, extended[prop], obj[prop] )\n        } else {\n          extended[prop] = obj[prop]\n        }\n      }\n    }\n  }\n\n  // Loop through each object and conduct a merge\n  for ( ; i < length; i++ ) {\n    let obj = arguments[i]\n    merge(obj)\n  }\n\n  return extended\n\n}\nmodule.exports = fn\nglobal.extend = fn\n","\n// hacking RaphaelJS to support groups of elements\n//\n(function() {\n    Raphael.fn.group = function(f, g) {\n        var enabled = document.getElementsByTagName(\"svg\").length > 0;\n        if (!enabled) {\n            // return a stub for VML compatibility\n            return {\n                add : function() {\n                    // intentionally left blank\n                }\n            };\n        }\n        var i;\n        this.svg = \"http://www.w3.org/2000/svg\";\n        this.defs = document.getElementsByTagName(\"defs\")[f];\n        this.svgcanv = document.getElementsByTagName(\"svg\")[f];\n        this.group = document.createElementNS(this.svg, \"g\");\n        for(i = 0;i < g.length;i++) {\n            this.group.appendChild(g[i].node);\n        }\n        this.svgcanv.appendChild(this.group);\n        this.group.translate = function(c, a) {\n            this.setAttribute(\"transform\", \"translate(\" + c + \",\" + a + \") scale(\" + this.getAttr(\"scale\").x + \",\" + this.getAttr(\"scale\").y + \")\");\n        };\n        this.group.rotate = function(c, a, e) {\n            this.setAttribute(\"transform\", \"translate(\" + this.getAttr(\"translate\").x + \",\" + this.getAttr(\"translate\").y + \") scale(\" + this.getAttr(\"scale\").x + \",\" + this.getAttr(\"scale\").y + \") rotate(\" + c + \",\" + a + \",\" + e + \")\");\n        };\n        this.group.scale = function(c, a) {\n            this.setAttribute(\"transform\", \"scale(\" + c + \",\" + a + \") translate(\" + this.getAttr(\"translate\").x + \",\" + this.getAttr(\"translate\").y + \")\");\n        };\n        this.group.push = function(c) {\n            this.appendChild(c.node);\n        };\n        this.group.getAttr = function(c) {\n            this.previous = this.getAttribute(\"transform\") ? this.getAttribute(\"transform\") : \"\";\n            var a = [], e, h, j;\n            a = this.previous.split(\" \");\n            for(i = 0;i < a.length;i++) {\n                if(a[i].substring(0, 1) == \"t\") {\n                    var d = a[i], b = [];\n                    b = d.split(\"(\");\n                    d = b[1].substring(0, b[1].length - 1);\n                    b = [];\n                    b = d.split(\",\");\n                    e = b.length === 0 ? {x:0, y:0} : {x:b[0], y:b[1]};\n                }else {\n                    if(a[i].substring(0, 1) === \"r\") {\n                        d = a[i];\n                        b = d.split(\"(\");\n                        d = b[1].substring(0, b[1].length - 1);\n                        b = d.split(\",\");\n                        h = b.length === 0 ? {x:0, y:0, z:0} : {x:b[0], y:b[1], z:b[2]};\n                    }else {\n                        if(a[i].substring(0, 1) === \"s\") {\n                            d = a[i];\n                            b = d.split(\"(\");\n                            d = b[1].substring(0, b[1].length - 1);\n                            b = d.split(\",\");\n                            j = b.length === 0 ? {x:1, y:1} : {x:b[0], y:b[1]};\n                        }\n                    }\n                }\n            }\n            if(typeof e === \"undefined\") {\n                e = {x:0, y:0};\n            }\n            if(typeof h === \"undefined\") {\n                h = {x:0, y:0, z:0};\n            }\n            if(typeof j === \"undefined\") {\n                j = {x:1, y:1};\n            }\n\n            if(c == \"translate\") {\n                var k = e;\n            }else {\n                if(c == \"rotate\") {\n                    k = h;\n                }else {\n                    if(c == \"scale\") {\n                        k = j;\n                    }\n                }\n            }\n            return k;\n        };\n        this.group.copy = function(el){\n            this.copy = el.node.cloneNode(true);\n            this.appendChild(this.copy);\n        };\n        return this.group;\n    };\n})();\n\n/**\n * adding support method to check if the node is already visible\n **/\n(function() {\n    Raphael.el.isVisible = function() {\n        return (this.node.style.display !== \"none\");\n    }\n})();\n","\n\n/**\n * @class\n *\n * A bezier spline object.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.util.spline.Spline\n */\nimport draw2d from '../../packages'\n\ndraw2d.util.spline.BezierSpline = draw2d.util.spline.Spline.extend(\n\n    /** @lends draw2d.util.spline.BezierSpline.prototype */\n    {\n    \n    NAME: \"draw2d.util.spline.BezierSpline\",\n\n    /**\n     */\n    init: function()\n    {\n        this._super();\n    },\n\n\n\n    /**\n     * Create a spline based on the given control points.\n     * The generated curve starts in the first control point and ends\n     * in the last control point.\n     *\n     * @param {Array} controlPoints  Control points of spline (x0,y0,z0,x1,y1,z1,...).\n     * @param {Number} parts Number of parts to divide each leg into.\n     *\n     * @returns {Array} the new generated array with new draw2d.geo.Point\n     */\n    generate: function(controlPoints, parts)\n    {\n      var n = controlPoints.getSize();\n      var spline = new draw2d.util.ArrayList();\n\n      spline.add(this.p(0, 0, controlPoints));\n\n      for (var i = 0; i < n - 3; i += 3) {\n        for (var j = 1; j <= parts; j++) {\n           spline.add(this.p (i, j /  parts, controlPoints));\n        }\n      }\n\n  //    spline.add(controlPoints.get(controlPoints.getSize()-1));\n\n      return spline;\n    },\n\n\n\n    p: function( i,  t,  cp)\n    {\n      var x = 0.0;\n      var y = 0.0;\n\n      var k = i;\n      for (var j = 0; j <= 3; j++) {\n        var b = this.blend (j, t);\n        var p = cp.get(k++);\n        x += b * p.x;\n        y += b * p.y;\n     }\n\n      return new draw2d.geo.Point( x, y);\n    },\n\n\n\n    blend: function ( i,  t)\n    {\n      if      (i == 0) return (1 - t) * (1 - t) * (1 - t);\n      else if (i == 1) return 3 * t * (1 - t) * (1 - t);\n      else if (i == 2) return 3 * t * t * (1 - t);\n      else             return t * t * t;\n    }\n});\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A catmull-rom spline object.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.util.spline.CubicSpline\n */\ndraw2d.util.spline.CatmullRomSpline = draw2d.util.spline.CubicSpline.extend(\n\n    /** @lends draw2d.util.spline.CatmullRomSpline.prototype */\n    {\n    \n    NAME: \"draw2d.util.spline.CatmullRomSpline\",\n\n    /**\n     */\n    init: function()\n    {\n        this._super();\n    },\n\n\n    blend: function(i, t) {\n        if (i == -2)\n            return ((-t + 2) * t - 1) * t / 2;\n        else if (i == -1)\n            return (((3 * t - 5) * t) * t + 2) / 2;\n        else if (i == 0)\n            return ((-3 * t + 4) * t + 1) * t / 2;\n        else\n            return ((t - 1) * t * t) / 2;\n    }\n\n});\n","import draw2d from '../../packages'\n\n\n/**\n * @class\n *\n * A cubic spline object.\n *\n * @inheritable\n * @author Andreas Herz\n *\n * @extends draw2d.util.spline.Spline\n */\ndraw2d.util.spline.CubicSpline = draw2d.util.spline.Spline.extend(\n\n    /** @lends draw2d.util.spline.CubicSpline.prototype */\n    {\n    \n    NAME: \"draw2d.util.spline.CubicSpline\",\n\n    /**\n     */\n    init: function()\n    {\n        this._super();\n    },\n\n\n    /**\n    * Create a spline based on the given control points.\n    * The generated curve starts in the first control point and ends\n    * in the last control point.\n    *\n    * @param {Array} controlPoints  Control points of spline (x0,y0,z0,x1,y1,z1,...).\n    * @param {Number} parts Number of parts to divide each leg into.\n    *\n    * @returns {Array} the new generated array with new draw2d.geo.Point\n    */\n    generate: function(controlPoints, parts)\n    {\n        // Endpoints are added twice to get them include in the\n        // generated array\n        var cp = new draw2d.util.ArrayList();\n        cp.add(controlPoints.get(0));\n        cp.addAll(controlPoints);\n        cp.add(controlPoints.get(controlPoints.getSize()-1));\n\n      var n = cp.getSize();\n      var spline = new draw2d.util.ArrayList();\n      spline.add(controlPoints.get(0));\n      spline.add( this.p(1, 0, cp) );\n\n      for (var i = 1; i < n - 2; i++) {\n        for (var j = 1; j <= parts; j++) {\n          spline.add( this.p(i, j / parts, cp));\n        }\n      }\n      spline.add(controlPoints.get(controlPoints.getSize()-1));\n\n      return spline;\n    },\n\n\n      p: function( i,  t,  cp)\n      {\n        var x = 0.0;\n        var y = 0.0;\n\n        var k = i-1;\n        for (var j = -2; j <= 1; j++) {\n          var b = this.blend (j, t);\n          var p = cp.get(k++);\n          x += b * p.x;\n          y += b * p.y;\n        }\n\n       return new draw2d.geo.Point(x, y);\n      },\n\n\n\n      blend: function(i, t)\n      {\n        if (i === -2)\n            return (((-t + 3) * t - 3) * t + 1) / 6;\n        else if (i === -1)\n            return (((3 * t - 6) * t) * t + 4) / 6;\n        else if (i === 0)\n            return (((-3 * t + 3) * t + 3) * t + 1) / 6;\n\n        return (t * t * t) / 6;\n      }\n\n});\n","\n/**\n * @class\n *\n *  An abstract class defining a general spline object.\n */\nimport draw2d from '../../packages'\n\ndraw2d.util.spline.Spline = Class.extend(\n    /** @lends draw2d.util.spline.Spline.prototype */\n    {\n    \n    NAME: \"draw2d.util.spline.Spline\",\n\n    /**\n     */\n    init: function()\n    {\n    },\n\n   /**\n    * Create a spline based on the given control points.\n    * The generated curve starts in the first control point and ends\n    * in the last control point.\n    *\n    * @param {Array} controlPoints  Control points of spline (x0,y0,z0,x1,y1,z1,...).\n    * @param {Number} parts Number of parts to divide each leg into.\n    **/\n    generate: function(controlPoints, parts){\n        throw \"inherit classes must implement the method 'draw2d.util.spline.Spline.generate()'\";\n    }\n\n});\n"],"sourceRoot":""}