    /** * @private  * @class Ext.app.Util */Ext.define('Ext.app.Util', {}, function() {    Ext.apply(Ext.app, {        namespaces: {            Ext: {}        },        /**        * Adds namespace(s) to known list.        * @private        *        * @param {String/String[]} namespace        */        addNamespaces: function(namespace) {            var namespaces = Ext.app.namespaces,                i, l;             if (!Ext.isArray(namespace)) {                namespace = [namespace];            }             for (i = 0, l = namespace.length; i < l; i++) {                namespaces[namespace[i]] = true;            }        },        /**        * Clear all namespaces from known list.        * @private        */        clearNamespaces: function() {            Ext.app.namespaces = {};        },        /**        * Get namespace prefix for a class name.        * @private        * @param {String} className         *        * @return {String} Namespace prefix if it's known, otherwise undefined        */        getNamespace: function(className) {            var namespaces    = Ext.apply({}, Ext.ClassManager.paths, Ext.app.namespaces),                deepestPrefix = '',                prefix;             for (prefix in namespaces) {                if (namespaces.hasOwnProperty(prefix)    &&                    prefix.length > deepestPrefix.length &&                    (prefix + '.' === className.substring(0, prefix.length + 1))) {                    deepestPrefix = prefix;                }            }             return deepestPrefix === '' ? undefined : deepestPrefix;        },         /**         * Sets up paths based on the `appFolder` and `paths` configs.         * @param {String} appName The application name (root namespace).         * @param {String} appFolder The folder for app sources ("app" by default).         * @param {Object} paths A set of namespace to path mappings.         * @private         * @since 6.0.0         */        setupPaths: function (appName, appFolder, paths) {            var manifestPaths = Ext.manifest,                ns;             // Ignore appFolder:null             if (appName && appFolder !== null) {                manifestPaths = manifestPaths && manifestPaths.paths;                 // If the manifest has paths, only honor appFolder if defined. If the                 // manifest has no paths (old school mode), then we want to default an                 // unspecified appFolder value to "app". Sencha Cmd will pass in paths                 // to configure the loader via the "paths" property of the manifest so                 // we don't want to try and be "helpful" in that case.                 if (!manifestPaths || appFolder !== undefined) {                    Ext.Loader.setPath(appName, (appFolder === undefined) ? 'app' : appFolder);                }            }             if (paths) {                for (ns in paths) {                    if (paths.hasOwnProperty(ns)) {                        Ext.Loader.setPath(ns, paths[ns]);                    }                }            }        }    });     /**     * @method getNamespace     * @member Ext     * @param {String} className      *     * @return {String} Namespace prefix if it's known, otherwise undefined     */    Ext.getNamespace = Ext.app.getNamespace; });