diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py
index 09566fb7fc92..79f75270750b 100644
--- a/src/Mod/Draft/DraftGui.py
+++ b/src/Mod/Draft/DraftGui.py
@@ -283,6 +283,8 @@ def setupToolBar(self,task=False):
self.addButton = self._pushbutton("addButton", self.layout, icon="Draft_AddPoint", width=22, checkable=True)
self.delButton = self._pushbutton("delButton", self.layout, icon="Draft_DelPoint", width=22, checkable=True)
+ self.tangentButton = self._pushbutton("tangentButton", self.layout, icon="Draft_BezTanNode", width=22, checkable=True)
+ self.symmetricButton = self._pushbutton("symmetricButton", self.layout, icon="Draft_BezSymNode", width=22, checkable=True)
# point
@@ -371,6 +373,8 @@ def setupToolBar(self,task=False):
QtCore.QObject.connect(self.offsetValue,QtCore.SIGNAL("returnPressed()"),self.validatePoint)
QtCore.QObject.connect(self.addButton,QtCore.SIGNAL("toggled(bool)"),self.setAddMode)
QtCore.QObject.connect(self.delButton,QtCore.SIGNAL("toggled(bool)"),self.setDelMode)
+ QtCore.QObject.connect(self.tangentButton,QtCore.SIGNAL("toggled(bool)"),self.setTangentMode)
+ QtCore.QObject.connect(self.symmetricButton,QtCore.SIGNAL("toggled(bool)"),self.setSymmetricMode)
QtCore.QObject.connect(self.finishButton,QtCore.SIGNAL("pressed()"),self.finish)
QtCore.QObject.connect(self.closeButton,QtCore.SIGNAL("pressed()"),self.closeLine)
QtCore.QObject.connect(self.wipeButton,QtCore.SIGNAL("pressed()"),self.wipeLine)
@@ -445,7 +449,8 @@ def setupTray(self):
def setupStyle(self):
style = "#constrButton:Checked {background-color: "
style += self.getDefaultColor("constr",rgb=True)+" } "
- style += "#addButton:Checked, #delButton:checked {"
+ style += "#addButton:Checked, #delButton:checked, "
+ style += "#tangentButton:Checked, #symmetricButton:checked {"
style += "background-color: rgb(20,100,250) }"
self.baseWidget.setStyleSheet(style)
@@ -477,6 +482,8 @@ def retranslateUi(self, widget=None):
self.occOffset.setText(translate("draft", "&OCC-style offset"))
self.addButton.setToolTip(translate("draft", "Add points to the current object"))
self.delButton.setToolTip(translate("draft", "Remove points from the current object"))
+ self.tangentButton.setToolTip(translate("draft", "Make Bezier node tangent"))
+ self.symmetricButton.setToolTip(translate("draft", "Make Bezier node symmetric"))
self.undoButton.setText(translate("draft", "&Undo"))
self.undoButton.setToolTip(translate("draft", "Undo the last segment (CTRL+Z)"))
self.closeButton.setText(translate("draft", "&Close"))
@@ -672,6 +679,8 @@ def offUi(self):
self.finishButton.hide()
self.addButton.hide()
self.delButton.hide()
+ self.tangentButton.hide()
+ self.symmetricButton.hide()
self.undoButton.hide()
self.closeButton.hide()
self.wipeButton.hide()
@@ -792,7 +801,7 @@ def selectUi(self,extra=None,callback=None):
self.labelx.show()
self.makeDumbTask(extra,callback)
- def editUi(self):
+ def editUi(self, mode=None):
self.taskUi(translate("draft", "Edit"))
self.hideXYZ()
self.numFaces.hide()
@@ -800,9 +809,17 @@ def editUi(self):
self.hasFill.hide()
self.addButton.show()
self.delButton.show()
+ if mode == 'BezCurve':
+ self.tangentButton.show()
+ self.symmetricButton.show()
self.finishButton.show()
self.closeButton.show()
-
+ # always start Edit with buttons unchecked
+ self.addButton.setChecked(False)
+ self.delButton.setChecked(False)
+ self.tangentButton.setChecked(False)
+ self.symmetricButton.setChecked(False)
+
def extUi(self):
self.hasFill.show()
self.continueCmd.show()
@@ -830,6 +847,10 @@ def setEditButtons(self,mode):
self.addButton.setEnabled(mode)
self.delButton.setEnabled(mode)
+ def setBezEditButtons(self,mode):
+ self.tangentButton.setEnabled(mode)
+ self.symmetricButton.setEnabled(mode)
+
def setNextFocus(self):
def isThere(widget):
if widget.isEnabled() and widget.isVisible():
@@ -1267,7 +1288,6 @@ def displayPoint(self, point=None, last=None, plane=None, mask=None):
self.zValue.setEnabled(True)
self.xValue.setFocus()
self.xValue.selectAll()
-
def getDefaultColor(self,type,rgb=False):
"gets color from the preferences or toolbar"
@@ -1357,10 +1377,26 @@ def popupTriggered(self,action):
def setAddMode(self,bool):
if self.addButton.isChecked():
self.delButton.setChecked(False)
+ self.symmetricButton.setChecked(False)
+ self.tangentButton.setChecked(False)
def setDelMode(self,bool):
if self.delButton.isChecked():
self.addButton.setChecked(False)
+ self.symmetricButton.setChecked(False)
+ self.tangentButton.setChecked(False)
+
+ def setTangentMode(self,bool):
+ if self.tangentButton.isChecked():
+ self.symmetricButton.setChecked(False)
+ self.addButton.setChecked(False)
+ self.delButton.setChecked(False)
+
+ def setSymmetricMode(self,bool):
+ if self.symmetricButton.isChecked():
+ self.tangentButton.setChecked(False)
+ self.addButton.setChecked(False)
+ self.delButton.setChecked(False)
def setRadiusValue(self,val):
self.radiusValue.setText("%.2f" % val)
diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py
index 8cdebc605b6c..e3a0b24f3833 100644
--- a/src/Mod/Draft/DraftTools.py
+++ b/src/Mod/Draft/DraftTools.py
@@ -107,7 +107,7 @@ def getPoint(target,args,mobile=False,sym=False,workingplane=True,noTracker=Fals
the point wont be projected on the Working Plane. if noTracker is True, the
tracking line will not be displayed
'''
-
+
ui = FreeCADGui.draftToolBar
view = Draft.get3DView()
@@ -150,7 +150,7 @@ def getSupport(args=None):
plane.alignToFace(sel.SubObjects[0])
return sel.Object
return None
-
+
snapped = Draft.get3DView().getObjectInfo((args["Position"][0],args["Position"][1]))
if not snapped: return None
obj = None
@@ -186,8 +186,8 @@ def setMod(args,mod,state):
args["CtrlDown"] = state
elif mod == "alt":
args["AltDown"] = state
-
-
+
+
#---------------------------------------------------------------------------
@@ -196,7 +196,7 @@ def setMod(args,mod,state):
class DraftTool:
"The base class of all Draft Tools"
-
+
def __init__(self):
self.commitList = []
@@ -209,10 +209,10 @@ def IsActive(self):
def Activated(self,name="None"):
if FreeCAD.activeDraftCommand:
FreeCAD.activeDraftCommand.finish()
-
+
global Part, DraftGeomUtils
import Part, DraftGeomUtils
-
+
self.ui = None
self.call = None
self.support = None
@@ -240,7 +240,7 @@ def Activated(self,name="None"):
self.planetrack = None
if Draft.getParam("showPlaneTracker",False):
self.planetrack = PlaneTracker()
-
+
def finish(self):
self.node = []
FreeCAD.activeDraftCommand = None
@@ -293,7 +293,7 @@ def getStrings(self,addrot=None):
fil = str(bool(self.ui.fillmode))
else:
fil = "True"
-
+
return qr,sup,points,fil
#---------------------------------------------------------------------------
@@ -308,7 +308,7 @@ def GetResources(self):
'Accel' : "W, P",
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_SelectPlane", "SelectPlane"),
'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_SelectPlane", "Select a working plane for geometry creation")}
-
+
def Activated(self):
DraftTool.Activated(self)
self.offset = 0
@@ -402,17 +402,17 @@ def display(self,arg):
#---------------------------------------------------------------------------
# Geometry constructors
#---------------------------------------------------------------------------
-
+
class Creator(DraftTool):
"A generic Draft Creator Tool used by creation tools such as line or arc"
-
+
def __init__(self):
DraftTool.__init__(self)
def Activated(self,name="None"):
DraftTool.Activated(self)
self.support = getSupport()
-
+
class Line(Creator):
"The Line FreeCAD command definition"
@@ -549,7 +549,7 @@ def wipe(self):
if self.planetrack:
self.planetrack.set(self.node[0])
msg(translate("draft", "Pick next point:\n"))
-
+
def numericInput(self,numx,numy,numz):
"this function gets called by the toolbar when valid x, y, and z have been entered there"
self.point = Vector(numx,numy,numz)
@@ -558,7 +558,7 @@ def numericInput(self,numx,numy,numz):
if (not self.isWire and len(self.node) == 2):
self.finish(False,cont=True)
self.ui.setNextFocus()
-
+
class Wire(Line):
"a FreeCAD command for creating a wire"
def __init__(self):
@@ -571,10 +571,10 @@ def GetResources(self):
def Activated(self):
Line.Activated(self,name=translate("draft","DWire"))
-
+
class BSpline(Line):
"a FreeCAD command for creating a b-spline"
-
+
def __init__(self):
Line.__init__(self,wiremode=True)
@@ -642,7 +642,7 @@ def drawUpdate(self,point):
spline.interpolate(self.node, False)
self.obj.Shape = spline.toShape()
msg(translate("draft", "Pick next point, or (F)inish or (C)lose:\n"))
-
+
def finish(self,closed=False,cont=False):
"terminates the operation and closes the poly if asked"
if self.ui:
@@ -668,7 +668,7 @@ def finish(self,closed=False,cont=False):
class BezCurve(Line):
"a FreeCAD command for creating a Bezier Curve"
-
+
def __init__(self):
Line.__init__(self,wiremode=True)
@@ -725,7 +725,6 @@ def undolast(self):
msg(translate("draft", "Last point has been removed\n"))
def drawUpdate(self,point):
- msg(translate("draft", "BezCurve drawUpdate\n"))
if (len(self.node) == 1):
self.bezcurvetrack.on()
if self.planetrack:
@@ -766,10 +765,10 @@ def finish(self,closed=False,cont=False):
if self.ui:
if self.ui.continueMode:
self.Activated()
-
+
class FinishLine:
"a FreeCAD command to finish any running Line drawing operation"
-
+
def Activated(self):
if (FreeCAD.activeDraftCommand != None):
if (FreeCAD.activeDraftCommand.featureName == "Line"):
@@ -786,20 +785,20 @@ def IsActive(self):
else:
return False
-
+
class CloseLine:
"a FreeCAD command to close any running Line drawing operation"
-
+
def Activated(self):
if (FreeCAD.activeDraftCommand != None):
if (FreeCAD.activeDraftCommand.featureName == "Line"):
FreeCAD.activeDraftCommand.finish(True)
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Lock',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_CloseLine", "Close Line"),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_CloseLine", "Closes the line being drawn")}
-
+
def IsActive(self):
if FreeCADGui.ActiveDocument:
return True
@@ -809,27 +808,27 @@ def IsActive(self):
class UndoLine:
"a FreeCAD command to undo last drawn segment of a line"
-
+
def Activated(self):
if (FreeCAD.activeDraftCommand != None):
if (FreeCAD.activeDraftCommand.featureName == "Line"):
FreeCAD.activeDraftCommand.undolast()
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Rotate',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_UndoLine", "Undo last segment"),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_UndoLine", "Undoes the last drawn segment of the line being drawn")}
-
+
def IsActive(self):
if FreeCADGui.ActiveDocument:
return True
else:
return False
-
+
class Rectangle(Creator):
"the Draft_Rectangle FreeCAD command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Rectangle',
'Accel' : "R, E",
@@ -939,7 +938,7 @@ def appendPoint(self,point):
class Arc(Creator):
"the Draft_Arc FreeCAD command definition"
-
+
def __init__(self):
self.closedCircle=False
self.featureName = "Arc"
@@ -1191,7 +1190,7 @@ def numericInput(self,numx,numy,numz):
self.step = 1
self.ui.setNextFocus()
msg(translate("draft", "Pick radius:\n"))
-
+
def numericRadius(self,rad):
"this function gets called by the toolbar when valid radius have been entered there"
if (self.step == 1):
@@ -1236,14 +1235,14 @@ def numericRadius(self,rad):
self.step = 4
self.drawArc()
-
+
class Circle(Arc):
"The Draft_Circle FreeCAD command definition"
-
+
def __init__(self):
self.closedCircle=True
self.featureName = "Circle"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Circle',
'Accel' : "C, I",
@@ -1253,7 +1252,7 @@ def GetResources(self):
class Polygon(Creator):
"the Draft_Polygon FreeCAD command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Polygon',
'Accel' : "P, G",
@@ -1411,7 +1410,7 @@ def numericInput(self,numx,numy,numz):
self.step = 1
self.ui.radiusValue.setFocus()
msg(translate("draft", "Pick radius:\n"))
-
+
def numericRadius(self,rad):
"this function gets called by the toolbar when valid radius have been entered there"
self.rad = rad
@@ -1428,11 +1427,11 @@ def numericRadius(self,rad):
else:
self.center = cir[-1].Center
self.drawPolygon()
-
-
+
+
class Ellipse(Creator):
"the Draft_Ellipse FreeCAD command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Ellipse',
'Accel' : "E, L",
@@ -1542,7 +1541,7 @@ def appendPoint(self,point):
if self.planetrack:
self.planetrack.set(point)
-
+
class Text(Creator):
"This class creates an annotation feature."
@@ -1617,7 +1616,7 @@ def numericInput(self,numx,numy,numz):
class Dimension(Creator):
"The Draft_Dimension FreeCAD command definition"
-
+
def __init__(self):
self.max=2
self.cont = None
@@ -1919,7 +1918,7 @@ def GetResources(self):
'Accel' : "S, S",
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_ShapeString", "Shape from text..."),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_ShapeString", "Creates text string in shapes.")}
-
+
def Activated(self):
name = translate("draft","ShapeString")
Creator.Activated(self,name)
@@ -1951,7 +1950,7 @@ def createObject(self):
FFile = dquote + self.FFile + dquote
# print "debug: D_T ShapeString.createObject type(String): " str(type(String))
# print "debug: D_T ShapeString.createObject type(FFile): " str(type(FFile))
-
+
try:
qr,sup,points,fil = self.getStrings()
self.commit(translate("draft","Create ShapeString"),
@@ -1981,38 +1980,38 @@ def action(self,arg):
self.active = False
FreeCADGui.Snapper.off()
self.ui.SSUi()
-
+
def numericInput(self,numx,numy,numz):
'''this function gets called by the toolbar when valid
x, y, and z have been entered there'''
self.ssBase = Vector(numx,numy,numz)
self.ui.SSUi() #move on to next step in parameter entry
-
+
def numericSSize(self,ssize):
'''this function is called by the toolbar when valid size parameter
has been entered. '''
self.SSSize = ssize
self.ui.STrackUi()
-
+
def numericSTrack(self,strack):
'''this function is called by the toolbar when valid size parameter
has been entered. ?'''
self.SSTrack = strack
self.ui.SFileUi()
-
+
def validSString(self,sstring):
'''this function is called by the toolbar when a ?valid? string parameter
has been entered. '''
self.SString = sstring
self.ui.SSizeUi()
-
+
def validFFile(self,FFile):
'''this function is called by the toolbar when a ?valid? font file parameter
has been entered. '''
self.FFile = FFile
# last step in ShapeString parm capture, create object
self.createObject()
-
+
def finish(self, finishbool=False):
"terminates the operation"
Creator.finish(self)
@@ -2030,7 +2029,7 @@ class Modifier(DraftTool):
def __init__(self):
DraftTool.__init__(self)
-
+
class Move(Modifier):
"The Draft_Move FreeCAD command definition"
@@ -2039,7 +2038,7 @@ def GetResources(self):
'Accel' : "M, V",
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Move", "Move"),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Move", "Moves the selected objects between 2 points. CTRL to snap, SHIFT to constrain, ALT to copy")}
-
+
def Activated(self):
self.name = translate("draft","Move")
Modifier.Activated(self,self.name)
@@ -2156,7 +2155,7 @@ def numericInput(self,numx,numy,numz):
self.move(self.point.sub(last))
self.finish()
-
+
class ApplyStyle(Modifier):
"The Draft_ApplyStyle FreeCA command definition"
@@ -2191,10 +2190,10 @@ def formatGroup(self,grpob):
c.extend(self.formatGroup(ob))
else:
c.append('Draft.formatObject(FreeCAD.ActiveDocument.'+ob.Name+')')
-
+
class Rotate(Modifier):
"The Draft_Rotate FreeCAD command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Rotate',
'Accel' : "R, O",
@@ -2226,7 +2225,7 @@ def proceed(self):
self.ghost = ghostTracker(self.sel)
self.call = self.view.addEventCallback("SoEvent",self.action)
msg(translate("draft", "Pick rotation center:\n"))
-
+
def finish(self,closed=False,cont=False):
"finishes the arc"
Modifier.finish(self)
@@ -2303,7 +2302,7 @@ def action(self,arg):
self.ui.radiusValue.setText("%.2f" % math.degrees(sweep))
self.ui.radiusValue.setFocus()
self.ui.radiusValue.selectAll()
-
+
elif arg["Type"] == "SoMouseButtonEvent":
if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
if self.point:
@@ -2486,7 +2485,7 @@ def action(self,arg):
self.ui.radiusValue.selectAll()
if self.extendedCopy:
if not hasMod(arg,MODALT): self.finish()
-
+
elif arg["Type"] == "SoMouseButtonEvent":
if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
copymode = False
@@ -2509,7 +2508,7 @@ def action(self,arg):
self.extendedCopy = True
else:
self.finish()
-
+
def finish(self,closed=False):
if self.running:
if self.linetrack:
@@ -2555,7 +2554,7 @@ def Activated(self):
self.call = self.view.addEventCallback("SoEvent",selectObject)
else:
self.proceed()
-
+
def proceed(self):
if self.call:
self.view.removeEventCallback("SoEvent",self.call)
@@ -2626,7 +2625,7 @@ def proceed(self):
self.obj = FreeCADGui.Selection.getSelection()[0]
self.ui.trimUi()
self.linetrack = lineTracker()
-
+
import DraftGeomUtils
if not "Shape" in self.obj.PropertiesList: return
@@ -2701,7 +2700,7 @@ def action(self,arg):
self.ui.radiusValue.setText("%.2f" % dist)
self.ui.radiusValue.setFocus()
self.ui.radiusValue.selectAll()
-
+
elif arg["Type"] == "SoMouseButtonEvent":
if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
cursor = arg["Position"]
@@ -2728,17 +2727,17 @@ def extrude(self,shift=False,real=False):
self.ghost[i].p1(base)
self.ghost[i].p2(base.add(delta))
return delta.Length
-
+
def redraw(self,point,snapped=None,shift=False,alt=False,real=None):
"redraws the ghost"
-
+
# initializing
reverse = False
for g in self.ghost: g.off()
if real: newedges = []
-
+
import DraftGeomUtils
-
+
# finding the active point
vlist = []
for e in self.edges: vlist.append(e.Vertexes[0].Point)
@@ -2748,7 +2747,7 @@ def redraw(self,point,snapped=None,shift=False,alt=False,real=None):
if npoint > len(self.edges)/2: reverse = True
if alt: reverse = not reverse
self.activePoint = npoint
-
+
# sorting out directions
if reverse and (npoint > 0): npoint = npoint-1
if (npoint > len(self.edges)-1):
@@ -2763,7 +2762,7 @@ def redraw(self,point,snapped=None,shift=False,alt=False,real=None):
else:
v1 = edge.Vertexes[0].Point
v2 = edge.Vertexes[-1].Point
-
+
# snapping
if snapped:
snapped = self.doc.getObject(snapped['Object'])
@@ -2918,7 +2917,7 @@ def numericRadius(self,dist):
self.trimObject()
self.finish()
-
+
class Scale(Modifier):
'''The Draft_Scale FreeCAD command definition.
This tool scales the selected objects from a base point.'''
@@ -3041,7 +3040,7 @@ def numericInput(self,numx,numy,numz):
self.scale(self.point.sub(last))
self.finish(cont=True)
-
+
class ToggleConstructionMode():
"The Draft_ToggleConstructionMode FreeCAD command definition"
@@ -3050,11 +3049,11 @@ def GetResources(self):
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_ToggleConstructionMode", "Toggle construcion Mode"),
'Accel' : "C, M",
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_ToggleConstructionMode", "Toggles the Construction Mode for next objects.")}
-
+
def Activated(self):
FreeCADGui.draftToolBar.constrButton.toggle()
-
+
class ToggleContinueMode():
"The Draft_ToggleContinueMode FreeCAD command definition"
@@ -3066,10 +3065,10 @@ def GetResources(self):
def Activated(self):
FreeCADGui.draftToolBar.toggleContinue()
-
+
class Drawing(Modifier):
"The Draft Drawing command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Drawing',
'Accel' : "D, D",
@@ -3126,7 +3125,7 @@ def createDefaultPage(self):
self.doc.recompute()
return page
-
+
class ToggleDisplayMode():
"The ToggleDisplayMode FreeCAD command definition"
@@ -3141,7 +3140,7 @@ def IsActive(self):
return True
else:
return False
-
+
def Activated(self):
for obj in FreeCADGui.Selection.getSelection():
if obj.ViewObject.DisplayMode == "Flat Lines":
@@ -3184,19 +3183,28 @@ def Activated(self):
def proceed(self):
if self.call:
self.view.removeEventCallback("SoEvent",self.call)
- self.ui.editUi()
if self.doc:
self.obj = FreeCADGui.Selection.getSelection()
if self.obj:
self.obj = self.obj[0]
+ if (Draft.getType(self.obj) == "BezCurve"):
+ self.ui.editUi("BezCurve")
+ else:
+ self.ui.editUi()
# store selectable state of the object
if hasattr(self.obj.ViewObject,"Selectable"):
self.selectstate = self.obj.ViewObject.Selectable
self.obj.ViewObject.Selectable = False
- if Draft.getType(self.obj) in ["Wire","BSpline","BezCurve"]:
+# ??????
+ if Draft.getType(self.obj) in ["Wire","BSpline"]:
+ self.ui.setEditButtons(True)
+ self.ui.setBezEditButtons(False)
+ elif Draft.getType(self.obj) == "BezCurve":
self.ui.setEditButtons(True)
+ self.ui.setBezEditButtons(True)
else:
self.ui.setEditButtons(False)
+ self.ui.setBezEditButtons(False)
self.editing = None
self.editpoints = []
self.pl = None
@@ -3310,6 +3318,15 @@ def action(self,arg):
elif self.ui.delButton.isChecked():
if 'EditNode' in info["Component"]:
self.delPoint(int(info["Component"][8:]))
+ # don't do tan/sym on DWire/BSpline!
+ elif ((Draft.getType(self.obj) == "BezCurve") and
+ (self.ui.tangentButton.isChecked())):
+ if 'EditNode' in info["Component"]:
+ self.smoothBezPoint(int(info["Component"][8:]), info, 'Tangent')
+ elif ((Draft.getType(self.obj) == "BezCurve") and
+ (self.ui.symmetricButton.isChecked())):
+ if 'EditNode' in info["Component"]:
+ self.smoothBezPoint(int(info["Component"][8:]), info, 'Symmetric')
elif 'EditNode' in info["Component"]:
self.ui.pointUi()
self.ui.isRelative.show()
@@ -3406,9 +3423,12 @@ def numericInput(self,v,numy=None,numz=None):
self.doc.commitTransaction()
self.doc.recompute()
self.editing = None
- self.ui.editUi()
+ if (Draft.getType(self.obj) == "BezCurve"):
+ self.ui.editUi("BezCurve")
+ else:
+ self.ui.editUi()
self.node = []
-
+
def addPoint(self,point,info=None):
if not (Draft.getType(self.obj) in ["Wire","BSpline","BezCurve"]): return
pts = self.obj.Points
@@ -3472,7 +3492,7 @@ def addPoint(self,point,info=None):
self.obj.Points = pts
self.doc.commitTransaction()
self.resetTrackers()
-
+
def delPoint(self,point):
if not (Draft.getType(self.obj) in ["Wire","BSpline","BezCurve"]): return
if len(self.obj.Points) <= 2:
@@ -3485,6 +3505,29 @@ def delPoint(self,point):
self.doc.commitTransaction()
self.resetTrackers()
+ def smoothBezPoint(self,point, info=None, style='Symmetric'):
+ if not (Draft.getType(self.obj) == "BezCurve"): return
+ if info['Component'].startswith('Edge'):
+ return # didn't click control point
+ pts = self.obj.Points
+ deg = self.obj.Degree
+ if point not in range(0, len(pts), deg):
+ msg(translate("draft", "Selection is not a Node\n"),'warning')
+ return
+ if (point == 0) or (point == (len(pts)-1)):
+ msg(translate("draft", "Endpoint of BezCurve can't be smoothed\n"),'warning')
+ return
+ if style == 'Tangent':
+ prev, next = self.obj.Proxy.tangentpoles(pts[point],pts[point-1],pts[point+1])
+ else:
+ prev, next = self.obj.Proxy.symmetricpoles(pts[point],pts[point-1],pts[point+1])
+ pts[point-1] = prev
+ pts[point+1] = next
+ self.obj.Points = pts
+ self.doc.openTransaction("Edit "+self.obj.Name)
+ self.doc.commitTransaction()
+ self.resetTrackers()
+
def resetTrackersBezier(self):
knotmarker = coin.SoMarkerSet.SQUARE_FILLED_9_9
polemarker = coin.SoMarkerSet.CIRCLE_FILLED_9_9
@@ -3529,7 +3572,7 @@ def IsActive(self):
return True
else:
return False
-
+
def Activated(self):
self.groups = ["Ungroup"]
self.groups.extend(Draft.getGroupNames())
@@ -3559,7 +3602,7 @@ def proceed(self,labelname):
except:
pass
-
+
class AddPoint(Modifier):
"The Draft_AddPoint FreeCAD command definition"
@@ -3584,13 +3627,13 @@ def Activated(self):
FreeCADGui.draftToolBar.vertUi(True)
FreeCADGui.runCommand("Draft_Edit")
-
+
class DelPoint(Modifier):
"The Draft_DelPoint FreeCAD command definition"
def __init__(self):
self.running = False
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_DelPoint',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_DelPoint", "Remove Point"),
@@ -3609,13 +3652,13 @@ def Activated(self):
FreeCADGui.draftToolBar.vertUi(False)
FreeCADGui.runCommand("Draft_Edit")
-
+
class WireToBSpline(Modifier):
"The Draft_Wire2BSpline FreeCAD command definition"
def __init__(self):
self.running = False
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_WireToBSpline',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_WireToBSpline", "Wire to BSpline"),
@@ -3668,7 +3711,7 @@ def IsActive(self):
return True
else:
return False
-
+
def Activated(self):
sellist = []
sel = FreeCADGui.Selection.getSelection()
@@ -3689,12 +3732,12 @@ def Activated(self):
class Shape2DView(Modifier):
"The Shape2DView FreeCAD command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_2DShapeView',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Shape2DView", "Shape 2D view"),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Shape2DView", "Creates Shape 2D views of selected objects")}
-
+
def Activated(self):
Modifier.Activated(self)
if not FreeCADGui.Selection.getSelection():
@@ -3728,7 +3771,7 @@ def proceed(self):
class Draft2Sketch(Modifier):
"The Draft2Sketch FreeCAD command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Draft2Sketch',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Draft2Sketch", "Draft to Sketch"),
@@ -3784,7 +3827,7 @@ def proceed(self):
class Array(Modifier):
"The Shape2DView FreeCAD command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_Array',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Array", "Array"),
@@ -3812,7 +3855,7 @@ def proceed(self):
class PathArray(Modifier):
"The PathArray FreeCAD command definition"
-
+
def GetResources(self):
return {'Pixmap' : 'Draft_PathArray',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_PathArray", "PathArray"),
@@ -3858,7 +3901,7 @@ def IsActive(self):
return True
else:
return False
-
+
def Activated(self):
self.view = Draft.get3DView()
self.stack = []
@@ -3875,7 +3918,7 @@ def move(self,event_cb):
mousepos = event.getPosition().getValue()
ctrl = event.wasCtrlDown()
self.point = FreeCADGui.Snapper.snap(mousepos,active=ctrl)
-
+
def click(self,event_cb):
event = event_cb.getEvent()
if event.getState() == coin.SoMouseButtonEvent.DOWN:
@@ -3962,7 +4005,7 @@ def Activated(self):
FreeCADGui.Snapper.forceGridOff=False
else:
FreeCADGui.Snapper.show()
-
+
class Heal():
"The Draft Heal command definition"
@@ -4011,13 +4054,13 @@ def proceed(self):
FreeCAD.ActiveDocument.commitTransaction()
FreeCAD.ActiveDocument.recompute()
self.finish()
-
+
class Draft_FlipDimension():
def GetResources(self):
return {'Pixmap' : 'Draft_FlipDimension',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_FlipDimension", "Flip Dimension"),
'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_FlipDimension", "Flip the normal direction of a dimension")}
-
+
def Activated(self):
for o in FreeCADGui.Selection.getSelection():
if Draft.getType(o) in ["Dimension","AngularDimension"]:
@@ -4030,7 +4073,7 @@ def Activated(self):
#---------------------------------------------------------------------------
# Snap tools
#---------------------------------------------------------------------------
-
+
class Draft_Snap_Lock():
def GetResources(self):
return {'Pixmap' : 'Snap_Lock',
@@ -4173,7 +4216,7 @@ def Activated(self):
for b in FreeCADGui.Snapper.toolbarButtons:
if b.objectName() == "SnapButtonortho":
b.toggle()
-
+
class Draft_Snap_Dimensions():
def GetResources(self):
return {'Pixmap' : 'Snap_Dimensions',
@@ -4187,7 +4230,7 @@ def Activated(self):
#---------------------------------------------------------------------------
# Adds the icons & commands to the FreeCAD command manager, and sets defaults
#---------------------------------------------------------------------------
-
+
# drawing commands
FreeCADGui.addCommand('Draft_SelectPlane',SelectPlane())
FreeCADGui.addCommand('Draft_Line',Line())
diff --git a/src/Mod/Draft/Draft_rc.py b/src/Mod/Draft/Draft_rc.py
index a5e1c2eb8ac9..653a6e71f0ce 100644
--- a/src/Mod/Draft/Draft_rc.py
+++ b/src/Mod/Draft/Draft_rc.py
@@ -2,7 +2,7 @@
# Resource object code
#
-# Created: Wed Jan 15 14:14:41 2014
+# Created: Wed Jan 29 20:45:44 2014
# by: The Resource Compiler for PyQt (Qt v4.8.1)
#
# WARNING! All changes made in this file will be lost!
@@ -42007,132 +42007,6 @@
\x4d\x7c\x7d\x9e\x92\xcf\x94\xc6\xcf\x9d\x41\x11\x65\x72\xa7\xad\
\x56\x89\xdc\xd3\x2a\x72\xf6\xa7\x72\xc3\x92\x57\x6b\xfe\x11\xea\
\xbb\xcd\x84\xf7\x1e\xfd\x0f\xc8\x7b\xd6\xb7\
-\x00\x00\x07\xb5\
-\x00\
-\x00\x1a\x6e\x78\x9c\xed\x58\x5d\x6f\xe3\xb8\x15\x7d\xcf\xaf\x50\
-\x35\x2f\x1b\xd4\x92\xf8\x25\x8a\xf4\xc4\x59\x14\x1b\x4c\xb1\xc0\
-\x02\x05\x76\x66\xb0\xe8\xd3\x80\x96\x68\x5b\x8d\x2c\x19\x94\x1c\
-\xdb\xf9\xf5\xbd\xd4\xb7\x62\x25\x3b\x3b\x5d\xf4\xa1\x53\x3b\x89\
-\xad\x7b\x2f\x2f\xc9\xcb\xc3\xc3\xc3\xdc\xfd\x78\xde\x67\xce\x93\
-\x36\x65\x5a\xe4\x2b\x17\xfb\xc8\x75\x74\x1e\x17\x49\x9a\x6f\x57\
-\xee\xe7\x4f\x1f\x3c\xe1\x3a\x65\xa5\xf2\x44\x65\x45\xae\x57\x6e\
-\x5e\xb8\x3f\xde\xdf\xdc\xfd\xc5\xf3\x9c\x9f\x8c\x56\x95\x4e\x9c\
-\x53\x5a\xed\x9c\x9f\xf3\xc7\x32\x56\x07\xed\xfc\xb0\xab\xaa\xc3\
-\x32\x08\x4e\xa7\x93\x9f\xb6\x46\xbf\x30\xdb\xe0\xd6\xf1\xbc\xfb\
-\x9b\x9b\xbb\xf2\x69\x7b\xe3\x38\x0e\xf4\x9b\x97\xcb\x24\x5e\xb9\
-\x6d\x83\xc3\xd1\x64\x75\x60\x12\x07\x3a\xd3\x7b\x9d\x57\x65\x80\
-\x7d\x1c\xb8\x43\x78\x3c\x84\xc7\xb6\xf7\xf4\x49\xc7\xc5\x7e\x5f\
-\xe4\x65\xdd\x32\x2f\xdf\x8d\x82\x4d\xb2\xe9\xa3\xed\x68\x4e\xb4\
-\x0e\xc2\x52\xca\x00\x91\x80\x10\x0f\x22\xbc\xf2\x92\x57\xea\xec\
-\x4d\x9b\xc2\x18\xe7\x9a\x12\x84\x50\x00\xbe\x21\xf2\xeb\xa2\x96\
-\xe7\x0c\x4a\xf1\xea\x60\x6a\xef\xb8\x77\x28\xff\x01\x7e\xfb\x06\
-\x9d\xc1\x2f\x8b\xa3\x89\xf5\x06\x5a\x6a\x3f\xd7\x55\xf0\xf0\xe9\
-\xa1\x77\x7a\xc8\x4f\xaa\x64\x94\xa6\xab\xfe\xa4\xdf\xc9\x92\xe4\
-\x6a\xaf\xcb\x83\x8a\x75\x19\x74\xf6\xba\xfd\x29\x4d\xaa\xdd\xca\
-\xe5\xec\x70\xae\x9f\x77\x3a\xdd\xee\xaa\x91\x21\x4d\x56\x2e\xcc\
-\x30\x14\x04\xd7\xcf\xdd\x18\x96\x3d\x92\x90\x4f\x49\x13\xda\x26\
-\x1e\xbb\x98\xf0\xb1\x63\x64\xc4\xd1\xb4\x75\x52\xc4\x76\x48\x2b\
-\xf7\xc1\xa8\x4d\xf5\xa5\xfe\xeb\x77\x95\xec\x13\x15\xc7\xea\x70\
-\xac\xbe\xe8\x73\xa5\xf3\x26\x23\xcc\x65\x34\xb1\xda\x6d\x9b\xf9\
-\x93\x49\x8d\x40\x8e\xa7\x09\xf5\xf9\x50\x98\xca\xdb\xa4\x99\x6e\
-\xba\x0f\xf6\x3a\x49\x55\x90\xa8\x4a\x05\xff\x2c\x4c\xfa\x18\x7c\
-\x30\x5a\xff\xf4\xb7\x87\x20\x8d\x01\x6b\xc1\xc7\x47\x5d\xc5\x3b\
-\x6d\xfc\x43\xbe\x9d\x4d\x75\x4e\x0e\xb0\x7a\x2c\x9c\x75\x5e\x3a\
-\xe7\x3d\x78\xef\x12\xbd\x29\x6d\x54\x53\x54\xfb\x04\x55\xa5\xb5\
-\x0f\xbc\x80\x0c\xad\xcc\xdf\x8d\x4a\x52\xd8\x0f\x4d\xdc\x28\x63\
-\x5c\x64\x99\x8e\x61\x65\x54\x76\x52\x97\xd2\xed\x03\x20\xd5\xb4\
-\x29\xa7\x4c\xb6\x49\x21\x6d\x59\x15\x87\x2e\x16\xea\x5f\x5d\x32\
-\x98\xb5\x35\x7a\x90\xb1\x30\xcb\x77\xa8\x7e\xbd\xaf\x4d\x05\x20\
-\x24\xad\x2e\x4b\xfc\xde\x1d\xda\x14\x9b\x4d\xa9\xa1\x63\x34\xb2\
-\xd5\xa8\x80\x16\x9c\x86\xd8\x75\x82\xff\xac\x37\x34\xd7\x1b\x9e\
-\xef\x8d\xf6\xbd\xdd\x05\xd3\x69\xbf\x5d\xc6\xab\x2a\x51\x1a\x45\
-\x7f\xa8\x4a\x58\x2a\xfa\x8d\x55\x82\xbe\xe4\x1f\xac\x12\x97\x9b\
-\xcd\x57\xf4\x36\x57\x25\x4a\x05\xfe\xc6\x2a\xfd\x1e\xd8\x6a\xfa\
-\x5a\xee\x8c\x06\xba\x7d\x37\x53\xcf\xb7\xca\x2d\xe8\x90\x06\xaf\
-\x5c\x89\x60\x73\x8a\x28\xec\x8d\x17\x30\x62\x2c\x91\x3f\x36\x9e\
-\x09\x18\x09\x8f\x7c\x89\x38\x19\x42\xc9\x4c\xe8\xb6\xed\xe9\x73\
-\x9e\x56\x40\xd6\xc7\x52\x9b\x8f\x96\xf0\xfe\x91\x7f\x2e\xf5\x55\
-\xd4\x27\xa3\xf2\x12\xd8\x75\xbf\x72\xf7\xaa\x32\xe9\xf9\x07\x0f\
-\x2f\x10\xbc\xf1\x82\x00\x53\xfb\x34\xe4\x0b\x74\x3b\x94\xb1\x2f\
-\xcd\x01\xb8\xe5\x00\xb5\x81\xf3\xa8\xcb\xd9\x93\x5a\x75\xb1\x14\
-\x3c\x0d\xa5\x89\x7b\x55\xde\xa7\xc3\x97\x33\x20\xc5\x59\x3a\x94\
-\xc0\x1f\x3c\x1b\x71\x69\x22\x30\x6c\x17\xf8\x40\xb3\x31\xcf\x96\
-\xa8\xdf\x48\xd3\x8e\xc0\x03\x62\xdb\xa6\xc0\x87\x75\x1c\xc1\x3e\
-\xad\x5f\xd3\x36\xb0\x64\xa3\xb9\x01\x33\x0d\x90\xbd\xb3\x45\x53\
-\xd9\x9f\x09\x97\x9a\xa4\xc6\x7d\x4f\xbb\x80\x9d\x3e\xac\x6c\x7c\
-\xb6\xcb\x8d\xa8\xcf\xa9\x1c\x1a\xc5\x50\x20\xcc\x08\xf3\x19\xe3\
-\x43\xec\x66\x36\x76\x33\x1b\x6b\xc0\x28\xc1\x86\x38\x66\x5f\x05\
-\x10\x9f\x51\x14\x31\x29\x17\xf0\x95\x72\x14\xe2\x90\x6b\x2f\xb2\
-\x4f\x04\x91\x08\x53\xed\x89\x05\xf2\x01\xaf\x4c\x20\xc0\x11\x8f\
-\x98\x1f\x31\x21\x16\x98\x30\xe6\x13\x41\xf8\xed\x57\xa2\xb5\x29\
-\xfc\x5d\x60\xcf\x88\xfa\x5b\x0f\x31\x7b\x6a\x25\x4f\xa9\x3e\x0d\
-\x07\xc9\x5a\xf5\xf8\x3e\xa8\xad\xae\x29\x04\xea\xbd\xa9\x5f\xad\
-\x63\x5d\x98\x44\x9b\xce\xc5\xeb\xd7\xc4\xd5\xb2\x4c\xa3\x0b\x6f\
-\x5e\xa0\x08\xb2\xf6\x7e\x34\xef\x2f\x77\x2a\x29\x4e\x2b\x97\xbc\
-\x74\x3e\x17\xc5\xbe\xd6\x08\x8c\xf6\x9b\x75\x00\x0e\xac\x56\x24\
-\x6d\x5d\x09\xbf\x76\x42\x6f\x1e\x25\x21\x78\xb1\xc0\x57\xde\xa3\
-\x31\x50\x3f\x2f\x53\x17\x0d\x73\xda\x52\xca\xbb\x81\x95\xbb\xe2\
-\xb4\x35\xb6\x34\x95\x39\xea\x97\x0d\x41\x79\x1c\xad\xe2\xf4\x8e\
-\x4d\xe9\x5b\x9d\x33\x8a\xb0\x6d\xbd\xf5\xba\x38\xcf\x27\x38\xa5\
-\x39\x4c\xd5\x6b\x95\x13\x26\xe2\xaa\x20\x6d\x44\xa7\xa5\xa2\x50\
-\xbc\x12\x71\x1e\xce\x8b\x97\x2e\xbb\x14\xf2\x15\xdf\x5e\x9d\xd3\
-\x7d\xfa\xac\x13\x7b\x00\xb4\x58\xd9\xeb\x4a\x59\x15\x33\xe0\xa2\
-\xb3\xc0\x56\xe6\x9d\xc8\x00\x19\xbc\xfc\xf5\xe1\x43\x7f\x12\xc5\
-\xf1\xf2\xb7\xc2\x3c\x0e\x87\x88\x0d\x50\x6b\x10\x56\x2b\xb7\x3f\
-\x1d\xad\x74\x89\x97\x76\x2f\xa8\xea\x3e\xdd\xc3\x6a\x5b\xcd\xfb\
-\x57\x90\x9e\x80\xd0\xde\x31\x09\xb6\x4c\x38\x24\x6d\xd2\x1a\xdd\
-\x68\xda\xd9\x6b\x40\x12\xef\x53\xdb\x28\xf8\x58\xa5\x59\xf6\xb3\
-\xed\x64\x74\x62\xb6\x49\xd3\x2a\xd3\xf7\x75\x9f\xcd\xd7\x6e\x16\
-\x41\x3b\x8d\xee\xc8\x1b\xcd\xf2\x2e\xe8\xca\x50\x3f\x6d\x87\xf2\
-\xd4\xc0\xb9\x82\x55\xa6\xd6\x3a\x5b\xb9\xbf\x58\xa7\x73\xe5\xdd\
-\x9a\xe2\x78\xd8\x17\x89\x6e\x9b\x77\x65\xdd\x8e\x99\x6c\x0c\xc5\
-\x37\xa5\xe7\xae\xd8\xeb\xe0\x52\x8b\xce\x87\x16\x94\x65\xf0\x8b\
-\x5a\x07\xb5\x1a\x6e\x05\x68\x52\x2b\xe3\x4e\x7d\xce\x65\x6c\x14\
-\x28\xf5\x09\x8b\x04\x30\xd2\xab\x71\x97\x57\xe2\xaa\x2b\xa6\x03\
-\x0e\xa3\x3c\x12\x9c\xd6\x27\xe2\xf0\xe4\xc1\xa1\xeb\xe3\x30\xc4\
-\x96\x01\x29\xf3\x05\x97\x9c\xdc\x0e\x2a\xca\xc0\x21\x70\xa5\x6b\
-\xa6\xc2\x0f\xa6\x9f\x2d\x73\xb8\x5f\x82\xb8\x31\xc5\xa3\x5e\x02\
-\x4f\x01\x5f\xa3\xf6\xb1\xd9\x55\x4b\x12\xf9\x11\x11\x56\x1e\xf0\
-\xce\x61\x8f\x0f\x98\xcd\x12\x56\x20\x4f\xc6\xc6\x7f\x15\x69\x3e\
-\xb5\x02\x92\xb4\xc9\x60\x87\x54\x4b\xd6\xd9\x06\x15\xd5\x1a\x12\
-\x05\x94\x65\x8c\xba\x8c\x47\x53\x5b\x1b\x6d\x05\xaa\x74\xaf\xcc\
-\xa3\x36\x8d\xff\x29\x2d\xd3\x75\x9a\xd9\x14\xf5\xd7\x4c\xbf\x4f\
-\xd2\xf2\x00\x28\x80\xcb\x97\x1d\xc6\xfb\x02\x6e\x1d\x9b\xac\x38\
-\xf5\x7e\x58\x66\xf8\xf0\xd6\x2a\x7e\xdc\xd6\xe3\x5b\xaa\x18\x56\
-\xf9\x98\xc1\x55\xfa\x85\x6c\xb3\x85\xa3\x82\x23\x4f\x8c\x1c\x1d\
-\xc1\x08\xea\x87\x14\xd1\x91\xa7\x23\x16\x1c\x4a\x5f\x20\x22\xc7\
-\x3e\x7b\xfe\x09\x49\x7c\x49\x25\x1f\x99\x81\x4e\x22\x01\x67\x5d\
-\x48\xe8\x38\x7a\x6e\xed\x85\xe4\x98\x53\x42\x60\xe1\x19\x90\x36\
-\x61\x20\x85\xe0\xc6\x29\x98\x90\x21\x8e\x22\x30\x87\x44\xb0\x08\
-\x51\x62\xc1\x71\x3b\x16\xb6\x07\x55\xed\x46\x00\x98\xea\x22\x65\
-\x62\xf7\x4f\x41\x47\xe8\x73\x11\x31\xfc\x9d\x60\xc3\xd6\x14\xb0\
-\x41\xbc\xf1\x72\xf6\xa5\xb5\x27\x28\x85\x1d\x2a\xec\x7b\x36\x00\
-\x56\x9e\xc2\xa6\x8f\xe0\x3d\x1b\x60\x6a\xc4\xbc\x91\xc1\x5c\xe6\
-\x03\xec\x11\xe3\xc0\xfd\x9e\x72\xfb\x5e\xf4\x9d\x38\xca\xe9\xc3\
-\x17\xfd\x37\x07\x39\x18\xde\x1e\xe5\x5d\x03\xf4\x46\xd8\x38\xea\
-\xf9\x4d\xbc\x82\xb0\x92\x94\x91\x88\x2d\x08\x28\xaf\x50\x50\x19\
-\x2e\x3c\x30\xda\xfb\x81\x8c\xc0\xc8\x41\xcf\x23\x0a\x1a\x0c\x09\
-\xb0\x4a\xbc\xc0\x38\x22\x20\x47\x84\x98\x40\xf7\x9b\xb8\xcb\x9a\
-\xeb\x7b\xda\x94\xbb\x64\x48\x42\x06\x7b\xe5\xbb\xc0\x67\xc7\x5d\
-\x73\xcc\x05\xfa\x37\x04\xd2\x98\xa3\x2e\x0e\x12\x1a\x88\x4a\xbc\
-\xa0\x2e\x6e\xc1\x4c\xf1\x94\xb9\x42\x84\x40\x3e\xe3\xd1\x0d\xf0\
-\x35\xe6\x42\x04\x81\xf8\xb7\xcc\x15\x86\x21\x8f\x24\x69\x98\x0b\
-\x90\x40\x59\xcd\x5c\x0c\xa3\x08\x2e\x17\xff\x05\xe6\x9a\xc3\xc6\
-\xf7\xc9\x5c\xff\xe7\xad\xdf\xe3\x2d\x19\xc1\x8f\x98\xf2\x56\x84\
-\xa4\x84\xcb\xc5\x88\xb8\x24\x11\x3e\x03\xdd\xc5\xde\x42\xee\xab\
-\xe0\x7c\x47\x74\xc4\x01\x90\xf6\x61\x04\x9c\xfa\xd1\x1c\x33\x90\
-\x89\x4f\x3a\x2f\x92\x64\x0c\x60\xb8\xb4\x4d\x01\x8c\x89\x8f\x24\
-\x0f\x31\x1c\xff\xed\x0b\x8b\x97\x58\x5e\x1f\xab\xea\x7f\x09\xca\
-\x35\x5e\x30\xc2\x18\x36\x2f\x62\x70\x7c\xc0\x32\x20\x21\x1d\x4f\
-\x20\xa0\x37\x16\xb2\x05\xf0\x5c\x48\x64\xe4\x30\xa0\xfe\x28\xb2\
-\xb2\xd9\x41\x0b\x11\x01\xae\x30\x76\xb8\x5d\x4a\xca\x71\x6d\xf4\
-\x3a\x6b\x08\xb4\x44\xac\x98\xea\xd2\x30\xf0\xb5\x69\x9e\x1d\xe8\
-\x2f\x24\x3e\x13\x94\x8d\x52\x11\xc7\x6b\x5a\x09\x30\x36\x8d\x68\
-\xdb\x35\x6f\x9f\x79\x97\x84\x3b\x1e\x0c\x26\x44\x24\x1a\x77\x0b\
-\x19\x38\xf5\x31\x08\xc1\x17\xf0\xec\x79\x3c\x12\x63\x75\x38\xfa\
-\x07\x4f\x0e\x6b\x5b\x15\xc6\x83\x6b\xf7\x93\xaa\x8e\x46\xdb\x9b\
-\xeb\xf0\x4f\xc6\x6d\x73\xd7\x82\x8f\x3b\x7b\x37\xbc\xbf\xf9\x37\
-\x96\xc8\x9e\xfb\
\x00\x00\x08\x03\
\x00\
\x00\x1e\x37\x78\x9c\xed\x58\x5b\x8f\xa3\x46\x16\x7e\x9f\x5f\xc1\
@@ -42264,6 +42138,132 @@
\x4b\xa7\xa0\xf2\x0f\xed\x14\xf4\x17\x26\x82\x6f\x9d\xc2\x5c\xbf\
\x47\xa7\x68\x1f\xea\xdb\xa3\xf9\x69\xef\xe9\xc3\x7f\x00\xa5\x17\
\x49\xdb\
+\x00\x00\x07\xb5\
+\x00\
+\x00\x1a\x6e\x78\x9c\xed\x58\x5d\x6f\xe3\xb8\x15\x7d\xcf\xaf\x50\
+\x35\x2f\x1b\xd4\x92\xf8\x25\x8a\xf4\xc4\x59\x14\x1b\x4c\xb1\xc0\
+\x02\x05\x76\x66\xb0\xe8\xd3\x80\x96\x68\x5b\x8d\x2c\x19\x94\x1c\
+\xdb\xf9\xf5\xbd\xd4\xb7\x62\x25\x3b\x3b\x5d\xf4\xa1\x53\x3b\x89\
+\xad\x7b\x2f\x2f\xc9\xcb\xc3\xc3\xc3\xdc\xfd\x78\xde\x67\xce\x93\
+\x36\x65\x5a\xe4\x2b\x17\xfb\xc8\x75\x74\x1e\x17\x49\x9a\x6f\x57\
+\xee\xe7\x4f\x1f\x3c\xe1\x3a\x65\xa5\xf2\x44\x65\x45\xae\x57\x6e\
+\x5e\xb8\x3f\xde\xdf\xdc\xfd\xc5\xf3\x9c\x9f\x8c\x56\x95\x4e\x9c\
+\x53\x5a\xed\x9c\x9f\xf3\xc7\x32\x56\x07\xed\xfc\xb0\xab\xaa\xc3\
+\x32\x08\x4e\xa7\x93\x9f\xb6\x46\xbf\x30\xdb\xe0\xd6\xf1\xbc\xfb\
+\x9b\x9b\xbb\xf2\x69\x7b\xe3\x38\x0e\xf4\x9b\x97\xcb\x24\x5e\xb9\
+\x6d\x83\xc3\xd1\x64\x75\x60\x12\x07\x3a\xd3\x7b\x9d\x57\x65\x80\
+\x7d\x1c\xb8\x43\x78\x3c\x84\xc7\xb6\xf7\xf4\x49\xc7\xc5\x7e\x5f\
+\xe4\x65\xdd\x32\x2f\xdf\x8d\x82\x4d\xb2\xe9\xa3\xed\x68\x4e\xb4\
+\x0e\xc2\x52\xca\x00\x91\x80\x10\x0f\x22\xbc\xf2\x92\x57\xea\xec\
+\x4d\x9b\xc2\x18\xe7\x9a\x12\x84\x50\x00\xbe\x21\xf2\xeb\xa2\x96\
+\xe7\x0c\x4a\xf1\xea\x60\x6a\xef\xb8\x77\x28\xff\x01\x7e\xfb\x06\
+\x9d\xc1\x2f\x8b\xa3\x89\xf5\x06\x5a\x6a\x3f\xd7\x55\xf0\xf0\xe9\
+\xa1\x77\x7a\xc8\x4f\xaa\x64\x94\xa6\xab\xfe\xa4\xdf\xc9\x92\xe4\
+\x6a\xaf\xcb\x83\x8a\x75\x19\x74\xf6\xba\xfd\x29\x4d\xaa\xdd\xca\
+\xe5\xec\x70\xae\x9f\x77\x3a\xdd\xee\xaa\x91\x21\x4d\x56\x2e\xcc\
+\x30\x14\x04\xd7\xcf\xdd\x18\x96\x3d\x92\x90\x4f\x49\x13\xda\x26\
+\x1e\xbb\x98\xf0\xb1\x63\x64\xc4\xd1\xb4\x75\x52\xc4\x76\x48\x2b\
+\xf7\xc1\xa8\x4d\xf5\xa5\xfe\xeb\x77\x95\xec\x13\x15\xc7\xea\x70\
+\xac\xbe\xe8\x73\xa5\xf3\x26\x23\xcc\x65\x34\xb1\xda\x6d\x9b\xf9\
+\x93\x49\x8d\x40\x8e\xa7\x09\xf5\xf9\x50\x98\xca\xdb\xa4\x99\x6e\
+\xba\x0f\xf6\x3a\x49\x55\x90\xa8\x4a\x05\xff\x2c\x4c\xfa\x18\x7c\
+\x30\x5a\xff\xf4\xb7\x87\x20\x8d\x01\x6b\xc1\xc7\x47\x5d\xc5\x3b\
+\x6d\xfc\x43\xbe\x9d\x4d\x75\x4e\x0e\xb0\x7a\x2c\x9c\x75\x5e\x3a\
+\xe7\x3d\x78\xef\x12\xbd\x29\x6d\x54\x53\x54\xfb\x04\x55\xa5\xb5\
+\x0f\xbc\x80\x0c\xad\xcc\xdf\x8d\x4a\x52\xd8\x0f\x4d\xdc\x28\x63\
+\x5c\x64\x99\x8e\x61\x65\x54\x76\x52\x97\xd2\xed\x03\x20\xd5\xb4\
+\x29\xa7\x4c\xb6\x49\x21\x6d\x59\x15\x87\x2e\x16\xea\x5f\x5d\x32\
+\x98\xb5\x35\x7a\x90\xb1\x30\xcb\x77\xa8\x7e\xbd\xaf\x4d\x05\x20\
+\x24\xad\x2e\x4b\xfc\xde\x1d\xda\x14\x9b\x4d\xa9\xa1\x63\x34\xb2\
+\xd5\xa8\x80\x16\x9c\x86\xd8\x75\x82\xff\xac\x37\x34\xd7\x1b\x9e\
+\xef\x8d\xf6\xbd\xdd\x05\xd3\x69\xbf\x5d\xc6\xab\x2a\x51\x1a\x45\
+\x7f\xa8\x4a\x58\x2a\xfa\x8d\x55\x82\xbe\xe4\x1f\xac\x12\x97\x9b\
+\xcd\x57\xf4\x36\x57\x25\x4a\x05\xfe\xc6\x2a\xfd\x1e\xd8\x6a\xfa\
+\x5a\xee\x8c\x06\xba\x7d\x37\x53\xcf\xb7\xca\x2d\xe8\x90\x06\xaf\
+\x5c\x89\x60\x73\x8a\x28\xec\x8d\x17\x30\x62\x2c\x91\x3f\x36\x9e\
+\x09\x18\x09\x8f\x7c\x89\x38\x19\x42\xc9\x4c\xe8\xb6\xed\xe9\x73\
+\x9e\x56\x40\xd6\xc7\x52\x9b\x8f\x96\xf0\xfe\x91\x7f\x2e\xf5\x55\
+\xd4\x27\xa3\xf2\x12\xd8\x75\xbf\x72\xf7\xaa\x32\xe9\xf9\x07\x0f\
+\x2f\x10\xbc\xf1\x82\x00\x53\xfb\x34\xe4\x0b\x74\x3b\x94\xb1\x2f\
+\xcd\x01\xb8\xe5\x00\xb5\x81\xf3\xa8\xcb\xd9\x93\x5a\x75\xb1\x14\
+\x3c\x0d\xa5\x89\x7b\x55\xde\xa7\xc3\x97\x33\x20\xc5\x59\x3a\x94\
+\xc0\x1f\x3c\x1b\x71\x69\x22\x30\x6c\x17\xf8\x40\xb3\x31\xcf\x96\
+\xa8\xdf\x48\xd3\x8e\xc0\x03\x62\xdb\xa6\xc0\x87\x75\x1c\xc1\x3e\
+\xad\x5f\xd3\x36\xb0\x64\xa3\xb9\x01\x33\x0d\x90\xbd\xb3\x45\x53\
+\xd9\x9f\x09\x97\x9a\xa4\xc6\x7d\x4f\xbb\x80\x9d\x3e\xac\x6c\x7c\
+\xb6\xcb\x8d\xa8\xcf\xa9\x1c\x1a\xc5\x50\x20\xcc\x08\xf3\x19\xe3\
+\x43\xec\x66\x36\x76\x33\x1b\x6b\xc0\x28\xc1\x86\x38\x66\x5f\x05\
+\x10\x9f\x51\x14\x31\x29\x17\xf0\x95\x72\x14\xe2\x90\x6b\x2f\xb2\
+\x4f\x04\x91\x08\x53\xed\x89\x05\xf2\x01\xaf\x4c\x20\xc0\x11\x8f\
+\x98\x1f\x31\x21\x16\x98\x30\xe6\x13\x41\xf8\xed\x57\xa2\xb5\x29\
+\xfc\x5d\x60\xcf\x88\xfa\x5b\x0f\x31\x7b\x6a\x25\x4f\xa9\x3e\x0d\
+\x07\xc9\x5a\xf5\xf8\x3e\xa8\xad\xae\x29\x04\xea\xbd\xa9\x5f\xad\
+\x63\x5d\x98\x44\x9b\xce\xc5\xeb\xd7\xc4\xd5\xb2\x4c\xa3\x0b\x6f\
+\x5e\xa0\x08\xb2\xf6\x7e\x34\xef\x2f\x77\x2a\x29\x4e\x2b\x97\xbc\
+\x74\x3e\x17\xc5\xbe\xd6\x08\x8c\xf6\x9b\x75\x00\x0e\xac\x56\x24\
+\x6d\x5d\x09\xbf\x76\x42\x6f\x1e\x25\x21\x78\xb1\xc0\x57\xde\xa3\
+\x31\x50\x3f\x2f\x53\x17\x0d\x73\xda\x52\xca\xbb\x81\x95\xbb\xe2\
+\xb4\x35\xb6\x34\x95\x39\xea\x97\x0d\x41\x79\x1c\xad\xe2\xf4\x8e\
+\x4d\xe9\x5b\x9d\x33\x8a\xb0\x6d\xbd\xf5\xba\x38\xcf\x27\x38\xa5\
+\x39\x4c\xd5\x6b\x95\x13\x26\xe2\xaa\x20\x6d\x44\xa7\xa5\xa2\x50\
+\xbc\x12\x71\x1e\xce\x8b\x97\x2e\xbb\x14\xf2\x15\xdf\x5e\x9d\xd3\
+\x7d\xfa\xac\x13\x7b\x00\xb4\x58\xd9\xeb\x4a\x59\x15\x33\xe0\xa2\
+\xb3\xc0\x56\xe6\x9d\xc8\x00\x19\xbc\xfc\xf5\xe1\x43\x7f\x12\xc5\
+\xf1\xf2\xb7\xc2\x3c\x0e\x87\x88\x0d\x50\x6b\x10\x56\x2b\xb7\x3f\
+\x1d\xad\x74\x89\x97\x76\x2f\xa8\xea\x3e\xdd\xc3\x6a\x5b\xcd\xfb\
+\x57\x90\x9e\x80\xd0\xde\x31\x09\xb6\x4c\x38\x24\x6d\xd2\x1a\xdd\
+\x68\xda\xd9\x6b\x40\x12\xef\x53\xdb\x28\xf8\x58\xa5\x59\xf6\xb3\
+\xed\x64\x74\x62\xb6\x49\xd3\x2a\xd3\xf7\x75\x9f\xcd\xd7\x6e\x16\
+\x41\x3b\x8d\xee\xc8\x1b\xcd\xf2\x2e\xe8\xca\x50\x3f\x6d\x87\xf2\
+\xd4\xc0\xb9\x82\x55\xa6\xd6\x3a\x5b\xb9\xbf\x58\xa7\x73\xe5\xdd\
+\x9a\xe2\x78\xd8\x17\x89\x6e\x9b\x77\x65\xdd\x8e\x99\x6c\x0c\xc5\
+\x37\xa5\xe7\xae\xd8\xeb\xe0\x52\x8b\xce\x87\x16\x94\x65\xf0\x8b\
+\x5a\x07\xb5\x1a\x6e\x05\x68\x52\x2b\xe3\x4e\x7d\xce\x65\x6c\x14\
+\x28\xf5\x09\x8b\x04\x30\xd2\xab\x71\x97\x57\xe2\xaa\x2b\xa6\x03\
+\x0e\xa3\x3c\x12\x9c\xd6\x27\xe2\xf0\xe4\xc1\xa1\xeb\xe3\x30\xc4\
+\x96\x01\x29\xf3\x05\x97\x9c\xdc\x0e\x2a\xca\xc0\x21\x70\xa5\x6b\
+\xa6\xc2\x0f\xa6\x9f\x2d\x73\xb8\x5f\x82\xb8\x31\xc5\xa3\x5e\x02\
+\x4f\x01\x5f\xa3\xf6\xb1\xd9\x55\x4b\x12\xf9\x11\x11\x56\x1e\xf0\
+\xce\x61\x8f\x0f\x98\xcd\x12\x56\x20\x4f\xc6\xc6\x7f\x15\x69\x3e\
+\xb5\x02\x92\xb4\xc9\x60\x87\x54\x4b\xd6\xd9\x06\x15\xd5\x1a\x12\
+\x05\x94\x65\x8c\xba\x8c\x47\x53\x5b\x1b\x6d\x05\xaa\x74\xaf\xcc\
+\xa3\x36\x8d\xff\x29\x2d\xd3\x75\x9a\xd9\x14\xf5\xd7\x4c\xbf\x4f\
+\xd2\xf2\x00\x28\x80\xcb\x97\x1d\xc6\xfb\x02\x6e\x1d\x9b\xac\x38\
+\xf5\x7e\x58\x66\xf8\xf0\xd6\x2a\x7e\xdc\xd6\xe3\x5b\xaa\x18\x56\
+\xf9\x98\xc1\x55\xfa\x85\x6c\xb3\x85\xa3\x82\x23\x4f\x8c\x1c\x1d\
+\xc1\x08\xea\x87\x14\xd1\x91\xa7\x23\x16\x1c\x4a\x5f\x20\x22\xc7\
+\x3e\x7b\xfe\x09\x49\x7c\x49\x25\x1f\x99\x81\x4e\x22\x01\x67\x5d\
+\x48\xe8\x38\x7a\x6e\xed\x85\xe4\x98\x53\x42\x60\xe1\x19\x90\x36\
+\x61\x20\x85\xe0\xc6\x29\x98\x90\x21\x8e\x22\x30\x87\x44\xb0\x08\
+\x51\x62\xc1\x71\x3b\x16\xb6\x07\x55\xed\x46\x00\x98\xea\x22\x65\
+\x62\xf7\x4f\x41\x47\xe8\x73\x11\x31\xfc\x9d\x60\xc3\xd6\x14\xb0\
+\x41\xbc\xf1\x72\xf6\xa5\xb5\x27\x28\x85\x1d\x2a\xec\x7b\x36\x00\
+\x56\x9e\xc2\xa6\x8f\xe0\x3d\x1b\x60\x6a\xc4\xbc\x91\xc1\x5c\xe6\
+\x03\xec\x11\xe3\xc0\xfd\x9e\x72\xfb\x5e\xf4\x9d\x38\xca\xe9\xc3\
+\x17\xfd\x37\x07\x39\x18\xde\x1e\xe5\x5d\x03\xf4\x46\xd8\x38\xea\
+\xf9\x4d\xbc\x82\xb0\x92\x94\x91\x88\x2d\x08\x28\xaf\x50\x50\x19\
+\x2e\x3c\x30\xda\xfb\x81\x8c\xc0\xc8\x41\xcf\x23\x0a\x1a\x0c\x09\
+\xb0\x4a\xbc\xc0\x38\x22\x20\x47\x84\x98\x40\xf7\x9b\xb8\xcb\x9a\
+\xeb\x7b\xda\x94\xbb\x64\x48\x42\x06\x7b\xe5\xbb\xc0\x67\xc7\x5d\
+\x73\xcc\x05\xfa\x37\x04\xd2\x98\xa3\x2e\x0e\x12\x1a\x88\x4a\xbc\
+\xa0\x2e\x6e\xc1\x4c\xf1\x94\xb9\x42\x84\x40\x3e\xe3\xd1\x0d\xf0\
+\x35\xe6\x42\x04\x81\xf8\xb7\xcc\x15\x86\x21\x8f\x24\x69\x98\x0b\
+\x90\x40\x59\xcd\x5c\x0c\xa3\x08\x2e\x17\xff\x05\xe6\x9a\xc3\xc6\
+\xf7\xc9\x5c\xff\xe7\xad\xdf\xe3\x2d\x19\xc1\x8f\x98\xf2\x56\x84\
+\xa4\x84\xcb\xc5\x88\xb8\x24\x11\x3e\x03\xdd\xc5\xde\x42\xee\xab\
+\xe0\x7c\x47\x74\xc4\x01\x90\xf6\x61\x04\x9c\xfa\xd1\x1c\x33\x90\
+\x89\x4f\x3a\x2f\x92\x64\x0c\x60\xb8\xb4\x4d\x01\x8c\x89\x8f\x24\
+\x0f\x31\x1c\xff\xed\x0b\x8b\x97\x58\x5e\x1f\xab\xea\x7f\x09\xca\
+\x35\x5e\x30\xc2\x18\x36\x2f\x62\x70\x7c\xc0\x32\x20\x21\x1d\x4f\
+\x20\xa0\x37\x16\xb2\x05\xf0\x5c\x48\x64\xe4\x30\xa0\xfe\x28\xb2\
+\xb2\xd9\x41\x0b\x11\x01\xae\x30\x76\xb8\x5d\x4a\xca\x71\x6d\xf4\
+\x3a\x6b\x08\xb4\x44\xac\x98\xea\xd2\x30\xf0\xb5\x69\x9e\x1d\xe8\
+\x2f\x24\x3e\x13\x94\x8d\x52\x11\xc7\x6b\x5a\x09\x30\x36\x8d\x68\
+\xdb\x35\x6f\x9f\x79\x97\x84\x3b\x1e\x0c\x26\x44\x24\x1a\x77\x0b\
+\x19\x38\xf5\x31\x08\xc1\x17\xf0\xec\x79\x3c\x12\x63\x75\x38\xfa\
+\x07\x4f\x0e\x6b\x5b\x15\xc6\x83\x6b\xf7\x93\xaa\x8e\x46\xdb\x9b\
+\xeb\xf0\x4f\xc6\x6d\x73\xd7\x82\x8f\x3b\x7b\x37\xbc\xbf\xf9\x37\
+\x96\xc8\x9e\xfb\
\x00\x00\x15\x1c\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -44874,6 +44874,116 @@
\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\
\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\
\x73\x76\x67\x3e\x0a\
+\x00\x00\x06\xb5\
+\x00\
+\x00\x21\xf7\x78\x9c\xd5\x59\x4b\x73\xdb\x36\x10\xbe\xfb\x57\xb0\
+\xcc\x25\x9e\x8a\x20\xde\x0f\x55\x72\x0e\xe9\xb4\x93\x43\xa7\x33\
+\x4d\x32\x3d\xd3\x14\x29\xb1\x91\x48\x0d\x49\xc7\x56\x7f\x7d\x17\
+\x94\x48\x51\x11\x6d\xc8\x1e\xc6\x93\x0a\x07\x01\x8b\x05\x17\xd8\
+\xfd\x76\xb1\x4b\xce\xde\x3d\x6c\xd6\xde\xd7\xa4\xac\xb2\x22\x9f\
+\xfb\x04\x61\xdf\x4b\xf2\xb8\x58\x64\xf9\x72\xee\x7f\xfe\xf4\x5b\
+\xa0\x7d\xaf\xaa\xa3\x7c\x11\xad\x8b\x3c\x99\xfb\x79\xe1\xbf\xbb\
+\xb9\x9a\xfd\x14\x04\xde\xfb\x32\x89\xea\x64\xe1\xdd\x67\xf5\xca\
+\xfb\x90\x7f\xa9\xe2\x68\x9b\x78\x6f\x57\x75\xbd\x9d\x86\xe1\xfd\
+\xfd\x3d\xca\x0e\x44\x54\x94\xcb\xf0\xda\x0b\x82\x9b\xab\xab\x59\
+\xf5\x75\x79\xe5\x79\x1e\xc8\xcd\xab\xe9\x22\x9e\xfb\x87\x05\xdb\
+\xbb\x72\xdd\x30\x2e\xe2\x30\x59\x27\x9b\x24\xaf\xab\x90\x20\x12\
+\xfa\x47\xf6\xf8\xc8\x1e\x5b\xe9\xd9\xd7\x24\x2e\x36\x9b\x22\xaf\
+\x9a\x95\x79\xf5\xa6\xc7\x5c\x2e\xd2\x8e\xdb\xee\xe6\x9e\x35\x4c\
+\xc4\x18\x13\x62\x1a\x52\x1a\x00\x47\x50\xed\xf2\x3a\x7a\x08\x4e\
+\x97\xc2\x1e\x87\x96\x52\x8c\x71\x08\x73\x47\xce\xcb\xb8\xa6\x0f\
+\x6b\x50\xc5\xa3\x9b\x69\x66\x1b\xee\x9e\x21\x48\x43\xb8\xcf\x16\
+\xf5\x6a\xee\x4b\xde\x8c\x56\x49\xb6\x5c\xd5\xdd\x30\x5b\xcc\x7d\
+\x90\xc3\x24\xa1\xfe\x0d\x10\x66\x8b\x24\xad\xec\xc4\x7e\xca\x8e\
+\x60\x8e\x37\x73\x30\x0b\x52\x92\xa8\xfc\xbd\x8c\x16\x19\xe8\x76\
+\xcf\xb7\xe7\x3c\x9d\x61\x84\xf3\x40\x1e\x56\xc1\xba\xaa\x2e\xb6\
+\x2d\xf7\x41\x28\x50\x80\x4b\x06\xc6\x3f\x4e\x54\xf5\x6e\x9d\xec\
+\xe7\x82\xb8\x58\x17\xe5\xf4\x4d\xda\xfc\x7e\x69\x48\xc5\x36\x8a\
+\xb3\x7a\x37\x25\xbd\x25\x45\x9a\x56\x09\x9c\x07\x40\x17\xba\xc5\
+\xe9\x80\x3e\x5f\x1c\x1e\x10\x47\x3a\x71\xb3\xf0\xf4\xe8\xcf\xd5\
+\x94\xc2\xc4\xa9\x27\x85\xd9\xeb\x69\x49\x61\xf1\x4a\x3a\xb2\xa3\
+\x68\xfd\xad\x8e\xe2\x87\xb9\x4f\xa9\x40\x54\x72\x7c\xb4\x56\xbc\
+\x03\xcc\x2a\x8a\x94\x51\x4c\x76\xd4\x72\xee\x33\x8e\x18\x17\x44\
+\xeb\x8e\x98\x0e\x3e\x20\x1d\x7c\x80\x3d\xf5\xe9\x36\x98\xec\x3d\
+\xaa\x71\xab\xe9\xaa\x4c\x20\x0c\xbc\x19\x84\x78\xcb\xb9\x3c\x90\
+\x3f\xe7\x59\x0d\x2e\x7d\x57\x25\xe5\x47\xd0\x4d\xf2\x67\xfe\xb9\
+\x4a\xce\xb8\x3e\x95\x51\x5e\xa5\x45\xb9\x99\xfb\x9b\xa8\x2e\xb3\
+\x87\xb7\x64\x82\x6d\x43\xd2\x68\x41\x0d\x87\x3e\xc5\x14\x69\xaa\
+\x25\xbb\x3e\xea\xf1\x19\xa8\xd2\x6e\x54\x11\xfc\x8a\xa8\x22\x3f\
+\x9c\xe7\x69\xc9\x03\x1c\x60\xa7\x9e\xb4\x94\x81\x08\xd4\xd3\xdb\
+\xc7\x92\x98\x18\x8f\xa3\x2b\x2d\x75\xa0\x7a\xd8\x1a\x14\xc8\x94\
+\x89\xd3\x5b\xb7\xc0\xf1\xf4\xc5\x94\x72\xea\x0a\x76\xe5\x32\x73\
+\x14\xe1\x91\xf4\xc4\x34\x71\x08\x8b\xd2\x94\xbe\xaa\x8e\x1a\x4c\
+\x5d\x86\xa8\x57\xc6\xd3\x0f\x86\x26\x81\xb9\x33\x42\x09\x2c\x1c\
+\x11\x0a\x37\x3f\x77\xd0\xb8\x40\x4b\x20\xcc\xe1\x71\x43\xc2\x06\
+\x4d\x82\xc4\x45\xe2\x1c\x01\xf1\xd2\xb3\x8d\x08\x5e\x4e\x20\x20\
+\x32\x37\x7c\x39\x0b\x48\xe0\x48\x49\x46\x05\x30\x17\xb0\x31\xfd\
+\x4a\x10\x7e\x22\x2d\xc1\x48\x1b\x8a\xcd\x31\xc6\xd9\xb4\x84\x10\
+\x8e\x84\xd4\xbc\x9f\x95\x40\xf6\xd1\x83\x53\x3a\xb8\x36\x1d\x5a\
+\x6b\xcf\x1c\x65\xcb\x72\x41\xcf\x92\x86\xe1\xd4\xc2\xa1\x3b\x22\
+\x84\x74\xe0\x3a\xc5\xb6\x8d\x62\x29\x2b\xcd\x61\x26\x13\xd9\xf6\
+\x3c\x33\x9d\x5a\xe4\x85\x66\x92\x56\xd3\xca\xf4\x52\xc2\x83\x9d\
+\xd4\x05\x76\x3a\x5f\xdc\x19\x8a\x8d\x66\x28\xe5\xca\xf2\x47\x35\
+\x94\x72\xdc\x40\xa3\x19\xea\xd2\xf8\x43\x00\xa9\xd4\xad\x26\x29\
+\xb9\x43\x4d\xe3\xa5\xad\x56\x9a\xcb\x7b\xb4\x6d\xdf\x35\xec\x30\
+\x86\x0c\xec\x43\x9d\xe2\x99\x09\x04\x95\x8c\x21\x27\xd5\x90\x96\
+\x08\x52\x7f\x2e\x4e\x20\x7d\xbe\x3e\x1d\x5c\x7f\x5e\x0c\x71\xde\
+\xbb\xa5\x9e\x28\x86\xa8\x30\x17\x7a\x81\xbb\x12\xc2\xb0\x59\xcc\
+\x0d\x35\xaa\x29\x89\x08\xc2\x9c\x10\x46\x27\x81\xa0\x08\x6a\x2e\
+\xca\xcd\x24\x50\x50\x1b\x31\x46\x84\x7e\x41\x6d\x64\xf7\xea\x30\
+\x3b\x95\xae\xca\x28\xb2\x6d\x14\x88\x51\xe9\x48\x62\x6f\x9b\xdf\
+\x77\x05\x98\x86\x42\x93\x73\xf2\x0d\xbe\x90\x12\x92\x50\x2d\xfa\
+\xf8\x62\x0a\xa8\x44\x11\x76\x02\xb0\xb3\xf5\xe9\xe0\xfa\x41\x7c\
+\xf1\x8b\xf0\x25\xc7\xc5\x97\xa6\xaa\x87\x2f\x46\x95\x54\x93\x80\
+\x6b\x04\x11\x5e\x9a\x06\x5f\x04\x49\x2d\xc8\x4b\x6a\x6f\xbb\x57\
+\x97\xcd\x95\x03\x5f\x11\xb3\x6d\x1c\x7c\x29\x07\xbe\x78\x6c\xdb\
+\x2b\xa6\xfe\x1c\x1b\xe1\xd2\x10\xf0\xb8\x0a\x6e\x2c\x6e\x47\x8a\
+\xf2\xbc\x7f\xdb\x0f\x0a\x8b\x49\xc2\x52\xf5\xdd\x74\xf4\x40\xc0\
+\x5d\x0c\x47\x44\xa8\x5e\x2a\xb8\x03\x2a\xd1\x02\x11\x86\x7b\x4e\
+\x42\xe7\x3e\x67\x1c\x42\xb7\xe1\x47\x0d\xed\x80\x4a\x38\x46\x94\
+\x2a\x46\xfc\x27\x54\x4f\x05\xbb\xc4\xdf\x20\xca\xaa\x31\x1d\x8e\
+\x53\x46\x34\x95\x87\x77\x5c\xdd\x90\x42\x8c\xa0\x4a\x40\x44\xb7\
+\x11\x44\xc2\xe6\xe4\x0b\x1c\xae\xd9\xac\xcb\xc4\x70\x6d\x3c\x6d\
+\x62\x9a\x68\x8a\x2f\x30\xf1\x25\x78\xa2\xc2\xe1\x73\x82\xa6\xe9\
+\x25\xa5\xe4\xff\xf3\x15\x2a\x67\x44\x5d\x82\xb2\xe6\x15\xaa\x1e\
+\x0d\x67\x23\xbf\x42\xdd\x6f\xee\xa2\x4f\x18\xae\x14\x71\xe4\x6f\
+\x18\x2f\xc8\x7f\x9f\xff\xe2\x60\x16\xda\x8f\x3f\x4d\x6f\x93\xd4\
+\xd1\x22\xaa\xa3\xab\x6e\x2b\x2d\x85\x49\xd2\xba\xde\xac\x5c\xa4\
+\xd3\xbf\x7e\xfd\xad\x3b\x40\x1c\x4f\xff\x2e\xca\x2f\x47\xb9\x96\
+\x21\xba\x2d\xee\x40\x74\xa7\x56\xfb\xc5\x29\x9e\x5a\x33\x46\xf5\
+\x4d\xb6\x89\x96\x89\xfd\xec\xf5\xf3\xc3\x66\x0d\xf2\xbb\x89\x13\
+\xe6\x7a\xb7\x4d\x8e\x0f\xdd\x3f\xb6\x4c\xaa\xe2\xae\x8c\x93\xc1\
+\x2f\x81\x8b\x78\x93\xd9\x45\xe1\xc7\x3a\x5b\xaf\x3f\x58\x21\x3d\
+\x45\x1f\x1e\x9a\xd5\xeb\xe4\xa6\x91\xb9\xef\xb6\xa7\x08\x0f\xc7\
+\xe8\x2a\x9c\xe3\x29\x67\x61\xab\x86\x66\xb4\x3c\xaa\x67\x1d\xed\
+\x92\xb2\xfd\xac\x33\xdb\x46\xf5\xaa\x15\x06\x93\x7f\x78\x0a\x61\
+\x63\xdb\x44\x20\x4d\x9a\xe6\xbd\xf7\x08\x78\x1b\x04\x43\xaa\x01\
+\xb5\xcd\x80\x10\xc1\xf4\x04\x92\x12\xae\x05\xc3\xd4\x63\x90\x92\
+\x30\x68\xdc\xd2\x6c\x87\x29\x0f\x7a\x58\x12\x62\x2c\x89\x42\x02\
+\xa6\x68\x43\xb2\x3f\x32\x21\x06\x32\x30\x68\xd2\x13\x12\x35\x72\
+\xac\x44\xc8\xb8\x6c\xf3\xd6\x1e\xf8\xca\x89\x13\xdb\x7d\x82\xe7\
+\x1e\xe3\xe4\x01\x5b\x29\x68\x6d\x9a\x17\x79\x02\x90\x2a\x8b\x2f\
+\x49\xef\xd5\x94\x1d\x06\xcd\x07\xc6\x29\x6d\x87\x16\x4a\x71\xb4\
+\x9d\xde\xde\xd5\x75\x9f\xf6\x4f\x91\xe5\x53\xb0\x44\x52\xb6\xd4\
+\x66\xb0\xce\xe0\x6f\xca\x5b\x5a\xe7\x1f\x2d\x61\x11\x55\xab\xa8\
+\x2c\xa3\x5d\xb3\x85\x23\x64\x97\xed\x2e\xeb\xa1\x0b\xc7\x18\xad\
+\x29\xe8\x12\x23\x0c\x6a\xe4\x4c\x40\x7e\xd7\xeb\xf7\x38\x02\x82\
+\xed\x2d\xc4\xa4\xed\x2a\x83\x34\x86\x7c\xf0\xfa\x44\x31\x4b\x08\
+\x68\xbd\xc2\x74\x79\x44\xdf\xb9\x6c\x90\x62\x0d\x27\x38\x6f\x04\
+\x1a\x30\x80\x06\x4b\xf7\xba\x3d\x0e\xa3\x11\x94\x65\xf0\x9b\x30\
+\x30\x96\x86\x3d\xa8\x6b\xff\xd4\xe9\x97\x70\x73\xe9\xbe\xbb\xf4\
+\xd1\x74\x40\xd4\xc6\xa3\x1c\x8a\x39\xc2\xe1\x38\x52\x58\xe8\x18\
+\xe6\x45\x16\x09\x02\x88\x6c\xd2\x76\x3c\x00\x16\xb4\xc0\x28\x64\
+\x79\xe1\x3a\x7e\x94\xa7\xc7\xf2\xaf\xdf\x17\xd7\x02\x05\xee\x38\
+\x7c\x32\xd1\x07\x0b\x00\x84\x6b\x08\x41\x76\x70\x66\xd1\x61\xf8\
+\x08\xab\x78\x0b\x5b\x33\x06\x3a\x9e\xd0\x94\x30\x48\x62\x43\xc9\
+\xa4\xbb\xc9\x40\x55\x87\x1b\xd0\xd8\x8c\xc4\x18\x42\x28\x6f\x75\
+\x25\xc1\x44\x06\x83\x23\xe2\xc7\x99\x7a\x3c\xa7\xca\x1a\x82\xa6\
+\xad\x2a\x30\x65\x16\x06\x82\x72\x09\xd9\xcf\xa4\xdf\xeb\xa6\x19\
+\xb3\x4f\x95\x86\x4e\x28\x81\xcc\xd0\x30\xaa\xaf\x1f\xb3\x04\x7d\
+\xd4\x12\x10\x06\xdf\xbe\x39\xbf\x9d\xaf\x1f\x31\xcd\x37\x4a\x9c\
+\x85\xcb\x36\xee\x2d\xf7\x11\x0f\xfe\x66\x36\x42\xdf\x5c\xfd\x07\
+\x95\x3e\xf7\x52\
\x00\x00\x12\x3b\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -51747,6 +51857,126 @@
\xd3\xfd\x23\x03\x22\xa4\x3b\xbc\x9a\xf2\x54\xbe\xb6\x6d\x12\xb6\
\xd9\x76\xbb\xad\x7e\xd5\xdf\x51\x28\xd4\x3d\xa1\xef\x1b\xef\xdf\
\xfc\x1f\x48\xa4\xe7\x17\
+\x00\x00\x07\x5d\
+\x00\
+\x00\x26\x26\x78\x9c\xed\x59\x4b\x73\xe3\xb8\x11\xbe\xfb\x57\x30\
+\x9c\xcb\xb8\x56\xa4\xf0\x7e\x68\x24\xef\x61\x53\x9b\xda\x43\x2a\
+\x55\xbb\x3b\x95\x33\x4c\x81\x32\x63\x8a\x54\x91\xf4\x43\xfb\xeb\
+\xd3\x80\x24\x8a\x1a\xd1\xa6\xec\x70\x9c\x4d\x55\x84\x83\xf0\x68\
+\xb0\x81\xaf\xbf\x6e\x34\xc8\xf9\x8f\xcf\xeb\x3c\x78\xb4\x55\x9d\
+\x95\xc5\x22\xc4\x31\x0a\x03\x5b\x24\xe5\x32\x2b\x56\x8b\xf0\xeb\
+\xef\x3f\x47\x2a\x0c\xea\xc6\x14\x4b\x93\x97\x85\x5d\x84\x45\x19\
+\xfe\x78\x73\x35\xff\x4b\x14\x05\x3f\x55\xd6\x34\x76\x19\x3c\x65\
+\xcd\x5d\xf0\x4b\x71\x5f\x27\x66\x63\x83\xcf\x77\x4d\xb3\x99\x4d\
+\xa7\x4f\x4f\x4f\x71\xb6\xef\x8c\xcb\x6a\x35\xbd\x0e\xa2\xe8\xe6\
+\xea\x6a\x5e\x3f\xae\xae\x82\x20\x00\xbd\x45\x3d\x5b\x26\x8b\x70\
+\x3f\x61\xf3\x50\xe5\x5e\x70\x99\x4c\x6d\x6e\xd7\xb6\x68\xea\x29\
+\x8e\xf1\x34\x3c\x8a\x27\x47\xf1\xc4\x69\xcf\x1e\x6d\x52\xae\xd7\
+\x65\x51\xfb\x99\x45\xfd\xa9\x23\x5c\x2d\xd3\x56\xda\xad\xe6\x89\
+\x7a\x21\xac\xb5\x9e\x22\x32\x25\x24\x02\x89\xa8\xde\x16\x8d\x79\
+\x8e\x4e\xa7\xc2\x1a\xfb\xa6\x12\x84\xd0\x14\xc6\x8e\x92\x97\x49\
+\xcd\x9e\x73\x80\xe2\xc5\xc5\xf8\x51\x2f\xdd\x31\x04\xf6\x1d\x4f\
+\xd9\xb2\xb9\x5b\x84\x82\xf9\xd6\x9d\xcd\x56\x77\x4d\xdb\xcc\x96\
+\x8b\x10\xf4\x50\x81\x49\x78\x03\x1d\xf3\xa5\x4d\x6b\x37\xb0\x1b\
+\x72\x2d\x18\x63\x7e\x0c\x46\x41\x8b\x35\xd5\xdf\x2a\xb3\xcc\x00\
+\xdb\x9d\xdc\x4e\xf2\x74\x84\x62\xc6\x22\xb1\x9f\x05\xf3\xea\xa6\
+\xdc\x1c\xa4\xf7\x4a\xa1\x07\xa4\x44\xa4\xc3\xe3\x40\xdd\x6c\x73\
+\xbb\x1b\x8b\x92\x32\x2f\xab\xd9\xa7\xd4\xff\xbe\xf8\xae\x72\x63\
+\x92\xac\xd9\xce\x70\x67\x4a\x99\xa6\xb5\x85\xfd\x00\xe9\xa6\xc3\
+\xea\x54\x44\xde\xae\x0e\xf5\xa8\xc3\xad\xba\xf9\xf4\x74\xeb\x6f\
+\x45\x4a\x22\x3c\x88\x93\x44\xf4\xe3\x50\x92\x88\x7f\x10\x46\xae\
+\x65\xf2\x6f\x31\x4a\x9e\x17\x21\x21\x3c\x26\x82\xa1\xa3\xb5\x92\
+\x2d\x70\x56\x92\x58\x6a\x49\x45\xdb\x5b\x2d\x42\xca\x62\xca\x38\
+\x56\xaa\xed\x4c\x7b\x1f\x90\xf6\x3e\xc0\xed\xfa\x74\x19\x54\x74\
+\x1e\xe5\xdd\x6a\x76\x57\x59\x08\x03\x9f\x7a\x29\x7e\x90\x5c\xed\
+\xbb\xbf\x16\x59\x03\x2e\xfd\x50\xdb\xea\x37\xc0\xc6\xfe\xa3\xf8\
+\x5a\xdb\x33\xa9\xdf\x2b\x53\xd4\x69\x59\xad\x17\xe1\xda\x34\x55\
+\xf6\xfc\x19\x4f\x90\x2b\xb1\xd0\x8a\x13\xcd\xa0\x4e\x10\x89\x15\
+\x51\x82\x5e\x1f\x71\x7c\x03\xab\xd4\x30\xab\x30\xfa\x40\x56\xe1\
+\x3f\x9d\xe7\x29\xc1\x22\x14\xa1\x41\x9c\x94\x10\x11\x8f\xe4\xeb\
+\xcb\x47\x02\xeb\x04\x8d\x83\x95\x12\x2a\x92\x1d\x6e\xf5\x2a\xa4\
+\x52\x27\xe9\xed\xb0\xc2\xf1\xf0\xa2\x52\x0e\x62\x05\xab\x1a\x32\
+\xb3\x31\x68\x24\x9c\xa8\xc2\x03\xca\x4c\x9a\x92\x0f\xc5\xc8\x73\
+\xea\x32\x46\x7d\x30\x9f\xfe\x64\x6c\xe2\x88\x0d\x46\x28\x8e\xf8\
+\x40\x84\x42\xfe\x37\x1c\x34\x2e\x40\x09\x94\x0d\x78\x5c\x9f\xb2\
+\x5e\x93\xc4\xfc\x22\x75\x03\x01\xf1\xd2\xbd\x8d\x48\x5e\x86\x21\
+\x20\xd2\x61\xfa\x32\x1a\xe1\x68\x20\x25\x19\x95\xc0\x8c\xc3\xc2\
+\xd4\x07\x51\xf8\x95\xb4\x04\xc5\x4a\x13\xa4\x8f\x31\xce\xa5\x25\
+\x18\xb3\x98\x0b\xc5\xba\x59\x09\x64\x1f\x1d\x3a\xa5\xbd\x73\xd3\
+\xbe\xb9\x6e\xcf\x26\x5b\x55\x4b\x72\x96\x34\xf4\xa7\x16\x03\xd8\
+\x61\xce\xc5\x00\xaf\x53\xe4\xca\x28\x96\x72\xda\x06\xcc\xa4\x8d\
+\x2b\x6f\x33\xd3\xa9\x45\xde\x69\x26\xe1\x90\x96\xba\x93\x12\xee\
+\xed\x24\x2f\xb0\xd3\xf9\xe4\xd6\x50\x74\x34\x43\xc9\xa1\x2c\x7f\
+\x54\x43\xc9\x81\x13\x68\x34\x43\x5d\x1a\x7f\x30\x30\x95\x0c\xc3\
+\x24\x04\x1b\x80\x69\xbc\xb4\xd5\x69\x1b\xf2\x1e\xe5\xca\x77\x0d\
+\x3b\x94\xc6\x1a\xd6\x21\x4f\xf9\x4c\x79\x0c\x37\x19\x8d\x4f\x6e\
+\x43\x4a\xc4\x90\xfa\x33\x7e\x42\xe9\xf3\xf9\x69\xef\xfc\xf3\xcb\
+\x10\x63\x9d\x53\xea\x95\xcb\x10\xe1\xfa\x42\x2f\x18\xbe\x09\x21\
+\x58\x2c\x62\x9a\x68\xe9\xaf\x44\x38\x46\x0c\x63\x4a\x26\x11\x27\
+\x31\xdc\xb9\x08\xd3\x93\x48\xc2\xdd\x88\x52\xcc\xd5\x3b\xee\x46\
+\x6e\xad\x03\x66\x27\x62\xe8\x66\x64\x5c\x19\x85\x62\x44\x0c\x24\
+\xb1\xb7\xfe\xf7\x5d\x09\xa6\xe0\xa2\xc9\x18\xfe\x86\x5f\xb1\xe4\
+\x02\x13\xc5\xbb\xfc\xa2\x12\x7a\xb1\xc4\xf4\x84\x60\x67\xf3\xd3\
+\xde\xf9\xbd\xfc\x62\x17\xf1\x4b\x8c\xcb\x2f\x45\x64\x87\x5f\x94\
+\x48\x21\x27\x11\x53\x31\x44\x78\xa1\x3d\xbf\x70\x2c\x14\xc7\xef\
+\xb9\x7b\xbb\xb5\x0e\xd9\x5c\x0e\xf0\xcb\x50\x57\xc6\xe1\x97\x1c\
+\xe0\x17\x4b\x5c\xf9\xc0\xd4\x9f\x21\xcd\x87\x10\x02\x99\xa1\x0b\
+\x37\xe2\xb7\x23\x45\x79\xd6\x3d\xed\x7b\x95\x25\xd8\xd2\x54\x7e\
+\x37\x8c\x9e\x31\xb8\x8b\x66\x31\xe6\xb2\x93\x0a\x6e\xa1\x17\x2b\
+\x1e\x63\x8a\x3a\x4e\x42\x16\x21\xa3\x0c\x42\xb7\x66\x47\x84\xb6\
+\xd0\x8b\x19\x8a\x09\x91\x14\x87\xaf\x40\x4f\x38\xbd\xc4\xdf\x20\
+\xca\xca\x31\x1d\x8e\x11\x8a\x15\x11\xfb\x77\x5c\x6d\x93\x40\x8c\
+\x20\x92\x43\x44\x77\x11\x44\xc0\xe2\xc4\x3b\x1c\xce\x2f\x76\xc8\
+\xc4\x70\x6c\xbc\x6e\x62\x62\x15\x41\x17\x98\xf8\x12\x3e\x11\x3e\
+\xe0\x73\x9c\xa4\xe9\x25\x57\xc9\xff\xcd\x57\xa8\x8c\x62\x79\x09\
+\xcb\xfc\x2b\x54\x35\x1a\xcf\x46\x7e\x85\xba\x5b\xdc\x45\x9f\x30\
+\x86\x52\xc4\x91\xbf\x61\xbc\x23\xff\x7d\xfb\x8b\x83\xf9\xd4\x7d\
+\xfc\xf1\xb5\xb5\x6d\xcc\xd2\x34\xe6\xaa\x5d\xca\xa1\x87\x0a\x7c\
+\x70\xbd\x79\xb5\x4c\x67\xbf\xfe\xf5\xe7\x76\x03\x49\x32\xfb\x67\
+\x59\xdd\x1f\xf5\x3a\x01\x73\x5b\x3e\x80\xea\x16\x56\xf7\xc5\x29\
+\x99\x39\x33\x9a\xe6\x26\x5b\x9b\x95\x75\x9f\xbd\x7e\x78\x5e\xe7\
+\xa0\xbf\x1d\x38\x11\x6e\xb6\x1b\x7b\x7c\xe8\xee\xb1\x95\xad\xcb\
+\x87\x2a\xb1\xbd\x5f\x02\x97\xc9\x3a\x73\x93\xa6\xbf\x35\x59\x9e\
+\xff\xe2\x94\x74\x80\xde\x3f\x34\x6b\x72\x7b\xe3\x75\xee\xaa\x87\
+\x5d\x4c\xf7\xdb\x68\x6f\x38\xc7\x5d\xce\xa7\x07\x18\x7c\x6b\x75\
+\x84\x27\x37\x5b\x5b\x1d\x3e\xeb\xcc\x37\xa6\xb9\x3b\x28\x83\xc1\
+\xbf\x07\x32\x46\xda\x95\x09\x8f\x15\xf6\x25\xf8\x29\xc0\xe0\x6d\
+\x10\x0c\x89\x02\xd6\xfa\x06\xc6\x9c\xaa\x09\x24\x25\x4c\x71\x8a\
+\x48\x40\x21\x25\xa1\x50\x98\xeb\x73\x15\x2a\x03\xa8\x21\x81\xb1\
+\x76\x5d\x04\x12\x30\x49\x7c\x97\xfb\xe1\x09\xd6\x90\x81\x41\x11\
+\x01\x17\xb1\xd7\xe3\x34\x42\xc6\xe5\x4a\x90\x07\xe0\x2b\x27\x4e\
+\xec\xd6\x09\x9e\x7b\x8c\x93\x7b\x6e\xa5\x80\xda\xac\x28\x0b\x0b\
+\x94\xaa\xca\x7b\xdb\x79\x35\xe5\x9a\x91\xff\xc0\x38\x23\x87\xa6\
+\xa3\x52\x62\x36\xb3\xdb\x87\xa6\xe9\xf6\xfd\xab\xcc\x8a\x19\x58\
+\xc2\x56\x87\x5e\xdf\xc8\x33\xf8\x9b\xb1\x43\x5f\xeb\x1f\x87\x8e\
+\xa5\xa9\xef\x4c\x55\x99\xad\x5f\xc2\x91\xb2\xdf\xa0\xba\x0e\x04\
+\x80\x10\x30\xbd\x43\x11\x72\xbb\x1d\x46\xe2\x7c\x8b\x48\x91\xf7\
+\x6d\x11\x6f\x9e\xdf\xbe\xc9\xa3\xc3\xb7\x4b\x5f\x1d\xb4\x37\x67\
+\x31\x2c\x42\x31\x5c\x76\x94\x84\xfb\xf9\x04\xea\x90\x05\x71\x2c\
+\xa4\xdb\x4d\x5b\x3d\x11\xd1\xb1\x96\x4c\x83\x8d\x27\x98\xe1\x98\
+\x43\xba\x8d\xaf\x4f\x76\xbc\x82\x93\xaf\x13\xc5\xba\xa8\xed\x71\
+\x23\x0c\x2e\x82\x98\x01\xf1\x04\x77\xb4\xd3\x34\x30\x8e\x45\x1c\
+\x3a\xe9\xe4\x50\x09\x80\x94\x50\x22\x2d\x63\x27\x0b\x47\xf9\x8b\
+\x32\x1d\x91\x3f\xc2\xd3\x10\xe6\xd4\xc3\xe9\xd8\x93\xfd\x7a\x0b\
+\x00\xea\x4c\x41\xe8\x72\x8d\x33\x26\xf4\xdb\x04\x5c\x68\x47\x77\
+\x3d\x06\xab\x5e\x40\x88\xeb\x58\x20\x4d\xf0\xa4\x3d\xfd\x00\xa2\
+\xfd\xa9\xa9\x5d\x16\xa3\x35\xc6\x84\x1d\x30\x12\x0a\xce\x20\x04\
+\xce\x8b\x5e\x16\xea\xc8\x74\x41\x3a\x67\x04\x8a\xdd\x3d\x04\x11\
+\xea\x0c\xcf\x09\x13\x90\x2f\x4d\xba\xb5\x76\x98\x52\xf7\x4c\xa1\
+\xc9\x84\x60\xc8\x25\x35\x25\xea\xba\x1f\xff\x9e\x37\xcf\x1e\x7f\
+\x08\x9a\x9f\x3f\x9d\x9f\xe5\xd7\x2f\x18\xe4\xd4\x21\xa7\xab\x97\
+\x3c\x33\x22\x40\x10\x17\x75\xf8\x84\xd1\x5d\xcd\x01\x88\x63\xb9\
+\xf7\xd5\xb6\x76\x40\x90\xee\xc2\x94\xa3\xd0\xcb\x52\x1d\xa1\x23\
+\x84\x1d\x00\x7d\x35\x37\x8d\xfd\x4c\xc5\x6e\x2a\x50\x75\x1f\x15\
+\xd8\x75\x5f\x5c\x60\xdf\xc6\x85\xd3\x57\xf1\x07\x8e\x22\x74\xce\
+\x51\xdf\xac\x1e\x72\x8f\xca\x1f\xb6\x2a\x5f\x65\x2d\xd8\xef\x43\
+\xc2\x65\xb7\x77\x77\xec\xcf\xd0\x97\xb5\xa9\xee\x6d\xb5\x1b\x7f\
+\xcc\xea\xec\x36\xcb\xdd\x23\x7c\x35\xb7\x5f\x96\x59\xbd\x81\x03\
+\x6c\x96\x15\x6e\x19\x5f\xca\x47\x5b\xa5\x79\xf9\xd4\x8e\xdb\xc2\
+\xc0\x5f\x74\x6b\x92\xfb\x55\x55\x3e\x14\xcb\x99\x49\x92\x87\xf5\
+\x83\x43\xfa\x95\xf0\xfc\x5f\x27\x01\xdc\xa4\xfc\xa9\x8b\x81\x04\
+\xfe\xd0\x45\x2f\x90\xa0\xf3\x69\xee\xff\x34\xf8\x4f\x68\xe0\x43\
+\xc2\xdc\x25\x74\x37\x57\xff\x06\x05\x89\x4f\xbc\
\x00\x00\x09\x90\
\x00\
\x00\x23\x6d\x78\x9c\xed\x59\x5b\x8f\xdb\xd6\x11\x7e\xf7\xaf\x50\
@@ -54356,16 +54586,16 @@
\x00\x75\
\x00\x73\x00\x65\x00\x72\x00\x70\x00\x72\x00\x65\x00\x66\x00\x73\x00\x2d\x00\x62\x00\x61\x00\x73\x00\x65\x00\x2e\x00\x75\x00\x69\
\
-\x00\x16\
-\x06\xdf\x3b\x47\
-\x00\x44\
-\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x44\x00\x72\x00\x61\x00\x66\x00\x74\x00\x32\x00\x53\x00\x6b\x00\x65\x00\x74\x00\x63\
-\x00\x68\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x13\
\x05\x4e\x71\x27\
\x00\x44\
\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x52\x00\x65\x00\x63\x00\x74\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2e\x00\x73\
\x00\x76\x00\x67\
+\x00\x16\
+\x06\xdf\x3b\x47\
+\x00\x44\
+\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x44\x00\x72\x00\x61\x00\x66\x00\x74\x00\x32\x00\x53\x00\x6b\x00\x65\x00\x74\x00\x63\
+\x00\x68\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0f\
\x0a\x03\x3b\x47\
\x00\x53\
@@ -54433,6 +54663,11 @@
\x00\x44\
\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x44\x00\x6f\x00\x77\x00\x6e\x00\x67\x00\x72\x00\x61\x00\x64\x00\x65\x00\x2e\x00\x73\
\x00\x76\x00\x67\
+\x00\x14\
+\x0d\xa6\xf7\x87\
+\x00\x44\
+\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x42\x00\x65\x00\x7a\x00\x54\x00\x61\x00\x6e\x00\x4e\x00\x6f\x00\x64\x00\x65\x00\x2e\
+\x00\x73\x00\x76\x00\x67\
\x00\x11\
\x09\x41\x15\xe7\
\x00\x53\
@@ -54575,6 +54810,11 @@
\x05\x69\x00\x47\
\x00\x44\
\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x4c\x00\x6f\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x14\
+\x0d\xa7\xf5\x87\
+\x00\x44\
+\x00\x72\x00\x61\x00\x66\x00\x74\x00\x5f\x00\x42\x00\x65\x00\x7a\x00\x53\x00\x79\x00\x6d\x00\x4e\x00\x6f\x00\x64\x00\x65\x00\x2e\
+\x00\x73\x00\x76\x00\x67\
\x00\x10\
\x05\x72\x7a\x27\
\x00\x44\
@@ -54635,8 +54875,8 @@
qt_resource_struct = "\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\
-\x00\x00\x00\x10\x00\x02\x00\x00\x00\x03\x00\x00\x00\x5e\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x3d\x00\x00\x00\x21\
+\x00\x00\x00\x10\x00\x02\x00\x00\x00\x03\x00\x00\x00\x60\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x3f\x00\x00\x00\x21\
\x00\x00\x00\x38\x00\x02\x00\x00\x00\x05\x00\x00\x00\x1c\
\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x17\x00\x00\x00\x05\
\x00\x00\x01\xb4\x00\x01\x00\x00\x00\x01\x00\x04\x13\x04\
@@ -54667,67 +54907,69 @@
\x00\x00\x00\x64\x00\x01\x00\x00\x00\x01\x00\x00\x0a\xf1\
\x00\x00\x00\x96\x00\x01\x00\x00\x00\x01\x00\x00\x13\x00\
\x00\x00\x00\x7c\x00\x01\x00\x00\x00\x01\x00\x00\x0f\x23\
-\x00\x00\x06\xfa\x00\x01\x00\x00\x00\x01\x00\x0b\x0c\xfb\
+\x00\x00\x07\x28\x00\x01\x00\x00\x00\x01\x00\x0b\x13\xb4\
\x00\x00\x04\xa8\x00\x00\x00\x00\x00\x01\x00\x0a\x69\xe4\
-\x00\x00\x09\xba\x00\x01\x00\x00\x00\x01\x00\x0b\xfd\x3a\
-\x00\x00\x0c\xd4\x00\x01\x00\x00\x00\x01\x00\x0c\xf6\x65\
+\x00\x00\x09\xe8\x00\x01\x00\x00\x00\x01\x00\x0c\x03\xf3\
+\x00\x00\x0d\x30\x00\x01\x00\x00\x00\x01\x00\x0d\x04\x7f\
\x00\x00\x05\xb2\x00\x01\x00\x00\x00\x01\x00\x0a\xa9\x8f\
-\x00\x00\x07\x70\x00\x00\x00\x00\x00\x01\x00\x0b\x36\xb7\
-\x00\x00\x08\x84\x00\x01\x00\x00\x00\x01\x00\x0b\x9f\x65\
-\x00\x00\x0b\xac\x00\x01\x00\x00\x00\x01\x00\x0c\xa0\x3c\
-\x00\x00\x07\xe4\x00\x00\x00\x00\x00\x01\x00\x0b\x60\x86\
-\x00\x00\x0a\x54\x00\x01\x00\x00\x00\x01\x00\x0c\x3d\xdb\
-\x00\x00\x0d\x24\x00\x01\x00\x00\x00\x01\x00\x0d\x12\x89\
+\x00\x00\x07\x9e\x00\x00\x00\x00\x00\x01\x00\x0b\x3d\x70\
+\x00\x00\x08\xb2\x00\x01\x00\x00\x00\x01\x00\x0b\xa6\x1e\
+\x00\x00\x0c\x08\x00\x01\x00\x00\x00\x01\x00\x0c\xae\x56\
+\x00\x00\x08\x12\x00\x00\x00\x00\x00\x01\x00\x0b\x67\x3f\
+\x00\x00\x0a\x82\x00\x01\x00\x00\x00\x01\x00\x0c\x44\x94\
+\x00\x00\x0d\x80\x00\x01\x00\x00\x00\x01\x00\x0d\x20\xa3\
\x00\x00\x04\xee\x00\x01\x00\x00\x00\x01\x00\x0a\x83\x06\
-\x00\x00\x09\x62\x00\x00\x00\x00\x00\x01\x00\x0b\xda\xe0\
-\x00\x00\x08\xaa\x00\x01\x00\x00\x00\x01\x00\x0b\xa5\x29\
-\x00\x00\x07\x4a\x00\x00\x00\x00\x00\x01\x00\x0b\x24\x21\
-\x00\x00\x07\x1c\x00\x01\x00\x00\x00\x01\x00\x0b\x17\xaf\
-\x00\x00\x0c\x76\x00\x00\x00\x00\x00\x01\x00\x0c\xda\xc7\
+\x00\x00\x09\x90\x00\x00\x00\x00\x00\x01\x00\x0b\xe1\x99\
+\x00\x00\x08\xd8\x00\x01\x00\x00\x00\x01\x00\x0b\xab\xe2\
+\x00\x00\x07\x78\x00\x00\x00\x00\x00\x01\x00\x0b\x2a\xda\
+\x00\x00\x07\x4a\x00\x01\x00\x00\x00\x01\x00\x0b\x1e\x68\
+\x00\x00\x0c\xd2\x00\x00\x00\x00\x00\x01\x00\x0c\xe8\xe1\
\x00\x00\x05\x12\x00\x01\x00\x00\x00\x01\x00\x0a\x88\x85\
-\x00\x00\x07\xb8\x00\x01\x00\x00\x00\x01\x00\x0b\x4f\x7c\
+\x00\x00\x07\xe6\x00\x01\x00\x00\x00\x01\x00\x0b\x56\x35\
\x00\x00\x04\xca\x00\x01\x00\x00\x00\x01\x00\x0a\x78\x9a\
-\x00\x00\x0c\x24\x00\x00\x00\x00\x00\x01\x00\x0c\xc2\x97\
-\x00\x00\x04\x28\x00\x01\x00\x00\x00\x01\x00\x0a\x44\x52\
+\x00\x00\x0c\x80\x00\x00\x00\x00\x00\x01\x00\x0c\xd0\xb1\
+\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x0a\x3c\x99\
\x00\x00\x06\x02\x00\x01\x00\x00\x00\x01\x00\x0a\xc4\xae\
-\x00\x00\x0b\x64\x00\x01\x00\x00\x00\x01\x00\x0c\x89\x0d\
-\x00\x00\x0b\x86\x00\x01\x00\x00\x00\x01\x00\x0c\x96\xa8\
+\x00\x00\x0b\x92\x00\x01\x00\x00\x00\x01\x00\x0c\x8f\xc6\
+\x00\x00\x0b\xe2\x00\x01\x00\x00\x00\x01\x00\x0c\xa4\xc2\
\x00\x00\x05\xe0\x00\x00\x00\x00\x00\x01\x00\x0a\xb2\x95\
-\x00\x00\x03\xf6\x00\x01\x00\x00\x00\x01\x00\x0a\x3c\x99\
-\x00\x00\x09\x40\x00\x01\x00\x00\x00\x01\x00\x0b\xd3\x8c\
-\x00\x00\x0a\xae\x00\x01\x00\x00\x00\x01\x00\x0c\x4e\x23\
+\x00\x00\x04\x22\x00\x01\x00\x00\x00\x01\x00\x0a\x44\xa0\
+\x00\x00\x09\x6e\x00\x01\x00\x00\x00\x01\x00\x0b\xda\x45\
+\x00\x00\x0a\xdc\x00\x01\x00\x00\x00\x01\x00\x0c\x54\xdc\
\x00\x00\x06\x56\x00\x01\x00\x00\x00\x01\x00\x0a\xd6\x1e\
-\x00\x00\x0a\xd2\x00\x00\x00\x00\x00\x01\x00\x0c\x55\x10\
-\x00\x00\x08\x3e\x00\x00\x00\x00\x00\x01\x00\x0b\x78\x39\
+\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x01\x00\x0c\x5b\xc9\
+\x00\x00\x08\x6c\x00\x00\x00\x00\x00\x01\x00\x0b\x7e\xf2\
\x00\x00\x05\x64\x00\x01\x00\x00\x00\x01\x00\x0a\x98\x85\
-\x00\x00\x0c\xf4\x00\x00\x00\x00\x00\x01\x00\x0d\x01\x13\
-\x00\x00\x06\xb0\x00\x00\x00\x00\x00\x01\x00\x0a\xed\x5d\
+\x00\x00\x0d\x50\x00\x00\x00\x00\x00\x01\x00\x0d\x0f\x2d\
+\x00\x00\x06\xde\x00\x00\x00\x00\x00\x01\x00\x0a\xf4\x16\
\x00\x00\x04\x54\x00\x00\x00\x00\x00\x01\x00\x0a\x4c\x59\
-\x00\x00\x0d\x54\x00\x00\x00\x00\x00\x01\x00\x0d\x1e\x62\
-\x00\x00\x0b\x1a\x00\x00\x00\x00\x00\x01\x00\x0c\x72\x97\
+\x00\x00\x0d\xb0\x00\x00\x00\x00\x00\x01\x00\x0d\x2c\x7c\
+\x00\x00\x0b\x48\x00\x00\x00\x00\x00\x01\x00\x0c\x79\x50\
\x00\x00\x04\x78\x00\x01\x00\x00\x00\x01\x00\x0a\x61\x79\
-\x00\x00\x09\x14\x00\x01\x00\x00\x00\x01\x00\x0b\xc6\xb5\
-\x00\x00\x0b\x42\x00\x01\x00\x00\x00\x01\x00\x0c\x81\xbe\
-\x00\x00\x09\xdc\x00\x01\x00\x00\x00\x01\x00\x0c\x05\xe3\
-\x00\x00\x0b\xfe\x00\x01\x00\x00\x00\x01\x00\x0c\xb7\xd2\
-\x00\x00\x06\xd8\x00\x01\x00\x00\x00\x01\x00\x0a\xff\x9c\
-\x00\x00\x08\x16\x00\x01\x00\x00\x00\x01\x00\x0b\x6e\x88\
-\x00\x00\x0a\x32\x00\x00\x00\x00\x00\x01\x00\x0c\x29\x4a\
-\x00\x00\x0b\xd4\x00\x01\x00\x00\x00\x01\x00\x0c\xab\xab\
+\x00\x00\x09\x42\x00\x01\x00\x00\x00\x01\x00\x0b\xcd\x6e\
+\x00\x00\x0b\x70\x00\x01\x00\x00\x00\x01\x00\x0c\x88\x77\
+\x00\x00\x0a\x0a\x00\x01\x00\x00\x00\x01\x00\x0c\x0c\x9c\
+\x00\x00\x0c\x5a\x00\x01\x00\x00\x00\x01\x00\x0c\xc5\xec\
+\x00\x00\x07\x06\x00\x01\x00\x00\x00\x01\x00\x0b\x06\x55\
+\x00\x00\x08\x44\x00\x01\x00\x00\x00\x01\x00\x0b\x75\x41\
+\x00\x00\x0a\x60\x00\x00\x00\x00\x00\x01\x00\x0c\x30\x03\
+\x00\x00\x0c\x30\x00\x01\x00\x00\x00\x01\x00\x0c\xb9\xc5\
\x00\x00\x05\x88\x00\x01\x00\x00\x00\x01\x00\x0a\x9f\x4e\
-\x00\x00\x08\x64\x00\x00\x00\x00\x00\x01\x00\x0b\x89\xf1\
+\x00\x00\x08\x92\x00\x00\x00\x00\x00\x01\x00\x0b\x90\xaa\
\x00\x00\x06\x36\x00\x01\x00\x00\x00\x01\x00\x0a\xd0\x9f\
-\x00\x00\x0a\x7e\x00\x01\x00\x00\x00\x01\x00\x0c\x44\x50\
-\x00\x00\x08\xec\x00\x01\x00\x00\x00\x01\x00\x0b\xbb\x43\
-\x00\x00\x09\x92\x00\x01\x00\x00\x00\x01\x00\x0b\xed\x64\
-\x00\x00\x0c\xaa\x00\x01\x00\x00\x00\x01\x00\x0c\xeb\xe3\
-\x00\x00\x0a\xf6\x00\x01\x00\x00\x00\x01\x00\x0c\x67\xe7\
+\x00\x00\x0a\xac\x00\x01\x00\x00\x00\x01\x00\x0c\x4b\x09\
+\x00\x00\x09\x1a\x00\x01\x00\x00\x00\x01\x00\x0b\xc1\xfc\
+\x00\x00\x09\xc0\x00\x01\x00\x00\x00\x01\x00\x0b\xf4\x1d\
+\x00\x00\x06\xb0\x00\x01\x00\x00\x00\x01\x00\x0a\xed\x5d\
+\x00\x00\x0b\xb4\x00\x01\x00\x00\x00\x01\x00\x0c\x9d\x61\
+\x00\x00\x0d\x06\x00\x01\x00\x00\x00\x01\x00\x0c\xf9\xfd\
+\x00\x00\x0b\x24\x00\x01\x00\x00\x00\x01\x00\x0c\x6e\xa0\
\x00\x00\x05\x34\x00\x01\x00\x00\x00\x01\x00\x0a\x90\x63\
-\x00\x00\x0c\x4a\x00\x01\x00\x00\x00\x01\x00\x0c\xcb\x24\
-\x00\x00\x08\xcc\x00\x00\x00\x00\x00\x01\x00\x0b\xab\x71\
+\x00\x00\x0c\xa6\x00\x01\x00\x00\x00\x01\x00\x0c\xd9\x3e\
+\x00\x00\x08\xfa\x00\x00\x00\x00\x00\x01\x00\x0b\xb2\x2a\
\x00\x00\x06\x84\x00\x00\x00\x00\x00\x01\x00\x0a\xde\x03\
-\x00\x00\x07\x98\x00\x01\x00\x00\x00\x01\x00\x0b\x46\x08\
-\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x01\x00\x0c\x0d\x34\
+\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x0b\x4c\xc1\
+\x00\x00\x0a\x2e\x00\x00\x00\x00\x00\x01\x00\x0c\x13\xed\
\x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x0a\x27\xd8\
\x00\x00\x03\xce\x00\x01\x00\x00\x00\x01\x00\x0a\x32\x59\
\x00\x00\x03\x76\x00\x01\x00\x00\x00\x01\x00\x0a\x1c\x55\
diff --git a/src/Mod/Draft/Resources/Draft.qrc b/src/Mod/Draft/Resources/Draft.qrc
index 475889b16d54..c1842da67642 100644
--- a/src/Mod/Draft/Resources/Draft.qrc
+++ b/src/Mod/Draft/Resources/Draft.qrc
@@ -6,6 +6,8 @@
icons/Draft_Arc.svg
icons/Draft_BSpline.svg
icons/Draft_BezCurve.svg
+ icons/Draft_BezTanNode.svg
+ icons/Draft_BezSymNode.svg
icons/Draft_Circle.svg
icons/Draft_Construction.svg
icons/Draft_DelPoint.svg
diff --git a/src/Mod/Draft/Resources/icons/Draft_BezSymNode.svg b/src/Mod/Draft/Resources/icons/Draft_BezSymNode.svg
new file mode 100644
index 000000000000..bc114d239bf1
--- /dev/null
+++ b/src/Mod/Draft/Resources/icons/Draft_BezSymNode.svg
@@ -0,0 +1,305 @@
+
+
+
+
diff --git a/src/Mod/Draft/Resources/icons/Draft_BezTanNode.svg b/src/Mod/Draft/Resources/icons/Draft_BezTanNode.svg
new file mode 100644
index 000000000000..7194b7ae9af3
--- /dev/null
+++ b/src/Mod/Draft/Resources/icons/Draft_BezTanNode.svg
@@ -0,0 +1,295 @@
+
+
+
+