Class PerUserPoolDataSource
- java.lang.Object
- 
- org.apache.tomcat.dbcp.dbcp2.datasources.InstanceKeyDataSource
- 
- org.apache.tomcat.dbcp.dbcp2.datasources.PerUserPoolDataSource
 
 
- 
- All Implemented Interfaces:
- java.io.Serializable,- java.lang.AutoCloseable,- java.sql.Wrapper,- javax.naming.Referenceable,- javax.sql.CommonDataSource,- javax.sql.DataSource
 
 public class PerUserPoolDataSource extends InstanceKeyDataSource A pooling DataSourceappropriate for deployment within J2EE environment. There are many configuration options, most of which are defined in the parent class. This datasource uses individual pools per user, and some properties can be set specifically for a given user, if the deployment environment can support initialization of mapped properties. So for example, a pool of admin or write-access Connections can be guaranteed a certain number of connections, separate from a maximum set for users with read-only connections.User passwords can be changed without re-initializing the datasource. When a getConnection(userName, password)request is processed with a password that is different from those used to create connections in the pool associated withuserName, an attempt is made to create a new connection using the supplied password and if this succeeds, the existing pool is cleared and a new pool is created for connections using the new password.- Since:
- 2.0
- See Also:
- Serialized Form
 
- 
- 
Field Summary- 
Fields inherited from class org.apache.tomcat.dbcp.dbcp2.datasources.InstanceKeyDataSourceUNKNOWN_TRANSACTIONISOLATION
 
- 
 - 
