Package com.adobe.xfa
Class Model
java.lang.Object
com.adobe.xfa.Obj
com.adobe.xfa.Node
com.adobe.xfa.Element
com.adobe.xfa.Model
- All Implemented Interfaces:
Element.DualDomNode,Peer
- Direct Known Subclasses:
AppModel,ConfigurationModel,ConnectionSetModel,DataModel,FormModel,LocaleSetModel,TemplateModel
An abstract class from which to derive all other models.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceA marker interface that indicates that a Model's contents are dual-DOM, as opposed to the model Element itself, which is always dual-DOM.static classNested classes/interfaces inherited from class com.adobe.xfa.Element
Element.DualDomNode, Element.ReplaceContentNested classes/interfaces inherited from class com.adobe.xfa.Node
Node.ChangeLogger -
Field Summary
Fields inherited from class com.adobe.xfa.Element
AttrIsDefault, AttrIsFragment, AttrIsTransient, CREATEACTIONFields inherited from class com.adobe.xfa.Node
CREATE_ALWAYS_NEW, CREATE_IF_NOT_EXIST, CREATE_MUST_NOT_EXIST, CREATE_REPLACE, gsXFANamespacePrefixFields inherited from interface com.adobe.xfa.ut.Peer
ATTR_CHANGED, CHILD_ADDED, CHILD_REMOVED, DESCENDENT_ADDED, DESCENDENT_ATTR_CHANGED, DESCENDENT_REMOVED, DESCENDENT_VALUE_CHANGED, PARENT_CHANGED, PERMS_LOCK_CLEARED, PERMS_LOCK_SET, PROTO_ATTR_CHANGED, PROTO_CHILD_ADDED, PROTO_CHILD_REMOVED, PROTO_DESCENDENT_ADDED, PROTO_DESCENDENT_ATTR_CHANGED, PROTO_DESCENDENT_REMOVED, PROTO_DESCENDENT_VALUE_CHANGED, PROTO_VALUE_CHANGED, UPDATED, VALUE_CHANGED -
Method Summary
Modifier and TypeMethodDescriptionfinal voidaddErrorList(ExFull error, int eSeverity, Element context) voidaddUseHRefNode(Element poUseHRefNode) add a new new node to the useNodeHrefListvoidaddUseNode(Element poUse) add a new new node to the useNodeListvoidaddXMLLoadErrorContext(Node oSrc, ExFull oEx) This method is called by derived classes to output the filename and line number when an error occurs during the load of an XML File.voidallowUpdates(boolean bAllowUpdates) Sets whether this model can be updated at runtime.static booleancheckforCompatibleNS(String aNS, String aModelNS) Helper function for isCompatibleNSvoidClears the model's current list of errors.final ElementcreateElement(int eTag, String name) Create an element with the given element tag and name.createElement(Element parent, Node prevSibling, String uri, String qName) Creates an element with the given parent, previous sibling, namespace uri and qualified name.createElement(Element parent, Node prevSibling, String uri, String localName, String qName, Attributes attributes, int lineNumber, String fileName) Creates an element with the given parent, sibling, namespace uri, local name and SAX attributes.createElement(String name) Creates an element with the given name.final ElementcreateElement(String className, String name, Element parent) Creates an element with the given class, name and parent.abstract NodecreateNode(int eTag, Element parent, String aName, String aNS, boolean bDoVersionCheck) Create an element with the given tag, parent, name and uri.final TextNodecreateTextNode(Element parent, Node prevSibling, char[] ch, int start, int length) final TextNodecreateTextNode(Element parent, Node prevSibling, String text) Creates a text node with the given text.booleandoAttributeCleanup(Node node, int eAttributeTag, String sAttrValue) Return TRUE if the given attribute can be removed, aka cleaned up from a given node.final ElementReturns the node that is represented by the alias for this model.booleanabstract Stringfinal NodeRetrieves the current node, which is the starting node for calls toresolveNode()andresolveNodes()intGets the current version of this model.final DocumentReturns this model's document.Gets all the context nodes that correspond to entries in the error list.Gets all the errors that have been generated by this model since the last method call to clear the error list.the EventManager manages xfe:script scripts and their associated events (ie.abstract StringintbooleangetLegacySetting(AppModel.LegacyMask nLegacyFlag) Gets the boolean value of a particular legacy setting.Retrieves the log messenger associated with this model.final StringgetName()Gets this element's name.booleanLook up an XFA ID.getNS()Gets this element's namespace.getOriginalVersion(boolean bDefault) getOriginalVersionNode(boolean bCreate, String sValue) Get the processing instruction that holds our version number.intKeep track of proto Nodes and 'use' tags for quick lookup later ourfinal SchemaReturn the schema definition for this model.intintgetVersion(String sNS) booleanisCompatibleNS(String aNS) Determine if a specified namespace string is compatible with the namespace of this model.final booleanCheck to see if this is a container object.final booleanbooleanisVersionCompatible(int nVersion, int nTargetVersion) voidbooleanbooleanloadSpecialAttribute(Attribute attr, String aLocalName, Element element, boolean bCheckOnly) loadSpecialAttribute should be called by the loadNode method.booleanloadSpecialNode(Element parent, Node node, boolean bCheckOnly) loadSpecialNode should be called by the loadNode method.voidmodelCleanup(Node node) voidnodeCleanup(Node pNode, boolean bHasAttrs, boolean bHasChildren) voidbooleannormalizeNameSpaces(int nTargetVersion, List<NodeValidationInfo> oResult) Walks through the XFA DOM and normalizes the namespaces of all the nodes.voidnormalizeNameSpaces(Element poNode, String aURI) Helper function for normalizeNameSpaces().preLoadNode(Element parent, Node node, Generator genTag) Preprocess the node.voidpreSave(boolean bSaveXMLScript) Prepares thisModelto be saved.booleanpublish(Model.Publisher publisher) Publish the model to an Application Storage facility.booleanready(boolean bForced) Indicates that the model is ready.intremapTag(int eTag) Remap a given tag to a new value.voidremove()Removes this node from its parent child list.final voidvoidremoveReferences(Node node) remove references to a given node.resolveNodes(String somNodes, boolean bPeek, boolean bLastInstance, boolean bNoProperties, DependencyTracker oDependencyTracker, BooleanHolder isAssociation) Evaluates the Scripting Object Model expression, using this node as the current context.voidresolveProtos(boolean bForceExternalProtoResolve) voidserialize(OutputStream outStream, DOMSaveOptions options, int level, Node prevSibling) The helper function used by saveXML()final voidsetAliasNode(Element aliasNode) Specify the node that is represented by the alias for this model.voidsetAppModel(AppModel pNewModel) voidsetAppModelIsTransient(boolean bAppModelIsTransient) voidsetContext(Node node) Specifies the current node, which is the starting node for calls to resolveNode and resolveNodes.voidsetCurrentVersion(int nVersion) final voidsetDOMProperties(String uri, String localName, String qName, Attributes attributes) All name properties (including those in attributes) must be interned strings.voidsetIDValueMap(IDValueMap idValueMap) final voidSet the name for this modelvoidsetNeedsNSNormalize(boolean bNormalize) voidsetOriginalXFAVersion(int nXFAVersion) voidsetXmlPeer(Node peer) booleanvalidateUsage(int nXFAVersion, int nAvailability, boolean bUpdateVersion) Validate if the given Version and Availability flags are valid for the current documentbooleanvalidateUsageFailedIsFatal(int nXFAVersion, int nAvailability) Determines if disallowing a version should be considered a fatal error.booleanvoidwillDirtyDoc(boolean bWillDirty) Methods inherited from class com.adobe.xfa.Element
appendChild, appendChild, appendPI, appendPI, assignNode, clone, connectPeerToDocument, constructKey, constructKeys, copyContent, defaultAttribute, defaultElement, defaultElement, establishID, evaluate, explodeQName, findAttr, findSchemaAttr, foundBadAttribute, foundBadAttribute, getAll, getAtom, getAttr, getAttribute, getAttribute, getAttributeByName, getAttrIndex, getAttrName, getAttrNS, getAttrProp, getAttrQName, getAttrVal, getChildReln, getClassAll, getClassIndex, getClassName, getDeltas, getElement, getElement, getElementClass, getElementLocal, getEnum, getEnum, getEventTable, getFirstXFAChild, getFirstXMLChild, getID, getIndex, getInheritedNS, getInstalledLocale, getIsNull, getLastXMLChild, getLineNumber, getLocalName, getModel, getNode, getNodes, getNodeSchema, getNumAttrs, getOneOfChild, getOneOfChild, getPI, getPI, getPrefix, getProperty, getProperty, getSaveXMLSaveTransient, getSchemaType, getScriptMethodInfo, getSibling, getText, getXFAChild, getXMLChild, getXMLName, getXPath, getXsiNilAttribute, inhibitPrettyPrint, inhibitPrettyPrint, insertChild, isFragment, isHidden, isHidden, isIndexed, isInstalledLocaleAmbient, isLeaf, isNameSpaceAttr, isPropertySpecified, isPropertySpecified, isPropertyValid, isSpecified, isSpecified, isSpecified, isTransient, isTransparent, isValidAttr, isValidChild, isValidElement, loadXML, loadXML, makeDefault, makeNonDefault, newAttribute, optimizeNameSpace, peekAttribute, peekElement, peekOneOfChild, peekProperty, peekProperty, postSave, privateSetName, processTextChildrenDuringParse, removeAttr, removeAttr, removeChild, removePI, removePI, removeWhiteSpace, removeXsiNilAttribute, replaceChild, resetPostLoadXML, resolveAndEnumerateChildren, resolveNodeCreate, resolvePrefix, saveFilteredXML, saveXML, saveXML, setAttribute, setAttribute, setAttribute, setAttribute, setAttrProp, setDefaultFlag, setElement, setIsDataWindowRoot, setIsIndexed, setLineNumber, setLocalName, setModel, setNS, setOneOfChild, setProperty, setProperty, setQName, setSaveXMLSaveTransient, setTransparent, setXMLName, setXsiNilAttribute, updateFromPeerMethods inherited from class com.adobe.xfa.Node
checkAncestorPerms, checkDescendentPerms, checkPerms, cleanDirtyFlags, compareVersions, getData, getFirstXMLChildElement, getLocked, getNextXFASibling, getNextXMLSibling, getNextXMLSiblingElement, getNodeAsXML, getOwnerDocument, getPIAsXML, getPIName, getPreviousXMLSibling, getPrivateName, getPropName, getSOMExpression, getSOMExpression, getSomName, getUniqueSOMName, getWillDirty, getXFAChildCount, getXFAParent, getXfaPeer, getXMLChildCount, getXMLParent, hasChanged, isDefault, isDirty, isMapped, isPermsLockSet, isTransient, locateChildByClass, locateChildByName, logValueChangeHelper, notifyPeers, performSOMAssignment, resolveNode, resolveNode, resolveNode, resolveNodes, sendMessenge, setDirty, setDocument, setLocked, setMapped, setPermsLock, setPrivateName, setWillDirty, setXfaPeer, unLock, validateSchemaMethods inherited from class com.adobe.xfa.Obj
addPeer, addPeeredNode, clearPeers, deafen, getClassAtom, getClassTag, getPeer, getScriptProperty, getScriptThis, invokeFunction, isDeaf, isMute, isSameClass, isSameClass, isSameClass, mute, peerRemoved, removePeer, removePeeredNode, setClass, setClassTag, setScriptProperty, unDeafen, unMute
-
Method Details
-
checkforCompatibleNS
Helper function for isCompatibleNS- Parameters:
aNS- - namespace of node being checkedaModelNS- - namespace of model being checked against.
-
getScriptTable
- Overrides:
getScriptTablein classElement
-
addErrorList
-
removeLastError
public final void removeLastError() -
addUseHRefNode
add a new new node to the useNodeHrefList -
addUseNode
add a new new node to the useNodeList -
addXMLLoadErrorContext
This method is called by derived classes to output the filename and line number when an error occurs during the load of an XML File. -
allowUpdates
public void allowUpdates(boolean bAllowUpdates) Sets whether this model can be updated at runtime. This should only betruefor Designer.- Parameters:
bAllowUpdates- -trueif this model can be modified at runtime, otherwisefalse.
-
clearErrorList
public void clearErrorList()Clears the model's current list of errors. -
clone
-
createElement
Creates an element with the given parent, previous sibling, namespace uri and qualified name.- Parameters:
parent- the element's parent, if any.prevSibling- the element's previous sibling, if any.uri- the element's namespace URI. This string must be interned.qName- the element's qualified name. This string must be interned.- Returns:
- a new element conformant to our schema.
-
createElement
public Element createElement(Element parent, Node prevSibling, String uri, String localName, String qName, Attributes attributes, int lineNumber, String fileName) Creates an element with the given parent, sibling, namespace uri, local name and SAX attributes.- Parameters:
parent- the element's parent, if any.prevSibling- the element's previous sibling, if any.uri- the element's namespace. This string must be interned.localName- the element's name. This string must be interned.qName- the element's qualified name. This string must be interned.attributes- the element's (SAX) attribute definitions.- Returns:
- a new element conformant to our schema.
-
createElement
Create an element with the given element tag and name.- Parameters:
eTag- the element's tag.name- the element's name, if known. This string must be interned.- Returns:
- a new element conformant to the XFA schema.
-
createElement
Creates an element with the given class, name and parent.- Parameters:
className- the element's class name. This string must be interned.name- the element's name, if known. This string must be interned.parent- the element's parent.- Returns:
- a new element conformant to the XFA schema.
-
createElement
Creates an element with the given name.- Parameters:
name- the element's name. This string must be interned.- Returns:
- a new element conformant to our schema.
-
createNode
public abstract Node createNode(int eTag, Element parent, String aName, String aNS, boolean bDoVersionCheck) Create an element with the given tag, parent, name and uri.- Parameters:
eTag- the element's tag.parent- the element's parent.aName- the element's name.aNS- the element's namespace.bDoVersionCheck- check the element's version.- Returns:
- a new element.
-
createTextNode
-
createTextNode
Creates a text node with the given text.- Parameters:
parent- the node's parent, if any.prevSibling- the node's previous sibling, if any.text- the node's text.- Returns:
- a new node conformant to our schema.
-
getAliasNode
Returns the node that is represented by the alias for this model. The returned model is normally the model itself, but not always. For example, while $template refers to the template model, by default, $data refers to the first child of the data model.- Returns:
- an Node that corresponds to the alias for this model.
-
getAppModel
- Overrides:
getAppModelin classElement
-
getAppModelIsTransient
public boolean getAppModelIsTransient() -
getBaseNS
-
getCachedLocale
-
getContext
Retrieves the current node, which is the starting node for calls toresolveNode()andresolveNodes()- Returns:
- The current node.
-
getCurrentVersion
public int getCurrentVersion()Gets the current version of this model.- Returns:
- the version number (times 10).
-
getDeltas
-
getDocument
Returns this model's document.- Returns:
- the document node.
-
getDelta
-
getErrorContextList
Gets all the context nodes that correspond to entries in the error list.- Returns:
- A list of Element objects where the load discovered a problem.
-
getErrorList
Gets all the errors that have been generated by this model since the last method call to clear the error list. Note that these are not fatal errors. They are typically syntax problems discovered when loading the collateral. Some applications may choose to sift through the list and stop processing if they recognize specific problems. However most applications should simply dump the messages into the log file and continue processing. i.e. treat this as a list of warnings.- Returns:
- the current list of
ExFullerror objects.
-
getEventManager
the EventManager manages xfe:script scripts and their associated events (ie. events that cause the scripts to execute) -
getGenerator
-
getHeadNS
-
getHeadVersion
public int getHeadVersion() -
getIDValueMap
-
getLegacySetting
Gets the boolean value of a particular legacy setting.- Parameters:
nLegacyFlag- the specific legacy setting to check- Returns:
trueif the legacy setting is set, or is the default the original version.
-
getLogMessenger
Retrieves the log messenger associated with this model.- Returns:
- The log messenger.
-
getName
Description copied from class:ElementGets this element's name.The name of an element is the value of its name attribute, or the element name if there is no name attribute.
-
getNeedsNSNormalize
public boolean getNeedsNSNormalize() -
getNode
Look up an XFA ID. Since XFA IDs are only guaranteed to be unique within the scope of their model (to prevent conflicts with customer-controlled data), the lookup is done by namespace.Note: jfDomDocument::getElementByXFAId handles the conversion of versioned model namespace strings to unversioned ones.
- Parameters:
aID- The node id- Returns:
- The node if found, null if not found.
-
getNS
Description copied from class:ElementGets this element's namespace. -
getOriginalVersion
-
getOriginalVersionNode
Get the processing instruction that holds our version number.- Parameters:
bCreate- - if true, create the PI if it doesn't existsValue- - the value to use for the PI if we create it- Returns:
- the version node PI
-
getProtoList
Keep track of proto Nodes and 'use' tags for quick lookup later our- Returns:
- our list of protos
-
getSchema
Return the schema definition for this model.- Returns:
- a class derived from Schema
-
getSourceBelow
public int getSourceBelow() -
getVersion
-
setXmlPeer
- Specified by:
setXmlPeerin interfaceElement.DualDomNode
-
getXmlPeer
- Specified by:
getXmlPeerin interfaceElement.DualDomNode
-
isCompatibleNS
Determine if a specified namespace string is compatible with the namespace of this model. Essentially this determines if the two namespaces are equivalent (though the strings that represent them may not be identical).- Parameters:
aNS- The namespace to compare.
-
isContainer
public final boolean isContainer()Description copied from class:NodeCheck to see if this is a container object. A container is defined as something that is not a leaf node not properties ( [0..1] occurrences ). It does NOT indicate whether this node derives from XFAContainer- Overrides:
isContainerin classElement- Returns:
- true if this node is a container, false otherwise
-
isLoading
public final boolean isLoading() -
isVersionCompatible
public boolean isVersionCompatible(int nVersion, int nTargetVersion) -
loadNode
-
loadSpecialAttribute
public boolean loadSpecialAttribute(Attribute attr, String aLocalName, Element element, boolean bCheckOnly) loadSpecialAttribute should be called by the loadNode method. It scans for special attributes. Currently it only looks for event-related attributes (for automatic execution of script). The bCheckOnly flag can be set to TRUE to cause this routine to do nothing except return whether or not the attribute would be handled.- Returns:
trueif the attribute is handled
-
loadSpecialNode
loadSpecialNode should be called by the loadNode method. It checks for special nodes. Currently it only looks for event-related nodes (for automatic execution of script).- Returns:
trueif the node is handled
-
loadRootAttributes
public boolean loadRootAttributes() -
modelCleanup
-
nodeCleanup
-
doAttributeCleanup
Return TRUE if the given attribute can be removed, aka cleaned up from a given node. Return FALSE otherwise. -
normalizeNameSpaces
public void normalizeNameSpaces() -
normalizeNameSpaces
Helper function for normalizeNameSpaces().- Parameters:
poNode- the node to normalize.aURI- the new namespace.
-
normalizeNameSpaces
Walks through the XFA DOM and normalizes the namespaces of all the nodes.- Parameters:
nTargetVersion- the version of the schema desired. One ofXFAVERSION_10, ...XFAVERSION_HEAD.oResult- a list ofNodeValidationInfoobjects: invalid children, attributes and attribute values based upon the target version. If this model is not a valid child of its parent, this model will be the first entry of oResult. If oResult is not null, this method will ensure all child nodes attributes and attribute values are valid for given the target version.- Returns:
- true if successful, else false.
-
preLoadNode
Preprocess the node. The node may be removed.- Returns:
- the next XML sibling to be processed, or
nullif all siblings have been processed.
-
preSave
public void preSave(boolean bSaveXMLScript) Prepares thisModelto be saved. Any model maintenance that may have been deferred is performed to ensure that the serialized form of theModelis correct. This method is called automatically before aModelis serialized to a stream, so it does not normally need to be called directly. The exception is when aDocumentis saved usingDocument.saveAs(java.io.OutputStream, Node, DOMSaveOptions)orDocument.saveXML(java.io.OutputStream, DOMSaveOptions). -
publish
Publish the model to an Application Storage facility. This involves updating all external references (such as image hrefs) such that they point to local collateral. The actual details of this are left up to the implementer of the class derived from Model.Publisher specified in the oPublisher parameter. What publish() itself does is recursively traverse the tree structure of the model. When an external reference is encountered (for example, the href attribute of an image node), the updateExternalRef() method is called. The node, attribute identifier and original value of the external reference are passed to updateExternalRef(). The derived class should copy the collateral to the application storage area (if desired), and should update the value of sExternalRefValue to indicate the new value for the external reference (probably some sort of relative path). If an external reference stored as an element value (for example, a uri node) is encountered, updateExternalRef is called with node and the eAttribute arg is set to XFA.TEXTNODETAG. Two or more instances of an identical external reference result in only one call to updateExternalRef(), because returned values are cached and reused. If called on the AppModel, this method recursively calls publish on all contained models.- Parameters:
publisher- an instance of a class derived from TemplateModel.Publisher.
-
ready
public boolean ready(boolean bForced) Indicates that the model is ready. This causes the "ready" event to be issued so that script waiting on that event will execute. When applied to anAppModel, this call recursively callsready()on each child model (as a convenience). Some applications may choose to call theready()on each model individually. Callingready()a second time on a given model has no effect.- Returns:
trueif ready scripts fire
-
remove
public void remove()Description copied from class:NodeRemoves this node from its parent child list. -
removeReferences
remove references to a given node. -
remapTag
public int remapTag(int eTag) Remap a given tag to a new value. This gives a model a chance to remap a tag to a new value after it's determined that the original wasn't valid in the current context. The default implementation returns the input tag, which is a no-op.- Parameters:
eTag- the original input tag.- Returns:
- the new remapped tag.
-
resolveNodes
public NodeList resolveNodes(String somNodes, boolean bPeek, boolean bLastInstance, boolean bNoProperties, DependencyTracker oDependencyTracker, BooleanHolder isAssociation) Description copied from class:NodeEvaluates the Scripting Object Model expression, using this node as the current context.- Overrides:
resolveNodesin classNode- See Also:
-
resolveProtos
public void resolveProtos(boolean bForceExternalProtoResolve) -
serialize
public void serialize(OutputStream outStream, DOMSaveOptions options, int level, Node prevSibling) throws IOException, IOException Description copied from class:NodeThe helper function used by saveXML()- Overrides:
serializein classElement- Parameters:
outStream- Streamfile to write tooptions- save optionslevel- the indent levelprevSibling- our previous sibling -- needed for some markup options.- Throws:
IOException- See Also:
-
setAliasNode
Specify the node that is represented by the alias for this model.- Parameters:
aliasNode- The node that will represent this model.
-
setAppModel
- Parameters:
pNewModel-
-
setAppModelIsTransient
public void setAppModelIsTransient(boolean bAppModelIsTransient) -
setContext
Specifies the current node, which is the starting node for calls to resolveNode and resolveNodes.- Parameters:
node- the new current node.resolveNodeandresolveNodesdiffer fromNode.resolveNode()andNode.resolveNodes()in that the current node is the node set viasetContext(), instead of "this" node.
-
setCurrentVersion
public void setCurrentVersion(int nVersion) -
setDOMProperties
public final void setDOMProperties(String uri, String localName, String qName, Attributes attributes) Description copied from class:ElementAll name properties (including those in attributes) must be interned strings.- Overrides:
setDOMPropertiesin classElement- See Also:
-
setIDValueMap
-
setName
Set the name for this model -
setNeedsNSNormalize
public void setNeedsNSNormalize(boolean bNormalize) -
shortCutName
-
validateUsage
public boolean validateUsage(int nXFAVersion, int nAvailability, boolean bUpdateVersion) Description copied from class:ObjValidate if the given Version and Availability flags are valid for the current document- Overrides:
validateUsagein classNode- Parameters:
nXFAVersion- The target XFA VersionnAvailability- The target Availability flags, this indicates for what clients the script is availablebUpdateVersion- indicates if the model version can be updated by the calling code- Returns:
- if true, Version and Availability flags are valid
- See Also:
-
validateUsageFailedIsFatal
public boolean validateUsageFailedIsFatal(int nXFAVersion, int nAvailability) Description copied from class:ObjDetermines if disallowing a version should be considered a fatal error.This method is called after calling
Obj.validateUsage(int, int, boolean)when that method returns false.- Overrides:
validateUsageFailedIsFatalin classNode- Parameters:
nXFAVersion- The target XFA VersionnAvailability- The target Availability flags, this indicates for what clients the script is available- Returns:
- true if disallowing nVersion should be considered a fatal error
- See Also:
-
willDirtyDoc
public void willDirtyDoc(boolean bWillDirty) -
willDirtyDoc
public boolean willDirtyDoc() -
getOriginalXFAVersion
public int getOriginalXFAVersion() -
setOriginalXFAVersion
public void setOriginalXFAVersion(int nXFAVersion)
-