#####################################################################
#####################################################################
## Versavant Topic Map Application Bus / Subject Addressing Engine ##
## Copyright 2005 Steven R. Newcomb                                ##
##                                                                 ##
## This software is licensed under the Apache License, Version 2.0 ##
## (the "License"); you may not use this file except in compliance ##
## with the License.  Copies of the License are available at       ##
##        http://www.apache.org/licenses/LICENSE-2.0               ##
##                                                                 ##
## Unless required by applicable law or agreed to in writing,      ##
## software distributed under the License is distributed on an "AS ##
## IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either ##
## express or implied.  See the License for the specific language  ##
## governing permissions and limitations under the License.        ##
##                                                                 ##
## Copies of the source code and the license are available at      ##
##        http://www.versavant.org                                 ##
#####################################################################
#####################################################################

####################################
cvsRevision = "$Revision: 1.10 $" ##
####################################

import sys, os, os.path


################################################
##  topicMap property implementation  ##
################################################

#######################################################
def Add_topicMap_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    if overheadDict.has_key( propertyInstance._value):
        overheadDict[ propertyInstance._value].append( propertyInstance)
    else:
        overheadDict[ propertyInstance._value] = [ propertyInstance]

    propertyInstance.topicMap.topicMapProxies.append( propertyInstance.proxy)
    propertyInstance.topicMap.topicMapProxyIds.append( propertyInstance.proxyId)

    if not vsv.topicMapProxies.has_key( propertyInstance.topicMapName):
        vsv.topicMapProxyIds[ propertyInstance.topicMapName] = propertyInstance.topicMap.topicMapProxyIds
        vsv.topicMapProxies[ propertyInstance.topicMapName] = propertyInstance.topicMap.topicMapProxies

#######################################################
def Remove_topicMap_PropFromOverheadDict(vsv, propertyInstance, overheadDict):
    overheadDict[ propertyInstance._value].remove( propertyInstance)
    if not len( overheadDict[ propertyInstance._value]):
        del overheadDict[ propertyInstance._value]

#######################################################
def ValueIsInvalidFor_topicMap_Property(vsv, propertyValue, propertyClass, propertyInstance = None):
    return False
    