Constructor SummaryConstructors Constructor Description PerUserPoolDataSource()Default no-arg constructor for Serialization.
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()Clears pool(s) maintained by this data source.voidclose()Closes pool(s) maintained by this data source.protected org.apache.tomcat.dbcp.dbcp2.datasources.PooledConnectionManagergetConnectionManager(org.apache.tomcat.dbcp.dbcp2.datasources.UserPassKey upKey)intgetNumActive()Gets the number of active connections in the default pool.intgetNumActive(java.lang.String userName)Gets the number of active connections in the pool for a given user.intgetNumIdle()Gets the number of idle connections in the default pool.intgetNumIdle(java.lang.String userName)Gets the number of idle connections in the pool for a given user.booleangetPerUserBlockWhenExhausted(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getBlockWhenExhausted()for the specified user's pool or the default if no user specific value is defined.java.lang.BooleangetPerUserDefaultAutoCommit(java.lang.String userName)Gets the user specific default value forConnection.setAutoCommit(boolean)for the specified user's pool.java.lang.BooleangetPerUserDefaultReadOnly(java.lang.String userName)Gets the user specific default value forConnection.setReadOnly(boolean)for the specified user's pool.java.lang.IntegergetPerUserDefaultTransactionIsolation(java.lang.String userName)Gets the user specific default value forConnection.setTransactionIsolation(int)for the specified user's pool.java.lang.StringgetPerUserEvictionPolicyClassName(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getEvictionPolicyClassName()for the specified user's pool or the default if no user specific value is defined.booleangetPerUserLifo(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getLifo()for the specified user's pool or the default if no user specific value is defined.intgetPerUserMaxIdle(java.lang.String userName)Gets the user specific value forGenericObjectPool.getMaxIdle()for the specified user's pool or the default if no user specific value is defined.intgetPerUserMaxTotal(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getMaxTotal()for the specified user's pool or the default if no user specific value is defined.longgetPerUserMaxWaitMillis(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getMaxWaitMillis()for the specified user's pool or the default if no user specific value is defined.longgetPerUserMinEvictableIdleTimeMillis(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getMinEvictableIdleTimeMillis()for the specified user's pool or the default if no user specific value is defined.intgetPerUserMinIdle(java.lang.String userName)Gets the user specific value forGenericObjectPool.getMinIdle()for the specified user's pool or the default if no user specific value is defined.intgetPerUserNumTestsPerEvictionRun(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getNumTestsPerEvictionRun()for the specified user's pool or the default if no user specific value is defined.longgetPerUserSoftMinEvictableIdleTimeMillis(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getSoftMinEvictableIdleTimeMillis()for the specified user's pool or the default if no user specific value is defined.booleangetPerUserTestOnBorrow(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getTestOnBorrow()for the specified user's pool or the default if no user specific value is defined.booleangetPerUserTestOnCreate(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getTestOnCreate()for the specified user's pool or the default if no user specific value is defined.booleangetPerUserTestOnReturn(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getTestOnReturn()for the specified user's pool or the default if no user specific value is defined.booleangetPerUserTestWhileIdle(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getTestWhileIdle()for the specified user's pool or the default if no user specific value is defined.longgetPerUserTimeBetweenEvictionRunsMillis(java.lang.String userName)Gets the user specific value forBaseGenericObjectPool.getTimeBetweenEvictionRunsMillis()for the specified user's pool or the default if no user specific value is defined.protected org.apache.tomcat.dbcp.dbcp2.datasources.PooledConnectionAndInfogetPooledConnectionAndInfo(java.lang.String userName, java.lang.String password)javax.naming.ReferencegetReference()Returns aPerUserPoolDataSourceReference.voidsetPerUserBlockWhenExhausted(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getBlockWhenExhausted()for the specified user's pool.voidsetPerUserDefaultAutoCommit(java.lang.String userName, java.lang.Boolean value)Sets a user specific default value forConnection.setAutoCommit(boolean)for the specified user's pool.voidsetPerUserDefaultReadOnly(java.lang.String userName, java.lang.Boolean value)Sets a user specific default value forConnection.setReadOnly(boolean)for the specified user's pool.voidsetPerUserDefaultTransactionIsolation(java.lang.String userName, java.lang.Integer value)Sets a user specific default value forConnection.setTransactionIsolation(int)for the specified user's pool.voidsetPerUserEvictionPolicyClassName(java.lang.String userName, java.lang.String value)Sets a user specific value forBaseGenericObjectPool.getEvictionPolicyClassName()for the specified user's pool.voidsetPerUserLifo(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getLifo()for the specified user's pool.voidsetPerUserMaxIdle(java.lang.String userName, java.lang.Integer value)Sets a user specific value forGenericObjectPool.getMaxIdle()for the specified user's pool.voidsetPerUserMaxTotal(java.lang.String userName, java.lang.Integer value)Sets a user specific value forBaseGenericObjectPool.getMaxTotal()for the specified user's pool.voidsetPerUserMaxWaitMillis(java.lang.String userName, java.lang.Long value)Sets a user specific value forBaseGenericObjectPool.getMaxWaitMillis()for the specified user's pool.voidsetPerUserMinEvictableIdleTimeMillis(java.lang.String userName, java.lang.Long value)Sets a user specific value forBaseGenericObjectPool.getMinEvictableIdleTimeMillis()for the specified user's pool.voidsetPerUserMinIdle(java.lang.String userName, java.lang.Integer value)Sets a user specific value forGenericObjectPool.getMinIdle()for the specified user's pool.voidsetPerUserNumTestsPerEvictionRun(java.lang.String userName, java.lang.Integer value)Sets a user specific value forBaseGenericObjectPool.getNumTestsPerEvictionRun()for the specified user's pool.voidsetPerUserSoftMinEvictableIdleTimeMillis(java.lang.String userName, java.lang.Long value)Sets a user specific value forBaseGenericObjectPool.getSoftMinEvictableIdleTimeMillis()for the specified user's pool.voidsetPerUserTestOnBorrow(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getTestOnBorrow()for the specified user's pool.voidsetPerUserTestOnCreate(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getTestOnCreate()for the specified user's pool.voidsetPerUserTestOnReturn(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getTestOnReturn()for the specified user's pool.voidsetPerUserTestWhileIdle(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getTestWhileIdle()for the specified user's pool.voidsetPerUserTimeBetweenEvictionRunsMillis(java.lang.String userName, java.lang.Long value)Sets a user specific value for()for the specified user's pool.protected voidsetupDefaults(java.sql.Connection con, java.lang.String userName)- 
Methods inherited from class org.apache.tomcat.dbcp.dbcp2.datasources.InstanceKeyDataSourceassertInitializationAllowed, getConnection, getConnection, getConnectionPoolDataSource, getDataSourceName, getDefaultBlockWhenExhausted, getDefaultEvictionPolicyClassName, getDefaultLifo, getDefaultMaxIdle, getDefaultMaxTotal, getDefaultMaxWaitMillis, getDefaultMinEvictableIdleTimeMillis, getDefaultMinIdle, getDefaultNumTestsPerEvictionRun, getDefaultSoftMinEvictableIdleTimeMillis, getDefaultTestOnBorrow, getDefaultTestOnCreate, getDefaultTestOnReturn, getDefaultTestWhileIdle, getDefaultTimeBetweenEvictionRunsMillis, getDefaultTransactionIsolation, getDescription, getInstanceKey, getJndiEnvironment, getLoginTimeout, getLogWriter, getMaxConnLifetimeMillis, getParentLogger, getValidationQuery, getValidationQueryTimeout, isDefaultAutoCommit, isDefaultReadOnly, isRollbackAfterValidation, isWrapperFor, setConnectionPoolDataSource, setDataSourceName, setDefaultAutoCommit, setDefaultBlockWhenExhausted, setDefaultEvictionPolicyClassName, setDefaultLifo, setDefaultMaxIdle, setDefaultMaxTotal, setDefaultMaxWaitMillis, setDefaultMinEvictableIdleTimeMillis, setDefaultMinIdle, setDefaultNumTestsPerEvictionRun, setDefaultReadOnly, setDefaultSoftMinEvictableIdleTimeMillis, setDefaultTestOnBorrow, setDefaultTestOnCreate, setDefaultTestOnReturn, setDefaultTestWhileIdle, setDefaultTimeBetweenEvictionRunsMillis, setDefaultTransactionIsolation, setDescription, setJndiEnvironment, setLoginTimeout, setLogWriter, setMaxConnLifetimeMillis, setRollbackAfterValidation, setValidationQuery, setValidationQueryTimeout, testCPDS, toString, toStringFields, unwrap
 
- 
 
- 
- 
- 
Method Detail- 
clearpublic void clear() Clears pool(s) maintained by this data source.- Since:
- 2.3.0
- See Also:
- ObjectPool.clear()
 
 - 
closepublic void close() Closes pool(s) maintained by this data source.- Specified by:
- closein interface- java.lang.AutoCloseable
- Specified by:
- closein class- InstanceKeyDataSource
- See Also:
- ObjectPool.close()
 
 - 
getConnectionManagerprotected org.apache.tomcat.dbcp.dbcp2.datasources.PooledConnectionManager getConnectionManager(org.apache.tomcat.dbcp.dbcp2.datasources.UserPassKey upKey) - Specified by:
- getConnectionManagerin class- InstanceKeyDataSource
 
 - 
getNumActivepublic int getNumActive() Gets the number of active connections in the default pool.- Returns:
- The number of active connections in the default pool.
 
 - 
getNumActivepublic int getNumActive(java.lang.String userName) Gets the number of active connections in the pool for a given user.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getNumIdlepublic int getNumIdle() Gets the number of idle connections in the default pool.- Returns:
- The number of idle connections in the default pool.
 
 - 
getNumIdlepublic int getNumIdle(java.lang.String userName) Gets the number of idle connections in the pool for a given user.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserBlockWhenExhaustedpublic boolean getPerUserBlockWhenExhausted(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getBlockWhenExhausted()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserDefaultAutoCommitpublic java.lang.Boolean getPerUserDefaultAutoCommit(java.lang.String userName) Gets the user specific default value forConnection.setAutoCommit(boolean)for the specified user's pool.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserDefaultReadOnlypublic java.lang.Boolean getPerUserDefaultReadOnly(java.lang.String userName) Gets the user specific default value forConnection.setReadOnly(boolean)for the specified user's pool.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserDefaultTransactionIsolationpublic java.lang.Integer getPerUserDefaultTransactionIsolation(java.lang.String userName) Gets the user specific default value forConnection.setTransactionIsolation(int)for the specified user's pool.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserEvictionPolicyClassNamepublic java.lang.String getPerUserEvictionPolicyClassName(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getEvictionPolicyClassName()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserLifopublic boolean getPerUserLifo(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getLifo()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserMaxIdlepublic int getPerUserMaxIdle(java.lang.String userName) Gets the user specific value forGenericObjectPool.getMaxIdle()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserMaxTotalpublic int getPerUserMaxTotal(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getMaxTotal()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserMaxWaitMillispublic long getPerUserMaxWaitMillis(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getMaxWaitMillis()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserMinEvictableIdleTimeMillispublic long getPerUserMinEvictableIdleTimeMillis(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getMinEvictableIdleTimeMillis()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserMinIdlepublic int getPerUserMinIdle(java.lang.String userName) Gets the user specific value forGenericObjectPool.getMinIdle()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserNumTestsPerEvictionRunpublic int getPerUserNumTestsPerEvictionRun(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getNumTestsPerEvictionRun()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserSoftMinEvictableIdleTimeMillispublic long getPerUserSoftMinEvictableIdleTimeMillis(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getSoftMinEvictableIdleTimeMillis()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserTestOnBorrowpublic boolean getPerUserTestOnBorrow(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getTestOnBorrow()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserTestOnCreatepublic boolean getPerUserTestOnCreate(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getTestOnCreate()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserTestOnReturnpublic boolean getPerUserTestOnReturn(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getTestOnReturn()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserTestWhileIdlepublic boolean getPerUserTestWhileIdle(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getTestWhileIdle()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPerUserTimeBetweenEvictionRunsMillispublic long getPerUserTimeBetweenEvictionRunsMillis(java.lang.String userName) Gets the user specific value forBaseGenericObjectPool.getTimeBetweenEvictionRunsMillis()for the specified user's pool or the default if no user specific value is defined.- Parameters:
- userName- The user name key.
- Returns:
- The user specific value.
 
 - 
getPooledConnectionAndInfoprotected org.apache.tomcat.dbcp.dbcp2.datasources.PooledConnectionAndInfo getPooledConnectionAndInfo(java.lang.String userName, java.lang.String password) throws java.sql.SQLException- Specified by:
- getPooledConnectionAndInfoin class- InstanceKeyDataSource
- Throws:
- java.sql.SQLException
 
 - 
getReferencepublic javax.naming.Reference getReference() throws javax.naming.NamingExceptionReturns aPerUserPoolDataSourceReference.- Throws:
- javax.naming.NamingException
 
 - 
setPerUserBlockWhenExhaustedpublic void setPerUserBlockWhenExhausted(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getBlockWhenExhausted()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserDefaultAutoCommitpublic void setPerUserDefaultAutoCommit(java.lang.String userName, java.lang.Boolean value)Sets a user specific default value forConnection.setAutoCommit(boolean)for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserDefaultReadOnlypublic void setPerUserDefaultReadOnly(java.lang.String userName, java.lang.Boolean value)Sets a user specific default value forConnection.setReadOnly(boolean)for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserDefaultTransactionIsolationpublic void setPerUserDefaultTransactionIsolation(java.lang.String userName, java.lang.Integer value)Sets a user specific default value forConnection.setTransactionIsolation(int)for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserEvictionPolicyClassNamepublic void setPerUserEvictionPolicyClassName(java.lang.String userName, java.lang.String value)Sets a user specific value forBaseGenericObjectPool.getEvictionPolicyClassName()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserLifopublic void setPerUserLifo(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getLifo()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserMaxIdlepublic void setPerUserMaxIdle(java.lang.String userName, java.lang.Integer value)Sets a user specific value forGenericObjectPool.getMaxIdle()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserMaxTotalpublic void setPerUserMaxTotal(java.lang.String userName, java.lang.Integer value)Sets a user specific value forBaseGenericObjectPool.getMaxTotal()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserMaxWaitMillispublic void setPerUserMaxWaitMillis(java.lang.String userName, java.lang.Long value)Sets a user specific value forBaseGenericObjectPool.getMaxWaitMillis()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserMinEvictableIdleTimeMillispublic void setPerUserMinEvictableIdleTimeMillis(java.lang.String userName, java.lang.Long value)Sets a user specific value forBaseGenericObjectPool.getMinEvictableIdleTimeMillis()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserMinIdlepublic void setPerUserMinIdle(java.lang.String userName, java.lang.Integer value)Sets a user specific value forGenericObjectPool.getMinIdle()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserNumTestsPerEvictionRunpublic void setPerUserNumTestsPerEvictionRun(java.lang.String userName, java.lang.Integer value)Sets a user specific value forBaseGenericObjectPool.getNumTestsPerEvictionRun()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserSoftMinEvictableIdleTimeMillispublic void setPerUserSoftMinEvictableIdleTimeMillis(java.lang.String userName, java.lang.Long value)Sets a user specific value forBaseGenericObjectPool.getSoftMinEvictableIdleTimeMillis()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserTestOnBorrowpublic void setPerUserTestOnBorrow(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getTestOnBorrow()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserTestOnCreatepublic void setPerUserTestOnCreate(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getTestOnCreate()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserTestOnReturnpublic void setPerUserTestOnReturn(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getTestOnReturn()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserTestWhileIdlepublic void setPerUserTestWhileIdle(java.lang.String userName, java.lang.Boolean value)Sets a user specific value forBaseGenericObjectPool.getTestWhileIdle()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setPerUserTimeBetweenEvictionRunsMillispublic void setPerUserTimeBetweenEvictionRunsMillis(java.lang.String userName, java.lang.Long value)Sets a user specific value for()for the specified user's pool.- Parameters:
- userName- The user name key.
- value- The user specific value.
 
 - 
setupDefaultsprotected void setupDefaults(java.sql.Connection con, java.lang.String userName) throws java.sql.SQLException- Specified by:
- setupDefaultsin class- InstanceKeyDataSource
- Throws:
- java.sql.SQLException
 
 
- 
 
-