Whilst looking at the previously mentioned problem in uploading to squeaksource I had a bug in the debugger.
I've just a moment ago updated to #17785 so there are recent changes to some compiler/debugger stuff potentially involved In DebuggerMethodMapForClosureCompiledMethods>>#privateTempRefsForContext:startKeysToBlockExtents: the startKeysToTempRefs dictionary was nil and thus many varieties of heck[1] broke loose. ' 6 March 2018 1:31:36.766426 pm VM: unix - Smalltalk Image: Squeak6.0alpha [latest update: #17785] SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /home/pi/Squeak Trusted Dir /home/pi/Squeak/secure Untrusted Dir /home/pi/Squeak/My Squeak UndefinedObject(Object)>>doesNotUnderstand: #at:ifAbsentPut: Receiver: nil Arguments and temporary variables: aMessage: at: 57 ifAbsentPut: [closure] in DebuggerMethodMapForClosureCompiledMethods...etc... exception: MessageNotUnderstood: UndefinedObject>>at:ifAbsentPut: resumeValue: nil Receiver''s instance variables: nil DebuggerMethodMapForClosureCompiledMethods>>privateTempRefsForContext:startKeysToBlockExtents: Receiver: a DebuggerMethodMapForClosureCompiledMethods Arguments and temporary variables: aContext: WebClient>>httpPut:content:type:do: theContextsStartKeysToBlockExtents: a Dictionary(57->(0 to: 2) ) Receiver''s instance variables: timestamp: 3692875391 methodReference: a WeakArray((WebClient>>#httpPut:content:type:do: "a CompiledMethod...etc... methodNode: httpPut: urlString content: postData type: contentType do: aBlock ...etc... abstractSourceRanges: a Dictionary(3->(120 to: 147) 7->(167 to: 191) 8->(159 to...etc... sortedSourceMap: nil blockExtentsToTempRefs: a Dictionary((0 to: 2)->#(#(''urlString'' 1) #(''postData''...etc... startpcsToTempRefs: a Dictionary(57->#(#(''urlString'' 1) #(''postData'' 2) #(''cont...etc... startKeysToTempRefs: nil DebuggerMethodMapForClosureCompiledMethods>>tempNamesForContext: Receiver: a DebuggerMethodMapForClosureCompiledMethods Arguments and temporary variables: aContext: WebClient>>httpPut:content:type:do: Receiver''s instance variables: timestamp: 3692875391 methodReference: a WeakArray((WebClient>>#httpPut:content:type:do: "a CompiledMethod...etc... methodNode: httpPut: urlString content: postData type: contentType do: aBlock ...etc... abstractSourceRanges: a Dictionary(3->(120 to: 147) 7->(167 to: 191) 8->(159 to...etc... sortedSourceMap: nil blockExtentsToTempRefs: a Dictionary((0 to: 2)->#(#(''urlString'' 1) #(''postData''...etc... startpcsToTempRefs: a Dictionary(57->#(#(''urlString'' 1) #(''postData'' 2) #(''cont...etc... startKeysToTempRefs: nil Context>>tempNames Receiver: WebClient>>httpPut:content:type:do: Arguments and temporary variables: Receiver''s instance variables: sender: nil pc: nil stackp: 5 method: (WebClient>>#httpPut:content:type:do: "a CompiledMethod(1024334)") closureOrNil: nil receiver: WebClient(http://source.squeak.org) ContextVariablesInspector>>fieldList Receiver: a ContextVariablesInspector Arguments and temporary variables: Receiver''s instance variables: dependents: nil contents: '''' object: WebClient>>sendRequest:contentBlock: selectionIndex: 0 timeOfLastListUpdate: nil selectionUpdateTime: nil context: nil expression: nil fieldList: #(''thisContext'' ''stack top'' ''all temp vars'' ''request'' ''contentBlock''...etc... ContextVariablesInspector(Inspector)>>object: Receiver: a ContextVariablesInspector Arguments and temporary variables: anObject: WebClient>>httpPut:content:type:do: oldIndex: 0 Receiver''s instance variables: dependents: nil contents: '''' object: WebClient>>sendRequest:contentBlock: selectionIndex: 0 timeOfLastListUpdate: nil selectionUpdateTime: nil context: nil expression: nil fieldList: #(''thisContext'' ''stack top'' ''all temp vars'' ''request'' ''contentBlock''...etc... Debugger>>contextStackIndex:oldContextWas: Receiver: a Debugger Arguments and temporary variables: anInteger: 11 oldContext: nil isNewMethod: true selectedContextSlotName: nil index: nil Receiver''s instance variables: dependents: nil contents: a Text for ''upToAll: aStringOrByteArray "Answer a subcollection from...etc... currentCompiledMethod: (SocketStream>>#upToAll: "a CompiledMethod(2352982)") contentsSymbol: #source multiWindowState: nil interruptedProcess: nil interruptedController: nil contextStack: nil contextStackIndex: 7 contextStackList: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in Soc...etc... receiverInspector: nil contextVariablesInspector: nil externalInterrupt: false proceedValue: nil selectingPC: true savedCursor: ((CursorWithMask extent: 16@16 depth: 1 fromArray: #( 2r0 2...etc... isolationHead: nil failedProject: nil errorWasInUIProcess: true labelString: nil message: nil untilExpression: nil Debugger>>toggleContextStackIndex: Receiver: a Debugger Arguments and temporary variables: anInteger: 11 Receiver''s instance variables: dependents: nil contents: a Text for ''upToAll: aStringOrByteArray "Answer a subcollection from...etc... currentCompiledMethod: (SocketStream>>#upToAll: "a CompiledMethod(2352982)") contentsSymbol: #source multiWindowState: nil interruptedProcess: nil interruptedController: nil contextStack: nil contextStackIndex: 7 contextStackList: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in Soc...etc... receiverInspector: nil contextVariablesInspector: nil externalInterrupt: false proceedValue: nil selectingPC: true savedCursor: ((CursorWithMask extent: 16@16 depth: 1 fromArray: #( 2r0 2...etc... isolationHead: nil failedProject: nil errorWasInUIProcess: true labelString: nil message: nil untilExpression: nil Debugger>>debugAt: Receiver: a Debugger Arguments and temporary variables: anInteger: 11 Receiver''s instance variables: dependents: nil contents: a Text for ''upToAll: aStringOrByteArray "Answer a subcollection from...etc... currentCompiledMethod: (SocketStream>>#upToAll: "a CompiledMethod(2352982)") contentsSymbol: #source multiWindowState: nil interruptedProcess: nil interruptedController: nil contextStack: nil contextStackIndex: 7 contextStackList: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in Soc...etc... receiverInspector: nil contextVariablesInspector: nil externalInterrupt: false proceedValue: nil selectingPC: true savedCursor: ((CursorWithMask extent: 16@16 depth: 1 fromArray: #( 2r0 2...etc... isolationHead: nil failedProject: nil errorWasInUIProcess: true labelString: nil message: nil untilExpression: nil PluggableListMorphPlus(PluggableListMorph)>>changeModelSelection: Receiver: a PluggableListMorphPlus(2325224) Arguments and temporary variables: anInteger: 11 Receiver''s instance variables: bounds: 78@145 corner: 518@293 owner: a PluggableSystemWindow<ConnectionTimedOut: Data receive timed out.>(171...etc... submorphs: {a ScrollBar(1726779) . a TransformMorph(3314744)} fullBounds: 78@145 corner: 518@293 color: Color white extension: a MorphExtension (1629867) [balloonTextSelector: #messageHelpAt:] [...etc... borderWidth: 1 borderColor: (Color r: 0.6 g: 0.48 b: 0.48) model: a Debugger slotName: nil open: false scrollBar: a ScrollBar(1726779) scroller: a TransformMorph(3314744) retractableScrollBar: false scrollBarOnLeft: true getMenuSelector: nil getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(1593680) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 list: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in SocketStream>>w...etc... getListSelector: #contextStackList getListSizeSelector: nil getListElementSelector: nil getIndexSelector: #contextStackIndex setIndexSelector: #debugAt: keystrokeActionSelector: nil autoDeselect: true lastKeystrokeTime: 0 lastKeystrokes: '''' lastClickTime: nil doubleClickSelector: nil handlesBasicKeys: nil potentialDropRow: nil hoverRow: nil listMorph: a LazyListMorph(1068051) hScrollRangeCache: #(401 396 20 ''SocketStream>>signalTimeout'' ''[] in MorphicUIM...etc... keystrokePreviewSelector: nil priorSelection: nil getIconSelector: #messageIconAt: getHelpSelector: nil dragItemSelector: nil dropItemSelector: nil wantsDropSelector: nil dragTypeSelector: nil dragStartedSelector: nil PluggableListMorphPlus(PluggableListMorph)>>mouseUp: Receiver: a PluggableListMorphPlus(2325224) Arguments and temporary variables: event: [327@225 mouseUp ( red ) 173153907] row: 11 Receiver''s instance variables: bounds: 78@145 corner: 518@293 owner: a PluggableSystemWindow<ConnectionTimedOut: Data receive timed out.>(171...etc... submorphs: {a ScrollBar(1726779) . a TransformMorph(3314744)} fullBounds: 78@145 corner: 518@293 color: Color white extension: a MorphExtension (1629867) [balloonTextSelector: #messageHelpAt:] [...etc... borderWidth: 1 borderColor: (Color r: 0.6 g: 0.48 b: 0.48) model: a Debugger slotName: nil open: false scrollBar: a ScrollBar(1726779) scroller: a TransformMorph(3314744) retractableScrollBar: false scrollBarOnLeft: true getMenuSelector: nil getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(1593680) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 list: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in SocketStream>>w...etc... getListSelector: #contextStackList getListSizeSelector: nil getListElementSelector: nil getIndexSelector: #contextStackIndex setIndexSelector: #debugAt: keystrokeActionSelector: nil autoDeselect: true lastKeystrokeTime: 0 lastKeystrokes: '''' lastClickTime: nil doubleClickSelector: nil handlesBasicKeys: nil potentialDropRow: nil hoverRow: nil listMorph: a LazyListMorph(1068051) hScrollRangeCache: #(401 396 20 ''SocketStream>>signalTimeout'' ''[] in MorphicUIM...etc... keystrokePreviewSelector: nil priorSelection: nil getIconSelector: #messageIconAt: getHelpSelector: nil dragItemSelector: nil dropItemSelector: nil wantsDropSelector: nil dragTypeSelector: nil dragStartedSelector: nil PluggableListMorphPlus(Morph)>>handleMouseUp: Receiver: a PluggableListMorphPlus(2325224) Arguments and temporary variables: anEvent: [327@225 mouseUp ( red ) 173153907] Receiver''s instance variables: bounds: 78@145 corner: 518@293 owner: a PluggableSystemWindow<ConnectionTimedOut: Data receive timed out.>(171...etc... submorphs: {a ScrollBar(1726779) . a TransformMorph(3314744)} fullBounds: 78@145 corner: 518@293 color: Color white extension: a MorphExtension (1629867) [balloonTextSelector: #messageHelpAt:] [...etc... borderWidth: 1 borderColor: (Color r: 0.6 g: 0.48 b: 0.48) model: a Debugger slotName: nil open: false scrollBar: a ScrollBar(1726779) scroller: a TransformMorph(3314744) retractableScrollBar: false scrollBarOnLeft: true getMenuSelector: nil getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(1593680) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 list: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in SocketStream>>w...etc... getListSelector: #contextStackList getListSizeSelector: nil getListElementSelector: nil getIndexSelector: #contextStackIndex setIndexSelector: #debugAt: keystrokeActionSelector: nil autoDeselect: true lastKeystrokeTime: 0 lastKeystrokes: '''' lastClickTime: nil doubleClickSelector: nil handlesBasicKeys: nil potentialDropRow: nil hoverRow: nil listMorph: a LazyListMorph(1068051) hScrollRangeCache: #(401 396 20 ''SocketStream>>signalTimeout'' ''[] in MorphicUIM...etc... keystrokePreviewSelector: nil priorSelection: nil getIconSelector: #messageIconAt: getHelpSelector: nil dragItemSelector: nil dropItemSelector: nil wantsDropSelector: nil dragTypeSelector: nil dragStartedSelector: nil MouseButtonEvent>>sentTo: Receiver: [327@225 mouseUp ( red ) 173153907] Arguments and temporary variables: anObject: a PluggableListMorphPlus(2325224) Receiver''s instance variables: timeStamp: 173153907 source: a HandMorph(1832154) type: #mouseUp buttons: 0 position: 327@225 handler: nil wasHandled: true wasIgnored: false whichButton: 4 nClicks: 0 PluggableListMorphPlus(Morph)>>handleEvent: Receiver: a PluggableListMorphPlus(2325224) Arguments and temporary variables: anEvent: [327@225 mouseUp ( red ) 173153907] filteredEvent: [327@225 mouseUp ( red ) 173153907] Receiver''s instance variables: bounds: 78@145 corner: 518@293 owner: a PluggableSystemWindow<ConnectionTimedOut: Data receive timed out.>(171...etc... submorphs: {a ScrollBar(1726779) . a TransformMorph(3314744)} fullBounds: 78@145 corner: 518@293 color: Color white extension: a MorphExtension (1629867) [balloonTextSelector: #messageHelpAt:] [...etc... borderWidth: 1 borderColor: (Color r: 0.6 g: 0.48 b: 0.48) model: a Debugger slotName: nil open: false scrollBar: a ScrollBar(1726779) scroller: a TransformMorph(3314744) retractableScrollBar: false scrollBarOnLeft: true getMenuSelector: nil getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(1593680) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 list: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in SocketStream>>w...etc... getListSelector: #contextStackList getListSizeSelector: nil getListElementSelector: nil getIndexSelector: #contextStackIndex setIndexSelector: #debugAt: keystrokeActionSelector: nil autoDeselect: true lastKeystrokeTime: 0 lastKeystrokes: '''' lastClickTime: nil doubleClickSelector: nil handlesBasicKeys: nil potentialDropRow: nil hoverRow: nil listMorph: a LazyListMorph(1068051) hScrollRangeCache: #(401 396 20 ''SocketStream>>signalTimeout'' ''[] in MorphicUIM...etc... keystrokePreviewSelector: nil priorSelection: nil getIconSelector: #messageIconAt: getHelpSelector: nil dragItemSelector: nil dropItemSelector: nil wantsDropSelector: nil dragTypeSelector: nil dragStartedSelector: nil PluggableListMorphPlus(Morph)>>handleFocusEvent: Receiver: a PluggableListMorphPlus(2325224) Arguments and temporary variables: anEvent: [327@225 mouseUp ( red ) 173153907] Receiver''s instance variables: bounds: 78@145 corner: 518@293 owner: a PluggableSystemWindow<ConnectionTimedOut: Data receive timed out.>(171...etc... submorphs: {a ScrollBar(1726779) . a TransformMorph(3314744)} fullBounds: 78@145 corner: 518@293 color: Color white extension: a MorphExtension (1629867) [balloonTextSelector: #messageHelpAt:] [...etc... borderWidth: 1 borderColor: (Color r: 0.6 g: 0.48 b: 0.48) model: a Debugger slotName: nil open: false scrollBar: a ScrollBar(1726779) scroller: a TransformMorph(3314744) retractableScrollBar: false scrollBarOnLeft: true getMenuSelector: nil getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(1593680) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 list: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in SocketStream>>w...etc... getListSelector: #contextStackList getListSizeSelector: nil getListElementSelector: nil getIndexSelector: #contextStackIndex setIndexSelector: #debugAt: keystrokeActionSelector: nil autoDeselect: true lastKeystrokeTime: 0 lastKeystrokes: '''' lastClickTime: nil doubleClickSelector: nil handlesBasicKeys: nil potentialDropRow: nil hoverRow: nil listMorph: a LazyListMorph(1068051) hScrollRangeCache: #(401 396 20 ''SocketStream>>signalTimeout'' ''[] in MorphicUIM...etc... keystrokePreviewSelector: nil priorSelection: nil getIconSelector: #messageIconAt: getHelpSelector: nil dragItemSelector: nil dropItemSelector: nil wantsDropSelector: nil dragTypeSelector: nil dragStartedSelector: nil MorphicEventDispatcher>>doHandlingForFocusEvent:with: Receiver: a MorphicEventDispatcher Arguments and temporary variables: currentEvent: [327@225 mouseUp ( red ) 173153907] focusMorph: a PluggableListMorphPlus(2325224) localEvent: [327@225 mouseUp ( red ) 173153907] filteredEvent: nil Receiver''s instance variables: lastType: nil lastDispatch: nil MorphicEventDispatcher>>dispatchFocusEvent:with: Receiver: a MorphicEventDispatcher Arguments and temporary variables: anEventWithGlobalPosition: [327@225 mouseUp ( red ) 173153907] focusMorph: a PluggableListMorphPlus(2325224) currentEvent: [327@225 mouseUp ( red ) 173153907] Receiver''s instance variables: lastType: nil lastDispatch: nil PluggableListMorphPlus(Morph)>>processFocusEvent:using: Receiver: a PluggableListMorphPlus(2325224) Arguments and temporary variables: anEvent: [327@225 mouseUp ( red ) 173153907] defaultDispatcher: a MorphicEventDispatcher Receiver''s instance variables: bounds: 78@145 corner: 518@293 owner: a PluggableSystemWindow<ConnectionTimedOut: Data receive timed out.>(171...etc... submorphs: {a ScrollBar(1726779) . a TransformMorph(3314744)} fullBounds: 78@145 corner: 518@293 color: Color white extension: a MorphExtension (1629867) [balloonTextSelector: #messageHelpAt:] [...etc... borderWidth: 1 borderColor: (Color r: 0.6 g: 0.48 b: 0.48) model: a Debugger slotName: nil open: false scrollBar: a ScrollBar(1726779) scroller: a TransformMorph(3314744) retractableScrollBar: false scrollBarOnLeft: true getMenuSelector: nil getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(1593680) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 list: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in SocketStream>>w...etc... getListSelector: #contextStackList getListSizeSelector: nil getListElementSelector: nil getIndexSelector: #contextStackIndex setIndexSelector: #debugAt: keystrokeActionSelector: nil autoDeselect: true lastKeystrokeTime: 0 lastKeystrokes: '''' lastClickTime: nil doubleClickSelector: nil handlesBasicKeys: nil potentialDropRow: nil hoverRow: nil listMorph: a LazyListMorph(1068051) hScrollRangeCache: #(401 396 20 ''SocketStream>>signalTimeout'' ''[] in MorphicUIM...etc... keystrokePreviewSelector: nil priorSelection: nil getIconSelector: #messageIconAt: getHelpSelector: nil dragItemSelector: nil dropItemSelector: nil wantsDropSelector: nil dragTypeSelector: nil dragStartedSelector: nil PluggableListMorphPlus(Morph)>>processFocusEvent: Receiver: a PluggableListMorphPlus(2325224) Arguments and temporary variables: anEvent: [327@225 mouseUp ( red ) 173153907] Receiver''s instance variables: bounds: 78@145 corner: 518@293 owner: a PluggableSystemWindow<ConnectionTimedOut: Data receive timed out.>(171...etc... submorphs: {a ScrollBar(1726779) . a TransformMorph(3314744)} fullBounds: 78@145 corner: 518@293 color: Color white extension: a MorphExtension (1629867) [balloonTextSelector: #messageHelpAt:] [...etc... borderWidth: 1 borderColor: (Color r: 0.6 g: 0.48 b: 0.48) model: a Debugger slotName: nil open: false scrollBar: a ScrollBar(1726779) scroller: a TransformMorph(3314744) retractableScrollBar: false scrollBarOnLeft: true getMenuSelector: nil getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(1593680) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 list: an OrderedCollection(''SocketStream>>signalTimeout'' ''[] in SocketStream>>w...etc... getListSelector: #contextStackList getListSizeSelector: nil getListElementSelector: nil getIndexSelector: #contextStackIndex setIndexSelector: #debugAt: keystrokeActionSelector: nil autoDeselect: true lastKeystrokeTime: 0 lastKeystrokes: '''' lastClickTime: nil doubleClickSelector: nil handlesBasicKeys: nil potentialDropRow: nil hoverRow: nil listMorph: a LazyListMorph(1068051) hScrollRangeCache: #(401 396 20 ''SocketStream>>signalTimeout'' ''[] in MorphicUIM...etc... keystrokePreviewSelector: nil priorSelection: nil getIconSelector: #messageIconAt: getHelpSelector: nil dragItemSelector: nil dropItemSelector: nil wantsDropSelector: nil dragTypeSelector: nil dragStartedSelector: nil --- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #at:ifAbsentPut: DebuggerMethodMapForClosureCompiledMethods>>privateTempRefsForContext:startKeysToBlockExtents: DebuggerMethodMapForClosureCompiledMethods>>tempNamesForContext: Context>>tempNames ContextVariablesInspector>>fieldList ContextVariablesInspector(Inspector)>>object: Debugger>>contextStackIndex:oldContextWas: Debugger>>toggleContextStackIndex: Debugger>>debugAt: PluggableListMorphPlus(PluggableListMorph)>>changeModelSelection: PluggableListMorphPlus(PluggableListMorph)>>mouseUp: PluggableListMorphPlus(Morph)>>handleMouseUp: MouseButtonEvent>>sentTo: PluggableListMorphPlus(Morph)>>handleEvent: PluggableListMorphPlus(Morph)>>handleFocusEvent: MorphicEventDispatcher>>doHandlingForFocusEvent:with: MorphicEventDispatcher>>dispatchFocusEvent:with: PluggableListMorphPlus(Morph)>>processFocusEvent:using: PluggableListMorphPlus(Morph)>>processFocusEvent: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [] in [] in [] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>ensure: MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: [] in [] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>ensure: HandMorph>>becomeActiveDuring: [] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>ensure: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in MorphicProject>>spawnNewProcess [] in BlockClosure>>newProcess ' tim [1] a lesser Hell -- tim Rowledge; [hidden email]; http://www.rowledge.org/tim Useful Latin Phrases:- Re vera, potas bene = Say, you sure are drinking a lot. |
Free forum by Nabble | Edit this page |