Skip to content
Browse files

Updating dist built with uglify2

  • Loading branch information...
1 parent a25f915 commit b85a7f2e53bfcf84c842b189f46831901a35738f @weikinhuang committed Mar 29, 2013
Showing with 616 additions and 37 deletions.
  1. +613 −28 dist/classify.js
  2. +2 −9 dist/classify.min.js
  3. +1 −0 dist/classify.min.map
View
641 dist/classify.js
@@ -2,15 +2,15 @@
* Classify JavaScript Library v0.10.2
* http://www.closedinterval.com/
*
- * Copyright 2011-2012, Wei Kin Huang
+ * Copyright 2011-2013, Wei Kin Huang
* Classify is freely distributable under the MIT license.
*
- * Date: Fri, 08 Mar 2013 23:27:28 GMT
+ * Date: Fri Mar 29 2013 16:06:01
*/
(function(root, undefined) {
"use strict";
- // shortcut for minification compaction
+// shortcut for minification compaction
var prototype = "prototype",
// export variables into the Classify namespace
exportNames = {},
@@ -44,7 +44,9 @@ isExtendable = function(o) {
},
// quick test for isArray
isArray = Array.isArray || function(o) {
+//#JSCOVERAGE_IF !Array.isArray
return toString.call(o) === "[object Array]";
+//#JSCOVERAGE_ENDIF
},
// regex for native function testing
nativeFunctionRegExp = /^\s*function\s+.+?\(.*?\)\s*\{\s*\[native code\]\s*\}\s*$/,
@@ -58,6 +60,7 @@ keys = function(o) {
for (i in o) {
k[k.length] = i;
}
+//#JSCOVERAGE_IF
if (isEnumerationBuggy) {
// only add buggy enumerated values if it's not the Object.prototype's
for (i = 0; i < enumerationLength; ++i) {
@@ -78,15 +81,19 @@ argsToArray = function(o) {
},
// test if an item is in a array
indexOf = Array.prototype.indexOf ? function(array, item) {
+//#JSCOVERAGE_IF Array.prototype.indexOf
return array.indexOf(item);
+//#JSCOVERAGE_ENDIF
} : function(array, item) {
+//#JSCOVERAGE_IF !Array.prototype.indexOf
var i = 0, length = array.length;
for (; i < length; ++i) {
if (array[i] === item) {
return i;
}
}
return -1;
+//#JSCOVERAGE_ENDIF
},
// ability to store the original definition into the new function definition
store = function(fn, base) {
@@ -147,6 +154,10 @@ extend = function() {
});
return base;
};
+
+/**
+ * @module create
+ */
// regex for keyword properties
var keywordRegexp = /^(?:superclass|subclass|implement|observable|bindings|extend|prototype|applicate|(?:add|remove)(?:Static|Observable|Aliased|Bound)Property)$/,
// regex to test for a mutator name to avoid a loop
@@ -167,11 +178,13 @@ refMutator = [ createMutator, propAddMutator, propRemoveMutator, initMutator ],
refMutatorOrder = [ "onCreate", "onPropAdd", "onPropRemove", "onInit" ],
// Use native object.create whenever possible
objectCreate = isNativeFunction(Object.create) ? Object.create : function(proto) {
+//#JSCOVERAGE_IF !Object.create
// This method allows for the constructor to not be called when making a new subclass
var SubClass = function() {
};
SubClass.prototype = proto;
return new SubClass();
+//#JSCOVERAGE_ENDIF
},
// Hook to use Object.defineProperty if needed
objectDefineProperty = function(obj, prop, descriptor) {
@@ -182,6 +195,12 @@ base = (function() {
var fn = function() {
};
// Make sure we always have a constructor
+ /**
+ * True constructor method for this object, will be called when object is called with the "new" keyword
+ * @for Classify.Class
+ * @method init
+ * @return {Class}
+ */
fn.prototype.init = function() {
};
fn.superclass = null;
@@ -195,6 +214,13 @@ base = (function() {
// wraps a function so that the "this.parent" is bound to the function
wrapParentProperty = function(parentPrototype, property) {
return store(function() {
+ /**
+ * Internal reference property for methods that override a parent method,
+ * allow for access to the parent version of the function.
+ * @for Classify.Class
+ * @method parent
+ * @return {Object}
+ */
var tmp = this.parent, ret;
this.parent = parentPrototype;
ret = property.apply(this, arguments);
@@ -206,7 +232,19 @@ wrapParentProperty = function(parentPrototype, property) {
return ret;
}, property);
},
-// function to add external mutators to modify the class with certain hooks
+/**
+ * Adds a global class mutator that modifies the defined classes at different points with hooks
+ * @param {String} name The name of the mutator reference to add
+ * @param {Object} mutator The mutator definition with optional hooks
+ * @param {Function} [mutator.onCreate] The hook to be called when a class is defined
+ * @param {Function} [mutator.onPropAdd] The hook to be called when a property with the __name_ prefix is added
+ * @param {Function} [mutator.onPropRemove] The hook to be called when a property with the __name_ prefix is removed
+ * @param {Function} [mutator.onInit] The hook to be called during each object's initialization
+ * @throws Error
+ * @static
+ * @for Classify
+ * @method addMutator
+ */
addMutator = function(name, mutator) {
if (mutators[name]) {
throw new Error("Adding duplicate mutator \"" + name + "\".");
@@ -221,7 +259,14 @@ addMutator = function(name, mutator) {
}
});
},
-// function to remove external mutators
+/**
+ * Removes a global class mutator that modifies the defined classes at different points
+ * @param {String} name The name of the mutator to be removed
+ * @throws Error
+ * @static
+ * @for Classify
+ * @method removeMutator
+ */
removeMutator = function(name) {
var mutator = mutators[name];
if (!mutator) {
@@ -327,6 +372,16 @@ removeProperty = function(klass, name) {
};
// Master inheritance based class system creation
+/**
+ * Creates a new Classify class
+ * @param {Class} [parent] Optional first parameter defines what object to inherit from
+ * @param {Object[]} [implement] Optional second parameter defines where to implement traits from
+ * @param {Object} definition The description of the class to be created
+ * @static
+ * @for Classify
+ * @method create
+ * @return {Class}
+ */
var create = function() {
var parent = base,
// a hash of methods and properties to be inserted into the new class
@@ -360,7 +415,12 @@ var create = function() {
if (!parent.__isclass_ && !methods.init) {
methods.init = parent;
}
- // Constructor function
+ /**
+ * Placeholder for class descriptors created with the create method
+ * @constructor
+ * @for Classify
+ * @type Object
+ */
klass = function() {
var tmp, i, l;
// We're not creating a instantiated object so we want to force a instantiation or call the invoke function
@@ -394,28 +454,83 @@ var create = function() {
};
// ability to create a new instance using an array of arguments, cannot be overriden
delete methods.applicate;
+ /**
+ * Create a new instance of the class using arguments passed in as an array
+ *
+ * @param {Array} args Array of arguments to construct the object with
+ * @static
+ * @for Classify.Class
+ * @method applicate
+ * @return {Class}
+ */
klass.applicate = function(a) {
var TempClass = function() {
return klass.apply(this, a);
};
TempClass.prototype = klass.prototype;
return new TempClass();
};
- // Use the defined invoke method if possible, otherwise use the default one
+ /**
+ * Default invocation function when the defined class is called without the "new" keyword.
+ * The default behavior is to return a new instance of itself
+ * @static
+ * @for Classify.Class
+ * @method invoke
+ * @return {Class}
+ */
klass.invoke = methods.invoke || (parent.invoke && isFunction(parent.invoke) && !parent.invoke.__original_ ? parent.invoke : null) || store(function() {
return klass.applicate(arguments);
}, true);
// Remove the invoke method from the prototype chain
delete methods.invoke;
// Keep a list of the inheritance chain
+ /**
+ * Reference to the parent that this object extends from
+ * @static
+ * @for Classify.Class
+ * @property superclass
+ * @type {Class}
+ */
klass.superclass = parent;
+ /**
+ * Array containing a reference to all the children that inherit from this object
+ * @static
+ * @for Classify.Class
+ * @property subclass
+ * @type {Array}
+ */
klass.subclass = [];
+ /**
+ * Array containing all the objects and classes that this object implements methods and properties from
+ * @static
+ * @for Classify.Class
+ * @property implement
+ * @type {Array}
+ */
klass.implement = (isArray(parent.implement) ? parent.implement : []).concat(implement);
// assign child prototype to be that of the parent's by default (inheritance)
proto = klass.prototype = objectCreate(parent.prototype);
// Give this class the ability to create sub classes
+ /**
+ * Creates a new class that is a child of the current class
+ * @param {Object[]} [implement] Optional parameter defines where to implement traits from
+ * @param {Object} definition The description of the class to be created
+ * @static
+ * @for Classify.Class
+ * @method extend
+ * @return {Class}
+ */
+ /**
+ * Creates a new class that is a child of the current class
+ *
+ * @param {Object[]} [implement] Optional parameter defines where to implement traits from
+ * @param {Object} definition The description of the class to be created
+ * @for Classify.Class
+ * @method extend
+ * @return {Class}
+ */
klass.extend = proto.extend = function() {
return create.apply(null, [ klass ].concat(argsToArray(arguments)));
};
@@ -425,6 +540,14 @@ var create = function() {
parent.subclass.push(klass);
}
// Create a magic method that can invoke any of the parent methods
+ /**
+ * Magic method that can invoke any of the parent methods
+ * @param {Object} name The name of the parent method to invoke
+ * @param {Array} args The arguments to pass through to invoke
+ * @for Classify.Class
+ * @method invoke
+ * @return {Object}
+ */
methods.invoke = function(name, args) {
if (name in parent.prototype && name !== "invoke" && isFunction(parent.prototype[name])) {
var tmp = this.invoke, ret;
@@ -435,7 +558,16 @@ var create = function() {
}
throw new Error("Function \"" + name + "\" of parent class being invoked is undefined.");
};
- // Bind the special add property function
+ /**
+ * Adds a new property to the object's prototype of base
+ * @param {String|Object} name The property name to add or if object is passed in then it will iterate through it to add properties
+ * @param {Object} [property] The property to add to the class
+ * @param {String} [prefix=""] Prefix of the property name if any
+ * @static
+ * @for Classify.Class
+ * @method addProperty
+ * @return {Class}
+ */
klass.addProperty = function(name, property, prefix) {
// the prefix parameter is for internal use only
prefix = prefix || "";
@@ -448,7 +580,14 @@ var create = function() {
}
return klass;
};
- // Bind the special remove property function
+ /**
+ * Removes a property from the object's prototype or base
+ * @param {String} name The name of the property to remove
+ * @static
+ * @for Classify.Class
+ * @method removeProperty
+ * @return {Class}
+ */
klass.removeProperty = function(name) {
removeProperty(klass, name);
return klass;
@@ -474,21 +613,60 @@ var create = function() {
// Now extend each of those methods and allow for a parent accessor
klass.addProperty(methods);
+ /**
+ * Reference to the constructor function of this object
+ * @for Classify.Class
+ * @property constructor
+ * @type {Class}
+ */
proto.constructor = klass;
+ /**
+ * Reference to the constructor function of this object
+ * @for Classify.Class
+ * @property self
+ * @type {Class}
+ */
proto.self = klass;
+ /**
+ * Flag to determine if this object is created by Classify.create
+ * @static
+ * @for Classify.Class
+ * @property __isclass_
+ * @private
+ * @type {Boolean}
+ */
klass.__isclass_ = true;
return klass;
};
+
+/**
+ * @module mutator.static
+ */
// mutator for adding static properties to a class
addMutator("static", {
// the special identifier is "__static_"
onCreate : function(klass) {
var mutatorPrefix = this.propPrefix;
- // shortcut method for adding static properties
+ /**
+ * Adds a static property to the object's base
+ * @param {String} name The name of the property to add
+ * @param {Object} property The property to store into the object's base
+ * @static
+ * @for Classify.Class
+ * @method addStaticProperty
+ * @return {Class}
+ */
klass.addStaticProperty = function(name, property) {
return klass.addProperty(name, property, mutatorPrefix);
};
- // shortcut method for removing static properties
+ /**
+ * Removes a static property from the object's base
+ * @param {String} name The name of the property to remove
+ * @static
+ * @for Classify.Class
+ * @method removeStaticProperty
+ * @return {Class}
+ */
klass.removeStaticProperty = function(name) {
return klass.removeProperty(mutatorPrefix + name);
};
@@ -518,12 +696,24 @@ addMutator("static", {
}
}
});
+
+/**
+ * @module mutator.nowrap
+ */
// mutator for adding unwrapped function properties to a class
addMutator("nowrap", {
// the special identifier is "__nowrap_"
onCreate : function(klass) {
var mutatorPrefix = this.propPrefix;
- // shortcut method for adding unwrapped properties
+ /**
+ * Adds a property to the object's prototype that is not wrapped in the parent method wrapper
+ * @param {String} name The name of the new property
+ * @param {String} property The name of the property to add
+ * @static
+ * @for Classify.Class
+ * @method addUnwrappedProperty
+ * @return {Class}
+ */
klass.addUnwrappedProperty = function(name, property) {
return klass.addProperty(name, property, mutatorPrefix);
};
@@ -533,12 +723,25 @@ addMutator("nowrap", {
objectDefineProperty(klass.prototype, name, property);
}
});
+
+/**
+ * @module mutator.alias
+ */
// mutator for adding aliased function properties to a class
addMutator("alias", {
// the special identifier is "__alias_"
onCreate : function(klass) {
var mutatorPrefix = this.propPrefix;
// shortcut method for adding aliased properties
+ /**
+ * Adds a aliased property to the object's prototype based on a existing prototype method
+ * @param {String} name The name of the alias for the new property
+ * @param {String} property The name of the property alias
+ * @static
+ * @for Classify.Class
+ * @method addAliasedProperty
+ * @return {Class}
+ */
klass.addAliasedProperty = function(name, property) {
return klass.addProperty(name, property, mutatorPrefix);
};
@@ -550,18 +753,44 @@ addMutator("alias", {
});
}
});
+
+/**
+ * @module mutator.bind
+ */
// mutator for adding bound properties to a class
addMutator("bind", {
// the special identifier is "__bind_"
onCreate : function(klass, parent) {
var mutator = this;
// re-assign the bindings so that it produces copies across child classes
+ /**
+ * Array containing the list of all the bound properties that is wrapped during object initialization
+ * @static
+ * @for Classify.Class
+ * @property bindings
+ * @type {Array}
+ */
klass.bindings = (parent.bindings || []).slice(0);
- // shortcut method for adding observable properties
+ /**
+ * Adds a context bound property to the object's prototype
+ * @param {String} name The name of the property to add
+ * @param {Function} property The property to always bind the object's context with
+ * @static
+ * @for Classify.Class
+ * @method addBoundProperty
+ * @return {Class}
+ */
klass.addBoundProperty = function(name, property) {
return klass.addProperty(name, property, mutator.propPrefix);
};
- // shortcut method for removing observable properties
+ /**
+ * Removes a context bound property from the object's base
+ * @param {String} name The name of the property to remove
+ * @static
+ * @for Classify.Class
+ * @method removeBoundProperty
+ * @return {Class}
+ */
klass.removeBoundProperty = function(name) {
return klass.removeProperty(mutator.propPrefix + name);
};
@@ -612,8 +841,95 @@ addMutator("bind", {
});
}
});
+
+/**
+ * @module observer
+ */
// Observer class that handles an abstraction layer to class properties (getter and setter methods)
var Observer = create({
+ /**
+ * The context that this object is created within
+ * @for Classify.Observer
+ * @property context
+ * @type {Class}
+ */
+ context : null,
+ /**
+ * The name of the property that this object observes
+ * @for Classify.Observer
+ * @property name
+ * @type {String}
+ */
+ name : null,
+ /**
+ * Array containing all the event listeners for when this value changes
+ * @for Classify.Observer
+ * @property events
+ * @type {Array}
+ */
+ events : null,
+ /**
+ * Flag to check if this property is writable
+ * @for Classify.Observer
+ * @property writable
+ * @type {Boolean}
+ */
+ writable : null,
+ /**
+ * Number of seconds to delay the event emitter, 0 will disable delays
+ * @for Classify.Observer
+ * @property delay
+ * @type {Number}
+ */
+ delay : null,
+ /**
+ * Flag to hold the delay timer
+ * @private
+ * @for Classify.Observer
+ * @property _debounce
+ * @type {Number}
+ */
+ _debounce : null,
+ /**
+ * The internal value of this object
+ * @for Classify.Observer
+ * @property value
+ * @type {Object}
+ */
+ value : null,
+ /**
+ * Internal getter method that modifies the internal value being returned by
+ * the Classify.Observer.prototype.get method
+ * @param {Object} value The internal value of this object
+ * @private
+ * @for Classify.Observer
+ * @method getter
+ * @return {Object}
+ */
+ getter : null,
+ /**
+ * Internal setter method that modifies the internal value being set by
+ * the Classify.Observer.prototype.set method
+ * @param {Object} value The new value that will be set
+ * @param {Object} original The original internal value of this object
+ * @private
+ * @for Classify.Observer
+ * @method setter
+ * @return {Object}
+ */
+ setter : null,
+ /**
+ * Wrapper object that allows for getter/setter/event listeners of object properties
+ * @constructor
+ * @for Classify.Observer
+ * @extends {Class}
+ * @param {Object} value The internal value can be either an object or a value
+ * @param {Object} value.value The internal value if the parameter was passed in as an object
+ * @param {Boolean} [value.writable=true] Marks this object as writable or readonly
+ * @param {Number} [value.delay=0] Only fire the event emitter after a delay of value.delay ms
+ * @param {Function} [value.getter] The internal get modifier
+ * @param {Function} [value.setter] The internal set modifier
+ */
init : function(context, name, value) {
// an Observer can only be instantiated with an instance of an object
if (!context) {
@@ -643,10 +959,23 @@ var Observer = create({
this.value = value;
}
},
+ /**
+ * Gets the value of the internal property
+ * @for Classify.Observer
+ * @method get
+ * @return {Object}
+ */
get : function() {
// getter method is called for return value if specified
return this.getter ? this.getter.call(this.context, this.value) : this.value;
},
+ /**
+ * Sets the value of the internal property
+ * @param {Object} value Mixed value to store internally
+ * @for Classify.Observer
+ * @method set
+ * @return {Class}
+ */
set : function(value) {
var original = this.value, context = this.context;
// if this is not writable then we can't do anything
@@ -662,6 +991,12 @@ var Observer = create({
}
return context;
},
+ /**
+ * Starts the timers to call the registered event listeners
+ * @for Classify.Observer
+ * @method emit
+ * @return {Class}
+ */
emit : function() {
var self = this, args = argsToArray(arguments);
if (this.delay > 0) {
@@ -677,6 +1012,13 @@ var Observer = create({
}
return this.context;
},
+ /**
+ * Fires the event listeners in the order they were added
+ * @param {Array} args Array of arguments to pass to the bound event listeners
+ * @private
+ * @for Classify.Observer
+ * @method _triggerEmit
+ */
_triggerEmit : function(args) {
var i = 0, l = this.events.length, context = this.context, events = this.events;
args.unshift(this.value);
@@ -685,6 +1027,14 @@ var Observer = create({
events[i].apply(context, args);
}
},
+ /**
+ * Add an event listener for when the internal value is changed
+ * @param {Function} listener The event listener to add
+ * @throws Error
+ * @for Classify.Observer
+ * @method addListener
+ * @return {Class}
+ */
addListener : function(listener) {
// event listeners can only be functions
if (!isFunction(listener)) {
@@ -694,6 +1044,14 @@ var Observer = create({
this.events[this.events.length] = listener;
return this.context;
},
+ /**
+ * Add an event listener to be called only once when the internal value is changed
+ * @param {Function} listener The event listener to add
+ * @throws Error
+ * @for Classify.Observer
+ * @method once
+ * @return {Class}
+ */
once : function(listener) {
// event listeners can only be functions
if (!isFunction(listener)) {
@@ -707,6 +1065,14 @@ var Observer = create({
this.addListener(temp);
return this.context;
},
+ /**
+ * Remove an event listener from being fired when the internal value is changed
+ * @param {Function} listener The event listener to remove
+ * @throws Error
+ * @for Classify.Observer
+ * @method removeListener
+ * @return {Class}
+ */
removeListener : function(listener) {
// event listeners can only be functions
if (!isFunction(listener)) {
@@ -727,44 +1093,104 @@ var Observer = create({
events.splice(i, 1);
return context;
},
+ /**
+ * Remove all event listeners from this object
+ * @for Classify.Observer
+ * @method removeAllListeners
+ * @return {Class}
+ */
removeAllListeners : function() {
// garbage collection
this.events = null;
// reset the internal events array
this.events = [];
return this.context;
},
+ /**
+ * Returns the array of internal listeners
+ * @for Classify.Observer
+ * @method listeners
+ * @return {Array}
+ */
listeners : function() {
// gets the list of all the listeners
return this.events;
},
+ /**
+ * Returns the internal value of this object in the scalar form
+ * @for Classify.Observer
+ * @method toValue
+ * @return {Boolean|Number|String}
+ */
toValue : function() {
// gets the scalar value of the internal property
return this.value && this.value.toValue ? this.value.toValue() : this.value;
},
+ /**
+ * Returns the special name of this object
+ * @for Classify.Observer
+ * @method toString
+ * @return {String}
+ */
toString : function() {
// overriden toString function to say this is an instance of an observer
return "[observer " + this.name + "]";
}
});
// alias "on" to addListener
+/**
+ * Add an event listener for when the internal value is changed, alias to addListener
+ *
+ * @param {Function} listener The event listener to add
+ * @throws Error
+ * @see Classify.Observer.prototype.addListener
+ * @for Classify.Observer
+ * @method on
+ * @return {Class}
+ */
Observer.prototype.on = Observer.prototype.addListener;
// export methods to the main object
exportNames.Observer = Observer;
+
+/**
+ * @module mutator.observable
+ */
// mutator for adding observable properties to a class
addMutator("observable", {
// the special identifier is "__observable_"
onCreate : function(klass, parent) {
var mutator = this;
// re-assign the observable so that it produces copies across child classes
+ /**
+ * Hashtable containing the definitions of all the observable properties that is implemented by this object
+ * @static
+ * @for Classify.Class
+ * @property observable
+ * @type {Object}
+ */
klass.observable = extend({}, parent.observable || {});
- // shortcut method for adding observable properties
+ /**
+ * Adds a new observable property to the object's prototype
+ * @param {String} name The name of the observable property to add
+ * @param {Object} property The descriptor of the observable property
+ * @static
+ * @for Classify.Class
+ * @method addObservableProperty
+ * @return {Class}
+ */
klass.addObservableProperty = function(name, property) {
return klass.addProperty(name, property, mutator.propPrefix);
};
- // shortcut method for removing observable properties
+ /**
+ * Removes a observable property to the object's prototype
+ * @param {String} name The name of the observable property to remove
+ * @static
+ * @for Classify.Class
+ * @method removeObservableProperty
+ * @return {Class}
+ */
klass.removeObservableProperty = function(name) {
return klass.removeProperty(mutator.propPrefix + name);
};
@@ -814,6 +1240,10 @@ addMutator("observable", {
}
}
});
+
+/**
+ * @module namespace
+ */
// global container containing all the namespace references
var namespaces = {},
// name of the globally avaliable namespace
@@ -850,10 +1280,46 @@ dereference = function(ns, arg, ref) {
// Namespacing class to create and handle namespaces
var Namespace = create({
+ /**
+ * The name of the namespace
+ * @private
+ * @for Classify.Namespace
+ * @property name
+ * @type {String}
+ */
+ name : null,
+ /**
+ * Hashtable containing references to all the classes created within this namespace
+ * @private
+ * @for Classify.Namespace
+ * @property ref
+ * @type {Object}
+ */
+ ref : null,
+ /**
+ * Namespace container that hold a tree of classes
+ *
+ * @constructor
+ * @for Classify.Namespace
+ * @extends {Class}
+ * @param {String} name The name of the namespace to construct with
+ * @method Namespace
+ */
init : function(name) {
- this.ref = {};
this.name = name;
+ this.ref = {};
},
+ /**
+ * Creates a new class within this namespace
+ *
+ * @param {String} name The name of the created class within the namespace
+ * @param {String|Class} [parent] Optional second parameter defines what object to inherit from, can be a string referencing a class within any namespace
+ * @param {Object[]} [implement] Optional third parameter defines where to implement traits from
+ * @param {Object} definition The description of the class to be created
+ * @for Classify.Namespace
+ * @method create
+ * @return {Class}
+ */
create : function() {
// Get the arguments to be passed into the Class function
var args = argsToArray(arguments),
@@ -894,6 +1360,14 @@ var Namespace = create({
// Return the new class
return c;
},
+ /**
+ * Removes a defined class from this namespace and it's children classes
+ *
+ * @param {String} classname Name of class to remove from this namespace
+ * @for Classify.Namespace
+ * @method destroy
+ * @return {Namespace}
+ */
destroy : function(classname) {
// initializing the placeholder
var c,
@@ -946,9 +1420,25 @@ var Namespace = create({
// return this for chaining
return this;
},
+ /**
+ * Checks if a class exists within this namespace
+ *
+ * @param {String} classname Name of class to check if it has already been defined
+ * @for Classify.Namespace
+ * @method exists
+ * @return {Boolean}
+ */
exists : function(classname) {
return !!this.ref[classname];
},
+ /**
+ * Attempt to retrieve a class within this namespace or the global one
+ *
+ * @param {String} name The name of the class to retrieve
+ * @for Classify.Namespace
+ * @method get
+ * @return {Class}
+ */
get : function(name) {
var tmp;
// already defined, return it
@@ -971,6 +1461,14 @@ var Namespace = create({
load : function(name) {
return this.ref[name] || null;
},
+ /**
+ * Sets the internal autoloader by overriding the Namespace.prototype.load method
+ *
+ * @param {Function} callback The function to call when a class that doesn't exist needs to be loaded
+ * @for Classify.Namespace
+ * @method setAutoloader
+ * @return {Namespace}
+ */
setAutoloader : function(callback) {
// make sure the callback is a function
if (!isFunction(callback)) {
@@ -979,15 +1477,36 @@ var Namespace = create({
this.load = callback;
return this;
},
+ /**
+ * Gets the name of this namespace
+ *
+ * @for Classify.Namespace
+ * @method getName
+ * @return {String}
+ */
getName : function() {
return this.name;
},
+ /**
+ * Gets the translated toString name of this object "[namespace Name]"
+ *
+ * @for Classify.Namespace
+ * @method toString
+ * @return {String}
+ */
toString : function() {
return "[namespace " + this.name + "]";
}
});
-// get a namespace
+/**
+ * Retrieves a namespace and creates if it it doesn't already exist
+ * @param {String} namespace Dot separated namespace string
+ * @static
+ * @for Classify
+ * @method getNamespace
+ * @return {Namespace}
+ */
getNamespace = function(namespace) {
// if passed in object is already a namespace, just return it
if (namespace instanceof Namespace) {
@@ -1002,7 +1521,13 @@ getNamespace = function(namespace) {
return namespaces[namespace];
};
-// remove a namespace
+/**
+ * Destroy an existing namespace
+ * @param {String} namespace Dot separated namespace string
+ * @static
+ * @for Classify
+ * @method destroyNamespace
+ */
destroyNamespace = function(namespace) {
// if namespace passed in, get the name out of it
if (namespace instanceof Namespace) {
@@ -1016,7 +1541,14 @@ destroyNamespace = function(namespace) {
delete namespaces[namespace];
};
-// gets the first valid existing namespace
+/**
+ * Retrieves the first namespace that matches the namespace chain "Ns1.ns2.ns3.ns4"
+ * @param {String} namespace Dot separated namespace string
+ * @static
+ * @for Classify
+ * @method testNamespace
+ * @return {Namespace}
+ */
testNamespace = function(namespace) {
var ns = namespace.split("."), l = ns.length, tmp;
while ((tmp = ns.slice(0, l--).join(".")) !== "") {
@@ -1027,7 +1559,13 @@ testNamespace = function(namespace) {
return null;
};
-// get the globally available namespace
+/**
+ * Retieves the globally named namespace
+ * @static
+ * @for Classify
+ * @method getGlobalNamespace
+ * @return {Namespace}
+ */
getGlobalNamespace = function() {
return getNamespace(global_namespace);
};
@@ -1041,14 +1579,24 @@ extend(exportNames, {
testNamespace : testNamespace,
getGlobalNamespace : getGlobalNamespace,
- // shortcut to the global namespace
+ /**
+ * The globally named namespace
+ * @static
+ * @for Classify
+ * @property global
+ * @type {Namespace}
+ */
global : getGlobalNamespace(),
// utility function to provide functionality to allow for name provisioning
provide : function(namespace, base) {
return provide(namespace.split("."), base || root || {});
}
});
+
+/**
+ * @module export
+ */
// quick reference to the seperator string
var namespace_separator = "/",
// Create a wrapped reference to the Classify object.
@@ -1089,6 +1637,11 @@ Classify = create({
// otherwise they are just class creation parameters
return create.apply(null, args);
},
+ /**
+ * The Main interface function that returns namespaces and creates objects
+ * @class Classify
+ * @return {Classify.Class}
+ */
init : function() {
var args = argsToArray(arguments), params, tmp;
if (args.length < 1) {
@@ -1107,15 +1660,30 @@ Classify = create({
// store clean references to these methods
extend(Classify, exportNames, {
- // object version number
- version : "0.10.2",
+ /**
+ * The version number of this file
+ * @static
+ * @final
+ * @for Classify
+ * @type {String}
+ * @property version
+ */
+ version : "@VERSION",
// direct access functions
create : create,
addMutator : addMutator,
removeMutator : removeMutator,
- // utility function to provide functionality to quickly add properties to objects
+ /**
+ * Utility function to provide functionality to quickly add properties to objects
+ * @param {Object} base The base object to copy properties into
+ * @param {Object[]} args Set of objects to copy properties from
+ * @static
+ * @for Classify
+ * @method extend
+ * @return {Object}
+ */
extend : extend
});
@@ -1132,7 +1700,13 @@ if (typeof module !== "undefined" && module.exports) {
// Export the Classify object for **CommonJS**, with backwards-compatibility for the
// old "require()" API. If we're not in CommonJS, add "Classify" to the global object.
module.exports = Classify;
- // create a circular reference
+ /**
+ * Circular reference to itself
+ * @static
+ * @property Classify
+ * @for Classify
+ * @type {Function}
+ */
Classify.Classify = Classify;
} else {
// store previous value of root.Classify
@@ -1141,8 +1715,19 @@ if (typeof module !== "undefined" && module.exports) {
// otherwise attempt to make a global reference
root.Classify = Classify;
- // Run Classify.js in "noConflict" mode, returning the "Classify" variable to its
- // previous value. Returns a reference to the Classify object.
+ /**
+ * Run Classify.js in "noConflict" mode, returning the "Classify" variable to its
+ * previous value. Returns a reference to the Classify object.
+ * @static
+ * @method noConflict
+ * @for Classify
+ * @return {Classify}
+ * @example
+ * (function(Classify) {
+ * // here you can use the Classify object and remove the global reference to it
+ * // this function is only available on browser environments
+ * })(Classify.noConflict());
+ */
Classify.noConflict = function() {
if (root_value === undefined) {
delete root.Classify;
View
11 dist/classify.min.js
@@ -1,9 +1,2 @@
-/*!
- * Classify JavaScript Library v0.10.2
- * http://www.closedinterval.com/
- *
- * Copyright 2011-2012, Wei Kin Huang
- * Classify is freely distributable under the MIT license.
- *
- * Date: Fri, 08 Mar 2013 23:27:28 GMT
- */;(function(e,t){"use strict";var n,r,i,s,o,u,a,f,l,c,h,p,d,v="prototype",m={},g=!{toString:null}.propertyIsEnumerable("toString"),y=g?"hasOwnProperty,valueOf,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,constructor".split(","):[],b=y.length,w=Object[v],E=w.toString,S=w.hasOwnProperty,x=/^(?:boolean|number|string|undefined)$/,T=function(e){return e===null||x.test(typeof e)},N=function(e){return E.call(e)==="[object Function]"},C=function(e){return e&&e[v]&&N(e)},k=Array.isArray||function(e){return E.call(e)==="[object Array]"},L=/^\s*function\s+.+?\(.*?\)\s*\{\s*\[native code\]\s*\}\s*$/,A=function(e){return N(e)&&L.test(e+"")},O=function(e){var t=[],n;for(n in e)t[t.length]=n;if(g)for(n=0;n<b;++n)S.call(e,y[n])&&(t[t.length]=y[n]);return t},M=function(e){return k(e)?e:[e]},_=function(e){return Array[v].slice.call(e,0)},D=Array[v].indexOf?function(e,t){return e.indexOf(t)}:function(e,t){var n=0,r=e.length;for(;n<r;++n)if(e[n]===t)return n;return-1},P=function(e,t){return e.__original_=t,e},H=function(e,n,r){if(!e)return e;var i,s=0,o=e.length,u;if(o===t||N(e)){u=O(e),o=u.length;for(i=e[u[0]];s<o;i=e[u[++s]])if(n.call(r||i,i,u[s],e)===!1)break}else for(i=e[0];s<o;i=e[++s])if(n.call(r||i,i,s,e)===!1)break;return e},B=function(e,t){var n=[];return H(e,function(r,i){n[n.length]=t(r,i,e)}),n},j=function(e,t){var n=[];return H(e,function(e){e!==t&&(n[n.length]=e)}),n},F=function(){var e=_(arguments),t=e.shift();return H(e,function(e){H(O(e),function(n){t[n]=e[n]})}),t},I=/^(?:superclass|subclass|implement|observable|bindings|extend|prototype|applicate|(?:add|remove)(?:Static|Observable|Aliased|Bound)Property)$/,q=/^__/,R={},U=[],z=[],W=[],X=[],V=[U,z,W,X],$=["onCreate","onPropAdd","onPropRemove","onInit"],J=A(Object.create)?Object.create:function(e){var t=function(){};return t[v]=e,new t},K=function(e,t,n){e[t]=n},Q=function(){var e=function(){};return e[v].init=function(){},e.superclass=null,e.subclass=[],e.implement=[],e[v].constructor=Q,e[v].self=Q,e.__isclass_=!0,e}(),G=function(e,n){return P(function(){var r=this.parent,i;return this.parent=e,i=n.apply(this,arguments),r===t?delete this.parent:this.parent=r,i},n)},Y=function(e,t){if(R[e])throw Error('Adding duplicate mutator "'+e+'".');R[e]=t,t.name=e,t.propTest=RegExp("^__"+e+"_"),t.propPrefix="__"+e+"_",H($,function(e,n){t[e]&&V[n].push(t)})},Z=function(e){var t=R[e];if(!t)throw Error("Removing unknown mutator.");H($,function(e,n){if(t[e]){var r=D(V[n],t);r>-1&&V[n].splice(r,1)}}),R[e]=null;try{delete R[e]}catch(n){}},et=function(e,t,n,r){var i,s,o;if(r===w[n])return;if(q.test(n)){i=!1,H(z,function(s){if(s.propTest.test(n))return n===s.propPrefix?H(r,function(n,r){s.onPropAdd.call(s,e,t,r,n)}):s.onPropAdd.call(s,e,t,n.replace(s.propTest,""),r),i=!0,!1});if(i)return}s=t[v][n],o=e[v],K(o,n,N(r)&&!r.__isclass_&&N(s)?G(s,r):r),N(r)&&H(e.subclass,function(e){N(e[v][n])&&!e[v][n].__original_&&K(e[v],n,G(o[n],e[v][n]))})},tt=function(e,t){var n=!1;if(q.test(t)){H(W,function(r){if(r.propTest.test(t))return r.onPropRemove.call(r,e,t.replace(r.propTest,"")),n=!0,!1});if(n)return}if(!N(e[v][t])){e[v][t]=null;try{delete e[v][t]}catch(r){}return}H(e.subclass,function(e){e[v][t]&&N(e[v][t])&&N(e[v][t].__original_)&&K(e[v],t,e[v][t].__original_)}),e[v][t]=null;try{delete e[v][t]}catch(r){}},nt=function(){var e=Q,n={},r=[],i=arguments,s=i.length,o,u;return s===1?n=i[0]:s===2?(!i[0].__isclass_&&!C(i[0])?r=M(i[0]):e=i[0],n=i[1]):(e=i[0],r=M(i[1]),n=i[2]),n=F({},n),!e.__isclass_&&!n.init&&(n.init=e),o=function(){var e,n,r;if(!this||!this.init||!(this instanceof o))return o.invoke.apply(o,arguments);for(n=0,r=X.length;n<r;n++){e=X[n].onInit.call(X[n],this,o);if(e!==t){if(T(e))throw Error("Return values during onInit hook can only be objects.");return e}}e=this.init.apply(this,arguments);if(e!==t){if(T(e))throw Error("Return values for the constructor can only be objects.");return e}},delete n.applicate,o.applicate=function(e){var t=function(){return o.apply(this,e)};return t[v]=o[v],new t},o.invoke=n.invoke||(e.invoke&&N(e.invoke)&&!e.invoke.__original_?e.invoke:null)||P(function(){return o.applicate(arguments)},!0),delete n.invoke,o.superclass=e,o.subclass=[],o.implement=(k(e.implement)?e.implement:[]).concat(r),u=o[v]=J(e[v]),o.extend=u.extend=function(){return nt.apply(null,[o].concat(_(arguments)))},e.subclass&&k(e.subclass)&&e.subclass.push(o),n.invoke=function(t,n){if(t in e[v]&&t!=="invoke"&&N(e[v][t])){var r=this.invoke,i;return this.invoke=e[v].invoke,i=e[v][t].apply(this,n||[]),this.invoke=r,i}throw Error('Function "'+t+'" of parent class being invoked is undefined.')},o.addProperty=function(n,r,i){return i=i||"",r===t&&typeof n!="string"?H(O(n),function(t){et(o,e,i+t,n[t])}):et(o,e,i+n,r),o},o.removeProperty=function(e){return tt(o,e),o},r.length!==0&&H(r,function(e){var t=e.__isclass_?e[v]:e;H(O(t),function(e){!S.call(u,e)&&!S.call(n,e)&&(n[e]=t[e])})}),H(U,function(t){t.onCreate.call(t,o,e)}),o.addProperty(n),u.constructor=o,u.self=o,o.__isclass_=!0,o};Y("static",{onCreate:function(e){var t=this.propPrefix;e.addStaticProperty=function(n,r){return e.addProperty(n,r,t)},e.removeStaticProperty=function(n){return e.removeProperty(t+n)}},onPropAdd:function(e,t,n,r){if(I.test(n))return;K(e,n,N(r)&&!r.__isclass_?P(function(){return r.apply(e,arguments)},r):r)},onPropRemove:function(e,t){if(I.test(t))return;e[t]=null;try{delete e[t]}catch(n){}}}),Y("nowrap",{onCreate:function(e){var t=this.propPrefix;e.addUnwrappedProperty=function(n,r){return e.addProperty(n,r,t)}},onPropAdd:function(e,t,n,r){K(e[v],n,r)}}),Y("alias",{onCreate:function(e){var t=this.propPrefix;e.addAliasedProperty=function(n,r){return e.addProperty(n,r,t)}},onPropAdd:function(e,t,n,r){et(e,t,n,function(){return this[r].apply(this,arguments)})}}),Y("bind",{onCreate:function(e,t){var n=this;e.bindings=(t.bindings||[]).slice(0),e.addBoundProperty=function(t,r){return e.addProperty(t,r,n.propPrefix)},e.removeBoundProperty=function(t){return e.removeProperty(n.propPrefix+t)}},onPropAdd:function(e,t,n,r){var i=D(e.bindings,n);i<0&&N(r)&&!r.__isclass_&&e.bindings.push(n),et(e,t,n,r)},onPropRemove:function(e,t){var n=D(e.bindings,t);if(n<0)return;e.bindings.splice(n,1),H(e.subclass,function(e){D(e.bindings,t)>-1&&!S.call(e[v],t)&&e.removeBoundProperty(t)}),tt(e,t)},onInit:function(e,t){var n=t.bindings||null;if(n===null||n.length===0)return;H(n,function(n){K(e,n,function(){var r=_(arguments);return r.unshift(this),t[v][n].apply(e,r)})})}}),n=nt({init:function(e,t,n){if(!e)throw Error("Cannot create Observer without class context.");this.context=e,this.name=t,this.events=[],this.writable=!0,this.delay=0,this._debounce=null,n!==null&&typeof n=="object"?(this.getter=N(n.get)?n.get:null,this.setter=N(n.set)?n.set:null,this.value=n.value,this.writable=typeof n.writable=="boolean"?n.writable:!0,this.delay=typeof n.delay=="number"?n.delay:0):this.value=n},get:function(){return this.getter?this.getter.call(this.context,this.value):this.value},set:function(e){var t=this.value,n=this.context;return this.writable?(this.value=this.setter?this.setter.call(n,e,t):e,this.value!==t&&this.emit(),n):n},emit:function(){var t=this,n=_(arguments);return this.delay>0?(this._debounce!==null&&e.clearTimeout(this._debounce),this._debounce=e.setTimeout(function(){t._debounce=null,t._triggerEmit(n)},this.delay)):this._triggerEmit(n),this.context},_triggerEmit:function(e){var t=0,n=this.events.length,r=this.context,i=this.events;e.unshift(this.value);for(;t<n;++t)i[t].apply(r,e)},addListener:function(e){if(!N(e))throw Error("Observer.addListener only takes instances of Function");return this.events[this.events.length]=e,this.context},once:function(e){if(!N(e))throw Error("Observer.once only takes instances of Function");var t=this,n=function(){t.removeListener(n),e.apply(this,arguments)};return n.listener=e,this.addListener(n),this.context},removeListener:function(e){if(!N(e))throw Error("Observer.removeListener only takes instances of Function");var t=this.context,n=this.events,r=-1,i=0,s=n.length;for(;i<s;++i)if(n[i]===e||n[i].listener&&n[i].listener===e){r=i;break}return r<0?t:(n.splice(i,1),t)},removeAllListeners:function(){return this.events=null,this.events=[],this.context},listeners:function(){return this.events},toValue:function(){return this.value&&this.value.toValue?this.value.toValue():this.value},toString:function(){return"[observer "+this.name+"]"}}),n[v].on=n[v].addListener,m.Observer=n,Y("observable",{onCreate:function(e,t){var n=this;e.observable=F({},t.observable||{}),e.addObservableProperty=function(t,r){return e.addProperty(t,r,n.propPrefix)},e.removeObservableProperty=function(t){return e.removeProperty(n.propPrefix+t)}},onPropAdd:function(e,t,n,r){e.observable[n]=r,K(e[v],n,null),H(e.subclass,function(e){S.call(e.observable,n)||e.addObservableProperty(n,r)})},onPropRemove:function(e,t){var n=e.observable[t];H(e.subclass,function(e){e.observable[t]===n&&e.removeObservableProperty(t)}),e.observable[t]=null;try{delete e.observable[t]}catch(r){}},onInit:function(e,t){var r,i=t.observable||null;if(i===null)return;for(r in i)S.call(i,r)&&(e[r]=new n(e,r,i[r]))}}),r={},i="GLOBAL",f=function(e,t){return H(e,function(e){t[e]||(t[e]={}),t=t[e]}),t},l=function(e,t,n){if(typeof t=="string"){n=e.get(t);if(!n)throw Error("Invalid parent class ["+t+"] specified.");return n}return k(t)?B(t,function(t){return l(e,t)}):t},c=nt({init:function(e){this.ref={},this.name=e},create:function(){var e=_(arguments),t=e.shift(),n=t.split("."),r=n.pop(),i=this,s=f(n,i),o=nt.apply(null,B(e,function(e){return l(i,e)}));return o._name_=r,o._namespace_=t,o.extend=o[v].extend=function(){return nt.apply(null,[o].concat(B(arguments,function(e){return l(i,e)})))},o.getNamespace=function(){return i},o.toString=function(){return"[object "+t+"]"},s[r]=o,i.ref[t]=o,o},destroy:function(e){var t,n=e.split("."),r=n.pop(),i=this,s=this,o=this.ref;return H(n,function(e){if(!s[e])return s=null,!1;s=s[e]}),s?(t=s[r],t?(H(t.subclass,function(e){i.destroy(e._namespace_)}),t.superclass.subclass&&(t.superclass.subclass=j(t.superclass.subclass,t)),H(o,function(t,n){n!==e&&n.indexOf(e)===0&&i.destroy(t._namespace_)}),delete s[r],delete o[e],this):this):this},exists:function(e){return!!this.ref[e]},get:function(e){var t;return this.ref[e]?this.ref[e]:(t=this.load(e),t!==null?t:this.name!==i?a().get(e):null)},load:function(e){return this.ref[e]||null},setAutoloader:function(e){if(!N(e))throw Error("Namespace.setAutoloader only takes instances of Function");return this.load=e,this},getName:function(){return this.name},toString:function(){return"[namespace "+this.name+"]"}}),s=function(e){return e instanceof c?e:(e=e||i,r[e]||(r[e]=new c(e)),r[e])},o=function(e){e instanceof c&&(e=e.name);if(e===i)return;delete r[e]},u=function(e){var t,n=e.split("."),i=n.length;while((t=n.slice(0,i--).join("."))!=="")if(r[t])return r[t];return null},a=function(){return s(i)},F(m,{Namespace:c,getNamespace:s,destroyNamespace:o,testNamespace:u,getGlobalNamespace:a,global:a(),provide:function(t,n){return f(t.split("."),n||e||{})}}),h="/",p=nt({invoke:function(){var e=_(arguments),t=e.length,n,r;if(t===0)return s();if(typeof e[0]=="string")return t===1?(r=e[0].split(h),n=s(r[0]),r[1]?n.get(r[1]):n):t===2&&typeof e[1]=="string"?s(e[0]).get(e[1]):(r=e.shift().split(h),n=s(r[0]),r[1]&&e.unshift(r[1]),n.create.apply(n,e));return nt.apply(null,e)},init:function(){var e=_(arguments),t,n;if(e.length<1)throw Error("Classify object cannot be instantiated!");return t=k(e[e.length-1])?e.pop():[],n=p.invoke.apply(null,e),n.__isclass_?n.applicate(t):n}}),F(p,m,{version:"0.10.2",create:nt,addMutator:Y,removeMutator:Z,extend:F}),typeof define=="function"&&define.amd&&define(function(){return p}),typeof module!="undefined"&&module.exports?(module.exports=p,p.Classify=p):(d=e.Classify,e.Classify=p,p.noConflict=function(){return d===t?delete e.Classify:e.Classify=d,p})})(this);
+/*! ClassifyJs v0.10.2 | (c) 2011-2013, Wei Kin Huang | http://classifyjs.com | MIT license | 2013-03-29 */;(function(t,e){"use strict";var n={},r=!{toString:null}.propertyIsEnumerable("toString"),o=r?"hasOwnProperty,valueOf,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,constructor".split(","):[],i=o.length,s=Object.prototype,u=s.toString,a=s.hasOwnProperty,l=/^(?:boolean|number|string|undefined)$/,c=function(t){return null===t||l.test(typeof t)},p=function(t){return"[object Function]"===u.call(t)},f=function(t){return t&&t.prototype&&p(t)},h=Array.isArray||function(t){return"[object Array]"===u.call(t)},d=/^\s*function\s+.+?\(.*?\)\s*\{\s*\[native code\]\s*\}\s*$/,v=function(t){return p(t)&&d.test(""+t)},y=function(t){var e,n=[];for(e in t)n[n.length]=e;if(r)for(e=0;i>e;++e)a.call(t,o[e])&&(n[n.length]=o[e]);return n},b=function(t){return h(t)?t:[t]},g=function(t){return Array.prototype.slice.call(t,0)},m=Array.prototype.indexOf?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,r=t.length;r>n;++n)if(t[n]===e)return n;return-1},_=function(t,e){return t.__original_=e,t},P=function(t,n,r){if(!t)return t;var o,i,s=0,u=t.length;if(u===e||p(t))for(i=y(t),u=i.length,o=t[i[0]];u>s&&n.call(r||o,o,i[s],t)!==!1;o=t[i[++s]]);else for(o=t[0];u>s&&n.call(r||o,o,s,t)!==!1;o=t[++s]);return t},x=function(t,e){var n=[];return P(t,function(r,o){n[n.length]=e(r,o,t)}),n},w=function(t,e){var n=[];return P(t,function(t){t!==e&&(n[n.length]=t)}),n},k=function(){var t=g(arguments),e=t.shift();return P(t,function(t){P(y(t),function(n){e[n]=t[n]})}),e},O=/^(?:superclass|subclass|implement|observable|bindings|extend|prototype|applicate|(?:add|remove)(?:Static|Observable|Aliased|Bound)Property)$/,A=/^__/,E={},C=[],S=[],j=[],L=[],R=[C,S,j,L],I=["onCreate","onPropAdd","onPropRemove","onInit"],N=v(Object.create)?Object.create:function(t){var e=function(){};return e.prototype=t,new e},T=function(t,e,n){t[e]=n},F=function(){var t=function(){};return t.prototype.init=function(){},t.superclass=null,t.subclass=[],t.implement=[],t.prototype.constructor=F,t.prototype.self=F,t.__isclass_=!0,t}(),B=function(t,n){return _(function(){var r,o=this.parent;return this.parent=t,r=n.apply(this,arguments),o===e?delete this.parent:this.parent=o,r},n)},V=function(t,e){if(E[t])throw Error('Adding duplicate mutator "'+t+'".');E[t]=e,e.name=t,e.propTest=RegExp("^__"+t+"_"),e.propPrefix="__"+t+"_",P(I,function(t,n){e[t]&&R[n].push(e)})},$=function(t){var e=E[t];if(!e)throw Error("Removing unknown mutator.");P(I,function(t,n){if(e[t]){var r=m(R[n],e);r>-1&&R[n].splice(r,1)}}),E[t]=null;try{delete E[t]}catch(n){}},G=function(t,n,r,o){var i,u,a;o!==s[r]&&(A.test(r)&&(i=!1,P(S,function(s){return s.propTest.test(r)?(r===s.propPrefix?P(o,function(e,r){s.onPropAdd.call(s,t,n,r,e)}):s.onPropAdd.call(s,t,n,r.replace(s.propTest,""),o),i=!0,!1):e}),i)||(u=n.prototype[r],a=t.prototype,T(a,r,p(o)&&!o.__isclass_&&p(u)?B(u,o):o),p(o)&&P(t.subclass,function(t){p(t.prototype[r])&&!t.prototype[r].__original_&&T(t.prototype,r,B(a[r],t.prototype[r]))})))},M=function(t,n){var r=!1;if(!A.test(n)||(P(j,function(o){return o.propTest.test(n)?(o.onPropRemove.call(o,t,n.replace(o.propTest,"")),r=!0,!1):e}),!r))if(p(t.prototype[n])){P(t.subclass,function(t){t.prototype[n]&&p(t.prototype[n])&&p(t.prototype[n].__original_)&&T(t.prototype,n,t.prototype[n].__original_)}),t.prototype[n]=null;try{delete t.prototype[n]}catch(o){}}else{t.prototype[n]=null;try{delete t.prototype[n]}catch(o){}}},U=function(){var t,n,r=F,o={},i=[],s=arguments,u=s.length;return 1===u?o=s[0]:2===u?(s[0].__isclass_||f(s[0])?r=s[0]:i=b(s[0]),o=s[1]):(r=s[0],i=b(s[1]),o=s[2]),o=k({},o),r.__isclass_||o.init||(o.init=r),t=function(){var n,r,o;if(!(this&&this.init&&this instanceof t))return t.invoke.apply(t,arguments);for(r=0,o=L.length;o>r;r++)if(n=L[r].onInit.call(L[r],this,t),n!==e){if(c(n))throw Error("Return values during onInit hook can only be objects.");return n}if(n=this.init.apply(this,arguments),n!==e){if(c(n))throw Error("Return values for the constructor can only be objects.");return n}},delete o.applicate,t.applicate=function(e){var n=function(){return t.apply(this,e)};return n.prototype=t.prototype,new n},t.invoke=o.invoke||(r.invoke&&p(r.invoke)&&!r.invoke.__original_?r.invoke:null)||_(function(){return t.applicate(arguments)},!0),delete o.invoke,t.superclass=r,t.subclass=[],t.implement=(h(r.implement)?r.implement:[]).concat(i),n=t.prototype=N(r.prototype),t.extend=n.extend=function(){return U.apply(null,[t].concat(g(arguments)))},r.subclass&&h(r.subclass)&&r.subclass.push(t),o.invoke=function(t,e){if(t in r.prototype&&"invoke"!==t&&p(r.prototype[t])){var n,o=this.invoke;return this.invoke=r.prototype.invoke,n=r.prototype[t].apply(this,e||[]),this.invoke=o,n}throw Error('Function "'+t+'" of parent class being invoked is undefined.')},t.addProperty=function(n,o,i){return i=i||"",o===e&&"string"!=typeof n?P(y(n),function(e){G(t,r,i+e,n[e])}):G(t,r,i+n,o),t},t.removeProperty=function(e){return M(t,e),t},0!==i.length&&P(i,function(t){var e=t.__isclass_?t.prototype:t;P(y(e),function(t){a.call(n,t)||a.call(o,t)||(o[t]=e[t])})}),P(C,function(e){e.onCreate.call(e,t,r)}),t.addProperty(o),n.constructor=t,n.self=t,t.__isclass_=!0,t};V("static",{onCreate:function(t){var e=this.propPrefix;t.addStaticProperty=function(n,r){return t.addProperty(n,r,e)},t.removeStaticProperty=function(n){return t.removeProperty(e+n)}},onPropAdd:function(t,e,n,r){O.test(n)||T(t,n,p(r)&&!r.__isclass_?_(function(){return r.apply(t,arguments)},r):r)},onPropRemove:function(t,e){if(!O.test(e)){t[e]=null;try{delete t[e]}catch(n){}}}}),V("nowrap",{onCreate:function(t){var e=this.propPrefix;t.addUnwrappedProperty=function(n,r){return t.addProperty(n,r,e)}},onPropAdd:function(t,e,n,r){T(t.prototype,n,r)}}),V("alias",{onCreate:function(t){var e=this.propPrefix;t.addAliasedProperty=function(n,r){return t.addProperty(n,r,e)}},onPropAdd:function(t,e,n,r){G(t,e,n,function(){return this[r].apply(this,arguments)})}}),V("bind",{onCreate:function(t,e){var n=this;t.bindings=(e.bindings||[]).slice(0),t.addBoundProperty=function(e,r){return t.addProperty(e,r,n.propPrefix)},t.removeBoundProperty=function(e){return t.removeProperty(n.propPrefix+e)}},onPropAdd:function(t,e,n,r){var o=m(t.bindings,n);0>o&&p(r)&&!r.__isclass_&&t.bindings.push(n),G(t,e,n,r)},onPropRemove:function(t,e){var n=m(t.bindings,e);0>n||(t.bindings.splice(n,1),P(t.subclass,function(t){m(t.bindings,e)>-1&&!a.call(t.prototype,e)&&t.removeBoundProperty(e)}),M(t,e))},onInit:function(t,e){var n=e.bindings||null;null!==n&&0!==n.length&&P(n,function(n){T(t,n,function(){var r=g(arguments);return r.unshift(this),e.prototype[n].apply(t,r)})})}});var q=U({context:null,name:null,events:null,writable:null,delay:null,_debounce:null,value:null,getter:null,setter:null,init:function(t,e,n){if(!t)throw Error("Cannot create Observer without class context.");this.context=t,this.name=e,this.events=[],this.writable=!0,this.delay=0,this._debounce=null,null!==n&&"object"==typeof n?(this.getter=p(n.get)?n.get:null,this.setter=p(n.set)?n.set:null,this.value=n.value,this.writable="boolean"==typeof n.writable?n.writable:!0,this.delay="number"==typeof n.delay?n.delay:0):this.value=n},get:function(){return this.getter?this.getter.call(this.context,this.value):this.value},set:function(t){var e=this.value,n=this.context;return this.writable?(this.value=this.setter?this.setter.call(n,t,e):t,this.value!==e&&this.emit(),n):n},emit:function(){var e=this,n=g(arguments);return this.delay>0?(null!==this._debounce&&t.clearTimeout(this._debounce),this._debounce=t.setTimeout(function(){e._debounce=null,e._triggerEmit(n)},this.delay)):this._triggerEmit(n),this.context},_triggerEmit:function(t){var e=0,n=this.events.length,r=this.context,o=this.events;for(t.unshift(this.value);n>e;++e)o[e].apply(r,t)},addListener:function(t){if(!p(t))throw Error("Observer.addListener only takes instances of Function");return this.events[this.events.length]=t,this.context},once:function(t){if(!p(t))throw Error("Observer.once only takes instances of Function");var e=this,n=function(){e.removeListener(n),t.apply(this,arguments)};return n.listener=t,this.addListener(n),this.context},removeListener:function(t){if(!p(t))throw Error("Observer.removeListener only takes instances of Function");for(var e=this.context,n=this.events,r=-1,o=0,i=n.length;i>o;++o)if(n[o]===t||n[o].listener&&n[o].listener===t){r=o;break}return 0>r?e:(n.splice(o,1),e)},removeAllListeners:function(){return this.events=null,this.events=[],this.context},listeners:function(){return this.events},toValue:function(){return this.value&&this.value.toValue?this.value.toValue():this.value},toString:function(){return"[observer "+this.name+"]"}});q.prototype.on=q.prototype.addListener,n.Observer=q,V("observable",{onCreate:function(t,e){var n=this;t.observable=k({},e.observable||{}),t.addObservableProperty=function(e,r){return t.addProperty(e,r,n.propPrefix)},t.removeObservableProperty=function(e){return t.removeProperty(n.propPrefix+e)}},onPropAdd:function(t,e,n,r){t.observable[n]=r,T(t.prototype,n,null),P(t.subclass,function(t){a.call(t.observable,n)||t.addObservableProperty(n,r)})},onPropRemove:function(t,e){var n=t.observable[e];P(t.subclass,function(t){t.observable[e]===n&&t.removeObservableProperty(e)}),t.observable[e]=null;try{delete t.observable[e]}catch(r){}},onInit:function(t,e){var n,r=e.observable||null;if(null!==r)for(n in r)a.call(r,n)&&(t[n]=new q(t,n,r[n]))}});var z,D,H,J,K={},Q="GLOBAL",W=function(t,e){return P(t,function(t){e[t]||(e[t]={}),e=e[t]}),e},X=function(t,e,n){if("string"==typeof e){if(n=t.get(e),!n)throw Error("Invalid parent class ["+e+"] specified.");return n}return h(e)?x(e,function(e){return X(t,e)}):e},Y=U({name:null,ref:null,init:function(t){this.name=t,this.ref={}},create:function(){var t=g(arguments),e=t.shift(),n=e.split("."),r=n.pop(),o=this,i=W(n,o),s=U.apply(null,x(t,function(t){return X(o,t)}));return s._name_=r,s._namespace_=e,s.extend=s.prototype.extend=function(){return U.apply(null,[s].concat(x(arguments,function(t){return X(o,t)})))},s.getNamespace=function(){return o},s.toString=function(){return"[object "+e+"]"},i[r]=s,o.ref[e]=s,s},destroy:function(t){var n,r=t.split("."),o=r.pop(),i=this,s=this,u=this.ref;return P(r,function(t){return s[t]?(s=s[t],e):(s=null,!1)}),s?(n=s[o])?(P(n.subclass,function(t){i.destroy(t._namespace_)}),n.superclass.subclass&&(n.superclass.subclass=w(n.superclass.subclass,n)),P(u,function(e,n){n!==t&&0===n.indexOf(t)&&i.destroy(e._namespace_)}),delete s[o],delete u[t],this):this:this},exists:function(t){return!!this.ref[t]},get:function(t){var e;return this.ref[t]?this.ref[t]:(e=this.load(t),null!==e?e:this.name!==Q?J().get(t):null)},load:function(t){return this.ref[t]||null},setAutoloader:function(t){if(!p(t))throw Error("Namespace.setAutoloader only takes instances of Function");return this.load=t,this},getName:function(){return this.name},toString:function(){return"[namespace "+this.name+"]"}});z=function(t){return t instanceof Y?t:(t=t||Q,K[t]||(K[t]=new Y(t)),K[t])},D=function(t){t instanceof Y&&(t=t.name),t!==Q&&delete K[t]},H=function(t){for(var e,n=t.split("."),r=n.length;""!==(e=n.slice(0,r--).join("."));)if(K[e])return K[e];return null},J=function(){return z(Q)},k(n,{Namespace:Y,getNamespace:z,destroyNamespace:D,testNamespace:H,getGlobalNamespace:J,global:J(),provide:function(e,n){return W(e.split("."),n||t||{})}});var Z="/",te=U({invoke:function(){var t,e,n=g(arguments),r=n.length;return 0===r?z():"string"==typeof n[0]?1===r?(e=n[0].split(Z),t=z(e[0]),e[1]?t.get(e[1]):t):2===r&&"string"==typeof n[1]?z(n[0]).get(n[1]):(e=n.shift().split(Z),t=z(e[0]),e[1]&&n.unshift(e[1]),t.create.apply(t,n)):U.apply(null,n)},init:function(){var t,e,n=g(arguments);if(1>n.length)throw Error("Classify object cannot be instantiated!");return t=h(n[n.length-1])?n.pop():[],e=te.invoke.apply(null,n),e.__isclass_?e.applicate(t):e}});if(k(te,n,{version:"@VERSION",create:U,addMutator:V,removeMutator:$,extend:k}),"function"==typeof define&&define.amd&&define(function(){return te}),"undefined"!=typeof module&&module.exports)module.exports=te,te.Classify=te;else{var ee=t.Classify;t.Classify=te,te.noConflict=function(){return ee===e?delete t.Classify:t.Classify=ee,te}}})(this);
+//@ sourceMappingURL=classify.min.map
View
1 dist/classify.min.map
@@ -0,0 +1 @@
+{"version":3,"file":"dist/classify.min.js","sources":["classify.js"],"names":["root","undefined","exportNames","isEnumerationBuggy","toString","propertyIsEnumerable","enumeratedKeys","split","enumerationLength","length","objectPrototype","Object","prototype","hasOwn","hasOwnProperty","scalarRegExp","isScalar","o","test","isFunction","call","isExtendable","isArray","Array","nativeFunctionRegExp","isNativeFunction","keys","i","k","toArray","argsToArray","slice","indexOf","array","item","store","fn","base","__original_","each","iterator","context","n","l","map","temp","v","filter","arr","out","extend","args","arguments","shift","extens","keywordRegexp","mutatorNameTest","mutators","createMutator","propAddMutator","propRemoveMutator","initMutator","refMutator","refMutatorOrder","objectCreate","create","proto","SubClass","objectDefineProperty","obj","prop","descriptor","init","superclass","subclass","implement","constructor","self","__isclass_","wrapParentProperty","parentPrototype","property","ret","tmp","this","parent","apply","addMutator","name","mutator","Error","propTest","RegExp","propPrefix","push","removeMutator","idx","splice","e","addProperty","klass","foundMutator","parent_prototype","self_prototype","key","onPropAdd","replace","removeProperty","onPropRemove","methods","argLength","invoke","onInit","applicate","a","TempClass","concat","prefix","impl","props","onCreate","mutatorPrefix","addStaticProperty","removeStaticProperty","addUnwrappedProperty","addAliasedProperty","bindings","addBoundProperty","removeBoundProperty","instance","unshift","Observer","events","writable","delay","_debounce","value","getter","setter","get","set","original","emit","clearTimeout","setTimeout","_triggerEmit","addListener","listener","once","removeListener","index","removeAllListeners","listeners","toValue","on","observable","addObservableProperty","removeObservableProperty","observables","getNamespace","destroyNamespace","testNamespace","getGlobalNamespace","namespaces","global_namespace","provide","namespace","ns","dereference","arg","ref","Namespace","fullname","pop","c","_name_","_namespace_","destroy","classname","deref","exists","load","setAutoloader","callback","getName","join","global","namespace_separator","Classify","params","version","define","amd","module","exports","root_value","noConflict"],"mappings":"CASA,SAAUA,EAAMC,GACf,YAGD,IAEAC,MAEAC,IACCC,SAAW,MACTC,qBAAqB,YAExBC,EAAiBH,EAAqB,gGAAgGI,MAAM,QAE5IC,EAAoBF,EAAeG,OAEnCC,EAAkBC,OAAOC,UAEzBR,EAAWM,EAAgBN,SAE3BS,EAASH,EAAgBI,eAEzBC,EAAe,wCAEfC,EAAW,SAASC,GACnB,MAAa,QAANA,GAAcF,EAAaG,WAAYD,KAG/CE,EAAa,SAASF,GACrB,MAA4B,sBAArBb,EAASgB,KAAKH,IAGtBI,EAAe,SAASJ,GACvB,MAAOA,IAAKA,EAAEL,WAAaO,EAAWF,IAGvCK,EAAUC,MAAMD,SAAW,SAASL,GAEnC,MAA4B,mBAArBb,EAASgB,KAAKH,IAItBO,EAAuB,4DAEvBC,EAAmB,SAASR,GAC3B,MAAOE,GAAWF,IAAMO,EAAqBN,KAAKD,GAAAA,IAGnDS,EAAO,SAAST,GACf,GAAYU,GAARC,IACJ,KAAKD,IAAKV,GACTW,EAAEA,EAAEnB,QAAUkB,CAGf,IAAIxB,EAEH,IAAKwB,EAAI,EAAOnB,EAAJmB,IAAyBA,EAChCd,EAAOO,KAAKH,EAAGX,EAAeqB,MACjCC,EAAEA,EAAEnB,QAAUH,EAAeqB,GAIhC,OAAOC,IAGRC,EAAU,SAASZ,GAClB,MAAOK,GAAQL,GAAKA,GAAMA,IAG3Ba,EAAc,SAASb,GACtB,MAAOM,OAAMX,UAAUmB,MAAMX,KAAKH,EAAG,IAGtCe,EAAUT,MAAMX,UAAUoB,QAAU,SAASC,EAAOC,GAEnD,MAAOD,GAAMD,QAAQE,IAElB,SAASD,EAAOC,GAGnB,IADA,GAAIP,GAAI,EAAGlB,EAASwB,EAAMxB,OACfA,EAAJkB,IAAcA,EACpB,GAAIM,EAAMN,KAAOO,EAChB,MAAOP,EAGT,OAAO,IAIRQ,EAAQ,SAASC,EAAIC,GAEpB,MADAD,GAAGE,YAAcD,EACVD,GAGRG,EAAO,SAAStB,EAAGuB,EAAUC,GAE5B,IAAKxB,EACJ,MAAOA,EAER,IAAIyB,GAAwBd,EAArBD,EAAI,EAAGgB,EAAI1B,EAAER,MAEpB,IAAIkC,IAAM1C,GAAakB,EAAWF,GAGjC,IAFAW,EAAIF,EAAKT,GACT0B,EAAIf,EAAEnB,OACDiC,EAAIzB,EAAEW,EAAE,IAASe,EAAJhB,GACba,EAASpB,KAAKqB,GAAWC,EAAGA,EAAGd,EAAED,GAAIV,MAAO,EADxByB,EAAIzB,EAAEW,IAAID,SAOnC,KAAKe,EAAIzB,EAAE,GAAQ0B,EAAJhB,GACVa,EAASpB,KAAKqB,GAAWC,EAAGA,EAAGf,EAAGV,MAAO,EADxByB,EAAIzB,IAAIU,IAM/B,MAAOV,IAGR2B,EAAM,SAAS3B,EAAGuB,GACjB,GAAIK,KAIJ,OAHAN,GAAKtB,EAAG,SAAS6B,EAAGnB,GACnBkB,EAAKA,EAAKpC,QAAU+B,EAASM,EAAGnB,EAAGV,KAE7B4B,GAGRE,EAAS,SAASC,EAAKd,GACtB,GAAIe,KAMJ,OALAV,GAAKS,EAAK,SAASF,GACdA,IAAMZ,IACTe,EAAIA,EAAIxC,QAAUqC,KAGbG,GAGRC,EAAS,WACR,GAAIC,GAAOrB,EAAYsB,WAAYf,EAAOc,EAAKE,OAM/C,OALAd,GAAKY,EAAM,SAASG,GACnBf,EAAKb,EAAK4B,GAAS,SAAS1B,GAC3BS,EAAKT,GAAK0B,EAAO1B,OAGZS,GAOJkB,EAAgB,+IAEpBC,EAAkB,MAElBC,KAEAC,KAEAC,KAEAC,KAEAC,KAEAC,GAAeJ,EAAeC,EAAgBC,EAAmBC,GAEjEE,GAAoB,WAAY,YAAa,eAAgB,UAE7DC,EAAevC,EAAiBd,OAAOsD,QAAUtD,OAAOsD,OAAS,SAASC,GAGzE,GAAIC,GAAW,YAGf,OADAA,GAASvD,UAAYsD,EACd,GAAIC,IAIZC,EAAuB,SAASC,EAAKC,EAAMC,GAC1CF,EAAIC,GAAQC,GAGblC,EAAO,WACN,GAAID,GAAK,YAiBT,OARAA,GAAGxB,UAAU4D,KAAO,aAEpBpC,EAAGqC,WAAa,KAChBrC,EAAGsC,YACHtC,EAAGuC,aACHvC,EAAGxB,UAAUgE,YAAcvC,EAC3BD,EAAGxB,UAAUiE,KAAOxC,EACpBD,EAAG0C,YAAa,EACT1C,KAGR2C,EAAqB,SAASC,EAAiBC,GAC9C,MAAO9C,GAAM,WAQZ,GAAuB+C,GAAnBC,EAAMC,KAAKC,MAQf,OAPAD,MAAKC,OAASL,EACdE,EAAMD,EAASK,MAAMF,KAAMhC,WACvB+B,IAAQlF,QACJmF,MAAKC,OAEZD,KAAKC,OAASF,EAERD,GACLD,IAeJM,EAAa,SAASC,EAAMC,GAC3B,GAAIhC,EAAS+B,GACZ,KAAUE,OAAM,6BAAgCF,EAAO,KAExD/B,GAAS+B,GAAQC,EACjBA,EAAQD,KAAOA,EACfC,EAAQE,SAAeC,OAAO,MAAQJ,EAAO,KAC7CC,EAAQI,WAAa,KAAOL,EAAO,IACnCjD,EAAKwB,EAAiB,SAASjB,EAAGnB,GAC7B8D,EAAQ3C,IACXgB,EAAWnC,GAAGmE,KAAKL,MAYtBM,EAAgB,SAASP,GACxB,GAAIC,GAAUhC,EAAS+B,EACvB,KAAKC,EACJ,KAAUC,OAAM,4BAEjBnD,GAAKwB,EAAiB,SAASjB,EAAGnB,GACjC,GAAI8D,EAAQ3C,GAAI,CAEf,GAAIkD,GAAMhE,EAAQ8B,EAAWnC,GAAI8D,EAC7BO,GAAM,IACTlC,EAAWnC,GAAGsE,OAAOD,EAAK,MAI7BvC,EAAS+B,GAAQ,IACjB,WACQ/B,GAAS+B,GACf,MAAOU,MAIVC,EAAc,SAASC,EAAOf,EAAQG,EAAMP,GAC3C,GAAIoB,GAAcC,EAAkBC,CAEhCtB,KAAavE,EAAgB8E,KAK7BhC,EAAgBtC,KAAKsE,KACxBa,GAAe,EACf9D,EAAKoB,EAAgB,SAAS8B,GAC7B,MAAIA,GAAQE,SAASzE,KAAKsE,IACrBA,IAASC,EAAQI,WACpBtD,EAAK0C,EAAU,SAASX,EAAMkC,GAC7Bf,EAAQgB,UAAUrF,KAAKqE,EAASW,EAAOf,EAAQmB,EAAKlC,KAGrDmB,EAAQgB,UAAUrF,KAAKqE,EAASW,EAAOf,EAAQG,EAAKkB,QAAQjB,EAAQE,SAAU,IAAKV,GAEpFoB,GAAe,GACR,GATR,IAYGA,KAMLC,EAAmBjB,EAAOzE,UAAU4E,GACpCe,EAAiBH,EAAMxF,UAEvBwD,EAAqBmC,EAAgBf,EAAOrE,EAAW8D,KAAcA,EAASH,YAAc3D,EAAWmF,GAAqBvB,EAAmBuB,EAAkBrB,GAAYA,GAGzK9D,EAAW8D,IACd1C,EAAK6D,EAAM1B,SAAU,SAAS9C,GAEzBT,EAAWS,EAAEhB,UAAU4E,MAAW5D,EAAEhB,UAAU4E,GAAMlD,aACvD8B,EAAqBxC,EAAEhB,UAAW4E,EAAMT,EAAmBwB,EAAef,GAAO5D,EAAEhB,UAAU4E,UAMjGmB,EAAiB,SAASP,EAAOZ,GAChC,GAAIa,IAAe,CACnB,KAAI7C,EAAgBtC,KAAKsE,KACxBjD,EAAKqB,EAAmB,SAAS6B,GAChC,MAAIA,GAAQE,SAASzE,KAAKsE,IACzBC,EAAQmB,aAAaxF,KAAKqE,EAASW,EAAOZ,EAAKkB,QAAQjB,EAAQE,SAAU,KACzEU,GAAe,GACR,GAHR,KAMGA,GAML,GAAKlF,EAAWiF,EAAMxF,UAAU4E,IAAhC,CASAjD,EAAK6D,EAAM1B,SAAU,SAAS9C,GAEzBA,EAAEhB,UAAU4E,IAASrE,EAAWS,EAAEhB,UAAU4E,KAAUrE,EAAWS,EAAEhB,UAAU4E,GAAMlD,cACtF8B,EAAqBxC,EAAEhB,UAAW4E,EAAM5D,EAAEhB,UAAU4E,GAAMlD,eAG5D8D,EAAMxF,UAAU4E,GAAQ,IACxB,WACQY,GAAMxF,UAAU4E,GACtB,MAAOU,SAlBT,CACCE,EAAMxF,UAAU4E,GAAQ,IACxB,WACQY,GAAMxF,UAAU4E,GACtB,MAAOU,OA6BPjC,EAAS,WACZ,GAQAmC,GAAOlC,EARHmB,EAAShD,EAEbwE,KAEAlC,KAEAxB,EAAOC,UAAW0D,EAAY3D,EAAK1C,MAuPnC,OAnPkB,KAAdqG,EACHD,EAAU1D,EAAK,GACS,IAAd2D,GACL3D,EAAK,GAAG2B,YAAezD,EAAa8B,EAAK,IAG7CkC,EAASlC,EAAK,GAFdwB,EAAY9C,EAAQsB,EAAK,IAI1B0D,EAAU1D,EAAK,KAEfkC,EAASlC,EAAK,GACdwB,EAAY9C,EAAQsB,EAAK,IACzB0D,EAAU1D,EAAK,IAIhB0D,EAAU3D,KAAW2D,GAGhBxB,EAAOP,YAAe+B,EAAQrC,OAClCqC,EAAQrC,KAAOa,GAQhBe,EAAQ,WACP,GAAIjB,GAAKxD,EAAGgB,CAKZ,MAAKyC,MAASA,KAAKZ,MAAUY,eAAgBgB,IAC5C,MAAOA,GAAMW,OAAOzB,MAAMc,EAAOhD,UAGlC,KAAKzB,EAAI,EAAGgB,EAAIkB,EAAYpD,OAAYkC,EAAJhB,EAAOA,IAG1C,GADAwD,EAAMtB,EAAYlC,GAAGqF,OAAO5F,KAAKyC,EAAYlC,GAAIyD,KAAMgB,GACnDjB,IAAQlF,EAAW,CAEtB,GAAIe,EAASmE,GACZ,KAAUO,OAAM,wDAEjB,OAAOP,GAKT,GADAA,EAAMC,KAAKZ,KAAKc,MAAMF,KAAMhC,WACxB+B,IAAQlF,EAAW,CAEtB,GAAIe,EAASmE,GACZ,KAAUO,OAAM,yDAEjB,OAAOP,WAIF0B,GAAQI,UAUfb,EAAMa,UAAY,SAASC,GAC1B,GAAIC,GAAY,WACf,MAAOf,GAAMd,MAAMF,KAAM8B,GAG1B,OADAC,GAAUvG,UAAYwF,EAAMxF,UACrB,GAAIuG,IAUZf,EAAMW,OAASF,EAAQE,SAAW1B,EAAO0B,QAAU5F,EAAWkE,EAAO0B,UAAY1B,EAAO0B,OAAOzE,YAAc+C,EAAO0B,OAAS,OAAS5E,EAAM,WAC3I,MAAOiE,GAAMa,UAAU7D,aACrB,SAEIyD,GAAQE,OASfX,EAAM3B,WAAaY,EAQnBe,EAAM1B,YAQN0B,EAAMzB,WAAarD,EAAQ+D,EAAOV,WAAaU,EAAOV,cAAgByC,OAAOzC,GAG7ET,EAAQkC,EAAMxF,UAAYoD,EAAaqB,EAAOzE,WAqB9CwF,EAAMlD,OAASgB,EAAMhB,OAAS,WAC7B,MAAOe,GAAOqB,MAAM,MAAQc,GAAQgB,OAAOtF,EAAYsB,cAIpDiC,EAAOX,UAAYpD,EAAQ+D,EAAOX,WACrCW,EAAOX,SAASoB,KAAKM,GAWtBS,EAAQE,OAAS,SAASvB,EAAMrC,GAC/B,GAAIqC,IAAQH,GAAOzE,WAAsB,WAAT4E,GAAqBrE,EAAWkE,EAAOzE,UAAU4E,IAAQ,CACxF,GAAuBN,GAAnBC,EAAMC,KAAK2B,MAIf,OAHA3B,MAAK2B,OAAS1B,EAAOzE,UAAUmG,OAC/B7B,EAAMG,EAAOzE,UAAU4E,GAAMF,MAAMF,KAAMjC,OACzCiC,KAAK2B,OAAS5B,EACPD,EAER,KAAUQ,OAAM,aAAgBF,EAAO,kDAYxCY,EAAMD,YAAc,SAASX,EAAMP,EAAUoC,GAU5C,MARAA,GAASA,GAAU,GACfpC,IAAahF,GAA6B,gBAATuF,GACpCjD,EAAKb,EAAK8D,GAAO,SAAS9C,GACzByD,EAAYC,EAAOf,EAAQgC,EAAS3E,EAAG8C,EAAK9C,MAG7CyD,EAAYC,EAAOf,EAAQgC,EAAS7B,EAAMP,GAEpCmB,GAURA,EAAMO,eAAiB,SAASnB,GAE/B,MADAmB,GAAeP,EAAOZ,GACfY,GAIiB,IAArBzB,EAAUlE,QACb8B,EAAKoC,EAAW,SAAS2C,GACxB,GAAIC,GAAQD,EAAKxC,WAAawC,EAAK1G,UAAY0G,CAC/C/E,GAAKb,EAAK6F,GAAQ,SAAS/B,GACrB3E,EAAOO,KAAK8C,EAAOsB,IAAU3E,EAAOO,KAAKyF,EAASrB,KAEtDqB,EAAQrB,GAAQ+B,EAAM/B,QAO1BjD,EAAKmB,EAAe,SAAS+B,GAC5BA,EAAQ+B,SAASpG,KAAKqE,EAASW,EAAOf,KAIvCe,EAAMD,YAAYU,GAOlB3C,EAAMU,YAAcwB,EAOpBlC,EAAMW,KAAOuB,EASbA,EAAMtB,YAAa,EACZsB,EAORb,GAAW,UAEViC,SAAW,SAASpB,GACnB,GAAIqB,GAAgBrC,KAAKS,UAUzBO,GAAMsB,kBAAoB,SAASlC,EAAMP,GACxC,MAAOmB,GAAMD,YAAYX,EAAMP,EAAUwC,IAU1CrB,EAAMuB,qBAAuB,SAASnC,GACrC,MAAOY,GAAMO,eAAec,EAAgBjC,KAG9CiB,UAAY,SAASL,EAAOf,EAAQG,EAAMP,GAErC1B,EAAcrC,KAAKsE,IAIvBpB,EAAqBgC,EAAOZ,EAAOrE,EAAW8D,KAAcA,EAASH,WAAc3C,EAAM,WAExF,MAAO8C,GAASK,MAAMc,EAAOhD,YAC3B6B,GAAYA,IAEhB2B,aAAe,SAASR,EAAOZ,GAE9B,IAAIjC,EAAcrC,KAAKsE,GAAvB,CAIAY,EAAMZ,GAAQ,IAEd,WACQY,GAAMZ,GACZ,MAAOU,SASXX,EAAW,UAEViC,SAAW,SAASpB,GACnB,GAAIqB,GAAgBrC,KAAKS,UAUzBO,GAAMwB,qBAAuB,SAASpC,EAAMP,GAC3C,MAAOmB,GAAMD,YAAYX,EAAMP,EAAUwC,KAG3ChB,UAAY,SAASL,EAAOf,EAAQG,EAAMP,GAEzCb,EAAqBgC,EAAMxF,UAAW4E,EAAMP,MAQ9CM,EAAW,SAEViC,SAAW,SAASpB,GACnB,GAAIqB,GAAgBrC,KAAKS,UAWzBO,GAAMyB,mBAAqB,SAASrC,EAAMP,GACzC,MAAOmB,GAAMD,YAAYX,EAAMP,EAAUwC,KAG3ChB,UAAY,SAASL,EAAOf,EAAQG,EAAMP,GAEzCkB,EAAYC,EAAOf,EAAQG,EAAM,WAChC,MAAOJ,MAAKH,GAAUK,MAAMF,KAAMhC,gBASrCmC,EAAW,QAEViC,SAAW,SAASpB,EAAOf,GAC1B,GAAII,GAAUL,IASdgB,GAAM0B,UAAYzC,EAAOyC,cAAgB/F,MAAM,GAU/CqE,EAAM2B,iBAAmB,SAASvC,EAAMP,GACvC,MAAOmB,GAAMD,YAAYX,EAAMP,EAAUQ,EAAQI,aAUlDO,EAAM4B,oBAAsB,SAASxC,GACpC,MAAOY,GAAMO,eAAelB,EAAQI,WAAaL,KAGnDiB,UAAY,SAASL,EAAOf,EAAQG,EAAMP,GAEzC,GAAItD,GAAIK,EAAQoE,EAAM0B,SAAUtC,EACxB,GAAJ7D,GAASR,EAAW8D,KAAcA,EAASH,YAE9CsB,EAAM0B,SAAShC,KAAKN,GAGrBW,EAAYC,EAAOf,EAAQG,EAAMP,IAElC2B,aAAe,SAASR,EAAOZ,GAE9B,GAAI7D,GAAIK,EAAQoE,EAAM0B,SAAUtC,EACxB,GAAJ7D,IAGJyE,EAAM0B,SAAS7B,OAAOtE,EAAG,GAGzBY,EAAK6D,EAAM1B,SAAU,SAAS9C,GACzBI,EAAQJ,EAAEkG,SAAUtC,GAAQ,KAAO3E,EAAOO,KAAKQ,EAAEhB,UAAW4E,IAC/D5D,EAAEoG,oBAAoBxC,KAIxBmB,EAAeP,EAAOZ,KAEvBwB,OAAS,SAASiB,EAAU7B,GAC3B,GAAI0B,GAAW1B,EAAM0B,UAAY,IAEhB,QAAbA,GAAyC,IAApBA,EAASrH,QAIlC8B,EAAKuF,EAAU,SAASxD,GACvBF,EAAqB6D,EAAU3D,EAAM,WAEpC,GAAInB,GAAOrB,EAAYsB,UAIvB,OAFAD,GAAK+E,QAAQ9C,MAENgB,EAAMxF,UAAU0D,GAAMgB,MAAM2C,EAAU9E,SAUjD,IAAIgF,GAAWlE,GAOdxB,QAAU,KAOV+C,KAAO,KAOP4C,OAAS,KAOTC,SAAW,KAOXC,MAAQ,KAQRC,UAAY,KAOZC,MAAQ,KAURC,OAAS,KAWTC,OAAS,KAaTlE,KAAO,SAAS/B,EAAS+C,EAAMgD,GAE9B,IAAK/F,EACJ,KAAUiD,OAAM,gDAGjBN,MAAK3C,QAAUA,EAEf2C,KAAKI,KAAOA,EAEZJ,KAAKgD,UAELhD,KAAKiD,UAAW,EAEhBjD,KAAKkD,MAAQ,EAEblD,KAAKmD,UAAY,KAEH,OAAVC,GAAmC,gBAAVA,IAC5BpD,KAAKqD,OAAStH,EAAWqH,EAAMG,KAAOH,EAAMG,IAAM,KAClDvD,KAAKsD,OAASvH,EAAWqH,EAAMI,KAAOJ,EAAMI,IAAM,KAClDxD,KAAKoD,MAAQA,EAAMA,MACnBpD,KAAKiD,SAAqC,iBAAnBG,GAAMH,SAAyBG,EAAMH,UAAW,EACvEjD,KAAKkD,MAA+B,gBAAhBE,GAAMF,MAAqBE,EAAMF,MAAQ,GAG7DlD,KAAKoD,MAAQA,GASfG,IAAM,WAEL,MAAOvD,MAAKqD,OAASrD,KAAKqD,OAAOrH,KAAKgE,KAAK3C,QAAS2C,KAAKoD,OAASpD,KAAKoD,OASxEI,IAAM,SAASJ,GACd,GAAIK,GAAWzD,KAAKoD,MAAO/F,EAAU2C,KAAK3C,OAE1C,OAAK2C,MAAKiD,UAIVjD,KAAKoD,MAAQpD,KAAKsD,OAAStD,KAAKsD,OAAOtH,KAAKqB,EAAS+F,EAAOK,GAAYL,EAEpEpD,KAAKoD,QAAUK,GAElBzD,KAAK0D,OAECrG,GATCA,GAiBTqG,KAAO,WACN,GAAIjE,GAAOO,KAAMjC,EAAOrB,EAAYsB,UAYpC,OAXIgC,MAAKkD,MAAQ,GACO,OAAnBlD,KAAKmD,WACRvI,EAAK+I,aAAa3D,KAAKmD,WAExBnD,KAAKmD,UAAYvI,EAAKgJ,WAAW,WAChCnE,EAAK0D,UAAY,KACjB1D,EAAKoE,aAAa9F,IAChBiC,KAAKkD,QAERlD,KAAK6D,aAAa9F,GAEZiC,KAAK3C,SASbwG,aAAe,SAAS9F,GACvB,GAAIxB,GAAI,EAAGgB,EAAIyC,KAAKgD,OAAO3H,OAAQgC,EAAU2C,KAAK3C,QAAS2F,EAAShD,KAAKgD,MAGzE,KAFAjF,EAAK+E,QAAQ9C,KAAKoD,OAEP7F,EAAJhB,IAASA,EACfyG,EAAOzG,GAAG2D,MAAM7C,EAASU,IAW3B+F,YAAc,SAASC,GAEtB,IAAKhI,EAAWgI,GACf,KAAUzD,OAAM,wDAIjB,OADAN,MAAKgD,OAAOhD,KAAKgD,OAAO3H,QAAU0I,EAC3B/D,KAAK3C,SAUb2G,KAAO,SAASD,GAEf,IAAKhI,EAAWgI,GACf,KAAUzD,OAAM,iDAEjB,IAAIb,GAAOO,KAAMvC,EAAO,WACvBgC,EAAKwE,eAAexG,GACpBsG,EAAS7D,MAAMF,KAAMhC,WAItB,OAFAP,GAAKsG,SAAWA,EAChB/D,KAAK8D,YAAYrG,GACVuC,KAAK3C,SAUb4G,eAAiB,SAASF,GAEzB,IAAKhI,EAAWgI,GACf,KAAUzD,OAAM,2DAKjB,KAFA,GAAIjD,GAAU2C,KAAK3C,QAAS2F,EAAShD,KAAKgD,OAAQkB,EAAQ,GAAI3H,EAAI,EAAGlB,EAAS2H,EAAO3H,OAE1EA,EAAJkB,IAAcA,EACpB,GAAIyG,EAAOzG,KAAOwH,GAAaf,EAAOzG,GAAGwH,UAAYf,EAAOzG,GAAGwH,WAAaA,EAAW,CACtFG,EAAQ3H,CACR,OAGF,MAAY,GAAR2H,EACI7G,GAER2F,EAAOnC,OAAOtE,EAAG,GACVc,IAQR8G,mBAAqB,WAKpB,MAHAnE,MAAKgD,OAAS,KAEdhD,KAAKgD,UACEhD,KAAK3C,SAQb+G,UAAY,WAEX,MAAOpE,MAAKgD,QAQbqB,QAAU,WAET,MAAOrE,MAAKoD,OAASpD,KAAKoD,MAAMiB,QAAUrE,KAAKoD,MAAMiB,UAAYrE,KAAKoD,OAQvEpI,SAAW,WAEV,MAAO,aAAegF,KAAKI,KAAO,MAepC2C,GAASvH,UAAU8I,GAAKvB,EAASvH,UAAUsI,YAG3ChJ,EAAYiI,SAAWA,EAMvB5C,EAAW,cAEViC,SAAW,SAASpB,EAAOf,GAC1B,GAAII,GAAUL,IASdgB,GAAMuD,WAAazG,KAAWmC,EAAOsE,gBAUrCvD,EAAMwD,sBAAwB,SAASpE,EAAMP,GAC5C,MAAOmB,GAAMD,YAAYX,EAAMP,EAAUQ,EAAQI,aAUlDO,EAAMyD,yBAA2B,SAASrE,GACzC,MAAOY,GAAMO,eAAelB,EAAQI,WAAaL,KAGnDiB,UAAY,SAASL,EAAOf,EAAQG,EAAMP,GAEzCmB,EAAMuD,WAAWnE,GAAQP,EAEzBb,EAAqBgC,EAAMxF,UAAW4E,EAAM,MAE5CjD,EAAK6D,EAAM1B,SAAU,SAAS9C,GAExBf,EAAOO,KAAKQ,EAAE+H,WAAYnE,IAC9B5D,EAAEgI,sBAAsBpE,EAAMP,MAIjC2B,aAAe,SAASR,EAAOZ,GAE9B,GAAIL,GAAMiB,EAAMuD,WAAWnE,EAE3BjD,GAAK6D,EAAM1B,SAAU,SAAS9C,GAEzBA,EAAE+H,WAAWnE,KAAUL,GAC1BvD,EAAEiI,yBAAyBrE,KAI7BY,EAAMuD,WAAWnE,GAAQ,IAEzB,WACQY,GAAMuD,WAAWnE,GACvB,MAAOU,MAGVc,OAAS,SAASiB,EAAU7B,GAC3B,GAAI9B,GAAMwF,EAAc1D,EAAMuD,YAAc,IAE5C,IAAoB,OAAhBG,EAIJ,IAAKxF,IAAQwF,GACRjJ,EAAOO,KAAK0I,EAAaxF,KAC5B2D,EAAS3D,GAAQ,GAAI6D,GAASF,EAAU3D,EAAMwF,EAAYxF,OAU9D,IAIAyF,GAAcC,EAAkBC,EAAeC,EAJ3CC,KAEJC,EAAmB,SAInBC,EAAU,SAASC,EAAWjI,GAQ7B,MANAE,GAAK+H,EAAW,SAASC,GACnBlI,EAAKkI,KACTlI,EAAKkI,OAENlI,EAAOA,EAAKkI,KAENlI,GAGRmI,EAAc,SAASD,EAAIE,EAAKC,GAE/B,GAAmB,gBAARD,GAAkB,CAE5B,GADAC,EAAMH,EAAG5B,IAAI8B,IACRC,EACJ,KAAUhF,OAAM,yBAA2B+E,EAAM,eAElD,OAAOC,GAIR,MAAQpJ,GAAQmJ,GAAa7H,EAAI6H,EAAK,SAASnG,GAC9C,MAAOkG,GAAYD,EAAIjG,KADDmG,GAMpBE,EAAY1G,GAQfuB,KAAO,KAQPkF,IAAM,KAUNlG,KAAO,SAASgB,GACfJ,KAAKI,KAAOA,EACZJ,KAAKsF,QAaNzG,OAAS,WAER,GAAId,GAAOrB,EAAYsB,WAEvBwH,EAAWzH,EAAKE,QAEhBiH,EAAYM,EAASrK,MAAM,KAE3BiF,EAAO8E,EAAUO,MAEjBhG,EAAOO,KAEPsF,EAAML,EAAQC,EAAWzF,GAGzBiG,EAAI7G,EAAOqB,MAAM,KAAM1C,EAAIO,EAAM,SAASL,GACzC,MAAO0H,GAAY3F,EAAM/B,KAsB1B,OAnBAgI,GAAEC,OAASvF,EACXsF,EAAEE,YAAcJ,EAEhBE,EAAE5H,OAAS4H,EAAElK,UAAUsC,OAAS,WAC/B,MAAOe,GAAOqB,MAAM,MAAQwF,GAAI1D,OAAOxE,EAAIQ,UAAW,SAASN,GAC9D,MAAO0H,GAAY3F,EAAM/B,QAI3BgI,EAAEf,aAAe,WAChB,MAAOlF,IAERiG,EAAE1K,SAAW,WACZ,MAAO,WAAawK,EAAW,KAGhCF,EAAIlF,GAAQsF,EACZjG,EAAK6F,IAAIE,GAAYE,EAEdA,GAURG,QAAU,SAASC,GAElB,GAAIJ,GAEJR,EAAYY,EAAU3K,MAAM,KAE5BiF,EAAO8E,EAAUO,MAEjBhG,EAAOO,KAAMsF,EAAMtF,KAEnB+F,EAAQ/F,KAAKsF,GAYb,OATAnI,GAAK+H,EAAW,SAASC,GAExB,MAAKG,GAAIH,IAITG,EAAMA,EAAIH,GAAVG,IAHCA,EAAM,MACC,KAKJA,GAILI,EAAIJ,EAAIlF,KAMRjD,EAAKuI,EAAEpG,SAAU,SAAS5B,GACzB+B,EAAKoG,QAAQnI,EAAEkI,eAGZF,EAAErG,WAAWC,WAChBoG,EAAErG,WAAWC,SAAW3B,EAAO+H,EAAErG,WAAWC,SAAUoG,IAGvDvI,EAAK4I,EAAO,SAASrI,EAAGlB,GACnBA,IAAMsJ,GAAsC,IAAzBtJ,EAAEI,QAAQkJ,IAChCrG,EAAKoG,QAAQnI,EAAEkI,qBAIVN,GAAIlF,SAEJ2F,GAAMD,GAEN9F,MArBCA,KANAA,MAqCTgG,OAAS,SAASF,GACjB,QAAS9F,KAAKsF,IAAIQ,IAUnBvC,IAAM,SAASnD,GACd,GAAIL,EAEJ,OAAIC,MAAKsF,IAAIlF,GACLJ,KAAKsF,IAAIlF,IAGjBL,EAAMC,KAAKiG,KAAK7F,GAEJ,OAARL,EACIA,EAGJC,KAAKI,OAAS4E,EACVF,IAAqBvB,IAAInD,GAG1B,OAER6F,KAAO,SAAS7F,GACf,MAAOJ,MAAKsF,IAAIlF,IAAS,MAU1B8F,cAAgB,SAASC,GAExB,IAAKpK,EAAWoK,GACf,KAAU7F,OAAM,2DAGjB,OADAN,MAAKiG,KAAOE,EACLnG,MASRoG,QAAU,WACT,MAAOpG,MAAKI,MASbpF,SAAW,WACV,MAAO,cAAgBgF,KAAKI,KAAO,MAYrCuE,GAAe,SAASO,GAEvB,MAAIA,aAAqBK,GACjBL,GAGRA,EAAYA,GAAaF,EAEpBD,EAAWG,KACfH,EAAWG,GAAa,GAAIK,GAAUL,IAEhCH,EAAWG,KAUnBN,EAAmB,SAASM,GAEvBA,YAAqBK,KACxBL,EAAYA,EAAU9E,MAGnB8E,IAAcF,SAIXD,GAAWG,IAWnBL,EAAgB,SAASK,GAExB,IADA,GAA8CnF,GAA1CoF,EAAKD,EAAU/J,MAAM,KAAMoC,EAAI4H,EAAG9J,OACQ,MAAtC0E,EAAMoF,EAAGxI,MAAM,EAAGY,KAAK8I,KAAK,OACnC,GAAItB,EAAWhF,GACd,MAAOgF,GAAWhF,EAGpB,OAAO,OAUR+E,EAAqB,WACpB,MAAOH,GAAaK,IAIrBlH,EAAOhD,GAENyK,UAAYA,EACZZ,aAAeA,EACfC,iBAAmBA,EACnBC,cAAgBA,EAChBC,mBAAqBA,EASrBwB,OAASxB,IAGTG,QAAU,SAASC,EAAWjI,GAC7B,MAAOgI,GAAQC,EAAU/J,MAAM,KAAM8B,GAAQrC,SAQ/C,IAAI2L,GAAsB,IAE1BC,GAAW3H,GACV8C,OAAS,WACR,GAAyDwD,GAAIpF,EAAzDhC,EAAOrB,EAAYsB,WAAY3C,EAAS0C,EAAK1C,MAEjD,OAAe,KAAXA,EACIsJ,IAGe,gBAAZ5G,GAAK,GAEA,IAAX1C,GACH0E,EAAMhC,EAAK,GAAG5C,MAAMoL,GACpBpB,EAAKR,EAAa5E,EAAI,IAElBA,EAAI,GACAoF,EAAG5B,IAAIxD,EAAI,IAGZoF,GAGO,IAAX9J,GAAmC,gBAAZ0C,GAAK,GACxB4G,EAAa5G,EAAK,IAAIwF,IAAIxF,EAAK,KAGvCgC,EAAMhC,EAAKE,QAAQ9C,MAAMoL,GACzBpB,EAAKR,EAAa5E,EAAI,IAElBA,EAAI,IACPhC,EAAK+E,QAAQ/C,EAAI,IAGXoF,EAAGtG,OAAOqB,MAAMiF,EAAIpH,IAGrBc,EAAOqB,MAAM,KAAMnC,IAO3BqB,KAAO,WACN,GAAmCqH,GAAQ1G,EAAvChC,EAAOrB,EAAYsB,UACvB,IAAkB,EAAdD,EAAK1C,OACR,KAAUiF,OAAM,0CAKjB,OAHAmG,GAASvK,EAAQ6B,EAAKA,EAAK1C,OAAS,IAAM0C,EAAK0H,SAC/C1F,EAAMyG,GAAS7E,OAAOzB,MAAM,KAAMnC,GAE9BgC,EAAIL,WACAK,EAAI8B,UAAU4E,GAGf1G,IA0CT,IArCAjC,EAAO0I,GAAU1L,GAShB4L,QAAU,WAGV7H,OAASA,EACTsB,WAAaA,EACbQ,cAAgBA,EAWhB7C,OAASA,IAIY,kBAAX6I,SAAyBA,OAAOC,KAI1CD,OAAO,WACN,MAAOH,MAGa,mBAAXK,SAA0BA,OAAOC,QAG3CD,OAAOC,QAAUN,GAQjBA,GAASA,SAAWA,OACd,CAEN,GAAIO,IAAanM,EAAK4L,QAGtB5L,GAAK4L,SAAWA,GAehBA,GAASQ,WAAa,WAMrB,MALID,MAAelM,QACXD,GAAK4L,SAEZ5L,EAAK4L,SAAWO,GAEVP,OAKNxG"}

0 comments on commit b85a7f2

Please sign in to comment.
Something went wrong with that request. Please try again.