diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index 84fc150c9..0f82e3e88 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -27,6 +27,7 @@ @import "CPAccordionView.j" @import "CPAlert.j" @import "CPAnimation.j" +@import "CPAnimationContext.j" @import "CPAppearance.j" @import "CPApplication.j" @import "CPArrayController.j" @@ -107,6 +108,7 @@ @import "CPTreeNode.j" @import "CPUserDefaultsController.j" @import "CPView.j" +@import "CPViewAnimator.j" @import "CPViewAnimation.j" @import "CPViewController.j" @import "CPVisualEffectView.j" diff --git a/AppKit/CPCompatibility.j b/AppKit/CPCompatibility.j index 1a48ab7ff..d70ffeda3 100644 --- a/AppKit/CPCompatibility.j +++ b/AppKit/CPCompatibility.j @@ -369,6 +369,18 @@ function CPBrowserStyleProperty(aProperty) r = candidates[PLATFORM_STYLE_JS_PROPERTIES['transform']] || nil; break; + case 'animationend': + var candidates = { + 'WebkitAnimation' : 'webkitAnimationEnd', + 'MozAnimation' : 'animationend', + 'OAnimation' : 'oAnimationEnd', + 'msAnimation' : 'MSAnimationEnd', + 'animation' : 'animationend' + }; + + r = candidates[PLATFORM_STYLE_JS_PROPERTIES['animation']] || nil; + break; + default: var prefixes = ["Webkit", "Moz", "O", "ms"], strippedProperty = aProperty.split('-').join(' '), diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 9df035abb..669f21122 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -243,6 +243,9 @@ var CPViewHighDPIDrawingEnabled = YES; CPMutableArray _trackingAreas @accessors(getter=trackingAreas, copy); BOOL _inhibitUpdateTrackingAreas; + + id _animator; + CPDictionary _animationsDictionary; } /* @@ -389,6 +392,9 @@ var CPViewHighDPIDrawingEnabled = YES; _DOMImageSizes = []; #endif + _animator = nil; + _animationsDictionary = @{}; + [self _setupViewFlags]; [self _loadThemeAttributes]; } diff --git a/AppKit/CoreAnimation/CAAnimation.j b/AppKit/CoreAnimation/CAAnimation.j index 2f13f5d8b..77c53745b 100644 --- a/AppKit/CoreAnimation/CAAnimation.j +++ b/AppKit/CoreAnimation/CAAnimation.j @@ -30,8 +30,10 @@ */ @implementation CAAnimation : CPObject { - BOOL _isRemovedOnCompletion; - id _delegate; + BOOL _isRemovedOnCompletion; + id _delegate; + CAMediaTimingFunction _timingFunction @accessors(property=timingFunction); + double _duration @accessors(property=duration); } /*! @@ -47,8 +49,10 @@ { self = [super init]; - if (self) - _isRemovedOnCompletion = YES; + _isRemovedOnCompletion = YES; + _timingFunction = nil; + _duration = 0.0; + _delegate = nil; return self; } @@ -102,7 +106,7 @@ - (CAMediaTimingFunction)timingFunction { // Linear Pacing - return nil; + return _timingFunction; } /*! @@ -127,131 +131,4 @@ [anObject addAnimation:self forKey:aKey]; } -@end - -/* - -*/ -@implementation CAPropertyAnimation : CAAnimation -{ - CPString _keyPath; - - BOOL _isCumulative; - BOOL _isAdditive; -} - -+ (id)animationWithKeyPath:(CPString)aKeyPath -{ - var animation = [self animation]; - - [animation setKeyPath:aKeyPath]; - - return animation; -} - -- (void)setKeyPath:(CPString)aKeyPath -{ - _keyPath = aKeyPath; -} - -- (CPString)keyPath -{ - return _keyPath; -} - -- (void)setCumulative:(BOOL)isCumulative -{ - _isCumulative = isCumulative; -} - -- (BOOL)cumulative -{ - return _isCumulative; -} - -- (BOOL)isCumulative -{ - return _isCumulative; -} - -- (void)setAdditive:(BOOL)isAdditive -{ - _isAdditive = isAdditive; -} - -- (BOOL)additive -{ - return _isAdditive; -} - -- (BOOL)isAdditive -{ - return _isAdditive; -} - -@end - -/*! - A CABasicAnimation is a simple animation that moves a - CALayer from one point to another over a specified - period of time. -*/ -@implementation CABasicAnimation : CAPropertyAnimation -{ - id _fromValue; - id _toValue; - id _byValue; -} - -/*! - Sets the starting position for the animation. - @param aValue the animation starting position -*/ -- (void)setFromValue:(id)aValue -{ - _fromValue = aValue; -} - -/*! - Returns the animation's starting position. -*/ -- (id)fromValue -{ - return _fromValue; -} - -/*! - Sets the ending position for the animation. - @param aValue the animation ending position -*/ -- (void)setToValue:(id)aValue -{ - _toValue = aValue; -} - -/*! - Returns the animation's ending position. -*/ -- (id)toValue -{ - return _toValue; -} - -/*! - Sets the optional byValue for animation interpolation. - @param aValue the byValue -*/ -- (void)setByValue:(id)aValue -{ - _byValue = aValue; -} - -/*! - Returns the animation's byValue. -*/ -- (id)byValue -{ - return _byValue; -} - -@end +@end \ No newline at end of file diff --git a/AppKit/CoreAnimation/CABasicAnimation.j b/AppKit/CoreAnimation/CABasicAnimation.j new file mode 100644 index 000000000..e6b8ca49a --- /dev/null +++ b/AppKit/CoreAnimation/CABasicAnimation.j @@ -0,0 +1,84 @@ +@import + +@import "CAPropertyAnimation.j" + +/*! + A CABasicAnimation is a simple animation that moves a + CALayer from one point to another over a specified + period of time. +*/ +/*! + A CABasicAnimation is a simple animation that moves a + CALayer from one point to another over a specified + period of time. +*/ +@implementation CABasicAnimation : CAPropertyAnimation +{ + id _fromValue; + id _toValue; + id _byValue; +} + +- (id)init +{ + self = [super init]; + + _fromValue = nil; + _toValue = nil; + _byValue = nil; + + return self; +} + +/*! + Sets the starting position for the animation. + @param aValue the animation starting position +*/ +- (void)setFromValue:(id)aValue +{ + _fromValue = aValue; +} + +/*! + Returns the animation's starting position. +*/ +- (id)fromValue +{ + return _fromValue; +} + +/*! + Sets the ending position for the animation. + @param aValue the animation ending position +*/ +- (void)setToValue:(id)aValue +{ + _toValue = aValue; +} + +/*! + Returns the animation's ending position. +*/ +- (id)toValue +{ + return _toValue; +} + +/*! + Sets the optional byValue for animation interpolation. + @param aValue the byValue +*/ +- (void)setByValue:(id)aValue +{ + _byValue = aValue; +} + +/*! + Returns the animation's byValue. +*/ +- (id)byValue +{ + return _byValue; +} + +@end \ No newline at end of file diff --git a/AppKit/CoreAnimation/CAKeyframeAnimation.j b/AppKit/CoreAnimation/CAKeyframeAnimation.j new file mode 100644 index 000000000..d0c135e1d --- /dev/null +++ b/AppKit/CoreAnimation/CAKeyframeAnimation.j @@ -0,0 +1,23 @@ +@import + +@import "CAPropertyAnimation.j" + +@implementation CAKeyframeAnimation : CAPropertyAnimation +{ + CPArray _values @accessors(property=values); + CPArray _keyTimes @accessors(property=keyTimes); + CPArray _timingFunctions @accessors(property=timingFunctions); +} + +- (id)init +{ + self = [super init]; + + _values = [CPArray array]; + _keyTimes = [CPArray array]; + _timingFunctions = [CPArray array]; + + return self; +} + +@end \ No newline at end of file diff --git a/AppKit/CoreAnimation/CAPropertyAnimation.j b/AppKit/CoreAnimation/CAPropertyAnimation.j new file mode 100644 index 000000000..c2eded4f1 --- /dev/null +++ b/AppKit/CoreAnimation/CAPropertyAnimation.j @@ -0,0 +1,74 @@ + +@import + +@import "CAAnimation.j" + +@implementation CAPropertyAnimation : CAAnimation +{ + CPString _keyPath; + + BOOL _isCumulative; + BOOL _isAdditive; +} + +- (id)init +{ + self = [super init]; + + _keyPath = nil; + _isCumulative = NO; + _isAdditive = NO; + + return self; +} + ++ (id)animationWithKeyPath:(CPString)aKeyPath +{ + var animation = [self animation]; + + [animation setKeyPath:aKeyPath]; + + return animation; +} + +- (void)setKeyPath:(CPString)aKeyPath +{ + _keyPath = aKeyPath; +} + +- (CPString)keyPath +{ + return _keyPath; +} + +- (void)setCumulative:(BOOL)isCumulative +{ + _isCumulative = isCumulative; +} + +- (BOOL)cumulative +{ + return _isCumulative; +} + +- (BOOL)isCumulative +{ + return _isCumulative; +} + +- (void)setAdditive:(BOOL)isAdditive +{ + _isAdditive = isAdditive; +} + +- (BOOL)additive +{ + return _isAdditive; +} + +- (BOOL)isAdditive +{ + return _isAdditive; +} + +@end diff --git a/AppKit/CoreAnimation/CPAnimationContext.j b/AppKit/CoreAnimation/CPAnimationContext.j new file mode 100644 index 000000000..3281d10d0 --- /dev/null +++ b/AppKit/CoreAnimation/CPAnimationContext.j @@ -0,0 +1,707 @@ +@import "CABasicAnimation.j" +@import "CAKeyframeAnimation.j" +@import "CPView.j" + +@import + +@import "jshashtable.j" +@import "CSSAnimation.j" + +@typedef HashTable; + +var _CPAnimationContextStack = nil, + _animationFlushingObserver = nil, + _animationFrameUpdaters = {}; + +@implementation CPAnimationContext : CPObject +{ + double _duration @accessors(property=duration); + CAMediaTimingFunction _timingFunction @accessors(property=timingFunction); + Function _completionHandlerAgent; + HashTable _animationsByObject; +} + ++ (id)currentContext +{ + var contextStack = [self contextStack], + context = [contextStack lastObject]; + + if (!context) + { + context = [[CPAnimationContext alloc] init]; + + [contextStack addObject:context]; + [self _scheduleAnimationContextStackFlush]; + } + + return context; +} + ++ (CPArray)contextStack +{ + if (!_CPAnimationContextStack) + _CPAnimationContextStack = [CPArray array]; + + return _CPAnimationContextStack; +} + ++ (void)runAnimationGroup:(Function/*(CPAnimationContext context)*/)animationsBlock completionHandler:(Function)aCompletionHandler +{ + [CPAnimationContext beginGrouping]; + + var context = [CPAnimationContext currentContext]; + [context setCompletionHandler:aCompletionHandler]; + + animationsBlock(context); + + [CPAnimationContext endGrouping]; +} + +- (id)init +{ + self = [super init]; + + _duration = 0.0; + _timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; + _completionHandlerAgent = nil; + _animationsByObject = new Hashtable(); + + return self; +} + +- (id)copy +{ + var context = [[CPAnimationContext alloc] init]; + [context setDuration:[self duration]]; + [context setTimingFunction:[self timingFunction]]; + [context setCompletionHandler:[self completionHandler]]; + + return context; +} + ++ (void)_scheduleAnimationContextStackFlush +{ + if (!_animationFlushingObserver) + { + CPLog.debug("create new observer"); + _animationFlushingObserver = CFRunLoopObserverCreate(2, true, 0, _animationFlushingObserverCallback,0); + CFRunLoopAddObserver([CPRunLoop mainRunLoop], _animationFlushingObserver); + } +} + ++ (void)beginGrouping +{ + var newContext; + + if ([_CPAnimationContextStack count]) + { + var currentContext = [_CPAnimationContextStack lastObject]; + newContext = [currentContext copy]; + } + else + { + newContext = [[CPAnimationContext alloc] init]; + } + + [_CPAnimationContextStack addObject:newContext]; +} + ++ (BOOL)endGrouping +{ + if (![_CPAnimationContextStack count]) + return NO; + + var context = [_CPAnimationContextStack lastObject]; + [context _flushAnimations]; + [_CPAnimationContextStack removeLastObject]; + +CPLog.debug(_cmd + "context stack =" + _CPAnimationContextStack); + return YES; +} + +- (void)_enqueueActionForObject:(id)anObject keyPath:(id)aKeyPath targetValue:(id)aTargetValue animationCompletion:(id)animationCompletion +{ + var resolvedAction = [self _actionForObject:anObject keyPath:aKeyPath targetValue:aTargetValue animationCompletion:animationCompletion]; + + if (!resolvedAction) + return; + + var animByKeyPath = _animationsByObject.get(anObject); + + if (!animByKeyPath) + { + var newAnimByKeyPath = @{aKeyPath:resolvedAction}; + _animationsByObject.put(anObject, newAnimByKeyPath); + } + else + [animByKeyPath setObject:resolvedAction forKey:aKeyPath]; +} + +- (Object)_actionForObject:(id)anObject keyPath:(CPString)aKeyPath targetValue:(id)aTargetValue animationCompletion:(Function)animationCompletion +{ + var animation, + duration, + animatedKeyPath, + values, + keyTimes, + timingFunctions, + objectId; + + if (!aKeyPath || !anObject || !(animation = [anObject animationForKey:aKeyPath]) || ![animation isKindOfClass:[CAAnimation class]]) + return nil; + + duration = [animation duration] || [self duration]; + + var needsFrameTimer = (aKeyPath == @"frame" || aKeyPath == @"frameSize") && + ([anObject hasCustomLayoutSubviews] || [anObject hasCustomDrawRect]) && + (objectId = [anObject UID]); + + if (_completionHandlerAgent) + _completionHandlerAgent.increment(); + + var completionFunction = function() + { + if (needsFrameTimer) + [self stopFrameUpdaterWithIdentifier:objectId]; + else if (animationCompletion) + animationCompletion(); + + if (_completionHandlerAgent) + _completionHandlerAgent.decrement(); + }; + + if (![animation isKindOfClass:[CAPropertyAnimation class]] || !(animatedKeyPath = [animation keyPath])) + animatedKeyPath = aKeyPath; + + if ([animation isKindOfClass:[CAKeyframeAnimation class]]) + { + values = [animation values]; + keyTimes = [animation keyTimes]; + timingFunctions = [animation timingFunctionsControlPoints]; + } + else + { + var isBasicAnimation = [animation isKindOfClass:[CABasicAnimation class]], + fromValue, + toValue; + + if (!isBasicAnimation || (fromValue = [animation fromValue]) == nil) + fromValue = [anObject valueForKey:animatedKeyPath]; + + if (!isBasicAnimation || (toValue = [animation toValue]) == nil) + toValue = aTargetValue; + + values = [fromValue, toValue]; + keyTimes = [0, 1]; + timingFunctions = isBasicAnimation ? [animation timingFunctionControlPoints] : [_timingFunction controlPoints]; + } + + return { + object:anObject, + keypath:animatedKeyPath, + values:values, + keytimes:keyTimes, + duration:duration, + timingfunctions:timingFunctions, + completion:completionFunction + }; +} + +- (void)_flushAnimations +{ + if (![_CPAnimationContextStack count]) + return; + + if (_animationsByObject.size() == 0) + { + if (_completionHandlerAgent) + _completionHandlerAgent.fire(); + } + else + [self _startAnimations]; +} + +- (void)_startAnimations +{ + var targetViews = _animationsByObject.keys(), + cssAnimations = [], + timers = []; + + [targetViews enumerateObjectsUsingBlock:function(targetView, idx, stop) + { + var animByKeyPath = _animationsByObject.get(targetView); + + [animByKeyPath enumerateKeysAndObjectsUsingBlock:function(aKey, anAction, stop) + { + [self getAnimations:cssAnimations getTimers:timers forView:targetView usingAction:anAction rootView:targetView cssAnimate:YES]; + }]; + + _animationsByObject.remove(targetView); + }]; + +// start timers + var k = timers.length; + while(k--) + { + CPLog.debug("START TIMER " + timers[k].identifier()); + timers[k].start(); + } + +// start css animations + var n = cssAnimations.length; + while(n--) + { + CPLog.debug("START ANIMATION " + cssAnimations[n].animationsnames); + cssAnimations[n].start(); + } +} + +- (void)getAnimations:(CPArray)cssAnimations getTimers:(CPArray)timers forView:(CPView)aTargetView usingAction:(Object)anAction rootView:(CPView)rootView cssAnimate:(BOOL)needsCSSAnimation +{ + var keyPath = anAction.keypath, + isFrameKeyPath = (keyPath == @"frame" || keyPath == @"frameSize"), + customLayout = [aTargetView hasCustomLayoutSubviews], + customDrawing = [aTargetView hasCustomDrawRect], + needsFrameTimer = isFrameKeyPath && (customLayout || customDrawing); + + if (needsCSSAnimation) + { + var identifier = [aTargetView UID], + duration = anAction.duration, + timingFunctions = anAction.timingfunctions, + properties = [], + valueFunctions = [], + cssAnimation = nil; + + [cssAnimations enumerateObjectsUsingBlock:function(anim, idx, stop) + { + if (anim.identifier == identifier) + { + cssAnimation = anim; + stop(YES); + } + }]; + + if (cssAnimation == nil) + { + var domElement = [aTargetView DOMElementForKeyPath:keyPath]; + cssAnimation = new CSSAnimation(domElement, identifier); + cssAnimations.push(cssAnimation); + } + + var css_mapping = [[aTargetView class] cssPropertiesForKeyPath:keyPath]; + + [css_mapping enumerateObjectsUsingBlock:function(aDict, anIndex, stop) + { + var completionFunction = (anIndex == 0) ? anAction.completion : null; + var property = [aDict objectForKey:@"property"], + getter = [aDict objectForKey:@"value"]; + + cssAnimation.addPropertyAnimation(property, getter, duration, anAction.keytimes, anAction.values, timingFunctions, completionFunction); + }]; + + if (needsFrameTimer) + cssAnimation.setRemoveAnimationPropertyOnCompletion(false); + } + + if (needsFrameTimer) + { + var timer = [self addFrameUpdaterWithIdentifier:[rootView UID] forView:aTargetView keyPath:keyPath duration:anAction.duration]; + + if (timer) + timers.push(timer); + } + + var subviews = [aTargetView subviews], + count = [subviews count]; + + if (count && isFrameKeyPath) + { + var frameTimerId = [rootView UID], + lastIndex = count - 1; + + [subviews enumerateObjectsUsingBlock:function(aSubview, idx, stop) + { + var action = [self actionFromAction:anAction forAnimatedSubview:aSubview], + targetFrame = [action.values lastObject]; + + if (CGRectEqualToRect([aSubview frame], targetFrame)) + return; + + if ([aSubview hasCustomDrawRect]) + { + action.completion = function() + { + [aSubview setFrame:targetFrame]; + CPLog.debug(aSubview + " setFrame: "); + + if (idx == lastIndex) + [self stopFrameUpdaterWithIdentifier:frameTimerId]; + }; + } + + [self getAnimations:cssAnimations getTimers:timers forView:aSubview usingAction:action rootView:rootView cssAnimate:!customLayout]; + }]; + } +} + +- (Object)actionFromAction:(Object)anAction forAnimatedSubview:(CPView)aView +{ + var targetValue = [anAction.values lastObject], + endFrame, + values; + + if (anAction.keypath == @"frame") + targetValue = targetValue.size; + + endFrame = [aView frameWithNewSuperviewSize:targetValue]; + values = [[aView frame], endFrame]; + + return { + object:aView, + keypath:"frame", + values:values, + keytimes:[0, 1], + duration:anAction.duration, + timingfunctions:anAction.timingFunctions + }; +} + +- (Function)addFrameUpdaterWithIdentifier:(CPString)anIdentifier forView:(CPView)aView keyPath:(CPString)aKeyPath duration:(float)aDuration +{ + var frameUpdater = _animationFrameUpdaters[anIdentifier], + result = nil; + + if (frameUpdater == null) + { + frameUpdater = new FrameUpdater(anIdentifier); + _animationFrameUpdaters[anIdentifier] = frameUpdater; + result = frameUpdater; + } + + frameUpdater.addTarget(aView, aKeyPath, aDuration); + + return result; +} + +- (void)stopFrameUpdaterWithIdentifier:(CPString)anIdentifier +{ + var frameUpdater = _animationFrameUpdaters[anIdentifier]; + + if (frameUpdater) + { + frameUpdater.stop(); + delete _animationFrameUpdaters[anIdentifier]; + } + else + CPLog.warn("Could not find FrameUpdater with identifier " + anIdentifier); +} + +- (void)setCompletionHandler:(Function)aCompletionHandler +{ + if (_completionHandlerAgent) + _completionHandlerAgent.invalidate(); + + _completionHandlerAgent = aCompletionHandler ? (new CompletionHandlerAgent(aCompletionHandler)) : nil; +} + +- (void)completionHandler +{ + if (!_completionHandlerAgent) + return nil; + + return _completionHandlerAgent.completionHandler(); +} + +@end + +@implementation CPView (CPAnimationContext) + +- (CGRect)frameWithNewSuperviewSize:(CGSize)newSize +{ + var mask = [self autoresizingMask]; + + if (mask == CPViewNotSizable) + return _frame; + + var oldSize = _superview._frame.size, + newFrame = CGRectMakeCopy(_frame), + dX = newSize.width - oldSize.width, + dY = newSize.height - oldSize.height, + evenFractionX = 1.0 / ((mask & CPViewMinXMargin ? 1 : 0) + (mask & CPViewWidthSizable ? 1 : 0) + (mask & CPViewMaxXMargin ? 1 : 0)), + evenFractionY = 1.0 / ((mask & CPViewMinYMargin ? 1 : 0) + (mask & CPViewHeightSizable ? 1 : 0) + (mask & CPViewMaxYMargin ? 1 : 0)), + baseX = (mask & CPViewMinXMargin ? _frame.origin.x : 0) + + (mask & CPViewWidthSizable ? _frame.size.width : 0) + + (mask & CPViewMaxXMargin ? oldSize.width - _frame.size.width - _frame.origin.x : 0), + baseY = (mask & CPViewMinYMargin ? _frame.origin.y : 0) + + (mask & CPViewHeightSizable ? _frame.size.height : 0) + + (mask & CPViewMaxYMargin ? oldSize.height - _frame.size.height - _frame.origin.y : 0); + + + if (mask & CPViewMinXMargin) + newFrame.origin.x += dX * (baseX > 0 ? _frame.origin.x / baseX : evenFractionX); + if (mask & CPViewWidthSizable) + newFrame.size.width += dX * (baseX > 0 ? _frame.size.width / baseX : evenFractionX); + + if (mask & CPViewMinYMargin) + newFrame.origin.y += dY * (baseY > 0 ? _frame.origin.y / baseY : evenFractionY); + if (mask & CPViewHeightSizable) + newFrame.size.height += dY * (baseY > 0 ? _frame.size.height / baseY : evenFractionY); + + return newFrame; +} + +- (BOOL)hasCustomDrawRect +{ + return self._viewClassFlags & 1; +} + +- (BOOL)hasCustomLayoutSubviews +{ + return self._viewClassFlags & 2; +} + +@end + +@implementation CAMediaTimingFunction (Additions) + +- (CPArray)controlPoints +{ + return [_c1x, _c1y, _c2x, _c2y]; +} + +@end + +@implementation CAAnimation (Additions) + +- (CPArray)timingFunctionControlPoints +{ + if (_timingFunction) + return [_timingFunction controlPoints]; + + return [0, 0, 1, 1]; +} + +@end + +@implementation CAKeyframeAnimation (Additions) + +- (CPArray)timingFunctionsControlPoints +{ + var result = [CPArray array]; + + [_timingFunctions enumerateObjectsUsingBlock:function(timingFunction, idx) + { + [result addObject:[timingFunction controlPoints]]; + }]; + + return result; +} + +@end + +var CompletionHandlerAgent = function(aCompletionHandler) +{ + this._completionHandler = aCompletionHandler; + this.total = 0; + this.valid = true; +}; + +CompletionHandlerAgent.prototype.completionHandler = function() +{ + return this._completionHandler; +}; + +CompletionHandlerAgent.prototype.fire = function() +{ + this._completionHandler(); +}; + +CompletionHandlerAgent.prototype.increment = function() +{ + this.total++; +}; + +CompletionHandlerAgent.prototype.decrement = function() +{ + if (this.total <= 0) + return; + + this.total--; + + if (this.valid && this.total == 0) + { + this.fire(); + } +}; + +CompletionHandlerAgent.prototype.invalidate = function() +{ + this.valid = false; +}; + +var _animationFlushingObserverCallback = function() +{ +CPLog.debug("_animationFlushingObserverCallback"); + if ([_CPAnimationContextStack count] == 1) + { + var context = [_CPAnimationContextStack lastObject]; + [context _flushAnimations]; + [_CPAnimationContextStack removeLastObject]; + } + +CPLog.debug("_animationFlushingObserver "+_animationFlushingObserver+" stack:" + [_CPAnimationContextStack count]); + + if (_animationFlushingObserver && ![_CPAnimationContextStack count]) + { + CPLog.debug("removeObserver"); + CFRunLoopObserverInvalidate([CPRunLoop mainRunLoop], _animationFlushingObserver); + _animationFlushingObserver = nil; + } +}; + +CFRunLoopObserver = function(activities, repeats, order, callout, context) +{ + this.activities = activities; + this.repeats = repeats; + this.order = order; + this.callout = callout; + this.context = context; + + this.isvalid = true; +}; + +CFRunLoopObserverCreate = function(activities, repeats, order, callout, context) +{ + return new CFRunLoopObserver(activities, repeats, order, callout, context); +}; + +CFRunLoopAddObserver = function(runloop, observer, mode) +{ + var observers = runloop._observers; + + if (!observers) + observers = (runloop._observers = []); + + if (observers.indexOf(observer) == -1) + observers.push(observer); +}; + +CFRunLoopObserverInvalidate = function(runloop, observer, mode) +{ + CFRunLoopRemoveObserver(runloop, observer, mode); +}; + +CFRunLoopRemoveObserver = function(runloop, observer, mode) +{ + var observers = runloop._observers; + if (observers) + { + var idx = observers.indexOf(observer); + if (idx !== -1) + { + observers.splice(idx, 1); + + if (observers.length == 0) + runloop._observers = nil; + } + } +}; + +var FrameUpdater = function(anIdentifier) +{ + this._identifier = anIdentifier; + this._duration = 0; + this._stop = false; + this._targets = []; + this._callbacks = []; + var frameUpdater = this; + + this._updateFunction = function(timestamp) + { + if (frameUpdater._stop) + return; + + if (this._startDate == null) + this._startDate = timestamp; + + for (var i = 0; i < frameUpdater._callbacks.length; i++) + frameUpdater._callbacks[i](); + + if (timestamp - this._startDate < frameUpdater._duration * 1000) + window.requestAnimationFrame(frameUpdater._updateFunction); + }; +}; + +FrameUpdater.prototype.start = function() +{ + window.requestAnimationFrame(this._updateFunction); +}; + +FrameUpdater.prototype.stop = function() +{ +CPLog.debug("stop FrameUpdater with id " + this.identifier()); + + this._stop = true; + + var targets = this._targets; + + for (var i = 0; i < targets.length; i++) + { + CPLog.debug(targets[i] + " Remove animation-name property"); + targets[i]._DOMElement.style.removeProperty(CPBrowserCSSProperty("animation-name")); + } +}; + +FrameUpdater.prototype.updateFunction = function() +{ + return this._updateFunction; +}; + +FrameUpdater.prototype.identifier = function() +{ + return this._identifier; +}; + +FrameUpdater.prototype.addTarget = function(target, keyPath, duration) +{ + var callback = createUpdateFrame(target, keyPath); + + if (callback) + { + this._duration = MAX(this._duration, duration); + this._targets.push(target); + this._callbacks.push(callback); + } +}; + +var createUpdateFrame = function(aView, aKeyPath) +{ + if (aKeyPath !== "frame" && aKeyPath !== "frameSize") + return nil; + + var style = getComputedStyle(aView._DOMElement); + + var updateFrame = function(timestamp) + { + var width = ROUND(style.getPropertyCSSValue('width').getFloatValue(CSSPrimitiveValue.CSS_PX)), + height = ROUND(style.getPropertyCSSValue('height').getFloatValue(CSSPrimitiveValue.CSS_PX)); + + if (aKeyPath == "frame") + { + var left = ROUND(style.getPropertyCSSValue('left').getFloatValue(CSSPrimitiveValue.CSS_PX)), + top = ROUND(style.getPropertyCSSValue('top').getFloatValue(CSSPrimitiveValue.CSS_PX)), + frame = CGRectMake(left, top, width, height); + + [aView setFrame:frame]; + } + else if (aKeyPath == "frameSize") + { + [aView setFrameSize:CGSizeMake(width, height)]; + } + + [[CPRunLoop currentRunLoop] performSelectors]; + }; + + return updateFrame; +}; diff --git a/AppKit/CoreAnimation/CPViewAnimator.j b/AppKit/CoreAnimation/CPViewAnimator.j new file mode 100644 index 000000000..b2e811e3b --- /dev/null +++ b/AppKit/CoreAnimation/CPViewAnimator.j @@ -0,0 +1,222 @@ + +@import "_CPObjectAnimator.j" +@import "CPView.j" + +@implementation CPViewAnimator : _CPObjectAnimator +{ +} + +- (void)viewWillMoveToSuperview:(CPView)aSuperview +{ + var orderInAnim = [self animationForKey:@"CPAnimationTriggerOrderIn"]; + + if (orderInAnim && [orderInAnim isKindOfClass:[CAPropertyAnimation class]]) + { + [_target setValue:[orderInAnim fromValue] forKeyPath:[orderInAnim keyPath]]; + } + + [_target viewWillMoveToSuperview:aSuperview]; +} + +- (void)viewDidMoveToSuperview +{ + var orderInAnim = [self animationForKey:@"CPAnimationTriggerOrderIn"]; + + if (orderInAnim && [orderInAnim isKindOfClass:[CAPropertyAnimation class]]) + { + [self _setTargetValue:YES withKeyPath:@"CPAnimationTriggerOrderIn" fallback:nil completion:function() + { + [_target setValue:[orderInAnim toValue] forKeyPath:[orderInAnim keyPath]]; + }]; + } + else + { + [_target viewDidMoveToSuperview]; + } +} + +- (void)removeFromSuperview +{ + [self _setTargetValue:nil withKeyPath:@"CPAnimationTriggerOrderOut" setter:_cmd]; +} + +- (void)setHidden:(BOOL)shouldHide +{ + if ([_target isHidden] == shouldHide) + return; + + if (shouldHide == NO) + return [_target setHidden:NO]; + + [self _setTargetValue:YES withKeyPath:@"CPAnimationTriggerOrderOut" setter:_cmd]; +} + +- (void)setAlphaValue:(CGPoint)alphaValue +{ + [self _setTargetValue:alphaValue withKeyPath:@"alphaValue" setter:_cmd]; +} + +- (void)setBackgroundColor:(CPColor)aColor +{ + [self _setTargetValue:aColor withKeyPath:@"backgroundColor" setter:_cmd]; +} + +- (void)setFrameOrigin:(CGPoint)aFrameOrigin +{ + [self _setTargetValue:aFrameOrigin withKeyPath:@"frameOrigin" setter:_cmd]; +} + +- (void)setFrame:(CGRect)aFrame +{ + [self _setTargetValue:aFrame withKeyPath:@"frame" setter:_cmd]; +} + +- (void)setFrameSize:(CGSize)aFrameSize +{ + [self _setTargetValue:aFrameSize withKeyPath:@"frameSize" setter:_cmd]; +} + +// Convenience method for the common case where the setter has zero or one argument +- (void)_setTargetValue:(id)aTargetValue withKeyPath:(CPString)aKeyPath setter:(SEL)aSelector +{ + var handler = function() + { + [_target performSelector:aSelector withObject:aTargetValue]; + }; + + [self _setTargetValue:aTargetValue withKeyPath:aKeyPath fallback:handler completion:handler]; +} + +- (void)_setTargetValue:(id)aTargetValue withKeyPath:(CPString)aKeyPath fallback:(Function)fallback completion:(Function)completion +{ + var animation = [_target animationForKey:aKeyPath], + context = [CPAnimationContext currentContext]; + + if (!animation || ![animation isKindOfClass:[CAAnimation class]] || (![context duration] && ![animation duration]) || ![_CPObjectAnimator supportsCSSAnimations]) + { + if (fallback) + fallback(); + } + else + { + [context _enqueueActionForObject:_target keyPath:aKeyPath targetValue:aTargetValue animationCompletion:completion]; + } +} + +@end + +var transformOrigin = function(start, current) +{ + return "translate(" + (current.x - start.x) + "px," + (current.y - start.y) + "px)"; +}; + +var transformFrameToTranslate = function(start, current) +{ + return transformOrigin(start.origin, current.origin); +}; + +var transformFrameToWidth = function(start, current) +{ + return current.size.width + "px"; +}; + +var transformFrameToHeight = function(start, current) +{ + return current.size.height + "px"; +}; + +var transformSizeToWidth = function(start, current) +{ + return current.width + "px"; +}; + +var transformSizeToHeight = function(start, current) +{ + return current.height + "px"; +}; + +var DEFAULT_CSS_PROPERTIES = nil; + +@implementation CPView (CPAnimatablePropertyContainer) + ++ (CPDictionary)defaultCSSProperties +{ + if (DEFAULT_CSS_PROPERTIES == nil) + { + var transformProperty = CPBrowserCSSProperty("transform"); + + DEFAULT_CSS_PROPERTIES = @{ + "backgroundColor" : [@{"property":"background", "value":function(sv, val){return [val cssString];}}], + "alphaValue" : [@{"property":"opacity"}], + "frame" : [@{"property":transformProperty, "value":transformFrameToTranslate}, + @{"property":"width", "value":transformFrameToWidth}, + @{"property":"height", "value":transformFrameToHeight}], + "frameOrigin" : [@{"property":transformProperty, "value":transformOrigin}], + "frameSize" : [@{"property":"width", "value":transformSizeToWidth}, + @{"property":"height", "value":transformSizeToHeight}] + }; + } + + return DEFAULT_CSS_PROPERTIES; +} + ++ (CPArray)cssPropertiesForKeyPath:(CPString)aKeyPath +{ + return [[self defaultCSSProperties] objectForKey:aKeyPath]; +} + ++ (Class)animatorClass +{ + var anim_class = CPClassFromString(CPStringFromClass(self) + "Animator"); + + if (anim_class) + return anim_class; + + return [[self superclass] animatorClass]; +} + +- (id)animator +{ + if (!_animator) + _animator = [[[[self class] animatorClass] alloc] initWithTarget:self]; + + return _animator; +} + +- (id)DOMElementForKeyPath:(CPString)aKeyPath +{ + return _DOMElement; +} + ++ (CAAnimation)defaultAnimationForKey:(CPString)aKey +{ + if ([self cssPropertiesForKeyPath:aKey] !== nil) + return [CAAnimation animation]; + + return nil; +} + +- (CAAnimation)animationForKey:(CPString)aKey +{ + var animations = [self animations], + animation = nil; + + if (!animations || !(animation = [animations objectForKey:aKey])) + { + animation = [[self class] defaultAnimationForKey:aKey]; + } + + return animation; +} + +- (CPDictionary)animations +{ + return _animationsDictionary; +} + +- (void)setAnimations:(CPDictionary)animationsDict +{ + _animationsDictionary = [animationsDict copy]; +} + +@end \ No newline at end of file diff --git a/AppKit/CoreAnimation/CSSAnimation.j b/AppKit/CoreAnimation/CSSAnimation.j new file mode 100644 index 000000000..31d0c8f7f --- /dev/null +++ b/AppKit/CoreAnimation/CSSAnimation.j @@ -0,0 +1,288 @@ + +var ANIMATIONS_GLOBAL_ID = 0, + CURRENT_ANIMATIONS = {}, + + ANIMATION_END_EVENT_NAME, + ANIMATION__PROPERTY, + ANIMATION_NAME_PROPERTY, + ANIMATION_DURATION_PROPERTY, + ANIMATION_TIMING_FUNCTION_PROPERTY, + ANIMATION_FILL_MODE_PROPERTY, + ANIMATION_KEYFRAMES_RULE; + +var defineCSSProperties = function() +{ + if (this.done) + return; + + ANIMATION_END_EVENT_NAME = CPBrowserStyleProperty("animationend"), + ANIMATION_PROPERTY = CPBrowserCSSProperty("animation"), + ANIMATION_NAME_PROPERTY = CPBrowserCSSProperty("animation-name"), + ANIMATION_DURATION_PROPERTY = CPBrowserCSSProperty("animation-duration"), + ANIMATION_TIMING_FUNCTION_PROPERTY = CPBrowserCSSProperty("animation-timing-function"), + ANIMATION_FILL_MODE_PROPERTY = CPBrowserCSSProperty("animation-fill-mode"), + ANIMATION_KEYFRAMES_RULE = "@" + ANIMATION_PROPERTY.substring(0, ANIMATION_PROPERTY.indexOf("animation")) + "keyframes"; + + this.done = true; +} + +CSSAnimation = function(aTarget/*DOM Element*/, anIdentifier) +{ + defineCSSProperties(); + + if (!anIdentifier) + anIdentifier = ANIMATIONS_GLOBAL_ID++; + + var animationName = "anim_" + anIdentifier, + animation = CURRENT_ANIMATIONS[anIdentifier]; + + if (animation) + console.warn("Animation "+ anIdentifier + " is already in use. Ignoring."); + else + { + this.target = aTarget; + this.identifier = anIdentifier; + this.animationName = animationName; + this.listener = null; + this.styleElement = null; + this.propertyanimations = []; + this.animationsnames = []; + this.animationstimingfunctions = []; + this.animationsdurations = []; + this.islive = false; + this.didBuildDOMElements = false; + this.removeAnimationPropertyOnCompletion = true; + + animation = this; + CURRENT_ANIMATIONS[anIdentifier] = animation; + } + + return animation; +} + +CSSAnimation.prototype.addPropertyAnimation = function(propertyName/*String*/, valueFunction/*Function*/, aDuration/*float*/, aKeyTimes/*d, [d]*/, aValues/*Array*/, aTimingFunctions/*[d,d,d,d],[[d,d,d,d]]*/, aCompletionfunction/*Function*/) +{ + if (this.islive) + return false; +// TODO: If a property already exist, replace its values & valueFunctions. + + var name = this.animationName + "_" + propertyName; + + var animation = {name:name, + property:propertyName, + valuefunction:valueFunction, + keytimes:aKeyTimes, + values:aValues, + duration:aDuration, + completionfunction:aCompletionfunction}; + + var animationTimingFunction; + if (aTimingFunctions && (aTimingFunctions[0] instanceof Array)) + { + animation.keyframestimingFunctions = aTimingFunctions; + // dummy timing function overriden by keyframes timings functions + animationTimingFunction = "linear"; + } + else + animationTimingFunction = "cubic-bezier(" + aTimingFunctions + ")"; + + this.animationstimingfunctions.push(animationTimingFunction); + + this.propertyanimations.push(animation); + this.animationsnames.push(name); + this.animationsdurations.push(aDuration + "s"); + + return true; +} + +CSSAnimation.prototype.keyFrames = function() +{ + var keyframesRules = []; + + var count = this.propertyanimations.length; + for (var i = 0; i < count; i++) + { + var animation = this.propertyanimations[i], + property = animation.property, + valuefunction = animation.valuefunction, + keytimes = animation.keytimes, + values = animation.values, + timingFunctions = animation.keyframestimingFunctions; + + var keyframes = [], + keytimescount = keytimes.length, + start_value = values[0]; + + for (var j = 0; j < keytimescount; j++) + { + var keytime = keytimes[j], + value = values[j], + timingFunction; + + if (valuefunction !== nil) + value = valuefunction(start_value, value); + + var keyframeContent = property + ": " + value + ";"; + + if (timingFunctions && timingFunctions.length && (timingFunction = timingFunctions[j])) + { + keyframeContent += ANIMATION_TIMING_FUNCTION_PROPERTY + ":cubic-bezier(" + timingFunction + ");"; + } + + var keyframe = "\t" + Math.round(keytime * 100) + "% {\n\t\t" + keyframeContent + "\n\t}\n"; + keyframes.push(keyframe); + } + // TODO ! Add keyframe rule to CPCompatibility + var rule = ANIMATION_KEYFRAMES_RULE + " " + animation.name + " {\n" + keyframes.join(" ") + "}\n"; + keyframesRules.push(rule); + } + + return keyframesRules.join("\n"); +} + +CSSAnimation.prototype.appendKeyFramesRule = function() +{ + var styleElement = this.createKeyFramesStyleElement(), + keyframesText = this.keyFrames(), + nodeText = document.createTextNode(keyframesText); + + styleElement.appendChild(nodeText); + document.head.appendChild(styleElement); +} + +CSSAnimation.prototype.createKeyFramesStyleElement = function() +{ + if (!this.styleElement) + { + var styleElement = document.createElement("style"); + styleElement.setAttribute("type", "text/css"); + + this.styleElement = styleElement; + } + + return this.styleElement; +} + +CSSAnimation.prototype.endEventListener = function() +{ + var animation = this, + animationsNames = this.animationsnames, + inFlightAnimationsNames = animationsNames.slice(); + + if (!animation.listener) + { + var AnimationEndListener = function(event) + { + var idx = inFlightAnimationsNames.indexOf(event.animationName); + if (idx !== -1) + inFlightAnimationsNames.splice(idx, 1); + + if (inFlightAnimationsNames.length == 0) + { + for (var i = 0; i < animationsNames.length; i++) + { + var completion = animation.completionFunctionForAnimationName(animationsNames[i]); + if (completion) + completion(); + } + + var eventTarget = event.target, + style = eventTarget.style; + + if (animation.removeAnimationPropertyOnCompletion) + style.removeProperty(ANIMATION_NAME_PROPERTY); + + style.removeProperty(ANIMATION_DURATION_PROPERTY); + style.removeProperty(ANIMATION_FILL_MODE_PROPERTY); + style.removeProperty("-webkit-backface-visibility"); + + if (animation.animationstimingfunctions.length) + style.removeProperty(ANIMATION_TIMING_FUNCTION_PROPERTY); + + removeFromParent(animation.styleElement); + + eventTarget.removeEventListener(ANIMATION_END_EVENT_NAME, AnimationEndListener); + animation.listener = null; + delete (CURRENT_ANIMATIONS[animation.identifier]); + } + }; + + this.listener = AnimationEndListener; + } + + return this.listener; +} + +CSSAnimation.prototype.completionFunctionForAnimationName = function(aName) +{ + var propanims = this.propertyanimations, + count = propanims.length; + + while (count--) + { + var anim = propanims[count]; + if (anim.name == aName) + return anim.completionfunction; + } + + return null; +} + +CSSAnimation.prototype.addAnimationEndEventListener = function() +{ + var listener = this.endEventListener(); + this.target.addEventListener(ANIMATION_END_EVENT_NAME, listener, false); +} + +CSSAnimation.prototype.setTargetStyleProperties = function() +{ + var style = this.target.style; + + if (this.animationstimingfunctions.length) + style.setProperty(ANIMATION_TIMING_FUNCTION_PROPERTY, this.animationstimingfunctions.join(",")); + + style.setProperty(ANIMATION_DURATION_PROPERTY, this.animationsdurations.join(",")); + + style.setProperty(ANIMATION_FILL_MODE_PROPERTY, "forwards"); + +// http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/css3-animations-the-hiccups-and-bugs-youll-want-to-avoid/ + style.setProperty("-webkit-backface-visibility", "hidden"); +} + +CSSAnimation.prototype.buildDOMElements = function() +{ + this.appendKeyFramesRule(); + + this.addAnimationEndEventListener(); + + this.setTargetStyleProperties(); + + this.didBuildDOMElements = true; +} + +CSSAnimation.prototype.setRemoveAnimationPropertyOnCompletion = function(flag) +{ + this.removeAnimationPropertyOnCompletion = flag; +} + +CSSAnimation.prototype.start = function() +{ + if (this.propertyanimations.length == 0 || this.islive) + return false; + + if (!this.didBuildDOMElements) + this.buildDOMElements(); + + this.target.style.setProperty(ANIMATION_NAME_PROPERTY, this.animationsnames.join(",")); + + this.islive = true; + + return true; +} + +var removeFromParent= function(aNode) +{ + var parentNode = aNode.parentNode; + if (parentNode) + parentNode.removeChild(aNode); +} diff --git a/AppKit/CoreAnimation/_CPObjectAnimator.j b/AppKit/CoreAnimation/_CPObjectAnimator.j new file mode 100644 index 000000000..289d079f0 --- /dev/null +++ b/AppKit/CoreAnimation/_CPObjectAnimator.j @@ -0,0 +1,91 @@ + +@import +@import "CPAnimationContext.j" + +var _supportsCSSAnimations = null; + +@protocol CPAnimatablePropertyContainer + ++ (id)defaultAnimationForKey:(CPString)key; +- (id)animationForKey:(CPString)key; + +- (id)animator; +- (CPDictionary)animations; +- (void)setAnimations:(CPDictionary)animations; + +@end + +@implementation _CPObjectAnimator : CPProxy +{ + id _target; +} + ++ (BOOL)supportsCSSAnimations +{ + if (_supportsCSSAnimations === null) + _supportsCSSAnimations = CPBrowserCSSProperty("animation"); + + return _supportsCSSAnimations; +} + +- (id)initWithTarget:(id)aTarget +{ + _target = aTarget; + + return self; +} + +- (id)animator +{ + return self; +} + +- (BOOL)isEqual:(id)anObject +{ + return [_target isEqual:anObject]; +} + +- (id)forwardingTargetForSelector:(SEL)aSelector +{ + return _target; +} + +- (CPMethodSignature)methodSignatureForSelector:(SEL)aSelector +{ + return [_target methodSignatureForSelector:aSelector]; +} + +- (void)forwardInvocation:(CPInvocation)anInvocation +{ + var target = [self forwardingTargetForSelector:[anInvocation selector]]; + [anInvocation invokeWithTarget:target]; + return; +} + +- (void)doesNotRecognizeSelector:(SEL)aSelector +{ + [CPException raise:CPInvalidArgumentException reason:@"Animator does not recognize selector " + CPStringFromSelector(aSelector)]; +} + +- (CPString)description +{ + return [CPString stringWithFormat:@"%@ Animator Proxy for %@", [self class], _target]; +} + +- (void)setValue:(id)aTargetValue forKey:(id)aKeyPath +{ + var animation = [_target animationForKey:aKeyPath], + context = [CPAnimationContext currentContext]; + + if (!animation || ![animation isKindOfClass:[CAAnimation class]] || (![context duration] && ![animation duration]) || ![_CPObjectAnimator supportsCSSAnimations]) + [_target setValue:aTargetValue forKey:aKeyPath]; + else + { + [context _enqueueActionForObject:_target keyPath:aKeyPath targetValue:aTargetValue completionHandler:function() + { + [_target setValue:aTargetValue forKey:aKeyPath]; + }]; + } +} + +@end diff --git a/AppKit/CoreAnimation/jshashtable.j b/AppKit/CoreAnimation/jshashtable.j new file mode 100644 index 000000000..f685e9b38 --- /dev/null +++ b/AppKit/CoreAnimation/jshashtable.j @@ -0,0 +1,370 @@ +/** + * Copyright 2010 Tim Down. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * jshashtable + * + * jshashtable is a JavaScript implementation of a hash table. It creates a single constructor function called Hashtable + * in the global scope. + * + * Author: Tim Down + * Version: 2.1 + * Build date: 21 March 2010 + * Website: http://www.timdown.co.uk/jshashtable + */ + +Hashtable = (function() { + var FUNCTION = "function"; + + var arrayRemoveAt = (typeof Array.prototype.splice == FUNCTION) ? + function(arr, idx) { + arr.splice(idx, 1); + } : + + function(arr, idx) { + var itemsAfterDeleted, i, len; + if (idx === arr.length - 1) { + arr.length = idx; + } else { + itemsAfterDeleted = arr.slice(idx + 1); + arr.length = idx; + for (i = 0, len = itemsAfterDeleted.length; i < len; ++i) { + arr[idx + i] = itemsAfterDeleted[i]; + } + } + }; + + function hashObject(obj) { + var hashCode; + if (typeof obj == "string") { + return obj; + } else if (typeof obj.hashCode == FUNCTION) { + // Check the hashCode method really has returned a string + hashCode = obj.hashCode(); + return (typeof hashCode == "string") ? hashCode : hashObject(hashCode); + } else if (typeof obj.toString == FUNCTION) { + return obj.toString(); + } else { + try { + return String(obj); + } catch (ex) { + // For host objects (such as ActiveObjects in IE) that have no toString() method and throw an error when + // passed to String() + return Object.prototype.toString.call(obj); + } + } + } + + function equals_fixedValueHasEquals(fixedValue, variableValue) { + return fixedValue.equals(variableValue); + } + + function equals_fixedValueNoEquals(fixedValue, variableValue) { + return (typeof variableValue.equals == FUNCTION) ? + variableValue.equals(fixedValue) : (fixedValue === variableValue); + } + + function createKeyValCheck(kvStr) { + return function(kv) { + if (kv === null) { + throw new Error("null is not a valid " + kvStr); + } else if (typeof kv == "undefined") { + throw new Error(kvStr + " must not be undefined"); + } + }; + } + + var checkKey = createKeyValCheck("key"), checkValue = createKeyValCheck("value"); + + /*----------------------------------------------------------------------------------------------------------------*/ + + function Bucket(hash, firstKey, firstValue, equalityFunction) { + this[0] = hash; + this.entries = []; + this.addEntry(firstKey, firstValue); + + if (equalityFunction !== null) { + this.getEqualityFunction = function() { + return equalityFunction; + }; + } + } + + var EXISTENCE = 0, ENTRY = 1, ENTRY_INDEX_AND_VALUE = 2; + + function createBucketSearcher(mode) { + return function(key) { + var i = this.entries.length, entry, equals = this.getEqualityFunction(key); + while (i--) { + entry = this.entries[i]; + if ( equals(key, entry[0]) ) { + switch (mode) { + case EXISTENCE: + return true; + case ENTRY: + return entry; + case ENTRY_INDEX_AND_VALUE: + return [ i, entry[1] ]; + } + } + } + return false; + }; + } + + function createBucketLister(entryProperty) { + return function(aggregatedArr) { + var startIndex = aggregatedArr.length; + for (var i = 0, len = this.entries.length; i < len; ++i) { + aggregatedArr[startIndex + i] = this.entries[i][entryProperty]; + } + }; + } + + Bucket.prototype = { + getEqualityFunction: function(searchValue) { + return (typeof searchValue.equals == FUNCTION) ? equals_fixedValueHasEquals : equals_fixedValueNoEquals; + }, + + getEntryForKey: createBucketSearcher(ENTRY), + + getEntryAndIndexForKey: createBucketSearcher(ENTRY_INDEX_AND_VALUE), + + removeEntryForKey: function(key) { + var result = this.getEntryAndIndexForKey(key); + if (result) { + arrayRemoveAt(this.entries, result[0]); + return result[1]; + } + return null; + }, + + addEntry: function(key, value) { + this.entries[this.entries.length] = [key, value]; + }, + + keys: createBucketLister(0), + + values: createBucketLister(1), + + getEntries: function(entries) { + var startIndex = entries.length; + for (var i = 0, len = this.entries.length; i < len; ++i) { + // Clone the entry stored in the bucket before adding to array + entries[startIndex + i] = this.entries[i].slice(0); + } + }, + + containsKey: createBucketSearcher(EXISTENCE), + + containsValue: function(value) { + var i = this.entries.length; + while (i--) { + if ( value === this.entries[i][1] ) { + return true; + } + } + return false; + } + }; + + /*----------------------------------------------------------------------------------------------------------------*/ + + // Supporting functions for searching hashtable buckets + + function searchBuckets(buckets, hash) { + var i = buckets.length, bucket; + while (i--) { + bucket = buckets[i]; + if (hash === bucket[0]) { + return i; + } + } + return null; + } + + function getBucketForHash(bucketsByHash, hash) { + var bucket = bucketsByHash[hash]; + + // Check that this is a genuine bucket and not something inherited from the bucketsByHash's prototype + return ( bucket && (bucket instanceof Bucket) ) ? bucket : null; + } + + /*----------------------------------------------------------------------------------------------------------------*/ + + function Hashtable(hashingFunctionParam, equalityFunctionParam) { + var that = this; + var buckets = []; + var bucketsByHash = {}; + + var hashingFunction = (typeof hashingFunctionParam == FUNCTION) ? hashingFunctionParam : hashObject; + var equalityFunction = (typeof equalityFunctionParam == FUNCTION) ? equalityFunctionParam : null; + + this.put = function(key, value) { + checkKey(key); + checkValue(value); + var hash = hashingFunction(key), bucket, bucketEntry, oldValue = null; + + // Check if a bucket exists for the bucket key + bucket = getBucketForHash(bucketsByHash, hash); + if (bucket) { + // Check this bucket to see if it already contains this key + bucketEntry = bucket.getEntryForKey(key); + if (bucketEntry) { + // This bucket entry is the current mapping of key to value, so replace old value and we're done. + oldValue = bucketEntry[1]; + bucketEntry[1] = value; + } else { + // The bucket does not contain an entry for this key, so add one + bucket.addEntry(key, value); + } + } else { + // No bucket exists for the key, so create one and put our key/value mapping in + bucket = new Bucket(hash, key, value, equalityFunction); + buckets[buckets.length] = bucket; + bucketsByHash[hash] = bucket; + } + return oldValue; + }; + + this.get = function(key) { + checkKey(key); + + var hash = hashingFunction(key); + + // Check if a bucket exists for the bucket key + var bucket = getBucketForHash(bucketsByHash, hash); + if (bucket) { + // Check this bucket to see if it contains this key + var bucketEntry = bucket.getEntryForKey(key); + if (bucketEntry) { + // This bucket entry is the current mapping of key to value, so return the value. + return bucketEntry[1]; + } + } + return null; + }; + + this.containsKey = function(key) { + checkKey(key); + var bucketKey = hashingFunction(key); + + // Check if a bucket exists for the bucket key + var bucket = getBucketForHash(bucketsByHash, bucketKey); + + return bucket ? bucket.containsKey(key) : false; + }; + + this.containsValue = function(value) { + checkValue(value); + var i = buckets.length; + while (i--) { + if (buckets[i].containsValue(value)) { + return true; + } + } + return false; + }; + + this.clear = function() { + buckets.length = 0; + bucketsByHash = {}; + }; + + this.isEmpty = function() { + return !buckets.length; + }; + + var createBucketAggregator = function(bucketFuncName) { + return function() { + var aggregated = [], i = buckets.length; + while (i--) { + buckets[i][bucketFuncName](aggregated); + } + return aggregated; + }; + }; + + this.keys = createBucketAggregator("keys"); + this.values = createBucketAggregator("values"); + this.entries = createBucketAggregator("getEntries"); + + this.remove = function(key) { + checkKey(key); + + var hash = hashingFunction(key), bucketIndex, oldValue = null; + + // Check if a bucket exists for the bucket key + var bucket = getBucketForHash(bucketsByHash, hash); + + if (bucket) { + // Remove entry from this bucket for this key + oldValue = bucket.removeEntryForKey(key); + if (oldValue !== null) { + // Entry was removed, so check if bucket is empty + if (!bucket.entries.length) { + // Bucket is empty, so remove it from the bucket collections + bucketIndex = searchBuckets(buckets, hash); + arrayRemoveAt(buckets, bucketIndex); + delete bucketsByHash[hash]; + } + } + } + return oldValue; + }; + + this.size = function() { + var total = 0, i = buckets.length; + while (i--) { + total += buckets[i].entries.length; + } + return total; + }; + + this.each = function(callback) { + var entries = that.entries(), i = entries.length, entry; + while (i--) { + entry = entries[i]; + callback(entry[0], entry[1]); + } + }; + + this.putAll = function(hashtable, conflictCallback) { + var entries = hashtable.entries(); + var entry, key, value, thisValue, i = entries.length; + var hasConflictCallback = (typeof conflictCallback == FUNCTION); + while (i--) { + entry = entries[i]; + key = entry[0]; + value = entry[1]; + + // Check for a conflict. The default behaviour is to overwrite the value for an existing key + if ( hasConflictCallback && (thisValue = that.get(key)) ) { + value = conflictCallback(key, thisValue, value); + } + that.put(key, value); + } + }; + + this.clone = function() { + var clone = new Hashtable(hashingFunctionParam, equalityFunctionParam); + clone.putAll(that); + return clone; + }; + } + + return Hashtable; +})(); \ No newline at end of file diff --git a/Foundation/CPRunLoop.j b/Foundation/CPRunLoop.j index da7906ee2..a745040d7 100644 --- a/Foundation/CPRunLoop.j +++ b/Foundation/CPRunLoop.j @@ -200,6 +200,7 @@ var CPRunLoopLastNativeRunLoop = 0; CPArray _orderedPerforms; int _runLoopInsuranceTimer; + CPArray _observers; } /* @@ -224,6 +225,7 @@ var CPRunLoopLastNativeRunLoop = 0; _timersForModes = {}; _nativeTimersForModes = {}; _nextTimerFireDatesForModes = {}; + _observers = nil; } return self; @@ -473,6 +475,19 @@ var CPRunLoopLastNativeRunLoop = 0; else _orderedPerforms = performs; + if (_observers) + { + var count = _observers.length; + while(count--) + { + var obs = _observers[count]; + obs.callout(); + + if (!obs.repeats) + _observers.splice(count, 1); + } + } + _runLoopLock = NO; return nextFireDate; diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/AppController.j b/Tests/Manual/CPAnimatablePropertyContainerTest/AppController.j new file mode 100644 index 000000000..1ce9f1aa9 --- /dev/null +++ b/Tests/Manual/CPAnimatablePropertyContainerTest/AppController.j @@ -0,0 +1,533 @@ +/* + * AppController.j + * CPAnimatablePropertyContainerTest + * + * Created by You on December 3, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import + +CPLogRegister(CPLogConsole); + +var ANIMATIONS_NAMES = ["Fade In", "Fade Out", "Background Color", "Frame Origin", "Bounce", "Frame Size", "Frame"]; + +@implementation AppController : CPObject +{ + @outlet CPWindow theWindow; //this "outlet" is connected automatically by the Cib + + @outlet CPBox group1Box; + @outlet CPBox group2Box; + + @outlet CPView animationSandbox; + + CPView leftView; + CPView rightView; + + CPArray animations; + + float duration1 @accessors; + float duration2 @accessors; + + CPString message1 @accessors; + CPString message2 @accessors; + + CPInteger selectedTimingFunction1 @accessors; + CPInteger selectedTimingFunction2 @accessors; + + CPString timingFunction1 @accessors; + CPString timingFunction2 @accessors; +} + +- (id)init +{ + self = [super init]; + + animations = [CPArray array]; + + [ANIMATIONS_NAMES enumerateObjectsUsingBlock:function(anim, idx) + { + var dict = [CPDictionary dictionaryWithObjectsAndKeys:anim, @"name", NO, @"enabled1", NO, @"enabled2"]; + [animations addObject:dict]; + }]; + + duration1 = 1.0; + duration2 = 1.0; + + message1 = @"Done for View 1"; + message2 = @"Done for View 2"; + + timingFunction1 = @"0,1,1,0"; + timingFunction2 = @"0,1,1,0"; + + selectedTimingFunction1 = 1; + selectedTimingFunction2 = 1; + + return self; +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + // This is called when the application is done loading. +} + +- (void)awakeFromCib +{ + // This is called when the cib is done loading. + // You can implement this method on any object instantiated from a Cib. + // It's a useful hook for setting up current UI values, and other things. + + [[theWindow contentView] setBackgroundColor:[CPColor colorWithRed:1 green:238/255 blue:185/255 alpha:1]]; + [animationSandbox setBackgroundColor:[CPColor whiteColor]]; + + [self revert:nil]; + // In this case, we want the window from Cib to become our full browser window + [theWindow setFullPlatformWindow:YES]; +} + +- (IBAction)runAnimationsGroup1:(id)sender +{ + [[CPAnimationContext currentContext] setDuration:duration1]; + [[CPAnimationContext currentContext] setTimingFunction:[self timingFunctionForGroup:1 fromPopUp:selectedTimingFunction1]]; + [[CPAnimationContext currentContext] setCompletionHandler:[self completionHandlerFromString:message1]]; + + [self runAnimationsForGroup:1]; +} + +- (IBAction)runAnimationsGroup2:(id)sender +{ + [[CPAnimationContext currentContext] setDuration:duration2]; + [[CPAnimationContext currentContext] setTimingFunction:[self timingFunctionForGroup:2 fromPopUp:selectedTimingFunction2]]; + [[CPAnimationContext currentContext] setCompletionHandler:[self completionHandlerFromString:message2]]; + + [self runAnimationsForGroup:2]; +} + +- (IBAction)animate:(id)sender +{ + [[CPAnimationContext currentContext] setDuration:duration1]; + [[CPAnimationContext currentContext] setTimingFunction:[self timingFunctionForGroup:1 fromPopUp:selectedTimingFunction2]]; + [[CPAnimationContext currentContext] setCompletionHandler:[self completionHandlerFromString:message1]]; + + var tag = [sender tag]; + var width = tag ? 100 : 200; + [[sender animator] setFrameSize:CGSizeMake(width, CGRectGetHeight([sender frame]))]; + + [sender setTag:(1 - tag)]; +} + +- (IBAction)runBothGroups:(id)sender +{ + [CPAnimationContext runAnimationGroup:function(context) + { + [context setDuration:duration1]; + [context setTimingFunction:[self timingFunctionForGroup:1 fromPopUp:selectedTimingFunction1]]; + [self runAnimationsForGroup:1]; + + } completionHandler:function() + { + CPLogConsole(message1); + }]; + + [CPAnimationContext runAnimationGroup:function(context) + { + [context setDuration:duration2]; + [context setTimingFunction:[self timingFunctionForGroup:2 fromPopUp:selectedTimingFunction2]]; + [self runAnimationsForGroup:2]; + + } completionHandler:function() + { + CPLogConsole(message2); + }]; +} + +/* +- (IBAction)runInGroups:(id)sender +{ + [CPAnimationContext beginGrouping]; + + [[CPAnimationContext currentContext] setDuration:duration1]; + [[CPAnimationContext currentContext] setTimingFunction:[self timingFunctionFromString:timingFunction1]]; + [[CPAnimationContext currentContext] setCompletionHandler:[self completionHandlerFromString:message1]]; + [self runAnimationsForGroup:1]; + + [CPAnimationContext endGrouping]; + + + [CPAnimationContext beginGrouping]; + + [[CPAnimationContext currentContext] setDuration:duration2]; + [[CPAnimationContext currentContext] setCompletionHandler:[self completionHandlerFromString:message2]]; + [self runAnimationsForGroup:2]; + + [CPAnimationContext endGrouping]; +} + +- (IBAction)emptyGroupTest:(id)sender +{ + [CPAnimationContext beginGrouping]; + + [[CPAnimationContext currentContext] setDuration:10]; + [[CPAnimationContext currentContext] setCompletionHandler:function() + { + CPLogConsole("Context duration is 10s but no animations were set. We run the completionHandler (this message) immediately and return"); + }]; + + [CPAnimationContext endGrouping]; +} +*/ +- (IBAction)removeFromSuperview:(id)sender +{ + [[leftView animator] removeFromSuperview]; + [[rightView animator] removeFromSuperview]; +} + +- (IBAction)revert:(id)sender +{ + [self setupGroup1:nil]; + [self setupGroup2:nil]; +} +/* +- (IBAction)addSubview:(id)sender +{ + [[theWindow contentView] addSubview:]; +} +*/ +- (void)runAnimationsForGroup:(CPInteger)group +{ + var aView = group == 1 ? leftView : rightView, + enabledKey = @"enabled" + group; + + var enabledIndexes = [animations indexesOfObjectsPassingTest:function(obj, idx) + { + return [obj objectForKey:enabledKey]; + }]; + + if ([enabledIndexes count] == 0) + return; + + if ([enabledIndexes containsIndex:0]) + { + [aView setAlphaValue:0]; + [[aView animator] setAlphaValue:1]; + } + else if ([enabledIndexes containsIndex:1]) + { + [[aView animator] setAlphaValue:0]; + } + + if ([enabledIndexes containsIndex:2]) + { + [[aView animator] setBackgroundColor:[CPColor magentaColor]]; + } + + if ([enabledIndexes containsIndex:6]) + { + var frame = CGRectMakeCopy([aView frame]), + origin = frame.origin, + size = frame.size; + + origin.x += 450; + origin.y += 200; + + size.width += 100; + size.height += 100; + + [[aView animator] setFrame:frame]; + return; + } + + if ([enabledIndexes containsIndex:4]) + { + [[aView animations] setObject:[self bounceAnimation:aView] forKey:@"frameOrigin"]; + + var origin = CGPointMakeCopy([aView frameOrigin]); + [[aView animator] setFrameOrigin:origin]; + } + else if ([enabledIndexes containsIndex:3]) + { + [[aView animations] removeObjectForKey:@"frameOrigin"]; + + var origin = CGPointMakeCopy([aView frameOrigin]); + origin.x +=550; + origin.y +=300; + [[aView animator] setFrameOrigin:origin]; + } + + if ([enabledIndexes containsIndex:5]) + { + var size = CGSizeMakeCopy([aView frameSize]); + size.width += 300; + size.height += 200; + [[aView animator] setFrameSize:size]; + } +} + +- (CAMediaTimingFunction)controlsPointsForGroup:(CPInteger)aGroup +{ + var aString = (aGroup == 1) ? timingFunction1 : timingFunction2; + + if (!aString || ![aString length]) + return nil; + + var controlsPoints = [aString componentsSeparatedByString:@","]; + + return [[controlsPoints[0] floatValue], [controlsPoints[1] floatValue], [controlsPoints[2] floatValue], [controlsPoints[3] floatValue]]; +} + +- (CAMediaTimingFunction)timingFunctionForGroup:(CPInteger)aGroup fromPopUp:(CPInteger)selectedTag +{ + var controlsPoints; + + switch (selectedTag) + { + case 1: controlsPoints = [0, 0, 1, 1]; + break; + case 2: controlsPoints = [0.42, 0, 1, 1]; + break; + case 3: controlsPoints = [0, 0, 0.58, 1]; + break; + case 4: controlsPoints = [0.42, 0, 0.58, 1]; + break; + case 0: controlsPoints = [self controlsPointsForGroup:aGroup]; + break; + } + + return [CAMediaTimingFunction functionWithControlPoints:controlsPoints[0] :controlsPoints[1] :controlsPoints[2] :controlsPoints[3]]; +} + +- (Function)completionHandlerFromString:(CPString)aMessage +{ + if (!aMessage || ![aMessage length]) + return nil; + + var s = new Date(); + return function() + { + var e = new Date() - s; + CPLogConsole(aMessage + " in " + e + " ms"); + }; +} + +- (CAKeyframeAnimation)bounceAnimation:(CPView)aView +{ + var anim = [CAKeyframeAnimation animation], + easein = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn], + easeout = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; + + [anim setKeyTimes:[0, 0.25, 0.5, 0.75, 1]]; + var origin = CGPointMakeCopy([aView frameOrigin]); + [anim setValues:[origin, CGPointMake(origin.x, origin.y + 50), origin, CGPointMake(origin.x, origin.y + 25), origin]]; + [anim setTimingFunctions:[easeout, easein, easeout, easein]]; + + return anim; +} + +- (CABasicAnimation)fadeOutAnimation +{ + var animation = [CABasicAnimation animationWithKeyPath:@"alphaValue"]; + [animation setDuration:0.2]; + [animation setFromValue:1]; + [animation setToValue:0]; + + [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; + + return animation; +} + +- (IBAction)setupGroup1:(id)sender +{ + var contentView = [group1Box contentView]; + + var hasSubviews = [[contentView viewWithTag:1000] state] * 2, + customLayout = [[contentView viewWithTag:1001] state] * 4, + customDraw = [[contentView viewWithTag:1002] state] * 8, + customDrawSubviews = [[contentView viewWithTag:1003] state], + autoLayout = [[contentView viewWithTag:1004] state], + options = hasSubviews | customLayout | customDraw; + + [leftView removeFromSuperview]; + leftView = [self viewWithOptions:options]; + + if (leftView) + { + [leftView setFrame:CGRectMake(0, 0, 200, 200)]; + [animationSandbox addSubview:leftView]; + } + + if (hasSubviews) + [self addSubviewsToView:leftView autoLayout:(autoLayout && !customLayout) customDrawSubviews:customDrawSubviews]; +} + +- (IBAction)setupGroup2:(id)sender +{ + var contentView = [group2Box contentView]; + + var hasSubviews = [[contentView viewWithTag:1000] state] * 2, + customLayout = [[contentView viewWithTag:1001] state] * 4, + customDraw = [[contentView viewWithTag:1002] state] * 8, + options = hasSubviews | customLayout | customDraw; + + [rightView removeFromSuperview]; + rightView = [self viewWithOptions:options]; + + if (rightView) + { + [rightView setFrame:CGRectMake(250, 0, 200, 200)]; + [animationSandbox addSubview:rightView]; + } + + if (leftView) + [animationSandbox addSubview:leftView]; + + if (hasSubviews) + [self addSubviewsToView:rightView autoLayout:!customLayout customDrawSubviews:NO]; +} + +- (void)viewWithOptions:(CPInteger)options +{ + var view = nil, + hasSubviews = NO; + + switch (options) + { + case 0: view = [[ColorView alloc] initWithFrame:CGRectMakeZero()]; + break; + + case 2: view = [[ColorView alloc] initWithFrame:CGRectMakeZero()]; + hasSubviews = YES; + break; + + case 4: + case 6: view = [[CustomLayoutView alloc] initWithFrame:CGRectMakeZero()]; + [view setBackgroundColor:[CPColor randomColor]]; + hasSubviews = YES; + break; + + case 12: + case 14: view = [[CustomLayoutDrawView alloc] initWithFrame:CGRectMakeZero()]; + hasSubviews = YES; + break; + + case 8: view = [[DrawView alloc] initWithFrame:CGRectMakeZero()]; + break; + + case 10: view = [[DrawView alloc] initWithFrame:CGRectMakeZero()]; + hasSubviews = YES; + break; + + } + + var anims = [CPDictionary dictionaryWithObject:[self fadeOutAnimation] forKey:@"CPAnimationTriggerOrderOut"]; + [view setAnimations:anims]; + + return view; +} + +- (void)addSubviewsToView:(CPView)aView autoLayout:(BOOL)autoLayout customDrawSubviews:(BOOL)customDrawSubviews +{ + var subViewClass = customDrawSubviews ? [DrawView class] : [ColorView class]; + + for (var i = 0; i < 5; i++) + { + var view = [[subViewClass alloc] initWithFrame:CGRectMake(50, i * 40, 80, 26)]; + if (autoLayout) + [view setAutoresizingMask:CPViewWidthSizable|CPViewMinYMargin]; + + [aView addSubview:view]; + } +} + +@end + +@implementation ColorView : CPView +{ +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + + [self setBackgroundColor:[CPColor randomColor]]; + + return self; +} + +@end + +@implementation DrawView : CPView +{ + CPColor color @accessors; +} + +- (id)initWithFrame:(CGRect)aFrame +{ + self = [super initWithFrame:aFrame]; + + color = [CPColor randomColor]; + + return self; +} + +- (void)drawRect:(CGRect)aRect +{ + var context = [[CPGraphicsContext currentContext] graphicsPort], + bounds = [self bounds]; + + CGContextSetLineWidth(context, 2); + CGContextSetStrokeColor(context, [CPColor blackColor]); + CGContextSetFillColor(context, color); + + CGContextBeginPath(context); + CGContextFillRect(context, bounds); + + var height = CGRectGetHeight(bounds), + width = CGRectGetWidth(bounds); + + CGContextStrokeLineSegments(context, [CGPointMake(10,0), CGPointMake(10, height), + CGPointMake(0, 10), CGPointMake(CGRectGetWidth(aRect), 10), + CGPointMake(width - 10, 0), CGPointMake(width - 10, height), + CGPointMake(0, height - 10), CGPointMake(width, height - 10)], 8); +} + +@end + +@implementation CustomLayoutView : CPView +{ +} + +- (void)layoutSubviews +{ + var subviews = [self subviews], + count = [subviews count] - 1; + + var dx = (CGRectGetWidth([self frame]) - 100) / count, + dy = (CGRectGetHeight([self frame]) - 26) / count + + [subviews enumerateObjectsUsingBlock:function(view, idx, stop) + { + [view setFrameOrigin:CGPointMake(dx * idx, dy * idx)]; + }]; +} + +@end + +@implementation CustomLayoutDrawView : DrawView +{ +} + +- (void)layoutSubviews +{ + var subviews = [self subviews], + count = [subviews count] - 1; + + var dx = (CGRectGetWidth([self frame]) - 100) / count, + dy = (CGRectGetHeight([self frame]) - 26) / count + + [subviews enumerateObjectsUsingBlock:function(view, idx, stop) + { + [view setFrameOrigin:CGPointMake(dx * idx, dy * idx)]; + }]; +} + +@end \ No newline at end of file diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/Info.plist b/Tests/Manual/CPAnimatablePropertyContainerTest/Info.plist new file mode 100644 index 000000000..fdb27037c --- /dev/null +++ b/Tests/Manual/CPAnimatablePropertyContainerTest/Info.plist @@ -0,0 +1,10 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPAnimatablePropertyContainerTest + + diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/Jakefile b/Tests/Manual/CPAnimatablePropertyContainerTest/Jakefile new file mode 100644 index 000000000..142cbe5ad --- /dev/null +++ b/Tests/Manual/CPAnimatablePropertyContainerTest/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * CPAnimatablePropertyContainerTest + * + * Created by You on December 3, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("CPAnimatablePropertyContainerTest", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "CPAnimatablePropertyContainerTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPAnimatablePropertyContainerTest"); + task.setIdentifier("com.yourcompany.CPAnimatablePropertyContainerTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPAnimatablePropertyContainerTest"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["CPAnimatablePropertyContainerTest"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "CPAnimatablePropertyContainerTest", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "CPAnimatablePropertyContainerTest", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "CPAnimatablePropertyContainerTest")); + OS.system(["press", "-f", FILE.join("Build", "Release", "CPAnimatablePropertyContainerTest"), FILE.join("Build", "Deployment", "CPAnimatablePropertyContainerTest")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "CPAnimatablePropertyContainerTest")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPAnimatablePropertyContainerTest"), FILE.join("Build", "Desktop", "CPAnimatablePropertyContainerTest", "CPAnimatablePropertyContainerTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "CPAnimatablePropertyContainerTest", "CPAnimatablePropertyContainerTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPAnimatablePropertyContainerTest")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/MainMenu.cib b/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/MainMenu.cib new file mode 100644 index 000000000..67cd58584 --- /dev/null +++ b/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/MainMenu.cib @@ -0,0 +1 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;41E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;88E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;138E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;139E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;140E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;75E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;141E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;110E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;97E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;104E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;56E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;10;$classnameS;21;CPCibControlConnectorK;8;$classesA;S;21;CPCibControlConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;10;$classnameS;21;CPCibBindingConnectorK;8;$classesA;S;21;CPCibBindingConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;88E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;155E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;156E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;161E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;164E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;156E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;166E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;155E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;167E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;170E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;172E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;164E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;167E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;174E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;175E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;177E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;178E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;179E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;180E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;181E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;180E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;181E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;184E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;185E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;186E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;73E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;184E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;185E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;187E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;130E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;188E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;189E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;190E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;191E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;192E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;193E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;195E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;196E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;197E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;195E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;196E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;198E;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;132E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;199E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;160E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;200E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;138E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;202E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;203E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;204E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;205E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;206E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;207E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;208E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;210E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;215E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;216E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;219E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;225E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;224E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;227E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;228E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;231E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;232E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;10;$classnameS;13;CPPopUpButtonK;8;$classesA;S;13;CPPopUpButtonS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;62E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;136E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;233E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;234E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;235E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;236E;K;11;$aalignmentD;K;6;CP$UIDd;3;209E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;220E;K;6;$afontD;K;6;CP$UIDd;3;237E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;238E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;209E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;241E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;241E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;243E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;221E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;245E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;220E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;63E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;248E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;249E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;250E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;251E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;225E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;227E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;252E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;253E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;254E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;232E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;10;$classnameS;9;CPStepperK;8;$classesA;S;9;CPStepperS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;72E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;255E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;257E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;209E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;258E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;241E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;259E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;224E;E;D;K;10;$classnameS;16;_CPCibCustomViewK;8;$classesA;S;16;_CPCibCustomViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;74E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;260E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;261E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;263E;E;D;K;10;$classnameS;8;CPButtonK;8;$classesA;S;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;264E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;265E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;236E;K;11;$aalignmentD;K;6;CP$UIDd;3;221E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;266E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;267E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;209E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;268E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;265E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;236E;K;11;$aalignmentD;K;6;CP$UIDd;3;221E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;269E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;267E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;209E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;270E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;216E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;219E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;225E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;224E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;227E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;271E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;229E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;231E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;232E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;72E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;272E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;257E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;209E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;258E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;241E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;259E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;273E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;249E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;250E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;274E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;225E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;227E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;275E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;276E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;254E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;232E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;277E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;278E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;219E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;225E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;224E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;227E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;279E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;280E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;282E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;283E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;232E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;284E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;278E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;219E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;225E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;224E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;224E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;227E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;279E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;285E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;281E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;286E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;283E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;232E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;62E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;137E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;287E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;234E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;235E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;236E;K;11;$aalignmentD;K;6;CP$UIDd;3;209E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;220E;K;6;$afontD;K;6;CP$UIDd;3;288E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;238E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;209E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;88E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;88E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;220E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;88E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;245E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;243E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;88E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;221E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;64E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;88E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;240E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;241E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;241E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;289E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;290E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;291E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;292E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;232E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;293E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;290E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;221E;K;6;$afontD;K;6;CP$UIDd;3;294E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;224E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;295E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;232E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;221E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;220E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;224E;E;D;K;10;$classnameS;5;CPBoxK;8;$classesA;S;5;CPBoxS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;96E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;296E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;297E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;298E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;209E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;209E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;241E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;300E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;221E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;10;CPCheckBoxK;8;$classesA;S;10;CPCheckBoxS;8;CPButtonS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;301E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;302E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;303E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;301E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;306E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;301E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;307E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;308E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;301E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;309E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;301E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;310E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;311E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;301E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;312E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;301E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;313E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;314E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;301E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;312E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;301E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;315E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;316E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;301E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;317E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;96E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;318E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;319E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;320E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;209E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;299E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;209E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;241E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;321E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;221E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;322E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;310E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;311E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;322E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;312E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;322E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;307E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;323E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;322E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;309E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;322E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;302E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;303E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;322E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;230E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;306E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;324E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;325E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;236E;K;11;$aalignmentD;K;6;CP$UIDd;3;221E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;326E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;267E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;209E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;327E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;325E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;236E;K;11;$aalignmentD;K;6;CP$UIDd;3;221E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;326E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;267E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;209E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;328E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;329E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;262E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;142E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;236E;K;11;$aalignmentD;K;6;CP$UIDd;3;221E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;330E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;267E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;209E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;221E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;12;CPScrollViewK;8;$classesA;S;12;CPScrollViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;331E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;332E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;333E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;336E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;337E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;114E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;117E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;338E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;338E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;338E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;338E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;224E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;224E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;224E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;339E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;221E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;209E;E;D;K;10;$classnameS;10;CPScrollerK;8;$classesA;S;10;CPScrollerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;112E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;340E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;341E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;112E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;342E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;343E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;344E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;345E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;112E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;346E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;224E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;347E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;17;CPTableHeaderViewK;8;$classesA;S;17;CPTableHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;337E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;348E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;337E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;349E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;119E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;112E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;350E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;351E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;112E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;342E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;343E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;344E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;345E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;112E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;352E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;214E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;353E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTableViewK;8;$classesA;S;11;CPTableViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;118E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;336E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;354E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;336E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;355E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;356E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;12;$agrid-colorD;K;6;CP$UIDd;3;357E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;358E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;359E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;360E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;220E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;214E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;224E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;214E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;214E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;214E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;361E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;357E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;209E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;224E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;363E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;116E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;364E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;365E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;302E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;367E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;368E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;245E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;214E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;214E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;365E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;365E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;302E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;369E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;370E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;245E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;214E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;224E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;58E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;371E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;372E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;373E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;58E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;217E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;334E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;3;374E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;375E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;3;129E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;3;127E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;338E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;338E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;338E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;338E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;224E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;224E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;224E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;376E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;221E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;3;118E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;374E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;377E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;374E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;355E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;356E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;12;$agrid-colorD;K;6;CP$UIDd;3;357E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewDataSourceKeyD;K;6;CP$UIDd;1;0E;K;22;CPTableViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;23;CPTableViewRowHeightKeyD;K;6;CP$UIDd;3;358E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;359E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;360E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;220E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;214E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;224E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;214E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;214E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;214E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;378E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;357E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;209E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;224E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;379E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;3;128E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;365E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;365E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;302E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;380E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;381E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;245E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;214E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;224E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;382E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;365E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;302E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;383E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;384E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;245E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;214E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;214E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;123E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;385E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;386E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;123E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;342E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;343E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;344E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;345E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;123E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;352E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;214E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;353E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;115E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;375E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;348E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;348E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;375E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;349E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;123E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;387E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;341E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;123E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;342E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;343E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;344E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;345E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;3;123E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;346E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;224E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;388E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;389E;E;D;K;10;$classnameS;17;CPArrayControllerK;8;$classesA;S;17;CPArrayControllerS;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;131E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;390E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;224E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;214E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;214E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;214E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;224E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;214E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;214E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;214E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;214E;E;D;K;10;$classnameS;18;CPObjectControllerK;8;$classesA;S;18;CPObjectControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;390E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;224E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;214E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;391E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;392E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;391E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;393E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;E;E;S;8;delegateS;16;animationSandboxS;6;buttonS;9;group1BoxS;9;group2BoxS;9;theWindowS;7;contentS;12;setupGroup1:S;12;setupGroup2:S;20;runAnimationsGroup1:S;20;runAnimationsGroup2:S;14;runBothGroups:S;20;removeFromSuperview:S;7;revert:S;46;selectedTag: selection.selectedTimingFunction2S;11;selectedTagS;33;selection.selectedTimingFunction2D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;32;value: selection.timingFunction2S;5;valueS;25;selection.timingFunction2D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;41;hidden: selection.selectedTimingFunction2S;6;hiddenD;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;46;selectedTag: selection.selectedTimingFunction1S;33;selection.selectedTimingFunction1D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;32;value: selection.timingFunction1S;25;selection.timingFunction1D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;41;hidden: selection.selectedTimingFunction1D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;25;value: selection.message2S;18;selection.message2D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;25;value: selection.message1S;18;selection.message1D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;26;value: selection.duration2S;19;selection.duration2D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;26;value: selection.duration1S;19;selection.duration1D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;24;contentArray: animationsS;12;contentArrayS;10;animationsD;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;31;value: arrangedObjects.enabled2S;24;arrangedObjects.enabled2D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;27;value: arrangedObjects.nameS;20;arrangedObjects.nameD;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;31;value: arrangedObjects.enabled1S;24;arrangedObjects.enabled1D;K;6;$classD;K;6;CP$UIDd;3;157E;K;10;CP.objectsD;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;26;{{335, -126}, {1319, 763}}S;22;{{0, 0}, {1680, 1027}}d;1;7S;6;Windowd;1;0S;21;{{0, 0}, {1319, 763}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;E;E;S;6;normalS;6;{1, 1}F;S;24;{{1199, 121}, {104, 22}}S;19;{{0, 0}, {104, 22}}d;2;33S;9;textfieldS;47;bezeled+controlSizeRegular+editable+placeholderd;1;4d;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;395E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;T;S;0;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;226E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;396E;E;S;24;{{1058, 129}, {137, 17}}S;19;{{0, 0}, {137, 17}}S;18;controlSizeRegularS;19;Completion message:D;K;6;$classD;K;6;CP$UIDd;3;226E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;397E;E;S;22;{{1145, 94}, {99, 25}}S;18;{{0, 0}, {99, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;338E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;d;2;12S;6;LinearS;17;_popUpItemAction:d;1;1d;7;1048576S;7;Ease-inS;8;Ease Outd;1;3S;11;Ease In-OutS;6;CustomS;22;{{1226, 55}, {39, 22}}S;18;{{0, 0}, {39, 22}}S;38;bezeled+controlSizeRegular+placeholderD;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;398E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;S;22;{{1163, 63}, {60, 17}}S;18;{{0, 0}, {60, 17}}S;9;Duration:S;20;{{1269, 58}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperd;5;65540d;3;100S;24;{{20, 243}, {1000, 500}}S;21;{{0, 0}, {1000, 500}}d;2;36S;6;CPViewS;22;{{20, 203}, {172, 25}}S;19;{{0, 0}, {172, 25}}S;21;Remove From Superviewd;2;14S;23;{{216, 203}, {172, 25}}S;6;RevertS;24;{{1199, 463}, {104, 22}}S;24;{{1058, 471}, {137, 17}}S;21;{{1269, 408}, {0, 0}}S;23;{{1225, 405}, {39, 22}}D;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;398E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;S;23;{{1163, 413}, {59, 17}}S;18;{{0, 0}, {59, 17}}S;22;{{1241, 89}, {62, 22}}S;18;{{0, 0}, {62, 22}}S;7;0,0,1,1S;23;{{1058, 100}, {89, 17}}S;18;{{0, 0}, {89, 17}}D;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;338E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;S;16;Timing Function:S;23;{{1241, 435}, {62, 22}}S;23;{{1058, 446}, {89, 17}}D;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;338E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;S;23;{{1145, 440}, {99, 25}}D;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;338E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;S;22;{{1058, 60}, {89, 18}}S;18;{{0, 0}, {89, 18}}D;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;267E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;S;7;Group 1S;23;{{1058, 413}, {89, 18}}D;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;267E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;S;7;Group 2S;21;{{21, 22}, {438, 87}}S;19;{{0, 0}, {438, 87}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;301E;E;E;S;3;boxS;64;Animation group 1 contains a view with the following properties:D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;97E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;436E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;437E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;438E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;97E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;401E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;402E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;d;4;1000S;20;{{15, 9}, {138, 21}}S;19;{{0, 0}, {138, 21}}S;9;check-boxS;12;Has Subviewsd;4;1001S;21;{{155, 9}, {138, 21}}S;13;Custom Layoutd;4;1002S;21;{{299, 9}, {138, 21}}S;14;Custom Drawingd;4;1003S;21;{{34, 50}, {138, 21}}d;4;1004S;21;{{34, 29}, {138, 21}}S;11;Auto LayoutS;22;{{21, 126}, {438, 51}}S;19;{{0, 0}, {438, 51}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;322E;E;E;S;64;Animation group 2 contains a view with the following properties:D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;104E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;439E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;440E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;441E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;104E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;401E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;402E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;S;21;{{154, 9}, {138, 21}}S;23;{{468, 140}, {128, 25}}S;19;{{0, 0}, {128, 25}}S;14;Run AnimationsS;22;{{467, 54}, {128, 25}}S;22;{{609, 94}, {135, 25}}S;19;{{0, 0}, {135, 25}}S;15;Run Both GroupsS;25;{{1059, 496}, {240, 247}}S;20;{{0, 0}, {240, 247}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;336E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;337E;D;K;6;CP$UIDd;3;363E;D;K;6;CP$UIDd;3;339E;E;E;S;10;scrollviewD;K;10;$classnameS;10;CPClipViewK;8;$classesA;S;10;CPClipViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;112E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;399E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;354E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;400E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;112E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;401E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;355E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;402E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;119E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;112E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;403E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;404E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;405E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;112E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;338E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;406E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;116E;E;d;2;10D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;112E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;112E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;S;23;{{224, 128}, {15, 102}}S;19;{{0, 0}, {15, 102}}d;1;8d;11;-2147483648S;8;scrollerS;27;controlSizeRegular+disabledS;27;_verticalScrollerDidScroll:f;18;0.8717948717948718S;19;{{0, 0}, {238, 25}}S;14;tableHeaderRowS;21;{{1, 113}, {223, 15}}S;19;{{0, 0}, {223, 15}}S;29;_horizontalScrollerDidScroll:f;16;0.99581589958159S;20;{{0, 0}, {238, 229}}D;K;6;$classD;K;6;CP$UIDd;3;226E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;407E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;226E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;408E;E;d;2;20S;6;{3, 2}d;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;121E;E;E;D;K;10;$classnameS;13;_CPCornerViewK;8;$classesA;S;13;_CPCornerViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;362E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;112E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;409E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;410E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;112E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;342E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;411E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;412E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;d;3;182d;2;40D;K;10;$classnameS;24;_CPTableColumnHeaderViewK;8;$classesA;S;24;_CPTableColumnHeaderViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;366E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;413E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;415E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;416E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;417E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;418E;K;11;$aalignmentD;K;6;CP$UIDd;3;209E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;220E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;420E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;355E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;220E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;209E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;3;366E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;421E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;415E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;422E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;417E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;423E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;423E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;424E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;221E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;241E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;425E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;241E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;426E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;427E;E;S;25;{{1059, 154}, {240, 198}}S;20;{{0, 0}, {240, 198}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;374E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;375E;D;K;6;CP$UIDd;3;379E;D;K;6;CP$UIDd;3;376E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;123E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;428E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;377E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;429E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;123E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;401E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;355E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;402E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;335E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;123E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;430E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;404E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;431E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;123E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;338E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;406E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;57E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;123E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;S;20;{{0, 0}, {238, 180}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;362E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;123E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;209E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;432E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;410E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;123E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;342E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;411E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;412E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;3;366E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;415E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;422E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;417E;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;423E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;423E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;424E;K;11;$aalignmentD;K;6;CP$UIDd;3;220E;K;20;$avertical-alignmentD;K;6;CP$UIDd;3;221E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;16;$aimage-positionD;K;6;CP$UIDd;3;241E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;209E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;220E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;425E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;225E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;214E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;241E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;241E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;224E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;241E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;209E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;3;426E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;3;427E;E;d;3;175D;K;6;$classD;K;6;CP$UIDd;3;366E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;209E;K;6;$afontD;K;6;CP$UIDd;3;415E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;416E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;417E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;256E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;256E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;218E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;418E;K;11;$aalignmentD;K;6;CP$UIDd;3;209E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;220E;K;6;$afontD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;420E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;209E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;214E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;214E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;355E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;220E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;209E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;214E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;214E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;214E;E;S;19;{{1, 1}, {250, 15}}S;19;{{0, 0}, {250, 15}}S;22;{{224, 79}, {15, 102}}f;18;0.9166666666666666S;13;AppControllerS;19;CPMutableDictionaryS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;89E;E;E;S;29;.Helvetica Neue DeskInterfaced;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;241E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;435E;D;K;6;CP$UIDd;3;241E;E;E;d;2;15S;20;{{1, 1}, {238, 229}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;119E;E;E;d;2;18S;6;_NS:11S;21;{{1, 230}, {238, 17}}S;19;{{0, 0}, {238, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;116E;E;E;S;6;_NS:15D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;241E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;442E;D;K;6;CP$UIDd;3;241E;E;E;S;22;{{224, 222}, {14, 25}}S;18;{{0, 0}, {14, 25}}S;10;cornerviewS;6;_NS:19D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;444E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;394E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;445E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;214E;E;S;9;AnimationD;K;6;$classD;K;6;CP$UIDd;3;222E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;446E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;238E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;224E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;214E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;224E;E;S;32;controlSizeRegular+tableDataViewS;9;Text Celld;4;3072D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;447E;E;E;S;3;RunS;17;{{0, 0}, {0, 21}}S;42;controlSizeRegular+roundRect+tableDataViewS;5;Checkf;3;0.5f;4;0.05S;20;{{1, 1}, {238, 180}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;E;E;S;21;{{1, 181}, {238, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;128E;E;E;S;22;{{224, 173}, {14, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;448E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;449E;E;E;f;18;0.6862745098039216S;19;{{1, 9}, {444, 77}}S;19;{{0, 0}, {444, 77}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;E;E;S;19;{{1, 9}, {444, 41}}S;19;{{0, 0}, {444, 41}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;E;E;f;3;0.8D;K;10;$classnameS;19;_CPImageAndTextViewK;8;$classesA;S;19;_CPImageAndTextViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;443E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;367E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;367E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;401E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;214E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;d;2;11S;28;_CPFontSystemFacePlaceholderD;K;6;$classD;K;6;CP$UIDd;3;443E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;369E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;369E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;401E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;214E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;3;443E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;380E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;380E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;401E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;214E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;3;443E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;383E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;383E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;401E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;214E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;213E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;213E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;214E;E;S;18;{{5, 0}, {-10, 0}}S;18;{{0, 0}, {-10, 0}}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/MainMenu.xib b/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/MainMenu.xib new file mode 100644 index 000000000..7e2e7cf5a --- /dev/null +++ b/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/MainMenu.xib @@ -0,0 +1,2932 @@ + + + + 1050 + 14C109 + 6250 + 1344.72 + 757.30 + + com.apple.InterfaceBuilder.CocoaPlugin + 6250 + + + NSArrayController + NSBox + NSButton + NSButtonCell + NSCustomObject + NSCustomView + NSMenu + NSMenuItem + NSObjectController + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller + NSStepper + NSStepperCell + NSTableColumn + NSTableHeaderView + NSTableView + NSTextField + NSTextFieldCell + NSView + NSWindowTemplate + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{335, 390}, {1319, 763}} + 1946157056 + Window + NSWindow + + + + + 256 + + + + 265 + + + + 2322 + + + + 256 + {238, 180} + + + + _NS:13 + YES + NO + YES + + + 256 + {238, 17} + + + + _NS:16 + + + + + -2147483392 + {{224, 0}, {16, 17}} + + + + _NS:19 + + + + 40 + 40 + 1000 + + 75497536 + 2048 + Run + + YES + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 67108864 + 268435456 + Check + + YES + 13 + 1044 + + _NS:9 + + 1215582464 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + 3 + YES + YES + + + + 175 + 40 + 1000 + + 75497536 + 2048 + Animation + + + + + + 67108928 + 2048 + Text Cell + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + + + + 3 + 2 + + 3 + MQA + + + 6 + System + gridColor + + 3 + MC41AA + + + 20 + 314572800 + + + 4 + 15 + 0 + NO + -1 + 0 + 1 + + + {{1, 17}, {238, 180}} + + + + _NS:11 + + + 4 + YES + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + _NS:58 + NO + _doScroller: + + + _doScroller: + 0.91666666666666663 + + + + -2147483392 + {{1, 182}, {250, 15}} + + + + _NS:60 + NO + _doScroller: + + 1 + + _doScroller: + 0.99581589958159 + + + + 2338 + + + + {{1, 0}, {238, 17}} + + + + _NS:15 + + YES + + + + {{1059, 411}, {240, 198}} + + + + _NS:9 + 133682 + + + + + + QSAAAEEgAABBsAAAQbAAAA + 0.25 + 4 + 1 + + + + 265 + + + + 2322 + + + + 256 + {238, 229} + + + + _NS:13 + YES + NO + YES + + + 256 + {238, 17} + + + + _NS:16 + + + + + -2147483392 + {{224, 0}, {16, 17}} + + + + _NS:19 + + + + 40 + 40 + 1000 + + 75497536 + 2048 + Run + + + 3 + MC4zMzMzMzI5ODU2AA + + + + + 67108864 + 268435456 + Check + + _NS:9 + + 1215582464 + 2 + + + + + 200 + 25 + + 3 + YES + YES + + + + 182 + 40 + 1000 + + 75497536 + 2048 + Animation + + + + + + 67108928 + 2048 + Text Cell + + + + + + 3 + YES + + + + 3 + 2 + + + 20 + 314572800 + + + 4 + 15 + 0 + NO + -1 + 0 + 1 + + + {{1, 17}, {238, 229}} + + + + _NS:11 + + + 4 + YES + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + _NS:58 + NO + _doScroller: + + + _doScroller: + 0.87179487179487181 + + + + -2147483392 + {{1, 119}, {223, 15}} + + + + _NS:60 + NO + _doScroller: + + 1 + + _doScroller: + 0.99581589958159 + + + + 2338 + + + + {{1, 0}, {238, 17}} + + + + _NS:15 + + YES + + + + {{1059, 20}, {240, 247}} + + + + _NS:9 + 133682 + + + + + + QSAAAEEgAABBsAAAQbAAAA + 0.25 + 4 + 1 + + + + 265 + {{1266, 680}, {19, 27}} + + + + _NS:1099 + YES + + 786464 + 0 + _NS:1099 + + 100 + 1 + YES + + NO + + + + 265 + {{1230, 683}, {31, 22}} + + + + _NS:9 + YES + + -2075131840 + 272630784 + + + YES + 15 + 1044 + + _NS:9 + + YES + + 6 + System + textBackgroundColor + + + + 6 + System + textColor + + + + NO + 1 + + + + 265 + {{1266, 330}, {19, 27}} + + + + _NS:1099 + YES + + 786464 + 0 + _NS:1099 + + 100 + 1 + YES + + NO + + + + 265 + {{1229, 333}, {31, 22}} + + + + _NS:9 + YES + + -2075131840 + 272630784 + + + YES + 15 + 1044 + + _NS:9 + + YES + + + + NO + 1 + + + + 265 + {{1203, 617}, {96, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + _NS:9 + + YES + + + + NO + 1 + + + + 265 + {{1056, 617}, {141, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Completion message: + + _NS:1535 + + + 6 + System + controlColor + + + + + NO + 1 + + + + 265 + {{1203, 275}, {96, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + _NS:9 + + YES + + + + NO + 1 + + + + 265 + {{1056, 275}, {141, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Completion message: + + _NS:1535 + + + + + NO + 1 + + + + 265 + {{1161, 683}, {64, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Duration: + + _NS:1535 + + + + + NO + 1 + + + + 265 + {{1161, 333}, {63, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Duration: + + _NS:1535 + + + + + NO + 1 + + + + 265 + {{1245, 649}, {54, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + 0,0,1,1 + _NS:9 + + YES + + + + NO + 1 + + + + 265 + {{1056, 646}, {93, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Timing Function: + + YES + 10 + 1044 + + _NS:1535 + + + + + NO + 1 + + + + 268 + {{461, 681}, {140, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Run Animations + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{462, 595}, {140, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Run Animations + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{603, 641}, {147, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Run Both Groups + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 268 + {{20, 20}, {1000, 500}} + + + + _NS:9 + NSView + + + + 12 + + + + 274 + + + + 268 + {{16, 49}, {128, 18}} + + + + _NS:9 + 1000 + YES + + 67108864 + 268435456 + Has Subviews + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + + 268 + {{156, 49}, {128, 18}} + + + + _NS:9 + 1001 + YES + + 67108864 + 268435456 + Custom Layout + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + + 268 + {{300, 49}, {128, 18}} + + + + _NS:9 + 1002 + YES + + 67108864 + 268435456 + Custom Drawing + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + + 268 + {{35, 8}, {128, 18}} + + + + _NS:9 + 1003 + YES + + 67108864 + 268435456 + Custom Drawing + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + + 268 + {{35, 29}, {128, 18}} + + + + _NS:9 + 1004 + YES + + 67108864 + 268435456 + Auto Layout + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + {{1, 1}, {444, 77}} + + + + _NS:11 + + + {{17, 650}, {446, 93}} + + + + _NS:9 + {0, 0} + + 67108864 + 0 + Animation group 1 contains a view with the following properties: + + + + 6 + System + labelColor + + + + + 1 + 0 + 2 + NO + + 1 + MCAwIDAgMC40MgA + + + 1 + MCAwIDAgMC4xAA + + + + + 12 + + + + 274 + + + + 268 + {{300, 13}, {128, 18}} + + + + _NS:9 + 1002 + YES + + 67108864 + 268435456 + Custom Drawing + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + + 268 + {{155, 13}, {128, 18}} + + + + _NS:9 + 1001 + YES + + 67108864 + 268435456 + Custom Layout + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + + 268 + {{16, 13}, {128, 18}} + + + + _NS:9 + 1000 + YES + + 67108864 + 268435456 + Has Subviews + + _NS:9 + + 1211912448 + 2 + + + + + 200 + 25 + + NO + + + {{1, 1}, {444, 41}} + + + + _NS:11 + + + {{17, 582}, {446, 57}} + + + + _NS:9 + {0, 0} + + 67108864 + 0 + Animation group 2 contains a view with the following properties: + + + + + + 1 + 0 + 2 + NO + + 3 + MCAwLjEAA + + + + + 268 + {{14, 532}, {184, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Remove From Superview + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 265 + {{1143, 645}, {104, 26}} + + + + _NS:9 + YES + + -2076180416 + 2048 + + YES + 10 + 1044 + + _NS:9 + + 109199360 + 129 + + + 400 + 75 + + + Linear + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + 1 + + + YES + + OtherViews + + + + + Ease-in + + 1048576 + 2147483647 + + + _popUpItemAction: + 2 + + + + + Ease Out + + 1048576 + 2147483647 + + + _popUpItemAction: + 3 + + + + + Ease In-Out + + 1048576 + 2147483647 + + + _popUpItemAction: + 4 + + + + + Custom + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 1 + YES + YES + 2 + + NO + + + + 268 + {{210, 532}, {184, 32}} + + + + _NS:9 + YES + + 67108864 + 134217728 + Revert + + _NS:9 + + -2038284288 + 129 + + + 200 + 25 + + NO + + + + 265 + {{1245, 303}, {54, 22}} + + + + _NS:9 + YES + + -1804599231 + 272630784 + + + 0,0,1,1 + _NS:9 + + YES + + + + NO + 1 + + + + 265 + {{1056, 300}, {93, 17}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Timing Function: + + YES + 10 + 1044 + + _NS:1535 + + + + + NO + 1 + + + + 265 + {{1143, 299}, {104, 26}} + + + + _NS:9 + YES + + -2076180416 + 2048 + + YES + 10 + 1044 + + _NS:9 + + 109199360 + 129 + + + 400 + 75 + + + Linear + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + 1 + + + YES + + OtherViews + + + + + Ease-in + + 1048576 + 2147483647 + + + _popUpItemAction: + 2 + + + + + Ease Out + + 1048576 + 2147483647 + + + _popUpItemAction: + 3 + + + + + Ease In-Out + + 1048576 + 2147483647 + + + _popUpItemAction: + 4 + + + + + Custom + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 1 + YES + YES + 2 + + NO + + + + 265 + {{1056, 685}, {93, 18}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Group 1 + + YES + 14 + 1044 + + _NS:1535 + + + + + NO + 1 + + + + 265 + {{1056, 332}, {93, 18}} + + + + _NS:1535 + YES + + 68157504 + 272630784 + Group 2 + + YES + 14 + 1044 + + _NS:1535 + + + + + NO + 1 + + + {1319, 763} + + + + + {{0, 0}, {1680, 1027}} + {10000000000000, 10000000000000} + YES + + + AppController + + + YES + + YES + + + YES + + + + + + + + delegate + + + + 451 + + + + theWindow + + + + 687 + + + + animationSandbox + + + + 717 + + + + setupGroup1: + + + + 720 + + + + setupGroup1: + + + + 721 + + + + setupGroup1: + + + + 722 + + + + group1Box + + + + 723 + + + + group2Box + + + + 724 + + + + runAnimationsGroup1: + + + + 725 + + + + runAnimationsGroup2: + + + + 726 + + + + runBothGroups: + + + + 727 + + + + removeFromSuperview: + + + + 731 + + + + setupGroup2: + + + + 743 + + + + setupGroup2: + + + + 744 + + + + setupGroup2: + + + + 745 + + + + revert: + + + + 746 + + + + button + + + + 795 + + + + setupGroup1: + + + + 823 + + + + setupGroup1: + + + + 826 + + + + value: arrangedObjects.enabled1 + + + + + + value: arrangedObjects.enabled1 + value + arrangedObjects.enabled1 + 2 + + + 564 + + + + value: arrangedObjects.name + + + + + + value: arrangedObjects.name + value + arrangedObjects.name + 2 + + + 544 + + + + value: arrangedObjects.name + + + + + + value: arrangedObjects.name + value + arrangedObjects.name + 2 + + + 567 + + + + value: arrangedObjects.enabled2 + + + + + + value: arrangedObjects.enabled2 + value + arrangedObjects.enabled2 + 2 + + + 565 + + + + contentArray: animations + + + + + + contentArray: animations + contentArray + animations + 2 + + + 562 + + + + content + + + + 546 + + + + value: selection.duration1 + + + + + + value: selection.duration1 + value + selection.duration1 + 2 + + + 574 + + + + value: selection.duration1 + + + + + + value: selection.duration1 + value + selection.duration1 + 2 + + + 569 + + + + value: selection.duration2 + + + + + + value: selection.duration2 + value + selection.duration2 + 2 + + + 572 + + + + value: selection.duration2 + + + + + + value: selection.duration2 + value + selection.duration2 + 2 + + + 570 + + + + value: selection.message1 + + + + + + value: selection.message1 + value + selection.message1 + 2 + + + 586 + + + + value: selection.message2 + + + + + + value: selection.message2 + value + selection.message2 + 2 + + + 587 + + + + value: selection.timingFunction1 + + + + + + value: selection.timingFunction1 + value + selection.timingFunction1 + 2 + + + 595 + + + + hidden: selection.selectedTimingFunction1 + + + + + + hidden: selection.selectedTimingFunction1 + hidden + selection.selectedTimingFunction1 + 2 + + + 769 + + + + selectedTag: selection.selectedTimingFunction1 + + + + + + selectedTag: selection.selectedTimingFunction1 + selectedTag + selection.selectedTimingFunction1 + 2 + + + 763 + + + + hidden: selection.selectedTimingFunction2 + + + + + + hidden: selection.selectedTimingFunction2 + hidden + selection.selectedTimingFunction2 + 2 + + + 788 + + + + value: selection.timingFunction2 + + + + + + value: selection.timingFunction2 + value + selection.timingFunction2 + 2 + + + 790 + + + + selectedTag: selection.selectedTimingFunction2 + + + + + + selectedTag: selection.selectedTimingFunction2 + selectedTag + selection.selectedTimingFunction2 + 2 + + + 786 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 371 + + + + + + + + 372 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 450 + + + + + 500 + + + + + + + + + + + 501 + + + + + + + + + 502 + + + + + 503 + + + + + 504 + + + + + 505 + + + + + + + + 506 + + + + + + + + 507 + + + + + 518 + + + + + + + + + + + 521 + + + + + 522 + + + + + 523 + + + + + 524 + + + + + + + + + 525 + + + + + + + + 526 + + + + + + + + 528 + + + + + 539 + + + + + 540 + + + + + 541 + + + + + 545 + + + + + 548 + + + + + + + + 549 + + + + + 550 + + + + + + + + 551 + + + + + 555 + + + + + + + + 556 + + + + + + + + 557 + + + + + 558 + + + + + 578 + + + + + + + + 579 + + + + + 580 + + + + + + + + 581 + + + + + 582 + + + + + + + + 583 + + + + + + + + 584 + + + + + 585 + + + + + 589 + + + + + + + + 590 + + + + + 591 + + + + + + + + 592 + + + + + 593 + + + + + + + + 594 + + + + + 596 + + + + + + + + 597 + + + + + 710 + + + + + + + + 711 + + + + + 712 + + + + + + + + 713 + + + + + 714 + + + + + + + + 715 + + + + + 716 + + + + + 718 + + + + + + + + + + + + 700 + + + + + + + + 701 + + + + + 696 + + + + + + + + 697 + + + + + 698 + + + + + + + + 699 + + + + + 719 + + + + + + + + + + 704 + + + + + + + + 707 + + + + + 703 + + + + + + + + 708 + + + + + 705 + + + + + + + + 706 + + + + + 728 + + + + + + + + 729 + + + + + 732 + + + + + + + + 733 + + + + + + + + 734 + + + + + + + + + + + + 735 + + + + + 736 + + + + + 737 + + + + + 738 + + + + + 739 + + + + + 740 + + + + + + + + 741 + + + + + 770 + + + + + + + + 771 + + + + + + + + 772 + + + + + + + + 773 + + + + + + + + 774 + + + + + + + + + + + + 775 + + + + + 776 + + + + + 777 + + + + + 778 + + + + + 779 + + + + + 780 + + + + + 781 + + + + + 791 + + + + + + + + 792 + + + + + 793 + + + + + + + + 794 + + + + + 821 + + + + + + + + 822 + + + + + 824 + + + + + + + + 825 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 826 + + + + + AppController + NSObject + + id + id + id + id + id + id + id + id + + + + animate: + id + + + removeFromSuperview: + id + + + revert: + id + + + runAnimationsGroup1: + id + + + runAnimationsGroup2: + id + + + runBothGroups: + id + + + setupGroup1: + id + + + setupGroup2: + id + + + + NSView + NSBox + NSBox + NSWindow + + + + animationSandbox + NSView + + + group1Box + NSBox + + + group2Box + NSBox + + + theWindow + NSWindow + + + + IBProjectSource + ../.XcodeSupport/AppController.h + + + + + 0 + IBCocoaFramework + NO + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + {12, 12} + {10, 2} + {15, 15} + + + diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/spinner.gif b/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/spinner.gif new file mode 100644 index 000000000..77b36416b Binary files /dev/null and b/Tests/Manual/CPAnimatablePropertyContainerTest/Resources/spinner.gif differ diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/index-debug.html b/Tests/Manual/CPAnimatablePropertyContainerTest/index-debug.html new file mode 100644 index 000000000..10b7505ee --- /dev/null +++ b/Tests/Manual/CPAnimatablePropertyContainerTest/index-debug.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + CPAnimatablePropertyContainerTest + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/index.html b/Tests/Manual/CPAnimatablePropertyContainerTest/index.html new file mode 100644 index 000000000..ef1661487 --- /dev/null +++ b/Tests/Manual/CPAnimatablePropertyContainerTest/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + CPAnimatablePropertyContainerTest + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPAnimatablePropertyContainerTest/main.j b/Tests/Manual/CPAnimatablePropertyContainerTest/main.j new file mode 100644 index 000000000..f4119fbc4 --- /dev/null +++ b/Tests/Manual/CPAnimatablePropertyContainerTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPAnimatablePropertyContainerTest + * + * Created by You on December 3, 2012. + * Copyright 2012, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +}