class MultiLevelCacheConfig<K, V> extends CacheConfig<K, V> {
    private List<Cache<K, V>> caches = new ArrayList<>();
    private boolean useExpireOfSubCache;

    @Override
    public MultiLevelCacheConfig clone() {<FILL_FUNCTION_BODY>}

    public List<Cache<K, V>> getCaches() {
        return caches;
    }

    public void setCaches(List<Cache<K, V>> caches) {
        this.caches = caches;
    }

    public boolean isUseExpireOfSubCache() {
        return useExpireOfSubCache;
    }

    public void setUseExpireOfSubCache(boolean useExpireOfSubCache) {
        this.useExpireOfSubCache = useExpireOfSubCache;
    }
}

        MultiLevelCacheConfig copy = (MultiLevelCacheConfig) super.clone();
        if (caches != null) {
            copy.caches = new ArrayList(this.caches);
        }
        return copy;
    
<methods>public non-sealed void <init>() ,public CacheConfig#RAW clone() ,public long getDefaultExpireInMillis() ,public long getExpireAfterAccessInMillis() ,public long getExpireAfterWriteInMillis() ,public Function<K,java.lang.Object> getKeyConvertor() ,public CacheLoader<K,V> getLoader() ,public List<com.alicp.jetcache.CacheMonitor> getMonitors() ,public java.time.Duration getPenetrationProtectTimeout() ,public com.alicp.jetcache.RefreshPolicy getRefreshPolicy() ,public int getTryLockInquiryCount() ,public int getTryLockLockCount() ,public int getTryLockUnlockCount() ,public boolean isCacheNullValue() ,public boolean isCachePenetrationProtect() ,public boolean isExpireAfterAccess() ,public boolean isExpireAfterWrite() ,public void setCacheNullValue(boolean) ,public void setCachePenetrationProtect(boolean) ,public void setDefaultExpireInMillis(long) ,public void setExpireAfterAccessInMillis(long) ,public void setExpireAfterWriteInMillis(long) ,public void setKeyConvertor(Function<K,java.lang.Object>) ,public void setLoader(CacheLoader<K,V>) ,public void setMonitors(List<com.alicp.jetcache.CacheMonitor>) ,public void setPenetrationProtectTimeout(java.time.Duration) ,public void setRefreshPolicy(com.alicp.jetcache.RefreshPolicy) ,public void setTryLockInquiryCount(int) ,public void setTryLockLockCount(int) ,public void setTryLockUnlockCount(int) <variables>private boolean cacheNullValue,private boolean cachePenetrationProtect,private long expireAfterAccessInMillis,private long expireAfterWriteInMillis,private Function<K,java.lang.Object> keyConvertor,private CacheLoader<K,V> loader,private List<com.alicp.jetcache.CacheMonitor> monitors,private java.time.Duration penetrationProtectTimeout,private com.alicp.jetcache.RefreshPolicy refreshPolicy,private int tryLockInquiryCount,private int tryLockLockCount,private int tryLockUnlockCount