#######################################################
def Merge_topicMap_PropertyValues(vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_topicMap_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_topicMap_PropertyIsInvalid( vsv, propertyInstance):
    return ''

#######################################################
def MergeProxiesBecause_topicMap_PropertyInstancesSpecifySameSubject( vsv, propertyClass):
    for key in propertyClass.overheadDict:
        if len( propertyClass.overheadDict[ key]) > 1:
            vsv.mergeListOfProxies( propertyClass, propertyClass.overheadDict[ key])

#######################################################
def ProxiesOfSubjectIdentifiedBy_topicMap_Value( vsv, propertyClass, value):
    if propertyClass.overheadDict.has_key( value):
        return propertyClass.overheadDict[ value]
    else:
        return []

####################################################
##  TMAProxies property implementation  ##
####################################################

#######################################################
def Add_TMAProxies_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_TMAProxies_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_TMAProxies_Property(vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_TMAProxies_PropertyValues(vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_TMAProxies_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_TMAProxies_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################
##  TMDesc property implementation  ##
###########################################

#######################################################
def Add_TMDesc_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_TMDesc_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_TMDesc_Property(vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_TMDesc_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_TMDesc_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_TMDesc_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###############################################
## origPopTasks PC implementation ##
###############################################

#######################################################
def Add_origPopTasks_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_origPopTasks_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_origPopTasks_Property(vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_origPopTasks_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_origPopTasks_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_origPopTasks_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##############################################
##  TMObj property implementation  ##
##############################################

#######################################################
def Add_TMObj_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_TMObj_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_TMObj_Property(vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_TMObj_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_TMObj_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_TMObj_PropertyIsInvalid( vsv, propertyInstance):
    return ''


######################################################
##  TMProcOps property implementation  ##
######################################################

#######################################################
def Add_TMProcOps_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_TMProcOps_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_TMProcOps_Property(vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_TMProcOps_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_TMProcOps_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_TMProcOps_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################################################
## TMAName (SIP of TMA proxies) implementation ##
#################################################################

#######################################################
def Add_TMAName_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    if overheadDict.has_key( propertyInstance._value):
        overheadDict[ propertyInstance._value].append( propertyInstance)
    else:
        overheadDict[ propertyInstance._value] = [ propertyInstance]
    propertyInstance.hashablePropertyValue = propertyInstance._value

    TMAName = propertyInstance._value

    topicMap = propertyInstance.topicMap
    proxy = propertyInstance.proxy

    if not topicMap.TMAs.has_key( TMAName):
        propertyInstance.proxy.propertyInstances[ topicMap.opc_system_TMAObject_TMAName_PNK]._value = \
        topicMap.TMAs[ TMAName] = TMA = vsv.TMA(
            vsv,
            topicMap,
            TMAName,  ## the TMA name
            proxy.propertyInstances[ topicMap.opc_system_TMADesc_TMAName_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_tmaConfigFilePath_TMAName_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_pythonModules_TMAName_PNK]._value
            )

        propertyInstance.proxy.propertyInstances[ topicMap.opc_system_propertyClasses_TMAName_PNK]._value = TMA.propertyClasses
        propertyInstance.proxy.propertyInstances[ topicMap.opc_system_valueTypes_TMAName_PNK]._value = TMA.valueTypes
        propertyInstance.proxy.propertyInstances[ topicMap.opc_system_conferralRules_TMAName_PNK]._value = TMA.conferralRules

        TMA.TMAProxies = [ proxy]
        TMA.TMAProxyIds = [ proxy.proxyId]
        for topicMapProxyId in topicMap.topicMapProxyIds:    ## semi-ugly solution to a truly ugly bootstrap problem
            vsv.proxies[ topicMapProxyId].propertyInstances[ topicMap.opc_system_TMAProxies_topicMap_PNK]._value[ TMAName] = TMA.TMAProxyIds

    else:
        TMA = topicMap.TMAs[ TMAName]

        if proxy not in TMA.TMAProxies:
            TMA.TMAProxies.append( proxy)

        if proxy.proxyId not in TMA.TMAProxyIds:
            TMA.TMAProxyIds.append( proxy.proxyId)

#######################################################
def Remove_TMAName_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    overheadDict[ propertyInstance._value].remove( propertyInstance)
    if not len( overheadDict[ propertyInstance._value]):
        del overheadDict[ propertyInstance._value]

#######################################################
def ValueIsInvalidFor_TMAName_Property(vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_TMAName_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.


#######################################################
def ValuesOf_TMAName_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_TMAName_PropertyIsInvalid( vsv, propertyInstance):
    return ''

#######################################################
def MergeProxiesBecause_TMAName_PropertyInstancesSpecifySameSubject( vsv, propertyClass):
    for key in propertyClass.overheadDict:
        if len( propertyClass.overheadDict[ key]) > 1:
            vsv.mergeListOfProxies( propertyClass, propertyClass.overheadDict[ key])

#######################################################
def ProxiesOfSubjectIdentifiedBy_TMAName_Value( vsv, propertyClass, value):
    if propertyClass.overheadDict.has_key( value):
        return propertyClass.overheadDict[ value]
    else:
        return []

#########################################
## TMAConfFile PC implementation ##
#########################################

#######################################################
def Add_TMAConfFile_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_TMAConfFile_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_TMAConfFile_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_TMAConfFile_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_TMAConfFile_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_TMAConfFile_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################
##  TMADesc property implementation  ##
###########################################

#######################################################
def Add_TMADesc_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_TMADesc_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_TMADesc_Property(vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_TMADesc_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_TMADesc_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_TMADesc_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##################################
## valueTypes PC implementation ##
##################################

#######################################################
def Add_valueTypes_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_valueTypes_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_valueTypes_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_valueTypes_PropertyValues( vsv, value1, value2, **args):
    return merge_PCVTCRdict_ValueType_PropertyValues( vsv, value1, value2, args, 'valueTypes')

#######################################################
def ValuesOf_valueTypes_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_valueTypes_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#######################################
## propClasses PC implementation ##
#######################################

#######################################################
def Add_propClasses_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_propClasses_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_propClasses_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_propClasses_PropertyValues( vsv, value1, value2, **args):
    return merge_PCVTCRdict_ValueType_PropertyValues( vsv, value1, value2, args, 'propertyClasses')

#######################################################
def ValuesOf_propClasses_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_propClasses_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################
## propClassSeq PC implementation ##
#############################################

#######################################################
def Add_propClassSeq_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_propClassSeq_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_propClassSeq_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_propClassSeq_PropertyValues( vsv, value1, value2, idOfCanonicalPropertyClassSequence):
    v1 = value1[:]
    v2 = value2[:]
    v1.sort()
    v2.sort()
    if not cmp( repr( v1), repr( v2)):
        if id( value1) == idOfCanonicalPropertyClassSequence:
            return value1
        elif id( value2) == idOfCanonicalPropertyClassSequence:
            return value2
        else:
            vsv.errMsg( 'neither value was canonical!')
            return None  ## the merge failed.
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_propClassSeq_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_propClassSeq_PropertyIsInvalid( vsv, propertyInstance):
    return ''


######################################
## confRules PC implementation ##
######################################

#######################################################
def Add_confRules_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_confRules_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_confRules_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRules_PropertyValues( vsv, value1, value2, **args):
    return merge_PCVTCRdict_ValueType_PropertyValues( vsv, value1, value2, args, 'conferralRules')

#######################################################
def ValuesOf_confRules_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRules_PropertyIsInvalid( vsv, propertyInstance):
    return ''


######################################
## pythonModules PC implementation ##
######################################

#######################################################
def Add_pythonModules_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass

#######################################################
def Remove_pythonModules_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_pythonModules_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_pythonModules_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1  ## the merge succeeded
    else:
        for moduleName in value1:
            if not value2.has_key( moduleName):
                return None  ## the merge failed.
            if value1[ moduleName] != value2[ moduleName]:
                return None  ## the merge failed.
        for moduleName in value2:
            if not value1.has_key( moduleName):
                return None  ## the merge failed.
        return value1  ## the merge succeeded

#######################################################
def ValuesOf_pythonModules_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_pythonModules_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################
## TMAObj PC implementation ##
###########################################

#######################################################
def Add_TMAObj_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_TMAObj_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_TMAObj_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_TMAObj_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
###
        vsv.dbgMsg( 'id(value1)=%x  id(value2)=%x' % ( id(value1), id(value2)))
###        
        return None  ## the merge failed.

#######################################################
def ValuesOf_TMAObj_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_TMAObj_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################
## valueType PC implementation ##
#################################

#######################################################
def Add_valueType_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    if overheadDict.has_key( propertyInstance._value):
        overheadDict[ propertyInstance._value].append( propertyInstance)
    else:
        overheadDict[ propertyInstance._value] = [ propertyInstance]
    propertyInstance.hashablePropertyValue = propertyInstance._value

    TMAName, valueTypeName = vsv.parsePropertyKey2( propertyInstance._value)

    topicMap = propertyInstance.topicMap
    TMA = topicMap.TMAs[ TMAName]
    proxy = propertyInstance.proxy

    if proxy.propertyInstances.has_key( topicMap.opc_system_VTDesc_valueType_PNK):
        VTDesc = proxy.propertyInstances[ topicMap.opc_system_VTDesc_valueType_PNK]._value
    else:
        VTDesc = ''

    if not TMA.valueTypes.has_key( valueTypeName):
        TMA.valueTypes[ valueTypeName] = valueTypeObject = vsv.ValueType(
            vsv,
            topicMap,
            TMA,
            valueTypeName,  ## the value type name
            VTDesc,

            proxy.propertyInstances[ topicMap.opc_system_ValueIsNotOfType__FMF_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_ValueIsNotOfType__FMN_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_ValueIsNotOfType__FN_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_ValueIsNotOfType__F_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_ValueIsNotOfType__FArgString_valueType_PNK]._value,

            proxy.propertyInstances[ topicMap.opc_system_InstanceOf__ValueTypeToXMLContentStringFMF_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_InstanceOf__ValueTypeToXMLContentStringFMN_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_InstanceOf__ValueTypeToXMLContentStringFN_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_InstanceOf__ValueTypeToXMLContentStringF_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_InstanceOf__ValueTypeToXMLContentStringFArgString_valueType_PNK]._value,

            proxy.propertyInstances[ topicMap.opc_system_XMLContentStringToInstanceOf__ValueTypeFMF_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_XMLContentStringToInstanceOf__ValueTypeFMN_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_XMLContentStringToInstanceOf__ValueTypeFN_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_XMLContentStringToInstanceOf__ValueTypeF_valueType_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_XMLContentStringToInstanceOf__ValueTypeFArgString_valueType_PNK]._value

            )

        valueTypeObject.valueTypeProxies = [ proxy]
        valueTypeObject.valueTypeProxyIds = [ proxy.proxyId]

    else:
        valueTypeObject = TMA.valueTypes[ valueTypeName]

        if proxy not in valueTypeObject.valueTypeProxies:
            valueTypeObject.valueTypeProxies.append( proxy)

        if proxy.proxyId not in valueTypeObject.valueTypeProxyIds:
            valueTypeObject.valueTypeProxyIds.append( proxy.proxyId)

#######################################################
def Remove_valueType_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    overheadDict[ propertyInstance._value].remove( propertyInstance)
    if not len( overheadDict[ propertyInstance._value]):
        del overheadDict[ propertyInstance._value]

#######################################################
def ValueIsInvalidFor_valueType_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_valueType_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_valueType_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_valueType_PropertyIsInvalid( vsv, propertyInstance):
    return ''

#######################################################
def MergeProxiesBecause_valueType_PropertyInstancesSpecifySameSubject( vsv, propertyClass):
    for key in propertyClass.overheadDict:
        if len( propertyClass.overheadDict[ key]) > 1:
            vsv.mergeListOfProxies( propertyClass, propertyClass.overheadDict[ key])

#######################################################
def ProxiesOfSubjectIdentifiedBy_valueType_Value( vsv, propertyClass, value):
    if propertyClass.overheadDict.has_key( value):
        return propertyClass.overheadDict[ value]
    else:
        return []

################################################
## VTTMAName PC implementation ##
################################################

#######################################################
def Add_VTTMAName_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_VTTMAName_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_VTTMAName_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_VTTMAName_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_VTTMAName_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_VTTMAName_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#####################################
## VTName PC implementation ##
#####################################

#######################################################
def Add_VTName_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_VTName_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_VTName_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_VTName_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_VTName_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_VTName_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#####################################
## VTDesc PC implementation ##
#####################################

#######################################################
def Add_VTDesc_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_VTDesc_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_VTDesc_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_VTDesc_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_VTDesc_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_VTDesc_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################
## ValueIsNotOfType__FMF PC implementation ##
#############################################

#######################################################
def Add_ValueIsNotOfType__FMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsNotOfType__FMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsNotOfType__FMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsNotOfType__FMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsNotOfType__FMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsNotOfType__FMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################
## ValueIsNotOfType__FMN PC implementation ##
#############################################

#######################################################
def Add_ValueIsNotOfType__FMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsNotOfType__FMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsNotOfType__FMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsNotOfType__FMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsNotOfType__FMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsNotOfType__FMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


############################################
## ValueIsNotOfType__FN PC implementation ##
############################################

#######################################################
def Add_ValueIsNotOfType__FN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsNotOfType__FN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsNotOfType__FN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsNotOfType__FN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsNotOfType__FN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsNotOfType__FN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################
## ValueIsNotOfType__F PC implementation ##
###########################################

#######################################################
def Add_ValueIsNotOfType__F_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsNotOfType__F_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsNotOfType__F_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsNotOfType__F_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsNotOfType__F_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsNotOfType__F_PropertyIsInvalid( vsv, propertyInstance):
    return ''


####################################################
## ValueIsNotOfType__FArgString PC implementation ##
####################################################

#######################################################
def Add_ValueIsNotOfType__FArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsNotOfType__FArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsNotOfType__FArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsNotOfType__FArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsNotOfType__FArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsNotOfType__FArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################
## InstanceOf__ValueTypeToXMLContentStringFMF PC implementation ##
#############################################

#######################################################
def Add_InstanceOf__ValueTypeToXMLContentStringFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_InstanceOf__ValueTypeToXMLContentStringFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_InstanceOf__ValueTypeToXMLContentStringFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_InstanceOf__ValueTypeToXMLContentStringFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_InstanceOf__ValueTypeToXMLContentStringFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_InstanceOf__ValueTypeToXMLContentStringFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################
## InstanceOf__ValueTypeToXMLContentStringFMN PC implementation ##
#############################################

#######################################################
def Add_InstanceOf__ValueTypeToXMLContentStringFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_InstanceOf__ValueTypeToXMLContentStringFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_InstanceOf__ValueTypeToXMLContentStringFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_InstanceOf__ValueTypeToXMLContentStringFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_InstanceOf__ValueTypeToXMLContentStringFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_InstanceOf__ValueTypeToXMLContentStringFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


############################################
## InstanceOf__ValueTypeToXMLContentStringFN PC implementation ##
############################################

#######################################################
def Add_InstanceOf__ValueTypeToXMLContentStringFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_InstanceOf__ValueTypeToXMLContentStringFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_InstanceOf__ValueTypeToXMLContentStringFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_InstanceOf__ValueTypeToXMLContentStringFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_InstanceOf__ValueTypeToXMLContentStringFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_InstanceOf__ValueTypeToXMLContentStringFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################
## InstanceOf__ValueTypeToXMLContentStringF PC implementation ##
###########################################

#######################################################
def Add_InstanceOf__ValueTypeToXMLContentStringF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_InstanceOf__ValueTypeToXMLContentStringF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_InstanceOf__ValueTypeToXMLContentStringF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_InstanceOf__ValueTypeToXMLContentStringF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_InstanceOf__ValueTypeToXMLContentStringF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_InstanceOf__ValueTypeToXMLContentStringF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


####################################################
## InstanceOf__ValueTypeToXMLContentStringFArgString PC implementation ##
####################################################

#######################################################
def Add_InstanceOf__ValueTypeToXMLContentStringFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_InstanceOf__ValueTypeToXMLContentStringFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_InstanceOf__ValueTypeToXMLContentStringFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_InstanceOf__ValueTypeToXMLContentStringFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_InstanceOf__ValueTypeToXMLContentStringFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_InstanceOf__ValueTypeToXMLContentStringFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################
## XMLContentStringToInstanceOf__ValueTypeFMF PC implementation ##
#############################################

#######################################################
def Add_XMLContentStringToInstanceOf__ValueTypeFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_XMLContentStringToInstanceOf__ValueTypeFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_XMLContentStringToInstanceOf__ValueTypeFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_XMLContentStringToInstanceOf__ValueTypeFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_XMLContentStringToInstanceOf__ValueTypeFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_XMLContentStringToInstanceOf__ValueTypeFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################
## XMLContentStringToInstanceOf__ValueTypeFMN PC implementation ##
#############################################

#######################################################
def Add_XMLContentStringToInstanceOf__ValueTypeFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_XMLContentStringToInstanceOf__ValueTypeFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_XMLContentStringToInstanceOf__ValueTypeFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_XMLContentStringToInstanceOf__ValueTypeFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_XMLContentStringToInstanceOf__ValueTypeFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_XMLContentStringToInstanceOf__ValueTypeFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


############################################
## XMLContentStringToInstanceOf__ValueTypeFN PC implementation ##
############################################

#######################################################
def Add_XMLContentStringToInstanceOf__ValueTypeFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_XMLContentStringToInstanceOf__ValueTypeFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_XMLContentStringToInstanceOf__ValueTypeFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_XMLContentStringToInstanceOf__ValueTypeFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_XMLContentStringToInstanceOf__ValueTypeFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_XMLContentStringToInstanceOf__ValueTypeFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################
## XMLContentStringToInstanceOf__ValueTypeF PC implementation ##
###########################################

#######################################################
def Add_XMLContentStringToInstanceOf__ValueTypeF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_XMLContentStringToInstanceOf__ValueTypeF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_XMLContentStringToInstanceOf__ValueTypeF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_XMLContentStringToInstanceOf__ValueTypeF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_XMLContentStringToInstanceOf__ValueTypeF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_XMLContentStringToInstanceOf__ValueTypeF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


####################################################
## XMLContentStringToInstanceOf__ValueTypeFArgString PC implementation ##
####################################################

#######################################################
def Add_XMLContentStringToInstanceOf__ValueTypeFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_XMLContentStringToInstanceOf__ValueTypeFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_XMLContentStringToInstanceOf__ValueTypeFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_XMLContentStringToInstanceOf__ValueTypeFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_XMLContentStringToInstanceOf__ValueTypeFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_XMLContentStringToInstanceOf__ValueTypeFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#####################################
## propClass PC implementation ##
#####################################

#######################################################
def Add_propClass_PropToOverheadDict( vsv, propertyInstance, overheadDict):

    if overheadDict.has_key( propertyInstance._value):
        overheadDict[ propertyInstance._value].append( propertyInstance)
    else:
        overheadDict[ propertyInstance._value] = [ propertyInstance]
    propertyInstance.hashablePropertyValue = propertyInstance._value

    TMAName, propertyClassName = vsv.parsePropertyKey2( propertyInstance._value)

    topicMap = propertyInstance.topicMap
    TMA = topicMap.TMAs[ TMAName]
    proxy = propertyInstance.proxy

    if not TMA.propertyClasses.has_key( propertyClassName):
        if proxy.propertyInstances.has_key( topicMap.opc_system_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF_propertyClass_PNK):
            mergeFMF = proxy.propertyInstances[ topicMap.opc_system_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMF_propertyClass_PNK]._value
            mergeFMN = proxy.propertyInstances[ topicMap.opc_system_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMN_propertyClass_PNK]._value
            mergeFN = proxy.propertyInstances[ topicMap.opc_system_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFN_propertyClass_PNK]._value
            mergeF = proxy.propertyInstances[ topicMap.opc_system_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF_propertyClass_PNK]._value
            mergeFArgString = proxy.propertyInstances[ topicMap.opc_system_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFArgString_propertyClass_PNK]._value

            proxiesKilled = proxy.propertyInstances[ topicMap.opc_system_proxiesKilled_propertyClass_PNK]._value
            propertyInstancesMerged = proxy.propertyInstances[ topicMap.opc_system_propertyInstancesMerged_propertyClass_PNK]._value

        else:
            mergeFMF = \
            mergeFMN = \
            mergeFN = \
            mergeF = \
            mergeFArgString = None

            proxiesKilled = None             ## This attribute applies only to SIPs
            propertyInstancesMerged = None   ## This attribute applies only to SIPs

        if proxy.propertyInstances.has_key( topicMap.opc_system_ProxiesWith__ValueNotSignificantlyDifferentFromF_propertyClass_PNK):
            queryFMF = proxy.propertyInstances[ topicMap.opc_system_ProxiesWith__ValueNotSignificantlyDifferentFromFMF_propertyClass_PNK]._value
            queryFMN = proxy.propertyInstances[ topicMap.opc_system_ProxiesWith__ValueNotSignificantlyDifferentFromFMN_propertyClass_PNK]._value
            queryFN = proxy.propertyInstances[ topicMap.opc_system_ProxiesWith__ValueNotSignificantlyDifferentFromFN_propertyClass_PNK]._value
            queryF = proxy.propertyInstances[ topicMap.opc_system_ProxiesWith__ValueNotSignificantlyDifferentFromF_propertyClass_PNK]._value
            queryFArgString = proxy.propertyInstances[ topicMap.opc_system_ProxiesWith__ValueNotSignificantlyDifferentFromFArgString_propertyClass_PNK]._value

        else:
            queryFMF = \
            queryFMN = \
            queryFN = \
            queryF = \
            queryFArgString = None

        if proxy.propertyInstances.has_key( topicMap.opc_system_UpdateProxyReferencesIn__ValueF_propertyClass_PNK):
            updateFMF = proxy.propertyInstances[ topicMap.opc_system_UpdateProxyReferencesIn__ValueFMF_propertyClass_PNK]._value
            updateFMN = proxy.propertyInstances[ topicMap.opc_system_UpdateProxyReferencesIn__ValueFMN_propertyClass_PNK]._value
            updateFN = proxy.propertyInstances[ topicMap.opc_system_UpdateProxyReferencesIn__ValueFN_propertyClass_PNK]._value
            updateF = proxy.propertyInstances[ topicMap.opc_system_UpdateProxyReferencesIn__ValueF_propertyClass_PNK]._value
            updateFArgString = proxy.propertyInstances[ topicMap.opc_system_UpdateProxyReferencesIn__ValueFArgString_propertyClass_PNK]._value

        else:
            updateFMF = \
            updateFMN = \
            updateFN = \
            updateF = \
            updateFArgString = None

        if proxy.propertyInstances.has_key( topicMap.opc_system_ContextOf__PropertyIsInvalidF_propertyClass_PNK):
            contextIsInvalidFMF = proxy.propertyInstances[ topicMap.opc_system_ContextOf__PropertyIsInvalidFMF_propertyClass_PNK]._value
            contextIsInvalidFMN = proxy.propertyInstances[ topicMap.opc_system_ContextOf__PropertyIsInvalidFMN_propertyClass_PNK]._value
            contextIsInvalidFN = proxy.propertyInstances[ topicMap.opc_system_ContextOf__PropertyIsInvalidFN_propertyClass_PNK]._value
            contextIsInvalidF = proxy.propertyInstances[ topicMap.opc_system_ContextOf__PropertyIsInvalidF_propertyClass_PNK]._value
            contextIsInvalidFArgString = proxy.propertyInstances[ topicMap.opc_system_ContextOf__PropertyIsInvalidFArgString_propertyClass_PNK]._value
        else:
            contextIsInvalidFMF = \
            contextIsInvalidFMN = \
            contextIsInvalidFN = \
            contextIsInvalidF = \
            contextIsInvalidFArgString = None

        if proxy.propertyInstances.has_key( topicMap.opc_system_ValueIsInvalidFor__PropertyF_propertyClass_PNK):
            valueIsInvalidFMF = proxy.propertyInstances[ topicMap.opc_system_ValueIsInvalidFor__PropertyFMF_propertyClass_PNK]._value
            valueIsInvalidFMN = proxy.propertyInstances[ topicMap.opc_system_ValueIsInvalidFor__PropertyFMN_propertyClass_PNK]._value
            valueIsInvalidFN = proxy.propertyInstances[ topicMap.opc_system_ValueIsInvalidFor__PropertyFN_propertyClass_PNK]._value
            valueIsInvalidF = proxy.propertyInstances[ topicMap.opc_system_ValueIsInvalidFor__PropertyF_propertyClass_PNK]._value
            valueIsInvalidFArgString = proxy.propertyInstances[ topicMap.opc_system_ValueIsInvalidFor__PropertyFArgString_propertyClass_PNK]._value
        else:
            valueIsInvalidFMF = \
            valueIsInvalidFMN = \
            valueIsInvalidFN = \
            valueIsInvalidF = \
            valueIsInvalidFArgString = None

        if proxy.propertyInstances.has_key( topicMap.opc_system_propertyClassProcOperations_propertyClass_PNK):
            propertyClassProcOperations = proxy.propertyInstances[ topicMap.opc_system_propertyClassProcOperations_propertyClass_PNK]._value
        else:
            propertyClassProcOperations = None

        if proxy.propertyInstances.has_key( topicMap.opc_system_PCDesc_propertyClass_PNK):
            PCDesc = proxy.propertyInstances[ topicMap.opc_system_PCDesc_propertyClass_PNK]._value
        else:
            PCDesc = ''

        TMA.propertyClasses[ propertyClassName] = propertyClassObject = vsv.PropertyClass(
            vsv,
            topicMap,
            TMA,
            propertyClassName,
            PCDesc,
            proxy.propertyInstances[ topicMap.opc_system_PCValueType_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_overheadDict_propertyClass_PNK]._value,
            propertyClassProcOperations,
            propertyInstancesMerged, 
            proxiesKilled,

            proxy.propertyInstances[ topicMap.opc_system_Add__PropToOverheadDictFMF_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Add__PropToOverheadDictFMN_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Add__PropToOverheadDictFN_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Add__PropToOverheadDictF_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Add__PropToOverheadDictFArgString_propertyClass_PNK]._value,

            proxy.propertyInstances[ topicMap.opc_system_Remove__PropFromOverheadDictFMF_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Remove__PropFromOverheadDictFMN_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Remove__PropFromOverheadDictFN_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Remove__PropFromOverheadDictF_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Remove__PropFromOverheadDictFArgString_propertyClass_PNK]._value,

            valueIsInvalidFMF,
            valueIsInvalidFMN,
            valueIsInvalidFN,
            valueIsInvalidF,
            valueIsInvalidFArgString,

            proxy.propertyInstances[ topicMap.opc_system_Merge__PropertyValuesFMF_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Merge__PropertyValuesFMN_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Merge__PropertyValuesFN_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Merge__PropertyValuesF_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_Merge__PropertyValuesFArgString_propertyClass_PNK]._value,

            proxy.propertyInstances[ topicMap.opc_system_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMF_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMN_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_ValuesOf__PropertyInstancesAreSignificantlyDifferentFN_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_ValuesOf__PropertyInstancesAreSignificantlyDifferentF_propertyClass_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_ValuesOf__PropertyInstancesAreSignificantlyDifferentFArgString_propertyClass_PNK]._value,

            contextIsInvalidFMF,
            contextIsInvalidFMN,
            contextIsInvalidFN,
            contextIsInvalidF,
            contextIsInvalidFArgString,

            mergeFMF,
            mergeFMN,
            mergeFN,
            mergeF,
            mergeFArgString,

            queryFMF,
            queryFMN,
            queryFN,
            queryF,
            queryFArgString,

            updateFMF,
            updateFMN,
            updateFN,
            updateF,
            updateFArgString

            )

        propertyClassObject.propertyClassProxies = [ proxy]
        propertyClassObject.propertyClassProxyIds = [ proxy.proxyId]

        ## make the appropriate valueType object the value of the
        ## "valueType" attribute of the PropertyClass object
        propertyClassObject.valueType = TMA.valueTypes[ proxy.propertyInstances[ topicMap.opc_system_PCValueType_propertyClass_PNK]._value]

        ## can't use setPropertyValue() here, unfortunately, due to bootstrap conflict
        proxy.propertyInstances[ topicMap.opc_system_propertyClassObject_propertyClass_PNK]._value = propertyClassObject

    else:
        propertyClassObject = TMA.propertyClasses[ propertyClassName]

        if proxy not in propertyClassObject.propertyClassProxies:
            propertyClassObject.propertyClassProxies.append( proxy)

        if proxy.proxyId not in propertyClassObject.propertyClassProxyIds:
            propertyClassObject.propertyClassProxyIds.append( proxy.proxyId)


#######################################################
def Remove_propClass_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    overheadDict[ propertyInstance._value].remove( propertyInstance)
    if not len( overheadDict[ propertyInstance._value]):
        del overheadDict[ propertyInstance._value]

#######################################################
def ValueIsInvalidFor_propClass_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_propClass_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_propClass_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_propClass_PropertyIsInvalid( vsv, propertyInstance):
    return ''

#######################################################
def MergeProxiesBecause_propClass_PropertyInstancesSpecifySameSubject( vsv, propertyClass):
    for key in propertyClass.overheadDict:
        if len( propertyClass.overheadDict[ key]) > 1:
            vsv.mergeListOfProxies( propertyClass, propertyClass.overheadDict[ key])

#######################################################
def ProxiesOfSubjectIdentifiedBy_propClass_Value( vsv, propertyClass, value):
    if propertyClass.overheadDict.has_key( value):
        return propertyClass.overheadDict[ value]
    else:
        return []

####################################################
## propClassTMAName PC implementation ##
####################################################

#######################################################
def Add_propClassTMAName_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_propClassTMAName_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_propClassTMAName_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_propClassTMAName_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_propClassTMAName_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_propClassTMAName_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#########################################
## propClassName PC implementation ##
#########################################

#######################################################
def Add_propClassName_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_propClassName_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_propClassName_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_propClassName_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_propClassName_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_propClassName_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#########################################
## PCDesc PC implementation ##
#########################################

#######################################################
def Add_PCDesc_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_PCDesc_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_PCDesc_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_PCDesc_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_PCDesc_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_PCDesc_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################
## PCValueType PC implementation ##
###################################

#######################################################
def Add_PCValueType_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_PCValueType_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_PCValueType_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_PCValueType_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_PCValueType_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_PCValueType_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##############################################
## Add__PropToOverheadDictFMF PC implementation ##
##############################################

#######################################################
def Add_Add__PropToOverheadDictFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Add__PropToOverheadDictFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Add__PropToOverheadDictFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Add__PropToOverheadDictFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Add__PropToOverheadDictFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Add__PropToOverheadDictFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##############################################
## Add__PropToOverheadDictFMN PC implementation ##
##############################################

#######################################################
def Add_Add__PropToOverheadDictFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Add__PropToOverheadDictFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Add__PropToOverheadDictFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Add__PropToOverheadDictFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Add__PropToOverheadDictFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Add__PropToOverheadDictFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################
## Add__PropToOverheadDictFN PC implementation ##
#############################################

#######################################################
def Add_Add__PropToOverheadDictFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Add__PropToOverheadDictFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Add__PropToOverheadDictFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Add__PropToOverheadDictFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Add__PropToOverheadDictFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Add__PropToOverheadDictFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


############################################
## Add__PropToOverheadDictF PC implementation ##
############################################

#######################################################
def Add_Add__PropToOverheadDictF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

def Remove_Add__PropToOverheadDictF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

def ValueIsInvalidFor_Add__PropToOverheadDictF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

def Merge_Add__PropToOverheadDictF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Add__PropToOverheadDictF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Add__PropToOverheadDictF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#####################################################
## Add__PropToOverheadDictFArgString PC implementation ##
#####################################################

#######################################################
def Add_Add__PropToOverheadDictFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Add__PropToOverheadDictFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Add__PropToOverheadDictFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Add__PropToOverheadDictFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Add__PropToOverheadDictFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Add__PropToOverheadDictFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################################
## Remove__PropFromOverheadDictFMF PC implementation ##
###################################################

#######################################################
def Add_Remove__PropFromOverheadDictFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Remove__PropFromOverheadDictFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Remove__PropFromOverheadDictFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Remove__PropFromOverheadDictFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Remove__PropFromOverheadDictFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Remove__PropFromOverheadDictFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################################
## Remove__PropFromOverheadDictFMN PC implementation ##
###################################################

#######################################################
def Add_Remove__PropFromOverheadDictFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Remove__PropFromOverheadDictFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Remove__PropFromOverheadDictFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Remove__PropFromOverheadDictFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Remove__PropFromOverheadDictFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Remove__PropFromOverheadDictFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##################################################
## Remove__PropFromOverheadDictFN PC implementation ##
##################################################

#######################################################
def Add_Remove__PropFromOverheadDictFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Remove__PropFromOverheadDictFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Remove__PropFromOverheadDictFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Remove__PropFromOverheadDictFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Remove__PropFromOverheadDictFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Remove__PropFromOverheadDictFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################################
## Remove__PropFromOverheadDictF PC implementation ##
#################################################

#######################################################
def Add_Remove__PropFromOverheadDictF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Remove__PropFromOverheadDictF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Remove__PropFromOverheadDictF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Remove__PropFromOverheadDictF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Remove__PropFromOverheadDictF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Remove__PropFromOverheadDictF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##########################################################
## Remove__PropFromOverheadDictFArgString PC implementation ##
##########################################################

#######################################################
def Add_Remove__PropFromOverheadDictFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Remove__PropFromOverheadDictFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Remove__PropFromOverheadDictFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Remove__PropFromOverheadDictFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Remove__PropFromOverheadDictFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Remove__PropFromOverheadDictFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


######################################################
## ValueIsInvalidFor__PropertyFMF PC implementation ##
######################################################

#######################################################
def Add_ValueIsInvalidFor__PropertyFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsInvalidFor__PropertyFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsInvalidFor__PropertyFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsInvalidFor__PropertyFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsInvalidFor__PropertyFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsInvalidFor__PropertyFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


######################################################
## ValueIsInvalidFor__PropertyFMN PC implementation ##
######################################################

#######################################################
def Add_ValueIsInvalidFor__PropertyFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsInvalidFor__PropertyFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsInvalidFor__PropertyFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsInvalidFor__PropertyFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsInvalidFor__PropertyFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsInvalidFor__PropertyFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#####################################################
## ValueIsInvalidFor__PropertyFN PC implementation ##
#####################################################

#######################################################
def Add_ValueIsInvalidFor__PropertyFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsInvalidFor__PropertyFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsInvalidFor__PropertyFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsInvalidFor__PropertyFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsInvalidFor__PropertyFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsInvalidFor__PropertyFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


####################################################
## ValueIsInvalidFor__PropertyF PC implementation ##
####################################################

#######################################################
def Add_ValueIsInvalidFor__PropertyF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsInvalidFor__PropertyF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsInvalidFor__PropertyF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsInvalidFor__PropertyF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsInvalidFor__PropertyF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsInvalidFor__PropertyF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################################
## ValueIsInvalidFor__PropertyFArgString PC implementation ##
#############################################################

#######################################################
def Add_ValueIsInvalidFor__PropertyFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValueIsInvalidFor__PropertyFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValueIsInvalidFor__PropertyFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValueIsInvalidFor__PropertyFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValueIsInvalidFor__PropertyFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValueIsInvalidFor__PropertyFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


################################################
## Merge__PropertyValuesFMF PC implementation ##
################################################

#######################################################
def Add_Merge__PropertyValuesFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Merge__PropertyValuesFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Merge__PropertyValuesFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Merge__PropertyValuesFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Merge__PropertyValuesFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Merge__PropertyValuesFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


################################################
## Merge__PropertyValuesFMN PC implementation ##
################################################

#######################################################
def Add_Merge__PropertyValuesFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Merge__PropertyValuesFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Merge__PropertyValuesFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Merge__PropertyValuesFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Merge__PropertyValuesFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Merge__PropertyValuesFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###############################################
## Merge__PropertyValuesFN PC implementation ##
###############################################

#######################################################
def Add_Merge__PropertyValuesFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Merge__PropertyValuesFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Merge__PropertyValuesFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Merge__PropertyValuesFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Merge__PropertyValuesFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Merge__PropertyValuesFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##############################################
## Merge__PropertyValuesF PC implementation ##
##############################################

#######################################################
def Add_Merge__PropertyValuesF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Merge__PropertyValuesF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Merge__PropertyValuesF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Merge__PropertyValuesF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Merge__PropertyValuesF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Merge__PropertyValuesF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#######################################################
## Merge__PropertyValuesFArgString PC implementation ##
#######################################################

#######################################################
def Add_Merge__PropertyValuesFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_Merge__PropertyValuesFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_Merge__PropertyValuesFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_Merge__PropertyValuesFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_Merge__PropertyValuesFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_Merge__PropertyValuesFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###############################################################################
## ValuesOf__PropertyInstancesAreSignificantlyDifferentFMF PC implementation ##
###############################################################################

#######################################################
def Add_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###############################################################################
## ValuesOf__PropertyInstancesAreSignificantlyDifferentFMN PC implementation ##
###############################################################################

#######################################################
def Add_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##############################################################################
## ValuesOf__PropertyInstancesAreSignificantlyDifferentFN PC implementation ##
##############################################################################

#######################################################
def Add_ValuesOf__PropertyInstancesAreSignificantlyDifferentFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValuesOf__PropertyInstancesAreSignificantlyDifferentFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValuesOf__PropertyInstancesAreSignificantlyDifferentFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValuesOf__PropertyInstancesAreSignificantlyDifferentFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################################################
## ValuesOf__PropertyInstancesAreSignificantlyDifferentF PC implementation ##
#############################################################################

#######################################################
def Add_ValuesOf__PropertyInstancesAreSignificantlyDifferentF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValuesOf__PropertyInstancesAreSignificantlyDifferentF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValuesOf__PropertyInstancesAreSignificantlyDifferentF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValuesOf__PropertyInstancesAreSignificantlyDifferentF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


######################################################################################
## ValuesOf__PropertyInstancesAreSignificantlyDifferentFArgString PC implementation ##
######################################################################################

#######################################################
def Add_ValuesOf__PropertyInstancesAreSignificantlyDifferentFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ValuesOf__PropertyInstancesAreSignificantlyDifferentFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ValuesOf__PropertyInstancesAreSignificantlyDifferentFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ValuesOf__PropertyInstancesAreSignificantlyDifferentFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ValuesOf__PropertyInstancesAreSignificantlyDifferentFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################################
## ContextOf__PropertyIsInvalidFMF PC implementation ##
#############################################################

#######################################################
def Add_ContextOf__PropertyIsInvalidFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ContextOf__PropertyIsInvalidFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ContextOf__PropertyIsInvalidFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ContextOf__PropertyIsInvalidFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ContextOf__PropertyIsInvalidFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ContextOf__PropertyIsInvalidFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################################
## ContextOf__PropertyIsInvalidFMN PC implementation ##
#############################################################

#######################################################
def Add_ContextOf__PropertyIsInvalidFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ContextOf__PropertyIsInvalidFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ContextOf__PropertyIsInvalidFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ContextOf__PropertyIsInvalidFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ContextOf__PropertyIsInvalidFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ContextOf__PropertyIsInvalidFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


############################################################
## ContextOf__PropertyIsInvalidFN PC implementation ##
############################################################

#######################################################
def Add_ContextOf__PropertyIsInvalidFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ContextOf__PropertyIsInvalidFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ContextOf__PropertyIsInvalidFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ContextOf__PropertyIsInvalidFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ContextOf__PropertyIsInvalidFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ContextOf__PropertyIsInvalidFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################################
## ContextOf__PropertyIsInvalidF PC implementation ##
###########################################################

#######################################################
def Add_ContextOf__PropertyIsInvalidF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ContextOf__PropertyIsInvalidF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ContextOf__PropertyIsInvalidF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ContextOf__PropertyIsInvalidF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ContextOf__PropertyIsInvalidF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ContextOf__PropertyIsInvalidF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


####################################################################
## ContextOf__PropertyIsInvalidFArgString PC implementation ##
####################################################################

#######################################################
def Add_ContextOf__PropertyIsInvalidFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ContextOf__PropertyIsInvalidFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ContextOf__PropertyIsInvalidFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ContextOf__PropertyIsInvalidFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ContextOf__PropertyIsInvalidFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ContextOf__PropertyIsInvalidFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################################
## UpdateProxyReferencesIn__ValueFMF PC implementation ##
#############################################################

#######################################################
def Add_UpdateProxyReferencesIn__ValueFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_UpdateProxyReferencesIn__ValueFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_UpdateProxyReferencesIn__ValueFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_UpdateProxyReferencesIn__ValueFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_UpdateProxyReferencesIn__ValueFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_UpdateProxyReferencesIn__ValueFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#############################################################
## UpdateProxyReferencesIn__ValueFMN PC implementation ##
#############################################################

#######################################################
def Add_UpdateProxyReferencesIn__ValueFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_UpdateProxyReferencesIn__ValueFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_UpdateProxyReferencesIn__ValueFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_UpdateProxyReferencesIn__ValueFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_UpdateProxyReferencesIn__ValueFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_UpdateProxyReferencesIn__ValueFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


############################################################
## UpdateProxyReferencesIn__ValueFN PC implementation ##
############################################################

#######################################################
def Add_UpdateProxyReferencesIn__ValueFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_UpdateProxyReferencesIn__ValueFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_UpdateProxyReferencesIn__ValueFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_UpdateProxyReferencesIn__ValueFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_UpdateProxyReferencesIn__ValueFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_UpdateProxyReferencesIn__ValueFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################################
## UpdateProxyReferencesIn__ValueF PC implementation ##
###########################################################

#######################################################
def Add_UpdateProxyReferencesIn__ValueF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_UpdateProxyReferencesIn__ValueF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_UpdateProxyReferencesIn__ValueF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_UpdateProxyReferencesIn__ValueF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_UpdateProxyReferencesIn__ValueF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_UpdateProxyReferencesIn__ValueF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


####################################################################
## UpdateProxyReferencesIn__ValueFArgString PC implementation ##
####################################################################

#######################################################
def Add_UpdateProxyReferencesIn__ValueFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_UpdateProxyReferencesIn__ValueFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_UpdateProxyReferencesIn__ValueFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_UpdateProxyReferencesIn__ValueFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_UpdateProxyReferencesIn__ValueFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_UpdateProxyReferencesIn__ValueFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################################################################
## MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMF PC implementation ##
###################################################################################

#######################################################
def Add_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################################################################
## MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMN PC implementation ##
###################################################################################

#######################################################
def Add_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##################################################################################
## MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFN PC implementation ##
##################################################################################

#######################################################
def Add_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################################################################
## MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF PC implementation ##
#################################################################################

#######################################################
def Add_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##########################################################################################
## MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFArgString PC implementation ##
##########################################################################################

#######################################################
def Add_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_MergeProxiesBecause__PropertyInstancesSpecifySameSubjectFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################################################################
## ProxiesWith__ValueNotSignificantlyDifferentFromFMF PC implementation ##
###################################################################################

#######################################################
def Add_ProxiesWith__ValueNotSignificantlyDifferentFromFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ProxiesWith__ValueNotSignificantlyDifferentFromFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ProxiesWith__ValueNotSignificantlyDifferentFromFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ProxiesWith__ValueNotSignificantlyDifferentFromFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ProxiesWith__ValueNotSignificantlyDifferentFromFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ProxiesWith__ValueNotSignificantlyDifferentFromFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################################################################
## ProxiesWith__ValueNotSignificantlyDifferentFromFMN PC implementation ##
###################################################################################

#######################################################
def Add_ProxiesWith__ValueNotSignificantlyDifferentFromFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ProxiesWith__ValueNotSignificantlyDifferentFromFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ProxiesWith__ValueNotSignificantlyDifferentFromFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ProxiesWith__ValueNotSignificantlyDifferentFromFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ProxiesWith__ValueNotSignificantlyDifferentFromFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ProxiesWith__ValueNotSignificantlyDifferentFromFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##################################################################################
## ProxiesWith__ValueNotSignificantlyDifferentFromFN PC implementation ##
##################################################################################

#######################################################
def Add_ProxiesWith__ValueNotSignificantlyDifferentFromFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ProxiesWith__ValueNotSignificantlyDifferentFromFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ProxiesWith__ValueNotSignificantlyDifferentFromFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ProxiesWith__ValueNotSignificantlyDifferentFromFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ProxiesWith__ValueNotSignificantlyDifferentFromFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ProxiesWith__ValueNotSignificantlyDifferentFromFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################################################################
## ProxiesWith__ValueNotSignificantlyDifferentFromF PC implementation ##
#################################################################################

#######################################################
def Add_ProxiesWith__ValueNotSignificantlyDifferentFromF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ProxiesWith__ValueNotSignificantlyDifferentFromF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ProxiesWith__ValueNotSignificantlyDifferentFromF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ProxiesWith__ValueNotSignificantlyDifferentFromF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ProxiesWith__ValueNotSignificantlyDifferentFromF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ProxiesWith__ValueNotSignificantlyDifferentFromF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##########################################################################################
## ProxiesWith__ValueNotSignificantlyDifferentFromFArgString PC implementation ##
##########################################################################################

#######################################################
def Add_ProxiesWith__ValueNotSignificantlyDifferentFromFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_ProxiesWith__ValueNotSignificantlyDifferentFromFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_ProxiesWith__ValueNotSignificantlyDifferentFromFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_ProxiesWith__ValueNotSignificantlyDifferentFromFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_ProxiesWith__ValueNotSignificantlyDifferentFromFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_ProxiesWith__ValueNotSignificantlyDifferentFromFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################
## propClassObj PC implementation ##
###########################################

#######################################################
def Add_propClassObj_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_propClassObj_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_propClassObj_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_propClassObj_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_propClassObj_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_propClassObj_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#####################################
## proxiesKilled PC implementation ##
#####################################

#######################################################
def Add_proxiesKilled_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_proxiesKilled_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_proxiesKilled_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_proxiesKilled_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_proxiesKilled_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_proxiesKilled_PropertyIsInvalid( vsv, propertyInstance):
    return ''


################################
## overheadDict PC implementation ##
################################

#######################################################
def Add_overheadDict_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_overheadDict_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_overheadDict_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_overheadDict_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_overheadDict_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_overheadDict_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################################
## propClassProcOps PC implementation ##
###################################################

#######################################################
def Add_propClassProcOps_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_propClassProcOps_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_propClassProcOps_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_propClassProcOps_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_propClassProcOps_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_propClassProcOps_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###############################################
## propInstancesMerged PC implementation ##
###############################################

#######################################################
def Add_propInstancesMerged_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_propInstancesMerged_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_propInstancesMerged_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_propInstancesMerged_PropertyValues( vsv, value1, value2, **args):
    
    if args.has_key( 'topicMap'):
        topicMap = args[ 'topicMap']
    else:
        topicMap = None

    if args.has_key( 'proxyList'):
        proxyList = args[ 'proxyList']
    else:
        proxyList = None

    TMAName, propertyClassName = vsv.parsePropertyKey2( proxyList[ 0].propertyInstances[ topicMap.sipc_system_propertyClass_PNK]._value)
    return topicMap.TMAs[ TMAName].propertyClasses[ propertyClassName].propertyInstancesMerged
    

#######################################################
def ValuesOf_propInstancesMerged_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_propInstancesMerged_PropertyIsInvalid( vsv, propertyInstance):
    return ''


##############################################
## origPopTask PC implementation ##
##############################################

#######################################################
def Add_origPopTask_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    if overheadDict.has_key( propertyInstance._value):
        overheadDict[ propertyInstance._value].append( propertyInstance)
    else:
        overheadDict[ propertyInstance._value] = [ propertyInstance]
    propertyInstance.hashablePropertyValue = propertyInstance._value

    topicMap = propertyInstance.topicMap    
    proxy = propertyInstance.proxy
    originalPopulationTaskName = propertyInstance._value
    
    if proxy.propertyInstances.has_key( topicMap.opc_system_originalPopulationTaskFMF_originalPopulationTask_PNK):
        oPTFMF = proxy.propertyInstances[ topicMap.opc_system_originalPopulationTaskFMF_originalPopulationTask_PNK]._value
    else:
        oPTFMF = ''
    if proxy.propertyInstances.has_key( topicMap.opc_system_originalPopulationTaskFMN_originalPopulationTask_PNK):
        oPTFMN = proxy.propertyInstances[ topicMap.opc_system_originalPopulationTaskFMN_originalPopulationTask_PNK]._value
    else:
        oPTFMN = ''
    if proxy.propertyInstances.has_key( topicMap.opc_system_originalPopulationTaskFN_originalPopulationTask_PNK):
        oPTFN = proxy.propertyInstances[ topicMap.opc_system_originalPopulationTaskFN_originalPopulationTask_PNK]._value
    else:
        oPTFN = ''
    if proxy.propertyInstances.has_key( topicMap.opc_system_originalPopulationTaskF_originalPopulationTask_PNK):
        oPTF = proxy.propertyInstances[ topicMap.opc_system_originalPopulationTaskF_originalPopulationTask_PNK]._value
    else:
        oPTF = ''
    if proxy.propertyInstances.has_key( topicMap.opc_system_originalPopulationTaskF_originalPopulationTask_PNK):
        oPTFArgString = proxy.propertyInstances[ topicMap.opc_system_originalPopulationTaskFArgString_originalPopulationTask_PNK]._value
    else:
        oPTFArgString = ''

    

    if not topicMap.originalPopulationTasks.has_key( originalPopulationTaskName):
        topicMap.originalPopulationTasks[ originalPopulationTaskName] = originalPopulationTaskObject = vsv.OriginalPopulationTask(
            originalPopulationTaskName,      ## task name
            topicMap.topicMapName,                   ## topic map name
            oPTFMF,
            oPTFMN,
            oPTFN,
            oPTF,
            oPTFArgString,
            proxy.propertyInstances[ topicMap.opc_system_originalPopulationTaskProcOperations_originalPopulationTask_PNK]._value,   ## originalPopulationTaskProcOperationsList
            proxy.propertyInstances[ topicMap.opc_system_origPopTaskDesc_originalPopulationTask_PNK]._value,   ## originalPopulationTaskProcOperationsList
            )
        originalPopulationTaskObject.oPTProxyIds = [ proxy.proxyId]
        originalPopulationTaskObject.oPTProxies = [ proxy]
        for topicMapProxyId in topicMap.topicMapProxyIds:  ## semi-ugly solution to a truly ugly bootstrap problem
            vsv.proxies[ topicMapProxyId].propertyInstances[ topicMap.opc_system_originalPopulationTasks_topicMap_PNK]._value[ originalPopulationTaskName] = originalPopulationTaskObject.oPTProxyIds

    else:
        originalPopulationTaskObject = topicMap.originalPopulationTasks[ originalPopulationTaskName]

        if proxy.proxyId not in originalPopulationTaskObject.oPTProxyIds:
            originalPopulationTaskObject.oPTProxyIds.append( proxy.proxyId)

        if proxy not in originalPopulationTaskObject.oPTProxies:
            originalPopulationTaskObject.oPTProxies.append( proxy)

#######################################################
def Remove_origPopTask_PropFromOverheadDict():
    overheadDict[ propertyInstance._value].remove( propertyInstance)
    if not len( overheadDict[ propertyInstance._value]):
        del overheadDict[ propertyInstance._value]

#######################################################
def ValueIsInvalidFor_origPopTask_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_origPopTask_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_origPopTask_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_origPopTask_PropertyIsInvalid( vsv, propertyInstance):
    return ''

#######################################################
def MergeProxiesBecause_origPopTask_PropertyInstancesSpecifySameSubject( vsv, propertyClass):
    for key in propertyClass.overheadDict:
        if len( propertyClass.overheadDict[ key]) > 1:
            vsv.mergeListOfProxies( propertyClass, propertyClass.overheadDict[ key])

#######################################################
def ProxiesOfSubjectIdentifiedBy_origPopTask_Value( vsv, propertyClass, value):
    if propertyClass.overheadDict.has_key( value):
        return propertyClass.overheadDict[ value]
    else:
        return []

#################################################
## origPopTaskDesc PC implementation ##
#################################################

#######################################################
def Add_origPopTaskDesc_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_origPopTaskDesc_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_origPopTaskDesc_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_origPopTaskDesc_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_origPopTaskDesc_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_origPopTaskDesc_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################################
## originalPopulationTaskFMF PC implementation ##
#################################################

#######################################################
def Add_originalPopulationTaskFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_originalPopulationTaskFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_originalPopulationTaskFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_originalPopulationTaskFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_originalPopulationTaskFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_originalPopulationTaskFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


################################################
## originalPopulationTaskFN PC implementation ##
################################################

#######################################################
def Add_originalPopulationTaskFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_originalPopulationTaskFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_originalPopulationTaskFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_originalPopulationTaskFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_originalPopulationTaskFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_originalPopulationTaskFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################################
## originalPopulationTaskFMN PC implementation ##
#################################################

#######################################################
def Add_originalPopulationTaskFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_originalPopulationTaskFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_originalPopulationTaskFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_originalPopulationTaskFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_originalPopulationTaskFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_originalPopulationTaskFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###############################################
## originalPopulationTaskF PC implementation ##
###############################################

#######################################################
def Add_originalPopulationTaskF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_originalPopulationTaskF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_originalPopulationTaskF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_originalPopulationTaskF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_originalPopulationTaskF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_originalPopulationTaskF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


########################################################
## originalPopulationTaskFArgString PC implementation ##
########################################################

#######################################################
def Add_originalPopulationTaskFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_originalPopulationTaskFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_originalPopulationTaskFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_originalPopulationTaskFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_originalPopulationTaskFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_originalPopulationTaskFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


############################################################
## origPopTaskProcOps PC implementation ##
############################################################

#######################################################
def Add_origPopTaskProcOps_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_origPopTaskProcOps_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_origPopTaskProcOps_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_origPopTaskProcOps_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_origPopTaskProcOps_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_origPopTaskProcOps_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#####################################
## confRule PC implementation ##
#####################################

#######################################################
def Add_confRule_PropToOverheadDict(vsv, propertyInstance, overheadDict):
    if overheadDict.has_key( propertyInstance._value):
        overheadDict[ propertyInstance._value].append( propertyInstance)
    else:
        overheadDict[ propertyInstance._value] = [ propertyInstance]
    propertyInstance.hashablePropertyValue = propertyInstance._value

    TMAName, conferralRuleName = vsv.parsePropertyKey2( propertyInstance._value)

    topicMap = propertyInstance.topicMap
    TMA = topicMap.TMAs[ TMAName]
    proxy = propertyInstance.proxy

    if not TMA.conferralRules.has_key( conferralRuleName):

        if proxy.propertyInstances.has_key( topicMap.opc_system_confRuleDesc_conferralRule_PNK):
            confRuleDesc = proxy.propertyInstances[ topicMap.opc_system_confRuleDesc_conferralRule_PNK]._value
        else:
            confRuleDesc = ''

        TMA.conferralRules[ conferralRuleName] = conferralRuleObject \
        = vsv.ConferralRule(
            vsv,
            topicMap,
            TMA,
            conferralRuleName,
            confRuleDesc,
            proxy.propertyInstances[ topicMap.opc_system_conferralRuleFMF_conferralRule_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_conferralRuleFMN_conferralRule_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_conferralRuleFN_conferralRule_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_conferralRuleF_conferralRule_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_conferralRuleFArgString_conferralRule_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_conferralRuleTriggerRoles_conferralRule_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_conferralRuleValueSourceRoles_conferralRule_PNK]._value,
            proxy.propertyInstances[ topicMap.opc_system_conferralRuleProcOperations_conferralRule_PNK]._value)
        conferralRuleObject.conferralRuleProxies = [ proxy]
        conferralRuleObject.conferralRuleProxyIds = [ proxy.proxyId]
        ## TMA.conferralRuleSequence.append( conferralRuleName)

        vsv.currentProcSpecObject = proxy.topicMap.originalPopulationTasks[ vsv.systemBootstrapOriginalPopulationTaskName]
        vsv.setPropertyValue( proxy.propertyInstances[ topicMap.opc_system_conferralRuleObject_conferralRule_PNK], conferralRuleObject)
        vsv.currentProcSpecObject = None

    else:
        conferralRuleObject = TMA.conferralRules[ conferralRuleName]

        if proxy not in conferralRuleObject.conferralRuleProxies:
            conferralRuleObject.conferralRuleProxies.append( proxy)

        if proxy.proxyId not in conferralRuleObject.conferralRuleProxyIds:
            conferralRuleObject.conferralRuleProxyIds.append( proxy.proxyId)


#######################################################
def Remove_confRule_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    overheadDict[ propertyInstance._value].remove( propertyInstance)
    if not len( overheadDict[ propertyInstance._value]):
        del overheadDict[ propertyInstance._value]

#######################################################
def ValueIsInvalidFor_confRule_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRule_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_confRule_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRule_PropertyIsInvalid( vsv, propertyInstance):
    return ''

#######################################################
def MergeProxiesBecause_confRule_PropertyInstancesSpecifySameSubject( vsv, propertyClass):
    for key in propertyClass.overheadDict:
        if len( propertyClass.overheadDict[ key]) > 1:
            vsv.mergeListOfProxies( propertyClass, propertyClass.overheadDict[ key])

#######################################################
def ProxiesOfSubjectIdentifiedBy_confRule_Value( vsv, propertyClass, value):
    if propertyClass.overheadDict.has_key( value):
        return propertyClass.overheadDict[ value]
    else:
        return []

#########################################
## confRuleName PC implementation ##
#########################################

#######################################################
def Add_confRuleName_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_confRuleName_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_confRuleName_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRuleName_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_confRuleName_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRuleName_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#########################################
## confRuleDesc PC implementation ##
#########################################

#######################################################
def Add_confRuleDesc_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_confRuleDesc_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_confRuleDesc_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRuleDesc_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_confRuleDesc_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRuleDesc_PropertyIsInvalid( vsv, propertyInstance):
    return ''


####################################################
## confRuleTMAName PC implementation ##
####################################################

#######################################################
def Add_confRuleTMAName_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_confRuleTMAName_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_confRuleTMAName_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRuleTMAName_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_confRuleTMAName_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRuleTMAName_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###################################################
## confRuleProcOps PC implementation ##
###################################################

#######################################################
def Add_confRuleProcOps_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_confRuleProcOps_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_confRuleProcOps_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRuleProcOps_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_confRuleProcOps_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRuleProcOps_PropertyIsInvalid( vsv, propertyInstance):
    return ''


########################################
## conferralRuleFMF PC implementation ##
########################################

#######################################################
def Add_conferralRuleFMF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_conferralRuleFMF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_conferralRuleFMF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_conferralRuleFMF_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_conferralRuleFMF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_conferralRuleFMF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


########################################
## conferralRuleFMN PC implementation ##
########################################

#######################################################
def Add_conferralRuleFMN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_conferralRuleFMN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_conferralRuleFMN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_conferralRuleFMN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_conferralRuleFMN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_conferralRuleFMN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#######################################
## conferralRuleFN PC implementation ##
#######################################

#######################################################
def Add_conferralRuleFN_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_conferralRuleFN_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_conferralRuleFN_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_conferralRuleFN_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_conferralRuleFN_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_conferralRuleFN_PropertyIsInvalid( vsv, propertyInstance):
    return ''


######################################
## conferralRuleF PC implementation ##
######################################

#######################################################
def Add_conferralRuleF_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_conferralRuleF_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_conferralRuleF_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_conferralRuleF_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_conferralRuleF_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_conferralRuleF_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###############################################
## conferralRuleFArgString PC implementation ##
###############################################

#######################################################
def Add_conferralRuleFArgString_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_conferralRuleFArgString_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_conferralRuleFArgString_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_conferralRuleFArgString_PropertyValues( vsv, value1, value2):
    if value1 == value2:
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_conferralRuleFArgString_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_conferralRuleFArgString_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################################
## confRuleTrigRoles PC implementation ##
#################################################

#######################################################
def Add_confRuleTrigRoles_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_confRuleTrigRoles_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_confRuleTrigRoles_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRuleTrigRoles_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_confRuleTrigRoles_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRuleTrigRoles_PropertyIsInvalid( vsv, propertyInstance):
    return ''


#################################################
## confRuleValSrcRoles PC implementation ##
#################################################

#######################################################
def Add_confRuleValSrcRoles_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_confRuleValSrcRoles_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_confRuleValSrcRoles_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRuleValSrcRoles_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_confRuleValSrcRoles_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRuleValSrcRoles_PropertyIsInvalid( vsv, propertyInstance):
    return ''


###########################################
## confRuleObj PC implementation ##
###########################################

#######################################################
def Add_confRuleObj_PropToOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def Remove_confRuleObj_PropFromOverheadDict( vsv, propertyInstance, overheadDict):
    pass  ## not an SIP, anyway

#######################################################
def ValueIsInvalidFor_confRuleObj_Property( vsv, propertyValue, propertyClass, propertyInstance = None):
    return False

#######################################################
def Merge_confRuleObj_PropertyValues( vsv, value1, value2):
    if id( value1) == id( value2):
        return value1
    else:
        return None  ## the merge failed.

#######################################################
def ValuesOf_confRuleObj_PropertyInstancesAreSignificantlyDifferent( vsv, value1, value2):
    if value1 != value2:
        return True
    return False

#######################################################
def ContextOf_confRuleObj_PropertyIsInvalid( vsv, propertyInstance):
    return ''



####################################
## Utility/helper functions below ##
####################################

#######################################################
def merge_PCVTCRdict_ValueType_PropertyValues( vsv, value1, value2, args, descString):
    """ called by Merge_valueTypes_PropertyValues()
                  Merge_propertyClasses_PropertyValues()
                  Merge_conferralRules_PropertyValues() """

    if id( value1) == id( value2):
        return value1

    if args.has_key( 'topicMap'):
        topicMap = args[ 'topicMap']
    else:
        topicMap = None

    if args.has_key( 'propertyClass'):
        propertyClass = args[ 'propertyClass']
    else:
        propertyClass = None

    if args.has_key( 'proxyList'):
        proxyList = args[ 'proxyList']
    else:
        proxyList = None

    v1keys = value1.keys()
    v2keys = value2.keys()
    v1keys.sort()
    v2keys.sort()
    if len( v1keys) != len( v2keys):
        vsv.errMsg( 'different number of keys in %s dictionaries: %d vs. %d' % ( descString, len( v1keys), len( v2keys)))
        return None  ## the merge failed
    ctr = 0
    while ctr < len( v1keys):
        if v1keys[ ctr] != v2keys[ ctr]:
            vsv.errMsg( 'keys are different in %s dictionaries: "%s" vs "%s"' % ( descString, v1keys[ ctr], v2keys[ ctr]))
            return None  ## the merge failed.
        ctr += 1
    ## If we made it this far, the two dictionaries have identical keys
        
    TMA = topicMap.TMAs[ proxyList[ 0].propertyInstances[ topicMap.sipc_system_TMAName_PNK]._value]
    if propertyClass.propertyClassName == topicMap.opc_system_propertyClasses_TMAName_PCN:
        return TMA.propertyClasses
    elif propertyClass.propertyClassName == topicMap.opc_system_valueTypes_TMAName_PCN:
        return TMA.valueTypes
    else:  ## propertyClass.propertyClassName == topicMap.opc_system_conferralRules_TMAName_PCN:
        return TMA.conferralRules
