diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j
index 7dfe480fc..ae71c2648 100644
--- a/AppKit/AppKit.j
+++ b/AppKit/AppKit.j
@@ -20,6 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+@import "_CPObject+Theme.j"
@import "_CPToolTip.j"
@import "CALayer.j"
@import "CGGeometry.j"
@@ -103,6 +104,7 @@
@import "CPTokenField.j"
@import "CPToolbar.j"
@import "CPToolbarItem.j"
+@import "CPTrackingArea.j"
@import "CPTreeNode.j"
@import "CPUserDefaultsController.j"
@import "CPView.j"
diff --git a/AppKit/CPAlert.j b/AppKit/CPAlert.j
index 2dec01211..c87c2c884 100644
--- a/AppKit/CPAlert.j
+++ b/AppKit/CPAlert.j
@@ -821,12 +821,12 @@ var bottomHeight = 71;
else if (_modalDelegate)
{
if (_didEndSelector)
- objj_msgSend(_modalDelegate, _didEndSelector, self, returnCode, contextInfo);
+ _modalDelegate.isa.objj_msgSend3(_modalDelegate, _didEndSelector, self, returnCode, contextInfo);
}
else if (_delegate)
{
if (_didEndSelector)
- objj_msgSend(_delegate, _didEndSelector, self, returnCode);
+ _delegate.isa.objj_msgSend2(_delegate, _didEndSelector, self, returnCode);
else
[self _sendDelegateAlertDidEndReturnCode:returnCode];
}
diff --git a/AppKit/CPApplication.j b/AppKit/CPApplication.j
index 27b7d9736..f20664030 100644
--- a/AppKit/CPApplication.j
+++ b/AppKit/CPApplication.j
@@ -984,7 +984,7 @@ var CPApplicationDelegate_applicationShouldTerminate_ = 1 << 0,
*/
- (void)setTarget:(id)aTarget selector:(SEL)aSelector forNextEventMatchingMask:(unsigned int)aMask untilDate:(CPDate)anExpiration inMode:(CPString)aMode dequeue:(BOOL)shouldDequeue
{
- _eventListeners.splice(_eventListenerInsertionIndex++, 0, _CPEventListenerMake(aMask, function (anEvent) { objj_msgSend(aTarget, aSelector, anEvent); }, shouldDequeue));
+ _eventListeners.splice(_eventListenerInsertionIndex++, 0, _CPEventListenerMake(aMask, function (anEvent) { if (aTarget != null) aTarget.isa.objj_msgSend1(aTarget, aSelector, anEvent); }, shouldDequeue));
}
/*!
@@ -1358,7 +1358,7 @@ var _CPAppBootstrapperActions = nil;
{
var action = _CPAppBootstrapperActions.shift();
- if (objj_msgSend(self, action))
+ if (self.isa.objj_msgSend0(self, action))
return;
}
diff --git a/AppKit/CPBox.j b/AppKit/CPBox.j
index 29d0b3a08..9ab1d47d1 100644
--- a/AppKit/CPBox.j
+++ b/AppKit/CPBox.j
@@ -598,7 +598,8 @@ var CPBoxTypeKey = @"CPBoxTypeKey",
CPBoxBorderTypeKey = @"CPBoxBorderTypeKey",
CPBoxTitle = @"CPBoxTitle",
CPBoxTitlePosition = @"CPBoxTitlePosition",
- CPBoxTitleView = @"CPBoxTitleView";
+ CPBoxTitleView = @"CPBoxTitleView",
+ CPBoxContentView = @"CPBoxContentView";
@implementation CPBox (CPCoding)
@@ -615,7 +616,20 @@ var CPBoxTypeKey = @"CPBoxTypeKey",
_titlePosition = [aCoder decodeIntForKey:CPBoxTitlePosition];
_titleView = [aCoder decodeObjectForKey:CPBoxTitleView] || [CPTextField labelWithTitle:_title];
- _contentView = [self subviews][0];
+ if (_boxType != CPBoxSeparator)
+ {
+ // FIXME: we have a problem with CIB decoding here.
+ // We should be able to simply add : _contentView = [self subviews][0]
+ // but first box subview seems to be malformed (badly decoded).
+ // For example, when deployed, this view doesn't have its _trackingAreas array initialized.
+ // As a (temporary) workaround, we encode/decode the _contentView property. We then transfer the subview hierarchy
+ // and replace the first (and only) box subview with this _contentView
+
+ _contentView = [aCoder decodeObjectForKey:CPBoxContentView] || [[CPView alloc] initWithFrame:[self bounds]];
+ var malformedContentView = [self subviews][0];
+ [_contentView setSubviews:[malformedContentView subviews]];
+ [self replaceSubview:malformedContentView with:_contentView];
+ }
[self setAutoresizesSubviews:YES];
[_contentView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable];
@@ -635,6 +649,7 @@ var CPBoxTypeKey = @"CPBoxTypeKey",
[aCoder encodeObject:_title forKey:CPBoxTitle];
[aCoder encodeInt:_titlePosition forKey:CPBoxTitlePosition];
[aCoder encodeObject:_titleView forKey:CPBoxTitleView];
+ [aCoder encodeObject:_contentView forKey:CPBoxContentView];
}
@end
diff --git a/AppKit/CPButton.j b/AppKit/CPButton.j
index e2b7c1074..c78d160e8 100644
--- a/AppKit/CPButton.j
+++ b/AppKit/CPButton.j
@@ -280,7 +280,7 @@ CPButtonImageOffset = 3.0;
break;
case CPOffState:
- [self unsetThemeState:[CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted]];
+ [self unsetThemeStates:[CPThemeStateSelected, CPButtonStateMixed, CPThemeStateHighlighted]];
}
}
diff --git a/AppKit/CPButtonBar.j b/AppKit/CPButtonBar.j
index f27819689..322d8c65a 100644
--- a/AppKit/CPButtonBar.j
+++ b/AppKit/CPButtonBar.j
@@ -272,15 +272,15 @@
currentButtonOffset += width - 1;
}
- [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateNormal, CPThemeStateBordered]];
- [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateHighlighted, CPThemeStateBordered, ]];
- [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateDisabled, CPThemeStateBordered]];
+ [button setValue:normalColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateNormal, CPThemeStateBordered]];
+ [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateHighlighted, CPThemeStateBordered, ]];
+ [button setValue:disabledColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateDisabled, CPThemeStateBordered]];
[button setValue:textColor forThemeAttribute:@"text-color" inState:CPThemeStateBordered];
// FIXME shouldn't need this
- [button setValue:normalColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
- [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
- [button setValue:disabledColor forThemeAttribute:@"bezel-color" inState:[CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
+ [button setValue:normalColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateNormal, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
+ [button setValue:highlightedColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateHighlighted, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
+ [button setValue:disabledColor forThemeAttribute:@"bezel-color" inStates:[CPThemeStateDisabled, CPThemeStateBordered, CPPopUpButtonStatePullsDown]];
[self addSubview:button];
}
diff --git a/AppKit/CPColor.j b/AppKit/CPColor.j
index 6c1aff02b..0e59f5ba2 100644
--- a/AppKit/CPColor.j
+++ b/AppKit/CPColor.j
@@ -25,6 +25,7 @@
@import "CGColor.j"
+@import "_CPObject+Theme.j"
@import "CPCompatibility.j"
@import "CPImage.j"
@@ -65,7 +66,8 @@ var cachedBlackColor,
cachedOrangeColor,
cachedPurpleColor,
cachedShadowColor,
- cachedClearColor;
+ cachedClearColor,
+ cachedThemeColor;
/// @endcond
@@ -78,7 +80,7 @@ var cachedBlackColor,
It also provides some class helper methods that
returns instances of commonly used colors.
*/
-@implementation CPColor : CPObject
+@implementation CPColor : CPObject
{
CPArray _components;
@@ -86,6 +88,27 @@ var cachedBlackColor,
CPString _cssString;
}
+
+#pragma mark -
+#pragma mark Theming
+
++ (CPString)defaultThemeClass
+{
+ return "color";
+}
+
++ (CPDictionary)themeAttributes
+{
+ return @{
+ @"alternate-selected-control-color": [CPNull null],
+ @"secondary-selected-control-color" : [CPNull null]
+ };
+}
+
+
+#pragma mark -
+#pragma mark Static methods
+
/*!
Creates a color in the RGB colorspace, with an alpha value.
Each component should be between the range of 0.0 to 1.0. For
@@ -436,14 +459,22 @@ var cachedBlackColor,
return cachedClearColor;
}
++ (CPColor)_cachedThemeColor
+{
+ if (!cachedThemeColor)
+ cachedThemeColor = [self colorWithCalibratedWhite:0.0 alpha:0.0];
+
+ return cachedThemeColor;
+}
+
+ (CPColor)alternateSelectedControlColor
{
- return [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]];
+ return [[self _cachedThemeColor] valueForThemeAttribute:@"alternate-selected-control-color"];
}
+ (CPColor)secondarySelectedControlColor
{
- return [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]];
+ return [[self _cachedThemeColor] valueForThemeAttribute:@"secondary-selected-control-color"];
}
/*!
@@ -499,6 +530,10 @@ var cachedBlackColor,
// use it (issue #1413.)
[self _initCSSStringFromComponents];
+ _theme = [CPTheme defaultTheme];
+ _themeState = CPThemeStateNormal;
+ [self _loadThemeAttributes];
+
return self;
}
@@ -512,6 +547,10 @@ var cachedBlackColor,
_components = components;
[self _initCSSStringFromComponents];
+
+ _theme = [CPTheme defaultTheme];
+ _themeState = CPThemeStateNormal;
+ [self _loadThemeAttributes];
}
return self;
@@ -538,6 +577,10 @@ var cachedBlackColor,
_patternImage = anImage;
_cssString = "url(\"" + [_patternImage filename] + "\")";
_components = [0.0, 0.0, 0.0, 1.0];
+
+ _theme = [CPTheme defaultTheme];
+ _themeState = CPThemeStateNormal;
+ [self _loadThemeAttributes];
}
return self;
@@ -845,9 +888,13 @@ var CPColorComponentsKey = @"CPColorComponentsKey",
- (id)initWithCoder:(CPCoder)aCoder
{
if ([aCoder containsValueForKey:CPColorPatternImageKey])
- return [self _initWithPatternImage:[aCoder decodeObjectForKey:CPColorPatternImageKey]];
+ self = [self _initWithPatternImage:[aCoder decodeObjectForKey:CPColorPatternImageKey]];
+ else
+ self = [self _initWithRGBA:[aCoder decodeObjectForKey:CPColorComponentsKey]];
- return [self _initWithRGBA:[aCoder decodeObjectForKey:CPColorComponentsKey]];
+ [self _decodeThemeObjectsWithCoder:aCoder];
+
+ return self;
}
/*!
@@ -860,6 +907,8 @@ var CPColorComponentsKey = @"CPColorComponentsKey",
[aCoder encodeObject:_patternImage forKey:CPColorPatternImageKey];
else
[aCoder encodeObject:_components forKey:CPColorComponentsKey];
+
+ [self _encodeThemeObjectsWithCoder:aCoder];
}
@end
diff --git a/AppKit/CPColorPanel.j b/AppKit/CPColorPanel.j
index d00baa311..e8a9320eb 100644
--- a/AppKit/CPColorPanel.j
+++ b/AppKit/CPColorPanel.j
@@ -483,13 +483,12 @@ var CPColorPanelSwatchesCookie = "CPColorPanelSwatchesCookie";
];
}
- var cookieValue = eval(cookieValue),
- result = [];
+ var cookieValue = eval(cookieValue);
- for (var i = 0; i < cookieValue.length; i++)
- result.push([CPColor colorWithHexString:cookieValue[i]]);
-
- return result;
+ return [cookieValue arrayByApplyingBlock:function(value)
+ {
+ return [CPColor colorWithHexString:value];
+ }];
}
- (CPArray)saveColorList
diff --git a/AppKit/CPComboBox.j b/AppKit/CPComboBox.j
index 317de9d1e..61a159ed7 100644
--- a/AppKit/CPComboBox.j
+++ b/AppKit/CPComboBox.j
@@ -843,8 +843,9 @@ var CPComboBoxTextSubview = @"text",
// In FireFox this needs to be done in setTimeout, otherwise there is no caret
// We have to save the input element now, when we lose focus it will change.
var element = [self _inputElement];
- window.setTimeout(function() {
+ [[CPRunLoop mainRunLoop] performBlock:function()
+ {
// This will prevent to jump to the focused element
var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin];
@@ -852,7 +853,7 @@ var CPComboBoxTextSubview = @"text",
[self _restorePreviousScrollingOrigin:previousScrollingOrigin];
- }, 0);
+ } argument:nil order:0 modes:[CPDefaultRunLoopMode]];
#endif
return NO;
@@ -1141,11 +1142,9 @@ var CPComboBoxTextSubview = @"text",
// Directly nuke _items, [_items removeAll] will trigger an extra call to setContent
_items = [];
- var values = [];
-
- [anArray enumerateObjectsUsingBlock:function(object)
+ var values = [anArray arrayByApplyingBlock:function(object)
{
- values.push([object description]);
+ return [object description];
}];
[self addItemsWithObjectValues:values];
diff --git a/AppKit/CPControl.j b/AppKit/CPControl.j
index 89ddfd29d..bdb657ce2 100644
--- a/AppKit/CPControl.j
+++ b/AppKit/CPControl.j
@@ -27,6 +27,7 @@
@import "CPShadow.j"
@import "CPText.j"
@import "CPKeyValueBinding.j"
+@import "CPTrackingArea.j"
@global CPApp
@@ -200,7 +201,6 @@ var CPControlBlackColor = [CPColor blackColor];
return self;
}
-
#pragma mark -
#pragma mark Control Size
@@ -1056,6 +1056,19 @@ var CPControlBlackColor = [CPColor blackColor];
@end
+@implementation CPControl (CPTrackingArea)
+
+- (void)updateTrackingAreas
+{
+ [self removeAllTrackingAreas];
+ [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectMakeZero()
+ options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect
+ owner:self
+ userInfo:nil]];
+}
+
+@end
+
var CPControlActionKey = @"CPControlActionKey",
CPControlControlSizeKey = @"CPControlControlSizeKey",
CPControlControlStateKey = @"CPControlControlStateKey",
diff --git a/AppKit/CPCursor.j b/AppKit/CPCursor.j
index 6e0b36cff..57f3039c6 100755
--- a/AppKit/CPCursor.j
+++ b/AppKit/CPCursor.j
@@ -123,6 +123,9 @@ var currentCursor = nil,
- (void)set
{
+ if (currentCursor === self)
+ return;
+
currentCursor = self;
#if PLATFORM(DOM)
diff --git a/AppKit/CPDatePicker/_CPDatePickerCalendar.j b/AppKit/CPDatePicker/_CPDatePickerCalendar.j
index c4ecb3866..b3140cab1 100644
--- a/AppKit/CPDatePicker/_CPDatePickerCalendar.j
+++ b/AppKit/CPDatePicker/_CPDatePickerCalendar.j
@@ -1114,30 +1114,30 @@ var CPShortWeekDayNameArrayEn = [@"Mo", @"Tu", @"We", @"Th", @"Fr", @"Sa", @"Su"
[_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateDisabled];
[_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateDisabled] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateDisabled];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]]forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inStates:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"font" inStates:[CPThemeStateDisabled, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inStates:[CPThemeStateDisabled, CPThemeStateSelected]]forThemeAttribute:@"text-color" inStates:[CPThemeStateDisabled, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateSelected]];
[_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:CPThemeStateHighlighted] forThemeAttribute:@"font" inState:CPThemeStateHighlighted];
[_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-color" inState:CPThemeStateHighlighted];
[_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-color" inState:CPThemeStateHighlighted];
[_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:CPThemeStateHighlighted] forThemeAttribute:@"text-shadow-offset" inState:CPThemeStateHighlighted];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateHighlighted, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateHighlighted, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateHighlighted, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inStates:[CPThemeStateHighlighted, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"font" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]] forThemeAttribute:@"text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateSelected]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"font" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-color" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]];
- [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-offset" inState:[CPThemeStateDisabled, CPThemeStateHighlighted]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-font" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"font" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-color" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]];
+ [_textField setValue:[_datePicker valueForThemeAttribute:@"tile-text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]] forThemeAttribute:@"text-shadow-offset" inStates:[CPThemeStateDisabled, CPThemeStateHighlighted]];
[self addSubview:_textField];
diff --git a/AppKit/CPDocument.j b/AppKit/CPDocument.j
index 7f0c79c28..8770d57aa 100644
--- a/AppKit/CPDocument.j
+++ b/AppKit/CPDocument.j
@@ -515,7 +515,9 @@ var CPDocumentUntitledCount = 0;
alert("There was an error retrieving the document.");
- objj_msgSend(session.delegate, session.didReadSelector, self, NO, session.contextInfo);
+ var theDelegate = session.delegate;
+
+ theDelegate.isa.objj_msgSend3(theDelegate, session.didReadSelector, self, NO, session.contextInfo);
}
else
{
@@ -540,7 +542,9 @@ var CPDocumentUntitledCount = 0;
_writeRequest = nil;
- objj_msgSend(session.delegate, session.didSaveSelector, self, NO, session.contextInfo);
+ var theDelegate = session.delegate;
+
+ theDelegate.isa.objj_msgSend3(theDelegate, session.didSaveSelector, self, NO, session.contextInfo);
[self _sendDocumentSavedNotification:NO];
}
}
@@ -553,14 +557,15 @@ var CPDocumentUntitledCount = 0;
*/
- (void)connection:(CPURLConnection)aConnection didReceiveData:(CPString)aData
{
- var session = aConnection.session;
+ var session = aConnection.session,
+ theDelegate = session.delegate;
// READ
if (aConnection == _readConnection)
{
[self readFromData:[CPData dataWithRawString:aData] ofType:session.fileType error:nil];
- objj_msgSend(session.delegate, session.didReadSelector, self, YES, session.contextInfo);
+ theDelegate.isa.objj_msgSend3(theDelegate, session.didReadSelector, self, YES, session.contextInfo);
}
else
{
@@ -569,7 +574,7 @@ var CPDocumentUntitledCount = 0;
_writeRequest = nil;
- objj_msgSend(session.delegate, session.didSaveSelector, self, YES, session.contextInfo);
+ theDelegate.isa.objj_msgSend3(theDelegate, session.didSaveSelector, self, YES, session.contextInfo);
[self _sendDocumentSavedNotification:YES];
}
}
@@ -580,10 +585,11 @@ var CPDocumentUntitledCount = 0;
*/
- (void)connection:(CPURLConnection)aConnection didFailWithError:(CPError)anError
{
- var session = aConnection.session;
+ var session = aConnection.session,
+ theDelegate = session.delegate;
if (_readConnection == aConnection)
- objj_msgSend(session.delegate, session.didReadSelector, self, NO, session.contextInfo);
+ theDelegate.isa.objj_msgSend3(theDelegate, session.didReadSelector, self, NO, session.contextInfo);
else
{
@@ -597,7 +603,7 @@ var CPDocumentUntitledCount = 0;
alert("There was an error saving the document.");
- objj_msgSend(session.delegate, session.didSaveSelector, self, NO, session.contextInfo);
+ theDelegate.isa.objj_msgSend3(theDelegate, session.didSaveSelector, self, NO, session.contextInfo);
[self _sendDocumentSavedNotification:NO];
}
}
@@ -858,21 +864,24 @@ var CPDocumentUntitledCount = 0;
[self canCloseDocumentWithDelegate:self shouldCloseSelector:@selector(_document:shouldClose:context:) contextInfo:{delegate:delegate, selector:selector, context:info}];
else if ([delegate respondsToSelector:selector])
- objj_msgSend(delegate, selector, self, YES, info);
+ delegate.isa.objj_msgSend3(delegate, selector, self, YES, info);
}
- (void)_document:(CPDocument)aDocument shouldClose:(BOOL)shouldClose context:(Object)context
{
+ var theDelegate = context.delegate;
+
if (aDocument === self && shouldClose)
[self close];
- objj_msgSend(context.delegate, context.selector, aDocument, shouldClose, context.context);
+ if (theDelegate != null)
+ theDelegate.isa.objj_msgSend3(theDelegate, context.selector, aDocument, shouldClose, context.context);
}
- (void)canCloseDocumentWithDelegate:(id)aDelegate shouldCloseSelector:(SEL)aSelector contextInfo:(Object)context
{
if (![self isDocumentEdited])
- return [aDelegate respondsToSelector:aSelector] && objj_msgSend(aDelegate, aSelector, self, YES, context);
+ return [aDelegate respondsToSelector:aSelector] && aDelegate.isa.objj_msgSend3(aDelegate, aSelector, self, YES, context);
_canCloseAlert = [[CPAlert alloc] init];
@@ -901,8 +910,8 @@ var CPDocumentUntitledCount = 0;
if (returnCode === 0)
[self saveDocumentWithDelegate:delegate didSaveSelector:selector contextInfo:context];
- else
- objj_msgSend(delegate, selector, self, returnCode === 2, context);
+ else if (delegate != null)
+ delegate.isa.objj_msgSend3(delegate, selector, self, returnCode === 2, context);
_canCloseAlert = nil;
}
diff --git a/AppKit/CPDocumentController.j b/AppKit/CPDocumentController.j
index 5551dd6f1..b851b046a 100644
--- a/AppKit/CPDocumentController.j
+++ b/AppKit/CPDocumentController.j
@@ -402,8 +402,10 @@ var CPSharedDocumentController = nil;
}
}
- if ([context.delegate respondsToSelector:context.selector])
- objj_msgSend(context.delegate, context.selector, self, [[self documents] count] === 0, context.context);
+ var theDelegate = context.delegate;
+
+ if ([theDelegate respondsToSelector:context.selector])
+ theDelegate.isa.objj_msgSend3(theDelegate, context.selector, self, [[self documents] count] === 0, context.context);
}
@end
diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j
index 235f9fcfd..6747b23bc 100644
--- a/AppKit/CPEvent.j
+++ b/AppKit/CPEvent.j
@@ -28,6 +28,7 @@
@import "CPCompatibility.j"
@import "CGGeometry.j"
+@import "CPTrackingArea.j"
@class CPTextField
@class CPWindow
@@ -84,6 +85,8 @@ var _CPEventPeriodicEventPeriod = 0,
BOOL _suppressCappuccinoCut;
BOOL _suppressCappuccinoPaste;
#endif
+
+ CPTrackingArea _trackingArea;
}
/*!
@@ -143,6 +146,27 @@ var _CPEventPeriodicEventPeriod = 0,
timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext eventNumber:anEventNumber clickCount:aClickCount pressure:aPressure];
}
+/*!
+ Creates a new mouse tracking event.
+
+ @param anEventType the event type
+ @param aPoint the location of the cursor in the window specified by \c aWindowNumber
+ @param modifierFlags a bitwise combination of the modifiers specified in the CPEvent globals
+ @param aTimestamp the time the event occurred
+ @param aWindowNumber the number of the CPWindow where the event occurred
+ @param aGraphicsContext the graphics context where the event occurred
+ @param anEventNumber a number for this event
+ @param aTrackingArea the tracking area that triggered the event
+ @throws CPInternalInconsistencyException if an invalid event type is provided
+ @return the new mouse event
+ */
++ (id)enterExitEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned)modifierFlags
+ timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
+ eventNumber:(int)anEventNumber trackingArea:(CPTrackingArea)aTrackingArea
+{
+ return [[self alloc] _initEnterExitEventWithType:anEventType location:aPoint modifierFlags:modifierFlags timestamp:aTimestamp windowNumber:aWindowNumber context:aGraphicsContext eventNumber:anEventNumber trackingArea:aTrackingArea];
+}
+
/*!
Creates a new custom event.
@@ -203,6 +227,28 @@ var _CPEventPeriodicEventPeriod = 0,
return self;
}
+/* @ignore */
+- (id)_initEnterExitEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned)modifierFlags
+ timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
+ eventNumber:(int)anEventNumber trackingArea:(CPTrackingArea)aTrackingArea
+{
+ if ((anEventType != CPMouseEntered) && (anEventType != CPMouseExited) && (anEventType != CPCursorUpdate))
+ [CPException raise:CPInternalInconsistencyException reason:"Invalid event type"];
+
+ if (self = [self _initWithType:anEventType])
+ {
+ _location = CGPointCreateCopy(aPoint);
+ _modifierFlags = modifierFlags;
+ _timestamp = aTimestamp;
+ _context = aGraphicsContext;
+ _eventNumber = anEventNumber;
+ _trackingArea = aTrackingArea;
+ _window = [CPApp windowWithWindowNumber:aWindowNumber];
+ }
+
+ return self;
+}
+
/* @ignore */
- (id)_initKeyEventWithType:(CPEventType)anEventType location:(CGPoint)aPoint modifierFlags:(unsigned int)modifierFlags
timestamp:(CPTimeInterval)aTimestamp windowNumber:(int)aWindowNumber context:(CPGraphicsContext)aGraphicsContext
@@ -585,6 +631,14 @@ var _CPEventPeriodicEventPeriod = 0,
}
}
+- (CPTrackingArea)trackingArea
+{
+ if ((_type !== CPMouseEntered) && (_type !== CPMouseExited) && (_type !== CPCursorUpdate))
+ [CPException raise:CPInternalInconsistencyException format:@"You can't call trackingArea for events of type %#x", _type]
+
+ return _trackingArea;
+}
+
@end
function _CPEventFirePeriodEvent()
diff --git a/AppKit/CPGradient.j b/AppKit/CPGradient.j
index dfa7a3437..93b08b2d2 100644
--- a/AppKit/CPGradient.j
+++ b/AppKit/CPGradient.j
@@ -70,11 +70,12 @@ CPGradientDrawsAfterEndingLocation = kCGGradientDrawsAfterEndLocation;
{
if (self = [super init])
{
- var cgColors = [],
- count = [someColors count],
- colorSpace = [aColorSpace CGColorSpace] || CGColorSpaceCreateDeviceRGB;
- for (var i = 0; i < count; i++)
- cgColors.push(CGColorCreate(colorSpace, [someColors[i] components]));
+ var colorSpace = [aColorSpace CGColorSpace] || CGColorSpaceCreateDeviceRGB,
+ cgColors = [someColors arrayByApplyingBlock:function(color)
+ {
+ return CGColorCreate(colorSpace, [color components])
+ }];
+
_gradient = CGGradientCreateWithColors(colorSpace, cgColors, someLocations);
}
diff --git a/AppKit/CPGraphics.j b/AppKit/CPGraphics.j
index 380bea393..55dbb9f73 100644
--- a/AppKit/CPGraphics.j
+++ b/AppKit/CPGraphics.j
@@ -43,10 +43,10 @@ function CPDrawTiledRects(
if (sides.length != grays.length)
[CPException raise:CPInvalidArgumentException reason:@"sides (length: " + sides.length + ") and grays (length: " + grays.length + ") must have the same length."];
- var colors = [];
-
- for (var i = 0; i < grays.length; ++i)
- colors.push([CPColor colorWithCalibratedWhite:grays[i] alpha:1.0]);
+ var colors = [grays arrayByApplyingBlock:function(gray)
+ {
+ return [CPColor colorWithCalibratedWhite:gray alpha:1.0];
+ }];
return CPDrawColorTiledRects(boundsRect, clipRect, sides, colors);
}
diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j
index 674bb1d04..e735673a4 100644
--- a/AppKit/CPImage.j
+++ b/AppKit/CPImage.j
@@ -275,7 +275,7 @@ function CPAppKitImage(aFilename, aSize)
*/
- (CGSize)size
{
- return _size;
+ return CGSizeMakeCopy(_size);
}
+ (id)imageNamed:(CPString)aName
diff --git a/AppKit/CPObjectController.j b/AppKit/CPObjectController.j
index 6cac9a80e..addc031b9 100644
--- a/AppKit/CPObjectController.j
+++ b/AppKit/CPObjectController.j
@@ -27,6 +27,9 @@
@import "CPController.j"
@import "CPKeyValueBinding.j"
+@class _CPManagedProxy
+@class CPPredicate;
+
/*!
@class
@@ -47,6 +50,9 @@
BOOL _isEditable;
BOOL _automaticallyPreparesContent;
+ BOOL _usesLazyFetching @accessors(getter=usesLazyFetching, setter=setUsesLazyFetching:);
+ BOOL _isUsingManagedProxy;
+ _CPManagedProxy _managedProxy;
CPCountedSet _observedKeys;
}
@@ -179,6 +185,46 @@
return _automaticallyPreparesContent;
}
+/*!
+ Sets the entity name the controller handles.
+
+ @param CPString newEntityName - The new entity name.
+*/
+- (void)setEntityName:(CPString)newEntityName
+{
+ [_managedProxy setEntityName:newEntityName];
+}
+
+/*!
+ Returns the entity name.
+
+ @return CPString - The name of the entity.
+*/
+- (CPString)entityName
+{
+ return [_managedProxy entityName];
+}
+
+/*!
+ Sets the predicate used to fetch content.
+
+ @param CPPredicate newPredicate - The fetch predicate.
+*/
+- (void)setFetchPredicate:(CPPredicate)newPredicate
+{
+ [_managedProxy setFetchPredicate:newPredicate];
+}
+
+/*!
+ Returns the fetch predicate.
+
+ @return CPPredicate - The predicate used to fetch content.
+*/
+- (CPPredicate)fetchPredicate
+{
+ return [_managedProxy fetchPredicate];
+}
+
/*!
Overridden by a subclass that require control over the creation of new objects.
*/
@@ -189,6 +235,7 @@
/*!
Sets the object class when creating new objects.
+
@param Class - the class of new objects that will be created.
*/
- (void)setObjectClass:(Class)aClass
@@ -363,7 +410,10 @@
var CPObjectControllerContentKey = @"CPObjectControllerContentKey",
CPObjectControllerObjectClassNameKey = @"CPObjectControllerObjectClassNameKey",
CPObjectControllerIsEditableKey = @"CPObjectControllerIsEditableKey",
- CPObjectControllerAutomaticallyPreparesContentKey = @"CPObjectControllerAutomaticallyPreparesContentKey";
+ CPObjectControllerAutomaticallyPreparesContentKey = @"CPObjectControllerAutomaticallyPreparesContentKey",
+ CPObjectControllerUsesLazyFetchingKey = @"CPObjectControllerUsesLazyFetchingKey",
+ CPObjectControllerIsUsingManagedProxyKey = @"CPObjectControllerIsUsingManagedProxyKey",
+ CPObjectControllerManagedProxyKey = @"CPObjectControllerManagedProxyKey";
@implementation CPObjectController (CPCoding)
@@ -374,12 +424,18 @@ var CPObjectControllerContentKey = @"CPObjectControllerCo
if (self)
{
var objectClassName = [aCoder decodeObjectForKey:CPObjectControllerObjectClassNameKey],
- objectClass = CPClassFromString(objectClassName);
+ objectClass = CPClassFromString(objectClassName),
+ content = [aCoder decodeObjectForKey:CPObjectControllerContentKey];
[self setObjectClass:objectClass || [CPMutableDictionary class]];
[self setEditable:[aCoder decodeBoolForKey:CPObjectControllerIsEditableKey]];
[self setAutomaticallyPreparesContent:[aCoder decodeBoolForKey:CPObjectControllerAutomaticallyPreparesContentKey]];
- [self setContent:[aCoder decodeObjectForKey:CPObjectControllerContentKey]];
+ [self setUsesLazyFetching:[aCoder decodeBoolForKey:CPObjectControllerUsesLazyFetchingKey]];
+ _isUsingManagedProxy = [aCoder decodeBoolForKey:CPObjectControllerIsUsingManagedProxyKey];
+ _managedProxy = [aCoder decodeObjectForKey:CPObjectControllerManagedProxyKey];
+
+ if (content != nil)
+ [self setContent:content];
_observedKeys = [[CPCountedSet alloc] init];
}
@@ -398,6 +454,11 @@ var CPObjectControllerContentKey = @"CPObjectControllerCo
[aCoder encodeBool:[self isEditable] forKey:CPObjectControllerIsEditableKey];
[aCoder encodeBool:[self automaticallyPreparesContent] forKey:CPObjectControllerAutomaticallyPreparesContentKey];
+ [aCoder encodeBool:[self usesLazyFetching] forKey:CPObjectControllerUsesLazyFetchingKey];
+ [aCoder encodeBool:_isUsingManagedProxy forKey:CPObjectControllerIsUsingManagedProxyKey];
+
+ if (_managedProxy)
+ [aCoder encodeObject:_managedProxy forKey:CPObjectControllerManagedProxyKey];
}
- (void)awakeFromCib
@@ -825,3 +886,38 @@ var CPObjectControllerContentKey = @"CPObjectControllerCo
}
@end
+
+
+@implementation _CPManagedProxy : CPObject
+{
+ CPString _entityName @accessors(getter=entityName, setter=setEntityName:);
+ CPPredicate _fetchPredicate @accessors(getter=fetchPredicate, setter=setFetchPredicate:);
+}
+
+@end
+
+var CPManagedProxyEntityNameKey = @"CPManagedProxyEntityNameKey",
+ CPManagedProxyFetchPredicateKey = @"CPManagedProxyFetchPredicateKey";
+
+@implementation _CPManagedProxy (CPCoding)
+
+- (id)initWithCoder:(CPCoder)aCoder
+{
+ self = [super init];
+
+ if (self)
+ {
+ [self setEntityName:[aCoder decodeObjectForKey:CPManagedProxyEntityNameKey]];
+ [self setFetchPredicate:[aCoder decodeObjectForKey:CPManagedProxyFetchPredicateKey]];
+ }
+
+ return self;
+}
+
+- (void)encodeWithCoder:(CPCoder)aCoder
+{
+ [aCoder encodeObject:[self entityName] forKey:CPManagedProxyEntityNameKey];
+ [aCoder encodeObject:[self fetchPredicate] forKey:CPManagedProxyFetchPredicateKey];
+}
+
+@end
\ No newline at end of file
diff --git a/AppKit/CPOutlineView.j b/AppKit/CPOutlineView.j
index 6dc83fa0c..eeec78938 100644
--- a/AppKit/CPOutlineView.j
+++ b/AppKit/CPOutlineView.j
@@ -1417,7 +1417,7 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0,
if (_dropItem)
{
[_dropOperationFeedbackView blink];
- [CPTimer scheduledTimerWithTimeInterval:.3 callback:objj_msgSend(self, "expandItem:", _dropItem) repeats:NO];
+ [CPTimer scheduledTimerWithTimeInterval:.3 callback:[self expandItem:_dropItem] repeats:NO];
}
};
diff --git a/AppKit/CPPanel.j b/AppKit/CPPanel.j
index d371ea7a4..c6292c475 100644
--- a/AppKit/CPPanel.j
+++ b/AppKit/CPPanel.j
@@ -22,6 +22,7 @@
@import "CPWindow.j"
+@global CPApp
CPOKButton = 1;
CPCancelButton = 0;
diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j
index 09aecb6fe..6eecf9420 100644
--- a/AppKit/CPPopUpButton.j
+++ b/AppKit/CPPopUpButton.j
@@ -361,15 +361,10 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
*/
- (CPArray)itemTitles
{
- var titles = [],
- items = [self itemArray],
- index = 0,
- count = [items count];
-
- for (; index < count; ++index)
- titles.push([items[index] title]);
-
- return titles;
+ return [[self itemArray] arrayByApplyingBlock:function(item)
+ {
+ return [item title];
+ }];
}
/*!
diff --git a/AppKit/CPResponder.j b/AppKit/CPResponder.j
index eddf8b628..eb1bc841c 100644
--- a/AppKit/CPResponder.j
+++ b/AppKit/CPResponder.j
@@ -24,6 +24,7 @@
@import
@import "CPEvent.j"
+@import "CPCursor.j"
@class CPKeyBinding
@class CPMenu
@@ -200,6 +201,18 @@ CPDeleteForwardKeyCode = 46;
[_nextResponder performSelector:_cmd withObject:anEvent];
}
+/*!
+ Notifies the receiver that the mouse entered the receiver's area and that it can adapt the cursor.
+ @param anEvent contains information about the exit
+ */
+- (void)cursorUpdate:(CPEvent)anEvent
+{
+ if (_nextResponder)
+ [_nextResponder performSelector:_cmd withObject:anEvent];
+ else
+ [[CPCursor arrowCursor] set];
+}
+
/*!
Notifies the receiver that the mouse scroll wheel has moved.
@param anEvent information about the scroll
diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j
index f9d6a2ef9..2ef546f5e 100644
--- a/AppKit/CPSegmentedControl.j
+++ b/AppKit/CPSegmentedControl.j
@@ -115,8 +115,7 @@ CPSegmentSwitchTrackingMomentary = 2;
/*! @ignore */
- (void)setSegments:(CPArray)segments
{
- [_segments removeAllObjects];
- [_themeStates removeAllObjects];
+ [self removeSegmentsAtIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [self segmentCount])]];
[self insertSegments:segments atIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [segments count])]];
}
@@ -135,6 +134,9 @@ CPSegmentSwitchTrackingMomentary = 2;
[_segments insertObjects:segments atIndexes:indices];
[_themeStates insertObjects:newStates atIndexes:indices];
+
+ if (_selectedSegment >= [indices firstIndex])
+ _selectedSegment += [indices count];
}
/*! @ignore */
@@ -143,6 +145,16 @@ CPSegmentSwitchTrackingMomentary = 2;
if ([indices count] == 0)
return;
+ [indices enumerateIndexesUsingBlock:function(idx, stop)
+ {
+ [[_segments objectAtIndex:idx] setSelected:NO];
+ }];
+
+ if ([indices containsIndex:_selectedSegment])
+ _selectedSegment = -1;
+ else if ([indices lastIndex] < _selectedSegment)
+ _selectedSegment -= [indices count];
+
[_segments removeObjectsAtIndexes:indices];
[_themeStates removeObjectsAtIndexes:indices];
}
diff --git a/AppKit/CPSplitView.j b/AppKit/CPSplitView.j
index e10c67e8d..0bd1043ed 100644
--- a/AppKit/CPSplitView.j
+++ b/AppKit/CPSplitView.j
@@ -26,6 +26,7 @@
@import "CPImage.j"
@import "CPView.j"
@import "CPCursor.j"
+@import "CPTrackingArea.j"
@class CPUserDefaults
@global CPApp
@@ -562,26 +563,6 @@ var ShouldSuppressResizeNotifications = 1,
//[[self window] setAcceptsMouseMovedEvents:YES];
}
-- (void)mouseEntered:(CPEvent)anEvent
-{
- // Tracking code handles cursor by itself.
- if (_currentDivider == CPNotFound)
- [self _updateResizeCursor:anEvent];
-}
-
-- (void)mouseMoved:(CPEvent)anEvent
-{
- if (_currentDivider == CPNotFound)
- [self _updateResizeCursor:anEvent];
-}
-
-- (void)mouseExited:(CPEvent)anEvent
-{
- if (_currentDivider == CPNotFound)
- // FIXME: we should use CPCursor push/pop (if previous currentCursor != arrow).
- [[CPCursor arrowCursor] set];
-}
-
- (void)_updateResizeCursor:(CPEvent)anEvent
{
var point = [self convertPoint:[anEvent locationInWindow] fromView:nil];
@@ -1205,6 +1186,29 @@ The sum of the views and the sum of the dividers should be equal to the size of
@end
+@implementation CPSplitView (CPTrackingArea)
+
+- (void)updateTrackingAreas
+{
+ [self removeAllTrackingAreas];
+
+ var options = CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow;
+
+ for (var i = 0; i < _subviews.length - 1; i++)
+ [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:[self effectiveRectOfDividerAtIndex:i]
+ options:options
+ owner:self
+ userInfo:nil]];
+}
+
+- (void)cursorUpdate:(CPEvent)anEvent
+{
+ if (_currentDivider === CPNotFound)
+ [self _updateResizeCursor:anEvent];
+}
+
+@end
+
@implementation CPSplitView (CPSplitViewDelegate)
@@ -1376,6 +1380,8 @@ The sum of the views and the sum of the dividers should be equal to the size of
[_delegate splitViewDidResizeSubviews:[[CPNotification alloc] initWithName:CPSplitViewDidResizeSubviewsNotification object:self userInfo:userInfo]];
[[CPNotificationCenter defaultCenter] postNotificationName:CPSplitViewDidResizeSubviewsNotification object:self userInfo:userInfo];
+
+ [self updateTrackingAreas];
}
@end
diff --git a/AppKit/CPStepper.j b/AppKit/CPStepper.j
index 3436d062f..42442ea04 100644
--- a/AppKit/CPStepper.j
+++ b/AppKit/CPStepper.j
@@ -188,12 +188,12 @@
[_buttonUp setFrame:upFrame];
[_buttonDown setFrame:downFrame];
- [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[controlSizeThemeState, CPThemeStateBordered]] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered];
- [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateDisabled]];
- [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inState:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateHighlighted]];
- [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[controlSizeThemeState, CPThemeStateBordered]] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered];
- [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateDisabled]];
- [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inState:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inState:[CPThemeStateBordered, CPThemeStateHighlighted]];
+ [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inStates:[controlSizeThemeState, CPThemeStateBordered]] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered];
+ [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inStates:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inStates:[CPThemeStateBordered, CPThemeStateDisabled]];
+ [_buttonUp setValue:[self valueForThemeAttribute:@"bezel-color-up-button" inStates:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inStates:[CPThemeStateBordered, CPThemeStateHighlighted]];
+ [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inStates:[controlSizeThemeState, CPThemeStateBordered]] forThemeAttribute:@"bezel-color" inState:CPThemeStateBordered];
+ [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inStates:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateDisabled]] forThemeAttribute:@"bezel-color" inStates:[CPThemeStateBordered, CPThemeStateDisabled]];
+ [_buttonDown setValue:[self valueForThemeAttribute:@"bezel-color-down-button" inStates:[controlSizeThemeState, CPThemeStateBordered, CPThemeStateHighlighted]] forThemeAttribute:@"bezel-color" inStates:[CPThemeStateBordered, CPThemeStateHighlighted]];
}
- (void)_sizeToFit
diff --git a/AppKit/CPTabView.j b/AppKit/CPTabView.j
index a99ee9c9d..822619650 100644
--- a/AppKit/CPTabView.j
+++ b/AppKit/CPTabView.j
@@ -67,8 +67,9 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
CPSegmentedControl _tabs;
_CPTabViewBox _box;
+ CPView _placeHolderView;
- CPNumber _selectedIndex;
+ CPTabViewItem _selectedTabViewItem;
CPTabViewType _type;
CPFont _font;
@@ -81,9 +82,8 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
{
if (self = [super initWithFrame:aFrame])
{
- _items = [CPArray array];
-
[self _init];
+ _selectedTabViewItem = nil;
[self setTabViewType:CPTopTabsBezelBorder];
}
@@ -92,10 +92,9 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
- (void)_init
{
- _selectedIndex = CPNotFound;
-
- _tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
+ _tabs = [[CPSegmentedControl alloc] initWithFrame:CGRectMakeZero()];
[_tabs setHitTests:NO];
+ [_tabs setSegments:[CPArray array]];
var height = [_tabs valueForThemeAttribute:@"min-size"].height;
[_tabs setFrameSize:CGSizeMake(0, height)];
@@ -106,6 +105,13 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
[self addSubview:_box];
[self addSubview:_tabs];
+
+ _placeHolderView = nil;
+}
+
+- (CPArray)items
+{
+ return [_tabs segments];
}
// Adding and Removing Tabs
@@ -115,7 +121,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)addTabViewItem:(CPTabViewItem)aTabViewItem
{
- [self insertTabViewItem:aTabViewItem atIndex:[_items count]];
+ [self insertTabViewItem:aTabViewItem atIndex:[self numberOfTabViewItems]];
}
/*!
@@ -125,15 +131,18 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)insertTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(CPUInteger)anIndex
{
- [_items insertObject:aTabViewItem atIndex:anIndex];
+ [self _insertTabViewItems:[aTabViewItem] atIndexes:[CPIndexSet indexSetWithIndex:anIndex]];
+}
- [self _updateItems];
- [self _repositionTabs];
+- (void)_insertTabViewItems:(CPArray)tabViewItems atIndexes:(CPIndexSet)indexes
+{
+ [_tabs insertSegments:tabViewItems atIndexes:indexes];
+ [tabViewItems makeObjectsPerformSelector:@selector(_setTabView:) withObject:self];
- [aTabViewItem _setTabView:self];
+ [self tileWithChangedItem:[tabViewItems firstObject]];
+ [self _reverseSetContent];
- if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
- [_delegate tabViewDidChangeNumberOfTabViewItems:self];
+ [self _sendDelegateTabViewDidChangeNumberOfTabViewItems];
}
/*!
@@ -142,23 +151,39 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)removeTabViewItem:(CPTabViewItem)aTabViewItem
{
- var count = [_items count];
- for (var i = 0; i < count; i++)
- {
- if ([_items objectAtIndex:i] === aTabViewItem)
- {
- [_items removeObjectAtIndex:i];
- break;
- }
- }
+ var idx = [[self items] indexOfObjectIdenticalTo:aTabViewItem];
- [self _updateItems];
- [self _repositionTabs];
+ if (idx == CPNotFound)
+ return;
+ [_tabs removeSegmentsAtIndexes:[CPIndexSet indexSetWithIndex:idx]];
[aTabViewItem _setTabView:nil];
- if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
- [_delegate tabViewDidChangeNumberOfTabViewItems:self];
+ [self tileWithChangedItem:nil];
+ [self _didRemoveTabViewItem:aTabViewItem atIndex:idx];
+ [self _reverseSetContent];
+
+ [self _sendDelegateTabViewDidChangeNumberOfTabViewItems];
+}
+
+- (void)_didRemoveTabViewItem:(CPTabViewItem)aTabViewItem atIndex:(CPInteger)idx
+{
+ // If the selection is managed by bindings, let the binder do that.
+ if ([self binderForBinding:CPSelectionIndexesBinding] || [self binderForBinding:CPSelectedIndexBinding])
+ return;
+
+ if (_selectedTabViewItem == aTabViewItem)
+ {
+ var didSelect = NO;
+
+ if (idx > 0)
+ didSelect = [self selectTabViewItemAtIndex:idx - 1];
+ else if ([self numberOfTabViewItems] > 0)
+ didSelect = [self selectTabViewItemAtIndex:0];
+
+ if (didSelect == NO)
+ _selectedTabViewItem == nil;
+ }
}
// Accessing Tabs
@@ -169,7 +194,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (int)indexOfTabViewItem:(CPTabViewItem)aTabViewItem
{
- return [_items indexOfObjectIdenticalTo:aTabViewItem];
+ return [[self items] indexOfObjectIdenticalTo:aTabViewItem];
}
/*!
@@ -179,11 +204,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (int)indexOfTabViewItemWithIdentifier:(CPString)anIdentifier
{
- for (var index = [_items count]; index >= 0; index--)
- if ([[_items[index] identifier] isEqual:anIdentifier])
- return index;
-
- return CPNotFound;
+ return [[self items] indexOfObjectPassingTest:function(item, idx, stop)
+ {
+ return [[item identifier] isEqual:anIdentifier];
+ }];
}
/*!
@@ -192,7 +216,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (unsigned)numberOfTabViewItems
{
- return [_items count];
+ return [[self items] count];
}
/*!
@@ -201,7 +225,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (CPTabViewItem)tabViewItemAtIndex:(CPUInteger)anIndex
{
- return [_items objectAtIndex:anIndex];
+ return [[self items] objectAtIndex:anIndex];
}
/*!
@@ -210,7 +234,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (CPArray)tabViewItems
{
- return [_items copy]; // Copy?
+ return [[self items] copy]; // Copy?
}
// Selecting a Tab
@@ -220,7 +244,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)selectFirstTabViewItem:(id)aSender
{
- if ([_items count] === 0)
+ if ([self numberOfTabViewItems] === 0)
return; // throw?
[self selectTabViewItemAtIndex:0];
@@ -232,10 +256,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)selectLastTabViewItem:(id)aSender
{
- if ([_items count] === 0)
+ if ([self numberOfTabViewItems] === 0)
return; // throw?
- [self selectTabViewItemAtIndex:[_items count] - 1];
+ [self selectTabViewItemAtIndex:[self numberOfTabViewItems] - 1];
}
/*!
@@ -244,12 +268,12 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)selectNextTabViewItem:(id)aSender
{
- if (_selectedIndex === CPNotFound)
+ if (_selectedTabViewItem === nil)
return;
- var nextIndex = _selectedIndex + 1;
+ var nextIndex = [self indexOfTabViewItem:_selectedTabViewItem] + 1;
- if (nextIndex === [_items count])
+ if (nextIndex === [self numberOfTabViewItems])
// does nothing. According to spec at (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSTabView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTabView/selectNextTabViewItem:)
return;
@@ -262,10 +286,10 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (void)selectPreviousTabViewItem:(id)aSender
{
- if (_selectedIndex === CPNotFound)
+ if (_selectedTabViewItem === nil)
return;
- var previousIndex = _selectedIndex - 1;
+ var previousIndex = [self indexOfTabViewItem:_selectedTabViewItem] - 1;
if (previousIndex < 0)
return; // does nothing. See above.
@@ -288,22 +312,32 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (BOOL)selectTabViewItemAtIndex:(CPUInteger)anIndex
{
- if (anIndex === _selectedIndex)
- return;
-
- var aTabViewItem = [self tabViewItemAtIndex:anIndex];
-
- if ((_delegateSelectors & CPTabViewShouldSelectTabViewItemSelector) && ![_delegate tabView:self shouldSelectTabViewItem:aTabViewItem])
+ if (![self _selectTabViewItemAtIndex:anIndex])
return NO;
- if (_delegateSelectors & CPTabViewWillSelectTabViewItemSelector)
- [_delegate tabView:self willSelectTabViewItem:aTabViewItem];
+ [self _reverseSetSelectedIndex];
- [_tabs selectSegmentWithTag:anIndex];
- [self _setSelectedIndex:anIndex];
+ return YES;
+}
- if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector)
- [_delegate tabView:self didSelectTabViewItem:aTabViewItem];
+// Like selectTabViewItemAtIndex: but without bindings interaction
+- (BOOL)_selectTabViewItemAtIndex:(CPUInteger)anIndex
+{
+ var aTabViewItem = [self tabViewItemAtIndex:anIndex];
+
+ if (aTabViewItem == _selectedTabViewItem)
+ return NO;
+
+ if (![self _sendDelegateShouldSelectTabViewItem:aTabViewItem])
+ return NO;
+
+ [self _sendDelegateWillSelectTabViewItem:aTabViewItem];
+
+ [_tabs setSelectedSegment:anIndex];
+ _selectedTabViewItem = aTabViewItem;
+ [self _displayItemView:[aTabViewItem view]];
+
+ [self _sendDelegateDidSelectTabViewItem:aTabViewItem];
return YES;
}
@@ -314,10 +348,7 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
*/
- (CPTabViewItem)selectedTabViewItem
{
- if (_selectedIndex != CPNotFound)
- return [_items objectAtIndex:_selectedIndex];
-
- return nil;
+ return _selectedTabViewItem;
}
// Modifying the font
@@ -378,6 +409,14 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
[self setNeedsLayout];
}
+- (void)tileWithChangedItem:(CPTabViewItem)aTabViewItem
+{
+ var segment = aTabViewItem ? [self indexOfTabViewItem:aTabViewItem] : 0;
+ [_tabs tileWithChangedSegment:segment];
+
+ [self setNeedsLayout];
+}
+
- (void)layoutSubviews
{
// Even if CPTabView's autoresizesSubviews is NO, _tabs and _box has to be laid out.
@@ -395,7 +434,6 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
[_box setFrame:CGRectMake(0, origin, CGRectGetWidth(aFrame),
CGRectGetHeight(aFrame) - segmentedHeight / 2)];
- [self _updateItems];
[self _repositionTabs];
}
}
@@ -473,32 +511,131 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
[_tabs setCenter:CGPointMake(horizontalCenterOfSelf, verticalCenterOfTabs)];
}
-- (void)_setSelectedIndex:(CPNumber)index
+- (void)_displayItemView:(CPView)aView
{
- _selectedIndex = index;
- [self _setContentViewFromItem:[_items objectAtIndex:_selectedIndex]];
+ [_box setContentView:aView];
}
-- (void)_setContentViewFromItem:(CPTabViewItem)anItem
+// DELEGATE METHODS
+
+- (BOOL)_sendDelegateShouldSelectTabViewItem:(CPTabViewItem)aTabViewItem
{
- [_box setContentView:[anItem view]];
+ if (_delegateSelectors & CPTabViewShouldSelectTabViewItemSelector)
+ return [_delegate tabView:self shouldSelectTabViewItem:aTabViewItem];
+
+ return YES;
}
-- (void)_updateItems
+- (void)_sendDelegateWillSelectTabViewItem:(CPTabViewItem)aTabViewItem
{
- var count = [_items count];
- [_tabs setSegmentCount:count];
+ if (_delegateSelectors & CPTabViewWillSelectTabViewItemSelector)
+ [_delegate tabView:self willSelectTabViewItem:aTabViewItem];
+}
- for (var i = 0; i < count; i++)
+- (void)_sendDelegateDidSelectTabViewItem:(CPTabViewItem)aTabViewItem
+{
+ if (_delegateSelectors & CPTabViewDidSelectTabViewItemSelector)
+ [_delegate tabView:self didSelectTabViewItem:aTabViewItem];
+}
+
+- (void)_sendDelegateTabViewDidChangeNumberOfTabViewItems
+{
+ if (_delegateSelectors & CPTabViewDidChangeNumberOfTabViewItemsSelector)
+ [_delegate tabViewDidChangeNumberOfTabViewItems:self];
+}
+
+@end
+
+@implementation CPTabView (BindingSupport)
+
++ (Class)_binderClassForBinding:(CPString)aBinding
+{
+ if (aBinding == CPContentBinding)
+ return [_CPTabViewContentBinder class];
+ else if (aBinding == CPSelectionIndexesBinding || aBinding == CPSelectedIndexBinding)
+ return [_CPTabViewSelectionBinder class];
+
+ return [super _binderClassForBinding:aBinding];
+}
+
++ (BOOL)isBindingExclusive:(CPString)aBinding
+{
+ return (aBinding == CPSelectionIndexesBinding || aBinding == CPSelectedIndexBinding);
+}
+
+- (void)_reverseSetContent
+{
+ var theBinder = [self binderForBinding:CPContentBinding];
+ [theBinder reverseSetValueFor:@"items"];
+}
+
+- (void)_reverseSetSelectedIndex
+{
+ var theBinder = [self binderForBinding:CPSelectionIndexesBinding];
+
+ if (theBinder !== nil)
+ [theBinder reverseSetValueFor:@"selectionIndexes"];
+ else
{
- [_tabs setLabel:[[_items objectAtIndex:i] label] forSegment:i];
- [_tabs setTag:i forSegment:i];
+ theBinder = [self binderForBinding:CPSelectedIndexBinding];
+ [theBinder reverseSetValueFor:@"selectedIndex"];
+ }
+}
+
+- (CPBinder)binderForBinding:(CPString)aBinding
+{
+ var cls = [[self class] _binderClassForBinding:aBinding]
+ return [cls getBinding:aBinding forObject:self];
+}
+
+- (void)setItems:(CPArray)tabViewItems
+{
+ if ([tabViewItems isEqualToArray:[_tabs segments]])
+ return;
+
+ [[self items] makeObjectsPerformSelector:@selector(_setTabView:) withObject:nil];
+ [_tabs setSegments:tabViewItems];
+ [tabViewItems makeObjectsPerformSelector:@selector(_setTabView:) withObject:self];
+
+ [self tileWithChangedItem:nil];
+
+ // Update the selection because setSegments: did remove all previous segments AND the selection.
+ [_tabs setSelectedSegment:[self indexOfTabViewItem:_selectedTabViewItem]];
+
+ // should we send delegate methods in bindings mode ?
+ //[self _delegateTabViewDidChangeNumberOfTabViewItems:self];
+}
+
+- (void)_deselectAll
+{
+ [_tabs setSelectedSegment:-1];
+ _selectedTabViewItem = nil;
+}
+
+- (void)_displayPlaceholder:(CPString)aPlaceholder
+{
+ if (_placeHolderView == nil)
+ {
+ _placeHolderView = [[CPView alloc] initWithFrame:CGRectMakeZero()];
+ var textField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()];
+ [textField setTag:1000];
+ [textField setTextColor:[CPColor whiteColor]];
+ [textField setFont:[CPFont boldFontWithName:@"Geneva" size:18 italic:YES]];
+ [_placeHolderView addSubview:textField];
}
- if (_selectedIndex === CPNotFound)
- [self selectFirstTabViewItem:self];
-}
+ var textField = [_placeHolderView viewWithTag:1000];
+ [textField setStringValue:aPlaceholder];
+ [textField sizeToFit];
+ var boxBounds = [_box bounds],
+ textFieldBounds = [textField bounds],
+ origin = CGPointMake(CGRectGetWidth(boxBounds)/2 - CGRectGetWidth(textFieldBounds)/2, CGRectGetHeight(boxBounds)/2 - CGRectGetHeight(textFieldBounds));
+
+ [textField setFrameOrigin:origin];
+
+ [self _displayItemView:_placeHolderView];
+}
#pragma mark -
#pragma mark Override
@@ -513,6 +650,103 @@ var CPTabViewDidSelectTabViewItemSelector = 1 << 1,
@end
+var _CPTabViewContentBinderNull = @"NO CONTENT";
+
+@implementation _CPTabViewContentBinder : CPBinder
+{
+}
+
+- (void)_updatePlaceholdersWithOptions:(CPDictionary)options
+{
+ [super _updatePlaceholdersWithOptions:options];
+ [self _setPlaceholder:_CPTabViewContentBinderNull forMarker:CPNullMarker isDefault:YES];
+}
+
+- (void)setPlaceholderValue:(id)aValue withMarker:(CPString)aMarker forBinding:(CPString)aBinding
+{
+ [_source setItems:@[]];
+ [_source _setPlaceholderView:aValue];
+}
+
+- (void)setValue:(id)aValue forBinding:(CPString)aBinding
+{
+ [_source setItems:aValue];
+}
+
+- (id)valueForBinding:(CPString)aBinding
+{
+ return [_source items];
+}
+
+@end
+
+var _CPTabViewSelectionBinderMultipleValues = @"Multiple Selection",
+ _CPTabViewSelectionBinderNoSelection = @"No Selection";
+
+@implementation _CPTabViewSelectionBinder : CPBinder
+{
+}
+
+- (void)_updatePlaceholdersWithOptions:(CPDictionary)options
+{
+ [super _updatePlaceholdersWithOptions:options];
+
+ [self _setPlaceholder:_CPTabViewSelectionBinderMultipleValues forMarker:CPMultipleValuesMarker isDefault:YES];
+ [self _setPlaceholder:_CPTabViewSelectionBinderNoSelection forMarker:CPNoSelectionMarker isDefault:YES];
+}
+
+- (void)setPlaceholderValue:(id)aValue withMarker:(CPString)aMarker forBinding:(CPString)aBinding
+{
+ if (aMarker == CPNoSelectionMarker || aMarker == CPNullMarker)
+ [_source _deselectAll];
+
+ [_source _displayPlaceholder:aValue];
+}
+
+- (void)setValue:(id)aValue forBinding:(CPString)aBinding
+{
+ if (aBinding == CPSelectionIndexesBinding)
+ {
+ if (aValue == nil || [aValue count] == 0)
+ {
+ [_source _deselectAll];
+ [_source _displayPlaceholder:_CPTabViewSelectionBinderNoSelection];
+ }
+ else if ([aValue count] > 1)
+ [_source _displayPlaceholder:_CPTabViewSelectionBinderMultipleValues];
+ else if ([aValue firstIndex] < [_source numberOfTabViewItems])
+ [_source _selectTabViewItemAtIndex:[aValue firstIndex]];
+ }
+ else if (aBinding == CPSelectedIndexBinding)
+ {
+ if (aValue == CPNotFound)
+ {
+ [_source _deselectAll];
+ [_source _displayPlaceholder:_CPTabViewSelectionBinderNoSelection];
+ }
+ else if (aValue < [_source numberOfTabViewItems])
+ [_source _selectTabViewItemAtIndex:aValue];
+ }
+}
+
+- (id)valueForBinding:(CPString)aBinding
+{
+ if (aBinding == CPSelectionIndexesBinding)
+ {
+ var result = [CPIndexSet indexSet],
+ idx = [_source indexOfTabViewItem:[_source selectedTabViewItem]];
+
+ if (idx !== CPNotFound)
+ [result addIndex:idx];
+
+ return result;
+ }
+ else if (aBinding == CPSelectedIndexBinding)
+ return [_source indexOfTabViewItem:[_source selectedTabViewItem]];
+}
+
+@end
+
var CPTabViewItemsKey = "CPTabViewItemsKey",
CPTabViewSelectedItemKey = "CPTabViewSelectedItemKey",
CPTabViewTypeKey = "CPTabViewTypeKey",
@@ -530,12 +764,13 @@ var CPTabViewItemsKey = "CPTabViewItemsKey",
_font = [aCoder decodeObjectForKey:CPTabViewFontKey];
[_tabs setFont:_font];
- _items = [aCoder decodeObjectForKey:CPTabViewItemsKey];
- [_items makeObjectsPerformSelector:@selector(_setTabView:) withObject:self];
+ var items = [aCoder decodeObjectForKey:CPTabViewItemsKey] || [CPArray array];
+ [self _insertTabViewItems:items atIndexes:[CPIndexSet indexSetWithIndexesInRange:CPMakeRange(0, [items count])]];
[self setDelegate:[aCoder decodeObjectForKey:CPTabViewDelegateKey]];
- self.selectOnAwake = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey];
+ _selectedTabViewItem = [aCoder decodeObjectForKey:CPTabViewSelectedItemKey];
+
_type = [aCoder decodeIntForKey:CPTabViewTypeKey];
}
@@ -548,12 +783,19 @@ var CPTabViewItemsKey = "CPTabViewItemsKey",
// This cannot be run in initWithCoder because it might call selectTabViewItem:, which is
// not safe to call before the views of the tab views items are fully decoded.
- [self _updateItems];
- if (self.selectOnAwake)
+ if (_selectedTabViewItem)
{
- [self selectTabViewItem:self.selectOnAwake];
- delete self.selectOnAwake;
+ var idx = [self indexOfTabViewItem:_selectedTabViewItem];
+
+ if (idx !== CPNotFound)
+ {
+ // Temporarily set the selected item to not selected.
+ // It allows the initial selection to be made correctly.
+ _selectedTabViewItem = nil;
+
+ [self selectTabViewItemAtIndex:idx];
+ }
}
var type = _type;
@@ -575,9 +817,7 @@ var CPTabViewItemsKey = "CPTabViewItemsKey",
[aCoder encodeObject:_items forKey:CPTabViewItemsKey];
- var selected = [self selectedTabViewItem];
- if (selected)
- [aCoder encodeObject:selected forKey:CPTabViewSelectedItemKey];
+ [aCoder encodeConditionalObject:_selectedTabViewItem forKey:CPTabViewSelectedItemKey];
[aCoder encodeInt:_type forKey:CPTabViewTypeKey];
[aCoder encodeObject:_font forKey:CPTabViewFontKey];
diff --git a/AppKit/CPTabViewItem.j b/AppKit/CPTabViewItem.j
index 671d5bc78..78795d666 100644
--- a/AppKit/CPTabViewItem.j
+++ b/AppKit/CPTabViewItem.j
@@ -24,6 +24,7 @@
@import "CPView.j"
@class CPTabView
+@class CPViewController
/*
The tab is currently selected.
@@ -53,14 +54,34 @@ CPPressedTab = 2;
*/
@implementation CPTabViewItem : CPObject
{
- id _identifier;
- CPString _label;
+ id _identifier;
+ CPString _label;
+ CPInteger _tag @accessors(property=tag);
- CPView _view;
- CPView _auxiliaryView;
+ CPView _view;
+ CPView _auxiliaryView;
- CPTabView _tabView;
- unsigned _tabState; // Looks like it is not yet implemented
+ CPTabView _tabView;
+ unsigned _tabState; // Looks like it is not yet implemented
+
+ CPImage _image @accessors(property=image);
+ CPViewController _viewController @accessors(getter=viewController);
+
+ BOOL _enabled @accessors(property=enabled);
+ BOOL _selected @accessors(property=selected);
+ CGRect _tabRect @accessors(property=frame);
+ float _width @accessors(property=width);
+}
+
+/*
+
+*/
++ (CPTabViewItem)tabViewItemWithViewController:(CPViewController)aViewController
+{
+ var item = [[CPTabViewItem alloc] init];
+ [item setViewController:aViewController];
+
+ return item;
}
- (id)init
@@ -68,6 +89,19 @@ CPPressedTab = 2;
return [self initWithIdentifier:@""];
}
+- (void)_init
+{
+ _tag = 0;
+ _viewController = nil;
+ _image = nil;
+ _tabState = 0;
+ _tabView = nil;
+ _enabled = YES;
+ _selected = NO;
+ _tabRect = CGRectMakeZero();
+ _width = 0;
+}
+
/*!
Initializes the tab view item with the specified identifier.
@return the initialized CPTabViewItem
@@ -76,8 +110,12 @@ CPPressedTab = 2;
{
self = [super init];
- if (self)
- _identifier = anIdentifier;
+ [self _init];
+
+ _identifier = anIdentifier;
+ _label = nil;
+ _view = nil;
+ //_auxiliaryView = nil;
return self;
}
@@ -89,8 +127,11 @@ CPPressedTab = 2;
*/
- (void)setLabel:(CPString)aLabel
{
+ if ([aLabel isEqualToString:_label])
+ return;
+
_label = aLabel;
- [_tabView setNeedsLayout];
+ [_tabView tileWithChangedItem:self];
}
/*!
@@ -101,6 +142,28 @@ CPPressedTab = 2;
return _label;
}
+// Working With Images
+/*!
+ Sets the CPTabViewItem's image.
+ @param anImage the image for the item
+*/
+- (void)setImage:(CPImage)anImage
+{
+ if ([anImage isEqual:_image])
+ return;
+
+ _image = anImage;
+ [_tabView tileWithChangedItem:self];
+}
+
+/*!
+ Returns the CPTabViewItem's image
+*/
+- (CPImage)image
+{
+ return _image;
+}
+
// Checking the Tab Display State
/*!
Returns the tab's current state.
@@ -140,7 +203,7 @@ CPPressedTab = 2;
_view = aView;
if ([_tabView selectedTabViewItem] == self)
- [_tabView _setContentViewFromItem:self];
+ [_tabView _displayItemView:_view];
}
/*!
@@ -148,6 +211,9 @@ CPPressedTab = 2;
*/
- (CPView)view
{
+ if (!_view && _viewController)
+ return [_viewController view]; // The view controller loads here.
+
return _view;
}
@@ -186,10 +252,32 @@ CPPressedTab = 2;
_tabView = aView;
}
+/*!
+ Sets the specified view controller for the tab view item.
+ @param aViewController an instance of CPViewController.
+*/
+- (void)setViewController:(CPViewController)aViewController
+{
+ _viewController = aViewController;
+
+ var identifier = [aViewController cibName],
+ title = [_viewController title];
+
+ if (identifier)
+ _identifier = identifier;
+
+ if (title)
+ [self setLabel:title];
+
+ if ([_tabView selectedTabViewItem] == self)
+ [_tabView _displayItemView:[_viewController view]];
+}
+
@end
var CPTabViewItemIdentifierKey = "CPTabViewItemIdentifierKey",
CPTabViewItemLabelKey = "CPTabViewItemLabelKey",
+ CPTabViewItemImageKey = "CPTabViewItemImageKey",
CPTabViewItemViewKey = "CPTabViewItemViewKey",
CPTabViewItemAuxViewKey = "CPTabViewItemAuxViewKey";
@@ -202,8 +290,11 @@ var CPTabViewItemIdentifierKey = "CPTabViewItemIdentifierKey",
if (self)
{
+ [self _init];
+
_identifier = [aCoder decodeObjectForKey:CPTabViewItemIdentifierKey];
_label = [aCoder decodeObjectForKey:CPTabViewItemLabelKey];
+ _image = [aCoder decodeObjectForKey:CPTabViewItemImageKey];
_view = [aCoder decodeObjectForKey:CPTabViewItemViewKey];
_auxiliaryView = [aCoder decodeObjectForKey:CPTabViewItemAuxViewKey];
@@ -216,6 +307,7 @@ var CPTabViewItemIdentifierKey = "CPTabViewItemIdentifierKey",
{
[aCoder encodeObject:_identifier forKey:CPTabViewItemIdentifierKey];
[aCoder encodeObject:_label forKey:CPTabViewItemLabelKey];
+ [aCoder encodeObject:_image forKey:CPTabViewItemImageKey];
[aCoder encodeObject:_view forKey:CPTabViewItemViewKey];
[aCoder encodeObject:_auxiliaryView forKey:CPTabViewItemAuxViewKey];
diff --git a/AppKit/CPTableHeaderView.j b/AppKit/CPTableHeaderView.j
index 36d6d1ef1..58f5cb152 100644
--- a/AppKit/CPTableHeaderView.j
+++ b/AppKit/CPTableHeaderView.j
@@ -24,6 +24,7 @@
@import "CPView.j"
@import "CPCursor.j"
@import "_CPImageAndTextView.j"
+@import "CPTrackingArea.j"
@class CPTableView
@@ -305,7 +306,9 @@ var CPTableHeaderViewResizeZone = 3.0,
self = [super initWithFrame:aFrame];
if (self)
+ {
[self _init];
+ }
return self;
}
@@ -456,34 +459,26 @@ var CPTableHeaderViewResizeZone = 3.0,
_activeColumn = -1;
}
-- (void)mouseEntered:(CPEvent)theEvent
+@end
+
+@implementation CPTableHeaderView (CPTrackingArea)
+
+- (void)updateTrackingAreas
{
- var location = [theEvent globalLocation];
-
- if (CGPointEqualToPoint(location, _mouseEnterExitLocation))
- return;
-
- _mouseEnterExitLocation = location;
-
- [self _updateResizeCursor:theEvent];
+ [self removeAllTrackingAreas];
+
+ var options = CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow;
+
+ for (var i = 0; i < _tableView._tableColumns.length; i++)
+ [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:[self _cursorRectForColumn:i]
+ options:options
+ owner:self
+ userInfo:nil]];
}
-- (void)mouseMoved:(CPEvent)theEvent
+- (void)cursorUpdate:(CPEvent)anEvent
{
- [self _updateResizeCursor:theEvent];
-}
-
-- (void)mouseExited:(CPEvent)theEvent
-{
- var location = [theEvent globalLocation];
-
- if (CGPointEqualToPoint(location, _mouseEnterExitLocation))
- return;
-
- _mouseEnterExitLocation = location;
-
- // FIXME: we should use CPCursor push/pop (if previous currentCursor != arrow).
- [[CPCursor arrowCursor] set];
+ [self _updateResizeCursor:anEvent];
}
@end
@@ -622,7 +617,7 @@ var CPTableHeaderViewResizeZone = 3.0,
[[headerView subviews] makeObjectsPerformSelector:@selector(setHidden:) withObject:YES];
// The underlying column header shows normal state
- [headerView unsetThemeState:CPThemeStateHighlighted | CPThemeStateSelected];
+ [headerView unsetThemeStates:[CPThemeStateHighlighted, CPThemeStateSelected]];
// Keep track of the location within the column header where the original mousedown occurred
_columnDragHeaderView = [_columnDragView viewWithTag:CPTableHeaderViewDragColumnHeaderTag];
@@ -697,6 +692,7 @@ var CPTableHeaderViewResizeZone = 3.0,
[[_tableView headerView] setNeedsLayout];
[[CPCursor arrowCursor] set];
+ [self updateTrackingAreas];
}
- (BOOL)_shouldResizeTableColumn:(CPInteger)aColumnIndex at:(CGPoint)aPoint
@@ -762,7 +758,10 @@ var CPTableHeaderViewResizeZone = 3.0,
var tableColumn = [[_tableView tableColumns] objectAtIndex:aColumnIndex];
if ([tableColumn width] != _columnOldWidth)
+ {
[_tableView _didResizeTableColumn:tableColumn oldWidth:_columnOldWidth];
+ [self updateTrackingAreas];
+ }
[tableColumn setDisableResizingPosting:NO];
[_tableView setDisableAutomaticResizing:NO];
@@ -772,13 +771,6 @@ var CPTableHeaderViewResizeZone = 3.0,
- (void)_updateResizeCursor:(CPEvent)theEvent
{
- // never get stuck in resize cursor mode (FIXME take out when we turn on tracking rects)
- if (![_tableView allowsColumnResizing] || ([theEvent type] === CPLeftMouseUp && ![[self window] acceptsMouseMovedEvents]))
- {
- [[CPCursor arrowCursor] set];
- return;
- }
-
var mouseLocation = [self convertPoint:[theEvent locationInWindow] fromView:nil],
mouseOverLocation = CGPointMake(MAX(mouseLocation.x - CPTableHeaderViewResizeZone, 0.0), mouseLocation.y),
overColumn = [self columnAtPoint:mouseOverLocation];
diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j
index 9254ba296..0762c2b9d 100644
--- a/AppKit/CPTableView.j
+++ b/AppKit/CPTableView.j
@@ -3649,7 +3649,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
var view = nil;
if (_viewForTableColumnRowSelector)
- view = objj_msgSend(self, _viewForTableColumnRowSelector, aTableColumn, aRow);
+ view = self.isa.objj_msgSend2(self, _viewForTableColumnRowSelector, aTableColumn, aRow);
if (!view)
{
@@ -4211,7 +4211,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
while (count--)
{
var currentIndex = indexes[count],
- rowRect = CGRectIntersection(objj_msgSend(self, rectSelector, currentIndex), aRect);
+ rowRect = CGRectIntersection(self.isa.objj_msgSend1(self, rectSelector, currentIndex), aRect);
// group rows get the same highlight style as other rows if they're source list...
if (!drawGradient)
@@ -4285,7 +4285,7 @@ Your delegate can implement this method to avoid subclassing the tableview to ad
for (var i = 0; i < count2; i++)
{
- var rect = objj_msgSend(self, rectSelector, indexes[i]),
+ var rect = self.isa.objj_msgSend1(self, rectSelector, indexes[i]),
minX = CGRectGetMinX(rect) - 0.5,
maxX = CGRectGetMaxX(rect) - 0.5,
minY = CGRectGetMinY(rect) - 0.5,
@@ -6304,17 +6304,17 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey",
var showCallback = function()
{
- objj_msgSend(self, "setHidden:", NO)
+ [self setHidden: NO];
isBlinking = NO;
};
var hideCallback = function()
{
- objj_msgSend(self, "setHidden:", YES)
+ [self setHidden: YES];
isBlinking = YES;
};
- objj_msgSend(self, "setHidden:", YES);
+ [self setHidden: YES];
[CPTimer scheduledTimerWithTimeInterval:0.1 callback:showCallback repeats:NO];
[CPTimer scheduledTimerWithTimeInterval:0.19 callback:hideCallback repeats:NO];
[CPTimer scheduledTimerWithTimeInterval:0.27 callback:showCallback repeats:NO];
@@ -6400,18 +6400,12 @@ var CPTableViewDataSourceKey = @"CPTableViewDataSourceKey",
- (BOOL)setThemeState:(ThemeState)aState
{
- if (aState.isa && [aState isKindOfClass:CPArray])
- aState = CPThemeState.apply(null, aState);
-
[super setThemeState:aState];
[self recursivelyPerformSelector:@selector(setThemeState:) withObject:aState startingFrom:self];
}
- (BOOL)unsetThemeState:(ThemeState)aState
{
- if (aState.isa && [aState isKindOfClass:CPArray])
- aState = CPThemeState.apply(null, aState);
-
[super unsetThemeState:aState];
[self recursivelyPerformSelector:@selector(unsetThemeState:) withObject:aState startingFrom:self];
}
diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j
index 00894190e..09ed728f4 100644
--- a/AppKit/CPTextField.j
+++ b/AppKit/CPTextField.j
@@ -70,7 +70,6 @@ var CPTextFieldDOMCurrentElement = nil,
var CPSecureTextFieldCharacter = "\u2022";
-
function CPTextFieldBlurFunction(anEvent, owner, domElement, inputElement, resigning, didBlurRef)
{
if (owner && domElement != inputElement.parentNode)
@@ -87,7 +86,7 @@ function CPTextFieldBlurFunction(anEvent, owner, domElement, inputElement, resig
*/
if ([owner _isWithinUsablePlatformRect])
{
- window.setTimeout(function()
+ [[CPRunLoop mainRunLoop] performBlock:function()
{
// This will prevent to jump to the focused element
var previousScrollingOrigin = [owner _scrollToVisibleRectAndReturnPreviousOrigin];
@@ -95,7 +94,7 @@ function CPTextFieldBlurFunction(anEvent, owner, domElement, inputElement, resig
inputElement.focus();
[owner _restorePreviousScrollingOrigin:previousScrollingOrigin];
- }, 0.0);
+ } argument:nil order:0 modes:[CPDefaultRunLoopMode]];
}
}
@@ -671,11 +670,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
CPTextFieldInputOwner = self;
- window.setTimeout(function()
+ [[CPRunLoop mainRunLoop] performBlock:function()
{
- /*
- setTimeout handlers are not guaranteed to fire in the order they were initiated. This can cause a race condition when several windows with text fields are opened quickly, resulting in several instances of this timeout function being fired, perhaps out of order. So we have to check that by the time this function is fired, CPTextFieldInputOwner has not been changed to another text field in the meantime.
- */
if (CPTextFieldInputOwner !== self)
return;
@@ -688,12 +684,21 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
// Select the text if the textfield became first responder through keyboard interaction
if (!_willBecomeFirstResponderByClick)
+ {
[self _selectText:self immediately:YES];
+ }
+ else
+ {
+ var point = CGPointMake([self convertPointFromBase:[[CPApp currentEvent] locationInWindow]].x - [self currentValueForThemeAttribute:@"content-inset"].left, 0),
+ position = [CPPlatformString charPositionOfString:[self stringValue] withFont:[self font] forPoint:point];
+
+ [self setSelectedRange:CPMakeRange(position, 0)];
+ }
_willBecomeFirstResponderByClick = NO;
[self textDidFocus:[CPNotification notificationWithName:CPTextFieldDidFocusNotification object:self userInfo:nil]];
- }, 0.0);
+ } argument:nil order:0 modes:[CPDefaultRunLoopMode]];
#endif
@@ -1510,7 +1515,7 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
if (immediately)
element.select();
else
- window.setTimeout(function() { element.select(); }, 0);
+ [[CPRunLoop mainRunLoop] performBlock:function(){ element.select(); } argument:nil order:0 modes:[CPDefaultRunLoopMode]];
}
else if (wind !== nil && [wind makeFirstResponder:self])
[self _selectText:sender immediately:immediately];
diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j
index 426c462ca..a9246cc89 100644
--- a/AppKit/CPTheme.j
+++ b/AppKit/CPTheme.j
@@ -36,7 +36,6 @@ var CPThemesByName = { },
/*!
@ingroup appkit
*/
-
@implementation CPTheme : CPObject
{
CPString _name;
@@ -142,20 +141,19 @@ var CPThemesByName = { },
if (!className)
{
- if ([aClass isKindOfClass:[CPView class]])
+ if ([aClass respondsToSelector:@selector(defaultThemeClass)])
{
- if ([aClass respondsToSelector:@selector(defaultThemeClass)])
- className = [aClass defaultThemeClass];
- else if ([aClass respondsToSelector:@selector(themeClass)])
- {
- CPLog.warn(@"%@ themeClass is deprecated in favor of defaultThemeClass", CPStringFromClass(aClass));
- className = [aClass themeClass];
- }
- else
- return nil;
+ className = [aClass defaultThemeClass];
+ }
+ else if ([aClass respondsToSelector:@selector(themeClass)])
+ {
+ CPLog.warn(@"%@ themeClass is deprecated in favor of defaultThemeClass", CPStringFromClass(aClass));
+ className = [aClass themeClass];
}
else
- [CPException raise:CPInvalidArgumentException reason:@"aClass must be a class object or a string."];
+ {
+ return nil;
+ }
}
return [_attributes objectForKey:className];
@@ -328,6 +326,7 @@ function ThemeState(stateNames)
{
if (!stateNames.hasOwnProperty(key))
continue;
+
if (key !== 'normal')
{
this._stateNames[key] = true;
@@ -345,8 +344,10 @@ function ThemeState(stateNames)
this._stateNameString = stateNameKeys[0];
var stateNameLength = stateNameKeys.length;
+
for (var stateIndex = 1; stateIndex < stateNameLength; stateIndex++)
this._stateNameString = this._stateNameString + "+" + stateNameKeys[stateIndex];
+
this._stateNameCount = stateNameLength;
}
@@ -393,7 +394,19 @@ ThemeState.prototype.without = function(aState)
if (!aState || aState === [CPNull null])
return this;
+ var firstTransform = CPThemeWithoutTransform[this._stateNameString],
+ result;
+
+ if (firstTransform)
+ {
+ result = firstTransform[aState._stateNameString];
+
+ if (result)
+ return result;
+ }
+
var newStates = {};
+
for (var stateName in this._stateNames)
{
if (!this._stateNames.hasOwnProperty(stateName))
@@ -403,25 +416,54 @@ ThemeState.prototype.without = function(aState)
newStates[stateName] = true;
}
- return ThemeState._cacheThemeState(new ThemeState(newStates));
+ result = ThemeState._cacheThemeState(new ThemeState(newStates));
+
+ if (!firstTransform)
+ firstTransform = CPThemeWithoutTransform[this._stateNameString] = {};
+
+ firstTransform[aState._stateNameString] = result;
+
+ return result;
}
ThemeState.prototype.and = function(aState)
{
- return CPThemeState(this, aState);
+ var firstTransform = CPThemeAndTransform[this._stateNameString],
+ result;
+
+ if (firstTransform)
+ {
+ result = firstTransform[aState._stateNameString];
+
+ if (result)
+ return result;
+ }
+
+ result = CPThemeState(this, aState);
+
+ if (!firstTransform)
+ firstTransform = CPThemeAndTransform[this._stateNameString] = {};
+
+ firstTransform[aState._stateNameString] = result;
+
+ return result;
}
-var CPThemeStates = {};
+var CPThemeStates = {},
+ CPThemeWithoutTransform = {},
+ CPThemeAndTransform = {};
ThemeState._cacheThemeState = function(aState)
{
// We do this caching so themeState equality works. Basically, doing CPThemeState('foo+bar') === CPThemeState('bar', 'foo') will return true.
var themeState = CPThemeStates[String(aState)];
+
if (themeState === undefined)
{
themeState = aState;
CPThemeStates[String(themeState)] = themeState;
}
+
return themeState;
}
@@ -439,14 +481,17 @@ function CPThemeState()
throw "CPThemeState() must be called with at least one string argument";
var themeState;
+
if (arguments.length === 1 && typeof arguments[0] === 'string')
{
themeState = CPThemeStates[arguments[0]];
+
if (themeState !== undefined)
return themeState;
}
var stateNames = {};
+
for (var argIndex = 0; argIndex < arguments.length; argIndex++)
{
if (arguments[argIndex] === [CPNull null] || !arguments[argIndex])
@@ -458,12 +503,14 @@ function CPThemeState()
{
if (!arguments[argIndex]._stateNames.hasOwnProperty(stateName))
continue;
+
stateNames[stateName] = true;
}
}
else
{
var allNames = arguments[argIndex].split('+');
+
for (var nameIndex = 0; nameIndex < allNames.length; nameIndex++)
stateNames[allNames[nameIndex]] = true;
}
@@ -523,6 +570,9 @@ CPThemeStateControlSizeRegular = CPThemeState("controlSizeRegular");
CPThemeStateControlSizeSmall = CPThemeState("controlSizeSmall");
CPThemeStateControlSizeMini = CPThemeState("controlSizeMini");
+CPThemeStateNormalString = String(CPThemeStateNormal);
+
+
@implementation _CPThemeAttribute : CPObject
{
CPString _name;
@@ -533,7 +583,7 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini");
_CPThemeAttribute _themeDefaultAttribute;
}
-- (id)initWithName:(CPString)aName defaultValue:(id)aDefaultValue
+- (id)initWithName:(CPString)aName defaultValue:(id)aDefaultValue defaultAttribute:(_CPThemeAttribute)aDefaultAttribute
{
self = [super init];
@@ -542,7 +592,9 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini");
_cache = { };
_name = aName;
_defaultValue = aDefaultValue;
- _values = @{};
+
+ if (aDefaultAttribute)
+ _themeDefaultAttribute = aDefaultAttribute;
}
return self;
@@ -563,24 +615,41 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini");
return [_values count] > 0;
}
-- (void)setValue:(id)aValue
+- (_CPThemeAttribute)attributeBySettingValue:(id)aValue
{
- _cache = {};
+ var attribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue defaultAttribute:_themeDefaultAttribute];
- if (aValue === undefined || aValue === nil)
- _values = @{};
- else
- _values = @{ String(CPThemeStateNormal): aValue };
+ if (aValue !== undefined && aValue !== nil)
+ attribute._values = @{ CPThemeStateNormalString: aValue };
+
+ return attribute;
}
-- (void)setValue:(id)aValue forState:(ThemeState)aState
+- (_CPThemeAttribute)attributeBySettingValue:(id)aValue forState:(ThemeState)aState
{
- _cache = { };
+ var shouldRemoveValue = aValue === undefined || aValue === nil,
+ attribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue defaultAttribute:_themeDefaultAttribute],
+ values = _values;
- if ((aValue === undefined) || (aValue === nil))
- [_values removeObjectForKey:String(aState)];
- else
- [_values setObject:aValue forKey:String(aState)];
+ if (values != null)
+ {
+ values = [values copy];
+
+ if (shouldRemoveValue)
+ [values removeObjectForKey:String(aState)];
+ else
+ [values setObject:aValue forKey:String(aState)];
+
+ attribute._values = values;
+ }
+ else if (!shouldRemoveValue)
+ {
+ values = [[CPDictionary alloc] init];
+ [values setObject:aValue forKey:String(aState)];
+ attribute._values = values;
+ }
+
+ return attribute;
}
- (id)value
@@ -605,7 +674,7 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini");
if (aState._stateNameCount > 1)
{
var states = [_values allKeys],
- count = states.length,
+ count = states ? states.length : 0,
largestThemeState = 0;
while (count--)
@@ -643,27 +712,41 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini");
return value;
}
-- (void)setParentAttribute:(_CPThemeAttribute)anAttribute
+- (_CPThemeAttribute)attributeBySettingParentAttribute:(_CPThemeAttribute)anAttribute
{
if (_themeDefaultAttribute === anAttribute)
- return;
+ return self;
- _cache = { };
- _themeDefaultAttribute = anAttribute;
+ var attribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue defaultAttribute:anAttribute];
+
+ attribute._values = [_values copy];
+
+ return attribute;
}
- (_CPThemeAttribute)attributeMergedWithAttribute:(_CPThemeAttribute)anAttribute
{
- var mergedAttribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue];
+ var mergedAttribute = [[_CPThemeAttribute alloc] initWithName:_name defaultValue:_defaultValue defaultAttribute:_themeDefaultAttribute];
mergedAttribute._values = [_values copy];
- [mergedAttribute._values addEntriesFromDictionary:anAttribute._values];
+
+ if (anAttribute._values)
+ mergedAttribute._values ? [mergedAttribute._values addEntriesFromDictionary:anAttribute._values] : [anAttribute._values copy];
return mergedAttribute;
}
+- (CPString)description
+{
+ return [super description] + @" Name: " + _name + @", defaultAttribute: " + _themeDefaultAttribute + @", defaultValue: " + _defaultValue + @", values: " + _values;
+}
+
@end
+
+// This is used to pass 'parrentAttribute' to the coder
+var ParentAttributeForCoder = nil;
+
@implementation _CPThemeAttribute (CPCoding)
- (id)initWithCoder:(CPCoder)aCoder
@@ -677,13 +760,16 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini");
_name = [aCoder decodeObjectForKey:@"name"];
_defaultValue = [aCoder decodeObjectForKey:@"defaultValue"];
_values = @{};
+ _themeDefaultAttribute = ParentAttributeForCoder;
if ([aCoder containsValueForKey:@"value"])
{
- var state = String(CPThemeStateNormal);
+ var state;
if ([aCoder containsValueForKey:@"state"])
state = [aCoder decodeObjectForKey:@"state"];
+ else
+ state = CPThemeStateNormalString
[_values setObject:[aCoder decodeObjectForKey:"value"] forKey:state];
}
@@ -711,7 +797,7 @@ CPThemeStateControlSizeMini = CPThemeState("controlSizeMini");
[aCoder encodeObject:_defaultValue forKey:@"defaultValue"];
var keys = [_values allKeys],
- count = keys.length;
+ count = keys ? keys.length : 0;
if (count === 1)
{
@@ -749,7 +835,7 @@ function CPThemeAttributeEncode(aCoder, aThemeAttribute)
{
var state = [values allKeys][0];
- if (state === String(CPThemeStateNormal))
+ if (state === CPThemeStateNormalString)
{
[aCoder encodeObject:[values objectForKey:state] forKey:key];
@@ -767,30 +853,24 @@ function CPThemeAttributeEncode(aCoder, aThemeAttribute)
return NO;
}
-function CPThemeAttributeDecode(aCoder, anAttributeName, aDefaultValue, aTheme, aClass)
+function CPThemeAttributeDecode(aCoder, attribute)
{
- var key = "$a" + anAttributeName;
+ var key = "$a" + attribute._name;
- if (![aCoder containsValueForKey:key])
- var attribute = [[_CPThemeAttribute alloc] initWithName:anAttributeName defaultValue:aDefaultValue];
-
- else
+ if ([aCoder containsValueForKey:key])
{
- var attribute = [aCoder decodeObjectForKey:key];
+ ParentAttributeForCoder = attribute._themeDefaultAttribute;
- if (!attribute || !attribute.isa || ![attribute isKindOfClass:[_CPThemeAttribute class]])
- {
- var themeAttribute = [[_CPThemeAttribute alloc] initWithName:anAttributeName defaultValue:aDefaultValue];
+ var decodedAttribute = [aCoder decodeObjectForKey:key];
- [themeAttribute setValue:attribute];
+ ParentAttributeForCoder = nil;
- attribute = themeAttribute;
- }
+ if (!decodedAttribute || !decodedAttribute.isa || ![decodedAttribute isKindOfClass:[_CPThemeAttribute class]])
+ attribute = [attribute attributeBySettingValue:decodedAttribute];
+ else
+ attribute = decodedAttribute;
}
- if (aTheme && aClass)
- [attribute setParentAttribute:[aTheme attributeWithName:anAttributeName forClass:aClass]];
-
return attribute;
}
diff --git a/AppKit/CPThemeBlend.j b/AppKit/CPThemeBlend.j
index 8455bd4c0..78cceaac3 100644
--- a/AppKit/CPThemeBlend.j
+++ b/AppKit/CPThemeBlend.j
@@ -64,12 +64,10 @@
*/
- (CPArray)themeNames
{
- var names = [];
-
- for (var i = 0; i < _themes.length; ++i)
- names.push(_themes[i].substring(0, _themes[i].indexOf(".keyedtheme")));
-
- return names;
+ return [_themes arrayByApplyingBlock:function(theme)
+ {
+ return theme.substring(0, theme.indexOf(".keyedtheme"));
+ }];
}
- (void)loadWithDelegate:(id)aDelegate
diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j
index 3bc4b3ea3..858b11495 100644
--- a/AppKit/CPTokenField.j
+++ b/AppKit/CPTokenField.j
@@ -448,14 +448,14 @@ CPTokenFieldDeleteButtonType = 1;
element.style.width = CGRectGetWidth(contentRect) + "px";
element.style.height = [font defaultLineHeightForFont] + "px";
- window.setTimeout(function()
+ [[CPRunLoop mainRunLoop] performBlock:function()
{
[_tokenScrollView documentView]._DOMElement.appendChild(element);
//post CPControlTextDidBeginEditingNotification
[self textDidBeginEditing:[CPNotification notificationWithName:CPControlTextDidBeginEditingNotification object:self userInfo:nil]];
- window.setTimeout(function()
+ [[CPRunLoop mainRunLoop] performBlock:function()
{
// This will prevent to jump to the focused element
var previousScrollingOrigin = [self _scrollToVisibleRectAndReturnPreviousOrigin];
@@ -465,10 +465,10 @@ CPTokenFieldDeleteButtonType = 1;
[self _restorePreviousScrollingOrigin:previousScrollingOrigin];
CPTokenFieldInputOwner = self;
- }, 0.0);
+ } argument:nil order:0 modes:[CPDefaultRunLoopMode]];
[self textDidFocus:[CPNotification notificationWithName:CPTextFieldDidFocusNotification object:self userInfo:nil]];
- }, 0.0);
+ } argument:nil order:0 modes:[CPDefaultRunLoopMode]];
[[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
@@ -1475,9 +1475,6 @@ CPTokenFieldDeleteButtonType = 1;
- (BOOL)setThemeState:(ThemeState)aState
{
- if (aState.isa && [aState isKindOfClass:CPArray])
- aState = CPThemeState.apply(null, aState);
-
var r = [super setThemeState:aState];
// Share hover state with the disclosure and delete buttons.
@@ -1492,9 +1489,6 @@ CPTokenFieldDeleteButtonType = 1;
- (BOOL)unsetThemeState:(ThemeState)aState
{
- if (aState.isa && [aState isKindOfClass:CPArray])
- aState = CPThemeState.apply(null, aState);
-
var r = [super unsetThemeState:aState];
// Share hover state with the disclosure and delete button.
diff --git a/AppKit/CPToolbar.j b/AppKit/CPToolbar.j
index 49c78924e..b62aa82d6 100644
--- a/AppKit/CPToolbar.j
+++ b/AppKit/CPToolbar.j
@@ -459,11 +459,10 @@ var CPToolbarsByIdentifier = nil,
/* @ignore */
- (id)_itemsWithIdentifiers:(CPArray)identifiers
{
- var items = [];
- for (var i = 0; i < identifiers.length; i++)
- [items addObject:[self _itemForItemIdentifier:identifiers[i] willBeInsertedIntoToolbar:NO]];
-
- return items;
+ return [identifiers arrayByApplyingBlock:function(identifier)
+ {
+ return [self _itemForItemIdentifier:identifier willBeInsertedIntoToolbar:NO];
+ }];
}
/* @ignore */
diff --git a/AppKit/CPTrackingArea.j b/AppKit/CPTrackingArea.j
new file mode 100644
index 000000000..9e41afef4
--- /dev/null
+++ b/AppKit/CPTrackingArea.j
@@ -0,0 +1,164 @@
+/*
+ * CPTrackingArea.j
+ * AppKit
+ *
+ * Created by Didier Korthoudt.
+ * Copyright 2015, Cappuccino Project.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+@import
+
+@class CPView
+
+/* @group CPTrackingAreaOptions */
+@typedef CPTrackingAreaOptions
+CPTrackingMouseEnteredAndExited = 1 << 1;
+CPTrackingMouseMoved = 1 << 2;
+CPTrackingCursorUpdate = 1 << 3;
+CPTrackingActiveWhenFirstResponder = 1 << 4;
+CPTrackingActiveInKeyWindow = 1 << 5;
+CPTrackingActiveInActiveApp = 1 << 6;
+CPTrackingActiveAlways = 1 << 7;
+CPTrackingAssumeInside = 1 << 8;
+CPTrackingInVisibleRect = 1 << 9;
+CPTrackingEnabledDuringMouseDrag = 1 << 10;
+
+var CPTrackingAreaViewRectKey = @"CPTrackinkAreaViewRectKey",
+ CPTrackingAreaOptionsKey = @"CPTrackingAreaOptionsKey",
+ CPTrackingAreaOwnerKey = @"CPTrackingAreaOwnerKey",
+ CPTrackingAreaUserInfoKey = @"CPTrackingAreaUserInfoKey",
+ CPTrackingAreaReferencingViewKey = @"CPTrackingAreaReferencingViewKey",
+ CPTrackingAreaWindowRect = @"CPTrackingAreaWindowRect";
+
+CPTrackingOwnerImplementsMouseEntered = 1 << 1;
+CPTrackingOwnerImplementsMouseExited = 1 << 2;
+CPTrackingOwnerImplementsMouseMoved = 1 << 3;
+CPTrackingOwnerImplementsCursorUpdate = 1 << 4;
+
+/*!
+ @ingroup appkit
+
+ A CPTrackingArea defines a region of view that generates mouse-tracking and
+ cursor-update events when the mouse is over that region.
+ */
+@implementation CPTrackingArea : CPObject
+{
+ CGRect _viewRect @accessors(getter=rect);
+ CPTrackingAreaOptions _options @accessors(getter=options);
+ id _owner @accessors(getter=owner);
+ CPDictionary _userInfo @accessors(getter=userInfo);
+
+ CPView _referencingView @accessors(property=view);
+ CGRect _windowRect @accessors(getter=windowRect);
+
+ unsigned _implementedOwnerMethods @accessors(getter=implementedOwnerMethods);
+}
+
+
+#pragma mark -
+#pragma mark Initialization
+
+/*!
+ Initializes and returns an object defining a region of a view to receive mouse-tracking events, mouse-moved events, cursor-update events, or possibly
+ all these events.
+ */
+- (CPTrackingArea)initWithRect:(CGRect)aRect options:(CPTrackingAreaOptions)options owner:(id)owner userInfo:(CPDictionary)userInfo
+{
+ if (owner === nil)
+ [CPException raise:CPInternalInconsistencyException reason:"No owner specified"];
+
+ if (options === 0)
+ [CPException raise:CPInternalInconsistencyException reason:"Invalid CPTrackingArea options"];
+
+ // Check options:
+ // - at least one of CPTrackingMouseEnteredAndExited, CPTrackingMouseMoved, CPTrackingCursorUpdate
+ // - exactly one of CPTrackingActiveWhenFirstResponder, CPTrackingActiveInKeyWindow, CPTrackingActiveInActiveApp, CPTrackingActiveAlways
+ // - no check on CPTrackingAssumeInside, CPTrackingInVisibleRect, CPTrackingEnableDuringMouseDrag
+
+ if (!((options & CPTrackingMouseEnteredAndExited) || (options & CPTrackingMouseMoved) || (options & CPTrackingCursorUpdate)))
+ [CPException raise:CPInternalInconsistencyException reason:"Invalid CPTrackingAreaOptions: must use at least one of [CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate]"];
+
+ if ((((options & CPTrackingActiveWhenFirstResponder) > 0) + ((options & CPTrackingActiveInKeyWindow) > 0) + ((options & CPTrackingActiveInActiveApp) > 0) + ((options & CPTrackingActiveAlways) > 0)) !== 1)
+ [CPException raise:CPInternalInconsistencyException reason:"Tracking area options may only specify one of [CPTrackingActiveWhenFirstResponder | CPTrackingActiveInKeyWindow | CPTrackingActiveInActiveApp | CPTrackingActiveAlways]."];
+
+ if (self = [super init])
+ {
+ _viewRect = aRect;
+ _options = options;
+ _owner = owner;
+ _userInfo = userInfo;
+
+ // Cache owner implemented methods
+
+ if ([_owner respondsToSelector:@selector(mouseEntered:)])
+ _implementedOwnerMethods |= CPTrackingOwnerImplementsMouseEntered;
+
+ if ([_owner respondsToSelector:@selector(mouseExited:)])
+ _implementedOwnerMethods |= CPTrackingOwnerImplementsMouseExited;
+
+ if ([_owner respondsToSelector:@selector(mouseMoved:)])
+ _implementedOwnerMethods |= CPTrackingOwnerImplementsMouseMoved;
+
+ if ([_owner respondsToSelector:@selector(cursorUpdate:)])
+ _implementedOwnerMethods |= CPTrackingOwnerImplementsCursorUpdate;
+ }
+
+ return self;
+}
+
+
+#pragma mark -
+#pragma mark Implementation
+
+- (void)_updateWindowRect
+{
+ _windowRect = [_referencingView convertRect:((_options & CPTrackingInVisibleRect) ? [_referencingView visibleRect] : _viewRect) toView:[[_referencingView window] _windowView]];
+}
+
+@end
+
+#pragma mark -
+#pragma mark CPCoding
+
+@implementation CPTrackingArea (CPCoding)
+
+- (id)initWithCoder:(CPCoder)aCoder
+{
+ if (self = [super init])
+ {
+ _viewRect = [aCoder decodeObjectForKey:CPTrackingAreaViewRectKey];
+ _options = [aCoder decodeObjectForKey:CPTrackingAreaOptionsKey];
+ _owner = [aCoder decodeObjectForKey:CPTrackingAreaOwnerKey];
+ _userInfo = [aCoder decodeObjectForKey:CPTrackingAreaUserInfoKey];
+ _referencingView = [aCoder decodeObjectForKey:CPTrackingAreaReferencingViewKey];
+ _windowRect = [aCoder decodeObjectForKey:CPTrackingAreaWindowRect];
+ }
+
+ return self;
+}
+
+- (void)encodeWithCoder:(CPCoder)aCoder
+{
+ [aCoder encodeObject:_viewRect forKey:CPTrackingAreaViewRectKey];
+ [aCoder encodeObject:_options forKey:CPTrackingAreaOptionsKey];
+ [aCoder encodeObject:_owner forKey:CPTrackingAreaOwnerKey];
+ [aCoder encodeObject:_userInfo forKey:CPTrackingAreaUserInfoKey];
+ [aCoder encodeObject:_referencingView forKey:CPTrackingAreaReferencingViewKey];
+ [aCoder encodeObject:_windowRect forKey:CPTrackingAreaWindowRect];
+}
+
+@end
diff --git a/AppKit/CPView.j b/AppKit/CPView.j
index 089b6d07e..0df313b33 100644
--- a/AppKit/CPView.j
+++ b/AppKit/CPView.j
@@ -24,6 +24,7 @@
@import
@import
+@import "_CPObject+Theme.j"
@import "CGAffineTransform.j"
@import "CGGeometry.j"
@import "CPAppearance.j"
@@ -31,6 +32,7 @@
@import "CPGraphicsContext.j"
@import "CPResponder.j"
@import "CPTheme.j"
+@import "CPTrackingArea.j"
@import "CPWindow_Constants.j"
@import "_CPDisplayServer.j"
@@ -113,8 +115,7 @@ CPViewMaxYMargin = 32;
CPViewBoundsDidChangeNotification = @"CPViewBoundsDidChangeNotification";
CPViewFrameDidChangeNotification = @"CPViewFrameDidChangeNotification";
-var CachedNotificationCenter = nil,
- CachedThemeAttributes = nil;
+var CachedNotificationCenter = nil;
#if PLATFORM(DOM)
var DOMElementPrototype = nil,
@@ -128,7 +129,8 @@ var DOMElementPrototype = nil,
var CPViewFlags = { },
CPViewHasCustomDrawRect = 1 << 0,
- CPViewHasCustomLayoutSubviews = 1 << 1;
+ CPViewHasCustomLayoutSubviews = 1 << 1,
+ CPViewHasCustomViewWillLayout = 1 << 2;
var CPViewHighDPIDrawingEnabled = YES;
@@ -149,7 +151,7 @@ var CPViewHighDPIDrawingEnabled = YES;
appearance. Other methods of CPView and CPResponder can
also be overridden to handle user generated events.
*/
-@implementation CPView : CPResponder
+@implementation CPView : CPResponder
{
CPWindow _window;
@@ -218,12 +220,6 @@ var CPViewHighDPIDrawingEnabled = YES;
BOOL _needsLayout;
JSObject _ephemeralSubviews;
- // Theming Support
- CPTheme _theme;
- CPString _themeClass;
- JSObject _themeAttributes;
- unsigned _themeState;
-
JSObject _ephemeralSubviewsForNames;
CPSet _ephereralSubviews;
@@ -244,6 +240,9 @@ var CPViewHighDPIDrawingEnabled = YES;
BOOL _allowsVibrancy @accessors(property=allowsVibrancy);
CPAppearance _appearance @accessors(getter=appearance);
CPAppearance _effectiveAppearance;
+
+ CPMutableArray _trackingAreas @accessors(getter=trackingAreas, copy);
+ BOOL _inhibitUpdateTrackingAreas;
}
/*
@@ -323,6 +322,12 @@ var CPViewHighDPIDrawingEnabled = YES;
|| [theClass instanceMethodForSelector:@selector(viewWillDraw)] !== [CPView instanceMethodForSelector:@selector(viewWillDraw)])
flags |= CPViewHasCustomDrawRect;
+ if ([theClass instanceMethodForSelector:@selector(viewWillLayout)] !== [CPView instanceMethodForSelector:@selector(viewWillLayout)])
+ flags |= CPViewHasCustomViewWillLayout;
+
+ if ([theClass instanceMethodForSelector:@selector(layoutSubviews)] !== [CPView instanceMethodForSelector:@selector(layoutSubviews)])
+ flags |= CPViewHasCustomLayoutSubviews;
+
CPViewFlags[classUID] = flags;
}
@@ -351,6 +356,8 @@ var CPViewHighDPIDrawingEnabled = YES;
_registeredDraggedTypes = [CPSet set];
_registeredDraggedTypesArray = [];
+ _trackingAreas = [];
+
_tag = -1;
_frame = CGRectMakeCopy(aFrame);
@@ -799,8 +806,30 @@ var CPViewHighDPIDrawingEnabled = YES;
[aWindow _noteRegisteredDraggedTypes:_registeredDraggedTypes];
}
+ // View must be removed from the current window viewsWithTrackingAreas
+ if (_window && (_trackingAreas.length > 0))
+ [_window _removeTrackingAreaView:self];
+
_window = aWindow;
+ if (_window)
+ {
+ var owners;
+
+ if (_trackingAreas.length > 0)
+ {
+ // View must be added to the new window viewsWithTrackingAreas
+ [_window _addTrackingAreaView:self];
+ owners = [self _calcTrackingAreaOwners];
+ }
+ else
+ owners = [self];
+
+ // Notify that view tracking areas should be updated
+ // Cocoa doesn't notify on leaving a window
+ [self _updateTrackingAreasForOwners:owners];
+ }
+
var count = [_subviews count];
while (count--)
@@ -993,6 +1022,9 @@ var CPViewHighDPIDrawingEnabled = YES;
if (_isSuperviewAClipView)
[[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]];
+
+ if (!_inhibitUpdateTrackingAreas)
+ [self _updateTrackingAreas];
}
/*!
@@ -1063,6 +1095,9 @@ var CPViewHighDPIDrawingEnabled = YES;
CPDOMDisplayServerSetStyleLeftTop(_DOMElement, transform, origin.x, origin.y);
#endif
+
+ if (!_inhibitUpdateTrackingAreas && !_inhibitFrameAndBoundsChangedNotifications)
+ [self _updateTrackingAreas];
}
/*!
@@ -1214,6 +1249,9 @@ var CPViewHighDPIDrawingEnabled = YES;
if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications)
[[self superview] viewFrameChanged:[[CPNotification alloc] initWithName:CPViewFrameDidChangeNotification object:self userInfo:nil]];
+
+ if (!_inhibitUpdateTrackingAreas && !_inhibitFrameAndBoundsChangedNotifications)
+ [self _updateTrackingAreas];
}
/*!
@@ -1260,6 +1298,9 @@ var CPViewHighDPIDrawingEnabled = YES;
if (_isSuperviewAClipView)
[[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]];
+
+ if (!_inhibitUpdateTrackingAreas)
+ [self _updateTrackingAreas];
}
/*!
@@ -1325,6 +1366,9 @@ var CPViewHighDPIDrawingEnabled = YES;
if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications)
[[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]];
+
+ if (!_inhibitUpdateTrackingAreas && !_inhibitFrameAndBoundsChangedNotifications)
+ [self _updateTrackingAreas];
}
/*!
@@ -1366,6 +1410,9 @@ var CPViewHighDPIDrawingEnabled = YES;
if (_isSuperviewAClipView && !_inhibitFrameAndBoundsChangedNotifications)
[[self superview] viewBoundsChanged:[[CPNotification alloc] initWithName:CPViewBoundsDidChangeNotification object:self userInfo:nil]];
+
+ if (!_inhibitUpdateTrackingAreas && !_inhibitFrameAndBoundsChangedNotifications)
+ [self _updateTrackingAreas];
}
@@ -2643,8 +2690,12 @@ setBoundsOrigin:
{
_needsLayout = NO;
- [self viewWillLayout];
- [self layoutSubviews];
+ if (_viewClassFlags & CPViewHasCustomViewWillLayout)
+ [self viewWillLayout];
+
+ if (_viewClassFlags & CPViewHasCustomLayoutSubviews)
+ [self layoutSubviews];
+
[self viewDidLayout];
}
}
@@ -3109,33 +3160,19 @@ setBoundsOrigin:
@end
+
@implementation CPView (Theming)
-#pragma mark Theme States
-- (unsigned)themeState
-{
- return _themeState;
-}
-
-- (BOOL)hasThemeState:(ThemeState)aState
-{
- if (aState.isa && [aState isKindOfClass:CPArray])
- return _themeState.hasThemeState.apply(_themeState, aState);
-
- return _themeState.hasThemeState(aState);
-}
+#pragma mark Override
- (BOOL)setThemeState:(ThemeState)aState
{
- if (aState && aState.isa && [aState isKindOfClass:CPArray])
- aState = CPThemeState.apply(null, aState);
+ var shouldLayout = [super setThemeState:aState];
- if (_themeState.hasThemeState(aState))
+ if (!shouldLayout)
return NO;
- _themeState = CPThemeState(_themeState, aState);
-
- [self setNeedsLayout];
+ [self setNeedsLayout:YES];
[self setNeedsDisplay:YES];
return YES;
@@ -3143,26 +3180,35 @@ setBoundsOrigin:
- (BOOL)unsetThemeState:(ThemeState)aState
{
- if (aState && aState.isa && [aState isKindOfClass:CPArray])
- aState = CPThemeState.apply(null, aState);
+ var shouldLayout = [super unsetThemeState:aState];
- var oldThemeState = _themeState;
- _themeState = _themeState.without(aState);
-
- if (oldThemeState === _themeState)
+ if (!shouldLayout)
return NO;
- [self setNeedsLayout];
+ [self setNeedsLayout:YES];
[self setNeedsDisplay:YES];
return YES;
}
+- (void)setThemeClass:(CPString)theClass
+{
+ [super setThemeClass:theClass];
+
+ [self setNeedsLayout];
+ [self setNeedsDisplay:YES];
+}
+
+
+#pragma mark First responder
+
- (BOOL)becomeFirstResponder
{
var r = [super becomeFirstResponder];
+
if (r)
[self _notifyViewDidBecomeFirstResponder];
+
return r;
}
@@ -3171,6 +3217,7 @@ setBoundsOrigin:
[self setThemeState:CPThemeStateFirstResponder];
var count = [_subviews count];
+
while (count--)
[_subviews[count] _notifyViewDidBecomeFirstResponder];
}
@@ -3178,8 +3225,10 @@ setBoundsOrigin:
- (BOOL)resignFirstResponder
{
var r = [super resignFirstResponder];
+
if (r)
[self _notifyViewDidResignFirstResponder];
+
return r;
}
@@ -3188,6 +3237,7 @@ setBoundsOrigin:
[self unsetThemeState:CPThemeStateFirstResponder];
var count = [_subviews count];
+
while (count--)
[_subviews[count] _notifyViewDidResignFirstResponder];
}
@@ -3197,6 +3247,7 @@ setBoundsOrigin:
[self setThemeState:CPThemeStateKeyWindow];
var count = [_subviews count];
+
while (count--)
[_subviews[count] _notifyWindowDidBecomeKey];
}
@@ -3206,172 +3257,35 @@ setBoundsOrigin:
[self unsetThemeState:CPThemeStateKeyWindow];
var count = [_subviews count];
+
while (count--)
[_subviews[count] _notifyWindowDidResignKey];
}
#pragma mark Theme Attributes
-+ (CPString)defaultThemeClass
-{
- return nil;
-}
-
-- (CPString)themeClass
-{
- if (_themeClass)
- return _themeClass;
-
- return [[self class] defaultThemeClass];
-}
-
-- (void)setThemeClass:(CPString)theClass
-{
- _themeClass = theClass;
-
- [self _loadThemeAttributes];
-
- [self setNeedsLayout];
- [self setNeedsDisplay:YES];
-}
-
-+ (CPDictionary)themeAttributes
-{
- return nil;
-}
-
-+ (CPArray)_themeAttributes
-{
- if (!CachedThemeAttributes)
- CachedThemeAttributes = {};
-
- var theClass = [self class],
- CPViewClass = [CPView class],
- attributes = [],
- nullValue = [CPNull null];
-
- for (; theClass && theClass !== CPViewClass; theClass = [theClass superclass])
- {
- var cachedAttributes = CachedThemeAttributes[class_getName(theClass)];
-
- if (cachedAttributes)
- {
- attributes = attributes.length ? attributes.concat(cachedAttributes) : attributes;
- CachedThemeAttributes[[self className]] = attributes;
-
- break;
- }
-
- var attributeDictionary = [theClass themeAttributes];
-
- if (!attributeDictionary)
- continue;
-
- var attributeKeys = [attributeDictionary allKeys],
- attributeCount = attributeKeys.length;
-
- while (attributeCount--)
- {
- var attributeName = attributeKeys[attributeCount],
- attributeValue = [attributeDictionary objectForKey:attributeName];
-
- attributes.push(attributeValue === nullValue ? nil : attributeValue);
- attributes.push(attributeName);
- }
- }
-
- return attributes;
-}
-
-- (void)_loadThemeAttributes
-{
- var theClass = [self class],
- attributes = [theClass _themeAttributes],
- count = attributes.length;
-
- if (!count)
- return;
-
- var theme = [self theme],
- themeClass = [self themeClass];
-
- _themeAttributes = {};
-
- while (count--)
- {
- var attributeName = attributes[count--],
- attribute = [[_CPThemeAttribute alloc] initWithName:attributeName defaultValue:attributes[count]];
-
- [attribute setParentAttribute:[theme attributeWithName:attributeName forClass:themeClass]];
-
- _themeAttributes[attributeName] = attribute;
- }
-}
-
-- (void)setTheme:(CPTheme)aTheme
-{
- if (_theme === aTheme)
- return;
-
- _theme = aTheme;
-
- [self viewDidChangeTheme];
-}
-
- (void)_setThemeIncludingDescendants:(CPTheme)aTheme
{
[self setTheme:aTheme];
[[self subviews] makeObjectsPerformSelector:@selector(_setThemeIncludingDescendants:) withObject:aTheme];
}
-- (CPTheme)theme
-{
- return _theme;
-}
-
-- (void)viewDidChangeTheme
+- (void)objectDidChangeTheme
{
if (!_themeAttributes)
return;
- var theme = [self theme],
- themeClass = [self themeClass];
-
- for (var attributeName in _themeAttributes)
- if (_themeAttributes.hasOwnProperty(attributeName))
- [_themeAttributes[attributeName] setParentAttribute:[theme attributeWithName:attributeName forClass:themeClass]];
+ [super objectDidChangeTheme];
[self setNeedsLayout];
[self setNeedsDisplay:YES];
}
-- (CPDictionary)_themeAttributeDictionary
-{
- var dictionary = @{};
-
- if (_themeAttributes)
- {
- var theme = [self theme];
-
- for (var attributeName in _themeAttributes)
- if (_themeAttributes.hasOwnProperty(attributeName))
- [dictionary setObject:_themeAttributes[attributeName] forKey:attributeName];
- }
-
- return dictionary;
-}
-
- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState
{
- if (aState.isa && [aState isKindOfClass:CPArray])
- aState = CPThemeState.apply(null, aState);
-
- if (!_themeAttributes || !_themeAttributes[aName])
- [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
-
var currentValue = [self currentValueForThemeAttribute:aName];
- [_themeAttributes[aName] setValue:aValue forState:aState];
+ [super setValue:aValue forThemeAttribute:aName inState:aState];
if ([self currentValueForThemeAttribute:aName] === currentValue)
return;
@@ -3382,12 +3296,9 @@ setBoundsOrigin:
- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName
{
- if (!_themeAttributes || !_themeAttributes[aName])
- [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
-
var currentValue = [self currentValueForThemeAttribute:aName];
- [_themeAttributes[aName] setValue:aValue];
+ [super setValue:aValue forThemeAttribute:aName ];
if ([self currentValueForThemeAttribute:aName] === currentValue)
return;
@@ -3396,82 +3307,6 @@ setBoundsOrigin:
[self setNeedsLayout];
}
-- (id)valueForThemeAttribute:(CPString)aName inState:(ThemeState)aState
-{
- if (aState.isa && [aState isKindOfClass:CPArray])
- aState = CPThemeState.apply(null, aState);
-
- if (!_themeAttributes || !_themeAttributes[aName])
- [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
-
- return [_themeAttributes[aName] valueForState:aState];
-}
-
-- (id)valueForThemeAttribute:(CPString)aName
-{
- if (!_themeAttributes || !_themeAttributes[aName])
- [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
-
- return [_themeAttributes[aName] value];
-}
-
-- (id)currentValueForThemeAttribute:(CPString)aName
-{
- if (!_themeAttributes || !_themeAttributes[aName])
- [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
-
- return [_themeAttributes[aName] valueForState:_themeState];
-}
-
-- (BOOL)hasThemeAttribute:(CPString)aName
-{
- return (_themeAttributes && _themeAttributes[aName] !== undefined);
-}
-
-/*!
- Registers theme values encoded in an array at runtime. The format of the data in the array
- is the same as that used by ThemeDescriptors.j, with the exception that you need to use
- CPColorWithImages() in place of PatternColor(). For more information see the comments
- at the top of ThemeDescriptors.j.
-
- @param themeValues array of theme values
-*/
-- (void)registerThemeValues:(CPArray)themeValues
-{
- for (var i = 0; i < themeValues.length; ++i)
- {
- var attributeValueState = themeValues[i],
- attribute = attributeValueState[0],
- value = attributeValueState[1],
- state = attributeValueState[2];
-
- if (state)
- [self setValue:value forThemeAttribute:attribute inState:state];
- else
- [self setValue:value forThemeAttribute:attribute];
- }
-}
-
-/*!
- Registers theme values encoded in an array at runtime. The format of the data in the array
- is the same as that used by ThemeDescriptors.j, with the exception that you need to use
- CPColorWithImages() in place of PatternColor(). The values in \c inheritedValues are
- registered first, then those in \c themeValues override/augment the inherited values.
- For more information see the comments at the top of ThemeDescriptors.j.
-
- @param themeValues array of base theme values
- @param inheritedValues array of overridden/additional theme values
-*/
-- (void)registerThemeValues:(CPArray)themeValues inherit:(CPArray)inheritedValues
-{
- // Register inherited values first, then override those with the subtheme values.
- if (inheritedValues)
- [self registerThemeValues:inheritedValues];
-
- if (themeValues)
- [self registerThemeValues:themeValues];
-}
-
- (CPView)createEphemeralSubviewNamed:(CPString)aViewName
{
return nil;
@@ -3597,9 +3432,155 @@ setBoundsOrigin:
[self unsetThemeState:CPThemeStateAppearanceVibrantDark];
}
- [_subviews makeObjectsPerformSelector:@selector(_recomputeAppearance)];
+// var start = [CPDate new];
+
+ for (var i = 0, size = [_subviews count]; i < size; i++)
+ {
+ [[_subviews objectAtIndex:i] _recomputeAppearance];
+ }
+// [_subviews makeObjectsPerformSelector:@selector(_recomputeAppearance)];
+
+/* var now = [CPDate new];
+ var elapsedSeconds = [now timeIntervalSinceReferenceDate] - [start timeIntervalSinceReferenceDate];
+
+ CPLog.trace(@"_recomputeAppearance " + [_subviews count] + " subviews in " + elapsedSeconds + @" seconds");
+*/}
+
+
+@end
+
+@implementation CPView (TrackingAreaAdditions)
+
+- (void)addTrackingArea:(CPTrackingArea)trackingArea
+{
+ // Consistency check
+ if (!trackingArea || [_trackingAreas containsObjectIdenticalTo:trackingArea])
+ return;
+
+ if ([trackingArea view])
+ [CPException raise:CPInternalInconsistencyException reason:"Tracking area has already been added to another view."];
+
+ [_trackingAreas addObject:trackingArea];
+ [trackingArea setView:self];
+
+ if (_window)
+ [_window _addTrackingArea:trackingArea];
+
+ [trackingArea _updateWindowRect];
}
+- (void)removeTrackingArea:(CPTrackingArea)trackingArea
+{
+ // Consistency check
+ if (!trackingArea)
+ return;
+
+ if (![_trackingAreas containsObjectIdenticalTo:trackingArea])
+ [CPException raise:CPInternalInconsistencyException reason:"Trying to remove unreferenced trackingArea"];
+
+ [self _removeTrackingArea:trackingArea];
+}
+
+/*!
+ Invoked automatically when the view’s geometry changes such that its tracking areas need to be recalculated.
+
+ You should override this method to remove out of date tracking areas and add recomputed tracking areas;
+
+ Cocoa calls this on every view, whereas they have tracking area(s) or not.
+ Cappuccino behaves differently :
+ - updateTrackingAreas is called when placing a view in the view hierarchy (that is in a window)
+ - if you have only CPTrackingInVisibleRect tracking areas attached to a view, it will not be called again (until you move the view in the hierarchy)
+ - if you have at least one non-CPTrackingInVisibleRect tracking area attached, it will be called every time the view geometry could be modified
+ You don't have to touch to CPTrackingInVisibleRect tracking areas, they will be automatically updated
+
+ Please note that it is the owner of a tracking area who is called for updateTrackingAreas.
+ But, if a view without any tracking area is inserted in the view hierarchy (that is, in a window), the view is called for updateTrackingAreas.
+ This enables you to use updateTrackingArea to initially attach your tracking areas to the view.
+*/
+- (void)updateTrackingAreas
+{
+
+}
+
+/*!
+ This utility method is intended for CPView subclasses overriding updateTrackingAreas
+
+ Typical use would be :
+
+ - (void)updateTrackingAreas
+ {
+ [self removeAllTrackingAreas];
+
+ ... add your specific updated tracking areas ...
+ }
+
+*/
+- (void)removeAllTrackingAreas
+{
+ while (_trackingAreas.length > 0)
+ [self _removeTrackingArea:_trackingAreas[0]];
+}
+
+// Internal methods
+
+- (void)_removeTrackingArea:(CPTrackingArea)trackingArea
+{
+ if (_window)
+ [_window _removeTrackingArea:trackingArea];
+
+ [trackingArea setView:nil];
+ [_trackingAreas removeObjectIdenticalTo:trackingArea];
+}
+
+- (void)_updateTrackingAreas
+{
+ _inhibitUpdateTrackingAreas = YES;
+
+ [self _recursivelyUpdateTrackingAreas];
+
+ _inhibitUpdateTrackingAreas = NO;
+}
+
+- (void)_recursivelyUpdateTrackingAreas
+{
+ [self _updateTrackingAreasForOwners:[self _calcTrackingAreaOwners]];
+
+ for (var i = 0; i < _subviews.length; i++)
+ [_subviews[i] _recursivelyUpdateTrackingAreas];
+}
+
+- (CPArray)_calcTrackingAreaOwners
+{
+ // First search all owners that must be notified
+ // Remark: 99.99% of time, the only owner will be the view itself
+ // In the same time, update the rects of InVisibleRect tracking areas
+
+ var owners = [];
+
+ for (var i = 0; i < _trackingAreas.length; i++)
+ {
+ var trackingArea = _trackingAreas[i];
+
+ if ([trackingArea options] & CPTrackingInVisibleRect)
+ [trackingArea _updateWindowRect];
+
+ else
+ {
+ var owner = [trackingArea owner];
+
+ if (![owners containsObjectIdenticalTo:owner])
+ [owners addObject:owner];
+ }
+ }
+
+ return owners;
+}
+
+- (void)_updateTrackingAreasForOwners:(CPArray)owners
+{
+ for (var i = 0; i < owners.length; i++)
+ [owners[i] updateTrackingAreas];
+}
@end
@@ -3615,8 +3596,6 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
CPViewSubviewsKey = @"CPViewSubviewsKey",
CPViewSuperviewKey = @"CPViewSuperviewKey",
CPViewTagKey = @"CPViewTagKey",
- CPViewThemeClassKey = @"CPViewThemeClassKey",
- CPViewThemeStateKey = @"CPViewThemeStateKey",
CPViewWindowKey = @"CPViewWindowKey",
CPViewNextKeyViewKey = @"CPViewNextKeyViewKey",
CPViewPreviousKeyViewKey = @"CPViewPreviousKeyViewKey",
@@ -3624,7 +3603,8 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
CPViewScaleKey = @"CPViewScaleKey",
CPViewSizeScaleKey = @"CPViewSizeScaleKey",
CPViewIsScaledKey = @"CPViewIsScaledKey",
- CPViewAppearanceKey = @"CPViewAppearanceKey";
+ CPViewAppearanceKey = @"CPViewAppearanceKey",
+ CPViewTrackingAreasKey = @"CPViewTrackingAreasKey";
@implementation CPView (CPCoding)
@@ -3652,6 +3632,11 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
if (self)
{
+ _trackingAreas = [aCoder decodeObjectForKey:CPViewTrackingAreasKey];
+
+ if (!_trackingAreas)
+ _trackingAreas = [];
+
// We have to manually check because it may be 0, so we can't use ||
_tag = [aCoder containsValueForKey:CPViewTagKey] ? [aCoder decodeIntForKey:CPViewTagKey] : -1;
_identifier = [aCoder decodeObjectForKey:CPReuseIdentifierKey];
@@ -3721,23 +3706,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
[self setBackgroundColor:[aCoder decodeObjectForKey:CPViewBackgroundColorKey]];
[self _setupViewFlags];
-
- _theme = [CPTheme defaultTheme];
- _themeClass = [aCoder decodeObjectForKey:CPViewThemeClassKey];
- _themeState = CPThemeState([aCoder decodeObjectForKey:CPViewThemeStateKey]);
- _themeAttributes = {};
-
- var theClass = [self class],
- themeClass = [self themeClass],
- attributes = [theClass _themeAttributes],
- count = attributes.length;
-
- while (count--)
- {
- var attributeName = attributes[count--];
-
- _themeAttributes[attributeName] = CPThemeAttributeDecode(aCoder, attributeName, attributes[count], _theme, themeClass);
- }
+ [self _decodeThemeObjectsWithCoder:aCoder];
[self setAppearance:[aCoder decodeObjectForKey:CPViewAppearanceKey]];
@@ -3816,12 +3785,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
if (previousKeyView !== nil && ![previousKeyView isEqual:self])
[aCoder encodeConditionalObject:previousKeyView forKey:CPViewPreviousKeyViewKey];
- [aCoder encodeObject:[self themeClass] forKey:CPViewThemeClassKey];
- [aCoder encodeObject:String(_themeState) forKey:CPViewThemeStateKey];
-
- for (var attributeName in _themeAttributes)
- if (_themeAttributes.hasOwnProperty(attributeName))
- CPThemeAttributeEncode(aCoder, _themeAttributes[attributeName]);
+ [self _encodeThemeObjectsWithCoder:aCoder];
if (_identifier)
[aCoder encodeObject:_identifier forKey:CPReuseIdentifierKey];
@@ -3830,6 +3794,7 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
[aCoder encodeSize:[self _hierarchyScaleSize] forKey:CPViewSizeScaleKey];
[aCoder encodeBool:_isScaled forKey:CPViewIsScaledKey];
[aCoder encodeObject:_appearance forKey:CPViewAppearanceKey];
+ [aCoder encodeObject:_trackingAreas forKey:CPViewTrackingAreasKey];
}
@end
diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j
index f34e923a5..9c4880938 100644
--- a/AppKit/CPWindow/CPWindow.j
+++ b/AppKit/CPWindow/CPWindow.j
@@ -36,6 +36,7 @@
@import "CPResponder.j"
@import "CPScreen.j"
@import "CPText.j"
+@import "CPTrackingArea.j"
@import "CPView.j"
@import "CPWindow_Constants.j"
@import "_CPBorderlessBridgeWindowView.j"
@@ -55,6 +56,7 @@
@class _CPWindowFrameAnimation
@global CPApp
+@global _CPPlatformWindowWillCloseNotification
@typedef _CPWindowFullPlatformWindowSession
@@ -196,7 +198,16 @@ var CPWindowActionMessageKeys = [
CPView _contentView;
CPView _toolbarView;
+ BOOL _handlingTrackingAreaEvent;
+ BOOL _restartHandlingTrackingAreaEvent;
+ CPArray _previousMouseEnteredStack;
+ CPArray _previousCursorUpdateStack;
CPArray _mouseEnteredStack;
+ CPArray _cursorUpdateStack;
+ CPArray _queuedEvents;
+ CPArray _trackingAreaViews;
+ id _activeCursorTrackingArea;
+ CPArray _queuedTrackingEvents;
CPView _leftMouseDownView;
CPView _rightMouseDownView;
@@ -334,6 +345,17 @@ CPTexturedBackgroundWindowMask
[self setLevel:CPNormalWindowLevel];
+ _handlingTrackingAreaEvent = NO;
+ _restartHandlingTrackingAreaEvent = NO;
+ _trackingAreaViews = [];
+ _previousMouseEnteredStack = [];
+ _previousCursorUpdateStack = [];
+ _mouseEnteredStack = [];
+ _cursorUpdateStack = [];
+ _queuedEvents = [];
+ _queuedTrackingEvents = [];
+ _activeCursorTrackingArea = nil;
+
// Create our border view which is the actual root of our view hierarchy.
_windowView = [[windowViewClass alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(_frame), CGRectGetHeight(_frame)) styleMask:aStyleMask];
@@ -556,6 +578,11 @@ CPTexturedBackgroundWindowMask
}
}
+- (CPView)_windowView
+{
+ return _windowView;
+}
+
/*!
Sets the receiver as a full platform window. If you pass YES the CPWindow instance will fill the entire browser content area,
otherwise the CPWindow will be a window inside of your browser window which the user can drag around, and resize (if you allow).
@@ -1922,6 +1949,9 @@ CPTexturedBackgroundWindowMask
_leftMouseDownView = nil;
+ // If mouseUp ends a drag operation, send delayed events for tracking views under the mouse, then flush delayed events
+ [self _flushTrackingEventQueueForMouseAt:point];
+
return;
case CPLeftMouseDown:
@@ -1957,6 +1987,11 @@ CPTexturedBackgroundWindowMask
case CPLeftMouseDragged:
case CPRightMouseDragged:
+ // First, we search for any tracking area requesting CPTrackingEnabledDuringMouseDrag.
+ // At the same time, we update the entered stack.
+ [self _handleTrackingAreaEvent:anEvent];
+
+ // Normal mouseDragged workflow
if (!_leftMouseDownView)
return [[_windowView hitTest:point] mouseDragged:anEvent];
@@ -1975,61 +2010,12 @@ CPTexturedBackgroundWindowMask
return [_leftMouseDownView performSelector:selector withObject:anEvent];
case CPMouseMoved:
- [_windowView setCursorForLocation:point resizing:NO];
// Ignore mouse moves for parents of sheets
if (!_acceptsMouseMovedEvents || sheet)
return;
- if (!_mouseEnteredStack)
- _mouseEnteredStack = [];
-
- var hitTestView = [_windowView hitTest:point];
-
- if ([_mouseEnteredStack count] && [_mouseEnteredStack lastObject] === hitTestView)
- return [hitTestView mouseMoved:anEvent];
-
- var view = hitTestView,
- mouseEnteredStack = [];
-
- while (view)
- {
- mouseEnteredStack.unshift(view);
-
- view = [view superview];
- }
-
- var deviation = MIN(_mouseEnteredStack.length, mouseEnteredStack.length);
-
- while (deviation--)
- if (_mouseEnteredStack[deviation] === mouseEnteredStack[deviation])
- break;
-
- var index = deviation + 1,
- count = _mouseEnteredStack.length;
-
- if (index < count)
- {
- var event = [CPEvent mouseEventWithType:CPMouseExited location:point modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0];
-
- for (; index < count; ++index)
- [_mouseEnteredStack[index] mouseExited:event];
- }
-
- index = deviation + 1;
- count = mouseEnteredStack.length;
-
- if (index < count)
- {
- var event = [CPEvent mouseEventWithType:CPMouseEntered location:point modifierFlags:[anEvent modifierFlags] timestamp:[anEvent timestamp] windowNumber:_windowNumber context:nil eventNumber:-1 clickCount:1 pressure:0];
-
- for (; index < count; ++index)
- [mouseEnteredStack[index] mouseEntered:event];
- }
-
- _mouseEnteredStack = mouseEnteredStack;
-
- [hitTestView mouseMoved:anEvent];
+ [self _handleTrackingAreaEvent:anEvent];
}
}
@@ -2856,7 +2842,7 @@ CPTexturedBackgroundWindowMask
if (delegate && endSelector)
{
if (_sheetContext["isAttached"])
- objj_msgSend(delegate, endSelector, _sheetContext["sheet"], _sheetContext["returnCode"],
+ delegate.isa.objj_msgSend3(delegate, endSelector, _sheetContext["sheet"], _sheetContext["returnCode"],
_sheetContext["contextInfo"]);
else
_sheetContext["deferDidEndSelector"] = YES;
@@ -2920,7 +2906,8 @@ CPTexturedBackgroundWindowMask
_sheetContext = nil;
sheet._parentView = nil;
- objj_msgSend(delegate, selector, sheet, returnCode, contextInfo);
+ if (delegate != null)
+ delegate.isa.objj_msgSend3(delegate, selector, sheet, returnCode, contextInfo);
}
else
{
@@ -3842,6 +3829,460 @@ var interpolate = function(fromValue, toValue, progress)
@end
+@implementation CPWindow (TrackingAreaAdditions)
+
+- (void)_addTrackingAreaView:(CPView)aView
+{
+ var trackingAreas = [aView trackingAreas];
+
+ for (var i = 0; i < trackingAreas.length; i++)
+ [self _addTrackingArea:trackingAreas[i]];
+}
+
+- (void)_removeTrackingAreaView:(CPView)aView
+{
+ var trackingAreas = [aView trackingAreas];
+
+ for (var i = 0; i < trackingAreas.length; i++)
+ [self _removeTrackingArea:trackingAreas[i]];
+}
+
+- (void)_addTrackingArea:(CPTrackingArea)trackingArea
+{
+ var trackingAreaView = [trackingArea view];
+
+ if (![_trackingAreaViews containsObjectIdenticalTo:trackingAreaView])
+ [_trackingAreaViews addObject:trackingAreaView];
+
+ // If CPTrackingAssumeInside option is set, insert the tracking area in the events management system
+ // in order to have the first event sent only when mouse leaves the tracking area
+
+ [self _insertTrackingArea:trackingArea assumeInside:([trackingArea options] & CPTrackingAssumeInside)];
+}
+
+- (void)_removeTrackingArea:(CPTrackingArea)trackingArea
+{
+ // If mouse is in the tracking area, we remove it from the stack to avoid to fire a future mouseExited event
+
+ [self _purgeTrackingArea:trackingArea];
+
+ var trackingAreaView = [trackingArea view];
+
+ [_trackingAreaViews removeObjectIdenticalTo:trackingAreaView];
+}
+
+- (void)_insertTrackingArea:(CPTrackingArea)trackingArea assumeInside:(BOOL)assumeInside
+{
+ if (_handlingTrackingAreaEvent)
+ _restartHandlingTrackingAreaEvent = YES;
+
+ if (assumeInside)
+ {
+ if (_handlingTrackingAreaEvent)
+ [_mouseEnteredStack addObject:trackingArea];
+ else
+ [_previousMouseEnteredStack addObject:trackingArea];
+ }
+}
+
+- (void)_purgeTrackingArea:(CPTrackingArea)trackingArea
+{
+ if (_handlingTrackingAreaEvent)
+ {
+ [_mouseEnteredStack removeObjectIdenticalTo:trackingArea];
+
+ var i = _queuedEvents.length;
+
+ while (i--)
+ if ([_queuedEvents[i] trackingArea] === trackingArea)
+ [_queuedEvents removeObjectAtIndex:i];
+
+ _cursorUpdateStack = [];
+ _activeCursorTrackingArea = nil;
+ }
+ else
+ {
+ [_previousMouseEnteredStack removeObjectIdenticalTo:trackingArea];
+ [_previousCursorUpdateStack removeObjectIdenticalTo:trackingArea];
+ }
+}
+
+- (void)_handleTrackingAreaEvent:(CPEvent)anEvent
+{
+ _handlingTrackingAreaEvent = YES;
+
+ var point = [anEvent locationInWindow],
+ dragging = ([anEvent type] !== CPMouseMoved);
+
+ do
+ {
+ // Initialize this run
+ _restartHandlingTrackingAreaEvent = NO;
+
+ _mouseEnteredStack = [];
+ _cursorUpdateStack = [];
+
+ // Important remark: we must queue events to avoid running conditions when a view uses a mouse event to modify view hierarchy
+
+ _queuedEvents = [];
+
+ // Handle mouse entering tracking areas (and calc _mouseEnteredStack and _cursorUpdateStack)
+
+ [self _handleMouseMovedAndEnteredEventsForEvent:anEvent atPoint:point dragging:dragging];
+
+ // Handle mouse exiting tracking areas
+
+ [self _handleMouseExitedEventsForEvent:anEvent atPoint:point dragging:dragging];
+
+ // Cursor update
+
+ if (_cursorUpdateStack.length > 0)
+ {
+ [self _handleCursorUpdateEventsForEvent:anEvent atPoint:point dragging:dragging];
+ }
+ else if (!dragging)
+ {
+ // Here, we are outside the window content view tracking area, so let _windowView set the cursor (resize cursor, ...)
+
+ [_windowView setCursorForLocation:point resizing:NO];
+ _activeCursorTrackingArea = nil;
+ }
+
+ // Send all queued events
+ // Important remark : as an event can modify the view hierarchy, the events queue could be modified while processing it
+
+ while (_queuedEvents.length > 0)
+ {
+ var queuedEvent = _queuedEvents[0],
+ trackingArea = [queuedEvent trackingArea],
+ trackingOwner = [trackingArea owner];
+
+ switch ([queuedEvent type])
+ {
+ case CPMouseEntered:
+ [trackingOwner mouseEntered:queuedEvent];
+ break;
+
+ case CPMouseExited:
+ [trackingOwner mouseExited:queuedEvent];
+ break;
+
+ case CPCursorUpdate:
+ [trackingOwner cursorUpdate:queuedEvent];
+ break;
+ }
+
+ if (queuedEvent === _queuedEvents[0])
+ [_queuedEvents removeObjectAtIndex:0];
+ }
+
+ // Prepare for next call
+
+ _previousMouseEnteredStack = _mouseEnteredStack;
+ _previousCursorUpdateStack = _cursorUpdateStack;
+ }
+ while (_restartHandlingTrackingAreaEvent)
+
+ _handlingTrackingAreaEvent = NO;
+}
+
+- (void)_handleMouseMovedAndEnteredEventsForEvent:(CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging
+{
+ var isKeyWindow = [self isKeyWindow];
+
+ for (var i = 0; i < _trackingAreaViews.length; i++)
+ {
+ var aView = _trackingAreaViews[i],
+ trackingAreas = [aView trackingAreas];
+
+ if ([aView isHidden])
+ continue;
+
+ for (var j = 0; j < trackingAreas.length; j++)
+ {
+ var aTrackingArea = trackingAreas[j],
+ trackingOptions = [aTrackingArea options],
+ trackingImplementedMethods = [aTrackingArea implementedOwnerMethods];
+
+ if (!(((trackingOptions & CPTrackingActiveAlways) ||
+ (trackingOptions & CPTrackingActiveInActiveApp) ||
+ ((trackingOptions & CPTrackingActiveInKeyWindow) && isKeyWindow) ||
+ ((trackingOptions & CPTrackingActiveWhenFirstResponder) && isKeyWindow && (_firstResponder === aView))) &&
+ (CGRectContainsPoint([aTrackingArea windowRect], point))))
+ {
+ continue;
+ }
+
+ [_mouseEnteredStack addObject:aTrackingArea];
+
+ if ([_previousMouseEnteredStack containsObjectIdenticalTo:aTrackingArea])
+ {
+ // Mouse was already in this rect so it's a mouseMoved
+
+ if (!dragging && (trackingOptions & CPTrackingMouseMoved) && (trackingImplementedMethods & CPTrackingOwnerImplementsMouseMoved))
+ [[aTrackingArea owner] mouseMoved:anEvent];
+ }
+ else if ((trackingOptions & CPTrackingMouseEnteredAndExited) && (trackingImplementedMethods & CPTrackingOwnerImplementsMouseEntered))
+ {
+ var mouseEnteredEvent = [CPEvent enterExitEventWithType:CPMouseEntered
+ location:point
+ modifierFlags:[anEvent modifierFlags]
+ timestamp:[anEvent timestamp]
+ windowNumber:_windowNumber
+ context:nil
+ eventNumber:-1
+ trackingArea:aTrackingArea];
+
+ if (dragging && !(trackingOptions & CPTrackingEnabledDuringMouseDrag))
+ [self _queueTrackingEvent:mouseEnteredEvent];
+ else
+ [_queuedEvents addObject:mouseEnteredEvent];
+ }
+
+ if ((trackingOptions & CPTrackingCursorUpdate) && (trackingImplementedMethods & CPTrackingOwnerImplementsCursorUpdate))
+ [_cursorUpdateStack addObject:aTrackingArea];
+ }
+ }
+}
+
+- (void)_handleMouseExitedEventsForEvent:(CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging
+{
+ // Search for exited views (were in _previousMouseEnteredStack but no more in _mouseEnteredStack)
+
+ for (var i = 0; i < _previousMouseEnteredStack.length; i++)
+ {
+ var aTrackingArea = _previousMouseEnteredStack[i],
+ trackingOptions = [aTrackingArea options];
+
+ if ([_mouseEnteredStack containsObjectIdenticalTo:aTrackingArea])
+ continue;
+
+ // Mouse is no more in this area so it's a mouseExited
+
+ if ((trackingOptions & CPTrackingMouseEnteredAndExited) && ([aTrackingArea implementedOwnerMethods] & CPTrackingOwnerImplementsMouseExited))
+ {
+ var theView = [aTrackingArea owner],
+ mouseExitedEvent = [CPEvent enterExitEventWithType:CPMouseExited
+ location:point
+ modifierFlags:[anEvent modifierFlags]
+ timestamp:[anEvent timestamp]
+ windowNumber:_windowNumber
+ context:nil
+ eventNumber:-1
+ trackingArea:aTrackingArea];
+
+ if (dragging && !(trackingOptions & CPTrackingEnabledDuringMouseDrag))
+ [self _queueTrackingEvent:mouseExitedEvent];
+ else
+ [_queuedEvents addObject:mouseExitedEvent];
+ }
+
+ // If this is the active cursor area, we reset _previousCursorUpdateStack so a new active area will be computed
+
+ if (aTrackingArea === _activeCursorTrackingArea)
+ {
+ _previousCursorUpdateStack = [];
+ _activeCursorTrackingArea = nil;
+ }
+ }
+}
+
+- (void)_handleCursorUpdateEventsForEvent:(CPEvent)anEvent atPoint:(CGPoint)point dragging:(BOOL)dragging
+{
+ var overlappingTrackingAreas = [];
+
+ for (var i = 0; i < _cursorUpdateStack.length; i++)
+ {
+ var aTrackingArea = _cursorUpdateStack[i];
+
+ if ((![_previousCursorUpdateStack containsObjectIdenticalTo:aTrackingArea]) || (aTrackingArea === _activeCursorTrackingArea))
+ [overlappingTrackingAreas addObject:aTrackingArea];
+ }
+
+ var frontmostTrackingArea = overlappingTrackingAreas[0],
+ frontmostView = [frontmostTrackingArea view];
+
+ for (var i = 1; i < overlappingTrackingAreas.length; i++)
+ {
+ var aTrackingArea = overlappingTrackingAreas[i],
+ aView = [aTrackingArea view];
+
+ // First, if aView is _windowView, skip to next overlapping tracking area
+ // as _windowView can't be the frontmost view if there's multiple overlapping tracking areas.
+
+ if (aView === _windowView)
+ continue;
+
+ // Then, if frontmostView is _windowView, aView must become frontmostView
+
+ if (frontmostView === _windowView)
+ {
+ frontmostTrackingArea = aTrackingArea;
+ frontmostView = aView;
+
+ continue;
+ }
+
+ // Next verify if aView is a subview of frontmostView
+ // If so, it's our new frontmost view
+
+ var searchingView = aView;
+
+ while ((searchingView !== _contentView) && ([searchingView superview] !== frontmostView))
+ searchingView = [searchingView superview];
+
+ if (searchingView !== _contentView)
+ {
+ frontmostTrackingArea = aTrackingArea;
+ frontmostView = aView;
+
+ continue;
+ }
+
+ // aView is not a subview of frontmostView
+ // Search in view hierarchy which one will be over the other
+ // (this is done by comparing their draw order)
+
+ var firstView = frontmostView,
+ firstSuperview = [firstView superview];
+
+ while (firstView !== _contentView)
+ {
+ var secondView = aView,
+ secondSuperview = [secondView superview];
+
+ while ((secondSuperview !== _contentView) && (firstSuperview !== secondSuperview))
+ {
+ secondView = secondSuperview;
+ secondSuperview = [secondView superview];
+ }
+
+ if (firstSuperview === secondSuperview)
+ break;
+
+ firstView = firstSuperview;
+ firstSuperview = [firstView superview];
+ }
+
+ if (firstSuperview !== secondSuperview)
+ [CPException raise:CPInternalInconsistencyException reason:"Problem with view hierarchy"];
+
+ var firstSuperviewSubviews = [firstSuperview subviews],
+ firstViewIndex = [firstSuperviewSubviews indexOfObject:firstView],
+ secondViewIndex = [firstSuperviewSubviews indexOfObject:secondView];
+
+ if (secondViewIndex > firstViewIndex)
+ {
+ frontmostTrackingArea = aTrackingArea;
+ frontmostView = aView;
+ }
+ }
+
+ if (frontmostTrackingArea !== _activeCursorTrackingArea)
+ {
+ var cursorUpdateEvent = [CPEvent enterExitEventWithType:CPCursorUpdate
+ location:point
+ modifierFlags:[anEvent modifierFlags]
+ timestamp:[anEvent timestamp]
+ windowNumber:_windowNumber
+ context:nil
+ eventNumber:-1
+ trackingArea:frontmostTrackingArea];
+
+ if (dragging)
+ [self _queueTrackingEvent:cursorUpdateEvent];
+ else
+ [_queuedEvents addObject:cursorUpdateEvent];
+
+ _activeCursorTrackingArea = frontmostTrackingArea;
+ }
+}
+
+- (void)_queueTrackingEvent:(CPEvent)anEvent
+{
+ // This will put a tracking event in the _queuedTrackingEvents queue.
+ //
+ // We optimize this queue with this policy :
+ // - if mouseEntered, search if queue contains a previous mouseExited for the same tracking area. If so, discard both.
+ // - if mouseExited, search if queue contains a previous mouseEntered for the same tracking area. If so, discard both.
+ //
+ // This is not Cocoa way of doing as it would send every event.
+ // But final result should be the same.
+
+ var eventType = [anEvent type],
+ trackingArea = [anEvent trackingArea];
+
+ switch ([anEvent type])
+ {
+ case CPMouseEntered:
+ for (var i = 0; i < _queuedTrackingEvents.length; i++)
+ {
+ var queuedEvent = _queuedTrackingEvents[i];
+
+ if (([queuedEvent trackingArea] === trackingArea) && ([queuedEvent type] === CPMouseExited))
+ {
+ [_queuedTrackingEvents removeObjectAtIndex:i];
+ return;
+ }
+ }
+
+ [_queuedTrackingEvents addObject:anEvent];
+ break;
+
+ case CPMouseExited:
+ for (var i = 0; i < _queuedTrackingEvents.length; i++)
+ {
+ var queuedEvent = _queuedTrackingEvents[i];
+
+ if (([queuedEvent trackingArea] === trackingArea) && ([queuedEvent type] === CPMouseEntered))
+ {
+ [_queuedTrackingEvents removeObjectAtIndex:i];
+ return;
+ }
+ }
+
+ [_queuedTrackingEvents addObject:anEvent];
+ break;
+
+ case CPCursorUpdate:
+ [_queuedTrackingEvents addObject:anEvent];
+ break;
+ }
+}
+
+- (void)_flushTrackingEventQueueForMouseAt:(CGPoint)point
+{
+ for (var i = 0; i < _queuedTrackingEvents.length; i++)
+ {
+ var queuedEvent = _queuedTrackingEvents[i],
+ trackingArea = [queuedEvent trackingArea],
+ trackingOwner = [trackingArea owner];
+
+ switch ([queuedEvent type])
+ {
+ case CPMouseEntered:
+ [trackingOwner mouseEntered:queuedEvent];
+ break;
+
+ case CPMouseExited:
+ [trackingOwner mouseExited:queuedEvent];
+ break;
+
+ case CPCursorUpdate:
+ [trackingOwner updateTrackingAreas];
+
+ if (CGRectContainsPoint([trackingArea windowRect], point))
+ [trackingOwner cursorUpdate:queuedEvent];
+
+ break;
+ }
+ }
+
+ _queuedTrackingEvents = [];
+}
+
+@end
+
function _CPWindowFullPlatformWindowSessionMake(aWindowView, aContentRect, hasShadow, aLevel)
{
return { windowView:aWindowView, contentRect:aContentRect, hasShadow:hasShadow, level:aLevel };
diff --git a/AppKit/CPWindow/_CPWindowView.j b/AppKit/CPWindow/_CPWindowView.j
index 0ffd01121..6e4127928 100644
--- a/AppKit/CPWindow/_CPWindowView.j
+++ b/AppKit/CPWindow/_CPWindowView.j
@@ -353,7 +353,9 @@ _CPWindowViewResizeSlop = 3;
if ([theWindow isFullPlatformWindow] ||
!(_styleMask & CPResizableWindowMask) ||
(CPWindowResizeStyle !== CPWindowResizeStyleModern))
+ {
return;
+ }
var globalPoint = [theWindow convertBaseToGlobal:aPoint],
resizeRegion = isResizing ? _resizeRegion : [self resizeRegionForPoint:globalPoint],
@@ -969,3 +971,18 @@ _CPWindowViewResizeSlop = 3;
}
@end
+
+@implementation _CPWindowView (TrackingAreaAdditions)
+
+- (void)updateTrackingAreas
+{
+ [self removeAllTrackingAreas];
+
+ [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:[self contentRectForFrameRect:[self frame]]
+ options:CPTrackingCursorUpdate | CPTrackingActiveInActiveApp
+ owner:self
+ userInfo:nil]];
+}
+
+@end
+
diff --git a/AppKit/Cib/CPCib.j b/AppKit/Cib/CPCib.j
index 12c9611af..64ec7d981 100644
--- a/AppKit/Cib/CPCib.j
+++ b/AppKit/Cib/CPCib.j
@@ -32,6 +32,7 @@
@import "_CPCibObjectData.j"
@import "_CPCibProxyObject.j"
@import "_CPCibWindowTemplate.j"
+@import "_CPLocalizableString.j"
CPCibOwner = @"CPCibOwner";
CPCibTopLevelObjects = @"CPCibTopLevelObjects";
@@ -46,10 +47,11 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
@implementation CPCib : CPObject
{
- CPData _data;
- CPBundle _bundle;
- BOOL _awakenCustomResources;
+ BOOL _awakenCustomResources @accessors(property=_awakenCustomResources);
+ CPBundle _bundle;
+ CPData _data;
+ CPString _cibName;
id _loadDelegate;
}
@@ -59,6 +61,8 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
if (self)
{
+ _cibName = [aURL lastPathComponent];
+
_data = [CPURLConnection sendSynchronousRequest:[CPURLRequest requestWithURL:aURL] returningResponse:nil];
if (!_data)
@@ -76,6 +80,8 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
if (self)
{
+ _cibName = [aURL lastPathComponent];
+
[CPURLConnection connectionWithRequest:[CPURLRequest requestWithURL:aURL] delegate:self];
_awakenCustomResources = YES;
@@ -92,7 +98,9 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
aName = [aName stringByAppendingString:@".cib"];
// If aBundle is nil, use mainBundle, but ONLY for searching for the nib, not for resources later.
- self = [self initWithContentsOfURL:[aBundle || [CPBundle mainBundle] pathForResource:aName]];
+ var bundle = aBundle || [CPBundle mainBundle];
+
+ self = [self initWithContentsOfURL:[bundle _cibPathForResource:aName]];
if (self)
_bundle = aBundle;
@@ -106,7 +114,9 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
aName = [aName stringByAppendingString:@".cib"];
// If aBundle is nil, use mainBundle, but ONLY for searching for the nib, not for resources later.
- self = [self initWithContentsOfURL:[aBundle || [CPBundle mainBundle] pathForResource:aName] loadDelegate:aLoadDelegate];
+ var bundle = aBundle || [CPBundle mainBundle];
+
+ self = [self initWithContentsOfURL:[bundle _cibPathForResource:aName] loadDelegate:aLoadDelegate];
if (self)
_bundle = aBundle;
@@ -114,16 +124,6 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
return self;
}
-- (void)_setAwakenCustomResources:(BOOL)shouldAwakenCustomResources
-{
- _awakenCustomResources = shouldAwakenCustomResources;
-}
-
-- (BOOL)_awakenCustomResources
-{
- return _awakenCustomResources;
-}
-
- (BOOL)instantiateCibWithExternalNameTable:(CPDictionary)anExternalNameTable
{
var bundle = _bundle,
@@ -132,7 +132,7 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
if (!bundle && owner)
bundle = [CPBundle bundleForClass:[owner class]];
- var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data bundle:bundle awakenCustomResources:_awakenCustomResources],
+ var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data bundle:bundle awakenCustomResources:_awakenCustomResources cibName:_cibName],
replacementClasses = [anExternalNameTable objectForKey:CPCibReplacementClasses];
if (replacementClasses)
@@ -226,4 +226,4 @@ var CPCibDataFileKey = @"CPCibDataFileKey",
[aCoder encodeObject:[_data base64] forKey:CPCibDataFileKey];
}
-@end
+@end
\ No newline at end of file
diff --git a/AppKit/Cib/CPCibLoading.j b/AppKit/Cib/CPCibLoading.j
index 91ae95ed3..7c346dd95 100644
--- a/AppKit/Cib/CPCibLoading.j
+++ b/AppKit/Cib/CPCibLoading.j
@@ -26,7 +26,11 @@
@import "CPCib.j"
-var CPCibOwner = @"CPCibOwner";
+var CPCibOwner = @"CPCibOwner",
+ CPBundleDefaultLanguage = @"CPBundleDefaultLanguage",
+ CPBundleTypeOfLocalization = @"CPBundleTypeOfLocalization",
+ CPBundleBaseLocalizationType = @"CPBundleBaseLocalizationType",
+ CPBundleInterfaceBuilderLocalizationType = @"CPBundleInterfaceBuilderLocalizationType";
@implementation CPObject (CPCibLoading)
@@ -45,14 +49,7 @@ var CPCibOwner = @"CPCibOwner";
+ (CPCib)loadCibNamed:(CPString)aName owner:(id)anOwner
{
- if (![aName hasSuffix:@".cib"])
- aName = [aName stringByAppendingString:@".cib"];
-
- // Path is based solely on anOwner:
- var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle],
- path = [bundle pathForResource:aName];
-
- return [self loadCibFile:path externalNameTable:@{ CPCibOwner: anOwner }];
+ return [self loadCibFile:[self _cibPathForName:aName withOwner:anOwner] externalNameTable:@{ CPCibOwner: anOwner }];
}
- (CPCib)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable
@@ -71,14 +68,7 @@ var CPCibOwner = @"CPCibOwner";
+ (CPCib)loadCibNamed:(CPString)aName owner:(id)anOwner loadDelegate:(id)aDelegate
{
- if (![aName hasSuffix:@".cib"])
- aName = [aName stringByAppendingString:@".cib"];
-
- // Path is based solely on anOwner:
- var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle],
- path = [bundle pathForResource:aName];
-
- return [self loadCibFile:path externalNameTable:@{ CPCibOwner: anOwner } loadDelegate:aDelegate];
+ return [self loadCibFile:[self _cibPathForName:aName withOwner:anOwner] externalNameTable:@{ CPCibOwner: anOwner } loadDelegate:aDelegate];
}
- (CPCib)loadCibFile:(CPString)aFileName externalNameTable:(CPDictionary)aNameTable loadDelegate:(id)aDelegate
@@ -91,6 +81,30 @@ var CPCibOwner = @"CPCibOwner";
externalNameTable:aNameTable]]);
}
+- (CPString)_cibPathForResource:(CPString)aName
+{
+ var defaultBundleLanguage = [self objectForInfoDictionaryKey:CPBundleDefaultLanguage],
+ typeOfLocalization = [self objectForInfoDictionaryKey:CPBundleTypeOfLocalization];
+
+ if (defaultBundleLanguage && (!typeOfLocalization || typeOfLocalization == CPBundleBaseLocalizationType))
+ aName = @"Base.lproj/" + aName;
+ else if (defaultBundleLanguage && typeOfLocalization == CPBundleInterfaceBuilderLocalizationType)
+ aName = _bundle.loadedLanguage() + ".lproj/" + aName;
+
+ return [self pathForResource:aName];
+}
+
++ (CPString)_cibPathForName:(CPString)aName withOwner:(id)anOwner
+{
+ if (![aName hasSuffix:@".cib"])
+ aName = [aName stringByAppendingString:@".cib"];
+
+ // Path is based solely on anOwner:
+ var bundle = anOwner ? [CPBundle bundleForClass:[anOwner class]] : [CPBundle mainBundle];
+
+ return [bundle _cibPathForResource:aName];
+}
+
@end
@implementation _CPCibLoadDelegate : CPObject
diff --git a/AppKit/Cib/_CPCibKeyedUnarchiver.j b/AppKit/Cib/_CPCibKeyedUnarchiver.j
index bdb88d1a0..e68c63ce2 100644
--- a/AppKit/Cib/_CPCibKeyedUnarchiver.j
+++ b/AppKit/Cib/_CPCibKeyedUnarchiver.j
@@ -21,16 +21,22 @@
*/
@import
-
+@import
@implementation _CPCibKeyedUnarchiver : CPKeyedUnarchiver
{
- CPBundle _bundle;
- BOOL _awakenCustomResources;
- CPDictionary _externalObjectsForProxyIdentifiers;
+ BOOL _awakenCustomResources @accessors(getter=awakenCustomResources);
+ CPBundle _bundle @accessors(getter=bundle);
+ CPDictionary _externalObjectsForProxyIdentifiers @accessors(setter=setExternalObjectsForProxyIdentifiers:);
+ CPString _cibName @accessors(getter=cibName);
}
- (id)initForReadingWithData:(CPData)data bundle:(CPBundle)aBundle awakenCustomResources:(BOOL)shouldAwakenCustomResources
+{
+ return [self initForReadingWithData:data bundle:aBundle awakenCustomResources:shouldAwakenCustomResources cibName:@""];
+}
+
+- (id)initForReadingWithData:(CPData)data bundle:(CPBundle)aBundle awakenCustomResources:(BOOL)shouldAwakenCustomResources cibName:(CPString)aCibName
{
self = [super initForReadingWithData:data];
@@ -38,6 +44,7 @@
{
_bundle = aBundle;
_awakenCustomResources = shouldAwakenCustomResources;
+ _cibName = aCibName;
[self setDelegate:self];
}
@@ -45,21 +52,6 @@
return self;
}
-- (CPBundle)bundle
-{
- return _bundle;
-}
-
-- (BOOL)awakenCustomResources
-{
- return _awakenCustomResources;
-}
-
-- (void)setExternalObjectsForProxyIdentifiers:(CPDictionary)externalObjectsForProxyIdentifiers
-{
- _externalObjectsForProxyIdentifiers = externalObjectsForProxyIdentifiers;
-}
-
- (id)externalObjectForProxyIdentifier:(CPString)anIdentifier
{
return [_externalObjectsForProxyIdentifiers objectForKey:anIdentifier];
diff --git a/AppKit/Cib/_CPLocalizableString.j b/AppKit/Cib/_CPLocalizableString.j
new file mode 100644
index 000000000..dca7608bb
--- /dev/null
+++ b/AppKit/Cib/_CPLocalizableString.j
@@ -0,0 +1,62 @@
+/*
+ * _CPLocalizableString.j
+ * AppKit
+ *
+ * Created by Alexandre Wilhelm.
+ * Copyright 2015, Cappuccino Project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+@import
+@import
+
+@implementation _CPLocalizableString : CPObject
+{
+ CPString _dev @accessors(property=dev);
+ CPString _key @accessors(property=key);
+ CPString _value @accessors(property=value);
+}
+
+@end
+
+
+var CPLocalizableStringDev = @"CPLocalizableStringDev",
+ CPLocalizableStringKey = @"CPLocalizableStringKey",
+ CPLocalizableStringValue = @"CPLocalizableStringValue";
+
+@implementation _CPLocalizableString (CPCoding)
+
+- (id)initWithCoder:(CPCoder)aCoder
+{
+ [self init];
+
+ _dev = [aCoder decodeObjectForKey:CPLocalizableStringDev];
+ _key = [aCoder decodeObjectForKey:CPLocalizableStringKey];
+ _value = [aCoder decodeObjectForKey:CPLocalizableStringValue];
+
+ var tableName = [[aCoder cibName] stringByTrimmingCharactersInSet:[CPCharacterSet characterSetWithCharactersInString:@".cib"]];
+
+ return [[aCoder bundle] localizedStringForKey:_key value:_value table:tableName];
+}
+
+- (void)encodeWithCoder:(CPCoder)aCoder
+{
+ [aCoder encodeObject:_dev forKey:CPLocalizableStringDev];
+ [aCoder encodeObject:_key forKey:CPLocalizableStringKey];
+ [aCoder encodeObject:_value forKey:CPLocalizableStringValue];
+}
+
+@end
\ No newline at end of file
diff --git a/AppKit/Jakefile b/AppKit/Jakefile
index 69f958e4c..b5aeb5434 100644
--- a/AppKit/Jakefile
+++ b/AppKit/Jakefile
@@ -33,8 +33,9 @@ appKitTask = framework ("AppKit", function(appKitTask)
return "--include \"" + aFilename + "\"";
}).join(" ");
- if ($CONFIGURATION === "Release")
- appKitTask.setCompilerFlags("-O " + INCLUDES);
+ if ($CONFIGURATION === "Release") {
+ appKitTask.setCompilerFlags("-O2 " + INCLUDES);
+ }
else
appKitTask.setCompilerFlags("-DDEBUG -g " + INCLUDES);
});
diff --git a/AppKit/Platform/CPPlatformWindow.j b/AppKit/Platform/CPPlatformWindow.j
index fb742b351..f73c9205f 100644
--- a/AppKit/Platform/CPPlatformWindow.j
+++ b/AppKit/Platform/CPPlatformWindow.j
@@ -121,6 +121,8 @@ var PrimaryPlatformWindow = NULL;
_windowLayers = @{};
_charCodes = {};
+
+ _platformPasteboard = [CPPlatformPasteboard new];
#endif
}
@@ -213,7 +215,7 @@ var PrimaryPlatformWindow = NULL;
- (BOOL)isVisible
{
#if PLATFORM(DOM)
- return _DOMWindow !== NULL;
+ return _DOMWindow !== NULL && _DOMWindow !== undefined;
#else
return NO;
#endif
diff --git a/AppKit/Platform/DOM/CPPlatformString.j b/AppKit/Platform/DOM/CPPlatformString.j
index 3bce7f82d..fb440d36d 100644
--- a/AppKit/Platform/DOM/CPPlatformString.j
+++ b/AppKit/Platform/DOM/CPPlatformString.j
@@ -129,6 +129,33 @@ var DOMFixedWidthSpanElement = nil,
DOMMetricsDivElement.appendChild(DOMMetricsImgElement);
}
++ (int)charPositionOfString:(CPString)aString withFont:(CPFont)aFont forPoint:(CGPoint)aPoint
+{
+ if (!aString)
+ return 0;
+
+ var position = 0,
+ stringLength = aString.length,
+ currentString = "";
+
+ for (var i = 0; i < stringLength; i++)
+ {
+ var lastChar = aString[i];
+
+ currentString += lastChar;
+
+ var sizeOfString = [self sizeOfString:currentString withFont:aFont forWidth:nil].width,
+ sizeLastChar = [self sizeOfString:lastChar withFont:aFont forWidth:nil].width;
+
+ if (sizeOfString - sizeLastChar / 2 < aPoint.x)
+ position++;
+ else
+ break;
+ }
+
+ return position;
+}
+
+ (CGSize)sizeOfString:(CPString)aString withFont:(CPFont)aFont forWidth:(float)aWidth
{
if (!DOMFixedWidthSpanElement)
diff --git a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j
index e96a5708c..fa54e8892 100644
--- a/AppKit/Platform/DOM/CPPlatformWindow+DOM.j
+++ b/AppKit/Platform/DOM/CPPlatformWindow+DOM.j
@@ -568,6 +568,9 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio
_DOMWindow = window.open("about:blank", "_blank", "menubar=no,location=no,resizable=yes,scrollbars=no,status=no,left=" + CGRectGetMinX(_contentRect) + ",top=" + CGRectGetMinY(_contentRect) + ",width=" + CGRectGetWidth(_contentRect) + ",height=" + CGRectGetHeight(_contentRect));
+ if (!_DOMWindow)
+ return;
+
[PlatformWindows addObject:self];
// FIXME: cpSetFrame?
@@ -1414,6 +1417,9 @@ _CPPlatformWindowWillCloseNotification = @"_CPPlatformWindowWillCloseNotificatio
- (void)order:(CPWindowOrderingMode)orderingMode window:(CPWindow)aWindow relativeTo:(CPWindow)otherWindow
{
+ if (!_DOMWindow)
+ return;
+
[CPPlatform initializeScreenIfNecessary];
// Grab the appropriate level for the layer, and create it if
@@ -1851,11 +1857,10 @@ function CPWindowObjectList()
function CPWindowList()
{
- var windowObjectList = CPWindowObjectList(),
- windowList = [];
+ var windowObjectList = CPWindowObjectList();
- for (var i = 0, count = [windowObjectList count]; i < count; i++)
- windowList.push([windowObjectList[i] windowNumber]);
-
- return windowList;
+ return [windowObjectList arrayByApplyingBlock:function(windowObject)
+ {
+ return [windowObject windowNumber];
+ }];
}
diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j
index be6830a4c..31bd445ac 100755
--- a/AppKit/Themes/Aristo/ThemeDescriptors.j
+++ b/AppKit/Themes/Aristo/ThemeDescriptors.j
@@ -384,6 +384,19 @@ var themedButtonValues = nil,
"themedTokenFieldTokenCloseButton"];
}
++ (CPColor)themedColor
+{
+ var color = [CPColor blackColor],
+ themedColorValues =
+ [
+ [@"alternate-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]],
+ [@"secondary-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]]
+ ];
+
+ [self registerThemeValues:themedColorValues forObject:color];
+
+ return color;
+}
+ (CPButton)makeButton
{
diff --git a/AppKit/Themes/Aristo2/ThemeDescriptors.j b/AppKit/Themes/Aristo2/ThemeDescriptors.j
index 140ebe208..ee6917791 100644
--- a/AppKit/Themes/Aristo2/ThemeDescriptors.j
+++ b/AppKit/Themes/Aristo2/ThemeDescriptors.j
@@ -28,6 +28,7 @@
@import
@import
@import
+@import
@import
@import
@import
@@ -96,7 +97,22 @@ var themedButtonValues = nil,
"themedRuleEditor",
"themedTableDataView",
"themedCornerview",
- "themedTokenFieldTokenCloseButton"];
+ "themedTokenFieldTokenCloseButton",
+ "themedColor"];
+}
+
++ (CPColor)themedColor
+{
+ var color = [CPColor redColor],
+ themedColorValues =
+ [
+ [@"alternate-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.22, 0.46, 0.84, 1.0]]],
+ [@"secondary-selected-control-color", [[CPColor alloc] _initWithRGBA:[0.83, 0.83, 0.83, 1.0]]]
+ ];
+
+ [self registerThemeValues:themedColorValues forObject:color];
+
+ return color;
}
+ (CPButton)makeButton
@@ -310,7 +326,7 @@ var themedButtonValues = nil,
var button = [self button];
[button setTitle:@"OK"];
- [button setThemeState:[CPButtonStateBezelStyleRounded, CPThemeStateDefault]];
+ [button setThemeStates:[CPButtonStateBezelStyleRounded, CPThemeStateDefault]];
return button;
}
diff --git a/AppKit/Themes/BlendKit/BKThemeDescriptor.j b/AppKit/Themes/BlendKit/BKThemeDescriptor.j
index 522050def..1512c480e 100644
--- a/AppKit/Themes/BlendKit/BKThemeDescriptor.j
+++ b/AppKit/Themes/BlendKit/BKThemeDescriptor.j
@@ -217,6 +217,11 @@ var ItemSizes = { },
return [[self themeName] compare:[aThemeDescriptor themeName]];
}
++ (void)registerThemeValues:(CPArray)themeValues forObject:(id)anObject
+{
+ [self registerThemeValues:themeValues forView:anObject];
+}
+
+ (void)registerThemeValues:(CPArray)themeValues forView:(CPView)aView
{
for (var i = 0; i < themeValues.length; ++i)
@@ -227,12 +232,22 @@ var ItemSizes = { },
state = attributeValueState[2];
if (state)
- [aView setValue:value forThemeAttribute:attribute inState:state];
+ {
+ if (state.isa && [state isKindOfClass:CPArray])
+ [aView setValue:value forThemeAttribute:attribute inStates:state];
+ else
+ [aView setValue:value forThemeAttribute:attribute inState:state];
+ }
else
[aView setValue:value forThemeAttribute:attribute];
}
}
++ (void)registerThemeValues:(CPArray)themeValues forObject:(id)anObject inherit:(CPArray)inheritedValues
+{
+ [self registerThemeValues:themeValues forView:anObject inherit:inheritedValues];
+}
+
+ (void)registerThemeValues:(CPArray)themeValues forView:(CPView)aView inherit:(CPArray)inheritedValues
{
// Register inherited values first, then override those with the subtheme values.
@@ -294,7 +309,12 @@ var ItemSizes = { },
}
if (state)
- [aView setValue:value forThemeAttribute:attribute inState:state];
+ {
+ if (state.isa && [state isKindOfClass:CPArray])
+ [aView setValue:value forThemeAttribute:attribute inStates:state];
+ else
+ [aView setValue:value forThemeAttribute:attribute inState:state];
+ }
else
[aView setValue:value forThemeAttribute:attribute];
}
diff --git a/AppKit/Themes/BlendKit/Jakefile b/AppKit/Themes/BlendKit/Jakefile
index da9439c09..540297c1a 100644
--- a/AppKit/Themes/BlendKit/Jakefile
+++ b/AppKit/Themes/BlendKit/Jakefile
@@ -20,7 +20,7 @@ blendKitTask = framework ("BlendKit", function(blendKitTask)
blendKitTask.setFlattensSources(true); // FIXME: how do we non flatten?
if ($CONFIGURATION === "Release")
- blendKitTask.setCompilerFlags("-O");
+ blendKitTask.setCompilerFlags("-O2");
else
blendKitTask.setCompilerFlags("-DDEBUG -g");
});
diff --git a/AppKit/_CPAutocompleteMenu.j b/AppKit/_CPAutocompleteMenu.j
index cf25c025d..f1b3ecb41 100644
--- a/AppKit/_CPAutocompleteMenu.j
+++ b/AppKit/_CPAutocompleteMenu.j
@@ -171,9 +171,9 @@ var _CPAutocompleteMenuMaximumHeight = 307;
var dataView = [tableColumn dataView],
fontNormal = [dataView valueForThemeAttribute:@"font" inState:CPThemeStateTableDataView],
- fontSelected = [dataView valueForThemeAttribute:@"font" inState:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]],
+ fontSelected = [dataView valueForThemeAttribute:@"font" inStates:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]],
contentInsetNormal = [dataView valueForThemeAttribute:@"content-inset" inState:CPThemeStateTableDataView],
- contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inState:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]];
+ contentInsetSelected = [dataView valueForThemeAttribute:@"content-inset" inStates:[CPThemeStateTableDataView, CPThemeStateSelectedDataView]];
var mergedString = contentArray.join("\n");
diff --git a/AppKit/_CPObject+Theme.j b/AppKit/_CPObject+Theme.j
new file mode 100644
index 000000000..20f32da85
--- /dev/null
+++ b/AppKit/_CPObject+Theme.j
@@ -0,0 +1,480 @@
+/*
+ * AppKit.j
+ * AppKit
+ *
+ * Created by Alexandre Wilhelm.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+@import
+
+@import "CPTheme.j"
+
+var CPViewThemeClassKey = @"CPViewThemeClassKey",
+ CPViewThemeStateKey = @"CPViewThemeStateKey";
+
+@protocol CPTheme
+
+- (CPString)themeClass;
+- (void)setThemeClass:(CPString)theClass;
+
+- (CPTheme)theme;
+- (void)setTheme:(CPTheme)aTheme;
+
+- (unsigned)themeState;
+- (BOOL)hasThemeState:(ThemeState)aState;
+- (BOOL)hasThemeStates:(CPArray)states;
+- (BOOL)setThemeState:(ThemeState)aState;
+- (BOOL)setThemeStates:(CPArray)aState;
+- (BOOL)unsetThemeState:(ThemeState)aState;
+- (BOOL)unsetThemeStates:(CPArray)aState;
+- (BOOL)hasThemeAttribute:(CPString)aName;
+
+- (void)objectDidChangeTheme;
+
+- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState;
+- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName;
+- (id)valueForThemeAttribute:(CPString)aName inState:(ThemeState)aState;
+- (id)valueForThemeAttribute:(CPString)aName;
+- (id)currentValueForThemeAttribute:(CPString)aName;
+- (void)registerThemeValues:(CPArray)themeValues;
+- (void)registerThemeValues:(CPArray)themeValues inherit:(CPArray)inheritedValues;
+
+@end
+
+@implementation CPObject (ObjectTheming)
+{
+ // Theming Support
+ CPTheme _theme;
+ CPString _themeClass;
+ JSObject _themeAttributes;
+ unsigned _themeState;
+}
+
+
+#pragma mark -
+#pragma mark Theme State
+
+- (unsigned)themeState
+{
+ return _themeState;
+}
+
+- (BOOL)hasThemeState:(ThemeState)aState
+{
+#if DEBUG
+// TODO: To allow aState to be an array is now deprecated. An exception is thrown only in Debug version as
+// the preformance cost for this check is to high. We should remove this check in a future release.
+ if (aState && aState.isa && [aState isKindOfClass:CPArray])
+ [CPException raise:CPInvalidArgumentException reason:@"aState can't be an array. Please use 'hasThemeStates: instead: " + aState];
+#endif
+
+ return _themeState.hasThemeState(aState);
+}
+
+- (BOOL)hasThemeStates:(CPArray)states
+{
+ var i = [states count],
+ aState = [states objectAtIndex:--i];
+
+ while (i > 0)
+ aState = aState.and([states objectAtIndex:--i]);
+
+ return _themeState.hasThemeState(aState);
+}
+
+- (BOOL)setThemeState:(ThemeState)aState
+{
+#if DEBUG
+// TODO: To allow aState to be an array is now deprecated. An exception is thrown only in Debug version as
+// the preformance cost for this check is to high. We should remove this check in a future release.
+ if (aState && aState.isa && [aState isKindOfClass:CPArray])
+ [CPException raise:CPInvalidArgumentException reason:@"aState can't be an array. Please use 'setThemeStates: instead: " + aState];
+#endif
+
+ if (_themeState.hasThemeState(aState))
+ return NO;
+
+ _themeState = _themeState.and(aState);
+
+ return YES;
+}
+
+- (BOOL)unsetThemeState:(ThemeState)aState
+{
+#if DEBUG
+// TODO: To allow aState to be an array is now deprecated. An exception is thrown only in Debug version as
+// the preformance cost for this check is to high. We should remove this check in a future release.
+ if (aState && aState.isa && [aState isKindOfClass:CPArray])
+ [CPException raise:CPInvalidArgumentException reason:@"aState can't be an array. Please use 'unsetThemeStates: instead: " + aState];
+#endif
+
+ var oldThemeState = _themeState;
+
+ _themeState = _themeState.without(aState);
+
+ if (oldThemeState === _themeState)
+ return NO;
+
+ return YES;
+}
+
+- (BOOL)setThemeStates:(CPArray)states
+{
+ var i = [states count],
+ aState = [states objectAtIndex:--i];
+
+ while (i > 0)
+ aState = aState.and([states objectAtIndex:--i]);
+
+ return [self setThemeState:aState];
+}
+
+- (BOOL)unsetThemeStates:(CPArray)states
+{
+ var i = [states count],
+ aState = [states objectAtIndex:--i];
+
+ while (i > 0)
+ aState = aState.and([states objectAtIndex:--i]);
+
+ return [self unsetThemeState:aState];
+}
+
+#pragma mark Theme Attributes
+
++ (CPString)defaultThemeClass
+{
+ return nil;
+}
+
++ (CPDictionary)themeAttributes
+{
+ return nil;
+}
+
+- (CPString)themeClass
+{
+ if (_themeClass)
+ return _themeClass;
+
+ return [[self class] defaultThemeClass];
+}
+
+- (void)setThemeClass:(CPString)theClass
+{
+ _themeClass = theClass;
+
+ [self _loadThemeAttributes];
+}
+
+var NULL_THEME = {};
+
++ (CPArray)_themeAttributesForTheme:(CPTheme)theme andThemeClass:(CPString)themeClassName
+{
+ var theClass = [self class],
+ theClassName = class_getName(theClass),
+ themeClassNameCache = theme != nil ? theme._cachedThemeAttributes || (theme._cachedThemeAttributes = {}) : NULL_THEME,
+ themedCacheAttributes = themeClassNameCache[themeClassName] || (themeClassNameCache[themeClassName] = {}),
+ attributes = themedCacheAttributes[theClassName];
+
+ if (attributes)
+ return attributes;
+ else
+ attributes = [];
+
+ var CPObjectClass = [CPObject class];
+
+ for (; theClass && theClass !== CPObjectClass; theClass = [theClass superclass])
+ {
+ var cachedAttributes = themedCacheAttributes[class_getName(theClass)];
+
+ if (cachedAttributes)
+ {
+ attributes = attributes.length ? attributes.concat(cachedAttributes) : attributes;
+ break;
+ }
+
+ var attributeDictionary = [theClass themeAttributes];
+
+ if (!attributeDictionary)
+ continue;
+
+ var attributeKeys = [attributeDictionary allKeys],
+ attributeCount = attributeKeys.length;
+
+ while (attributeCount--)
+ {
+ var attributeName = attributeKeys[attributeCount],
+ attributeValue = [attributeDictionary objectForKey:attributeName],
+ themeAttribute = [[_CPThemeAttribute alloc] initWithName:attributeName defaultValue:attributeValue defaultAttribute:[theme attributeWithName:attributeName forClass:themeClassName]];
+
+ attributes.push(themeAttribute);
+ }
+ }
+
+ themedCacheAttributes[theClassName] = attributes;
+
+ return attributes;
+}
+
+- (void)_loadThemeAttributes
+{
+ var theClass = [self class],
+ attributes = [theClass _themeAttributesForTheme:[self theme] andThemeClass:[self themeClass]],
+ count = attributes.length;
+
+ if (!count)
+ return;
+
+ _themeAttributes = {};
+
+ while (count--)
+ {
+ var attribute = attributes[count];
+
+ _themeAttributes[attribute._name] = attribute;
+ }
+}
+
+- (CPTheme)theme
+{
+ return _theme;
+}
+
+- (void)setTheme:(CPTheme)aTheme
+{
+ if (_theme === aTheme)
+ return;
+
+ _theme = aTheme;
+
+ [self objectDidChangeTheme];
+}
+
+- (void)objectDidChangeTheme
+{
+ if (!_themeAttributes)
+ return;
+
+ var theme = [self theme],
+ themeClass = [self themeClass];
+
+ for (var attributeName in _themeAttributes)
+ {
+ if (_themeAttributes.hasOwnProperty(attributeName))
+ _themeAttributes[attributeName] = [_themeAttributes[attributeName] attributeBySettingParentAttribute:[theme attributeWithName:attributeName forClass:themeClass]];
+ }
+
+}
+
+- (CPDictionary)_themeAttributeDictionary
+{
+ var dictionary = @{};
+
+ if (_themeAttributes)
+ {
+ var theme = [self theme];
+
+ for (var attributeName in _themeAttributes)
+ {
+ if (_themeAttributes.hasOwnProperty(attributeName))
+ [dictionary setObject:_themeAttributes[attributeName] forKey:attributeName];
+ }
+ }
+
+ return dictionary;
+}
+
+- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inState:(ThemeState)aState
+{
+#if DEBUG
+// TODO: To allow aState to be an array is now deprecated. An exception is thrown only in Debug version as
+// the preformance cost for this check is to high. We should remove this check in a future release.
+ if (aState.isa && [aState isKindOfClass:CPArray])
+ [CPException raise:CPInvalidArgumentException reason:self + @": aState can't be an array. Please use 'setValue:forThemeAttribute:inStates:' instead: " + aState];
+#endif
+
+ var themeAttr = _themeAttributes && _themeAttributes[aName];
+
+ if (!themeAttr)
+ [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
+
+ _themeAttributes[aName] = [themeAttr attributeBySettingValue:aValue forState:aState];
+}
+
+- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName inStates:(CPArray)states
+{
+ var i = [states count],
+ aState = [states objectAtIndex:--i];
+
+ while (i > 0)
+ aState = aState.and([states objectAtIndex:--i]);
+
+ var themeAttr = _themeAttributes && _themeAttributes[aName];
+
+ if (!themeAttr)
+ [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
+
+ _themeAttributes[aName] = [themeAttr attributeBySettingValue:aValue forState:aState];
+}
+
+- (void)setValue:(id)aValue forThemeAttribute:(CPString)aName
+{
+ var themeAttr = _themeAttributes && _themeAttributes[aName];
+
+ if (!themeAttr)
+ [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
+
+ _themeAttributes[aName] = [themeAttr attributeBySettingValue:aValue];
+}
+
+- (id)valueForThemeAttribute:(CPString)aName inState:(ThemeState)aState
+{
+#if DEBUG
+ if (aState.isa && [aState isKindOfClass:CPArray])
+ [CPException raise:CPInvalidArgumentException reason:@"aState can't be an array. Please use 'valueForThemeAttribute:inStates:' instead: " + aState];
+#endif
+
+ var themeAttr = _themeAttributes && _themeAttributes[aName];
+
+ if (!themeAttr)
+ [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
+
+ return [themeAttr valueForState:aState];
+}
+
+- (id)valueForThemeAttribute:(CPString)aName inStates:(CPArray)states
+{
+ var i = [states count],
+ aState = [states objectAtIndex:--i];
+
+ while (i > 0)
+ aState = aState.and([states objectAtIndex:--i]);
+
+ var themeAttr = _themeAttributes && _themeAttributes[aName];
+
+ if (!themeAttr)
+ [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
+
+ return [themeAttr valueForState:aState];
+}
+
+- (id)valueForThemeAttribute:(CPString)aName
+{
+ var themeAttr = _themeAttributes && _themeAttributes[aName];
+
+ if (!themeAttr)
+ [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
+
+ return [themeAttr value];
+}
+
+- (id)currentValueForThemeAttribute:(CPString)aName
+{
+ var themeAttr = _themeAttributes && _themeAttributes[aName];
+
+ if (!themeAttr)
+ [CPException raise:CPInvalidArgumentException reason:[self className] + " does not contain theme attribute '" + aName + "'"];
+
+ return [themeAttr valueForState:_themeState];
+}
+
+- (BOOL)hasThemeAttribute:(CPString)aName
+{
+ return (_themeAttributes && _themeAttributes[aName] !== undefined);
+}
+
+/*!
+ Registers theme values encoded in an array at runtime. The format of the data in the array
+ is the same as that used by ThemeDescriptors.j, with the exception that you need to use
+ CPColorWithImages() in place of PatternColor(). For more information see the comments
+ at the top of ThemeDescriptors.j.
+
+ @param themeValues array of theme values
+*/
+- (void)registerThemeValues:(CPArray)themeValues
+{
+ for (var i = 0; i < themeValues.length; ++i)
+ {
+ var attributeValueState = themeValues[i],
+ attribute = attributeValueState[0],
+ value = attributeValueState[1],
+ state = attributeValueState[2];
+
+ if (state)
+ if (state.isa && [state isKindOfClass:CPArray])
+ [self setValue:value forThemeAttribute:attribute inStates:state];
+ else
+ [self setValue:value forThemeAttribute:attribute inState:state];
+ else
+ [self setValue:value forThemeAttribute:attribute];
+ }
+}
+
+/*!
+ Registers theme values encoded in an array at runtime. The format of the data in the array
+ is the same as that used by ThemeDescriptors.j, with the exception that you need to use
+ CPColorWithImages() in place of PatternColor(). The values in \c inheritedValues are
+ registered first, then those in \c themeValues override/augment the inherited values.
+ For more information see the comments at the top of ThemeDescriptors.j.
+
+ @param themeValues array of base theme values
+ @param inheritedValues array of overridden/additional theme values
+*/
+- (void)registerThemeValues:(CPArray)themeValues inherit:(CPArray)inheritedValues
+{
+ // Register inherited values first, then override those with the subtheme values.
+ if (inheritedValues)
+ [self registerThemeValues:inheritedValues];
+
+ if (themeValues)
+ [self registerThemeValues:themeValues];
+}
+
+- (void)_encodeThemeObjectsWithCoder:(CPCoder)aCoder
+{
+ [aCoder encodeObject:[self themeClass] forKey:CPViewThemeClassKey];
+ [aCoder encodeObject:String(_themeState) forKey:CPViewThemeStateKey];
+
+ for (var attributeName in _themeAttributes)
+ {
+ if (_themeAttributes.hasOwnProperty(attributeName))
+ CPThemeAttributeEncode(aCoder, _themeAttributes[attributeName]);
+ }
+}
+
+- (void)_decodeThemeObjectsWithCoder:(CPCoder)aCoder
+{
+ _theme = [CPTheme defaultTheme];
+ _themeClass = [aCoder decodeObjectForKey:CPViewThemeClassKey];
+ _themeState = CPThemeState([aCoder decodeObjectForKey:CPViewThemeStateKey]);
+ _themeAttributes = {};
+
+ var theClass = [self class],
+ themeClass = [self themeClass],
+ attributes = [theClass _themeAttributesForTheme:_theme andThemeClass:themeClass],
+ count = attributes.length;
+
+ while (count--)
+ {
+ var attribute = attributes[count];
+
+ _themeAttributes[attribute._name] = CPThemeAttributeDecode(aCoder, attribute);
+ }
+}
+
+@end
\ No newline at end of file
diff --git a/Foundation/CPArray/_CPArray.j b/Foundation/CPArray/_CPArray.j
index 5ba2124ba..9a18fc879 100755
--- a/Foundation/CPArray/_CPArray.j
+++ b/Foundation/CPArray/_CPArray.j
@@ -880,6 +880,25 @@ Returns a hash for the object. Unlike Cocoa, the hash value does not take conten
return join.call([self _javaScriptArrayCopy], aString);
}
+/*!
+ Returns an Array formed by applying a function to each object in the receiver.
+ @param aFunction a function taking two arguments: (element, index).
+ @return an Array containing the transformed elements.
+*/
+- (CPArray)arrayByApplyingBlock:(Function/*element, index*/)aFunction
+{
+ var result = [],
+ count = [self count];
+
+ for (var idx = 0; idx < count; idx++)
+ {
+ var obj = aFunction([self objectAtIndex:idx], idx);
+ [result addObject:obj];
+ }
+
+ return result;
+}
+
// Creating a description of the array
/*!
diff --git a/Foundation/CPArray/_CPJavaScriptArray.j b/Foundation/CPArray/_CPJavaScriptArray.j
index d0ed91782..8822ed0b4 100644
--- a/Foundation/CPArray/_CPJavaScriptArray.j
+++ b/Foundation/CPArray/_CPJavaScriptArray.j
@@ -233,6 +233,19 @@ var concat = Array.prototype.concat,
return join.call(self, aString);
}
+- (CPArray)arrayByApplyingBlock:(Function/*element, index*/)aFunction
+{
+ var result = [];
+
+ for (var idx = 0; idx < self.length; idx++)
+ {
+ var obj = aFunction(self[idx], idx);
+ result.push(obj);
+ }
+
+ return result;
+}
+
- (void)insertObject:(id)anObject atIndex:(CPUInteger)anIndex
{
if (anIndex > self.length || anIndex < 0)
@@ -335,7 +348,6 @@ var concat = Array.prototype.concat,
[super addObjectsFromArray:anArray];
}
-
- (id)copy
{
return slice.call(self, 0);
diff --git a/Foundation/CPAttributedString.j b/Foundation/CPAttributedString.j
index 04c131631..3416b64bc 100755
--- a/Foundation/CPAttributedString.j
+++ b/Foundation/CPAttributedString.j
@@ -763,13 +763,10 @@
- (void)setAttributedString:(CPAttributedString)aString
{
_string = aString._string;
- _rangeEntries = [];
-
- var i = 0,
- count = aString._rangeEntries.length;
-
- for (; i < count; i++)
- _rangeEntries.push(copyRangeEntry(aString._rangeEntries[i]));
+ _rangeEntries = [aString._rangeEntries arrayByApplyingBlock:function(entry)
+ {
+ return copyRangeEntry(entry);
+ }];
}
//Private methods
diff --git a/Foundation/CPBundle.j b/Foundation/CPBundle.j
index 817ba6717..fa752574a 100644
--- a/Foundation/CPBundle.j
+++ b/Foundation/CPBundle.j
@@ -25,8 +25,18 @@
@import "CPNotificationCenter.j"
@import "CPObject.j"
+@global CFBundleCopyBundleLocalizations
+@global CFBundleCopyLocalizedString
+
CPBundleDidLoadNotification = @"CPBundleDidLoadNotification";
+@protocol CPBundleDelegate
+
+@required
+- (void)bundleDidFinishLoading:(CPBundle)aBundle;
+
+@end
+
/*!
@class CPBundle
@ingroup foundation
@@ -37,8 +47,8 @@ var CPBundlesForURLStrings = { };
@implementation CPBundle : CPObject
{
- CFBundle _bundle;
- id _delegate;
+ CFBundle _bundle;
+ id _delegate;
}
+ (CPBundle)bundleWithURL:(CPURL)aURL
@@ -94,6 +104,7 @@ var CPBundlesForURLStrings = { };
if (self)
{
_bundle = new CFBundle(aURL);
+
CPBundlesForURLStrings[URLString] = self;
}
@@ -154,6 +165,21 @@ var CPBundlesForURLStrings = { };
return _bundle.pathForResource(aFilename);
}
+- (CPString)pathForResource:(CPString)aFilename ofType:(CPString)extension
+{
+ return _bundle.pathForResource(aFilename, extension);
+}
+
+- (CPString)pathForResource:(CPString)aFilename ofType:(CPString)extension inDirectory:(CPString)subpath
+{
+ return _bundle.pathForResource(aFilename, extension, subpath);
+}
+
+- (CPString)pathForResource:(CPString)aFilename ofType:(CPString)extension inDirectory:(CPString)subpath forLocalization:(CPString)localizationName
+{
+ return _bundle.pathForResource(aFilename, extension, subpath, localizationName);
+}
+
- (CPDictionary)infoDictionary
{
return _bundle.infoDictionary();
@@ -164,7 +190,7 @@ var CPBundlesForURLStrings = { };
return _bundle.valueForInfoDictionaryKey(aKey);
}
-- (void)loadWithDelegate:(id)aDelegate
+- (void)loadWithDelegate:(id )aDelegate
{
_delegate = aDelegate;
@@ -186,15 +212,12 @@ var CPBundlesForURLStrings = { };
- (CPArray)staticResourceURLs
{
- var staticResourceURLs = [],
- staticResources = _bundle.staticResources(),
- index = 0,
- count = [staticResources count];
+ var staticResources = _bundle.staticResources();
- for (; index < count; ++index)
- [staticResourceURLs addObject:staticResources[index].URL()];
-
- return staticResourceURLs;
+ return [staticResources arrayByApplyingBlock:function(resource)
+ {
+ return resource.URL();
+ }];
}
- (CPArray)environments
@@ -212,4 +235,33 @@ var CPBundlesForURLStrings = { };
return [super description] + "(" + [self bundlePath] + ")";
}
+
+#pragma mark -
+#pragma mark Localization
+
+- (CPArray)localizations
+{
+ return CFBundleCopyBundleLocalizations(_bundle);
+}
+
+- (CPString)localizedStringForKey:(CPString)aKey value:(CPString)aValue table:(CPString)aTable
+{
+ return CFBundleCopyLocalizedString(_bundle, aKey, aValue, aTable);
+}
+
@end
+
+function CPLocalizedString(key, comment)
+{
+ return CFCopyLocalizedString(key, comment);
+}
+
+function CPLocalizedStringFromTable(key, table, comment)
+{
+ return CFCopyLocalizedStringFromTable(key, table, comment);
+}
+
+function CPCopyLocalizedStringFromTableInBundle(key, table, bundle, comment)
+{
+ return CFCopyLocalizedStringFromTableInBundle(key, table, bundle._bundle, comment);
+}
\ No newline at end of file
diff --git a/Foundation/CPDateFormatter.j b/Foundation/CPDateFormatter.j
index 59a48019d..f66179ba2 100644
--- a/Foundation/CPDateFormatter.j
+++ b/Foundation/CPDateFormatter.j
@@ -1552,7 +1552,7 @@ var defaultDateFormatterBehavior = CPDateFormatterBehavior10_4,
month = [[self monthSymbols] indexOfObject:dateComponent] + 1;
}
- if (month > 11 || length >= 5)
+ if (month > 12 || length >= 5)
return nil;
dateArray[1] = month;
@@ -1580,7 +1580,7 @@ var defaultDateFormatterBehavior = CPDateFormatterBehavior10_4,
month = [[self standaloneMonthSymbols] indexOfObject:dateComponent] + 1;
}
- if (month > 11 || length >= 5)
+ if (month > 12 || length >= 5)
return nil;
dateArray[1] = month;
diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j
index d06c4b9fa..f8c4fa6ac 100755
--- a/Foundation/CPDictionary.j
+++ b/Foundation/CPDictionary.j
@@ -222,13 +222,13 @@ var CPDictionaryMaxDescriptionRecursion = 10;
{
self = [super init];
- if ([objects count] != [keyArray count])
+ var i = [keyArray count];
+
+ if ([objects count] != i)
[CPException raise:CPInvalidArgumentException reason:[CPString stringWithFormat:@"Counts are different.(%d != %d)", [objects count], [keyArray count]]];
if (self)
{
- var i = [keyArray count];
-
while (i--)
{
var value = objects[i],
@@ -273,18 +273,16 @@ var CPDictionaryMaxDescriptionRecursion = 10;
if (self)
{
// The arguments array contains self and _cmd, so the first object is at position 2.
- var index = 2;
-
- for (; index < argCount; index += 2)
+ while (argCount-- > 2)
{
- var value = arguments[index],
- key = arguments[index + 1];
+ var key = arguments[argCount--],
+ value = arguments[argCount]
if (value === nil)
- [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil object from objects[" + ((index / 2) - 1) + @"]"];
+ [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil object from objects[" + ((argCount / 2) - 1) + @"]"];
if (key === nil)
- [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil key from keys[" + ((index / 2) - 1) + @"]"];
+ [CPException raise:CPInvalidArgumentException reason:@"Attempt to insert nil key from keys[" + ((argCount / 2) - 1) + @"]"];
[self setObject:value forKey:key];
}
diff --git a/Foundation/CPIndexSet.j b/Foundation/CPIndexSet.j
index c9f94fddb..1783caf27 100644
--- a/Foundation/CPIndexSet.j
+++ b/Foundation/CPIndexSet.j
@@ -1018,14 +1018,13 @@ var CPIndexSetCountKey = @"CPIndexSetCountKey",
if (self)
{
_count = [aCoder decodeIntForKey:CPIndexSetCountKey];
- _ranges = [];
- var rangeStrings = [aCoder decodeObjectForKey:CPIndexSetRangeStringsKey],
- index = 0,
- count = rangeStrings.length;
+ var rangeStrings = [aCoder decodeObjectForKey:CPIndexSetRangeStringsKey];
- for (; index < count; ++index)
- _ranges.push(CPRangeFromString(rangeStrings[index]));
+ _ranges = [rangeStrings arrayByApplyingBlock:function(range)
+ {
+ return CPRangeFromString(range);
+ }];
}
return self;
diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j
index 53f110b32..95c00d36a 100644
--- a/Foundation/CPKeyValueObserving.j
+++ b/Foundation/CPKeyValueObserving.j
@@ -164,10 +164,11 @@
+ (BOOL)automaticallyNotifiesObserversForKey:(CPString)aKey
{
var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substring(1),
- selector = "automaticallyNotifiesObserversOf" + capitalizedKey;
+ selector = "automaticallyNotifiesObserversOf" + capitalizedKey,
+ aClass = [self class];
- if ([[self class] respondsToSelector:selector])
- return objj_msgSend([self class], selector);
+ if ([aClass respondsToSelector:selector])
+ return aClass.isa.objj_msgSend0(aClass, selector);
return YES;
}
@@ -175,10 +176,11 @@
+ (CPSet)keyPathsForValuesAffectingValueForKey:(CPString)aKey
{
var capitalizedKey = aKey.charAt(0).toUpperCase() + aKey.substring(1),
- selector = "keyPathsForValuesAffecting" + capitalizedKey;
+ selector = "keyPathsForValuesAffecting" + capitalizedKey,
+ aClass = [self class];
- if ([[self class] respondsToSelector:selector])
- return objj_msgSend([self class], selector);
+ if ([aClass respondsToSelector:selector])
+ return aClass.isa.objj_msgSend0(aClass, selector);
return [CPSet set];
}
@@ -421,7 +423,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
setKey_method_imp(self, _cmd, anObject);
[self didChangeValueForKey:aKey];
- }, "");
+ }, setKey_method.method_types);
}
// FIXME: Deprecated.
@@ -439,7 +441,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
_setKey_method_imp(self, _cmd, anObject);
[self didChangeValueForKey:aKey];
- }, "");
+ }, _setKey_method.method_types);
}
// Ordered To-Many Relationships
@@ -476,7 +478,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChange:CPKeyValueChangeInsertion
valuesAtIndexes:[CPIndexSet indexSetWithIndex:anIndex]
forKey:aKey];
- }, "");
+ }, insertObject_inKeyAtIndex_method.method_types);
}
if (insertKey_atIndexes_method)
@@ -494,7 +496,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChange:CPKeyValueChangeInsertion
valuesAtIndexes:[indexes copy]
forKey:aKey];
- }, "");
+ }, insertKey_atIndexes_method.method_types);
}
if (removeObjectFromKeyAtIndex_method)
@@ -512,7 +514,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChange:CPKeyValueChangeRemoval
valuesAtIndexes:[CPIndexSet indexSetWithIndex:anIndex]
forKey:aKey];
- }, "");
+ }, removeObjectFromKeyAtIndex_method.method_types);
}
if (removeKeyAtIndexes_method)
@@ -530,7 +532,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChange:CPKeyValueChangeRemoval
valuesAtIndexes:[indexes copy]
forKey:aKey];
- }, "");
+ }, removeKeyAtIndexes_method.method_types);
}
// These are optional.
@@ -556,7 +558,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChange:CPKeyValueChangeReplacement
valuesAtIndexes:[CPIndexSet indexSetWithIndex:anIndex]
forKey:aKey];
- }, "");
+ }, replaceObjectInKeyAtIndex_withObject_method.method_types);
}
var replaceKeyAtIndexes_withKey_selector =
@@ -579,7 +581,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChange:CPKeyValueChangeReplacement
valuesAtIndexes:[indexes copy]
forKey:aKey];
- }, "");
+ }, replaceKeyAtIndexes_withKey_method.method_types);
}
}
@@ -613,7 +615,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChangeValueForKey:aKey
withSetMutation:CPKeyValueUnionSetMutation
usingObjects:[CPSet setWithObject:anObject]];
- }, "");
+ }, addKeyObject_method.method_types);
}
if (addKey_method)
@@ -631,7 +633,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChangeValueForKey:aKey
withSetMutation:CPKeyValueUnionSetMutation
usingObjects:[objects copy]];
- }, "");
+ }, addKey_method.method_types);
}
if (removeKeyObject_method)
@@ -649,7 +651,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChangeValueForKey:aKey
withSetMutation:CPKeyValueMinusSetMutation
usingObjects:[CPSet setWithObject:anObject]];
- }, "");
+ }, removeKeyObject_method.method_types);
}
if (removeKey_method)
@@ -667,7 +669,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChangeValueForKey:aKey
withSetMutation:CPKeyValueMinusSetMutation
usingObjects:[objects copy]];
- }, "");
+ }, removeKey_method.method_types);
}
// intersect: is optional.
@@ -689,7 +691,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOpti
[self didChangeValueForKey:aKey
withSetMutation:CPKeyValueIntersectSetMutation
usingObjects:[aSet copy]];
- }, "");
+ }, intersectKey_method.method_types);
}
}
diff --git a/Foundation/CPKeyedArchiver.j b/Foundation/CPKeyedArchiver.j
index e4e0d7bbd..20bb7b4be 100644
--- a/Foundation/CPKeyedArchiver.j
+++ b/Foundation/CPKeyedArchiver.j
@@ -380,12 +380,10 @@ var _CPKeyedArchiverStringClass = Nil,
/* @ignore */
- (void)_encodeArrayOfObjects:(CPArray)objects forKey:(CPString)aKey
{
- var i = 0,
- count = objects.length,
- references = [];
-
- for (; i < count; ++i)
- [references addObject:_CPKeyedArchiverEncodeObject(self, objects[i], NO)];
+ var references = [objects arrayByApplyingBlock:function(object)
+ {
+ return _CPKeyedArchiverEncodeObject(self, object, NO);
+ }];
[_plistObject setObject:references forKey:aKey];
}
diff --git a/Foundation/CPKeyedUnarchiver.j b/Foundation/CPKeyedUnarchiver.j
index 8fe7480d7..4f35f66ff 100644
--- a/Foundation/CPKeyedUnarchiver.j
+++ b/Foundation/CPKeyedUnarchiver.j
@@ -332,7 +332,7 @@ var CPArrayClass = Ni
*/
- (id)decodeObjectForKey:(CPString)aKey
{
- var object = _plistObject.valueForKey(aKey),
+ var object = _plistObject && _plistObject.valueForKey(aKey),
objectClass = (object != nil) && object.isa;
if (objectClass === CPDictionaryClass || objectClass === CPMutableDictionaryClass)
diff --git a/Foundation/CPNotificationCenter.j b/Foundation/CPNotificationCenter.j
index f06c22b0a..5f8ff94da 100644
--- a/Foundation/CPNotificationCenter.j
+++ b/Foundation/CPNotificationCenter.j
@@ -25,6 +25,8 @@
@import "CPException.j"
@import "CPNotification.j"
@import "CPNull.j"
+@import "CPOperationQueue.j"
+@import "CPOperation.j"
@import "CPSet.j"
@class _CPNotificationRegistry
@@ -94,13 +96,13 @@ var CPNotificationDefaultCenter = nil;
Adds an entry to the receiver’s dispatch table with a block, and optional criteria: notification name and sender.
@param aNotificationName the name of the notification the observer wants to watch
@param anObject the object in the notification the observer wants to watch
- @param queue is ignored for the moment
+ @param The operation queue to which block should be added. If you pass nil, the block is run synchronously on the posting thread.
@param block the block to be executed when the notification is received.
*/
-- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(id)queue usingBlock:(Function)block
+- (id )addObserverForName:(CPString)aNotificationName object:(id)anObject queue:(CPOperationQueue)queue usingBlock:(Function)block
{
var registry = [self _registryForNotificationName:aNotificationName],
- observer = [[_CPNotificationObserver alloc] initWithBlock:block];
+ observer = [[_CPNotificationObserver alloc] initWithBlock:block queue:queue];
[registry addObserver:observer object:anObject];
@@ -344,9 +346,10 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */
/* @ignore */
@implementation _CPNotificationObserver : CPObject
{
- id _observer;
- Function _block;
- SEL _selector;
+ CPOperationQueue _operationQueue;
+ id _observer;
+ Function _block;
+ SEL _selector;
}
- (id)initWithObserver:(id)anObserver selector:(SEL)aSelector
@@ -360,11 +363,12 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */
return self;
}
-- (id)initWithBlock:(Function)aBlock
+- (id)initWithBlock:(Function)aBlock queue:(CPOperationQueue)aQueue
{
if (self)
{
_block = aBlock;
+ _operationQueue = aQueue;
}
return self;
@@ -384,7 +388,11 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */
{
if (_block)
{
- _block(aNotification);
+ if (!_operationQueue)
+ _block(aNotification);
+ else
+ [_operationQueue addOperation:[[_CPNotificationObserverOperation alloc] initWithBlock:_block notification:aNotification]];
+
return;
}
@@ -392,3 +400,38 @@ var _CPNotificationCenterPostNotification = function(/* CPNotificationCenter */
}
@end
+
+/* @ignore */
+@implementation _CPNotificationObserverOperation : CPOperation
+{
+ CPNotification _notification;
+ Function _block;
+}
+
+/* @ignore */
+- (id)initWithBlock:(Function)aBlock notification:(CPNotification)aNotification
+{
+ self = [super init];
+
+ if (self)
+ {
+ _block = aBlock;
+ _notification = aNotification;
+ }
+
+ return self;
+}
+
+/* @ignore */
+- (void)main
+{
+ _block(_notification);
+}
+
+/* @ignore */
+- (BOOL)isReady
+{
+ return YES;
+}
+
+@end
diff --git a/Foundation/CPNotificationQueue.j b/Foundation/CPNotificationQueue.j
new file mode 100644
index 000000000..5c497cfa9
--- /dev/null
+++ b/Foundation/CPNotificationQueue.j
@@ -0,0 +1,328 @@
+/*
+ * CPNotificationQueue.j
+ * Foundation
+ *
+ * Created by Alexandre Wilhelm.
+ * Copyright 2015
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+@import "CPObject.j"
+@import "CPNotification.j"
+@import "CPNotificationCenter.j"
+
+@typedef CPPostingStyle
+
+/*
+ @global
+ @group CPViewAutoresizingMasks
+ The default resizingMask, the view will not resize or reposition itself.
+*/
+CPPostWhenIdle = 1;
+/*
+ @global
+ @group CPPostingStyle
+ The notification is posted at the end of the current notification callout or timer.
+*/
+CPPostASAP = 2;
+/*
+ @global
+ @group CPPostingStyle
+ The notification is posted immediately after coalescing.
+*/
+CPPostNow = 3;
+
+
+@typedef CPNotificationCoalescing
+
+/*
+ @global
+ @group CPNotificationCoalescing
+ Do not coalesce notifications in the queue.
+*/
+CPNotificationNoCoalescing = 1 << 0;
+/*
+ @global
+ @group CPNotificationCoalescing
+ Coalesce notifications with the same name.
+*/
+CPNotificationCoalescingOnName = 1 << 1;
+/*
+ @global
+ @group CPNotificationCoalescing
+ Coalesce notifications with the same object.
+*/
+CPNotificationCoalescingOnSender = 1 << 2;
+
+
+var CPNotificationDefaultQueue;
+
+var runLoop = [CPRunLoop mainRunLoop];
+
+/*!
+ @class CPPostingStyle
+ @ingroup foundation
+ @brief CPNotificationQueue objects act as buffers for notification centers (instances of CPNotificationCenter).
+
+ Cappuccino provides a framework for sending messages between objects within
+ a process called notifications. CPNotificationQueue objects (or simply notification queues)
+ act as buffers for notification centers (instances of CPNotificationCenter).
+ Whereas a notification center distributes notifications when posted,
+ notifications placed into the queue can be delayed until the end of the current pass through the run loop
+ or until the run loop is idle. Duplicate notifications can also be coalesced so that only one notification
+ is sent although multiple notifications are posted. A notification queue maintains notifications
+ (instances of C¨Notification) generally in a first in first out (FIFO) order.
+ When a notification rises to the front of the queue, the queue posts it to the notification center,
+ which in turn dispatches the notification to all objects registered as observers.
+*/
+@implementation CPNotificationQueue : CPObject
+{
+ BOOL _runLoopLaunched;
+ CPMutableArray _postNowNotifications;
+ CPMutableArray _postIdleNotifications;
+ CPMutableArray _postASAPNotifications;
+ CPNotificationCenter _notificationCenter;
+}
+
+
+#pragma mark -
+#pragma mark Class methods
+
+/*!
+ Returns the application's notification queue. This notification queue uses the default notification center
+*/
++ (id)defaultQueue
+{
+ if (!CPNotificationDefaultQueue)
+ CPNotificationDefaultQueue = [[CPNotificationQueue alloc] initWithNotificationCenter:[CPNotificationCenter defaultCenter]];
+
+ return CPNotificationDefaultQueue;
+}
+
+
+#pragma mark -
+#pragma mark Init methods
+
+/*!
+ Initializes and returns a notification queue for the specified notification center.
+ @param anObserver the specified notification center
+ @return a new CPNotificationQueue
+*/
+- (id)initWithNotificationCenter:(CPNotificationCenter)aNotificationCenter
+{
+ if (self = [super init])
+ {
+ _notificationCenter = aNotificationCenter;
+ _postNowNotifications = [CPMutableArray new];
+ _postIdleNotifications = [CPMutableArray new];
+ _postASAPNotifications = [CPMutableArray new];
+ }
+
+ return self;
+}
+
+
+#pragma mark -
+#pragma mark Enqueue methods
+
+/*!
+ Adds a notification to the notification queue with a specified posting style.
+ @param notification the notification to add to the queue
+ @param postingStyle the posting style for the notification
+*/
+- (void)enqueueNotification:(CPNotification)notification postingStyle:(CPPostingStyle)postingStyle
+{
+ [self enqueueNotification:notification postingStyle:postingStyle coalesceMask:CPNotificationCoalescingOnName|CPNotificationCoalescingOnSender forModes:[CPDefaultRunLoopMode]];
+}
+
+/*!
+ Adds a notification to the notification queue with a specified posting style, criteria for coalescing, and runloop mode.
+ @param notification the notification to add to the queue
+ @param postingStyle the posting style for the notification
+ @param coalesceMask a mask indicating what criteria to use when matching attributes of notification to attributes notifications in the queue.
+ @modes modes the list of modes the notification may be posted in.
+*/
+- (void)enqueueNotification:(CPNotification)notification postingStyle:(CPPostingStyle)postingStyle coalesceMask:(CPNotificationCoalescing)coalesceMask forModes:(CPArray)modes
+{
+ [self _removeNotification:notification coalesceMask:coalesceMask];
+
+ switch (postingStyle)
+ {
+ case CPPostWhenIdle:
+ [_postIdleNotifications addObject:notification];
+ break;
+
+ case CPPostASAP:
+ [_postASAPNotifications addObject:notification];
+ break;
+
+ case CPPostNow:
+ [_postNowNotifications addObject:notification];
+ break;
+ }
+
+ if ([_postIdleNotifications count] || [_postASAPNotifications count] || [_postNowNotifications count])
+ [self _runRunLoop];
+
+ if (postingStyle == CPPostNow)
+ {
+ for (var i = [modes count] - 1; i >= 0; i--)
+ [[CPRunLoop currentRunLoop] limitDateForMode:modes[i]];
+ }
+}
+
+
+#pragma mark -
+#pragma mark Dequeue methods
+
+/*!
+ Removes all notifications from the queue that match a provided notification using provided matching criteria.
+ @param notification the notification to add to the queue
+ @param coalesceMask mask indicating what criteria to use when matching attributes of notification to remove notifications in the queue.
+*/
+- (void)dequeueNotificationsMatching:(CPNotification)notification coalesceMask:(CPUInteger)coalesceMask
+{
+ [self _removeNotification:notification coalesceMask:coalesceMask];
+}
+
+
+#pragma mark -
+#pragma mark RunLoop methods
+
+/*!
+ @ignore
+*/
+- (void)_runRunLoop
+{
+ if (!_runLoopLaunched)
+ {
+ [runLoop performSelector:@selector(_launchNotificationsInQueue) target:self argument:nil order:0 modes:[CPDefaultRunLoopMode]];
+ _runLoopLaunched = YES;
+ }
+}
+
+/*!
+ @ignore
+*/
+- (void)_launchNotificationsInQueue
+{
+ _runLoopLaunched = NO;
+
+ if ([_postNowNotifications count])
+ {
+ [self _launchNotificationsForArray:_postNowNotifications];
+ [self _runRunLoop];
+ return;
+ }
+
+ if ([_postASAPNotifications count])
+ {
+ [self _launchNotificationsForArray:_postASAPNotifications];
+ [self _runRunLoop];
+ return;
+ }
+
+ if ([_postIdleNotifications count])
+ {
+ [self _launchNotificationsForArray:_postIdleNotifications];
+ [self _runRunLoop];
+ return;
+ }
+}
+
+
+#pragma mark -
+#pragma mark Posting methods
+
+/*!
+ @ignore
+*/
+- (void)_launchNotificationsForArray:(CPArray)anArray
+{
+ for (var i = [anArray count] - 1; i >= 0; i--)
+ {
+ var notification = anArray[i];
+ [_notificationCenter postNotification:notification];
+ }
+
+ [anArray removeAllObjects];
+}
+
+
+#pragma mark -
+#pragma mark Remove methods
+
+/*!
+ @ignore
+*/
+- (void)_removeNotification:(CPNotification)notification coalesceMask:(CPUInteger)coalesceMask
+{
+ [self _removeNotification:notification coalesceMask:coalesceMask inNotifications:_postNowNotifications];
+ [self _removeNotification:notification coalesceMask:coalesceMask inNotifications:_postASAPNotifications];
+ [self _removeNotification:notification coalesceMask:coalesceMask inNotifications:_postIdleNotifications];
+}
+
+/*!
+ @ignore
+*/
+- (void)_removeNotification:(CPNotification)aNotification coalesceMask:(CPUInteger)coalesceMask inNotifications:(CPArray)notifications
+{
+ var notificationsToRemove = [],
+ name = [aNotification name],
+ sender = [aNotification object];
+
+ for (var i = [notifications count] - 1; i >= 0; i--)
+ {
+ var notification = notifications[i];
+
+ if (notification == aNotification)
+ {
+ [notificationsToRemove addObject:notification];
+ continue;
+ }
+
+ if (coalesceMask & CPNotificationNoCoalescing)
+ continue;
+
+ if (coalesceMask & CPNotificationCoalescingOnName && coalesceMask & CPNotificationCoalescingOnSender)
+ {
+ if ([notification object] == sender && [notification name] == name)
+ [notificationsToRemove addObject:notification]
+
+ continue;
+ }
+
+ if (coalesceMask & CPNotificationCoalescingOnName)
+ {
+ if ([notification name] == name)
+ [notificationsToRemove addObject:notification]
+
+ continue;
+ }
+
+ if (coalesceMask & CPNotificationCoalescingOnSender)
+ {
+ if ([notification object] == sender)
+ [notificationsToRemove addObject:notification]
+
+ continue;
+ }
+ }
+
+ [notifications removeObjectsInArray:notificationsToRemove];
+}
+
+@end
\ No newline at end of file
diff --git a/Foundation/CPPredicate/CPExpression.j b/Foundation/CPPredicate/CPExpression.j
index 06ed6b0ba..10ca2b598 100644
--- a/Foundation/CPPredicate/CPExpression.j
+++ b/Foundation/CPPredicate/CPExpression.j
@@ -28,3 +28,5 @@
@import "_CPAggregateExpression.j"
@import "_CPSetExpression.j"
@import "_CPSubqueryExpression.j"
+@import "_CPBlockExpression.j"
+@import "_CPConditionalExpression.j"
diff --git a/Foundation/CPPredicate/_CPAggregateExpression.j b/Foundation/CPPredicate/_CPAggregateExpression.j
index 688166398..e141b1915 100644
--- a/Foundation/CPPredicate/_CPAggregateExpression.j
+++ b/Foundation/CPPredicate/_CPAggregateExpression.j
@@ -25,7 +25,7 @@
@implementation _CPAggregateExpression : CPExpression
{
- CPArray _aggregate;
+ CPArray _aggregate @accessors(getter=collection);
}
- (id)initWithAggregate:(CPArray)collection
@@ -34,6 +34,7 @@
if (self)
_aggregate = collection;
+
return self;
}
@@ -48,48 +49,30 @@
return YES;
}
-- (id)collection
-{
- return _aggregate;
-}
-
- (id)expressionValueWithObject:(id)object context:(CPDictionary)context
{
- var eval_array = [CPArray array],
- collection = [_aggregate objectEnumerator],
- exp;
-
- while ((exp = [collection nextObject]) !== nil)
+ return [_aggregate arrayByApplyingBlock:function(exp)
{
- var eval = [exp expressionValueWithObject:object context:context];
- [eval_array addObject:eval];
- }
-
- return eval_array;
+ return [exp expressionValueWithObject:object context:context];
+ }];
}
- (CPString)description
-{
- var i = 0,
- count = [_aggregate count],
- result = "{";
+{
+ var descriptions = [_aggregate arrayByApplyingBlock:function(exp)
+ {
+ return [exp description];
+ }];
- for (; i < count; i++)
- result = result + [CPString stringWithFormat:@"%s%s", [[_aggregate objectAtIndex:i] description], (i + 1 < count) ? @", " : @""];
-
- result = result + "}";
-
- return result;
+ return "{" + [descriptions componentsJoinedByString:","] + "}" ;
}
- (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)variables
{
- var subst_array = [CPArray array],
- count = [_aggregate count],
- i = 0;
-
- for (; i < count; i++)
- [subst_array addObject:[[_aggregate objectAtIndex:i] _expressionWithSubstitutionVariables:variables]];
+ var subst_array = [_aggregate arrayByApplyingBlock:function(exp)
+ {
+ return [exp _expressionWithSubstitutionVariables:variables];
+ }];
return [CPExpression expressionForAggregate:subst_array];
}
diff --git a/Foundation/CPPredicate/_CPBlockExpression.j b/Foundation/CPPredicate/_CPBlockExpression.j
new file mode 100644
index 000000000..846c4f418
--- /dev/null
+++ b/Foundation/CPPredicate/_CPBlockExpression.j
@@ -0,0 +1,79 @@
+/*
+ * _CPBlockExpression.j
+ *
+ * Created by cacaodev.
+ * Copyright 2015.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+@import "_CPExpression.j"
+
+@implementation _CPBlockExpression : CPExpression
+{
+ Function _block @accessors(getter=expressionBlock);
+ CPArray _arguments @accessors(getter=arguments);
+}
+
+- (id)initWithBlock:(Function)aBlock arguments:(CPArray)arguments
+{
+ self = [super initWithExpressionType:CPBlockExpressionType];
+
+ if (self)
+ {
+ _block = aBlock;
+ _arguments = arguments;
+ }
+
+ return self;
+}
+
+- (BOOL)isEqual:(id)object
+{
+ if (self === object)
+ return YES;
+
+ if (object === nil || object.isa !== self.isa || [object expressionBlock] !== _block || ![[object arguments] isEqual:_arguments])
+ return NO;
+
+ return YES;
+}
+
+- (id)expressionValueWithObject:(id)object context:(CPDictionary)context
+{
+ var args = [_arguments arrayByApplyingBlock:function(exp)
+ {
+ return [exp expressionValueWithObject:object context:context];
+ }];
+
+ return _block(object, args, context);
+}
+
+- (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)bindings
+{
+ var args = [_arguments arrayByApplyingBlock:function(exp)
+ {
+ return [exp _expressionWithSubstitutionVariables:bindings];
+ }];
+
+ return [[_CPBlockExpression alloc] initWithBlock:_block arguments:args];
+}
+
+- (CPString)description
+{
+ return [CPString stringWithFormat:@"Block(function, %@)", [_arguments description]];
+}
+
+@end
\ No newline at end of file
diff --git a/Foundation/CPPredicate/_CPConditionalExpression.j b/Foundation/CPPredicate/_CPConditionalExpression.j
new file mode 100644
index 000000000..8fc544580
--- /dev/null
+++ b/Foundation/CPPredicate/_CPConditionalExpression.j
@@ -0,0 +1,78 @@
+/*
+ * _CPConditionalExpression.j
+ *
+ * Created by cacaodev.
+ * Copyright 2015.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+@import "_CPPredicate.j"
+@import "_CPExpression.j"
+
+@implementation _CPConditionalExpression : CPExpression
+{
+ CPPredicate _predicate @accessors(getter=predicate);
+ CPExpression _trueExpression @accessors(getter=trueExpression);
+ CPExpression _falseExpression @accessors(getter=falseExpression);
+}
+
+- (id)initWithPredicate:(CPPredicate)aPredicate trueExpression:(CPExpression)trueExpression falseExpression:(CPExpression)falseExpression
+{
+ self = [super initWithExpressionType:CPConditionalExpressionType];
+
+ if (self)
+ {
+ _predicate = aPredicate;
+ _trueExpression = trueExpression;
+ _falseExpression = falseExpression;
+ }
+
+ return self;
+}
+
+- (BOOL)isEqual:(id)object
+{
+ if (self === object)
+ return YES;
+
+ if (object === nil || object.isa !== self.isa || ![[object predicate] isEqual:_predicate] || ![[object trueExpression] isEqual:_trueExpression] || ![[object falseExpression] isEqual:_falseExpression])
+ return NO;
+
+ return YES;
+}
+
+- (id)expressionValueWithObject:(id)object context:(CPDictionary)context
+{
+ var eval = [_predicate evaluateWithObject:object substitutionVariables:context],
+ exp = eval ? _trueExpression : _falseExpression;
+
+ return [exp expressionValueWithObject:object context:context];
+}
+
+- (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)bindings
+{
+ var predicate = [_predicate predicateWithSubstitutionVariables:bindings],
+ trueExp = [_trueExpression _expressionWithSubstitutionVariables:bindings],
+ falseExp = [_falseExpression _expressionWithSubstitutionVariables:bindings];
+
+ return [[_CPConditionalExpression alloc] initWithPredicate:predicate trueExpression:trueExp falseExpression:falseExp];
+}
+
+- (CPString)description
+{
+ return [CPString stringWithFormat:@"TERNARY(%@,%@,%@)", [_predicate predicateFormat], [_trueExpression description], [_falseExpression description]];
+}
+
+@end
\ No newline at end of file
diff --git a/Foundation/CPPredicate/_CPConstantValueExpression.j b/Foundation/CPPredicate/_CPConstantValueExpression.j
index 617c9b10a..1c1bbbce9 100644
--- a/Foundation/CPPredicate/_CPConstantValueExpression.j
+++ b/Foundation/CPPredicate/_CPConstantValueExpression.j
@@ -27,7 +27,7 @@
@implementation _CPConstantValueExpression : CPExpression
{
- id _value;
+ id _value @accessors(getter=constantValue);
}
- (id)initWithValue:(id)value
@@ -51,11 +51,6 @@
return YES;
}
-- (id)constantValue
-{
- return _value;
-}
-
- (id)expressionValueWithObject:(id)object context:(CPDictionary)context
{
return _value;
@@ -66,6 +61,9 @@
if ([_value isKindOfClass:[CPString class]])
return @"\"" + _value + @"\"";
+ if (_value === [CPNull null])
+ return @"nil";
+
return [_value description];
}
diff --git a/Foundation/CPPredicate/_CPExpression.j b/Foundation/CPPredicate/_CPExpression.j
index 5a9561cb7..8a671c5b2 100644
--- a/Foundation/CPPredicate/_CPExpression.j
+++ b/Foundation/CPPredicate/_CPExpression.j
@@ -65,6 +65,14 @@ CPIntersectSetExpressionType = 8;
An expression that combines two nested expression results by set subtraction.
*/
CPMinusSetExpressionType = 9;
+/*!
+ An expression that returns the result of evaluating a block.
+*/
+CPBlockExpressionType = 10;
+/*!
+ An expression that returns an expression that depends on the evaluation of a predicate.
+*/
+CPConditionalExpressionType = 11;
/*!
@ingroup foundation
@@ -259,6 +267,32 @@ CPMinusSetExpressionType = 9;
return [[_CPSubqueryExpression alloc] initWithExpression:expression usingIteratorVariable:variable predicate:predicate];
}
+/*!
+ Returns Creates an NSExpression object that will use the Block for evaluating objects.
+ @param aBlock The Block is applied to the object to be evaluated.
+
+The Block takes three arguments and returns a value:
+
+evaluatedObject
+The object to be evaluated.
+expressions
+An array of predicate expressions that evaluates to a collection.
+context
+A dictionary that the expression can use to store temporary state for one predicate evaluation.
+
+@discussion Note that context is mutable, and that it can only be accessed during the evaluation of the expression.
+@param arguments An array containing NSExpression objects that will be used as parameters during the invocation of the block.
+*/
++ (CPExpression)expressionForBlock:(Function)aBlock arguments:(CPArray)args
+{
+ return [[_CPBlockExpression alloc] initWithBlock:aBlock arguments:args];
+}
+
++ (CPExpression)expressionForConditional:(CPPredicate)aPredicate trueExpression:(CPExpression)trueExpression falseExpression:(CPExpression)falseExpression
+{
+ return [[_CPConditionalExpression alloc] initWithPredicate:aPredicate trueExpression:trueExpression falseExpression:falseExpression];
+}
+
// Getting Information About an Expression
/*!
Returns the expression type for the receiver.
@@ -316,7 +350,7 @@ CPMinusSetExpressionType = 9;
/*!
Returns the arguments for the receiver.
- @return The arguments for the receiver—that is, the array of expressions that will be passed as parameters during invocation of the selector on the operand of a function expression.
+ @return The arguments for the receiver—that is, the array of expressions that will be passed as parameters during invocation of the selector on the operand of a function expression or as a parameter of the block of a block expression.
This method raises an exception if it is not applicable to the receiver.
*/
- (CPArray)arguments
@@ -337,8 +371,8 @@ CPMinusSetExpressionType = 9;
}
/*!
- Returns the predicate in a subquery expression.
- @return The predicate in a subquery expression..
+ Returns the predicate in a subquery expression or a conditional expression.
+ @return The predicate in a subquery expression or a conditional expression.
This method raises an exception if it is not applicable to the receiver.
*/
- (CPPredicate)predicate
@@ -380,6 +414,39 @@ CPMinusSetExpressionType = 9;
return nil;
}
+/*!
+ Returns the block of a block expression.
+ @return The block of a block expression.
+ This method raises an exception if it is not applicable to the receiver.
+*/
+- (Function)expressionBlock
+{
+ _CPRaiseInvalidAbstractInvocation(self, _cmd);
+ return nil;
+}
+
+/*!
+ Returns the true expression of a conditional expression.
+ @return The true expression of a conditional expression.
+ This method raises an exception if it is not applicable to the receiver.
+*/
+- (CPExpression)trueExpression
+{
+ _CPRaiseInvalidAbstractInvocation(self, _cmd);
+ return nil;
+}
+
+/*!
+ Returns the false expression of a conditional expression.
+ @return The false expression of a conditional expression.
+ This method raises an exception if it is not applicable to the receiver.
+*/
+- (CPExpression)falseExpression
+{
+ _CPRaiseInvalidAbstractInvocation(self, _cmd);
+ return nil;
+}
+
- (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)variables
{
return self;
diff --git a/Foundation/CPPredicate/_CPFunctionExpression.j b/Foundation/CPPredicate/_CPFunctionExpression.j
index 394c93612..7de9f0d73 100644
--- a/Foundation/CPPredicate/_CPFunctionExpression.j
+++ b/Foundation/CPPredicate/_CPFunctionExpression.j
@@ -28,9 +28,9 @@
@implementation _CPFunctionExpression : CPExpression
{
- CPExpression _operand;
+ CPExpression _operand @accessors(getter=operand);
SEL _selector;
- CPArray _arguments;
+ CPArray _arguments @accessors(getter=arguments);
int _argc;
int _maxargs;
}
@@ -88,16 +88,6 @@
return [self _function];
}
-- (CPArray)arguments
-{
- return _arguments;
-}
-
-- (CPExpression)operand
-{
- return _operand;
-}
-
- (id)expressionValueWithObject:(id)object context:(CPDictionary)context
{
var target = [_operand expressionValueWithObject:object context:context],
@@ -143,11 +133,10 @@
- (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)variables
{
var operand = [[self operand] _expressionWithSubstitutionVariables:variables],
- args = [CPArray array],
- i = 0;
-
- for (; i < _argc; i++)
- [args addObject:[_arguments[i] _expressionWithSubstitutionVariables:variables]];
+ args = [_arguments arrayByApplyingBlock:function(arg)
+ {
+ return [arg _expressionWithSubstitutionVariables:variables];
+ }];
return [CPExpression expressionForFunction:operand selectorName:[self _function] arguments:args];
}
diff --git a/Foundation/CPPredicate/_CPPredicate.j b/Foundation/CPPredicate/_CPPredicate.j
index 56bfcd643..34001c415 100644
--- a/Foundation/CPPredicate/_CPPredicate.j
+++ b/Foundation/CPPredicate/_CPPredicate.j
@@ -744,16 +744,43 @@
if (![self scanString:@"," intoString:NULL])
CPRaiseParseError(self, @"expression");
+
variableExpression = [self parseExpression];
if (![self scanString:@"," intoString:NULL])
CPRaiseParseError(self, @"expression");
+
subpredicate = [self parsePredicate];
+ if (![self scanString:@")" intoString:NULL])
+ CPRaiseParseError(self, @"predicate");
+
+ return [[_CPSubqueryExpression alloc] initWithExpression:collection usingIteratorExpression:variableExpression predicate:subpredicate];
+ }
+
+ if ([self scanString:@"TERNARY" intoString:NULL])
+ {
+ if (![self scanString:@"(" intoString:NULL])
+ CPRaiseParseError(self, @"expression");
+
+ var predicate = [self parsePredicate],
+ trueExpression,
+ falseExpression;
+
+ if (![self scanString:@"," intoString:NULL])
+ CPRaiseParseError(self, @"predicate");
+
+ trueExpression = [self parseExpression];
+
+ if (![self scanString:@"," intoString:NULL])
+ CPRaiseParseError(self, @"expression");
+
+ falseExpression = [self parseExpression];
+
if (![self scanString:@")" intoString:NULL])
CPRaiseParseError(self, @"expression");
- return [[_CPSubqueryExpression alloc] initWithExpression:collection usingIteratorExpression:variableExpression predicate:subpredicate];
+ return [CPExpression expressionForConditional:predicate trueExpression:trueExpression falseExpression:falseExpression];
}
if ([self scanString:@"FUNCTION" intoString:NULL])
diff --git a/Foundation/CPPredicate/_CPSetExpression.j b/Foundation/CPPredicate/_CPSetExpression.j
index a0e9df3bb..707486b32 100644
--- a/Foundation/CPPredicate/_CPSetExpression.j
+++ b/Foundation/CPPredicate/_CPSetExpression.j
@@ -25,8 +25,8 @@
@implementation _CPSetExpression : CPExpression
{
- CPExpression _left;
- CPExpression _right;
+ CPExpression _left @accessors(getter=leftExpression);
+ CPExpression _right @accessors(getter=rightExpression);
}
- (id)initWithType:(int)type left:(CPExpression)left right:(CPExpression)right
@@ -88,16 +88,6 @@
return self;
}
-- (CPExpression)leftExpression
-{
- return _left;
-}
-
-- (CPExpression)rightExpression
-{
- return _right;
-}
-
- (CPString)description
{
var desc;
diff --git a/Foundation/CPPredicate/_CPSubqueryExpression.j b/Foundation/CPPredicate/_CPSubqueryExpression.j
index a94d88d2c..d69483d2c 100644
--- a/Foundation/CPPredicate/_CPSubqueryExpression.j
+++ b/Foundation/CPPredicate/_CPSubqueryExpression.j
@@ -26,9 +26,9 @@
@implementation _CPSubqueryExpression : CPExpression
{
- CPExpression _collection;
+ CPExpression _collection @accessors(getter=collection);
CPExpression _variableExpression;
- CPPredicate _subpredicate;
+ CPPredicate _subpredicate @accessors(getter=predicate);
}
- (id)initWithExpression:(CPExpression)collection usingIteratorVariable:(CPString)variable predicate:(CPPredicate)subpredicate
@@ -47,23 +47,25 @@
_collection = collection;
_variableExpression = variableExpression;
}
+
return self;
}
-- (id)expressionValueWithObject:(id)object context:(id)context
+- (id)expressionValueWithObject:(id)object context:(id)aContext
{
- var collection = [_collection expressionValueWithObject:object context:context],
- count = [collection count],
+ var collection = [_collection expressionValueWithObject:object context:aContext],
result = [CPArray array],
- bindings = @{ [self variable]: [CPExpression expressionForEvaluatedObject] },
- i = 0;
+ variable = [self variable],
+ context = aContext || @{};
- for (; i < count; i++)
+ if ([context objectForKey:variable] == nil)
+ [context setObject:[CPExpression expressionForEvaluatedObject] forKey:variable];
+
+ [collection enumerateObjectsUsingBlock:function(exp, idx, stop)
{
- var item = [collection objectAtIndex:i];
- if ([_subpredicate evaluateWithObject:item substitutionVariables:bindings])
- [result addObject:item];
- }
+ if ([_subpredicate evaluateWithObject:exp substitutionVariables:context])
+ [result addObject:exp];
+ }];
return result;
}
@@ -79,21 +81,11 @@
return YES;
}
-- (CPExpression)collection
-{
- return _collection;
-}
-
- (id)copy
{
return [[_CPSubqueryExpression alloc] initWithExpression:[_collection copy] usingIteratorExpression:[_variableExpression copy] predicate:[_subpredicate copy]];
}
-- (CPPredicate)predicate
-{
- return _subpredicate;
-}
-
- (CPString)description
{
return [self predicateFormat];
diff --git a/Foundation/CPPredicate/_CPVariableExpression.j b/Foundation/CPPredicate/_CPVariableExpression.j
index 910ef23d5..a33911222 100644
--- a/Foundation/CPPredicate/_CPVariableExpression.j
+++ b/Foundation/CPPredicate/_CPVariableExpression.j
@@ -29,7 +29,7 @@
@implementation _CPVariableExpression : CPExpression
{
- CPString _variable;
+ CPString _variable @accessors(getter=variable);
}
- (id)initWithVariable:(CPString)variable
@@ -54,11 +54,6 @@
return YES;
}
-- (CPString)variable
-{
- return _variable;
-}
-
- (id)expressionValueWithObject:object context:(CPDictionary)context
{
var expression = [self _expressionWithSubstitutionVariables:context];
diff --git a/Foundation/CPRunLoop.j b/Foundation/CPRunLoop.j
index f12e4642c..da7906ee2 100644
--- a/Foundation/CPRunLoop.j
+++ b/Foundation/CPRunLoop.j
@@ -42,6 +42,7 @@ var _CPRunLoopPerformPool = [],
/* @ignore */
@implementation _CPRunLoopPerform : CPObject
{
+ Function _block;
id _target;
SEL _selector;
id _argument;
@@ -64,6 +65,7 @@ var _CPRunLoopPerformPool = [],
{
var perform = _CPRunLoopPerformPool.pop();
+ perform._block = nil;
perform._target = aTarget;
perform._selector = aSelector;
perform._argument = anArgument;
@@ -77,6 +79,26 @@ var _CPRunLoopPerformPool = [],
return [[self alloc] initWithSelector:aSelector target:aTarget argument:anArgument order:anOrder modes:modes];
}
++ (_CPRunLoopPerform)performWithBlock:(Function)aBlock argument:(id)anArgument order:(unsigned)anOrder modes:(CPArray)modes
+{
+ if (_CPRunLoopPerformPool.length)
+ {
+ var perform = _CPRunLoopPerformPool.pop();
+
+ perform._target = nil;
+ perform._selector = nil;
+ perform._block = aBlock;
+ perform._argument = anArgument;
+ perform._order = anOrder;
+ perform._runLoopModes = modes;
+ perform._isValid = YES;
+
+ return perform;
+ }
+
+ return [[self alloc] initWithBlock:aBlock argument:anArgument order:anOrder modes:modes];
+}
+
- (id)initWithSelector:(SEL)aSelector target:(SEL)aTarget argument:(id)anArgument order:(unsigned)anOrder modes:(CPArray)modes
{
self = [super init];
@@ -94,6 +116,22 @@ var _CPRunLoopPerformPool = [],
return self;
}
+- (id)initWithBlock:(Function)aBlock argument:(id)anArgument order:(unsigned)anOrder modes:(CPArray)modes
+{
+ self = [super init];
+
+ if (self)
+ {
+ _block = aBlock;
+ _argument = anArgument;
+ _order = anOrder;
+ _runLoopModes = modes;
+ _isValid = YES;
+ }
+
+ return self;
+}
+
- (SEL)selector
{
return _selector;
@@ -121,7 +159,10 @@ var _CPRunLoopPerformPool = [],
if ([_runLoopModes containsObject:aRunLoopMode])
{
- [_target performSelector:_selector withObject:_argument];
+ if (_block)
+ _block(_argument);
+ else
+ [_target performSelector:_selector withObject:_argument];
return YES;
}
@@ -225,6 +266,23 @@ var CPRunLoopLastNativeRunLoop = 0;
_orderedPerforms.splice(count + 1, 0, perform);
}
+
+/*!
+ @ignore
+*/
+- (void)performBlock:(Function)aBlock argument:(id)anArgument order:(int)anOrder modes:(CPArray)modes
+{
+ var perform = [_CPRunLoopPerform performWithBlock:aBlock argument:anArgument order:anOrder modes:modes],
+ count = _orderedPerforms.length;
+
+ // We sort ourselves in reverse because we iterate this list backwards.
+ while (count--)
+ if (anOrder < [_orderedPerforms[count] order])
+ break;
+
+ _orderedPerforms.splice(count + 1, 0, perform);
+}
+
/*!
Cancels the specified selector and target.
@param aSelector the selector of the method to invoke
diff --git a/Foundation/CPURLConnection.j b/Foundation/CPURLConnection.j
index cd195b04a..52df11606 100644
--- a/Foundation/CPURLConnection.j
+++ b/Foundation/CPURLConnection.j
@@ -25,6 +25,8 @@
@import "CPRunLoop.j"
@import "CPURLRequest.j"
@import "CPURLResponse.j"
+@import "CPOperationQueue.j"
+@import "CPOperation.j"
@protocol CPURLConnectionDelegate
@@ -93,6 +95,9 @@ var CPURLConnectionDelegate = nil;
BOOL _isLocalFileConnection;
HTTPRequest _HTTPRequest;
+
+ CPOperationQueue _operationQueue;
+ CPOperation _connectionOperation @accessors(readonly, getter=operation);
}
+ (void)setClassDelegate:(id )delegate
@@ -137,6 +142,18 @@ var CPURLConnectionDelegate = nil;
return nil;
}
+/*
+ Loads the data for a URL request and executes a function on an operation queue when the request completes or fails.
+ @param aRequest contains the URL to obtain data from.
+ @param aQueue The operation queue to which the function is dispatched when the request completes or failed.
+ @param aHandler The function to execute.
+ @discussion If the request completes successfully, the data parameter of the function contains the resource data, and the error parameter is nil. If the request fails, the data parameter is nil and the error parameter contain information about the failure.
+*/
++ (CPURLConnection)sendAsynchronousRequest:(CPURLRequest)aRequest queue:(CPOperationQueue)aQueue completionHandler:(Function)aHandler
+{
+ return [[self alloc] _initWithRequest:aRequest queue:aQueue completionHandler:aHandler];
+}
+
/*
Creates a url connection with a delegate to monitor the request progress.
@param aRequest contains the URL to obtain data from
@@ -161,26 +178,51 @@ var CPURLConnectionDelegate = nil;
if (self)
{
- _request = aRequest;
- _originalRequest = [aRequest copy];
_delegate = aDelegate;
- _isCanceled = NO;
+ _operationQueue = nil;
+ _connectionOperation = nil;
- var URL = [_request URL],
- scheme = [URL scheme];
+ [self _initWithRequest:aRequest];
+ }
- // Browsers use "file:", Titanium uses "app:"
- _isLocalFileConnection = scheme === "file" ||
- ((scheme === "http" || scheme === "https") &&
- window.location &&
- (window.location.protocol === "file:" || window.location.protocol === "app:"));
+ if (shouldStartImmediately)
+ [self start];
- _HTTPRequest = new CFHTTPRequest();
- _HTTPRequest.setTimeout([aRequest timeoutInterval] * 1000);
- _HTTPRequest.setWithCredentials([aRequest withCredentials]);
+ return self;
+}
- if (shouldStartImmediately)
- [self start];
+- (void)_initWithRequest:(CPURLRequest)aRequest
+{
+ _request = aRequest;
+ _originalRequest = [aRequest copy];
+ _isCanceled = NO;
+
+ var URL = [_request URL],
+ scheme = [URL scheme];
+
+ // Browsers use "file:", Titanium uses "app:"
+ _isLocalFileConnection = scheme === "file" ||
+ ((scheme === "http" || scheme === "https") &&
+ window.location &&
+ (window.location.protocol === "file:" || window.location.protocol === "app:"));
+
+ _HTTPRequest = new CFHTTPRequest();
+ _HTTPRequest.setTimeout([aRequest timeoutInterval] * 1000);
+ _HTTPRequest.setWithCredentials([aRequest withCredentials]);
+}
+
+- (id)_initWithRequest:(CPURLRequest)aRequest queue:(CPOperationQueue)aQueue completionHandler:(Function)aHandler
+{
+ self = [super init];
+
+ if (self)
+ {
+ _delegate = nil;
+ _operationQueue = aQueue;
+ _connectionOperation = [[_AsynchronousConnectionOperation alloc] initWithFunction:aHandler];
+
+ [self _initWithRequest:aRequest];
+ [self start];
}
return self;
@@ -232,6 +274,8 @@ var CPURLConnectionDelegate = nil;
{
if ([_delegate respondsToSelector:@selector(connection:didFailWithError:)])
[_delegate connection:self didFailWithError:anException];
+ else if (_connectionOperation !== nil)
+ [self _connectionOperationDidReceiveResponse:nil data:nil error:anException];
}
/*
@@ -244,6 +288,9 @@ var CPURLConnectionDelegate = nil;
try
{
_HTTPRequest.abort();
+
+ if (_connectionOperation)
+ [_connectionOperation cancel];
}
// We expect an exception in some browsers like FireFox.
catch (anException)
@@ -267,7 +314,6 @@ var CPURLConnectionDelegate = nil;
[self _sendDelegateDidFailWithError:exception];
}
-
/* @ignore */
- (void)_readyStateDidChange
{
@@ -280,23 +326,27 @@ var CPURLConnectionDelegate = nil;
[CPURLConnectionDelegate connectionDidReceiveAuthenticationChallenge:self];
else
{
- if ([_delegate respondsToSelector:@selector(connection:didReceiveResponse:)])
+ var response;
+
+ if (_isLocalFileConnection)
+ response = [[CPURLResponse alloc] initWithURL:URL];
+ else
{
- if (_isLocalFileConnection)
- [_delegate connection:self didReceiveResponse:[[CPURLResponse alloc] initWithURL:URL]];
- else
- {
- var response = [[CPHTTPURLResponse alloc] initWithURL:URL];
- [response _setStatusCode:statusCode];
- [response _setAllResponseHeaders:_HTTPRequest.getAllResponseHeaders()];
- [_delegate connection:self didReceiveResponse:response];
- }
+ response = [[CPHTTPURLResponse alloc] initWithURL:URL];
+ [response _setStatusCode:statusCode];
+ [response _setAllResponseHeaders:_HTTPRequest.getAllResponseHeaders()];
}
+ if ([_delegate respondsToSelector:@selector(connection:didReceiveResponse:)])
+ [_delegate connection:self didReceiveResponse:response];
+
if (!_isCanceled)
{
if ([_delegate respondsToSelector:@selector(connection:didReceiveData:)])
[_delegate connection:self didReceiveData:_HTTPRequest.responseText()];
+ else if (_connectionOperation !== nil)
+ [self _connectionOperationDidReceiveResponse:response data:_HTTPRequest.responseText() error:nil];
+
if ([_delegate respondsToSelector:@selector(connectionDidFinishLoading:)])
[_delegate connectionDidFinishLoading:self];
}
@@ -312,6 +362,69 @@ var CPURLConnectionDelegate = nil;
return _HTTPRequest;
}
+- (void)_connectionOperationDidReceiveResponse:(CPURLResponse)aResponse data:(CPData)aData error:(CPError)anError
+{
+ [_connectionOperation _setResponse:aResponse data:aData error:anError];
+
+ if (_operationQueue)
+ [_operationQueue addOperation:_connectionOperation];
+ else
+ {
+ // Do we need to send CPOperation KVO notifications ?
+ [_connectionOperation main];
+ }
+}
+
+@end
+
+/* @ignore */
+@implementation _AsynchronousConnectionOperation : CPOperation
+{
+ BOOL _didReceiveResponse;
+
+ CPURLResponse _response;
+ CPData _data;
+ CPError _error;
+ Function _operationFunction;
+}
+
+/* @ignore */
+- (id)initWithFunction:(Function)aFunction
+{
+ self = [super init];
+
+ if (self)
+ {
+ _didReceiveResponse = NO;
+ _response = nil;
+ _data = nil;
+ _error = nil;
+ _operationFunction = aFunction;
+ }
+
+ return self;
+}
+
+- (void)_setResponse:(CPURLResponse)aResponse data:(CPData)aData error:(CPError)anError
+{
+ _didReceiveResponse = YES;
+ _response = aResponse;
+ _data = aData;
+ _error = anError;
+}
+
+/* @ignore */
+- (void)main
+{
+ _operationFunction(_response, _data, _error);
+}
+
+/* @ignore */
+- (BOOL)isReady
+{
+ return (_didReceiveResponse && [super isReady]);
+}
+
@end
@implementation CPURLConnection (Deprecated)
diff --git a/Foundation/Foundation.j b/Foundation/Foundation.j
index c0865d410..e2d752b17 100755
--- a/Foundation/Foundation.j
+++ b/Foundation/Foundation.j
@@ -54,6 +54,7 @@
@import "CPMutableSet.j"
@import "CPNotification.j"
@import "CPNotificationCenter.j"
+@import "CPNotificationQueue.j"
@import "CPNull.j"
@import "CPNumber.j"
@import "CPNumberFormatter.j"
diff --git a/Foundation/Jakefile b/Foundation/Jakefile
index 20d218c9e..066d1341b 100644
--- a/Foundation/Jakefile
+++ b/Foundation/Jakefile
@@ -51,7 +51,7 @@ foundationTask = framework ("Foundation", function(foundationTask)
INCLUDES = "--include \"../AppKit/Platform/Platform.h\" " + INCLUDES;
if ($CONFIGURATION === "Release")
- foundationTask.setCompilerFlags("-O " + INCLUDES);
+ foundationTask.setCompilerFlags("-O2 " + INCLUDES);
else
foundationTask.setCompilerFlags("-DDEBUG -g " + INCLUDES);
});
diff --git a/Objective-J/Bootstrap.js b/Objective-J/Bootstrap.js
index 58778f7d0..ddd7263bf 100644
--- a/Objective-J/Bootstrap.js
+++ b/Objective-J/Bootstrap.js
@@ -45,6 +45,23 @@ if (DOMBaseElementsCount > 0)
pageURL = new CFURL(DOMBaseElementHref, pageURL);
}
+// Set compiler flags
+
+if (typeof OBJJ_COMPILER_FLAGS !== 'undefined')
+{
+ var flags = 0;
+ for (var i = 0; i < OBJJ_COMPILER_FLAGS.length; i++)
+ {
+ var flag = ObjJAcornCompiler.Flags[OBJJ_COMPILER_FLAGS[i]];
+
+ if (flag != null)
+ {
+ flags |= flag;
+ }
+ }
+ exports.setCurrentCompilerFlags(flags);
+}
+
// Turn the main file into a URL.
var mainFileURL = new CFURL(window.OBJJ_MAIN_FILE || "main.j"),
diff --git a/Objective-J/CFBundle.js b/Objective-J/CFBundle.js
index db3f77190..995b60904 100644
--- a/Objective-J/CFBundle.js
+++ b/Objective-J/CFBundle.js
@@ -20,20 +20,24 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-var CFBundleUnloaded = 0,
- CFBundleLoading = 1 << 0,
- CFBundleLoadingInfoPlist = 1 << 1,
- CFBundleLoadingExecutable = 1 << 2,
- CFBundleLoadingSpritedImages = 1 << 3,
- CFBundleLoaded = 1 << 4;
+var CFBundleUnloaded = 0,
+ CFBundleLoading = 1 << 0,
+ CFBundleLoadingInfoPlist = 1 << 1,
+ CFBundleLoadingExecutable = 1 << 2,
+ CFBundleLoadingSpritedImages = 1 << 3,
+ CFBundleLoadingLocalizableStrings = 1 << 4,
+ CFBundleLoaded = 1 << 5;
var CFBundlesForURLStrings = { },
CFBundlesForClasses = { },
CFBundlesWithIdentifiers = { },
- CFCacheBuster = new Date().getTime(),
- CFTotalBytesLoaded = 0,
+ CFCacheBuster = new Date().getTime(),
+ CFTotalBytesLoaded = 0,
CPApplicationSizeInBytes = 0;
+var CPBundleDefaultBrowserLanguage = "CPBundleDefaultBrowserLanguage",
+ CPBundleDefaultLanguage = "CPBundleDefaultLanguage";
+
GLOBAL(CFBundle) = function(/*CFURL|String*/ aURL)
{
aURL = makeAbsoluteURL(aURL).asDirectoryPathURL();
@@ -58,6 +62,9 @@ GLOBAL(CFBundle) = function(/*CFURL|String*/ aURL)
this._infoDictionary = new CFDictionary();
this._eventDispatcher = new EventDispatcher(this);
+
+ this._localizableStrings = [];
+ this._loadedLanguage = NULL;
}
DISPLAY_NAME(CFBundle);
@@ -145,11 +152,14 @@ CFBundle.prototype.resourcesDirectoryURL = function()
DISPLAY_NAME(CFBundle.prototype.resourcesDirectoryURL);
-CFBundle.prototype.resourceURL = function(/*String*/ aResourceName, /*String*/ aType, /*String*/ aSubDirectory)
+CFBundle.prototype.resourceURL = function(/*String*/ aResourceName, /*String*/ aType, /*String*/ aSubDirectory, /*String*/ localizationName)
{
if (aType)
aResourceName = aResourceName + "." + aType;
+ if (localizationName)
+ aResourceName = localizationName + aResourceName;
+
if (aSubDirectory)
aResourceName = aSubDirectory + "/" + aResourceName;
@@ -194,6 +204,11 @@ CFBundle.prototype.infoDictionary = function()
DISPLAY_NAME(CFBundle.prototype.infoDictionary);
+CFBundle.prototype.loadedLanguage = function()
+{
+ return this._loadedLanguage;
+};
+
CFBundle.prototype.valueForInfoDictionaryKey = function(/*String*/ aKey)
{
return this._infoDictionary.valueForKey(aKey);
@@ -318,6 +333,7 @@ CFBundle.prototype.load = function(/*BOOL*/ shouldExecute)
if (self === CFBundle.mainBundle() && self.valueForInfoDictionaryKey("CPApplicationSize"))
CPApplicationSizeInBytes = self.valueForInfoDictionaryKey("CPApplicationSize").valueForKey("executable") || 0;
+ loadLanguageForBundle(self);
loadExecutableAndResources(self, shouldExecute);
}
@@ -354,6 +370,7 @@ function loadExecutableAndResources(/*Bundle*/ aBundle, /*BOOL*/ shouldExecute)
loadExecutableForBundle(aBundle, success, failure, progress);
loadSpritedImagesForBundle(aBundle, success, failure, progress);
+ loadLocalizableStringsForBundle(aBundle, success, failure, progress);
if (aBundle._loadStatus === CFBundleLoading)
return success();
@@ -490,6 +507,120 @@ function loadSpritedImagesForBundle(/*Bundle*/ aBundle, success, failure, progre
}, failure, progress);
}
+function loadLocalizableStringsForBundle(/*Bundle*/ aBundle, success, failure, progress)
+{
+ var language = aBundle._loadedLanguage;
+
+ if (!language)
+ return;
+
+ var localizableStrings = aBundle.valueForInfoDictionaryKey("CPBundleLocalizableStrings");
+
+ if (!localizableStrings)
+ return;
+
+ var self = aBundle,
+ length = localizableStrings.length,
+ languagePathURL = new CFURL(language + ".lproj/", self.resourcesDirectoryURL()),
+ fileSuccessed = 0;
+
+ for (var i = 0; i < length; i++)
+ {
+ var localizableString = localizableStrings[i];
+
+ function onsuccess(/*Event*/ anEvent)
+ {
+ var contentFile = anEvent.request.responseText(),
+ tableName = new CFURL(anEvent.request._URL).lastPathComponent();
+
+ try
+ {
+ loadLocalizableContentForFileInBundle(self, contentFile, tableName);
+
+ if (++fileSuccessed == length)
+ {
+ aBundle._loadStatus &= ~CFBundleLoadingLocalizableStrings;
+ success();
+ }
+ }
+ catch(e)
+ {
+ failure(new Error("Error when parsing the localizable file " + tableName));
+ }
+ }
+
+ aBundle._loadStatus |= CFBundleLoadingLocalizableStrings;
+ new FileRequest(new CFURL(localizableString, languagePathURL), onsuccess, failure, progress);
+ }
+}
+
+function loadLocalizableContentForFileInBundle(bundle, contentFile, tableName)
+{
+ var values = {},
+ lines = contentFile.split("\n"),
+ currentContext;
+
+ bundle._localizableStrings[tableName] = values;
+
+ for (var i = 0; i < lines.length; i++)
+ {
+ var line = lines[i];
+
+ // Context
+ if (line[0] == "/")
+ {
+ currentContext = line.substring(2, line.length - 2).trim();
+ continue;
+ }
+
+ // Key
+ if (line[0] == "\"")
+ {
+ var split = line.split("\"")
+
+ // Here we add twice the translated value, once with the context and once without
+ // This will help in term of rapidity when asking the value of the key
+
+ var key = split[1];
+
+ if (!(key in values))
+ values[key] = split[3];
+
+ key += currentContext;
+
+ if (!(key in values))
+ values[key] = split[3];
+
+ continue;
+ }
+ }
+}
+
+function loadLanguageForBundle(aBundle)
+{
+ if (aBundle._loadedLanguage)
+ return;
+
+ var defaultLanguage = aBundle.valueForInfoDictionaryKey(CPBundleDefaultLanguage);
+
+ if (defaultLanguage != CPBundleDefaultBrowserLanguage && defaultLanguage)
+ {
+ aBundle._loadedLanguage = defaultLanguage;
+ return;
+ }
+
+ if (typeof navigator == "undefined")
+ return;
+
+ // userLanguage is an IE only property.
+ var language = (typeof navigator.language !== "undefined") ? navigator.language : navigator.userLanguage;
+
+ if (!language)
+ return;
+
+ aBundle._loadedLanguage = language.substring(0, 2);
+}
+
var CFBundleSpriteSupportListeners = [],
CFBundleSupportedSpriteType = -1,
CFBundleNoSpriteType = 0,
@@ -734,7 +865,53 @@ CFBundle.prototype.path = function()
return this.bundlePath.apply(this, arguments);
};
-CFBundle.prototype.pathForResource = function(aResource)
+CFBundle.prototype.pathForResource = function(aResource, aType, aSubDirectory, localizationName)
{
- return this.resourceURL(aResource).absoluteString();
+ return this.resourceURL(aResource, aType, aSubDirectory, localizationName).absoluteString();
};
+
+GLOBAL(CFBundleCopyLocalizedString) = function (/*Bundle*/ bundle, key, value, tableName)
+{
+ return CFCopyLocalizedStringWithDefaultValue(key, tableName, bundle, value, "");
+}
+
+GLOBAL(CFBundleCopyBundleLocalizations) = function (/*Bundle*/ aBundle)
+{
+ return [this._loadedLanguage];
+}
+
+GLOBAL(CFCopyLocalizedString) = function (key, comment)
+{
+ return CFCopyLocalizedStringFromTable(key, "Localizable", comment);
+}
+
+GLOBAL(CFCopyLocalizedStringFromTable) = function (key, tableName, comment)
+{
+ return CFCopyLocalizedStringFromTableInBundle(key, tableName, CFBundleGetMainBundle(), comment);
+}
+
+GLOBAL(CFCopyLocalizedStringFromTableInBundle) = function (key, tableName, bundle, comment)
+{
+ return CFCopyLocalizedStringWithDefaultValue(key, tableName, bundle, null, comment);
+}
+
+GLOBAL(CFCopyLocalizedStringWithDefaultValue) = function (key, tableName, bundle, value, comment)
+{
+ var string;
+
+ if (!tableName)
+ tableName = "Localizable";
+
+ tableName += ".strings";
+
+ var localizableString = bundle._localizableStrings[tableName];
+
+ string = localizableString ? localizableString[key + comment] : null;
+
+ return string || (value || key);
+}
+
+GLOBAL(CFBundleGetMainBundle) = function ()
+{
+ return CFBundle.mainBundle();
+}
diff --git a/Objective-J/CFHTTPRequest.js b/Objective-J/CFHTTPRequest.js
old mode 100644
new mode 100755
index eff9a49df..2c112e749
--- a/Objective-J/CFHTTPRequest.js
+++ b/Objective-J/CFHTTPRequest.js
@@ -104,7 +104,8 @@ GLOBAL(CFHTTPRequest) = function()
this._nativeRequest = new NativeRequest();
// by default, all requests will assume that credentials should not be sent.
- this._nativeRequest.withCredentials = false;
+ this._withCredentials = false;
+ this._timeout = 60000;
var self = this;
this._stateChangeHandler = function()
@@ -217,12 +218,15 @@ CFHTTPRequest.prototype.getResponseHeader = function(/*String*/ aHeader)
CFHTTPRequest.prototype.setTimeout = function(/*int*/ aTimeout)
{
- this._nativeRequest.timeout = aTimeout;
+ this._timeout = aTimeout;
+
+ if (this._isOpen)
+ this._nativeRequest.timeout = aTimeout;
};
CFHTTPRequest.prototype.getTimeout = function(/*int*/ aTimeout)
{
- return this._nativeRequest.timeout;
+ return this._timeout;
};
CFHTTPRequest.prototype.getAllResponseHeaders = function()
@@ -237,13 +241,24 @@ CFHTTPRequest.prototype.overrideMimeType = function(/*String*/ aMimeType)
CFHTTPRequest.prototype.open = function(/*String*/ aMethod, /*String*/ aURL, /*Boolean*/ isAsynchronous, /*String*/ aUser, /*String*/ aPassword)
{
+ var retval;
+
this._isOpen = true;
this._URL = aURL;
this._async = isAsynchronous;
this._method = aMethod;
this._user = aUser;
this._password = aPassword;
- return this._nativeRequest.open(aMethod, aURL, isAsynchronous, aUser, aPassword);
+
+ requestReturnValue = this._nativeRequest.open(aMethod, aURL, isAsynchronous, aUser, aPassword);
+
+ if (this._async)
+ {
+ this._nativeRequest.withCredentials = this._withCredentials;
+ this._nativeRequest.timeout = this._timeout;
+ }
+
+ return requestReturnValue;
};
CFHTTPRequest.prototype.send = function(/*Object*/ aBody)
@@ -283,6 +298,7 @@ CFHTTPRequest.prototype.send = function(/*Object*/ aBody)
CFHTTPRequest.prototype.abort = function()
{
this._isOpen = false;
+
return this._nativeRequest.abort();
};
@@ -298,12 +314,15 @@ CFHTTPRequest.prototype.removeEventListener = function(/*String*/ anEventName, /
CFHTTPRequest.prototype.setWithCredentials = function(/*Boolean*/ willSendWithCredentials)
{
- this._nativeRequest.withCredentials = willSendWithCredentials;
+ this._withCredentials = willSendWithCredentials;
+
+ if (this._isOpen && this._async)
+ this._nativeRequest.withCredentials = willSendWithCredentials;
};
CFHTTPRequest.prototype.withCredentials = function()
{
- return this._nativeRequest.withCredentials;
+ return this._withCredentials;
};
CFHTTPRequest.prototype.isTimeoutRequest = function()
@@ -320,7 +339,6 @@ function dispatchTimeoutHTTPRequestEvents(/*CFHTTPRequest*/ aRequest)
function determineAndDispatchHTTPRequestEvents(/*CFHTTPRequest*/ aRequest)
{
var eventDispatcher = aRequest._eventDispatcher,
- nativeRequest = aRequest._nativeRequest,
readyStates = ["uninitialized", "loading", "loaded", "interactive", "complete"];
eventDispatcher.dispatchEvent({ type:"readystatechange", request:aRequest});
@@ -336,7 +354,9 @@ function determineAndDispatchHTTPRequestEvents(/*CFHTTPRequest*/ aRequest)
eventDispatcher.dispatchEvent({ type:readyStates[aRequest.readyState()], request:aRequest});
}
else
+ {
eventDispatcher.dispatchEvent({ type:readyStates[aRequest.readyState()], request:aRequest});
+ }
}
function FileRequest(/*CFURL*/ aURL, onsuccess, onfailure, onprogress)
@@ -351,7 +371,7 @@ function FileRequest(/*CFURL*/ aURL, onsuccess, onfailure, onprogress)
{
var aFilePath = aURL.toString().substring(5),
OS = require("os"),
- gccFlags = require("objective-j").currentCompilerFlags(),
+ gccFlags = require("objective-j").currentGccCompilerFlags(),
chunk,
fileContents = "";
@@ -377,6 +397,7 @@ function FileRequest(/*CFURL*/ aURL, onsuccess, onfailure, onprogress)
{
onfailure({request: request});
}
+
return;
}
#endif
diff --git a/Objective-J/CommonJS/lib/objective-j.js b/Objective-J/CommonJS/lib/objective-j.js
index f3e1db5c4..1d74d0f10 100644
--- a/Objective-J/CommonJS/lib/objective-j.js
+++ b/Objective-J/CommonJS/lib/objective-j.js
@@ -90,11 +90,14 @@ exports.run = function(args)
if (argv[0] === "--help" || argv[0] === "-h")
{
print("Usage (objj): " + args[0] + " [options] [--] files...");
- print(" -v, --version print the current version of objj");
- print(" -I, --objj-include-paths include a specific framework paths")
- print(" -h, --help print this help");
- print(" -m, --multifiles launch objj on several files")
- print(" -x, --xml specify the output format in xml.")
+ print(" -v, --version print the current version of objj");
+ print(" -I, --objj-include-paths include a specific framework paths")
+ print(" -h, --help print this help");
+ print(" -m, --multifiles launch objj on several files")
+ print(" -x, --xml specify the output format in xml.")
+ print(" -g, --include-debug-symbols Include debug symbols when compiling.")
+ print(" -T, --dont-include-type-signatures Do not include type signatures when compiling.")
+ print(" -O2, --inline-msg-send Inline objj_msgSend function when compiling.")
return;
}
@@ -119,6 +122,24 @@ exports.run = function(args)
argv.shift();
exports.outputFormatInXML = true;
break;
+
+ case "-g":
+ case "--include-debug-symbols":
+ argv.shift();
+ (OBJJ_COMPILER_FLAGS || (OBJJ_COMPILER_FLAGS = [])).push("IncludeDebugSymbols");
+ break;
+
+ case "-T":
+ case "--dont-include-type-signatures":
+ argv.shift();
+ (OBJJ_COMPILER_FLAGS || (OBJJ_COMPILER_FLAGS = [])).push("IncludeTypeSignatures");
+ break;
+
+ case "-O2":
+ case "--inline-msg-send":
+ argv.shift();
+ (OBJJ_COMPILER_FLAGS || (OBJJ_COMPILER_FLAGS = [])).push("InlineMsgSend");
+ break;
}
}
}
diff --git a/Objective-J/CommonJS/lib/objective-j/compiler.js b/Objective-J/CommonJS/lib/objective-j/compiler.js
index 34416cde0..6f761e3a5 100644
--- a/Objective-J/CommonJS/lib/objective-j/compiler.js
+++ b/Objective-J/CommonJS/lib/objective-j/compiler.js
@@ -187,13 +187,17 @@ function resolveFlags(args)
objjcFlags &= ~ObjectiveJ.ObjJAcornCompiler.Flags.CheckSyntax;
else if (argument.indexOf("-T") === 0)
- objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.IncludeTypeSignatures;
+ objjcFlags &= ~ObjectiveJ.ObjJAcornCompiler.Flags.IncludeTypeSignatures;
else if (argument.indexOf("-g") === 0)
objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.IncludeDebugSymbols;
- else if (argument.indexOf("-O") === 0)
+ else if (argument.indexOf("-O") === 0) {
objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.Compress;
+ // FIXME: currently we are sending in '-O2' when we want InlineMsgSend. Here we only check if we it is '-O...'
+ if (argument.length > 2)
+ objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.InlineMsgSend;
+ }
else if (argument.indexOf("-G") === 0)
objjcFlags |= ObjectiveJ.ObjJAcornCompiler.Flags.Generate;
@@ -255,12 +259,16 @@ exports.main = function(args)
if (argv[0] === "--help" || argv[0].substr(0, 1) == '-')
{
print("Usage (objjc 2.0): " + args[0] + " [options] [--] file...");
- print(" -p, --print print the output directly to stdout");
- print(" --unmarked don't tag the output with @STATIC header");
+ print(" -p, --print print the output directly to stdout");
+ print(" --unmarked don't tag the output with @STATIC header");
print("");
- print(" -T, --includeTypeSignatures include type signatures in the compiled output");
+ print(" -T, --dont-include-type-signatures include type signatures in the compiled output");
+ print(" -g, --include-debug-symbols include debug symbols in the compiled output");
+ print(" -T, --include-type-signatures include type signatures in the compiled output");
+ print(" -O, --compress compress the compiled output");
+ print(" -O2, --inline-msg-send inline objj_msgSend function in the compiled output");
print("");
- print(" --help print this help");
+ print(" --help print this help");
return;
}
diff --git a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js
index e71b9129f..613d9b254 100644
--- a/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js
+++ b/Objective-J/CommonJS/lib/objective-j/jake/bundletask.js
@@ -907,7 +907,7 @@ BundleTask.prototype.defineSourceTasks = function()
basePath = absolutePath.substring(0, absolutePath.length - theTranslatedFilename.length);
// Here we set the current compiler flags so the load system will know what compiler flags to use
- ObjectiveJ.setCurrentCompilerFlags(environmentCompilerFlags);
+ ObjectiveJ.setCurrentGccCompilerFlags(environmentCompilerFlags);
// Here we tell the CFBundle to load frameworks for the current build enviroment and not the enviroment that is running
CFBundle.environments = function() {return [anEnvironment.name(), "ObjJ"]};
ObjectiveJ.make_narwhal_factory(absolutePath, basePath, translateFilenameToPath)(require, e, module, system, print);
diff --git a/Objective-J/Debug.js b/Objective-J/Debug.js
index 532afc6f2..d8583f634 100644
--- a/Objective-J/Debug.js
+++ b/Objective-J/Debug.js
@@ -185,7 +185,7 @@ GLOBAL(objj_typecheck_decorator) = function(msgSend)
if (!aReceiver)
return msgSend.apply(this, arguments);
- var types = aReceiver.isa.method_dtable[aSelector].types;
+ var types = aReceiver.isa.method_dtable[aSelector].method_types;
for (var i = 2; i < arguments.length; i++)
{
try
diff --git a/Objective-J/FileExecutable.js b/Objective-J/FileExecutable.js
index 8e9bcac7a..a3b471a7e 100644
--- a/Objective-J/FileExecutable.js
+++ b/Objective-J/FileExecutable.js
@@ -41,7 +41,7 @@ function FileExecutable(/*CFURL|String*/ aURL, /*Dictionary*/ aFilenameTranslate
if (fileContents.match(/^@STATIC;/))
executable = decompile(fileContents, aURL);
else if ((extension === "j" || !extension) && !fileContents.match(/^{/))
- executable = exports.ObjJAcornCompiler.compileFileDependencies(fileContents, aURL, ObjJAcornCompiler.Flags.IncludeDebugSymbols);
+ executable = exports.ObjJAcornCompiler.compileFileDependencies(fileContents, aURL, exports.currentCompilerFlags());
else
executable = new Executable(fileContents, [], aURL);
diff --git a/Objective-J/Jakefile b/Objective-J/Jakefile
index 2c83a5562..5c5ef03ca 100644
--- a/Objective-J/Jakefile
+++ b/Objective-J/Jakefile
@@ -32,7 +32,7 @@ $BROWSER_FILE = FILE.join("Browser", "Objective-J.js");
$BUILD_OBJECTIVE_J = FILE.join($BUILD_CONFIGURATION_DIR, "Objective-J");
$BUILD_BROWSER_FILE = FILE.join($BUILD_OBJECTIVE_J, "Objective-J.js");
-$INCLUDE_FLAGS = ["-I" + FILE.cwd()];
+$INCLUDE_FLAGS = ["'-I" + FILE.cwd() + "'"];
$DEBUG_FLAGS = $CONFIGURATION === "Debug" ? ["-DDEBUG=1"] : [""];
$OBJECTIVEJ_FILES = new FileList("*.js");
diff --git a/Objective-J/ObjJAcornCompiler.js b/Objective-J/ObjJAcornCompiler.js
index fd7e0e1ec..fb53b2481 100644
--- a/Objective-J/ObjJAcornCompiler.js
+++ b/Objective-J/ObjJAcornCompiler.js
@@ -365,8 +365,6 @@ var MethodDef = function(name, types)
this.types = types;
}
-var currentCompilerFlags = "";
-
var reservedIdentifiers = exports.acorn.makePredicate("self _cmd undefined localStorage arguments");
var wordPrefixOperators = exports.acorn.makePredicate("delete in instanceof new typeof void");
@@ -414,18 +412,26 @@ var ObjJAcornCompiler = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*
}
this.dependencies = [];
- this.flags = flags | ObjJAcornCompiler.Flags.IncludeDebugSymbols;
+ this.flags = flags & (ObjJAcornCompiler.Flags.IncludeDebugSymbols | ObjJAcornCompiler.Flags.InlineMsgSend | ObjJAcornCompiler.Flags.IncludeTypeSignatures);
this.classDefs = classDefs ? classDefs : Object.create(null);
this.protocolDefs = protocolDefs ? protocolDefs : Object.create(null);
this.typeDefs = typeDefs ? typeDefs : Object.create(null);
this.lastPos = 0;
- if (currentCompilerFlags & ObjJAcornCompiler.Flags.Generate)
- this.generate = true;
- this.generate = true;
+ this.generate = true; // Before there was an option to generate the code or copy & paste it from the source. Today we always generate the code.
compile(this.tokens, new Scope(null ,{ compiler: this }), pass === 2 ? pass2 : pass1);
}
+ObjJAcornCompiler.Flags = { };
+
+ObjJAcornCompiler.Flags.IncludeDebugSymbols = 1 << 0;
+ObjJAcornCompiler.Flags.IncludeTypeSignatures = 1 << 1;
+ObjJAcornCompiler.Flags.Generate = 1 << 2;
+ObjJAcornCompiler.Flags.InlineMsgSend = 1 << 3;
+
+var currentCompilerFlags = ObjJAcornCompiler.Flags.IncludeTypeSignatures;
+var currentGccCompilerFlags = "";
+
exports.ObjJAcornCompiler = ObjJAcornCompiler;
exports.ObjJAcornCompiler.compileToExecutable = function(/*String*/ aString, /*CFURL*/ aURL, /*unsigned*/ flags)
@@ -487,7 +493,42 @@ ObjJAcornCompiler.prototype.compilePass2 = function()
return this.jsBuffer.toString();
}
-var currentCompilerFlags = "";
+exports.setCurrentGccCompilerFlags = function(/*String*/ compilerFlags)
+{
+ if (currentGccCompilerFlags === compilerFlags) return;
+
+ currentGccCompilerFlags = compilerFlags;
+
+ var args = compilerFlags.split(" "),
+ count = args.length,
+ objjcFlags = ObjJAcornCompiler.Flags.IncludeTypeSignatures;
+
+ for (var index = 0; index < count; ++index)
+ {
+ var argument = args[index];
+
+ if (argument.indexOf("-g") === 0)
+ objjcFlags |= ObjJAcornCompiler.Flags.IncludeDebugSymbols;
+ else if (argument.indexOf("-O") === 0) {
+ objjcFlags |= ObjJAcornCompiler.Flags.Compress;
+ // FIXME: currently we are sending in '-O2' when we want InlineMsgSend. Here we only check if it is '-O...'.
+ // Maybe we should have some other option for this
+ if (argument.length > 2)
+ objjcFlags |= ObjJAcornCompiler.Flags.InlineMsgSend;
+ }
+ else if (argument.indexOf("-G") === 0)
+ objjcFlags |= ObjJAcornCompiler.Flags.Generate;
+ else if (argument.indexOf("-T") === 0)
+ objjcFlags &= ~ObjJAcornCompiler.Flags.IncludeTypeSignatures;
+ }
+
+ currentCompilerFlags = objjcFlags;
+}
+
+exports.currentGccCompilerFlags = function(/*String*/ compilerFlags)
+{
+ return currentGccCompilerFlags;
+}
exports.setCurrentCompilerFlags = function(/*String*/ compilerFlags)
{
@@ -499,12 +540,6 @@ exports.currentCompilerFlags = function(/*String*/ compilerFlags)
return currentCompilerFlags;
}
-ObjJAcornCompiler.Flags = { };
-
-ObjJAcornCompiler.Flags.IncludeDebugSymbols = 1 << 0;
-ObjJAcornCompiler.Flags.IncludeTypeSignatures = 1 << 1;
-ObjJAcornCompiler.Flags.Generate = 1 << 2;
-
ObjJAcornCompiler.prototype.addWarning = function(/* Warning */ aWarning)
{
this.warnings.push(aWarning);
@@ -1626,64 +1661,170 @@ Literal: function(node, st, c) {
},
ArrayLiteral: function(node, st, c) {
var compiler = st.compiler,
- generate = compiler.generate;
+ generate = compiler.generate,
+ buffer = compiler.jsBuffer;
+
if (!generate) {
- compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, node.start));
+ buffer.concat(compiler.source.substring(compiler.lastPos, node.start));
compiler.lastPos = node.start;
}
if (!generate) buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression.
+ if (!st.receiverLevel) st.receiverLevel = 0;
if (!node.elements.length) {
- compiler.jsBuffer.concat("objj_msgSend(objj_msgSend(CPArray, \"alloc\"), \"init\")");
+ if (compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend) {
+ buffer.concat("(___r");
+ buffer.concat(++st.receiverLevel + "");
+ buffer.concat(" = (CPArray.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPArray, \"alloc\"), ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(" == null ? null : (___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(".isa.method_msgSend[\"init\"] || _objj_forward)(___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(", \"init\"))");
+ } else {
+ buffer.concat("(___r");
+ buffer.concat(++st.receiverLevel + "");
+ buffer.concat(" = CPArray.isa.objj_msgSend0(CPArray, \"alloc\"), ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(" == null ? null : ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(".isa.objj_msgSend0(___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(", \"init\"))");
+ }
+
+ if (!(st.maxReceiverLevel >= st.receiverLevel))
+ st.maxReceiverLevel = st.receiverLevel;
} else {
- compiler.jsBuffer.concat("objj_msgSend(objj_msgSend(CPArray, \"alloc\"), \"initWithObjects:count:\", [");
+ if (compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend) {
+ buffer.concat("(___r");
+ buffer.concat(++st.receiverLevel + "");
+ buffer.concat(" = (CPArray.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPArray, \"alloc\"), ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(" == null ? null : (___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(".isa.method_msgSend[\"initWithObjects:count:\"] || _objj_forward)(___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(", \"initWithObjects:count:\", [");
+ } else {
+ buffer.concat("(___r");
+ buffer.concat(++st.receiverLevel + "");
+ buffer.concat(" = CPArray.isa.objj_msgSend0(CPArray, \"alloc\"), ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(" == null ? null : ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(".isa.objj_msgSend2(___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(", \"initWithObjects:count:\", [");
+ }
+
+ if (!(st.maxReceiverLevel >= st.receiverLevel))
+ st.maxReceiverLevel = st.receiverLevel;
+
for (var i = 0; i < node.elements.length; i++) {
var elt = node.elements[i];
if (i)
- compiler.jsBuffer.concat(", ");
+ buffer.concat(", ");
if (!generate) compiler.lastPos = elt.start;
c(elt, st, "Expression");
- if (!generate) compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, elt.end));
+ if (!generate) buffer.concat(compiler.source.substring(compiler.lastPos, elt.end));
}
- compiler.jsBuffer.concat("], " + node.elements.length + ")");
+ buffer.concat("], " + node.elements.length + "))");
}
+ st.receiverLevel--;
if (!generate) compiler.lastPos = node.end;
},
DictionaryLiteral: function(node, st, c) {
var compiler = st.compiler,
- generate = compiler.generate;
+ generate = compiler.generate,
+ buffer = compiler.jsBuffer,
+ noOfKeys = node.keys.length;
+
if (!generate) {
- compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, node.start));
+ buffer.concat(compiler.source.substring(compiler.lastPos, node.start));
compiler.lastPos = node.start;
}
if (!generate) buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression.
- if (!node.keys.length) {
- compiler.jsBuffer.concat("objj_msgSend(objj_msgSend(CPDictionary, \"alloc\"), \"init\")");
+ if (!st.receiverLevel) st.receiverLevel = 0;
+ if (!noOfKeys) {
+ if (compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend) {
+ buffer.concat("(___r");
+ buffer.concat(++st.receiverLevel + "");
+ buffer.concat(" = (CPDictionary.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPDictionary, \"alloc\"), ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(" == null ? null : (___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(".isa.method_msgSend[\"init\"] || _objj_forward)(___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(", \"init\"))");
+ } else {
+ buffer.concat("(___r");
+ buffer.concat(++st.receiverLevel + "");
+ buffer.concat(" = CPDictionary.isa.objj_msgSend0(CPDictionary, \"alloc\"), ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(" == null ? null : ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(".isa.objj_msgSend0(___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(", \"init\"))");
+ }
+
+ if (!(st.maxReceiverLevel >= st.receiverLevel))
+ st.maxReceiverLevel = st.receiverLevel;
} else {
- compiler.jsBuffer.concat("objj_msgSend(objj_msgSend(CPDictionary, \"alloc\"), \"initWithObjectsAndKeys:\"");
- for (var i = 0; i < node.keys.length; i++) {
- var key = node.keys[i],
- value = node.values[i];
+ if (compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend) {
+ buffer.concat("(___r");
+ buffer.concat(++st.receiverLevel + "");
+ buffer.concat(" = (CPDictionary.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPDictionary, \"alloc\"), ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(" == null ? null : (___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(".isa.method_msgSend[\"initWithObjects:forKeys:\"] || _objj_forward)(___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(", \"initWithObjects:forKeys:\", [");
+ } else {
+ buffer.concat("(___r");
+ buffer.concat(++st.receiverLevel + "");
+ buffer.concat(" = CPDictionary.isa.objj_msgSend0(CPDictionary, \"alloc\"), ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(" == null ? null : ___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(".isa.objj_msgSend2(___r");
+ buffer.concat(st.receiverLevel + "");
+ buffer.concat(", \"initWithObjects:forKeys:\", [");
+ }
- compiler.jsBuffer.concat(", ");
+ if (!(st.maxReceiverLevel >= st.receiverLevel))
+ st.maxReceiverLevel = st.receiverLevel;
+ for (var i = 0; i < noOfKeys; i++) {
+ var value = node.values[i];
+
+ if (i) buffer.concat(", ");
if (!generate) compiler.lastPos = value.start;
c(value, st, "Expression");
- if (!generate) compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, value.end));
+ if (!generate) buffer.concat(compiler.source.substring(compiler.lastPos, value.end));
+ }
- compiler.jsBuffer.concat(", ");
+ buffer.concat("], [");
+ for (var i = 0; i < noOfKeys; i++) {
+ var key = node.keys[i];
+
+ if (i) buffer.concat(", ");
if (!generate) compiler.lastPos = key.start;
c(key, st, "Expression");
- if (!generate) compiler.jsBuffer.concat(compiler.source.substring(compiler.lastPos, key.end));
+ if (!generate) buffer.concat(compiler.source.substring(compiler.lastPos, key.end));
}
- compiler.jsBuffer.concat(")");
+ buffer.concat("]))");
}
+ st.receiverLevel--;
if (!generate) compiler.lastPos = node.end;
},
ImportStatement: function(node, st, c) {
@@ -2184,7 +2325,7 @@ MethodDeclarationStatement: function(node, st, c) {
compiler.jsBuffer.concat("Nil\n");
}
- if (compiler.flags & ObjJAcornCompiler.Flags.IncludeDebugSymbols)
+ if (compiler.flags & ObjJAcornCompiler.Flags.IncludeTypeSignatures)
compiler.jsBuffer.concat(","+JSON.stringify(types));
compiler.jsBuffer.concat(")");
@@ -2257,17 +2398,48 @@ MethodDeclarationStatement: function(node, st, c) {
MessageSendExpression: function(node, st, c) {
var compiler = st.compiler,
generate = compiler.generate,
+ inlineMsgSend = compiler.flags & ObjJAcornCompiler.Flags.InlineMsgSend,
buffer = compiler.jsBuffer,
- nodeObject = node.object;
+ nodeObject = node.object,
+ selectors = node.selectors,
+ arguments = node.arguments,
+ argumentsLength = arguments.length,
+ firstSelector = selectors[0],
+ selector = firstSelector ? firstSelector.name : ""; // There is always at least one selector
+
+ // Put together the selector. Maybe this should be done in the parser...
+ for (var i = 0; i < argumentsLength; i++)
+ if (i === 0)
+ selector += ":";
+ else
+ selector += (selectors[i] ? selectors[i].name : "") + ":";
+
if (!generate) {
buffer.concat(compiler.source.substring(compiler.lastPos, node.start));
compiler.lastPos = nodeObject ? nodeObject.start : node.arguments.length ? node.arguments[0].start : node.end;
+ } else if (!inlineMsgSend) {
+ // Find out the total number of arguments so we can choose appropriate msgSend function. Only needed if call the function and not inline it
+ var totalNoOfParameters = argumentsLength;
+
+ if (node.parameters)
+ totalNoOfParameters += node.parameters.length;
}
if (node.superObject)
{
if (!generate) buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression.
- buffer.concat("objj_msgSendSuper(");
- buffer.concat("{ receiver:self, super_class:" + (st.currentMethodType() === "+" ? compiler.currentSuperMetaClass : compiler.currentSuperClass ) + " }");
+ if (inlineMsgSend) {
+ buffer.concat("(");
+ buffer.concat(st.currentMethodType() === "+" ? compiler.currentSuperMetaClass : compiler.currentSuperClass);
+ buffer.concat(".method_dtable[\"");
+ buffer.concat(selector);
+ buffer.concat("\"] || _objj_forward)(self");
+ } else {
+ buffer.concat("objj_msgSendSuper");
+ if (totalNoOfParameters < 4) {
+ buffer.concat("" + totalNoOfParameters);
+ }
+ buffer.concat("({ receiver:self, super_class:" + (st.currentMethodType() === "+" ? compiler.currentSuperMetaClass : compiler.currentSuperClass ) + " }");
+ }
}
else
{
@@ -2293,6 +2465,8 @@ MessageSendExpression: function(node, st, c) {
c(nodeObject, st, "Expression");
buffer.concat(" == null ? null : ");
}
+ if (inlineMsgSend)
+ buffer.concat("(");
c(nodeObject, st, "Expression");
} else {
receiverIsNotSelf = true;
@@ -2303,12 +2477,20 @@ MessageSendExpression: function(node, st, c) {
c(nodeObject, st, "Expression");
buffer.concat("), ___r");
buffer.concat(st.receiverLevel + "");
- buffer.concat(" == null ? null : ___r");
+ buffer.concat(" == null ? null : ");
+ if (inlineMsgSend)
+ buffer.concat("(");
+ buffer.concat("___r");
buffer.concat(st.receiverLevel + "");
if (!(st.maxReceiverLevel >= st.receiverLevel))
st.maxReceiverLevel = st.receiverLevel;
}
- buffer.concat(".isa.objj_msgSend");
+ if (inlineMsgSend) {
+ buffer.concat(".isa.method_msgSend[\"");
+ buffer.concat(selector);
+ buffer.concat("\"] || _objj_forward)");
+ } else
+ buffer.concat(".isa.objj_msgSend");
} else {
buffer.concat(" "); // Add an extra space if it looks something like this: "return()". No space between return and expression.
buffer.concat("objj_msgSend(");
@@ -2316,19 +2498,11 @@ MessageSendExpression: function(node, st, c) {
}
}
- var selectors = node.selectors,
- arguments = node.arguments,
- argumentsLength = arguments.length,
- firstSelector = selectors[0],
- selector = firstSelector ? firstSelector.name : ""; // There is always at least one selector
-
if (generate && !node.superObject) {
- var totalNoOfParameters = argumentsLength;
-
- if (node.parameters)
- totalNoOfParameters += node.parameters.length;
- if (totalNoOfParameters < 4) {
- buffer.concat("" + totalNoOfParameters);
+ if (!inlineMsgSend) {
+ if (totalNoOfParameters < 4) {
+ buffer.concat("" + totalNoOfParameters);
+ }
}
if (receiverIsIdentifier) {
@@ -2340,13 +2514,6 @@ MessageSendExpression: function(node, st, c) {
}
}
- // Put together the selector. Maybe this should be done in the parser...
- for (var i = 0; i < argumentsLength; i++)
- if (i === 0)
- selector += ":";
- else
- selector += (selectors[i] ? selectors[i].name : "") + ":";
-
buffer.concat(", \"");
buffer.concat(selector); // FIXME: sel_getUid(selector + "") ? This FIXME is from the old preprocessor compiler
buffer.concat("\"");
diff --git a/Objective-J/Runtime.js b/Objective-J/Runtime.js
index e352cf3e1..2229a6e82 100644
--- a/Objective-J/Runtime.js
+++ b/Objective-J/Runtime.js
@@ -49,9 +49,12 @@ GLOBAL(objj_ivar) = function(/*String*/ aName, /*String*/ aType)
GLOBAL(objj_method) = function(/*String*/ aName, /*IMP*/ anImplementation, /*Array*/ types)
{
- this.name = aName;
- this.method_imp = anImplementation;
- this.types = types;
+ var method = anImplementation || function(/*id*/ aReceiver, /*SEL*/ aSelector) {CPException.isa.objj_msgSend2(CPException, "raise:reason:", CPInternalInconsistencyException, aReceiver.isa.method_msgSend0(self, "className") + " does not have an implementation for selector '" + aSelector + "'")};
+ method.method_name = aName;
+ method.method_imp = anImplementation;
+ method.method_types = types;
+
+ return method;
}
GLOBAL(objj_class) = function(displayName)
@@ -197,7 +200,7 @@ GLOBAL(class_addMethod) = function(/*Class*/ aClass, /*SEL*/ aName, /*IMP*/ anIm
#if DEBUG
// Give this function a "pretty" name for the console.
- method.method_imp.displayName = METHOD_DISPLAY_NAME(aClass, method);
+ method.displayName = METHOD_DISPLAY_NAME(aClass, method);
#endif
// FIXME: Should this be done here?
@@ -222,11 +225,11 @@ GLOBAL(class_addMethods) = function(/*Class*/ aClass, /*Array*/ methods)
// FIXME: Don't do it if it exists?
method_list.push(method);
- method_dtable[method.name] = method;
+ method_dtable[method.method_name] = method;
#if DEBUG
// Give this function a "pretty" name for the console.
- method.method_imp.displayName = METHOD_DISPLAY_NAME(aClass, method);
+ method.displayName = METHOD_DISPLAY_NAME(aClass, method);
#endif
}
@@ -292,12 +295,22 @@ GLOBAL(class_replaceMethod) = function(/*Class*/ aClass, /*SEL*/ aSelector, /*IM
return NULL;
var method = aClass.method_dtable[aSelector],
- method_imp = NULL;
+ method_imp = method.method_imp,
+ new_method = new objj_method(method.method_name, aMethodImplementation, method.method_types);
- if (method)
- method_imp = method.method_imp;
+ new_method.displayName = method.displayName;
+ aClass.method_dtable[aSelector] = new_method;
- method.method_imp = aMethodImplementation;
+ var index = aClass.method_list.indexOf(method);
+
+ if (index !== -1)
+ {
+ aClass.method_list[index] = new_method;
+ }
+ else
+ {
+ aClass.method_list.push(new_method);
+ }
return method_imp;
}
@@ -419,7 +432,7 @@ GLOBAL(protocol_addMethodDescriptions) = function(/*Protocol*/ proto, /*Array*/
{
var method = methods[index];
- method_dtable[method.name] = method;
+ method_dtable[method.method_name] = method;
}
}
@@ -491,26 +504,43 @@ var _class_initialize = function(/*Class*/ aClass)
meta.objj_msgSend2 = objj_msgSendFast2;
meta.objj_msgSend3 = objj_msgSendFast3;
+ aClass.method_msgSend = aClass.method_dtable;
+ meta.method_msgSend = meta.method_dtable;
+
meta.objj_msgSend0(aClass, "initialize");
CHANGEINFO(meta, CLS_INITIALIZED, CLS_INITIALIZING);
}
}
-var _objj_forward = function(self, _cmd)
+GLOBAL(_objj_forward) = function(self, _cmd)
{
var isa = self.isa,
- implementation = isa.method_dtable[SEL_forwardingTargetForSelector_];
+ meta = GETMETA(isa);
+
+ if (!GETINFO(meta, CLS_INITIALIZED) && !GETINFO(meta, CLS_INITIALIZING))
+ {
+ _class_initialize(isa);
+ }
+
+ var implementation = isa.method_msgSend[_cmd];
if (implementation)
{
- var target = implementation.method_imp.call(this, self, SEL_forwardingTargetForSelector_, _cmd);
+ return implementation.apply(isa, arguments);
+ }
+
+ implementation = isa.method_dtable[SEL_forwardingTargetForSelector_];
+
+ if (implementation)
+ {
+ var target = implementation(self, SEL_forwardingTargetForSelector_, _cmd);
if (target && target !== self)
{
arguments[0] = target;
- return objj_msgSend.apply(this, arguments);
+ return target.isa.objj_msgSend.apply(target.isa, arguments);
}
}
@@ -522,7 +552,7 @@ var _objj_forward = function(self, _cmd)
if (forwardInvocationImplementation)
{
- var signature = implementation.method_imp.call(this, self, SEL_methodSignatureForSelector_, _cmd);
+ var signature = implementation(self, SEL_methodSignatureForSelector_, _cmd);
if (signature)
{
@@ -541,7 +571,7 @@ var _objj_forward = function(self, _cmd)
invocationIsa.objj_msgSend2(invocation, SEL_setArgument_atIndex_, arguments[index], index);
}
- forwardInvocationImplementation.method_imp.call(this, self, SEL_forwardInvocation_, invocation);
+ forwardInvocationImplementation(self, SEL_forwardInvocation_, invocation);
return invocation == null ? null : invocationIsa.objj_msgSend0(invocation, SEL_returnValue);
}
@@ -552,7 +582,7 @@ var _objj_forward = function(self, _cmd)
implementation = isa.method_dtable[SEL_doesNotRecognizeSelector_];
if (implementation)
- return implementation.method_imp.call(this, self, SEL_doesNotRecognizeSelector_, _cmd);
+ return implementation(self, SEL_doesNotRecognizeSelector_, _cmd);
throw class_getName(isa) + " does not implement doesNotRecognizeSelector:. Did you forget a superclass for " + class_getName(isa) + "?";
};
@@ -562,9 +592,7 @@ var _objj_forward = function(self, _cmd)
if (!ISINITIALIZED(aClass))\
_class_initialize(aClass);\
\
- var method = aClass.method_dtable[aSelector];\
- \
- aMethodImplementation = method ? method.method_imp : _objj_forward;
+ aMethodImplementation = aClass.method_dtable[aSelector] || _objj_forward;
GLOBAL(class_getMethodImplementation) = function(/*Class*/ aClass, /*SEL*/ aSelector)
{
@@ -845,11 +873,28 @@ GLOBAL(objj_msgSendSuper) = function(/*id*/ aSuper, /*SEL*/ aSelector)
return implementation.apply(aSuper.receiver, arguments);
}
+GLOBAL(objj_msgSendSuper0) = function(/*id*/ aSuper, /*SEL*/ aSelector)
+{
+ return (aSuper.super_class.method_dtable[aSelector] || _objj_forward)(aSuper.receiver, aSelector);
+}
+
+GLOBAL(objj_msgSendSuper1) = function(/*id*/ aSuper, /*SEL*/ aSelector, arg0)
+{
+ return (aSuper.super_class.method_dtable[aSelector] || _objj_forward)(aSuper.receiver, aSelector, arg0);
+}
+
+GLOBAL(objj_msgSendSuper2) = function(/*id*/ aSuper, /*SEL*/ aSelector, arg0, arg1)
+{
+ return (aSuper.super_class.method_dtable[aSelector] || _objj_forward)(aSuper.receiver, aSelector, arg0, arg1);
+}
+
+GLOBAL(objj_msgSendSuper3) = function(/*id*/ aSuper, /*SEL*/ aSelector, arg0, arg1, arg2)
+{
+ return (aSuper.super_class.method_dtable[aSelector] || _objj_forward)(aSuper.receiver, aSelector, arg0, arg1, arg2);
+}
+
GLOBAL(objj_msgSendFast) = function(/*id*/ aReceiver, /*SEL*/ aSelector)
{
- var method = this.method_dtable[aSelector],
- implementation = method ? method.method_imp : _objj_forward;
-
#ifdef MAXIMUM_RECURSION_CHECKS
if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH)
throw new Error("Maximum call stack depth exceeded.");
@@ -857,7 +902,7 @@ GLOBAL(objj_msgSendFast) = function(/*id*/ aReceiver, /*SEL*/ aSelector)
try {
#endif
- return implementation.apply(aReceiver, arguments);
+ return (this.method_dtable[aSelector] || _objj_forward).apply(aReceiver, arguments);
#ifdef MAXIMUM_RECURSION_CHECKS
} finally {
@@ -874,9 +919,6 @@ var objj_msgSendFastInitialize = function(/*id*/ aReceiver, /*SEL*/ aSelector)
GLOBAL(objj_msgSendFast0) = function(/*id*/ aReceiver, /*SEL*/ aSelector)
{
- var method = this.method_dtable[aSelector],
- implementation = method ? method.method_imp : _objj_forward;
-
#ifdef MAXIMUM_RECURSION_CHECKS
if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH)
throw new Error("Maximum call stack depth exceeded.");
@@ -884,7 +926,7 @@ GLOBAL(objj_msgSendFast0) = function(/*id*/ aReceiver, /*SEL*/ aSelector)
try {
#endif
- return implementation(aReceiver, aSelector);
+ return (this.method_dtable[aSelector] || _objj_forward)(aReceiver, aSelector);
#ifdef MAXIMUM_RECURSION_CHECKS
} finally {
@@ -901,9 +943,6 @@ var objj_msgSendFast0Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector)
GLOBAL(objj_msgSendFast1) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0)
{
- var method = this.method_dtable[aSelector],
- implementation = method ? method.method_imp : _objj_forward;
-
#ifdef MAXIMUM_RECURSION_CHECKS
if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH)
throw new Error("Maximum call stack depth exceeded.");
@@ -911,7 +950,7 @@ GLOBAL(objj_msgSendFast1) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0)
try {
#endif
- return implementation(aReceiver, aSelector, arg0);
+ return (this.method_dtable[aSelector] || _objj_forward)(aReceiver, aSelector, arg0);
#ifdef MAXIMUM_RECURSION_CHECKS
} finally {
@@ -928,9 +967,6 @@ var objj_msgSendFast1Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector,
GLOBAL(objj_msgSendFast2) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1)
{
- var method = this.method_dtable[aSelector],
- implementation = method ? method.method_imp : _objj_forward;
-
#ifdef MAXIMUM_RECURSION_CHECKS
if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH)
throw new Error("Maximum call stack depth exceeded.");
@@ -938,7 +974,7 @@ GLOBAL(objj_msgSendFast2) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0,
try {
#endif
- return implementation(aReceiver, aSelector, arg0, arg1);
+ return (this.method_dtable[aSelector] || _objj_forward)(aReceiver, aSelector, arg0, arg1);
#ifdef MAXIMUM_RECURSION_CHECKS
} finally {
@@ -955,9 +991,6 @@ var objj_msgSendFast2Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector,
GLOBAL(objj_msgSendFast3) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0, arg1, arg2)
{
- var method = this.method_dtable[aSelector],
- implementation = method ? method.method_imp : _objj_forward;
-
#ifdef MAXIMUM_RECURSION_CHECKS
if (__objj_msgSend__StackDepth++ > MAXIMUM_RECURSION_DEPTH)
throw new Error("Maximum call stack depth exceeded.");
@@ -965,7 +998,7 @@ GLOBAL(objj_msgSendFast3) = function(/*id*/ aReceiver, /*SEL*/ aSelector, arg0,
try {
#endif
- return implementation(aReceiver, aSelector, arg0, arg1, arg2);
+ return (this.method_dtable[aSelector] || _objj_forward)(aReceiver, aSelector, arg0, arg1, arg2);
#ifdef MAXIMUM_RECURSION_CHECKS
} finally {
@@ -984,7 +1017,55 @@ var objj_msgSendFast3Initialize = function(/*id*/ aReceiver, /*SEL*/ aSelector,
GLOBAL(method_getName) = function(/*Method*/ aMethod)
{
- return aMethod.name;
+ return aMethod.method_name;
+}
+
+// This will not return correct values if the compiler does not have the option 'IncludeTypeSignatures'
+GLOBAL(method_copyReturnType) = function(/*Method*/ aMethod)
+{
+ var types = aMethod.method_types;
+
+ if (types)
+ {
+ var argType = types[0];
+
+ return argType != NULL ? argType : NULL;
+ }
+ else
+ return NULL;
+}
+
+// This will not return correct values for index > 1 if the compiler does not have the option 'IncludeTypeSignatures'
+GLOBAL(method_copyArgumentType) = function(/*Method*/ aMethod, /*unsigned int*/ index)
+{
+ switch (index) {
+ case 0:
+ return "id";
+
+ case 1:
+ return "SEL";
+
+ default:
+ var types = aMethod.method_types;
+
+ if (types)
+ {
+ var argType = types[index - 1];
+
+ return argType != NULL ? argType : NULL;
+ }
+ else
+ return NULL;
+ }
+}
+
+// Returns number of arguments for a method. The first argument is 'self' and the second is the selector.
+// Those are followed by the method arguments. So for example it will return 2 for a method with no arguments.
+GLOBAL(method_getNumberOfArguments) = function(/*Method*/ aMethod)
+{
+ var types = aMethod.method_types;
+
+ return types ? types.length + 1 : ((aMethod.method_name.match(/:/g) || []).length + 2);
}
GLOBAL(method_getImplementation) = function(/*Method*/ aMethod)
@@ -1050,6 +1131,7 @@ objj_class.prototype.objj_msgSend0 = objj_msgSendFast0Initialize;
objj_class.prototype.objj_msgSend1 = objj_msgSendFast1Initialize;
objj_class.prototype.objj_msgSend2 = objj_msgSendFast2Initialize;
objj_class.prototype.objj_msgSend3 = objj_msgSendFast3Initialize;
+objj_class.prototype.method_msgSend = Object.create(null);
var SEL_description = sel_getUid("description"),
SEL_forwardingTargetForSelector_ = sel_getUid("forwardingTargetForSelector:"),
diff --git a/README.markdown b/README.markdown
index d8ffab704..3883145f2 100644
--- a/README.markdown
+++ b/README.markdown
@@ -1,4 +1,4 @@
-[](https://travis-ci.org/cappuccino/cappuccino)
+[](https://travis-ci.org/cappuccino/cappuccino) [](https://gitter.im/cappuccino/cappuccino?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Welcome to Cappuccino!
======================
@@ -15,7 +15,7 @@ with the complexities of traditional web technologies like HTML, CSS, or even
the DOM. The unpleasantries of building complex cross browser applications are
abstracted away for you.
-For more information, see .
+For more information, see . Follow [@cappuccino](https://twitter.com/cappuccino) on Twitter for updates on the project.
System Requirements
-------------------
diff --git a/Tests/AppKit/CPTabViewTest.j b/Tests/AppKit/CPTabViewTest.j
index d0599435b..a8e13ff71 100644
--- a/Tests/AppKit/CPTabViewTest.j
+++ b/Tests/AppKit/CPTabViewTest.j
@@ -40,6 +40,8 @@
[_tabView addTabViewItem:_tabItem1];
[_tabView addTabViewItem:_tabItem2];
+
+ [[CPRunLoop currentRunLoop] performSelectors];
}
- (void)testCreate
@@ -94,4 +96,46 @@
[self assertNull:[_tabItem1 tabView]];
}
+- (void)testInsertTabViewItem
+{
+ [_tabView selectTabViewItem:_tabItem2];
+
+ [self assert:[_tabView numberOfTabViewItems] equals:2];
+ [self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
+
+ var tabItem3 = [[CPTabViewItem alloc] initWithIdentifier:@"insert"];
+ [tabItem3 setLabel:@"insert"];
+ [_tabView insertTabViewItem:tabItem3 atIndex:0];
+
+ [self assert:[_tabView numberOfTabViewItems] equals:3];
+ [self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
+ [self assert:[_tabView indexOfTabViewItem:tabItem3] equals:0];
+}
+
+- (void)testRemoveSelectedTabViewItem
+{
+ [_tabView selectTabViewItem:_tabItem2];
+
+ [self assert:[_tabView numberOfTabViewItems] equals:2];
+ [self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
+
+ [_tabView removeTabViewItem:_tabItem2];
+
+ [self assert:[_tabView numberOfTabViewItems] equals:1];
+ [self assert:[_tabView selectedTabViewItem] equals:_tabItem1];
+}
+
+- (void)testRemoveSelectedFirstTabViewItem
+{
+ [_tabView selectTabViewItem:_tabItem1];
+
+ [self assert:[_tabView numberOfTabViewItems] equals:2];
+ [self assert:[_tabView selectedTabViewItem] equals:_tabItem1];
+
+ [_tabView removeTabViewItem:_tabItem1];
+
+ [self assert:[_tabView numberOfTabViewItems] equals:1];
+ [self assert:[_tabView selectedTabViewItem] equals:_tabItem2];
+}
+
@end
diff --git a/Tests/AppKit/CPThemeTest.j b/Tests/AppKit/CPThemeTest.j
index e6fc1494c..f0e21e987 100644
--- a/Tests/AppKit/CPThemeTest.j
+++ b/Tests/AppKit/CPThemeTest.j
@@ -56,20 +56,20 @@
- (void)testThemeAttributeValueForState
{
- var themeAttribute = [[_CPThemeAttribute alloc] initWithName:@"test" defaultValue:5];
+ var themeAttribute = [[_CPThemeAttribute alloc] initWithName:@"test" defaultValue:5 defaultAttribute:nil];
[self assertTrue:([themeAttribute valueForState:CPThemeState("aState")] == 5) message:"Return the default value for the theme attribute if the theme attribute has no value defined for the given state"];
- [themeAttribute setValue:7 forState:CPThemeState("aState")];
+ themeAttribute = [themeAttribute attributeBySettingValue:7 forState:CPThemeState("aState")];
[self assertTrue:([themeAttribute valueForState:CPThemeState("aState")] == 7) message:"Return the correct value for the state if the state is defined"];
- [themeAttribute setValue:8 forState:CPThemeState('normal')];
+ themeAttribute = [themeAttribute attributeBySettingValue:8 forState:CPThemeState('normal')];
[self assertTrue:([themeAttribute valueForState:CPThemeState("aState1")] == 8) message:"Return the normal value for the state if the theme attribute has no value defined for the given state but has a value for the normal state defined"];
- [themeAttribute setValue:10 forState:CPThemeState('aState3+aState4')];
+ themeAttribute = [themeAttribute attributeBySettingValue:10 forState:CPThemeState('aState3+aState4')];
[self assertTrue:([themeAttribute valueForState:CPThemeState("aState3")] == 8) message:"Return the normal value for the state if the state is only a partial match on the theme attributes defined states"];
[self assertTrue:([themeAttribute valueForState:CPThemeState("aState4+aState3")] == 10) message:"Correctly match combined states on the theme attribute"];
- [themeAttribute setValue:9 forState:CPThemeState('aState3')];
+ themeAttribute = [themeAttribute attributeBySettingValue:9 forState:CPThemeState('aState3')];
[self assertTrue:([themeAttribute valueForState:CPThemeState("aState8+aState3+aState4")] == 10) message:"Return the largest partial subset match for a combined state that isn't a perfect match"];
}
diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j
index 9c11b4de5..383db1a99 100644
--- a/Tests/AppKit/CPViewTest.j
+++ b/Tests/AppKit/CPViewTest.j
@@ -2,6 +2,14 @@
@import
var methodCalled;
+var updateTrackingAreasCalls,
+ mouseEnteredCalls,
+ mouseExitedCalls,
+ mouseMovedCalls,
+ cursorUpdateCalls,
+ involvedViewForMouseEntered,
+ involvedViewForMouseExited,
+ involvedViewForCursorUpdate;
@implementation CPViewTest : OJTestCase
{
@@ -30,6 +38,7 @@ var methodCalled;
[view3 setIdentifier:@"view3"];
methodCalled = [];
+ updateTrackingAreasCalls = 0;
[super setUp];
}
@@ -69,7 +78,7 @@ var methodCalled;
[self assertTrue:[view hasThemeState:CPThemeStateDisabled] message:@"CPView should be in state CPThemeStateDisabled"];
[self assertTrue:[view hasThemeState:CPThemeStateBordered] message:@"CPView should be in state CPThemeStateBordered"];
[self assertTrue:[view hasThemeState:CPThemeState(CPThemeStateBordered, CPThemeStateDisabled)] message:@"CPView should be in the combined state of CPThemeStateDisabled and CPThemeStateBordered"];
- [self assertTrue:[view hasThemeState:[CPThemeStateBordered, CPThemeStateDisabled]] message:@"hasThemeState works with an array argument"];
+ [self assertTrue:[view hasThemeStates:[CPThemeStateBordered, CPThemeStateDisabled]] message:@"hasThemeState works with an array argument"];
[self assertFalse:[view hasThemeState:CPThemeState(CPThemeStateNormal)] message:@"CPView should not be in CPThemeStateNormal"];
}
@@ -94,7 +103,7 @@ var methodCalled;
[self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"];
[view unsetThemeState:[view themeState]];
- [view setThemeState:[CPThemeStateSelected, CPThemeStateDisabled]];
+ [view setThemeStates:[CPThemeStateSelected, CPThemeStateDisabled]];
[self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)) equals:String([view themeState]) message:@"setThemeState works with array argument"];
}
@@ -117,20 +126,20 @@ var methodCalled;
[self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state"];
[view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)];
- [view unsetThemeState:[CPThemeStateBordered, CPThemeStateHighlighted]];
+ [view unsetThemeStates:[CPThemeStateBordered, CPThemeStateHighlighted]];
[self assert:String(CPThemeStateDisabled) equals:String([view themeState]) message:@"unsetThemeState works with array argument"];
[view setThemeState:CPThemeStateDisabled];
- [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]];
+ [view unsetThemeStates:[CPThemeStateDisabled, CPThemeStateHighlighted]];
[self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has more theme states than the view currently has"];
[view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)];
- var returnValue = [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]];
+ var returnValue = [view unsetThemeStates:[CPThemeStateDisabled, CPThemeStateHighlighted]];
[self assert:String(CPThemeStateBordered) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has not entirely overlapping themestates"];
[self assertTrue:returnValue message:@"When unsetThemeState successfully unsets anything, it return YES"];
[view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)];
- var returnValue = [view unsetThemeState:[CPThemeStateSelected, CPThemeStateHighlighted]];
+ var returnValue = [view unsetThemeStates:[CPThemeStateSelected, CPThemeStateHighlighted]];
[self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)) equals:String([view themeState]) message:@"CPView not unset any theme states it does not have"];
[self assertFalse:returnValue message:@"When unsetThemeState doesn't unset anything, it returns NO"];
@@ -886,6 +895,759 @@ var methodCalled;
[self assert:nil equals:[view effectiveAppearance]];
}
+// TrackingAreaAdditions
+
+- (void)testTrackingAreas
+{
+ var trackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect owner:self userInfo:nil];
+
+ [self assert:0 equals:[[view trackingAreas] count] message:@"Initially, a view has no tracking area"];
+
+ //
+
+ [view addTrackingArea:trackingArea];
+ [self assert:1 equals:[[view trackingAreas] count] message:@"After adding a tracking area"];
+ [self assert:view equals:[trackingArea view] message:@"Tracking area should be linked to view"];
+
+ //
+
+ [view removeTrackingArea:trackingArea];
+ [self assert:0 equals:[[view trackingAreas] count] message:@"After removing the only tracking area"];
+ [self assert:nil equals:[trackingArea view] message:@"Tracking area should be unlinked"];
+
+ //
+
+ [view addTrackingArea:trackingArea];
+ [view addTrackingArea:trackingArea];
+ [view addTrackingArea:trackingArea];
+ [self assert:1 equals:[[view trackingAreas] count] message:@"Adding the same tracking area multiple times should add it once"];
+ [self assert:view equals:[trackingArea view] message:@"Tracking area should be linked to view"];
+
+ var trackingArea2 = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow owner:self userInfo:nil];
+
+ //
+
+ [view addTrackingArea:trackingArea2];
+ [self assert:2 equals:[[view trackingAreas] count] message:@"After adding a second tracking area"];
+ [self assert:view equals:[trackingArea2 view] message:@"Tracking area should be linked to view"];
+
+ //
+
+ [view removeAllTrackingAreas];
+ [self assert:0 equals:[[view trackingAreas] count] message:@"After removing all tracking areas"];
+ [self assert:nil equals:[trackingArea view] message:@"Tracking area should be unlinked"];
+ [self assert:nil equals:[trackingArea2 view] message:@"Tracking area should be unlinked"];
+
+ //
+
+ [view addTrackingArea:trackingArea];
+
+ var contentView = [window contentView];
+
+ [contentView addSubview:view];
+ [self assert:0 equals:updateTrackingAreasCalls message:@"Putting a view with a CPTrackingAreaInVisibleRect in a window should not call updateTrackingAreas"];
+
+ [view removeFromSuperview];
+
+ //
+
+ [view addTrackingArea:trackingArea2];
+ [contentView addSubview:view];
+ [self assert:1 equals:updateTrackingAreasCalls message:@"Putting a view with a non CPTrackingAreaInVisibleRect in a window should call updateTrackingAreas"];
+
+ [view removeAllTrackingAreas];
+
+ //
+
+ var viewTA = [[CPTrackingAreaView alloc] initWithFrame:CGRectMakeZero()];
+ updateTrackingAreasCalls = 0;
+
+ [contentView addSubview:viewTA];
+ [self assert:1 equals:updateTrackingAreasCalls message:@"Putting a view with no tracking areas in a window should call updateTrackingAreas"];
+
+ //
+
+ updateTrackingAreasCalls = 0;
+
+ [viewTA addTrackingArea:trackingArea];
+ [viewTA setFrame:CGRectMake(10, 10, 10, 10)];
+ [self assert:0 equals:updateTrackingAreasCalls message:@"Changing geometry of a view with a CPTrackingAreaInVisibleRect should not call updateTrackingAreas"];
+
+ //
+
+ updateTrackingAreasCalls = 0;
+
+ [viewTA addTrackingArea:trackingArea2];
+ [viewTA setFrame:CGRectMake(20, 20, 20, 20)];
+ [self assert:1 equals:updateTrackingAreasCalls message:@"Changing geometry of a view with a non CPTrackingAreaInVisibleRect should call updateTrackingAreas"];
+
+ //
+
+ var trackingAreaAll = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect owner:viewTA userInfo:nil];
+
+ [viewTA removeAllTrackingAreas];
+ [viewTA addTrackingArea:trackingAreaAll];
+
+ // Mouse enters the tracking area
+
+ [self moveMouseAtPoint:CGPointMake(21, 21) dragging:NO];
+
+ [self assert:1 equals:mouseEnteredCalls message:@"Mouse entering a tracking area should call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"Mouse entering a tracking area should not call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"Mouse entering a tracking area should not call mouseMoved"];
+ [self assert:1 equals:cursorUpdateCalls message:@"Mouse entering a tracking area should call cursorUpdate"];
+
+ // Mouse moves in the tracking area
+
+ [self moveMouseAtPoint:CGPointMake(22, 22) dragging:NO];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"Mouse moving in a tracking area should not call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"Mouse moving in a tracking area should not call mouseExited"];
+ [self assert:1 equals:mouseMovedCalls message:@"Mouse moving in a tracking area should call mouseMoved"];
+ [self assert:0 equals:cursorUpdateCalls message:@"Mouse moving in a tracking area should not call cursorUpdate"];
+
+ // Mouse exits from the tracking area
+
+ [self moveMouseAtPoint:CGPointMake(0, 0) dragging:NO];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"Mouse exiting from a tracking area should not call mouseEntered"];
+ [self assert:1 equals:mouseExitedCalls message:@"Mouse exiting from a tracking area should call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"Mouse exiting from a tracking area should not call mouseMoved"];
+ [self assert:0 equals:cursorUpdateCalls message:@"Mouse exiting from a tracking area should not call cursorUpdate"];
+
+ // Mouse enters the tracking area while dragging
+
+ [self moveMouseAtPoint:CGPointMake(21, 21) dragging:YES];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse entering a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse entering a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse entering a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseMoved"];
+ [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse entering a tracking area without CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"];
+
+ // Mouse moves in the tracking area while dragging
+
+ [self moveMouseAtPoint:CGPointMake(22, 22) dragging:YES];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse moving in a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse moving in a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse moving in a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseMoved"];
+ [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse moving in a tracking area without CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"];
+
+ // Mouse exits from the tracking area while dragging
+
+ [self moveMouseAtPoint:CGPointMake(0, 0) dragging:YES];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse exiting from a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse exiting from a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse exiting from a tracking area without CPTrackingEnabledDuringMouseDrag should not call mouseMoved"];
+ [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse exiting from a tracking area without CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"];
+
+ //
+
+ var trackingAreaAllWithDrag = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect | CPTrackingEnabledDuringMouseDrag owner:viewTA userInfo:nil];
+
+ [viewTA removeAllTrackingAreas];
+ [viewTA addTrackingArea:trackingAreaAllWithDrag];
+
+ // Mouse enters the tracking area while dragging (option set)
+
+ [self moveMouseAtPoint:CGPointMake(21, 21) dragging:YES];
+
+ [self assert:1 equals:mouseEnteredCalls message:@"While dragging, mouse entering a tracking area with CPTrackingEnabledDuringMouseDrag should call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse entering a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse entering a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseMoved"];
+ [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse entering a tracking area with CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"];
+
+ // Mouse moves in the tracking area while dragging (option set)
+
+ [self moveMouseAtPoint:CGPointMake(22, 22) dragging:YES];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse moving in a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"While dragging, mouse moving in a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse moving in a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseMoved"];
+ [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse moving in a tracking area with CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"];
+
+ // Mouse exits from the tracking area while dragging (option set)
+
+ [self moveMouseAtPoint:CGPointMake(0, 0) dragging:YES];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"While dragging, mouse exiting from a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseEntered"];
+ [self assert:1 equals:mouseExitedCalls message:@"While dragging, mouse exiting from a tracking area with CPTrackingEnabledDuringMouseDrag should call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"While dragging, mouse exiting from a tracking area with CPTrackingEnabledDuringMouseDrag should not call mouseMoved"];
+ [self assert:0 equals:cursorUpdateCalls message:@"While dragging, mouse exiting from a tracking area with CPTrackingEnabledDuringMouseDrag should not call cursorUpdate"];
+
+ // Nested views
+
+ var innerViewTA = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(5, 5, 10, 10)];
+
+ [viewTA addSubview:innerViewTA];
+
+ var innerTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect owner:innerViewTA userInfo:nil];
+
+ [innerViewTA addTrackingArea:innerTrackingArea];
+
+ // Mouse enters outer view
+
+ [self moveMouseAtPoint:CGPointMake(21, 21) dragging:NO];
+
+ [self assert:1 equals:mouseEnteredCalls message:@"Mouse entering outer tracking area should call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"Mouse entering outer tracking area should not call mouseExited"];
+ [self assert:0 equals:mouseMovedCalls message:@"Mouse entering outer tracking area should not call mouseMoved"];
+ [self assert:1 equals:cursorUpdateCalls message:@"Mouse entering outer tracking area should call cursorUpdate"];
+
+ // Mouse enters inner view
+
+ [self moveMouseAtPoint:CGPointMake(26, 26) dragging:NO];
+
+ [self assert:1 equals:mouseEnteredCalls message:@"Mouse entering inner tracking area should call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"Mouse entering inner tracking area should not call mouseExited"];
+ [self assert:1 equals:mouseMovedCalls message:@"Mouse entering inner tracking area should call mouseMoved"];
+ [self assert:1 equals:cursorUpdateCalls message:@"Mouse entering inner tracking area should call cursorUpdate"];
+
+ // Mouse moves in inner view
+
+ [self moveMouseAtPoint:CGPointMake(27, 27) dragging:NO];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"Mouse moving in inner tracking area should not call mouseEntered"];
+ [self assert:0 equals:mouseExitedCalls message:@"Mouse moving in inner tracking area should not call mouseExited"];
+ [self assert:2 equals:mouseMovedCalls message:@"Mouse moving in inner tracking area should call mouseMoved for both views"];
+ [self assert:0 equals:cursorUpdateCalls message:@"Mouse moving in inner tracking area should not call cursorUpdate"];
+
+ // Mouse leaves inner view but remains in outer view
+
+ [self moveMouseAtPoint:CGPointMake(36, 36) dragging:NO];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"Mouse moving from inner to outer tracking area should not call mouseEntered"];
+ [self assert:1 equals:mouseExitedCalls message:@"Mouse moving from inner to outer tracking area should call mouseExited (for inner)"];
+ [self assert:1 equals:mouseMovedCalls message:@"Mouse moving from inner to outer tracking area should call mouseMoved (for outer)"];
+ [self assert:1 equals:cursorUpdateCalls message:@"Mouse moving from inner to outer tracking area should call cursorUpdate (for outer)"];
+
+ [self assert:innerViewTA equals:involvedViewForMouseExited message:@"Inner view should receive mouseExited"];
+ [self assert:viewTA equals:involvedViewForCursorUpdate message:@"Outer view should receive cursorUpdate"];
+
+ // Complex test for cursor update frontmost tracking area detection
+
+ var viewA = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(0, 30, 40, 40)],
+ viewB = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(30, 20, 40, 40)],
+ viewC = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(10, 0, 40, 40)];
+
+ [contentView setSubviews:[CPArray array]];
+ [contentView addSubview:viewA];
+ [contentView addSubview:viewB];
+ [contentView addSubview:viewC];
+
+ var subviewA = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(20, 0, 20, 20)],
+ subviewB = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)],
+ subviewC = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(0, 20, 40, 20)];
+
+ [viewA addSubview:subviewA];
+ [viewB addSubview:subviewB];
+ [viewC addSubview:subviewC];
+
+ var options = CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect,
+ options2 = CPTrackingMouseEnteredAndExited | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect,
+ options3 = CPTrackingCursorUpdate | CPTrackingActiveInActiveApp,
+ viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil],
+ viewBTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewB userInfo:nil],
+ viewCTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options2 owner:viewC userInfo:nil],
+ subviewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:subviewA userInfo:nil],
+ subviewBTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:subviewB userInfo:nil],
+ subviewCtrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMake(20, 0, 20, 20) options:options3 owner:subviewC userInfo:nil];
+
+ [viewA addTrackingArea:viewATrackingArea];
+ [viewB addTrackingArea:viewBTrackingArea];
+ [viewC addTrackingArea:viewCTrackingArea];
+
+ [subviewA addTrackingArea:subviewATrackingArea];
+ [subviewB addTrackingArea:subviewBTrackingArea];
+ [subviewC addTrackingArea:subviewCtrackingArea];
+
+ // Step 1
+
+ [self moveMouseAtPoint:CGPointMake(5, 25) dragging:NO];
+
+ [self assert:0 equals:cursorUpdateCalls message:@"Step 1 : no cursorUpdate should be called"];
+ [self assert:nil equals:involvedViewForCursorUpdate message:@"Step 1 : no view should be called for cursorUpdate"];
+
+ // Step 2
+
+ [self moveMouseAtPoint:CGPointMake(5, 35) dragging:NO];
+
+ [self assert:1 equals:cursorUpdateCalls message:@"Step 2 : 1 cursorUpdate should be called"];
+ [self assert:viewA equals:involvedViewForCursorUpdate message:@"Step 2 : viewA should be called for cursorUpdate"];
+
+ // Step 3
+
+ [self moveMouseAtPoint:CGPointMake(15, 35) dragging:NO];
+
+ [self assert:0 equals:cursorUpdateCalls message:@"Step 3 : no cursorUpdate should be called"];
+ [self assert:nil equals:involvedViewForCursorUpdate message:@"Step 3 : no view should be called for cursorUpdate"];
+
+ // Step 4
+
+ [self moveMouseAtPoint:CGPointMake(25, 35) dragging:NO];
+
+ [self assert:1 equals:cursorUpdateCalls message:@"Step 4 : 1 cursorUpdate should be called"];
+ [self assert:subviewA equals:involvedViewForCursorUpdate message:@"Step 4 : subviewA should be called for cursorUpdate"];
+
+ // Step 5
+
+ [self moveMouseAtPoint:CGPointMake(35, 35) dragging:NO];
+
+ [self assert:1 equals:cursorUpdateCalls message:@"Step 5 : 1 cursorUpdate should be called"];
+ [self assert:subviewC equals:involvedViewForCursorUpdate message:@"Step 5 : subviewC should be called for cursorUpdate"];
+
+ // Step 6
+
+ [self moveMouseAtPoint:CGPointMake(45, 35) dragging:NO];
+
+ [self assert:0 equals:cursorUpdateCalls message:@"Step 6 : no cursorUpdate should be called"];
+ [self assert:nil equals:involvedViewForCursorUpdate message:@"Step 6 : no view should be called for cursorUpdate"];
+
+ // Step 7
+
+ [self moveMouseAtPoint:CGPointMake(55, 35) dragging:NO];
+
+ [self assert:1 equals:cursorUpdateCalls message:@"Step 7 : 1 cursorUpdate should be called"];
+ [self assert:viewB equals:involvedViewForCursorUpdate message:@"Step 7 : viewB should be called for cursorUpdate"];
+
+ // Step 8
+
+ [self moveMouseAtPoint:CGPointMake(75, 35) dragging:NO];
+
+ [self assert:0 equals:cursorUpdateCalls message:@"Step 8 : no cursorUpdate should be called"];
+ [self assert:nil equals:involvedViewForCursorUpdate message:@"Step 8 : no view should be called for cursorUpdate"];
+
+ // Cursor tests
+
+ var viewA = [[CPTrackingAreaViewWithCursorUpdate alloc] initWithFrame:CGRectMake(20, 20, 40, 40)],
+ viewB = [[CPTrackingAreaView alloc] initWithFrame:CGRectMake(10, 10, 80, 80)],
+ viewC = [[CPTrackingAreaViewWithoutCursorUpdate alloc] initWithFrame:CGRectMake(10, 10, 80, 80)];
+
+ [contentView setSubviews:[CPArray array]];
+ [contentView addSubview:viewA];
+
+ var options = CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect;
+
+ var viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil],
+ viewBTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewB userInfo:nil],
+ viewCTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewC userInfo:nil];
+
+ [viewA addTrackingArea:viewATrackingArea];
+ [viewB addTrackingArea:viewBTrackingArea];
+ [viewC addTrackingArea:viewCTrackingArea];
+
+ // Step 1.1 : outside the view
+
+ [self moveMouseAtPoint:CGPointMake(10, 10) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 1.1 : cursor should be an arrow"];
+
+ // Step 1.2 : inside the view
+
+ [self moveMouseAtPoint:CGPointMake(30, 30) dragging:NO];
+
+ [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 1.2 : cursor should be a crosshair"];
+
+ // Step 1.3 : outside the view
+
+ [self moveMouseAtPoint:CGPointMake(70, 70) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 1.3 : cursor should be an arrow"];
+
+ // Step 1.4 : inside the view with dragging
+
+ [self moveMouseAtPoint:CGPointMake(30, 30) dragging:YES];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 1.4 : cursor should be an arrow"];
+
+ // Step 1.5 : mouse up (ends dragging)
+
+ [self mouseUpAtPoint:CGPointMake(30, 30)];
+
+ [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 1.5 : cursor should be a crosshair"];
+
+ // Step 1.6 : outside the view with dragging
+
+ [self moveMouseAtPoint:CGPointMake(10, 10) dragging:YES];
+
+ [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 1.6 : cursor should be a crosshair"];
+
+ // Step 1.7 : mouse up (ends dragging)
+
+ [self mouseUpAtPoint:CGPointMake(10, 10)];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 1.7 : cursor should be an arrow"];
+
+ //
+
+ [self moveMouseAtPoint:CGPointMake(1, 1) dragging:NO];
+
+ [viewA removeFromSuperview];
+ [contentView addSubview:viewB];
+ [viewB addSubview:viewA];
+
+ // Step 2.1 : outside the superview
+
+ [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 2.1 : cursor should be an arrow"];
+
+ // Step 2.2 : inside the superview / outside the subview
+
+ [self moveMouseAtPoint:CGPointMake(15, 15) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 2.2 : cursor should be an arrow"];
+
+ // Step 2.3 : inside the subview
+
+ [self moveMouseAtPoint:CGPointMake(35, 35) dragging:NO];
+
+ [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 2.3 : cursor should be a crosshair"];
+
+ // Step 2.4 : outside the subview / inside the superview
+
+ [self moveMouseAtPoint:CGPointMake(15, 15) dragging:NO];
+
+ [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 2.4 : cursor should be a crosshair"];
+
+ // Step 2.5 : outside the superview
+
+ [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 2.5 : cursor should be an arrow"];
+
+ //
+
+ [self moveMouseAtPoint:CGPointMake(1, 1) dragging:NO];
+
+ [viewA removeFromSuperview];
+ [viewB removeFromSuperview];
+ [contentView addSubview:viewC];
+ [viewC addSubview:viewA];
+
+ // Step 3.1 : outside the superview
+
+ [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 3.1 : cursor should be an arrow"];
+
+ // Step 3.2 : inside the superview / outside the subview
+
+ [self moveMouseAtPoint:CGPointMake(15, 15) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 3.2 : cursor should be an arrow"];
+
+ // Step 3.3 : inside the subview
+
+ [self moveMouseAtPoint:CGPointMake(35, 35) dragging:NO];
+
+ [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"Step 3.3 : cursor should be a crosshair"];
+
+ // Step 3.4 : outside the subview / inside the superview
+
+ [self moveMouseAtPoint:CGPointMake(15, 15) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 3.4 : cursor should be an arrow"];
+
+ // Step 3.5 : outside the superview
+
+ [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO];
+
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"Step 3.5 : cursor should be an arrow"];
+
+}
+
+- (void)testTrackingAreasLiveViewHierarchyModification
+{
+ // 1. viewB inside viewA with mouseEntered removing itself
+
+ var viewA = [[CPTrackingAreaViewWithCursorUpdate alloc] initWithFrame:CGRectMake(20, 20, 40, 40)]
+ viewB = [[CPTrackingAreaViewLiveRemoval alloc] initWithFrame:CGRectMake(10, 10, 20, 20)];
+
+ [[window contentView] setSubviews:[CPArray arrayWithObject:viewA]];
+ [viewA addSubview:viewB];
+
+ var options = CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect,
+ viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil],
+ viewBTrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewB userInfo:nil];
+
+ [viewA addTrackingArea:viewATrackingArea];
+ [viewB addTrackingArea:viewBTrackingArea];
+
+ // Step 1.1 : enter viewA
+
+ [self moveMouseAtPoint:CGPointMake(25, 25) dragging:NO];
+
+ [self assert:1 equals:mouseEnteredCalls message:@"1.1 There should be one and only one mouseEntered call"];
+ [self assert:0 equals:mouseExitedCalls message:@"1.1 There should be no mouseExited call"];
+ [self assert:0 equals:mouseMovedCalls message:@"1.1 There should be no mouseMoved call"];
+ [self assert:1 equals:cursorUpdateCalls message:@"1.1 There should be one and only one cursorUpdate call"];
+
+ [self assert:viewA equals:involvedViewForMouseEntered message:@"1.1 viewA should receive mouseEntered"];
+ [self assert:viewA equals:involvedViewForCursorUpdate message:@"1.1 viewA should receive cursorUpdate"];
+
+ // Step 1.2 : enter viewB
+
+ [self moveMouseAtPoint:CGPointMake(40, 40) dragging:NO];
+
+ [self assert:1 equals:mouseEnteredCalls message:@"1.2 There should be one and only one mouseEntered call"];
+ [self assert:0 equals:mouseExitedCalls message:@"1.2 There should be no mouseExited call"];
+ [self assert:0 equals:mouseMovedCalls message:@"1.2 There should be no mouseMoved call"];
+ [self assert:0 equals:cursorUpdateCalls message:@"1.2 There should be no cursorUpdate call"];
+
+ [self assert:viewB equals:involvedViewForMouseEntered message:@"1.2 viewB should receive mouseEntered"];
+
+ // Step 1.3 : move back to viewA (there should be no more viewB)
+
+ [self moveMouseAtPoint:CGPointMake(25, 25) dragging:NO];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"1.3 There should be no mouseEntered call"];
+ [self assert:0 equals:mouseExitedCalls message:@"1.3 There should be no mouseExited call"];
+ [self assert:0 equals:mouseMovedCalls message:@"1.3 There should be no mouseMoved call"];
+ [self assert:1 equals:cursorUpdateCalls message:@"1.3 There should be one and only one cursorUpdate call"];
+
+ [self assert:viewA equals:involvedViewForCursorUpdate message:@"1.3 viewA should receive cursorUpdate"];
+
+ // Step 1.4 : exit viewA
+
+ [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"1.4 There should be one and only one mouseEntered call"];
+ [self assert:1 equals:mouseExitedCalls message:@"1.4 There should be one and only on mouseExited call"];
+ [self assert:0 equals:mouseMovedCalls message:@"1.4 There should be no mouseMoved call"];
+ [self assert:0 equals:cursorUpdateCalls message:@"1.4 There should be no cursorUpdate call"];
+
+ [self assert:viewA equals:involvedViewForMouseExited message:@"1.4 viewA should receive mouseExited"];
+
+ // 2. viewA with mouseEntered adding viewB inside it. Testing if viewB receive mouseEntered & cursorUpdate
+
+ var viewA = [[CPTrackingAreaViewLiveAddition alloc] initWithFrame:CGRectMake(20, 20, 40, 40)];
+
+ [[window contentView] setSubviews:[CPArray arrayWithObject:viewA]];
+
+ var options = CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect,
+ viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil];
+
+ [viewA addTrackingArea:viewATrackingArea];
+
+ // Step 2.1 : enter viewA (then add viewB thus enter also viewB)
+
+ [self moveMouseAtPoint:CGPointMake(25, 25) dragging:NO];
+
+ [self assert:2 equals:mouseEnteredCalls message:@"2.1 There should be two mouseEntered calls"];
+ [self assert:0 equals:mouseExitedCalls message:@"2.1 There should be no mouseExited call"];
+ [self assert:0 equals:mouseMovedCalls message:@"2.1 There should be no mouseMoved call"];
+ [self assert:2 equals:cursorUpdateCalls message:@"2.1 There should be two cursorUpdate calls"];
+
+ [self assert:[[viewA subviews] firstObject] equals:involvedViewForMouseEntered message:@"2.1 viewB should receive mouseEntered"];
+ [self assert:[[viewA subviews] firstObject] equals:involvedViewForCursorUpdate message:@"2.1 viewB should receive cursorUpdate"];
+ [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"2.1 Final cursor should be crosshair cursor, determined by viewB"];
+
+ // Step 2.2 : exit viewA (thus also viewB)
+
+ [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"2.2 There should be no mouseEntered calls"];
+ [self assert:2 equals:mouseExitedCalls message:@"2.2 There should be two mouseExited call"];
+ [self assert:0 equals:mouseMovedCalls message:@"2.2 There should be no mouseMoved call"];
+ [self assert:0 equals:cursorUpdateCalls message:@"2.2 There should be no cursorUpdate calls"];
+
+ [self assert:[[viewA subviews] firstObject] equals:involvedViewForMouseExited message:@"2.2 viewB should receive mouseExited"];
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"2.2 Cursor should be an arrow"];
+
+ // 3. viewA with mouseEntered adding viewB inside it BUT with CPTrackingAssumeInside. Testing if viewB receive only cursorUpdate
+
+ var viewA = [[CPTrackingAreaViewLiveAddition2 alloc] initWithFrame:CGRectMake(20, 20, 40, 40)];
+
+ [[window contentView] setSubviews:[CPArray arrayWithObject:viewA]];
+
+ var options = CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect,
+ viewATrackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:options owner:viewA userInfo:nil];
+
+ [viewA addTrackingArea:viewATrackingArea];
+
+ // Step 3.1 : enter viewA (then add viewB thus enter also viewB)
+
+ [self moveMouseAtPoint:CGPointMake(25, 25) dragging:NO];
+
+ [self assert:1 equals:mouseEnteredCalls message:@"3.1 There should be two mouseEntered calls"];
+ [self assert:0 equals:mouseExitedCalls message:@"3.1 There should be no mouseExited call"];
+ [self assert:0 equals:mouseMovedCalls message:@"3.1 There should be no mouseMoved call"];
+ [self assert:2 equals:cursorUpdateCalls message:@"3.1 There should be two cursorUpdate calls"];
+
+ [self assert:viewA equals:involvedViewForMouseEntered message:@"3.1 viewB should receive mouseEntered"];
+ [self assert:[[viewA subviews] firstObject] equals:involvedViewForCursorUpdate message:@"3.1 viewB should receive cursorUpdate"];
+ [self assert:[CPCursor crosshairCursor] equals:[CPCursor currentCursor] message:@"3.1 Final cursor should be crosshair cursor, determined by viewB"];
+
+ // Step 3.2 : exit viewA (thus also viewB)
+
+ [self moveMouseAtPoint:CGPointMake(5, 5) dragging:NO];
+
+ [self assert:0 equals:mouseEnteredCalls message:@"3.2 There should be no mouseEntered calls"];
+ [self assert:2 equals:mouseExitedCalls message:@"3.2 There should be two mouseExited call"];
+ [self assert:0 equals:mouseMovedCalls message:@"3.2 There should be no mouseMoved call"];
+ [self assert:0 equals:cursorUpdateCalls message:@"3.2 There should be no cursorUpdate calls"];
+
+ [self assert:[[viewA subviews] firstObject] equals:involvedViewForMouseExited message:@"3.2 viewB should receive mouseExited"];
+ [self assert:[CPCursor arrowCursor] equals:[CPCursor currentCursor] message:@"3.2 Cursor should be an arrow"];
+}
+
+- (void)updateTrackingAreas
+{
+ updateTrackingAreasCalls++;
+}
+
+- (void)resetCounters
+{
+ mouseEnteredCalls = 0;
+ mouseExitedCalls = 0;
+ mouseMovedCalls = 0;
+ cursorUpdateCalls = 0;
+
+ involvedViewForMouseEntered = nil;
+ involvedViewForMouseExited = nil;
+ involvedViewForCursorUpdate = nil;
+}
+
+- (void)moveMouseAtPoint:(CGPoint)aPoint dragging:(BOOL)dragging
+{
+ var anEvent = [CPEvent mouseEventWithType:(dragging ? CPLeftMouseDragged : CPMouseMoved)
+ location:aPoint
+ modifierFlags:0
+ timestamp:0
+ windowNumber:[window windowNumber]
+ context:nil
+ eventNumber:-1
+ clickCount:0
+ pressure:0];
+
+ [self resetCounters];
+
+ [[CPApplication sharedApplication] sendEvent:anEvent];
+}
+
+- (void)mouseUpAtPoint:(CGPoint)aPoint
+{
+ var anEvent = [CPEvent mouseEventWithType:CPLeftMouseUp
+ location:aPoint
+ modifierFlags:0
+ timestamp:0
+ windowNumber:[window windowNumber]
+ context:nil
+ eventNumber:-1
+ clickCount:0
+ pressure:0];
+
+ [self resetCounters];
+
+ [[CPApplication sharedApplication] sendEvent:anEvent];
+}
+
+@end
+
+@implementation CPTrackingAreaView : CPView
+
+- (void)mouseEntered:(CPEvent)anEvent
+{
+ mouseEnteredCalls++;
+ involvedViewForMouseEntered = [[anEvent trackingArea] view];
+}
+
+- (void)mouseExited:(CPEvent)anEvent
+{
+ mouseExitedCalls++;
+ involvedViewForMouseExited = [[anEvent trackingArea] view];
+}
+
+- (void)mouseMoved:(CPEvent)anEvent
+{
+ mouseMovedCalls++;
+}
+
+- (void)cursorUpdate:(CPEvent)anEvent
+{
+ cursorUpdateCalls++;
+ involvedViewForCursorUpdate = [[anEvent trackingArea] view];
+}
+
+- (void)updateTrackingAreas
+{
+ updateTrackingAreasCalls++;
+}
+
+@end
+
+@implementation CPTrackingAreaViewWithCursorUpdate : CPTrackingAreaView
+
+- (void)cursorUpdate:(CPEvent)anEvent
+{
+ [[CPCursor crosshairCursor] set];
+ [super cursorUpdate:anEvent];
+}
+
+@end
+
+@implementation CPTrackingAreaViewWithoutCursorUpdate : CPView
+
+@end
+
+@implementation CPTrackingAreaViewLiveRemoval : CPTrackingAreaView
+
+- (void)cursorUpdate:(CPEvent)anEvent
+{
+ [[CPCursor pointingHandCursor] set];
+ [super cursorUpdate:anEvent];
+}
+
+- (void)mouseEntered:(CPEvent)anEvent
+{
+ [self removeFromSuperview];
+ [super mouseEntered:anEvent];
+}
+
+@end
+
+@implementation CPTrackingAreaViewLiveAddition : CPTrackingAreaView
+
+- (void)cursorUpdate:(CPEvent)anEvent
+{
+ [[CPCursor pointingHandCursor] set];
+ [super cursorUpdate:anEvent];
+}
+
+- (void)mouseEntered:(CPEvent)anEvent
+{
+ var viewB = [[CPTrackingAreaViewWithCursorUpdate alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
+
+ [self addSubview:viewB];
+
+ [viewB addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect owner:viewB userInfo:nil]];
+
+ [super mouseEntered:anEvent];
+}
+
+@end
+
+@implementation CPTrackingAreaViewLiveAddition2 : CPTrackingAreaView
+
+- (void)cursorUpdate:(CPEvent)anEvent
+{
+ [[CPCursor pointingHandCursor] set];
+ [super cursorUpdate:anEvent];
+}
+
+- (void)mouseEntered:(CPEvent)anEvent
+{
+ var viewB = [[CPTrackingAreaViewWithCursorUpdate alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
+
+ [self addSubview:viewB];
+
+ [viewB addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectMakeZero() options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInActiveApp | CPTrackingInVisibleRect | CPTrackingAssumeInside owner:viewB userInfo:nil]];
+
+ [super mouseEntered:anEvent];
+}
+
@end
@implementation CPLayoutView : CPView
diff --git a/Tests/Foundation/BundleTest/Info.plist b/Tests/Foundation/BundleTest/Info.plist
new file mode 100644
index 000000000..6a2f0fe2d
--- /dev/null
+++ b/Tests/Foundation/BundleTest/Info.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ Main cib file base name
+ MainMenu.cib
+ CPBundleName
+ BundleTest
+ CPBundleLocalizableStrings
+
+ Localizable.strings
+
+ CPBundleDefaultLanguage
+ fr
+
+
diff --git a/Tests/Foundation/BundleTest/Resources/fr.lproj/Localizable.strings b/Tests/Foundation/BundleTest/Resources/fr.lproj/Localizable.strings
new file mode 100644
index 000000000..1c16f3ac7
--- /dev/null
+++ b/Tests/Foundation/BundleTest/Resources/fr.lproj/Localizable.strings
@@ -0,0 +1,5 @@
+/* My first context. */
+"Label from file" = "Label traduit de fr.lproj du premier context";
+
+/* My second context. */
+"Label from file" = "Label traduit de fr.lproj du second context";
\ No newline at end of file
diff --git a/Tests/Foundation/CPArrayTest.j b/Tests/Foundation/CPArrayTest.j
index 3b113fe00..828b70efe 100644
--- a/Tests/Foundation/CPArrayTest.j
+++ b/Tests/Foundation/CPArrayTest.j
@@ -705,6 +705,23 @@
[self assert:[1, [CPNull null], "3"] equals:anArray];
}
+- (void)testArrayByApplyingBlock
+{
+ var arr = @[@"a", @"b", @"c", @"d"];
+
+ var mapped = [arr arrayByApplyingBlock:function(obj, idx)
+ {
+ return obj + "_" + idx;
+ }];
+
+ [self assert:[mapped count] equals:[arr count]];
+
+ [arr enumerateObjectsUsingBlock:function(obj, idx, stop)
+ {
+ [self assert:mapped[idx] equals:(obj + "_" + idx)];
+ }];
+}
+
@end
@implementation AlwaysEqual : CPObject
diff --git a/Tests/Foundation/CPBundleTest.j b/Tests/Foundation/CPBundleTest.j
new file mode 100644
index 000000000..f301175fc
--- /dev/null
+++ b/Tests/Foundation/CPBundleTest.j
@@ -0,0 +1,69 @@
+@import
+
+@implementation CPBundleTest : OJTestCase
+{
+
+}
+
++ (void)setUp
+{
+
+}
+
++ (void)tearDown
+{
+
+}
+
+- (void)setUp
+{
+
+}
+
+- (void)tearDown
+{
+
+}
+
+- (void)testCreationMainBundle
+{
+ var bundle = [CPBundle mainBundle];
+}
+
+- (void)testLoadingBundle
+{
+ var bundle = [CPBundle bundleWithPath:@"Tests/Foundation/BundleTest"];
+ [bundle loadWithDelegate:self];
+
+ [self assert:[bundle objectForInfoDictionaryKey:"CPBundleDefaultLanguage"] equals:"fr"];
+ [self assert:[bundle objectForInfoDictionaryKey:"CPBundleLocalizableStrings"] equals:["Localizable.strings"]];
+}
+
+- (void)testLocalization
+{
+ var bundle = [CPBundle bundleWithPath:@"Tests/Foundation/BundleTest"];
+ [bundle loadWithDelegate:self];
+
+ [self assert:[bundle localizedStringForKey:"Label from file" value:"" table:"Localizable"] equals:"Label traduit de fr.lproj du premier context"];
+ [self assert:[bundle localizedStringForKey:"Wrong key" value:"Default value" table:"Localizable"] equals:"Default value"];
+ [self assert:[bundle localizedStringForKey:"Wrong key" value:"" table:"Localizable"] equals:"Wrong key"];
+
+ [self assert:CPCopyLocalizedStringFromTableInBundle("Label from file", "Localizable", bundle, "My first context.") equals:"Label traduit de fr.lproj du premier context"];
+ [self assert:CPCopyLocalizedStringFromTableInBundle("Label from file", "", bundle, "My first context.") equals:"Label traduit de fr.lproj du premier context"];
+ [self assert:CPCopyLocalizedStringFromTableInBundle("Label from file", "Localizable", bundle, "") equals:"Label traduit de fr.lproj du premier context"];
+ [self assert:CPCopyLocalizedStringFromTableInBundle("Wrong key", "Localizable", bundle, "") equals:"Wrong key"];
+ [self assert:CPCopyLocalizedStringFromTableInBundle("Wrong key", "coucou", bundle, "") equals:"Wrong key"];
+
+ [self assert:CPCopyLocalizedStringFromTableInBundle("Label from file", "Localizable", bundle, "My second context.") equals:"Label traduit de fr.lproj du second context"];
+}
+
+@end
+
+@implementation CPBundleTest (CPBundleTestBundleDelegate)
+
+- (void)bundleDidFinishLoading:(CPBundle)aBundle
+{
+
+}
+
+@end
\ No newline at end of file
diff --git a/Tests/Foundation/CPDateFormatterTest.j b/Tests/Foundation/CPDateFormatterTest.j
index 154b7fe24..3bdcc749d 100644
--- a/Tests/Foundation/CPDateFormatterTest.j
+++ b/Tests/Foundation/CPDateFormatterTest.j
@@ -635,18 +635,50 @@
var result = [_dateFormatter dateFromString:@"10"];
[self assert:result equals:[[CPDate alloc] initWithString:@"2000-10-01 08:00:00 +0000"]];
+ [_dateFormatter setDateFormat:@"M"];
+ var result = [_dateFormatter dateFromString:@"1"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]];
+
+ [_dateFormatter setDateFormat:@"M"];
+ var result = [_dateFormatter dateFromString:@"12"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]];
+
[_dateFormatter setDateFormat:@"MM"];
var result = [_dateFormatter dateFromString:@"7"];
[self assert:result equals:[[CPDate alloc] initWithString:@"2000-07-01 08:00:00 +0000"]];
+ [_dateFormatter setDateFormat:@"MM"];
+ var result = [_dateFormatter dateFromString:@"1"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]];
+
+ [_dateFormatter setDateFormat:@"MM"];
+ var result = [_dateFormatter dateFromString:@"12"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]];
+
[_dateFormatter setDateFormat:@"MMM"];
var result = [_dateFormatter dateFromString:@"Sep"];
[self assert:result equals:[[CPDate alloc] initWithString:@"2000-09-01 08:00:00 +0000"]];
+ [_dateFormatter setDateFormat:@"MMM"];
+ var result = [_dateFormatter dateFromString:@"Jan"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]];
+
+ [_dateFormatter setDateFormat:@"MMM"];
+ var result = [_dateFormatter dateFromString:@"Dec"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]];
+
[_dateFormatter setDateFormat:@"MMMM"];
var result = [_dateFormatter dateFromString:@"September"];
[self assert:result equals:[[CPDate alloc] initWithString:@"2000-09-01 08:00:00 +0000"]];
+ [_dateFormatter setDateFormat:@"MMMM"];
+ var result = [_dateFormatter dateFromString:@"December"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]];
+
+ [_dateFormatter setDateFormat:@"MMMM"];
+ var result = [_dateFormatter dateFromString:@"January"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]];
+
[_dateFormatter setDateFormat:@"MMMMM"];
var result = [_dateFormatter dateFromString:@"S"];
[self assert:result equals:nil];
@@ -682,18 +714,50 @@
var result = [_dateFormatter dateFromString:@"10"];
[self assert:result equals:[[CPDate alloc] initWithString:@"2000-10-01 08:00:00 +0000"]];
+ [_dateFormatter setDateFormat:@"L"];
+ var result = [_dateFormatter dateFromString:@"1"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]];
+
+ [_dateFormatter setDateFormat:@"L"];
+ var result = [_dateFormatter dateFromString:@"12"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]];
+
[_dateFormatter setDateFormat:@"LL"];
var result = [_dateFormatter dateFromString:@"7"];
[self assert:result equals:[[CPDate alloc] initWithString:@"2000-07-01 08:00:00 +0000"]];
+ [_dateFormatter setDateFormat:@"LL"];
+ var result = [_dateFormatter dateFromString:@"1"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]];
+
+ [_dateFormatter setDateFormat:@"LL"];
+ var result = [_dateFormatter dateFromString:@"12"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]];
+
[_dateFormatter setDateFormat:@"LLL"];
var result = [_dateFormatter dateFromString:@"Sep"];
[self assert:result equals:[[CPDate alloc] initWithString:@"2000-09-01 08:00:00 +0000"]];
+ [_dateFormatter setDateFormat:@"LLL"];
+ var result = [_dateFormatter dateFromString:@"Dec"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]];
+
+ [_dateFormatter setDateFormat:@"LLL"];
+ var result = [_dateFormatter dateFromString:@"Jan"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]];
+
[_dateFormatter setDateFormat:@"LLLL"];
var result = [_dateFormatter dateFromString:@"September"];
[self assert:result equals:[[CPDate alloc] initWithString:@"2000-09-01 08:00:00 +0000"]];
+ [_dateFormatter setDateFormat:@"LLLL"];
+ var result = [_dateFormatter dateFromString:@"December"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-12-01 08:00:00 +0000"]];
+
+ [_dateFormatter setDateFormat:@"LLLL"];
+ var result = [_dateFormatter dateFromString:@"January"];
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]];
+
[_dateFormatter setDateFormat:@"LLLLL"];
var result = [_dateFormatter dateFromString:@"S"];
[self assert:result equals:nil];
@@ -1140,7 +1204,13 @@
{
[_dateFormatter setDateFormat:@"hh v"];
var result = [_dateFormatter dateFromString:@"02 PT"];
- [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 10:00:00 +0000"]];
+ // As the CPTimeZone does not care about daylight saving time. The 'PT' time zone can result in 'PST' or 'PDT'.
+ // The assert below can be any of the two version depending which time zone abbreviation CPDictionary 'keyEnumerator'
+ // will return first. This behaviour is undefined.
+ if ([[CPTimeZone _timeZoneFromString:@"PT" style:CPTimeZoneNameStyleShortGeneric locale:[_dateFormatter locale]] abbreviation] === @"PDT")
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 09:00:00 +0000"]];
+ else
+ [self assert:result equals:[[CPDate alloc] initWithString:@"2000-01-01 10:00:00 +0000"]];
[_dateFormatter setDateFormat:@"hh vvvv"];
var result = [_dateFormatter dateFromString:@"8 GMT-08:35"];
diff --git a/Tests/Foundation/CPDictionaryTest.j b/Tests/Foundation/CPDictionaryTest.j
index 5cdd75983..2cbcd64b7 100644
--- a/Tests/Foundation/CPDictionaryTest.j
+++ b/Tests/Foundation/CPDictionaryTest.j
@@ -49,6 +49,15 @@
[self assert:[dict_cm count] equals:2];
}
+- (void)testInitWithObjectsDuplicatedKeys
+{
+ var dict = [[CPDictionary alloc] initWithObjects:[@"1", @"2", @"Extra1"] forKeys:[@"key1", @"key2", @"key1"]];
+ // The first value for "key1" should be inte the dictionary to be compliant with Cocoa
+ [self assert:[dict objectForKey:@"key1"] equals:@"1"];
+ [self assert:[dict objectForKey:@"key2"] equals:@"2"];
+ [self assert:[dict count] equals:2];
+}
+
- (void)testDictionaryWithObject
{
var dict = [CPDictionary dictionaryWithObject:@"1" forKey:@"key1"];
@@ -427,6 +436,17 @@
[self assert:@"Value3" equals:[dict objectForKey:@"Key3"]];
}
+- (void)testInitWithObjectsAndKeysDuplicatedKeys
+{
+ var dict = [[CPDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value3", @"Key3", @"ExtraValue1", @"Key1"];
+
+ // The first value for "key1" should be inte the dictionary to be compliant with Cocoa
+ [self assert:2 equals:[dict count]];
+ [self assert:@"Value1" equals:[dict objectForKey:@"Key1"]];
+ [self assert:nil equals:[dict objectForKey:@"Key2"]]; // No key/value pair
+ [self assert:@"Value3" equals:[dict objectForKey:@"Key3"]];
+}
+
- (void)testInitWithObjectsAndKeysAndNilValueShouldThrowException
{
[self assertThrows:function () {
diff --git a/Tests/Foundation/CPKeyValueObservingTest.j b/Tests/Foundation/CPKeyValueObservingTest.j
index 9726a7f05..59b501b1c 100644
--- a/Tests/Foundation/CPKeyValueObservingTest.j
+++ b/Tests/Foundation/CPKeyValueObservingTest.j
@@ -28,7 +28,7 @@ var _getCheeseCounter;
count = arguments.length;
for (; index < count; ++index)
- class_addMethod(theClass, arguments[index], function() { });
+ class_addMethod(theClass, arguments[index], function() { }, ["void"]);
return [theClass new];
}
@@ -268,7 +268,8 @@ var _getCheeseCounter;
- (void)testOnlyInsertObject_AtKeyIndex_Implemented
{
var insertSelector = @selector(insertObject:inObjectsAtIndex:),
- object = [self objectWithMethods:insertSelector];
+ object = [self objectWithMethods:insertSelector],
+ methodTypes = class_getInstanceMethod(object.isa, insertSelector).method_types;
// Sanity check
[self assert:class_getInstanceMethod(object.isa, insertSelector)
@@ -417,6 +418,64 @@ var _getCheeseCounter;
[self assert:test equals:_lastObject];
}
+- (void)testMethodTypesOnKVOForSet_Key_Implemented
+{
+ var setSelector = @selector(setObjects:),
+ object = [self objectWithMethods:setSelector],
+ methodTypes = class_getInstanceMethod(object.isa, setSelector).method_types;
+
+ // Sanity check
+ [self assert:class_getInstanceMethod(object.isa, setSelector)
+ same:class_getInstanceMethod([object class], setSelector)];
+
+ [object
+ addObserver:self
+ forKeyPath:@"objects"
+ options:CPKeyValueObservingOptionOld | CPKeyValueObservingOptionNew
+ context:NULL];
+
+ // Sanity check
+ [self assert:class_getInstanceMethod(object.isa, setSelector)
+ notSame:class_getInstanceMethod([object class], setSelector)];
+
+ // Check that the return and parameter types are the same on the new method as the old
+ [self assertTrue:methodTypes != nil message:@"methodTypes can not be nil or undefined"];
+ [self assert:methodTypes equals:class_getInstanceMethod(object.isa, setSelector).method_types];
+}
+
+- (void)testMethodTypesOnKVOForInsertObject_AtKeyIndex_Implemented_and_removeFromKeyAtIndex
+{
+ var insertSelector = @selector(insertObject:inObjectsAtIndex:),
+ removeSelector = @selector(removeObjectFromObjectsAtIndex:),
+ object = [self objectWithMethods:insertSelector, removeSelector],
+ methodTypesInsert = class_getInstanceMethod(object.isa, insertSelector).method_types,
+ methodTypesRemove = class_getInstanceMethod(object.isa, removeSelector).method_types;
+
+ // Sanity check
+ [self assert:class_getInstanceMethod(object.isa, insertSelector)
+ same:class_getInstanceMethod([object class], insertSelector)];
+ [self assert:class_getInstanceMethod(object.isa, removeSelector)
+ same:class_getInstanceMethod([object class], removeSelector)];
+
+ [object
+ addObserver:self
+ forKeyPath:@"objects"
+ options:CPKeyValueObservingOptionOld | CPKeyValueObservingOptionNew
+ context:NULL];
+
+ // Sanity check
+ [self assert:class_getInstanceMethod(object.isa, insertSelector)
+ notSame:class_getInstanceMethod([object class], insertSelector)];
+ [self assert:class_getInstanceMethod(object.isa, removeSelector)
+ notSame:class_getInstanceMethod([object class], removeSelector)];
+
+ // Check that the return and parameter types are the same on the new method as the old
+ [self assertTrue:methodTypesInsert != nil message:@"methodTypes can not be nil or undefined on insert selector"];
+ [self assertTrue:methodTypesRemove != nil message:@"methodTypes can not be nil or undefined in remove selector"];
+ [self assert:methodTypesInsert equals:class_getInstanceMethod(object.isa, insertSelector).method_types];
+ [self assert:methodTypesRemove equals:class_getInstanceMethod(object.isa, removeSelector).method_types];
+}
+
@end
@implementation ObservingTester : CPObject
diff --git a/Tests/Foundation/CPNotificationCenterTest.j b/Tests/Foundation/CPNotificationCenterTest.j
index 47aab1e0f..9695ac810 100644
--- a/Tests/Foundation/CPNotificationCenterTest.j
+++ b/Tests/Foundation/CPNotificationCenterTest.j
@@ -97,6 +97,57 @@ var TestNotification = @"TestNotification";
[self assert:7 equals:notificationCount message:@"observer should not be notified"];
}
+- (void)testNotifyWithBlocksAndOperationQueue
+{
+ var center = [CPNotificationCenter defaultCenter],
+ queue = [[CPOperationQueue alloc] init];
+
+ notificationCount = 0;
+
+ var notificationBlock = function(notification){
+ notificationCount += 1;
+ };
+
+ var observer2 = [center addObserverForName:TestNotification object:2 queue:queue usingBlock:notificationBlock],
+ observer25 = [center addObserverForName:TestNotification object:25 queue:queue usingBlock:notificationBlock];
+
+ [center postNotificationName:TestNotification object:self];
+ [center postNotificationName:TestNotification object:2];
+
+ [queue waitUntilAllOperationsAreFinished];
+ [self assert:1 equals:notificationCount message:@"observer should be notified for object '2'"];
+
+ var observerNil = [center addObserverForName:TestNotification object:nil queue:queue usingBlock:notificationBlock];
+
+ [center postNotificationName:TestNotification object:2];
+ [queue waitUntilAllOperationsAreFinished];
+ [self assert:3 equals:notificationCount message:@"observer should be notified for object '2' and for any object"];
+
+ [center removeObserver:observer2 name:TestNotification object:2];
+ [center postNotificationName:TestNotification object:2];
+ [queue waitUntilAllOperationsAreFinished];
+ [self assert:4 equals:notificationCount message:@"observer should be notified only for any object"];
+
+ // At this point we have TestNofication:nil observer and a TestNotification:25 observer.
+ observer2 = [center addObserverForName:nil object:2 queue:queue usingBlock:notificationBlock];
+
+ [center postNotificationName:TestNotification object:2];
+ [queue waitUntilAllOperationsAreFinished];
+ [self assert:6 equals:notificationCount message:@"observer should be notified for TestNofication and for object '2' (TestNotification)"];
+ [center postNotificationName:@"RandomNotification" object:2];
+ [queue waitUntilAllOperationsAreFinished];
+ [self assert:7 equals:notificationCount message:@"observer should be notified for object '2' (RandomNotification)"];
+
+ [center removeObserver:observer2];
+ [center removeObserver:observer25];
+ [center removeObserver:observerNil];
+ [center postNotificationName:TestNotification object:nil];
+ [center postNotificationName:TestNotification object:2];
+ [center postNotificationName:TestNotification object:25];
+ [queue waitUntilAllOperationsAreFinished];
+ [self assert:7 equals:notificationCount message:@"observer should not be notified"];
+}
+
- (void)testAddObserversDuringNotification
{
var center = [CPNotificationCenter defaultCenter];
diff --git a/Tests/Foundation/CPNotificationQueueTest.j b/Tests/Foundation/CPNotificationQueueTest.j
new file mode 100644
index 000000000..9992ccd95
--- /dev/null
+++ b/Tests/Foundation/CPNotificationQueueTest.j
@@ -0,0 +1,124 @@
+@import
+
+var TestNotification = @"TestNotification";
+
+@implementation CPNotificationQueueTest : OJTestCase
+{
+ int notificationCount;
+}
+
+- (void)setUp
+{
+ notificationCount = 0;
+}
+
+/*!
+ Test ceation
+*/
+- (void)testCreate
+{
+ var queue = [CPNotificationQueue defaultQueue];
+ [self assert:queue._notificationCenter equals:[CPNotificationCenter defaultCenter]];
+
+ var notificationCenter = [CPNotificationCenter new],
+ secondQueue = [[CPNotificationQueue alloc] initWithNotificationCenter:notificationCenter];
+ [self assert:secondQueue._notificationCenter equals:notificationCenter];
+}
+
+- (void)testNotificationPostNow
+{
+ var queue = [CPNotificationQueue defaultQueue],
+ notification = [[CPNotification alloc] initWithName:@"TestNotification" object:self userInfo:nil];
+
+ [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(countNotification:) name:@"TestNotification" object:self];
+ [queue enqueueNotification:notification postingStyle:CPPostNow];
+ [self assert:notificationCount equals:1];
+
+ [queue enqueueNotification:notification postingStyle:CPPostNow];
+ [self assert:notificationCount equals:2];
+
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [queue enqueueNotification:notification postingStyle:CPPostWhenIdle];
+ [queue enqueueNotification:notification postingStyle:CPPostNow];
+ [self assert:notificationCount equals:3];
+
+ [queue enqueueNotification:notification postingStyle:CPPostNow];
+ [queue enqueueNotification:notification postingStyle:CPPostNow];
+ [self assert:notificationCount equals:5];
+
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:5];
+}
+
+- (void)testNotificationPostASAP
+{
+ var queue = [CPNotificationQueue defaultQueue],
+ notification = [[CPNotification alloc] initWithName:@"TestNotification" object:self userInfo:nil],
+ notification2 = [[CPNotification alloc] initWithName:@"TestNotification" object:self userInfo:@{}];
+
+ [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(countNotification:) name:@"TestNotification" object:self];
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [self assert:notificationCount equals:0];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:1];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:1];
+
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:2];
+
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [queue enqueueNotification:notification2 postingStyle:CPPostASAP coalesceMask:CPNotificationNoCoalescing forModes:nil];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:4];
+
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [queue enqueueNotification:notification2 postingStyle:CPPostASAP coalesceMask:CPNotificationNoCoalescing forModes:nil];
+ [queue dequeueNotificationsMatching:notification2 coalesceMask:CPNotificationNoCoalescing];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:5];
+
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [queue enqueueNotification:notification2 postingStyle:CPPostASAP coalesceMask:CPNotificationNoCoalescing forModes:nil];
+ [queue dequeueNotificationsMatching:notification coalesceMask:CPNotificationCoalescingOnName];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:5];
+
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [queue enqueueNotification:notification2 postingStyle:CPPostASAP coalesceMask:CPNotificationNoCoalescing forModes:nil];
+ [queue dequeueNotificationsMatching:notification coalesceMask:CPNotificationCoalescingOnSender];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:5];
+}
+
+- (void)testNotificationWhenIdle
+{
+ var queue = [CPNotificationQueue defaultQueue],
+ notification = [[CPNotification alloc] initWithName:@"TestNotification" object:self userInfo:nil],
+ notification2 = [[CPNotification alloc] initWithName:@"TestNotificationIdle" object:self userInfo:@{}];
+
+ [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(countNotification:) name:@"TestNotification" object:self];
+ [[CPNotificationCenter defaultCenter] addObserver:self selector:@selector(countNotificationIdle:) name:@"TestNotificationIdle" object:self];
+
+ [queue enqueueNotification:notification postingStyle:CPPostASAP];
+ [queue enqueueNotification:notification2 postingStyle:CPPostWhenIdle];
+ [self assert:notificationCount equals:0];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:1];
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+ [self assert:notificationCount equals:2];
+}
+
+- (void)countNotification:(CPNotification)aNotification
+{
+ notificationCount++;
+}
+
+- (void)countNotificationIdle:(CPNotification)aNotification
+{
+ notificationCount++;
+}
+
+@end
\ No newline at end of file
diff --git a/Tests/Foundation/CPPredicateTest.j b/Tests/Foundation/CPPredicateTest.j
index 670a13b5b..3a9840e96 100644
--- a/Tests/Foundation/CPPredicateTest.j
+++ b/Tests/Foundation/CPPredicateTest.j
@@ -79,6 +79,17 @@
var expression_minusset = [CPExpression expressionForMinusSet:set with:array];
[self assertNotNull:expression_minusset message:"MinusSet Expression should not be nil"];
+
+ var expression_block = [CPExpression expressionForBlock:function(obj, args, bindings)
+ {
+ return obj;
+ } arguments:nil];
+
+ [self assertNotNull:expression_block message:"Block Expression should not be nil"];
+
+ var expression_conditional = [CPExpression expressionForConditional:[CPPredicate predicateWithValue:YES] trueExpression:expression_minusset falseExpression:expression_block];
+
+ [self assertNotNull:expression_conditional message:"Conditional Expression should not be nil"];
}
- (void)testSetExpressionEvaluation
@@ -139,14 +150,35 @@
{
var collection = [CPExpression expressionForKeyPath:@"Record1.Children"],
iteratorVariable = @"x",
- predicate = [CPPredicate predicateWithFormat:@"$x BEGINSWITH 'Kid'"];
+ predicate = [CPPredicate predicateWithFormat:@"$x BEGINSWITH $KidVariable"];
var expression = [CPExpression expressionForSubquery:collection usingIteratorVariable:iteratorVariable predicate:predicate],
- eval = [expression expressionValueWithObject:dict context:nil],
+ eval = [expression expressionValueWithObject:dict context:@{"KidVariable":[CPExpression expressionForConstantValue:"Kid"]}],
expected = [CPArray arrayWithObjects:"Kid1", "Kid2"];
[self assertTrue:([eval isEqual:expected]) message:"'" + [expression predicateFormat] + "' result is "+ eval + "but should be " + expected];
}
+- (void)testBlockExpressionEvaluation
+{
+ var block = function(obj, args, bindings)
+ {
+ return [obj stringByAppendingString:[args componentsJoinedByString:"-"]];
+ };
+
+ var expression = [CPExpression expressionForBlock:block arguments:[[CPExpression expressionForConstantValue:"A"], [CPExpression expressionForConstantValue:"B"]]];
+
+ var eval = [expression expressionValueWithObject:"OBJ" context:@{}];
+ [self assertTrue:([eval isEqual:"OBJA-B"]) message:"'" + [expression description] + "' result is "+ eval + "but should be " + "OBJA-B"];
+}
+
+- (void)testConditionalExpressionEvaluation
+{
+ var expression = [CPExpression expressionForConditional:[CPPredicate predicateWithFormat:"SELF = $variable"] trueExpression:[CPExpression expressionForConstantValue:"TRUE_EXP"] falseExpression:[CPExpression expressionForConstantValue:"FALSE_EXP"]];
+
+ var eval = [expression expressionValueWithObject:"OBJ" context:@{"variable":"OBJ"}];
+ [self assertTrue:([eval isEqual:"TRUE_EXP"]) message:"'" + [expression description] + "' result is "+ eval + "but should be " + "TRUE_EXP"];
+}
+
- (void)testOptions
{
var pred = [[CPComparisonPredicate alloc] initWithLeftExpression:[CPExpression expressionForConstantValue:@"àa"] rightExpression:[CPExpression expressionForConstantValue:@"aà"] modifier:CPDirectPredicateModifier type:CPLikePredicateOperatorType options:3];
@@ -369,8 +401,8 @@
[self assertTrue:[predicate evaluateWithObject:nil] message:"Predicate " + predicate + " should be TRUE"];
// TEST Subquery -- This means: search people who have 2 boys.
- predicate = [CPPredicate predicateWithFormat: @"SUBQUERY(Record1.Children, $x, $x BEGINSWITH 'Kid')[SIZE] = 2"];
- [self assertTrue:[predicate evaluateWithObject:dict] message:"Predicate " + predicate + " should evaluate to TRUE"];
+ predicate = [CPPredicate predicateWithFormat: @"SUBQUERY(Record1.Children, $x, $x BEGINSWITH $Begining)[SIZE] = 2"];
+ [self assertTrue:[predicate evaluateWithObject:dict substitutionVariables:@{"Begining":"Kid"}] message:"Predicate " + predicate + " should evaluate to TRUE"];
// Test Set expressions
// Parsing is ok but the evaluation of this predicate will return NO because:
@@ -381,6 +413,9 @@
predicate = [CPPredicate predicateWithFormat:@"a UNION {'b'} = {'a','b'}"];
var left = [[predicate leftExpression] expressionValueWithObject:object context:nil];
[self assertTrue:[left isEqualToSet:result] message:"Expression eval " + left + " should be " + result];
+
+ predicate = [CPPredicate predicateWithFormat:@"TERNARY(Record1.Children[SIZE] = 1, 'Single', Record1.Name) = 'John'"];
+ [self assertTrue:[predicate evaluateWithObject:dict] message:"Predicate " + predicate + " should evaluate to TRUE"];
}
- (void)testExpressionAndPredicateIsEqual
@@ -439,6 +474,10 @@
pred1 = [CPPredicate predicateWithFormat:@"a = 'a' AND b = 'b'"];
pred2 = [CPPredicate predicateWithFormat:@"a = 'a' AND b = 'b'"];
[self assert:pred1 equals:pred2];
+
+ pred1 = [CPPredicate predicateWithFormat:@"TERNARY(Record1.Children[FIRST] BEGINSWITH Record1.Name, 'SAME', 'DIFFERENT') = 'DIFFERENT'"];
+ pred2 = [CPPredicate predicateWithFormat:@"TERNARY(Record1.Children[FIRST] BEGINSWITH Record1.Name, 'SAME', 'DIFFERENT') = 'DIFFERENT'"];
+ [self assert:pred1 equals:pred2];
}
- (void)testExpressionAndPredicateIsNotEqualToNil
@@ -490,6 +529,10 @@
[self assert:pred1 notEqual:nil];
+ pred1 = [CPPredicate predicateWithFormat:@"TERNARY(Record1.Children[FIRST] BEGINSWITH Record1.Name, 'SAME', 'DIFFERENT') = 'DIFFERENT'"];
+
+ [self assert:pred1 notEqual:nil];
+
pred1 = [CPPredicate predicateWithFormat:@"$x CONTAINS 'a'"];
[self assert:pred1 notEqual:nil];
@@ -577,6 +620,17 @@
}
}
+- (void)testPredicateFormatWithNullGeneratesCorrectString
+{
+ var predicate1 = [CPPredicate predicateWithFormat:@"value == %@", [CPNull null]],
+ predicate2 = [CPPredicate predicateWithFormat:@"value == null"],
+ predicate3 = [CPPredicate predicateWithFormat:@"value == nil"];
+
+ [self assert:[predicate1 predicateFormat] equals:@"value == nil"];
+ [self assert:[predicate2 predicateFormat] equals:@"value == nil"];
+ [self assert:[predicate3 predicateFormat] equals:@"value == nil"];
+}
+
@end
@implementation CPObject (PredicateTesting)
diff --git a/Tests/Foundation/CPRunLoopTest.j b/Tests/Foundation/CPRunLoopTest.j
index 321795e52..50cfcd3f5 100644
--- a/Tests/Foundation/CPRunLoopTest.j
+++ b/Tests/Foundation/CPRunLoopTest.j
@@ -34,6 +34,18 @@
[self assert:[10] equals:performer2.callArgs];
}
+- (void)testPerformBlock
+{
+ var i = 0;
+
+ [[CPRunLoop mainRunLoop] performBlock:function()
+ {i++} argument:nil order:0 modes:[CPDefaultRunLoopMode]];
+
+ [[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
+
+ [self assert:i equals:1];
+}
+
@end
@implementation Performer : CPObject
diff --git a/Tests/Foundation/CPStringTest.j b/Tests/Foundation/CPStringTest.j
index f3e4c9454..326c781db 100644
--- a/Tests/Foundation/CPStringTest.j
+++ b/Tests/Foundation/CPStringTest.j
@@ -579,4 +579,17 @@
[self assert:[@"Å Ã Ê í ö û" stripDiacritics] equals:@"A A E i o u"];
}
+- (void)testStringByReplacingCharactersInRange
+{
+ var testString = @"testString";
+
+ [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(0, 0) withString:@"NewCharacters"] equals:@"NewCharacterstestString"];
+ [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(0, 10) withString:@"NewCharacters"] equals:@"NewCharacters"];
+ [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(0, 1) withString:@"NewCharacters"] equals:@"NewCharactersestString"];
+ [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(1, 0) withString:@"NewCharacters"] equals:@"tNewCharactersestString"];
+ [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(5, 0) withString:@"NewCharacters"] equals:@"testSNewCharacterstring"];
+ [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(5, 5) withString:@"NewCharacters"] equals:@"testSNewCharacters"];
+ [self assert:[testString stringByReplacingCharactersInRange:CPMakeRange(9, 0) withString:@"NewCharacters"] equals:@"testStrinNewCharactersg"];
+}
+
@end
diff --git a/Tests/Foundation/CPTimeZoneTest.j b/Tests/Foundation/CPTimeZoneTest.j
index f23210fc1..50dc8a2a2 100644
--- a/Tests/Foundation/CPTimeZoneTest.j
+++ b/Tests/Foundation/CPTimeZoneTest.j
@@ -65,10 +65,19 @@
- (void)testTimeZoneWithName
{
var timeZone = [CPTimeZone timeZoneWithName:@"America/Los_Angeles"];
- [self assert:[timeZone name] equals:@"America/Los_Angeles"];
- [self assert:[timeZone abbreviation] equals:@"PDT"];
- [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
- [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
+
+ // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary
+ if ([timeZone abbreviation] === @"PDT") {
+ [self assert:[timeZone name] equals:@"America/Los_Angeles"];
+ [self assert:[timeZone abbreviation] equals:@"PDT"];
+ [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
+ } else {
+ [self assert:[timeZone name] equals:@"America/Los_Angeles"];
+ [self assert:[timeZone abbreviation] equals:@"PST"];
+ [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)];
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"];
+ }
[self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"];
@@ -99,11 +108,20 @@
- (void)testTimeZoneWithNameWithData
{
var timeZone = [CPTimeZone timeZoneWithName:@"America/Los_Angeles" data:_data];
- [self assert:[timeZone name] equals:@"America/Los_Angeles"];
- [self assert:[timeZone abbreviation] equals:@"PDT"];
- [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
+
+ // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary
+ if ([timeZone abbreviation] === @"PDT") {
+ [self assert:[timeZone name] equals:@"America/Los_Angeles"];
+ [self assert:[timeZone abbreviation] equals:@"PDT"];
+ [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
+ } else {
+ [self assert:[timeZone name] equals:@"America/Los_Angeles"];
+ [self assert:[timeZone abbreviation] equals:@"PST"];
+ [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)];
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"];
+ }
[self assert:[timeZone data] equals:_data];
- [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"];
@@ -155,10 +173,19 @@
- (void)testInitTimeZoneWithName
{
var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"];
- [self assert:[timeZone name] equals:@"America/Los_Angeles"];
- [self assert:[timeZone abbreviation] equals:@"PDT"];
- [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
- [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
+
+ // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary
+ if ([timeZone abbreviation] === @"PDT") {
+ [self assert:[timeZone name] equals:@"America/Los_Angeles"];
+ [self assert:[timeZone abbreviation] equals:@"PDT"];
+ [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
+ } else {
+ [self assert:[timeZone name] equals:@"America/Los_Angeles"];
+ [self assert:[timeZone abbreviation] equals:@"PST"];
+ [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)];
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"];
+ }
[self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"];
@@ -189,11 +216,20 @@
- (void)testInitTimeZoneWithNameWithData
{
var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles" data:_data];
- [self assert:[timeZone name] equals:@"America/Los_Angeles"];
- [self assert:[timeZone abbreviation] equals:@"PDT"];
- [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
+
+ // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary
+ if ([timeZone abbreviation] === @"PDT") {
+ [self assert:[timeZone name] equals:@"America/Los_Angeles"];
+ [self assert:[timeZone abbreviation] equals:@"PDT"];
+ [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
+ } else {
+ [self assert:[timeZone name] equals:@"America/Los_Angeles"];
+ [self assert:[timeZone abbreviation] equals:@"PST"];
+ [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)];
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"];
+ }
[self assert:[timeZone data] equals:_data];
- [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleStandard locale:_locale] equals:@"Pacific Standard Time"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleShortStandard locale:_locale] equals:@"PST"];
[self assert:[timeZone localizedName:CPTimeZoneNameStyleDaylightSaving locale:_locale] equals:@"Pacific Daylight Time"];
@@ -258,14 +294,24 @@
{
var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"];
- [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
+ // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary
+ if ([timeZone abbreviation] === @"PDT") {
+ [self assert:[timeZone secondsFromGMT] equals:(-420 * 60)];
+ } else {
+ [self assert:[timeZone secondsFromGMT] equals:(-480 * 60)];
+ }
}
- (void)testDescription
{
var timeZone = [[CPTimeZone alloc] initWithName:@"America/Los_Angeles"];
- [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
+ // The current implementation can return daylight saving time or standard time depending on the current implmentation on CPDictionary
+ if ([timeZone abbreviation] === @"PDT") {
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PDT) offset -25200"];
+ } else {
+ [self assert:[timeZone description] equals:@"America/Los_Angeles (PST) offset -28800"];
+ }
}
- (void)testLocalizedName
diff --git a/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j b/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j
index 1ddd8d6f6..69e2158fc 100644
--- a/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j
+++ b/Tests/Manual/ArrayControllerRemovingFirstTest/AppController.j
@@ -29,7 +29,7 @@
[arrayController setContent:items];
var label = [CPTextField labelWithTitle:@"Press buttons to see [Remove First By Object] fails while [Remove First By Index] succeeds"];
- [label setFrameOrigin:CGPointMake(20, 20)];
+ [label setFrameOrigin:CGPointMake(20, 20)];
[contentView addSubview:label];
var field = [CPTextField textFieldWithStringValue:@"" placeholder:@"" width:100];
@@ -65,7 +65,8 @@
- (void)removeFirstByIndex:(id)sender
{
- [arrayController removeObjectAtArrangedObjectIndex:0];
+ if ([[arrayController contentArray] count])
+ [arrayController removeObjectAtArrangedObjectIndex:0];
}
- (void)observeValueForKeyPath:(CPString)keyPath ofObject:(id)object change:(CPDictionary)change context:(id)context
diff --git a/Tests/Manual/CPByteCountFormatter/Resources/MainMenu.cib b/Tests/Manual/CPByteCountFormatter/Resources/MainMenu.cib
index c937a376d..e30f70aa2 100644
--- a/Tests/Manual/CPByteCountFormatter/Resources/MainMenu.cib
+++ b/Tests/Manual/CPByteCountFormatter/Resources/MainMenu.cib
@@ -1 +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;21E;D;K;6;CP$UIDd;2;22E;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;36E;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;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;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;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;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;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;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;98E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;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;126E;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;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;259E;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;3;100E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;136E;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;3;126E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;229E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;225E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;229E;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;260E;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;261E;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;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;255E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;231E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;255E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;229E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;255E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;233E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;255E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;223E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;266E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;169E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;162E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;111E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;98E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;175E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;176E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;156E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;214E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;215E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;216E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;217E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;219E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;220E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;221E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;208E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;210E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;203E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;204E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;205E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;319E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;206E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;321E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;322E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;323E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;191E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;324E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;325E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;327E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;235E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;236E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;246E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;244E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;245E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;237E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;247E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;329E;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;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;330E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;331E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;332E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;334E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;237E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;337E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;338E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;245E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;339E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;340E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;341E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;244E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;342E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;246E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;345E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;346E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;347E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;236E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;348E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;349E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;350E;E;D;K;6;$classD;K;6;CP$UIDd;2;90E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;235E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;255E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;351E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;336E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;352E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;353E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;260E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;354E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;355E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;356E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;357E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;360E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;361E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;368E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;109E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;369E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;370E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;371E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;373E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;375E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;379E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;380E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;381E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;382E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;109E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;374E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;385E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;123E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;385E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;386E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;123E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;388E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;389E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;126E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;389E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;391E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;397E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;399E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;400E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;401E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;402E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;403E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;137E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;405E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;406E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;407E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;408E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;409E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;410E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;411E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;413E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;414E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;415E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;416E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;417E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;418E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;137E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;420E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;421E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;144E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;421E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;422E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;423E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;144E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;424E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;144E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;425E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;426E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;144E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;427E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;428E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;144E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;429E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;150E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;429E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;430E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;431E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;150E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;432E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;150E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;154E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;433E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;434E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;435E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;420E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;416E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;417E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;437E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;408E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;154E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;409E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;159E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;438E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;439E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;440E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;441E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;443E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;445E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;447E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;449E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;450E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;166E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;450E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;451E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;452E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;453E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;166E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;454E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;455E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;404E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;456E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;457E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;159E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;174E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;459E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;460E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;461E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;174E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;462E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;174E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;178E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;464E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;465E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;180E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;466E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;467E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;468E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;469E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;462E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;470E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;416E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;471E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;472E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;473E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;474E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;475E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;476E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;408E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;477E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;478E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;479E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;480E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;481E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;190E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;481E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;482E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;484E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;485E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;486E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;487E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;196E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;487E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;488E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;196E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;484E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;196E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;489E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;196E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;201E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;490E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;491E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;492E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;493E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;495E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;496E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;497E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;498E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;401E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;499E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;180E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;399E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;384E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;500E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;358E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;213E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;178E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;500E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;501E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;502E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;503E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;504E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;505E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;506E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;507E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;508E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;362E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;364E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;509E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;510E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;401E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;511E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;512E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;213E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;399E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;511E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;222E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;513E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;514E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;515E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;516E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;517E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;518E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;519E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;225E;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;3;224E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;521E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;522E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;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;3;226E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;225E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;524E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;525E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;526E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;225E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;527E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;528E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;520E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;419E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;529E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;520E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;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;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;530E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;531E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;532E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;530E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;527E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;533E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;362E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;264E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;536E;K;21;CPControlFormatterKeyD;K;6;CP$UIDd;3;259E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;364E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;538E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;416E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;479E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;530E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;539E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;540E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;530E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;533E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;362E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;542E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;536E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;364E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;538E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;416E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;479E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;530E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;543E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;544E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;530E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;533E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;545E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;362E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;363E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;536E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;362E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;362E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;362E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;546E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;416E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;479E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;228E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;530E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;547E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;548E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;530E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;533E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;416E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;362E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;549E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;536E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;364E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;364E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;538E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;416E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;479E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;226E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;225E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;550E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;551E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;552E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;225E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;527E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;520E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;528E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;520E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;419E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;553E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;416E;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;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;555E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;556E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;559E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;560E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;561E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;562E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;563E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;564E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;565E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;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;3;238E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;257E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;566E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;567E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;568E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;569E;K;6;$afontD;K;6;CP$UIDd;3;570E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;479E;K;11;$aalignmentD;K;6;CP$UIDd;3;520E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;571E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;520E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;572E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;574E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;575E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;576E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;239E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;257E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;577E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;578E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;579E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;580E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;581E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;582E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;3;234E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;583E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;584E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;557E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;K;16;$aimage-positionD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;535E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;520E;K;11;$aalignmentD;K;6;CP$UIDd;3;479E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;520E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;585E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;419E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;419E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;3;238E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;554E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;256E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;586E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;587E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;554E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;541E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;568E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;588E;K;6;$afontD;K;6;CP$UIDd;3;570E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;479E;K;11;$aalignmentD;K;6;CP$UIDd;3;520E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;419E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;479E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;589E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;363E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;364E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;571E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;520E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;362E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;416E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;520E;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;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;589E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;3;362E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;590E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;419E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;591E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;592E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;593E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;594E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;3;101E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;595E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;247E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;573E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;256E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;359E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;596E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;597E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;598E;E;D;K;6;$classD;K;6;CP$UIDd;2;99E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;597E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;599E;E;D;K;10;$classnameS;20;CPByteCountFormatterK;8;$classesA;S;20;CPByteCountFormatterS;11;CPFormatterS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;258E;K;33;CPByteCountFormatterCountStyleKeyD;K;6;CP$UIDd;3;520E;K;49;CPByteCountFormatterAllowsNonnumericFormattingKeyD;K;6;CP$UIDd;3;362E;K;46;CPByteCountFormatterIncludesActualByteCountKeyD;K;6;CP$UIDd;3;364E;K;36;CPByteCountFormatterIncludesCountKeyD;K;6;CP$UIDd;3;362E;K;35;CPByteCountFormatterIncludesUnitKeyD;K;6;CP$UIDd;3;362E;K;31;CPByteCountFormatterAdaptiveKeyD;K;6;CP$UIDd;3;362E;K;45;CPByteCountFormatterZeroPadsFractionDigitsKeyD;K;6;CP$UIDd;3;364E;K;35;CPByteCountFormatterAllowedUnitsKeyD;K;6;CP$UIDd;3;520E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;223E;E;E;S;8;delegateS;9;byteCountS;18;formattedByteCountS;10;propertiesS;10;testWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;16;propertyChanged:S;13;unitsChanged:S;59;selectedIndex: self.formattedByteCount.formatter.countStyleS;13;selectedIndexS;44;self.formattedByteCount.formatter.countStyleD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;63;value: self.formattedByteCount.formatter.zeroPadsFractionDigitsS;5;valueS;56;self.formattedByteCount.formatter.zeroPadsFractionDigitsD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;53;value: self.formattedByteCount.formatter.includesUnitS;46;self.formattedByteCount.formatter.includesUnitD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;54;value: self.formattedByteCount.formatter.includesCountS;47;self.formattedByteCount.formatter.includesCountD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;64;value: self.formattedByteCount.formatter.includesActualByteCountS;57;self.formattedByteCount.formatter.includesActualByteCountD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;67;value: self.formattedByteCount.formatter.allowsNonnumericFormattingS;60;self.formattedByteCount.formatter.allowsNonnumericFormattingD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;49;value: self.formattedByteCount.formatter.adaptiveS;42;self.formattedByteCount.formatter.adaptiveD;K;6;$classD;K;6;CP$UIDd;3;333E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;122E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;113E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;149E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;139E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;148E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;151E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;162E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;6;Print…S;1;pS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;E;E;S;10;Clear MenuS;13;Page Setup...S;1;PS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;212E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;23;{{42, 107}, {537, 306}}S;21;{{0, 0}, {1440, 878}}d;2;15S;29;CPByteCountFormatter Workshopd;1;0S;20;{{0, 0}, {537, 306}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;227E;D;K;6;CP$UIDd;3;233E;E;E;S;6;normalS;21;{{21, 20}, {495, 95}}S;19;{{0, 0}, {495, 95}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;530E;E;E;d;2;34S;3;boxS;3;BoxD;K;6;$classD;K;6;CP$UIDd;3;224E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;227E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;604E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;605E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;606E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;227E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;607E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;E;S;21;{{95, 62}, {388, 17}}S;19;{{0, 0}, {388, 17}}S;9;textfieldD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;534E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;600E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;601E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;364E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;364E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;362E;E;d;4;3072D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;537E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;602E;E;S;20;{{18, 62}, {67, 17}}S;18;{{0, 0}, {67, 17}}d;2;36S;10;Formatted:S;21;{{91, 20}, {171, 29}}S;19;{{0, 0}, {171, 29}}S;28;bezeled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;3;537E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;603E;E;S;20;{{18, 27}, {69, 17}}S;18;{{0, 0}, {69, 17}}S;11;Byte count:S;27;{{21, 125.5}, {495, 160.5}}S;22;{{0, 0}, {495, 160.5}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;554E;E;E;S;10;PropertiesD;K;6;$classD;K;6;CP$UIDd;3;224E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;233E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;520E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;609E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;610E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;611E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;233E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;607E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;523E;E;S;20;{{16, 13}, {77, 21}}S;18;{{0, 0}, {77, 21}}S;9;check-boxS;8;selectedS;8;AdaptiveS;21;{{16, 41}, {222, 21}}S;19;{{0, 0}, {222, 21}}S;29;Allows non-numeric formattingS;21;{{16, 68}, {177, 21}}S;19;{{0, 0}, {177, 21}}S;25;Zero pads fraction digitsS;22;{{17, 102}, {194, 25}}S;19;{{0, 0}, {194, 25}}S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;3;534E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;600E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;601E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;362E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;364E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;362E;E;d;2;12S;13;Binary FormatS;17;_popUpItemAction:S;14;Decimal FormatS;20;System Memory FormatS;18;System File FormatS;22;{{279, 41}, {114, 21}}S;19;{{0, 0}, {114, 21}}S;14;Includes countS;22;{{279, 68}, {104, 21}}S;19;{{0, 0}, {104, 21}}S;13;Includes unitS;22;{{279, 14}, {187, 21}}S;19;{{0, 0}, {187, 21}}S;26;Includes actual byte countS;23;{{279, 102}, {195, 25}}S;19;{{0, 0}, {195, 25}}S;19;bordered+pulls-downS;5;UnitsS;7;DefaultS;3;AllS;5;BytesS;2;MBS;2;GBS;2;KBS;13;AppControllerS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;241E;D;K;6;CP$UIDd;3;240E;E;E;S;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;608E;D;K;6;CP$UIDd;3;608E;D;K;6;CP$UIDd;3;608E;D;K;6;CP$UIDd;3;419E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;419E;D;K;6;CP$UIDd;3;419E;E;E;S;20;{{1, -5}, {501, 99}}S;19;{{0, 0}, {501, 99}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;231E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;229E;E;E;d;2;18f;18;0.6862745098039216S;22;{{1, 9.5}, {501, 150}}S;20;{{0, 0}, {501, 150}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;237E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;247E;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
+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;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;22E;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;36E;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;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;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;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;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;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;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;3;101E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;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;126E;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;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;154E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;243E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;262E;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;3;103E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;111E;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;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;112E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;215E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;3;216E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;226E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;232E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;228E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;236E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;3;260E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;250E;D;K;6;CP$UIDd;3;232E;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;263E;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;264E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;230E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;230E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;265E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;266E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;236E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;236E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;267E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;268E;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;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;258E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;234E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;258E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;232E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;258E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;236E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;258E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;226E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;273E;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;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;166E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;172E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;171E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;164E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;174E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;170E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;101E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;289E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;115E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;154E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;155E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;292E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;293E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;296E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;299E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;300E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;145E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;302E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;304E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;178E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;179E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;158E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;160E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;311E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;217E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;218E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;313E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;219E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;314E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;220E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;222E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;316E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;223E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;317E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;224E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;318E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;319E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;211E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;320E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;213E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;321E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;214E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;322E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;205E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;323E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;206E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;324E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;207E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;325E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;208E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;209E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;327E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;328E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;201E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;329E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;202E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;331E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;332E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;196E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;333E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;334E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;238E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;249E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;247E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;248E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;240E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;242E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;335E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;250E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;336E;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;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;242E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;337E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;338E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;339E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;341E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;240E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;342E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;344E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;345E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;248E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;346E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;347E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;348E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;247E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;349E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;350E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;351E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;249E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;352E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;353E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;354E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;239E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;355E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;356E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;357E;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;238E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;258E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;358E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;343E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;359E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;360E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;263E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;361E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;362E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;363E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;364E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;106E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;106E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;364E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;367E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;368E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;373E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;106E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;375E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;376E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;377E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;378E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;379E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;382E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;383E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;384E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;385E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;386E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;122E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;387E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;388E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;389E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;126E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;126E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;392E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;393E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;126E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;395E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;129E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;396E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;397E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;398E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;399E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;400E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;401E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;402E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;403E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;404E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;405E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;407E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;409E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;410E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;412E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;140E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;140E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;412E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;413E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;414E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;415E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;416E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;417E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;418E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;419E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;420E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;421E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;422E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;423E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;424E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;425E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;427E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;428E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;147E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;147E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;428E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;429E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;430E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;431E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;432E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;433E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;434E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;435E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;147E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;153E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;153E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;436E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;437E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;439E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;153E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;440E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;157E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;157E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;440E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;441E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;157E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;427E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;443E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;423E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;157E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;424E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;415E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;157E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;416E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;445E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;162E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;162E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;445E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;446E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;447E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;448E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;449E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;450E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;451E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;452E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;453E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;454E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;455E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;456E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;457E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;169E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;169E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;457E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;458E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;459E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;460E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;169E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;461E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;462E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;411E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;464E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;465E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;162E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;466E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;177E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;177E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;466E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;467E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;468E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;177E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;469E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;470E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;177E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;471E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;181E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;181E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;471E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;472E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;473E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;183E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;183E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;473E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;474E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;475E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;476E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;469E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;477E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;423E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;478E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;479E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;480E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;481E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;482E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;483E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;415E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;484E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;485E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;486E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;487E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;488E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;193E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;488E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;489E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;491E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;492E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;493E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;193E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;494E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;199E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;494E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;495E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;491E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;496E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;199E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;497E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;204E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;204E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;497E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;498E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;490E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;499E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;500E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;501E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;502E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;503E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;504E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;505E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;506E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;183E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;391E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;507E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;216E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;365E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;216E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;181E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;507E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;508E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;509E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;510E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;511E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;512E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;513E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;514E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;515E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;369E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;370E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;371E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;516E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;517E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;408E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;518E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;519E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;216E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;406E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;518E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;225E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;520E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;521E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;522E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;523E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;524E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;525E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;526E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;228E;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;3;227E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;528E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;528E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;529E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;532E;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;3;229E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;228E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;533E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;534E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;228E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;536E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;527E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;537E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;538E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;527E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;426E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;539E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;527E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;K;6;CP$UIDd;1;0E;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;3;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;541E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;542E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;540E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;536E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;543E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;423E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;547E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;369E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;271E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;21;CPControlFormatterKeyD;K;6;CP$UIDd;3;262E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;371E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;550E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;423E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;486E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;371E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;371E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;551E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;552E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;540E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;543E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;423E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;554E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;369E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;371E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;550E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;423E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;486E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;371E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;371E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;556E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;557E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;540E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;543E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;558E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;423E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;559E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;369E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;370E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;369E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;369E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;369E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;560E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;423E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;486E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;371E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;371E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;3;231E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;540E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;561E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;562E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;540E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;543E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;423E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;563E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;369E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;564E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;371E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;371E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;550E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;423E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;486E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;371E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;371E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;3;229E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;228E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;565E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;566E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;567E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;228E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;536E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;527E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;537E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;568E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;527E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;426E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;569E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;423E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;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;3;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;571E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;572E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;575E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;576E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;3;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;577E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;578E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;579E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;580E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;3;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;581E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;582E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;583E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;584E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;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;3;241E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;259E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;585E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;586E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;588E;K;6;$afontD;K;6;CP$UIDd;3;589E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;486E;K;11;$aalignmentD;K;6;CP$UIDd;3;527E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;590E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;527E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;591E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;527E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;592E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;594E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;595E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;596E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;259E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;597E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;598E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;599E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;600E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;3;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;601E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;602E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;574E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;603E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;604E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;3;237E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;605E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;606E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;573E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;544E;K;16;$aimage-positionD;K;6;CP$UIDd;3;423E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;527E;K;11;$aalignmentD;K;6;CP$UIDd;3;486E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;607E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;527E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;608E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;426E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;426E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;3;241E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;570E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;260E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;609E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;610E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;570E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;553E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;587E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;611E;K;6;$afontD;K;6;CP$UIDd;3;589E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;486E;K;11;$aalignmentD;K;6;CP$UIDd;3;527E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;612E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;486E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;527E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;548E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;613E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;370E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;371E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;591E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;527E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;369E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;423E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;527E;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;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;613E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;21;CPMenuItemIsHiddenKeyD;K;6;CP$UIDd;3;369E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;614E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;426E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;615E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;616E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;617E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;618E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;619E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;593E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;260E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;620E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;621E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;622E;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;621E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;623E;E;D;K;10;$classnameS;20;CPByteCountFormatterK;8;$classesA;S;20;CPByteCountFormatterS;11;CPFormatterS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;33;CPByteCountFormatterCountStyleKeyD;K;6;CP$UIDd;3;527E;K;49;CPByteCountFormatterAllowsNonnumericFormattingKeyD;K;6;CP$UIDd;3;369E;K;46;CPByteCountFormatterIncludesActualByteCountKeyD;K;6;CP$UIDd;3;371E;K;36;CPByteCountFormatterIncludesCountKeyD;K;6;CP$UIDd;3;369E;K;35;CPByteCountFormatterIncludesUnitKeyD;K;6;CP$UIDd;3;369E;K;31;CPByteCountFormatterAdaptiveKeyD;K;6;CP$UIDd;3;369E;K;45;CPByteCountFormatterZeroPadsFractionDigitsKeyD;K;6;CP$UIDd;3;371E;K;35;CPByteCountFormatterAllowedUnitsKeyD;K;6;CP$UIDd;3;527E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;226E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;624E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;371E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;624E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;371E;E;E;S;8;delegateS;9;byteCountS;18;formattedByteCountS;10;propertiesS;10;testWindowS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;14;runPageLayout:S;6;print:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;5;hide:S;10;terminate:S;22;hideOtherApplications:S;22;unhideAllApplications:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;10;alignLeft:S;12;alignCenter:S;15;alignJustified:S;11;alignRight:S;12;toggleRuler:S;10;copyRuler:S;11;pasteRuler:S;10;underline:S;21;orderFrontColorPanel:S;9;copyFont:S;10;pasteFont:S;9;unscript:S;12;superscript:S;10;subscript:S;14;raiseBaseline:S;14;lowerBaseline:S;21;useStandardLigatures:S;17;turnOffLigatures:S;16;useAllLigatures:S;19;useStandardKerning:S;15;turnOffKerning:S;15;tightenKerning:S;14;loosenKerning:S;16;propertyChanged:S;13;unitsChanged:S;59;selectedIndex: self.formattedByteCount.formatter.countStyleS;13;selectedIndexS;44;self.formattedByteCount.formatter.countStyleD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;63;value: self.formattedByteCount.formatter.zeroPadsFractionDigitsS;5;valueS;56;self.formattedByteCount.formatter.zeroPadsFractionDigitsD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;53;value: self.formattedByteCount.formatter.includesUnitS;46;self.formattedByteCount.formatter.includesUnitD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;54;value: self.formattedByteCount.formatter.includesCountS;47;self.formattedByteCount.formatter.includesCountD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;64;value: self.formattedByteCount.formatter.includesActualByteCountS;57;self.formattedByteCount.formatter.includesActualByteCountD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;67;value: self.formattedByteCount.formatter.allowsNonnumericFormattingS;60;self.formattedByteCount.formatter.allowsNonnumericFormattingD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;49;value: self.formattedByteCount.formatter.adaptiveS;42;self.formattedByteCount.formatter.adaptiveD;K;6;$classD;K;6;CP$UIDd;3;340E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;125E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;116E;E;E;S;20;About NewApplicationS;19;Hide NewApplicationS;1;hS;8;Show AllS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;8;ServicesS;15;_CPServicesMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Hide Othersd;7;1572864S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;156E;D;K;6;CP$UIDd;3;152E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;142E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;151E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;154E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;158E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;160E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;165E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;6;Print…S;1;pS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;170E;E;E;S;10;Clear MenuS;13;Page Setup...S;1;PS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;179E;E;E;S;12;Show ToolbarS;1;tS;18;Customize Toolbar…S;6;FormatD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;215E;E;E;S;4;FontS;11;_CPFontMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;210E;D;K;6;CP$UIDd;3;211E;D;K;6;CP$UIDd;3;212E;D;K;6;CP$UIDd;3;213E;D;K;6;CP$UIDd;3;214E;E;E;S;10;Show FontsS;4;BoldS;1;bS;6;ItalicS;1;iS;9;UnderlineS;1;uS;6;BiggerS;1;+S;7;Smallerd;1;4S;1;-S;4;KernD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;197E;E;E;S;11;Use DefaultS;8;Use NoneS;7;TightenS;6;LoosenS;8;LigatureD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;E;E;S;7;Use AllS;8;BaselineD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;207E;D;K;6;CP$UIDd;3;208E;D;K;6;CP$UIDd;3;209E;E;E;S;11;SuperscriptS;9;SubscriptS;5;RaiseS;5;LowerS;11;Show ColorsS;1;CS;10;Copy StyleS;11;Paste StyleS;4;TextD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;217E;D;K;6;CP$UIDd;3;218E;D;K;6;CP$UIDd;3;219E;D;K;6;CP$UIDd;3;220E;D;K;6;CP$UIDd;3;221E;D;K;6;CP$UIDd;3;222E;D;K;6;CP$UIDd;3;223E;D;K;6;CP$UIDd;3;224E;E;E;S;10;Align LeftS;1;{S;6;CenterS;1;|S;7;JustifyS;11;Align RightS;1;}S;10;Show RulerS;10;Copy Rulerd;7;1310720S;11;Paste RulerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1948778496S;23;{{42, 107}, {537, 306}}S;21;{{0, 0}, {1440, 878}}d;2;15S;29;CPByteCountFormatter Workshopd;1;0S;20;{{0, 0}, {537, 306}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;230E;D;K;6;CP$UIDd;3;236E;E;E;S;6;normalS;6;{1, 1}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{21, 20}, {495, 95}}S;19;{{0, 0}, {495, 95}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;540E;E;E;d;2;34S;3;boxD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;3;BoxD;K;6;$classD;K;6;CP$UIDd;3;227E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;230E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;629E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;630E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;631E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;230E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;632E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;633E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;634E;E;S;21;{{94, 62}, {390, 17}}S;19;{{0, 0}, {390, 17}}S;9;textfieldS;18;controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;545E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;625E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;548E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;371E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;371E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;-1D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;549E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;626E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;627E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;E;S;20;{{17, 62}, {69, 17}}S;18;{{0, 0}, {69, 17}}d;2;36D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;Formatted:S;21;{{91, 21}, {171, 22}}S;19;{{0, 0}, {171, 22}}S;47;bezeled+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;549E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;628E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;627E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;E;S;20;{{17, 27}, {71, 17}}S;18;{{0, 0}, {71, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Byte count:S;27;{{21, 125.5}, {495, 160.5}}S;22;{{0, 0}, {495, 160.5}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;570E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;PropertiesD;K;6;$classD;K;6;CP$UIDd;3;227E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;236E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;527E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;636E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;637E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;638E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;236E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;632E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;530E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;633E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;531E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;531E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;371E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;639E;E;S;20;{{15, 15}, {87, 21}}S;18;{{0, 0}, {87, 21}}S;9;check-boxS;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;AdaptiveS;21;{{15, 43}, {232, 21}}S;19;{{0, 0}, {232, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;29;Allows non-numeric formattingS;21;{{15, 70}, {187, 21}}S;19;{{0, 0}, {187, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;25;Zero pads fraction digitsS;22;{{17, 105}, {194, 25}}S;19;{{0, 0}, {194, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;545E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;625E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;548E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;369E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;371E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;369E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;12S;13;Binary FormatS;17;_popUpItemAction:S;14;Decimal FormatS;20;System Memory FormatS;18;System File FormatS;22;{{278, 43}, {124, 21}}S;19;{{0, 0}, {124, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;14;Includes countS;22;{{278, 70}, {114, 21}}S;19;{{0, 0}, {114, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;Includes unitS;22;{{278, 16}, {197, 21}}S;19;{{0, 0}, {197, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;26;Includes actual byte countS;23;{{279, 105}, {195, 25}}S;19;{{0, 0}, {195, 25}}S;38;bordered+controlSizeRegular+pulls-downD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;UnitsS;7;DefaultS;3;AllS;5;BytesS;2;MBS;2;GBS;2;KBS;13;AppControllerS;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;245E;D;K;6;CP$UIDd;3;244E;D;K;6;CP$UIDd;3;243E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;251E;D;K;6;CP$UIDd;3;252E;D;K;6;CP$UIDd;3;253E;D;K;6;CP$UIDd;3;254E;D;K;6;CP$UIDd;3;257E;D;K;6;CP$UIDd;3;255E;D;K;6;CP$UIDd;3;256E;E;E;S;19;autoresizesSubviewsS;28;_CPFontSystemFacePlaceholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;635E;D;K;6;CP$UIDd;3;426E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;426E;D;K;6;CP$UIDd;3;426E;E;E;S;20;{{1, -5}, {501, 99}}S;19;{{0, 0}, {501, 99}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;234E;D;K;6;CP$UIDd;3;235E;D;K;6;CP$UIDd;3;233E;D;K;6;CP$UIDd;3;232E;E;E;d;2;18S;6;_NS:11D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;f;18;0.6862745098039216S;22;{{1, 9.5}, {501, 150}}S;20;{{0, 0}, {501, 150}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;238E;D;K;6;CP$UIDd;3;239E;D;K;6;CP$UIDd;3;247E;D;K;6;CP$UIDd;3;248E;D;K;6;CP$UIDd;3;240E;D;K;6;CP$UIDd;3;249E;D;K;6;CP$UIDd;3;242E;D;K;6;CP$UIDd;3;250E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPCursor/AppController.j b/Tests/Manual/CPCursor/AppController.j
index 0e2f3eabb..e5fcb4392 100644
--- a/Tests/Manual/CPCursor/AppController.j
+++ b/Tests/Manual/CPCursor/AppController.j
@@ -5,7 +5,7 @@
@import
@implementation CursorTester : CPView
-{
+{
CPCursor testCursor;
CPTextField label;
}
@@ -15,6 +15,7 @@
cursor:(CPCursor)aCursor
{
self = [super init];
+
if (self)
{
testCursor = aCursor;
@@ -26,7 +27,16 @@
anOrigin.y,
[label frame].size.width,
[label frame].size.height)];
+
+ var trackingArea = [[CPTrackingArea alloc] initWithRect:CGRectMakeZero()
+ options:CPTrackingMouseEnteredAndExited | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect
+ owner:self
+ userInfo:nil];
+
+ [self addTrackingArea:trackingArea];
+;
}
+
return self;
}
@@ -57,7 +67,7 @@
yInc = 25,
imageCursorTester = [[CursorTester alloc] initWithText:@"Image cursor"
origin:CGPointMake(x, y)
- cursor:[[CPCursor alloc] initWithImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle mainBundle] resourcePath] + @"spinner.gif"]
+ cursor:[[CPCursor alloc] initWithImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle mainBundle] resourcePath] + @"spinner.gif"]
hotSpot:CGPointMakeZero()]],
arrowCursorTester = [[CursorTester alloc] initWithText:@"Arrow cursor"
origin:CGPointMake(x, y+=yInc)
@@ -110,7 +120,7 @@
disappearingItemCursorTester = [[CursorTester alloc] initWithText:@"Disappearing item cursor"
origin:CGPointMake(x, y+=yInc)
cursor:[CPCursor disappearingItemCursor]];
-
+
[contentView addSubview:imageCursorTester];
[contentView addSubview:arrowCursorTester];
[contentView addSubview:crosshairCursorTester];
diff --git a/Tests/Manual/CPDatePickerTest/Resources/MainMenu.cib b/Tests/Manual/CPDatePickerTest/Resources/MainMenu.cib
index 7d9080571..acd80bb55 100644
--- a/Tests/Manual/CPDatePickerTest/Resources/MainMenu.cib
+++ b/Tests/Manual/CPDatePickerTest/Resources/MainMenu.cib
@@ -1 +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;22E;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;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;36E;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;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;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;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;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;80E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;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;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;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;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;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;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;126E;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;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;151E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;162E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;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;82E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;85E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;111E;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;112E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;101E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;146E;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;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;201E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;168E;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;205E;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;206E;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;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;207E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;168E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;208E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;172E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;161E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;210E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;192E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;187E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;184E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;157E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;151E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;187E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;192E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;184E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;157E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;217E;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;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;87E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;92E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;137E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;142E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;136E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;141E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;93E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;80E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;126E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;127E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;103E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;121E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;102E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;107E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;88E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;147E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;148E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;130E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;131E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;168E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;172E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;253E;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;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;256E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;258E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;198E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;261E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;262E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;263E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;264E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;265E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;266E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;193E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;268E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;269E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;270E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;192E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;271E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;272E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;187E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;274E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;275E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;276E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;184E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;277E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;278E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;279E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;165E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;150E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;280E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;281E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;282E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;150E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;281E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;285E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;287E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;288E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;289E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;292E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;293E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;157E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;151E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;255E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;296E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;297E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;205E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;298E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;299E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;300E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;301E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;85E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;85E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;301E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;304E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;305E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;85E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;309E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;85E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;310E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;85E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;85E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;312E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;313E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;91E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;91E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;313E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;314E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;315E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;316E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;317E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;318E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;319E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;320E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;91E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;321E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;98E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;98E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;321E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;322E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;323E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;98E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;324E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;101E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;101E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;325E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;327E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;328E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;329E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;330E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;331E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;332E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;334E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;336E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;337E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;338E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;339E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;341E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;341E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;342E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;343E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;344E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;345E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;346E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;347E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;348E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;349E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;350E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;351E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;352E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;353E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;354E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;357E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;119E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;119E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;357E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;358E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;359E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;360E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;361E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;362E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;363E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;364E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;119E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;365E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;125E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;125E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;365E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;366E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;367E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;125E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;368E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;125E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;129E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;129E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;101E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;369E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;370E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;371E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;356E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;352E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;353E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;373E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;344E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;129E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;345E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;374E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;134E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;134E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;374E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;375E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;377E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;379E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;340E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;382E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;383E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;140E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;140E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;384E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;385E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;386E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;387E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;140E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;389E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;306E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;307E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;308E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;390E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;134E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;391E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;146E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;302E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;146E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;82E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;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;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;393E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;394E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;395E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;396E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;146E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;303E;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;149E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;397E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;306E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;308E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;398E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;152E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;399E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;400E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;401E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;402E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;403E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;349E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;404E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;155E;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;3;154E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;406E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;406E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;407E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;411E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;415E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;420E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;405E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;355E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;355E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;422E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;423E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;424E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;420E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;414E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;306E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;306E;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;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;425E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;426E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;427E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;405E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;428E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;405E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;355E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;429E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;405E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;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;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;201E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;431E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;352E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;435E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;405E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;436E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;438E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;439E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;161E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;352E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;202E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;440E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;435E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;405E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;441E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;165E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;442E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;165E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;202E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;204E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;443E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;405E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;435E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;405E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;168E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;445E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;168E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;168E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;352E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;203E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;447E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;433E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;434E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;405E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;435E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;405E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;172E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;352E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;449E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;172E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;355E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;444E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;172E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;437E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;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;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;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;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;455E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;457E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;458E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;459E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;460E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;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;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;461E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;462E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;465E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;466E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;467E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;464E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;468E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;469E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;470E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;405E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;428E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;14;$aborder-widthD;K;6;CP$UIDd;3;405E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;405E;K;16;$acontent-marginD;K;6;CP$UIDd;3;472E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;352E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;344E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;473E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;405E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;474E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;415E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;423E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;405E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;405E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;405E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;476E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;477E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;478E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;423E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;414E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;306E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;479E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;480E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;481E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;482E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;484E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;485E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;415E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;424E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;405E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;405E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;405E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;476E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;486E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;487E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;424E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;414E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;306E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;488E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;489E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;490E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;491E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;470E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;405E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;428E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;14;$aborder-widthD;K;6;CP$UIDd;3;405E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;405E;K;16;$acontent-marginD;K;6;CP$UIDd;3;492E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;352E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;344E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;473E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;405E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;493E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;494E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;495E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;451E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;405E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;454E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;496E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;405E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;497E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;475E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;414E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;415E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;416E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;498E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;405E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;405E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;405E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;476E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;499E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;500E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;498E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;414E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;306E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;501E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;503E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;504E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;505E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;3;180E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;430E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;506E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;502E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;430E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;463E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;483E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;405E;K;6;$afontD;K;6;CP$UIDd;3;418E;K;16;$aimage-positionD;K;6;CP$UIDd;3;352E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;355E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;507E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;307E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;308E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;355E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;355E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;306E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;352E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;405E;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;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;508E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;509E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;421E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;6;$afontD;K;6;CP$UIDd;3;510E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;511E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;421E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;512E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;513E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;352E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;12;$atext-colorD;K;6;CP$UIDd;3;515E;K;6;$afontD;K;6;CP$UIDd;3;516E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;517E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;352E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;176E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;155E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;513E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;155E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;412E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;452E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;453E;K;11;$aalignmentD;K;6;CP$UIDd;3;352E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;352E;K;12;$atext-colorD;K;6;CP$UIDd;3;519E;K;6;$afontD;K;6;CP$UIDd;3;520E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;306E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;517E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;421E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;405E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;308E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;308E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;456E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;352E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;352E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;24;CPUserDefaultsControllerK;8;$classesA;S;24;CPUserDefaultsControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;33;CPUserDefaultsControllerSharedKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;522E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;523E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;524E;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;521E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;525E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;153E;E;E;S;8;delegateS;18;buttonElementsDateS;18;buttonElementsTimeS;11;buttonStyleS;17;pickerCurrentDateS;13;pickerMaxDateS;13;pickerMinDateS;12;pickerTargetS;9;theWindowS;11;nextKeyViewS;7;contentS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;15;updateElements:S;23;updateHasMinConstraint:S;23;updateHasMaxConstraint:S;27;value: pickerTarget.enabledS;5;valueS;20;pickerTarget.enabledD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;32;value: pickerTarget.timeIntervalS;25;pickerTarget.timeIntervalD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;K;25;CPConditionallySetsHiddenD;K;6;CP$UIDd;3;306E;E;E;S;31;value: pickerTarget.objectValueS;24;pickerTarget.objectValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;28;value: pickerTarget.borderedS;21;pickerTarget.borderedD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;35;value: pickerTarget.drawsBackgroundS;28;pickerTarget.drawsBackgroundD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;29;value: pickerTarget.dateValueS;22;pickerTarget.dateValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;27;value: pickerTarget.maxDateS;20;pickerTarget.maxDateD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;27;value: pickerTarget.minDateS;20;pickerTarget.minDateD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;37;selectedTag: selection.datePickerModeS;11;selectedTagS;24;selection.datePickerModeD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;38;selectedTag: selection.datePickerStyleS;25;selection.datePickerStyleD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;35;maxValue: pickerMaxDate.objectValueS;8;maxValueS;25;pickerMaxDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;35;minValue: pickerMinDate.objectValueS;8;minValueS;25;pickerMinDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;36;value: pickerCurrentDate.objectValueS;29;pickerCurrentDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;97E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;93E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;99E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;128E;D;K;6;CP$UIDd;3;124E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;114E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;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;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;123E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;126E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;132E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;144E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;141E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;12;CPDatePickerS;13;AppControllerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{133, 112}, {885, 477}}S;21;{{0, 0}, {1440, 878}}S;17;CPDatePicker Testd;1;0S;20;{{0, 0}, {885, 477}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;198E;E;E;S;6;normalS;6;{1, 1}S;24;{{456, 161}, {273, 148}}S;20;{{0, 0}, {273, 148}}d;2;36D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;526E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;528E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;D;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;529E;E;d;1;4d;3;510D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;530E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;531E;E;S;22;{{21, 75}, {355, 382}}S;20;{{0, 0}, {355, 382}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;430E;E;E;S;3;boxS;10;ParametersD;K;6;$classD;K;6;CP$UIDd;3;154E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;159E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;405E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;542E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;543E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;544E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;159E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;545E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;408E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;546E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;409E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;409E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;308E;E;S;22;{{104, 16}, {230, 25}}S;19;{{0, 0}, {230, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegulard;2;12S;9;GraphicalS;17;_popUpItemAction:S;20;Textual with StepperS;7;TextualS;22;{{104, 46}, {230, 25}}S;11;Single DateS;10;Date RangeS;22;{{104, 77}, {230, 25}}S;4;NoneS;14;Month and YearS;19;Month, Day and YearS;23;{{104, 108}, {230, 25}}S;23;Hour, Minute and SecondS;15;Hour and MinuteS;20;{{18, 18}, {78, 17}}S;18;{{0, 0}, {78, 17}}S;9;textfieldS;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;528E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;306E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;S;5;StyleD;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;532E;E;S;20;{{18, 50}, {78, 17}}S;7;SelectsS;20;{{18, 81}, {78, 17}}S;8;ElementsS;22;{{106, 138}, {89, 21}}S;18;{{0, 0}, {89, 21}}S;9;check-boxS;36;controlSizeRegular+disabled+selectedS;9;Time zoneS;22;{{199, 138}, {76, 21}}S;18;{{0, 0}, {76, 21}}S;3;EraS;20;{{2, 163}, {357, 5}}S;18;{{0, 0}, {357, 5}}D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;471E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;533E;E;S;3;BoxS;23;{{104, 193}, {230, 29}}S;19;{{0, 0}, {230, 29}}d;3;238D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;535E;E;S;21;{{18, 174}, {78, 17}}S;11;ConstraintsS;23;{{106, 170}, {113, 21}}S;19;{{0, 0}, {113, 21}}S;27;controlSizeRegular+selectedS;12;Minimum dateS;23;{{104, 245}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;535E;E;S;23;{{106, 222}, {116, 21}}S;19;{{0, 0}, {116, 21}}S;12;Maximum dateS;20;{{2, 277}, {357, 5}}D;K;6;$classD;K;6;CP$UIDd;3;471E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;533E;E;S;21;{{18, 290}, {78, 17}}S;4;DateS;21;{{18, 315}, {78, 17}}S;7;DisplayS;23;{{104, 284}, {230, 29}}D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;536E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;534E;E;D;K;6;$classD;K;6;CP$UIDd;3;419E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;535E;E;S;22;{{106, 313}, {97, 21}}S;18;{{0, 0}, {97, 21}}S;10;BackgroundS;22;{{106, 333}, {97, 21}}S;6;BorderS;22;{{106, 353}, {97, 21}}S;7;EnabledS;21;{{20, 20}, {162, 29}}S;19;{{0, 0}, {162, 29}}D;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;537E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;306E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;S;17;CPDatePicker testS;22;{{416, 75}, {356, 21}}S;19;{{0, 0}, {356, 21}}D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;514E;K;4;nameD;K;6;CP$UIDd;3;538E;K;12;defaultValueD;K;6;CP$UIDd;3;539E;K;6;valuesD;K;6;CP$UIDd;3;540E;E;D;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;537E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;S;5;LabelS;23;{{416, 104}, {356, 21}}D;K;6;$classD;K;6;CP$UIDd;3;514E;K;4;nameD;K;6;CP$UIDd;3;538E;K;12;defaultValueD;K;6;CP$UIDd;3;539E;K;6;valuesD;K;6;CP$UIDd;3;541E;E;D;K;6;$classD;K;6;CP$UIDd;3;417E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;527E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;537E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;308E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;308E;E;S;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;162E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;175E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;169E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;D;K;6;CP$UIDd;3;355E;E;E;S;17;.Lucida Grande UId;2;13d;13;1355344212000d;15;-62135554022000d;14;64092254400000D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;547E;D;K;6;CP$UIDd;3;355E;E;E;S;22;{"width":0,"height":0}d;15;-62135510400000d;14;64092297600000d;13;1355343132000d;2;17S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;548E;E;D;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;539E;K;6;normalD;K;6;CP$UIDd;3;549E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;257E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;539E;K;6;normalD;K;6;CP$UIDd;3;550E;E;E;S;21;{{1, -5}, {361, 386}}S;20;{{0, 0}, {361, 386}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;178E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;182E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;195E;E;E;d;2;18S;6;_NS:11f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;405E;D;K;6;CP$UIDd;3;355E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;551E;E;D;K;6;$classD;K;6;CP$UIDd;3;413E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;552E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;355E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;553E;D;K;6;CP$UIDd;3;355E;E;E;f;12;0.3455284834E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
+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;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;22E;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;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;36E;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;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;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;82E;D;K;6;CP$UIDd;2;84E;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;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;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;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;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;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;126E;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;131E;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;136E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;142E;D;K;6;CP$UIDd;3;143E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;146E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;D;K;6;CP$UIDd;3;152E;D;K;6;CP$UIDd;3;153E;D;K;6;CP$UIDd;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;164E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;171E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;202E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;206E;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;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;126E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;3;135E;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;3;141E;D;K;6;CP$UIDd;3;142E;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;84E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;3;148E;D;K;6;CP$UIDd;3;148E;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;3;155E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;203E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;204E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;205E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;206E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;197E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;157E;D;K;6;CP$UIDd;3;200E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;174E;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;207E;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;208E;E;D;K;10;$classnameS;31;CPCibRuntimeAttributesConnectorK;8;$classesA;S;31;CPCibRuntimeAttributesConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;161E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;1;0E;K;40;CPCibRuntimeAttributesConnectorObjectKeyD;K;6;CP$UIDd;3;161E;K;42;CPCibRuntimeAttributesConnectorKeyPathsKeyD;K;6;CP$UIDd;3;209E;K;40;CPCibRuntimeAttributesConnectorValuesKeyD;K;6;CP$UIDd;3;210E;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;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;211E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;170E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;174E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;213E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;163E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;214E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;194E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;215E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;216E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;186E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;217E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;159E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;218E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;153E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;155E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;219E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;189E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;194E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;186E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;220E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;152E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;159E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;221E;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;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;89E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;222E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;223E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;94E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;224E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;139E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;225E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;144E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;226E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;137E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;138E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;228E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;140E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;229E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;230E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;146E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;231E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;143E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;232E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;233E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;128E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;234E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;235E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;236E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;237E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;108E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;238E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;239E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;240E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;241E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;124E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;242E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;119E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;244E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;116E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;112E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;246E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;122E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;247E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;90E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;248E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;149E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;249E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;150E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;250E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;125E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;132E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;252E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;133E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;134E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;170E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;174E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;188E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;190E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;257E;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;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;197E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;258E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;260E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;262E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;200E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;263E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;264E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;199E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;266E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;267E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;196E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;269E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;270E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;195E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;272E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;273E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;274E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;194E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;275E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;276E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;189E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;278E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;279E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;280E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;186E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;281E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;282E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;167E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;152E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;284E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;285E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;286E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;287E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;163E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;152E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;288E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;285E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;289E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;290E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;291E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;292E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;293E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;294E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;295E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;296E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;297E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;298E;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;159E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;153E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;299E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;3;259E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;3;300E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;301E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;207E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;302E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;303E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;304E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;305E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;87E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;87E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;305E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;308E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;309E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;313E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;314E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;315E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;87E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;316E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;317E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;93E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;93E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;317E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;318E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;319E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;320E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;321E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;322E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;323E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;324E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;93E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;325E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;100E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;100E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;325E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;326E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;327E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;100E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;328E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;329E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;103E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;329E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;330E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;331E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;332E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;333E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;334E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;335E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;336E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;337E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;338E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;339E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;340E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;341E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;342E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;343E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;345E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;114E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;114E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;345E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;346E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;347E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;348E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;349E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;350E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;351E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;352E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;353E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;354E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;355E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;356E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;357E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;358E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;114E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;361E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;121E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;121E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;361E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;362E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;363E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;364E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;365E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;366E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;367E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;368E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;121E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;369E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;127E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;127E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;369E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;370E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;371E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;372E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;127E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;373E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;131E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;131E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;373E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;374E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;375E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;360E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;376E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;356E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;357E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;377E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;348E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;131E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;349E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;378E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;136E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;136E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;378E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;379E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;380E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;381E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;382E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;383E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;344E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;384E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;385E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;386E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;387E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;388E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;142E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;142E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;388E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;389E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;390E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;391E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;142E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;392E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;393E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;310E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;311E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;312E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;394E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;136E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;395E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;148E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;306E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;148E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;395E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;396E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;397E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;148E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;398E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;399E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;400E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;148E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;307E;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;151E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;401E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;310E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;312E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;402E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;154E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;403E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;404E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;405E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;406E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;407E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;353E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;408E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;157E;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;3;156E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;410E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;410E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;411E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;414E;E;D;K;10;$classnameS;12;CPDatePickerK;8;$classesA;S;12;CPDatePickerS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;415E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;416E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;419E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;420E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;424E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;426E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;409E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;359E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;359E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;428E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;429E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;430E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;426E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;419E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;310E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;310E;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;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;431E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;432E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;433E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;409E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;435E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;409E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;359E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;436E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;409E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;K;6;CP$UIDd;1;0E;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;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;203E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;438E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;439E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;6;$afontD;K;6;CP$UIDd;3;442E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;427E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;443E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;356E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;445E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;409E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;446E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;163E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;448E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;163E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;449E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;163E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;356E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;203E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;204E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;450E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;439E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;6;$afontD;K;6;CP$UIDd;3;451E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;427E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;452E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;445E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;409E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;453E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;454E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;167E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;204E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;205E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;455E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;439E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;6;$afontD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;427E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;457E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;409E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;445E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;409E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;170E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;459E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;170E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;460E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;170E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;205E;E;D;K;6;$classD;K;6;CP$UIDd;3;162E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;3;206E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;461E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;439E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;440E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;441E;K;6;$afontD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;427E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;462E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;409E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;445E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;409E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;463E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;174E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;356E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;464E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;174E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;359E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;458E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;174E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;447E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;206E;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;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;465E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;456E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;469E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;470E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;472E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;442E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;473E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;474E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;475E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;451E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;476E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;477E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;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;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;478E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;479E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;481E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;483E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;484E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;485E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;486E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;481E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;487E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;488E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;489E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;490E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;409E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;16;$acontent-marginD;K;6;CP$UIDd;3;492E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;409E;K;14;$aborder-widthD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;493E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;356E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;348E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;494E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;409E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;495E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;419E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;420E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;497E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;429E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;409E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;409E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;409E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;498E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;499E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;500E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;429E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;419E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;310E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;501E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;502E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;503E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;504E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;505E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;506E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;508E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;509E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;510E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;419E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;420E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;511E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;430E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;409E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;409E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;409E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;498E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;512E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;513E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;430E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;419E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;310E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;514E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;515E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;516E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;517E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;3;160E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;518E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;490E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;25;CPViewAutoresizesSubviewsD;K;6;CP$UIDd;3;409E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;434E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;16;$acontent-marginD;K;6;CP$UIDd;3;519E;K;15;$acorner-radiusD;K;6;CP$UIDd;3;409E;K;14;$aborder-widthD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;520E;K;12;CPBoxTypeKeyD;K;6;CP$UIDd;3;356E;K;18;CPBoxBorderTypeKeyD;K;6;CP$UIDd;3;348E;K;10;CPBoxTitleD;K;6;CP$UIDd;3;494E;K;18;CPBoxTitlePositionD;K;6;CP$UIDd;3;409E;K;14;CPBoxTitleViewD;K;6;CP$UIDd;1;0E;K;16;CPBoxContentViewD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;521E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;522E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;523E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;524E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;525E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;466E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;526E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;409E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;527E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;528E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;409E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;158E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;529E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;496E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;419E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;420E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;421E;K;6;$afontD;K;6;CP$UIDd;3;423E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;530E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;531E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;13;CPIntervalKeyD;K;6;CP$UIDd;3;409E;K;19;CPDatePickerModeKeyD;K;6;CP$UIDd;3;409E;K;20;CPDatePickerStyleKeyD;K;6;CP$UIDd;3;409E;K;23;CPDatePickerElementsKeyD;K;6;CP$UIDd;3;498E;K;12;CPMinDateKeyD;K;6;CP$UIDd;3;532E;K;12;CPMaxDateKeyD;K;6;CP$UIDd;3;533E;K;14;CPDateValueKeyD;K;6;CP$UIDd;3;531E;K;13;CPTextFontKeyD;K;6;CP$UIDd;1;0E;K;11;CPLocaleKeyD;K;6;CP$UIDd;1;0E;K;20;CPBackgroundColorKeyD;K;6;CP$UIDd;3;419E;K;20;CPDrawsBackgroundKeyD;K;6;CP$UIDd;3;310E;K;13;CPBorderedKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;534E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;536E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;537E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;538E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;539E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;540E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;3;182E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;437E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;541E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;535E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;437E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;480E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;507E;K;16;$aimage-positionD;K;6;CP$UIDd;3;356E;K;6;$afontD;K;6;CP$UIDd;3;482E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;409E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;542E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;359E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;543E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;311E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;312E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;359E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;359E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;310E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;356E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;409E;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;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;544E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;545E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;546E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;427E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;547E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;548E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;427E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;549E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;550E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;551E;K;12;$atext-colorD;K;6;CP$UIDd;3;553E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;554E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;356E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;157E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;556E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;550E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;157E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;417E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;467E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;468E;K;6;$afontD;K;6;CP$UIDd;3;557E;K;12;$atext-colorD;K;6;CP$UIDd;3;558E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;356E;K;11;$aalignmentD;K;6;CP$UIDd;3;356E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;559E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;310E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;555E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;427E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;409E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;444E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;312E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;312E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;471E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;356E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;356E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;312E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;312E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;310E;E;D;K;10;$classnameS;24;CPUserDefaultsControllerK;8;$classesA;S;24;CPUserDefaultsControllerS;12;CPControllerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;201E;K;33;CPUserDefaultsControllerSharedKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;560E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;561E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;560E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;562E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;560E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;563E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;560E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;564E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;155E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;565E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;312E;E;E;S;8;delegateS;18;buttonElementsDateS;18;buttonElementsTimeS;11;buttonStyleS;17;pickerCurrentDateS;13;pickerMaxDateS;13;pickerMinDateS;12;pickerTargetS;9;theWindowS;11;nextKeyViewS;7;contentS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;15;updateElements:S;23;updateHasMinConstraint:S;23;updateHasMaxConstraint:S;27;value: pickerTarget.enabledS;5;valueS;20;pickerTarget.enabledD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;32;value: pickerTarget.timeIntervalS;25;pickerTarget.timeIntervalD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;25;CPConditionallySetsHiddenD;K;6;CP$UIDd;3;310E;E;E;S;31;value: pickerTarget.objectValueS;24;pickerTarget.objectValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;28;value: pickerTarget.borderedS;21;pickerTarget.borderedD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;35;value: pickerTarget.drawsBackgroundS;28;pickerTarget.drawsBackgroundD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;29;value: pickerTarget.dateValueS;22;pickerTarget.dateValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;27;value: pickerTarget.maxDateS;20;pickerTarget.maxDateD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;27;value: pickerTarget.minDateS;20;pickerTarget.minDateD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;37;selectedTag: selection.datePickerModeS;11;selectedTagS;24;selection.datePickerModeD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;38;selectedTag: selection.datePickerStyleS;25;selection.datePickerStyleD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;35;maxValue: pickerMaxDate.objectValueS;8;maxValueS;25;pickerMaxDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;35;minValue: pickerMinDate.objectValueS;8;minValueS;25;pickerMinDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;36;value: pickerCurrentDate.objectValueS;29;pickerCurrentDate.objectValueD;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;E;E;S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;3;135E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;147E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;99E;E;E;S;6;WindowS;14;submenuAction:d;7;1048576S;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;E;E;T;S;0;F;S;18;Bring All to FrontS;4;ZoomS;8;MinimizeS;1;mS;14;NewApplicationS;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;95E;E;E;S;20;About NewApplicationS;19;Quit NewApplicationS;1;qS;12;Preferences…S;1;,S;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;E;E;S;19;NewApplication HelpS;1;?S;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;130E;D;K;6;CP$UIDd;3;126E;E;E;S;6;DeleteS;10;Select AllS;1;aS;4;UndoS;1;zS;3;CutS;1;xS;5;PasteS;1;vS;4;CopyS;1;cS;4;RedoS;1;Zd;7;1179648S;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;116E;E;E;S;13;Find Previousd;1;3S;1;GS;17;Jump to SelectionS;1;jS;22;Use Selection for Findd;1;7S;1;eS;9;Find Nextd;1;2S;1;gS;5;Find…d;1;1S;1;fS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;125E;E;E;S;27;Check Spelling While TypingS;14;Check SpellingS;1;;S;14;Show Spelling…S;1;:S;27;Check Grammar With SpellingS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;128E;E;E;S;13;Stop SpeakingS;14;Start SpeakingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;132E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;140E;D;K;6;CP$UIDd;3;139E;D;K;6;CP$UIDd;3;141E;D;K;6;CP$UIDd;3;145E;D;K;6;CP$UIDd;3;144E;D;K;6;CP$UIDd;3;137E;D;K;6;CP$UIDd;3;138E;D;K;6;CP$UIDd;3;146E;E;E;S;4;SaveS;1;sS;8;Save As…S;1;SS;5;Open…S;1;oS;3;NewS;1;nS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;143E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;15;Revert to SavedS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;149E;D;K;6;CP$UIDd;3;150E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;12;CPDatePickerS;13;AppControllerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;24;{{133, 112}, {885, 477}}S;21;{{0, 0}, {1440, 878}}S;17;CPDatePicker Testd;1;0S;20;{{0, 0}, {885, 477}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;159E;D;K;6;CP$UIDd;3;198E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;199E;D;K;6;CP$UIDd;3;200E;E;E;S;6;normalS;6;{1, 1}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;24;{{456, 166}, {270, 148}}S;20;{{0, 0}, {270, 148}}d;2;36D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;566E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;S;10;datePickerS;35;bezeled+bordered+controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;6;CPDateK;8;$classesA;S;6;CPDateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;569E;E;d;1;4d;3;510D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;570E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;571E;E;S;22;{{21, 75}, {355, 382}}S;20;{{0, 0}, {355, 382}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;437E;E;E;S;3;boxD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;ParametersD;K;6;$classD;K;6;CP$UIDd;3;156E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;161E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;409E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;582E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;583E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;584E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;161E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;585E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;3;586E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;413E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;413E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;312E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;587E;E;S;22;{{104, 19}, {227, 25}}S;19;{{0, 0}, {227, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;-1d;2;12S;9;GraphicalS;17;_popUpItemAction:S;20;Textual with StepperS;7;TextualS;22;{{104, 49}, {227, 25}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;Single DateS;10;Date RangeS;22;{{104, 80}, {227, 25}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;NoneS;14;Month and YearS;19;Month, Day and YearS;23;{{104, 111}, {227, 25}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;Hour, Minute and SecondS;15;Hour and MinuteS;20;{{17, 18}, {80, 17}}S;18;{{0, 0}, {80, 17}}S;9;textfieldS;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;StyleD;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;572E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;S;20;{{17, 50}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;SelectsS;20;{{17, 81}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;ElementsS;22;{{101, 140}, {99, 21}}S;18;{{0, 0}, {99, 21}}S;9;check-boxS;36;controlSizeRegular+disabled+selectedD;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;9;Time zoneS;22;{{194, 140}, {86, 21}}S;18;{{0, 0}, {86, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;3;EraS;20;{{2, 163}, {357, 5}}S;18;{{0, 0}, {357, 5}}D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;491E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;573E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;3;BoxS;23;{{104, 194}, {227, 29}}S;19;{{0, 0}, {227, 29}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;3;238D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;574E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;575E;E;S;21;{{17, 174}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;ConstraintsS;23;{{101, 172}, {123, 21}}S;19;{{0, 0}, {123, 21}}S;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;12;Minimum dateS;23;{{104, 246}, {227, 29}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;574E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;575E;E;S;23;{{101, 224}, {126, 21}}S;19;{{0, 0}, {126, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;12;Maximum dateS;20;{{2, 277}, {357, 5}}D;K;6;$classD;K;6;CP$UIDd;3;491E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;573E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{17, 290}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;DateS;21;{{17, 315}, {80, 17}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;444E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;DisplayS;23;{{104, 285}, {227, 29}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;576E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;574E;E;D;K;6;$classD;K;6;CP$UIDd;3;425E;K;13;CPDateTimeKeyD;K;6;CP$UIDd;3;575E;E;S;23;{{101, 315}, {107, 21}}S;19;{{0, 0}, {107, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;BackgroundS;23;{{101, 335}, {107, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;BorderS;23;{{101, 355}, {107, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;EnabledS;21;{{19, 20}, {164, 29}}S;19;{{0, 0}, {164, 29}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;577E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;310E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;17;CPDatePicker testS;22;{{415, 75}, {358, 21}}S;19;{{0, 0}, {358, 21}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;577E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;552E;K;4;nameD;K;6;CP$UIDd;3;578E;K;12;defaultValueD;K;6;CP$UIDd;3;579E;K;6;valuesD;K;6;CP$UIDd;3;580E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;LabelS;23;{{415, 104}, {358, 21}}D;K;6;$classD;K;6;CP$UIDd;3;422E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;568E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;577E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;312E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;310E;E;D;K;6;$classD;K;6;CP$UIDd;3;552E;K;4;nameD;K;6;CP$UIDd;3;578E;K;12;defaultValueD;K;6;CP$UIDd;3;579E;K;6;valuesD;K;6;CP$UIDd;3;581E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;10;OtherViewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;166E;D;K;6;CP$UIDd;3;165E;D;K;6;CP$UIDd;3;164E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;168E;D;K;6;CP$UIDd;3;169E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;172E;D;K;6;CP$UIDd;3;171E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;175E;D;K;6;CP$UIDd;3;176E;D;K;6;CP$UIDd;3;177E;E;E;S;19;autoresizesSubviewsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;359E;D;K;6;CP$UIDd;3;359E;E;E;S;5;colorS;28;_CPFontSystemFacePlaceholderd;13;1355344212000d;15;-62135554022000d;14;64092254400000D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;588E;D;K;6;CP$UIDd;3;359E;E;E;S;22;{"width":0,"height":0}d;15;-62135510400000d;14;64092297600000d;13;1355343132000d;2;17S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;589E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;579E;K;6;normalD;K;6;CP$UIDd;3;590E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;261E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;579E;K;6;normalD;K;6;CP$UIDd;3;591E;E;E;S;21;{{1, -5}, {361, 386}}S;20;{{0, 0}, {361, 386}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;186E;D;K;6;CP$UIDd;3;163E;D;K;6;CP$UIDd;3;167E;D;K;6;CP$UIDd;3;170E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;179E;D;K;6;CP$UIDd;3;180E;D;K;6;CP$UIDd;3;187E;D;K;6;CP$UIDd;3;192E;D;K;6;CP$UIDd;3;193E;D;K;6;CP$UIDd;3;181E;D;K;6;CP$UIDd;3;183E;D;K;6;CP$UIDd;3;188E;D;K;6;CP$UIDd;3;189E;D;K;6;CP$UIDd;3;194E;D;K;6;CP$UIDd;3;190E;D;K;6;CP$UIDd;3;184E;D;K;6;CP$UIDd;3;195E;D;K;6;CP$UIDd;3;196E;D;K;6;CP$UIDd;3;185E;D;K;6;CP$UIDd;3;191E;D;K;6;CP$UIDd;3;197E;E;E;d;2;18S;6;_NS:11D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;409E;D;K;6;CP$UIDd;3;359E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;592E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;D;K;6;$classD;K;6;CP$UIDd;3;418E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;593E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;567E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;412E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;359E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;594E;D;K;6;CP$UIDd;3;359E;E;E;f;12;0.3455284834E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPFormatterTest/AppController.j b/Tests/Manual/CPFormatterTest/AppController.j
index b0faa01b7..14a9daea2 100644
--- a/Tests/Manual/CPFormatterTest/AppController.j
+++ b/Tests/Manual/CPFormatterTest/AppController.j
@@ -22,14 +22,14 @@ var randomFromTo = function(from, to)
@implementation AppController : CPObject
{
- CPWindow theWindow;
- CPTextField dateField1;
- CPTextField dateField2;
- CPTextField error1;
- CPTextField textField;
- CPTextField error2;
- CPTextField recordField;
- CPPopUpButton recordMenu;
+ @outlet CPWindow theWindow;
+ @outlet CPTextField dateField1;
+ @outlet CPTextField dateField2;
+ @outlet CPTextField error1;
+ @outlet CPTextField textField;
+ @outlet CPTextField error2;
+ @outlet CPTextField recordField;
+ @outlet CPPopUpButton recordMenu;
}
- (void)awakeFromCib
@@ -44,17 +44,15 @@ var randomFromTo = function(from, to)
name:CPTextFieldDidFocusNotification
object:nil];
- [textField setFormatter:[TextFormatter new]];
[textField setDelegate:self];
[error1 setStringValue:@""];
[error2 setStringValue:@""];
- [recordField setFormatter:[ContactFormatter new]];
[recordField setObjectValue:RecordData[0]];
}
-- (void)selectRecord:(id)sender
+- (@action)selectRecord:(id)sender
{
var record = RecordData[[sender selectedIndex]];
@@ -212,7 +210,7 @@ var randomFromTo = function(from, to)
else
anObject(aString);
- result = error === nil;
+ var result = error === nil;
CPLog.info("getObjectValue:forString:%s ==> %s", aString, result);
return result;
diff --git a/Tests/Manual/CPFormatterTest/Resources/MainMenu.cib b/Tests/Manual/CPFormatterTest/Resources/MainMenu.cib
index 5a3e2e980..ba7171531 100644
--- a/Tests/Manual/CPFormatterTest/Resources/MainMenu.cib
+++ b/Tests/Manual/CPFormatterTest/Resources/MainMenu.cib
@@ -1 +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;22E;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;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;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;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;59E;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;62E;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;64E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;1;0E;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;72E;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;74E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;1;0E;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;2;84E;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;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;52E;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;2;85E;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;2;86E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;87E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;57E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;88E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;71E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;89E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;75E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;94E;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;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;104E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;106E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;85E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;111E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;112E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;113E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;114E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;115E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;116E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;117E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;44E;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;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;119E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;119E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;120E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;124E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;134E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;133E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;136E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;137E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;139E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;141E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;142E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;143E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;146E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;147E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;150E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;151E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;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;51E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;84E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;152E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;154E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;155E;K;11;$aalignmentD;K;6;CP$UIDd;3;118E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;129E;K;6;$afontD;K;6;CP$UIDd;3;156E;K;7;$aimageD;K;6;CP$UIDd;3;157E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;118E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;158E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;159E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;160E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;161E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;163E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;164E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;160E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;84E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;165E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;134E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;133E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;136E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;166E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;167E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;168E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;169E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;170E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;171E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;172E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;173E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;176E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;177E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;179E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;181E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;182E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;183E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;184E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;185E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;186E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;187E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;188E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;189E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;190E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;192E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;193E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;194E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;173E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;195E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;196E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;197E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;173E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;198E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;177E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;199E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;191E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;200E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;193E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;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;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;201E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;202E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;203E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;204E;K;11;$aalignmentD;K;6;CP$UIDd;3;118E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;205E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;161E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;161E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;206E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;207E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;208E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;134E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;133E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;133E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;136E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;209E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;138E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;210E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;211E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;169E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;212E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;213E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;214E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;148E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;127E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;129E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;130E;K;12;$atext-colorD;K;6;CP$UIDd;3;215E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;133E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;90E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;140E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;130E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;129E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;216E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;217E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;182E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;218E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;219E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;185E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;220E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;187E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;221E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;189E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;222E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;223E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;182E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;224E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;180E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;225E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;185E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;226E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;187E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;126E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;174E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;175E;K;11;$aalignmentD;K;6;CP$UIDd;3;130E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;118E;K;6;$afontD;K;6;CP$UIDd;3;132E;K;7;$aimageD;K;6;CP$UIDd;3;227E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;122E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;161E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;129E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;189E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;134E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;123E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;178E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;118E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;133E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;130E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;118E;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;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;228E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;229E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;230E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;10;dateField1S;10;dateField2S;6;error1S;6;error2S;11;recordFieldS;10;recordMenuS;9;textFieldS;9;theWindowS;13;selectRecord:S;9;setDate1:S;9;setDate2:S;7;setNil:S;13;objectValue1:S;13;objectValue2:S;11;setEmptyOK:S;15;deleteForward2:S;16;deleteBackward1:S;8;delete1:S;16;deleteBackward2:S;8;delete2:S;15;deleteForward1:S;15;deleteForward3:S;16;deleteBackward3:S;8;delete3:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1886912512S;24;{{353, 265}, {734, 348}}S;21;{{0, 0}, {1440, 878}}d;1;7S;21;CPFormatter & Friendsd;1;0S;20;{{0, 0}, {734, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;52E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;E;E;S;6;normalS;6;{1, 1}F;S;21;{{90, 35}, {279, 29}}S;19;{{0, 0}, {279, 29}}d;2;36S;9;textfieldS;28;bezeled+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;131E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;231E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;232E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;123E;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;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;233E;E;S;20;{{34, 42}, {44, 17}}S;18;{{0, 0}, {44, 17}}S;6;Date 1D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;234E;E;S;21;{{34, 304}, {52, 17}}S;18;{{0, 0}, {52, 17}}S;7;Record:S;22;{{99, 304}, {194, 17}}S;19;{{0, 0}, {194, 17}}S;4;nameS;21;{{99, 14}, {276, 17}}S;19;{{0, 0}, {276, 17}}D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;238E;E;S;41;Input: mm/dd/yyyy Display: abbreviatedS;23;{{205, 298}, {121, 25}}S;19;{{0, 0}, {121, 25}}S;12;popup-buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;3;131E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;231E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;232E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;d;2;12S;8;Tom - 34S;17;_popUpItemAction:d;1;1d;7;1048576S;9;Dick - 27S;10;Harry - 50S;22;{{90, 142}, {279, 29}}S;21;{{34, 149}, {44, 17}}S;6;Date 2S;22;{{99, 121}, {351, 17}}S;19;{{0, 0}, {351, 17}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;242E;E;S;40;Input: mm-dd-yyyy Display: mm-dd-yyyyS;21;{{406, 36}, {66, 25}}S;18;{{0, 0}, {66, 25}}S;6;buttonS;17;bordered+selectedD;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;6;Randomd;2;14S;21;{{406, 72}, {72, 25}}S;18;{{0, 0}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;8;Delete ←S;21;{{493, 72}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;8;Delete →S;21;{{578, 72}, {55, 25}}S;18;{{0, 0}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;6;DeleteS;21;{{493, 36}, {88, 25}}S;18;{{0, 0}, {88, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;11;objectValueS;21;{{604, 36}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;7;Set nilS;22;{{406, 141}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{493, 141}, {88, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{604, 144}, {93, 21}}S;18;{{0, 0}, {93, 21}}S;9;check-boxS;8;selectedS;8;Empty OKS;22;{{99, 173}, {276, 17}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;243E;E;S;22;{{90, 230}, {279, 29}}S;21;{{34, 237}, {44, 17}}S;4;TextS;22;{{99, 209}, {351, 17}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;244E;E;S;32;Input: [a-zA-Z0-9], max length 7S;22;{{99, 261}, {276, 17}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;235E;K;12;defaultValueD;K;6;CP$UIDd;3;236E;K;6;valuesD;K;6;CP$UIDd;3;245E;E;S;22;{{406, 176}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{493, 176}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{578, 176}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{406, 230}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{493, 230}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;22;{{578, 230}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;149E;K;4;nameD;K;6;CP$UIDd;3;239E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;240E;K;5;valueD;K;6;CP$UIDd;3;241E;E;S;13;AppControllerS;10;OtherViewsD;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;55E;D;K;6;CP$UIDd;2;56E;E;E;S;17;.Lucida Grande UId;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;246E;D;K;6;CP$UIDd;3;161E;E;E;S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;247E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;248E;E;E;S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;131E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;231E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;232E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;249E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;250E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;251E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;237E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;236E;K;6;normalD;K;6;CP$UIDd;3;252E;E;E;f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;254E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;255E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;3;135E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;257E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;258E;D;K;6;CP$UIDd;3;161E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;259E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;161E;E;E;f;3;0.5f;12;0.8816326531E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
+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;22E;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;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;39E;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;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;59E;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;62E;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;64E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;1;0E;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;72E;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;74E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;1;0E;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;2;84E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;87E;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;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;72E;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;2;88E;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;2;89E;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;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;57E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;91E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;71E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;92E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;75E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;49E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;94E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;52E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;96E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;82E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;97E;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;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;52E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;98E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;101E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;102E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;104E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;105E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;106E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;108E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;78E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;109E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;110E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;79E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;112E;E;D;K;6;$classD;K;6;CP$UIDd;2;23E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;82E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;88E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;114E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;115E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;116E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;117E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;118E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;119E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;120E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;44E;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;43E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;122E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;122E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;123E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;127E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;128E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;129E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;132E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;137E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;139E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;138E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;142E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;143E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;146E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;147E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;151E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;152E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;153E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;154E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;155E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;156E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;21;CPControlFormatterKeyD;K;6;CP$UIDd;2;84E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;157E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;158E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;160E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;161E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;162E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;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;51E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;2;86E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;163E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;164E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;165E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;166E;K;6;$afontD;K;6;CP$UIDd;3;167E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;136E;K;11;$aalignmentD;K;6;CP$UIDd;3;121E;K;7;$aimageD;K;6;CP$UIDd;3;168E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;169E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;121E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;1;0E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;170E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;171E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;18;CPMenuItemStateKeyD;K;6;CP$UIDd;3;173E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;175E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;53E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;176E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;52E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;172E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;86E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;177E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;129E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;132E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;178E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;139E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;138E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;142E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;179E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;180E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;181E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;184E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;185E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;186E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;187E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;188E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;191E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;192E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;193E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;195E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;197E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;198E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;199E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;200E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;201E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;202E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;203E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;204E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;206E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;207E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;208E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;209E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;211E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;212E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;213E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;214E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;188E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;215E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;216E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;217E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;218E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;188E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;219E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;220E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;193E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;221E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;222E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;223E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;213E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;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;69E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;224E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;225E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;226E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;227E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;121E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;228E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;229E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;173E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;173E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;230E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;158E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;231E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;232E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;92E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;233E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;129E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;132E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;234E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;21;CPControlFormatterKeyD;K;6;CP$UIDd;2;87E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;138E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;138E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;142E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;235E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;144E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;236E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;237E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;239E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;240E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;241E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;242E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;158E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;145E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;12;$atext-colorD;K;6;CP$UIDd;3;243E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;135E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;244E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;138E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;93E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;126E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;126E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;148E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;135E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;126E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;126E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;245E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;246E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;247E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;199E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;248E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;249E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;250E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;203E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;251E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;252E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;253E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;208E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;254E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;255E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;256E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;199E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;257E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;196E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;258E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;259E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;203E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;60E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;44E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;121E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;260E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;44E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;130E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;190E;K;6;$afontD;K;6;CP$UIDd;3;134E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;121E;K;11;$aalignmentD;K;6;CP$UIDd;3;135E;K;7;$aimageD;K;6;CP$UIDd;3;261E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;125E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;125E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;126E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;262E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;121E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;140E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;208E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;139E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;194E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;121E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;138E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;135E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;121E;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;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;263E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;3;264E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;265E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;85E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;266E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;83E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;3;268E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;265E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;10;dateField1S;10;dateField2S;6;error1S;6;error2S;11;recordFieldS;10;recordMenuS;9;textFieldS;9;theWindowS;13;selectRecord:S;9;setDate1:S;9;setDate2:S;7;setNil:S;13;objectValue1:S;13;objectValue2:S;11;setEmptyOK:S;15;deleteForward2:S;16;deleteBackward1:S;8;delete1:S;16;deleteBackward2:S;8;delete2:S;15;deleteForward1:S;15;deleteForward3:S;16;deleteBackward3:S;8;delete3:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1886912512S;24;{{353, 265}, {734, 348}}S;21;{{0, 0}, {1440, 878}}d;1;7S;21;CPFormatter & Friendsd;1;0S;20;{{0, 0}, {734, 348}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;52E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;E;E;S;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{90, 36}, {279, 22}}S;19;{{0, 0}, {279, 22}}d;2;36S;9;textfieldS;47;bezeled+controlSizeRegular+editable+placeholderD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;269E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;270E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;126E;E;d;1;2d;1;4D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;T;S;0;d;2;-1D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;271E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;S;20;{{33, 42}, {46, 17}}S;18;{{0, 0}, {46, 17}}S;18;controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;Date 1D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;273E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;S;21;{{33, 304}, {54, 17}}S;18;{{0, 0}, {54, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;Record:S;22;{{98, 304}, {196, 17}}S;19;{{0, 0}, {196, 17}}S;30;controlSizeRegular+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{98, 14}, {278, 17}}S;19;{{0, 0}, {278, 17}}D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;277E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;41;Input: mm/dd/yyyy Display: abbreviatedS;23;{{205, 301}, {121, 25}}S;19;{{0, 0}, {121, 25}}S;12;popup-buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;133E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;269E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;270E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;126E;E;D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;12S;8;Tom - 34S;17;_popUpItemAction:d;1;1d;7;1048576S;9;Dick - 27S;10;Harry - 50S;22;{{90, 143}, {279, 22}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{33, 149}, {46, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;Date 2S;22;{{98, 121}, {353, 17}}S;19;{{0, 0}, {353, 17}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;283E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;40;Input: mm-dd-yyyy Display: mm-dd-yyyyS;21;{{408, 39}, {66, 25}}S;18;{{0, 0}, {66, 25}}S;6;buttonS;36;bordered+controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;Randomd;2;14S;21;{{408, 75}, {72, 25}}S;18;{{0, 0}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;Delete ←S;21;{{495, 75}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;Delete →S;21;{{580, 75}, {55, 25}}S;18;{{0, 0}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;DeleteS;21;{{495, 39}, {88, 25}}S;18;{{0, 0}, {88, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;11;objectValueS;21;{{606, 39}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;7;Set nilS;22;{{408, 144}, {66, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{495, 144}, {88, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{603, 146}, {103, 21}}S;19;{{0, 0}, {103, 21}}S;9;check-boxS;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;8;Empty OKS;22;{{98, 173}, {278, 17}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{90, 231}, {279, 22}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;21;{{33, 237}, {46, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;TextS;22;{{98, 209}, {353, 17}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;285E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;32;Input: [a-zA-Z0-9], max length 7S;22;{{98, 261}, {278, 17}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;274E;K;12;defaultValueD;K;6;CP$UIDd;3;275E;K;6;valuesD;K;6;CP$UIDd;3;286E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{408, 179}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{495, 179}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{580, 179}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{408, 233}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{495, 233}, {72, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{580, 233}, {55, 25}}D;K;6;$classD;K;6;CP$UIDd;3;159E;K;4;nameD;K;6;CP$UIDd;3;278E;K;12;defaultValueD;K;6;CP$UIDd;3;280E;K;5;stateD;K;6;CP$UIDd;3;281E;K;5;valueD;K;6;CP$UIDd;3;282E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;13;AppControllerS;16;ContactFormatterS;17;IBCustomFormatterS;10;OtherViewsD;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;55E;D;K;6;CP$UIDd;2;56E;E;E;S;13;TextFormatterS;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;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;D;K;6;CP$UIDd;3;173E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;287E;D;K;6;CP$UIDd;3;173E;E;E;S;10;text-colorD;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;288E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;289E;E;E;S;5;imageD;K;10;$classnameS;6;CPNullK;8;$classesA;S;6;CPNullS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;279E;E;S;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;133E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;269E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;270E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;126E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;126E;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;290E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;291E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;292E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;276E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;275E;K;6;normalD;K;6;CP$UIDd;3;293E;E;E;f;18;0.6862745098039216D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;294E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;295E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;296E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;297E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;298E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;272E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;124E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;299E;D;K;6;CP$UIDd;3;173E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;300E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;173E;E;E;f;3;0.5f;12;0.8816326531E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPFormatterTest/Resources/MainMenu.xib b/Tests/Manual/CPFormatterTest/Resources/MainMenu.xib
index 80b33556a..6b338ac14 100644
--- a/Tests/Manual/CPFormatterTest/Resources/MainMenu.xib
+++ b/Tests/Manual/CPFormatterTest/Resources/MainMenu.xib
@@ -1,13 +1,13 @@
-
+
-
+
-
+
@@ -46,7 +46,8 @@
-
+
+
@@ -218,6 +219,7 @@
+
@@ -321,14 +323,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPLocalizationTest/AppController.j b/Tests/Manual/CPLocalizationTest/AppController.j
new file mode 100644
index 000000000..1d4141578
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/AppController.j
@@ -0,0 +1,53 @@
+/*
+ * AppController.j
+ * CPLocalizationTest
+ *
+ * Created by You on April 20, 2015.
+ * Copyright 2015, Your Company All rights reserved.
+ */
+
+@import
+@import
+
+
+@implementation AppController : CPObject
+{
+ @outlet CPWindow theWindow;
+}
+
+- (void)applicationDidFinishLaunching:(CPNotification)aNotification
+{
+ // This is called when the application is done loading.
+}
+
+- (void)awakeFromCib
+{
+ var label = [CPTextField labelWithTitle:CPLocalizedString(@"Label from file", @"") + " -> Label title from en.lproj from first context"];
+ [label setFrameOrigin:CGPointMake(20, 10)];
+ [[theWindow contentView] addSubview:label];
+
+ var label2 = [CPTextField labelWithTitle:CPLocalizedString(@"Label from file", @"My second context.") + " -> Label title from en.lproj from second context"];
+ [label2 setFrameOrigin:CGPointMake(20, 30)];
+ [[theWindow contentView] addSubview:label2];
+
+ var label3 = [CPTextField labelWithTitle:CPLocalizedString(@"Label from file", @"My first context.") + " -> Label title from en.lproj from first context"];
+ [label3 setFrameOrigin:CGPointMake(20, 50)];
+ [[theWindow contentView] addSubview:label3];
+
+ var label4 = [CPTextField labelWithTitle:CPLocalizedStringFromTable(@"Label from file", @"SecondLocalizable", @"My first context.") + " -> Label title from first context from en.lproj from SecondLocalizable"];
+ [label4 setFrameOrigin:CGPointMake(20, 70)];
+ [[theWindow contentView] addSubview:label4];
+
+ var label5 = [CPTextField labelWithTitle:CPLocalizedString(@"Wrong key", @"") + " -> Wrong key"];
+ [label5 setFrameOrigin:CGPointMake(20, 90)];
+ [[theWindow contentView] addSubview:label5];
+
+ // 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.
+
+ // In this case, we want the window from Cib to become our full browser window
+ [theWindow setFullPlatformWindow:YES];
+}
+
+@end
diff --git a/Tests/Manual/CPLocalizationTest/Info.plist b/Tests/Manual/CPLocalizationTest/Info.plist
new file mode 100644
index 000000000..5b71bb727
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ Main cib file base name
+ MainMenu.cib
+ CPBundleName
+ CPLocalizationTest
+ CPBundleVersion
+ 1.0
+ CPHumanReadableCopyright
+ Copyright © 2015, Your Company All rights reserved.
+ CPBundleLocalizableStrings
+
+ Localizable.strings
+ SecondLocalizable.strings
+ MainMenu.strings
+
+ CPBundleTypeOfLocalization
+ CPBundleBaseLocalizationType
+ CPBundleDefaultLanguage
+ en
+
+
diff --git a/Tests/Manual/CPLocalizationTest/Jakefile b/Tests/Manual/CPLocalizationTest/Jakefile
new file mode 100644
index 000000000..991dcebdc
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/Jakefile
@@ -0,0 +1,184 @@
+/*
+ * Jakefile
+ * CPLocalizationTest
+ *
+ * Created by You on April 20, 2015.
+ * Copyright 2015, 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"),
+ projectName = "CPLocalizationTest";
+
+app (projectName, function(task)
+{
+ ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks";
+
+ if (configuration === "Debug")
+ ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration);
+
+ task.setBuildIntermediatesPath(FILE.join("Build", "CPLocalizationTest.build", configuration));
+ task.setBuildPath(FILE.join("Build", configuration));
+
+ task.setProductName("CPLocalizationTest");
+ task.setIdentifier("com.yourcompany.CPLocalizationTest");
+ task.setVersion("1.0");
+ task.setAuthor("Your Company");
+ task.setEmail("feedback @nospam@ yourcompany.com");
+ task.setSummary("CPLocalizationTest");
+ task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**")));
+ task.setResources(new FileList("Resources/**"));
+ task.setIndexFilePath("index.html");
+ task.setInfoPlistPath("Info.plist");
+
+ if (configuration === "Debug")
+ task.setCompilerFlags("-DDEBUG -g");
+ else
+ task.setCompilerFlags("-O");
+});
+
+task ("default", [projectName], function()
+{
+ printResults(configuration);
+});
+
+task ("build", ["default"], function()
+{
+ updateApplicationSize();
+});
+
+task ("debug", function()
+{
+ configuration = ENV["CONFIGURATION"] = "Debug";
+ JAKE.subjake(["."], "build", ENV);
+});
+
+task ("release", function()
+{
+ configuration = ENV["CONFIGURATION"] = "Release";
+ JAKE.subjake(["."], "build", ENV);
+});
+
+task ("run", ["debug"], function()
+{
+ OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]);
+});
+
+task ("run-release", ["release"], function()
+{
+ OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]);
+});
+
+task ("deploy", ["release"], function()
+{
+ FILE.mkdirs(FILE.join("Build", "Deployment", projectName));
+ OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]);
+ printResults("Deployment")
+});
+
+task ("desktop", ["release"], function()
+{
+ FILE.mkdirs(FILE.join("Build", "Desktop", projectName));
+ require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPLocalizationTest.app"));
+ printResults("Desktop")
+});
+
+task ("run-desktop", ["desktop"], function()
+{
+ OS.system([FILE.join("Build", "Desktop", projectName, "CPLocalizationTest.app", "Contents", "MacOS", "NativeHost"), "-i"]);
+});
+
+function printResults(configuration)
+{
+ print("----------------------------");
+ print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName));
+ print("----------------------------");
+}
+
+function updateApplicationSize()
+{
+ print("Calculating application file sizes...");
+
+ var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }),
+ format = CFPropertyList.sniffedFormatOfString(contents),
+ plist = CFPropertyList.propertyListFromString(contents),
+ totalBytes = {executable:0, data:0, mhtml:0};
+
+ // Get the size of all framework executables and sprite data
+ var frameworksDir = "Frameworks";
+
+ if (configuration === "Debug")
+ frameworksDir = FILE.join(frameworksDir, "Debug");
+
+ var frameworks = FILE.list(frameworksDir);
+
+ frameworks.forEach(function(framework)
+ {
+ if (framework !== "Source")
+ addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes);
+ });
+
+ // Read in the default theme name, and attempt to get its size
+ var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2",
+ themePath = nil;
+
+ if (themeName === "Aristo" || themeName === "Aristo2")
+ themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend");
+ else
+ themePath = FILE.join("Frameworks", "Resources", themeName + ".blend");
+
+ if (FILE.isDirectory(themePath))
+ addBundleFileSizes(themePath, totalBytes);
+
+ // Add sizes for the app
+ addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes);
+
+ print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data));
+
+ var dict = new CFMutableDictionary();
+
+ dict.setValueForKey("executable", totalBytes.executable);
+ dict.setValueForKey("data", totalBytes.data);
+ dict.setValueForKey("mhtml", totalBytes.mhtml);
+
+ plist.setValueForKey("CPApplicationSize", dict);
+
+ FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" });
+}
+
+function addBundleFileSizes(bundlePath, totalBytes)
+{
+ var bundleName = FILE.basename(bundlePath),
+ environment = bundleName === "Foundation" ? "Objj" : "Browser",
+ bundlePath = FILE.join(bundlePath, environment + ".environment");
+
+ if (FILE.isDirectory(bundlePath))
+ {
+ var filename = bundleName + ".sj",
+ filePath = new FILE.Path(FILE.join(bundlePath, filename));
+
+ if (filePath.exists())
+ totalBytes.executable += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt"));
+
+ if (filePath.exists())
+ totalBytes.data += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt"));
+
+ if (filePath.exists())
+ totalBytes.mhtml += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt"));
+
+ if (filePath.exists())
+ totalBytes.mhtml += filePath.size();
+ }
+}
diff --git a/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.cib b/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.cib
new file mode 100644
index 000000000..2a05f4f95
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/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;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;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;24E;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;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;11E;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;2;25E;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;2;26E;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;2;24E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;27E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;24E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;19E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;28E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;25E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;29E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;30E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;31E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;32E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;33E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;34E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;36E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;21E;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;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;38E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;38E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;39E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;40E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;41E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;41E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;42E;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;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;21E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;37E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;43E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;44E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;21E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;45E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;46E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;47E;K;11;$aalignmentD;K;6;CP$UIDd;2;48E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;49E;K;6;$afontD;K;6;CP$UIDd;2;51E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;41E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;41E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;42E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;52E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;53E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;48E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;37E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;42E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;42E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;42E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;55E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;49E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;48E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;42E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;42E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;56E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;E;E;S;8;delegateS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 127}, {480, 360}}S;21;{{0, 0}, {1440, 877}}d;1;7D;K;10;$classnameS;20;_CPLocalizableStringK;8;$classesA;S;20;_CPLocalizableStringS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;22;CPLocalizableStringDevD;K;6;CP$UIDd;2;57E;K;22;CPLocalizableStringKeyD;K;6;CP$UIDd;2;58E;K;24;CPLocalizableStringValueD;K;6;CP$UIDd;2;57E;E;d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;S;6;normalS;6;{1, 1}F;S;22;{{20, 166}, {364, 17}}S;19;{{0, 0}, {364, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;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;2;50E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;59E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;60E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;42E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;42E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;42E;E;T;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;22;CPLocalizableStringDevD;K;6;CP$UIDd;2;61E;K;22;CPLocalizableStringKeyD;K;6;CP$UIDd;2;62E;K;24;CPLocalizableStringValueD;K;6;CP$UIDd;2;61E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;63E;E;S;13;AppControllerS;6;WindowS;9;371.titleS;29;.Helvetica Neue DeskInterfaced;2;13S;29;Label not translated from xibS;9;461.titleD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;E;E;f;18;0.6862745098039216d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.xib b/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.xib
new file mode 100644
index 000000000..574a3dbb2
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/Resources/Base.lproj/MainMenu.xib
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPLocalizationTest/Resources/en.lproj/Localizable.strings b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/Localizable.strings
new file mode 100644
index 000000000..c5ebdefa5
Binary files /dev/null and b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/Localizable.strings differ
diff --git a/Tests/Manual/CPLocalizationTest/Resources/en.lproj/MainMenu.strings b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/MainMenu.strings
new file mode 100644
index 000000000..99058cdd2
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/MainMenu.strings
@@ -0,0 +1,186 @@
+
+/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
+"5.title" = "Bring All to Front";
+
+/* Class = "NSMenuItem"; title = "Window"; ObjectID = "19"; */
+"19.title" = "Window";
+
+/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "23"; */
+"23.title" = "Minimize";
+
+/* Class = "NSMenu"; title = "Window"; ObjectID = "24"; */
+"24.title" = "Window";
+
+/* Class = "NSMenu"; title = "AMainMenu"; ObjectID = "29"; */
+"29.title" = "AMainMenu";
+
+/* Class = "NSMenuItem"; title = "NewApplication"; ObjectID = "56"; */
+"56.title" = "NewApplication";
+
+/* Class = "NSMenu"; title = "NewApplication"; ObjectID = "57"; */
+"57.title" = "NewApplication";
+
+/* Class = "NSMenuItem"; title = "About NewApplication"; ObjectID = "58"; */
+"58.title" = "About NewApplication";
+
+/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "72"; */
+"72.title" = "Open…";
+
+/* Class = "NSMenuItem"; title = "Close"; ObjectID = "73"; */
+"73.title" = "Close";
+
+/* Class = "NSMenuItem"; title = "Save"; ObjectID = "75"; */
+"75.title" = "Save";
+
+/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "80"; */
+"80.title" = "Save As…";
+
+/* Class = "NSMenu"; title = "File"; ObjectID = "81"; */
+"81.title" = "File";
+
+/* Class = "NSMenuItem"; title = "New"; ObjectID = "82"; */
+"82.title" = "New";
+
+/* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */
+"83.title" = "File";
+
+/* Class = "NSMenuItem"; title = "Help"; ObjectID = "103"; */
+"103.title" = "Help";
+
+/* Class = "NSMenu"; title = "Help"; ObjectID = "106"; */
+"106.title" = "Help";
+
+/* Class = "NSMenuItem"; title = "NewApplication Help"; ObjectID = "111"; */
+"111.title" = "NewApplication Help";
+
+/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "112"; */
+"112.title" = "Revert to Saved";
+
+/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "124"; */
+"124.title" = "Open Recent";
+
+/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "125"; */
+"125.title" = "Open Recent";
+
+/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "126"; */
+"126.title" = "Clear Menu";
+
+/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "129"; */
+"129.title" = "Preferences…";
+
+/* Class = "NSMenuItem"; title = "Quit NewApplication"; ObjectID = "136"; */
+"136.title" = "Quit NewApplication";
+
+/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "195"; */
+"195.title" = "Stop Speaking";
+
+/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "196"; */
+"196.title" = "Start Speaking";
+
+/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "197"; */
+"197.title" = "Copy";
+
+/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "198"; */
+"198.title" = "Select All";
+
+/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "199"; */
+"199.title" = "Cut";
+
+/* Class = "NSMenu"; title = "Spelling and Grammar"; ObjectID = "200"; */
+"200.title" = "Spelling and Grammar";
+
+/* Class = "NSMenuItem"; title = "Check Spelling"; ObjectID = "201"; */
+"201.title" = "Check Spelling";
+
+/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "202"; */
+"202.title" = "Delete";
+
+/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "203"; */
+"203.title" = "Paste";
+
+/* Class = "NSMenuItem"; title = "Show Spelling…"; ObjectID = "204"; */
+"204.title" = "Show Spelling…";
+
+/* Class = "NSMenu"; title = "Edit"; ObjectID = "205"; */
+"205.title" = "Edit";
+
+/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "207"; */
+"207.title" = "Undo";
+
+/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "208"; */
+"208.title" = "Find Next";
+
+/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "209"; */
+"209.title" = "Find…";
+
+/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "210"; */
+"210.title" = "Jump to Selection";
+
+/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "211"; */
+"211.title" = "Speech";
+
+/* Class = "NSMenu"; title = "Speech"; ObjectID = "212"; */
+"212.title" = "Speech";
+
+/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "213"; */
+"213.title" = "Find Previous";
+
+/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "215"; */
+"215.title" = "Redo";
+
+/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "216"; */
+"216.title" = "Spelling and Grammar";
+
+/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "217"; */
+"217.title" = "Edit";
+
+/* Class = "NSMenuItem"; title = "Find"; ObjectID = "218"; */
+"218.title" = "Find";
+
+/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "219"; */
+"219.title" = "Check Spelling While Typing";
+
+/* Class = "NSMenu"; title = "Find"; ObjectID = "220"; */
+"220.title" = "Find";
+
+/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "221"; */
+"221.title" = "Use Selection for Find";
+
+/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "239"; */
+"239.title" = "Zoom";
+
+/* Class = "NSMenuItem"; title = "View"; ObjectID = "295"; */
+"295.title" = "View";
+
+/* Class = "NSMenu"; title = "View"; ObjectID = "296"; */
+"296.title" = "View";
+
+/* Class = "NSMenuItem"; title = "Show Toolbar"; ObjectID = "297"; */
+"297.title" = "Show Toolbar";
+
+/* Class = "NSMenuItem"; title = "Customize Toolbar…"; ObjectID = "298"; */
+"298.title" = "Customize Toolbar…";
+
+/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "346"; */
+"346.title" = "Check Grammar With Spelling";
+
+/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "348"; */
+"348.title" = "Substitutions";
+
+/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "349"; */
+"349.title" = "Substitutions";
+
+/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "350"; */
+"350.title" = "Smart Copy/Paste";
+
+/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "351"; */
+"351.title" = "Smart Quotes";
+
+/* Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "354"; */
+"354.title" = "Smart Links";
+
+/* Class = "NSWindow"; title = "Window"; ObjectID = "371"; */
+"371.title" = "Window";
+
+/* Class = "NSTextFieldCell"; title = "Label not translated from xib"; ObjectID = "461"; */
+"461.title" = "Label translated from xib in english";
diff --git a/Tests/Manual/CPLocalizationTest/Resources/en.lproj/SecondLocalizable.strings b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/SecondLocalizable.strings
new file mode 100644
index 000000000..c70c542d4
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/Resources/en.lproj/SecondLocalizable.strings
@@ -0,0 +1,2 @@
+/* My first context. */
+"Label from file" = "Label title from en.lproj from first context from SecondLocalizable";
diff --git a/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/Localizable.strings b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/Localizable.strings
new file mode 100644
index 000000000..f200b3f07
Binary files /dev/null and b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/Localizable.strings differ
diff --git a/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/MainMenu.strings b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/MainMenu.strings
new file mode 100644
index 000000000..8ae402c02
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/MainMenu.strings
@@ -0,0 +1,186 @@
+
+/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
+"5.title" = "Bring All to Front";
+
+/* Class = "NSMenuItem"; title = "Window"; ObjectID = "19"; */
+"19.title" = "Window";
+
+/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "23"; */
+"23.title" = "Minimize";
+
+/* Class = "NSMenu"; title = "Window"; ObjectID = "24"; */
+"24.title" = "Window";
+
+/* Class = "NSMenu"; title = "AMainMenu"; ObjectID = "29"; */
+"29.title" = "AMainMenu";
+
+/* Class = "NSMenuItem"; title = "NewApplication"; ObjectID = "56"; */
+"56.title" = "NewApplication";
+
+/* Class = "NSMenu"; title = "NewApplication"; ObjectID = "57"; */
+"57.title" = "NewApplication";
+
+/* Class = "NSMenuItem"; title = "About NewApplication"; ObjectID = "58"; */
+"58.title" = "About NewApplication";
+
+/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "72"; */
+"72.title" = "Open…";
+
+/* Class = "NSMenuItem"; title = "Close"; ObjectID = "73"; */
+"73.title" = "Close";
+
+/* Class = "NSMenuItem"; title = "Save"; ObjectID = "75"; */
+"75.title" = "Save";
+
+/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "80"; */
+"80.title" = "Save As…";
+
+/* Class = "NSMenu"; title = "File"; ObjectID = "81"; */
+"81.title" = "File";
+
+/* Class = "NSMenuItem"; title = "New"; ObjectID = "82"; */
+"82.title" = "New";
+
+/* Class = "NSMenuItem"; title = "File"; ObjectID = "83"; */
+"83.title" = "File";
+
+/* Class = "NSMenuItem"; title = "Help"; ObjectID = "103"; */
+"103.title" = "Help";
+
+/* Class = "NSMenu"; title = "Help"; ObjectID = "106"; */
+"106.title" = "Help";
+
+/* Class = "NSMenuItem"; title = "NewApplication Help"; ObjectID = "111"; */
+"111.title" = "NewApplication Help";
+
+/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "112"; */
+"112.title" = "Revert to Saved";
+
+/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "124"; */
+"124.title" = "Open Recent";
+
+/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "125"; */
+"125.title" = "Open Recent";
+
+/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "126"; */
+"126.title" = "Clear Menu";
+
+/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "129"; */
+"129.title" = "Preferences…";
+
+/* Class = "NSMenuItem"; title = "Quit NewApplication"; ObjectID = "136"; */
+"136.title" = "Quit NewApplication";
+
+/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "195"; */
+"195.title" = "Stop Speaking";
+
+/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "196"; */
+"196.title" = "Start Speaking";
+
+/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "197"; */
+"197.title" = "Copy";
+
+/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "198"; */
+"198.title" = "Select All";
+
+/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "199"; */
+"199.title" = "Cut";
+
+/* Class = "NSMenu"; title = "Spelling and Grammar"; ObjectID = "200"; */
+"200.title" = "Spelling and Grammar";
+
+/* Class = "NSMenuItem"; title = "Check Spelling"; ObjectID = "201"; */
+"201.title" = "Check Spelling";
+
+/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "202"; */
+"202.title" = "Delete";
+
+/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "203"; */
+"203.title" = "Paste";
+
+/* Class = "NSMenuItem"; title = "Show Spelling…"; ObjectID = "204"; */
+"204.title" = "Show Spelling…";
+
+/* Class = "NSMenu"; title = "Edit"; ObjectID = "205"; */
+"205.title" = "Edit";
+
+/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "207"; */
+"207.title" = "Undo";
+
+/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "208"; */
+"208.title" = "Find Next";
+
+/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "209"; */
+"209.title" = "Find…";
+
+/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "210"; */
+"210.title" = "Jump to Selection";
+
+/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "211"; */
+"211.title" = "Speech";
+
+/* Class = "NSMenu"; title = "Speech"; ObjectID = "212"; */
+"212.title" = "Speech";
+
+/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "213"; */
+"213.title" = "Find Previous";
+
+/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "215"; */
+"215.title" = "Redo";
+
+/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "216"; */
+"216.title" = "Spelling and Grammar";
+
+/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "217"; */
+"217.title" = "Edit";
+
+/* Class = "NSMenuItem"; title = "Find"; ObjectID = "218"; */
+"218.title" = "Find";
+
+/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "219"; */
+"219.title" = "Check Spelling While Typing";
+
+/* Class = "NSMenu"; title = "Find"; ObjectID = "220"; */
+"220.title" = "Find";
+
+/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "221"; */
+"221.title" = "Use Selection for Find";
+
+/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "239"; */
+"239.title" = "Zoom";
+
+/* Class = "NSMenuItem"; title = "View"; ObjectID = "295"; */
+"295.title" = "View";
+
+/* Class = "NSMenu"; title = "View"; ObjectID = "296"; */
+"296.title" = "View";
+
+/* Class = "NSMenuItem"; title = "Show Toolbar"; ObjectID = "297"; */
+"297.title" = "Show Toolbar";
+
+/* Class = "NSMenuItem"; title = "Customize Toolbar…"; ObjectID = "298"; */
+"298.title" = "Customize Toolbar…";
+
+/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "346"; */
+"346.title" = "Check Grammar With Spelling";
+
+/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "348"; */
+"348.title" = "Substitutions";
+
+/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "349"; */
+"349.title" = "Substitutions";
+
+/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "350"; */
+"350.title" = "Smart Copy/Paste";
+
+/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "351"; */
+"351.title" = "Smart Quotes";
+
+/* Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "354"; */
+"354.title" = "Smart Links";
+
+/* Class = "NSWindow"; title = "Window"; ObjectID = "371"; */
+"371.title" = "Window";
+
+/* Class = "NSTextFieldCell"; title = "Label not translated from xib"; ObjectID = "461"; */
+"461.title" = "Label traduit du xib en français";
\ No newline at end of file
diff --git a/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/SecondLocalizable.strings b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/SecondLocalizable.strings
new file mode 100644
index 000000000..6de1256c8
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/Resources/fr.lproj/SecondLocalizable.strings
@@ -0,0 +1,2 @@
+/* My first context. */
+"Label from file" = "Label traduit de en.lproj du premier context de SecondLocalizable";
diff --git a/Tests/Manual/CPLocalizationTest/index-debug.html b/Tests/Manual/CPLocalizationTest/index-debug.html
new file mode 100644
index 000000000..13c385d7e
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/index-debug.html
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CPLocalizationTest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPLocalizationTest/index.html b/Tests/Manual/CPLocalizationTest/index.html
new file mode 100644
index 000000000..e80f2fe83
--- /dev/null
+++ b/Tests/Manual/CPLocalizationTest/index.html
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CPLocalizationTest
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/Issue-1357-fix/main.j b/Tests/Manual/CPLocalizationTest/main.j
similarity index 58%
rename from Tests/Manual/Issue-1357-fix/main.j
rename to Tests/Manual/CPLocalizationTest/main.j
index ca820e685..c0df1910e 100644
--- a/Tests/Manual/Issue-1357-fix/main.j
+++ b/Tests/Manual/CPLocalizationTest/main.j
@@ -1,9 +1,9 @@
/*
* AppController.j
- * CPViewNoDisplayAfterHidingAndResizeBug
+ * CPLocalizationTest
*
- * Created by You on February 24, 2013.
- * Copyright 2013, Your Company All rights reserved.
+ * Created by You on April 20, 2015.
+ * Copyright 2015, Your Company All rights reserved.
*/
@import
diff --git a/Tests/Manual/CPSplitViewDivider/AppController.j b/Tests/Manual/CPSplitViewDivider/AppController.j
new file mode 100644
index 000000000..d1ac7c70c
--- /dev/null
+++ b/Tests/Manual/CPSplitViewDivider/AppController.j
@@ -0,0 +1,47 @@
+/*
+ * AppController.j
+ * CPSplitViewDivider
+ *
+ * Created by You on January 12, 2016.
+ * Copyright 2016, Your Company All rights reserved.
+ */
+
+@import
+@import
+
+
+@implementation AppController : CPObject
+{
+ @outlet CPSplitView splitView;
+ @outlet CPView viewLeft;
+ @outlet CPView viewRight;
+ @outlet CPWindow theWindow;
+}
+
+- (void)applicationDidFinishLaunching:(CPNotification)aNotification
+{
+}
+
+- (void)awakeFromCib
+{
+ [theWindow setFullPlatformWindow:YES];
+ [viewLeft setBackgroundColor:[CPColor grayColor]];
+ [viewRight setBackgroundColor:[CPColor greenColor]];
+}
+
+- (@action)clickChangeButton:(id)aSender
+{
+ if (![viewRight superview])
+ {
+ console.log(@"Add viewRight in splitView");
+ [splitView addSubview:viewRight];
+ }
+ else
+ {
+ console.error(@"Remove viewRight from splitView");
+ [viewRight removeFromSuperview];
+ }
+}
+
+
+@end
diff --git a/Tests/Manual/CPSplitViewDivider/Info.plist b/Tests/Manual/CPSplitViewDivider/Info.plist
new file mode 100644
index 000000000..f0c954d64
--- /dev/null
+++ b/Tests/Manual/CPSplitViewDivider/Info.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ Main cib file base name
+ MainMenu.cib
+ CPBundleName
+ CPSplitViewDivider
+ CPBundleVersion
+ 1.0
+ CPHumanReadableCopyright
+ Copyright © 2016, Your Company All rights reserved.
+
+
diff --git a/Tests/Manual/CPSplitViewDivider/Jakefile b/Tests/Manual/CPSplitViewDivider/Jakefile
new file mode 100644
index 000000000..bbe9a5454
--- /dev/null
+++ b/Tests/Manual/CPSplitViewDivider/Jakefile
@@ -0,0 +1,184 @@
+/*
+ * Jakefile
+ * CPSplitViewDivider
+ *
+ * Created by You on January 12, 2016.
+ * Copyright 2016, 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"),
+ projectName = "CPSplitViewDivider";
+
+app (projectName, function(task)
+{
+ ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks";
+
+ if (configuration === "Debug")
+ ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration);
+
+ task.setBuildIntermediatesPath(FILE.join("Build", "CPSplitViewDivider.build", configuration));
+ task.setBuildPath(FILE.join("Build", configuration));
+
+ task.setProductName("CPSplitViewDivider");
+ task.setIdentifier("com.yourcompany.CPSplitViewDivider");
+ task.setVersion("1.0");
+ task.setAuthor("Your Company");
+ task.setEmail("feedback @nospam@ yourcompany.com");
+ task.setSummary("CPSplitViewDivider");
+ task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**")));
+ task.setResources(new FileList("Resources/**"));
+ task.setIndexFilePath("index.html");
+ task.setInfoPlistPath("Info.plist");
+
+ if (configuration === "Debug")
+ task.setCompilerFlags("-DDEBUG -g");
+ else
+ task.setCompilerFlags("-O2");
+});
+
+task ("default", [projectName], function()
+{
+ printResults(configuration);
+});
+
+task ("build", ["default"], function()
+{
+ updateApplicationSize();
+});
+
+task ("debug", function()
+{
+ configuration = ENV["CONFIGURATION"] = "Debug";
+ JAKE.subjake(["."], "build", ENV);
+});
+
+task ("release", function()
+{
+ configuration = ENV["CONFIGURATION"] = "Release";
+ JAKE.subjake(["."], "build", ENV);
+});
+
+task ("run", ["debug"], function()
+{
+ OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]);
+});
+
+task ("run-release", ["release"], function()
+{
+ OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]);
+});
+
+task ("deploy", ["release"], function()
+{
+ FILE.mkdirs(FILE.join("Build", "Deployment", projectName));
+ OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]);
+ printResults("Deployment")
+});
+
+task ("desktop", ["release"], function()
+{
+ FILE.mkdirs(FILE.join("Build", "Desktop", projectName));
+ require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPSplitViewDivider.app"));
+ printResults("Desktop")
+});
+
+task ("run-desktop", ["desktop"], function()
+{
+ OS.system([FILE.join("Build", "Desktop", projectName, "CPSplitViewDivider.app", "Contents", "MacOS", "NativeHost"), "-i"]);
+});
+
+function printResults(configuration)
+{
+ print("----------------------------");
+ print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName));
+ print("----------------------------");
+}
+
+function updateApplicationSize()
+{
+ print("Calculating application file sizes...");
+
+ var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }),
+ format = CFPropertyList.sniffedFormatOfString(contents),
+ plist = CFPropertyList.propertyListFromString(contents),
+ totalBytes = {executable:0, data:0, mhtml:0};
+
+ // Get the size of all framework executables and sprite data
+ var frameworksDir = "Frameworks";
+
+ if (configuration === "Debug")
+ frameworksDir = FILE.join(frameworksDir, "Debug");
+
+ var frameworks = FILE.list(frameworksDir);
+
+ frameworks.forEach(function(framework)
+ {
+ if (framework !== "Source")
+ addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes);
+ });
+
+ // Read in the default theme name, and attempt to get its size
+ var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2",
+ themePath = nil;
+
+ if (themeName === "Aristo" || themeName === "Aristo2")
+ themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend");
+ else
+ themePath = FILE.join("Frameworks", "Resources", themeName + ".blend");
+
+ if (FILE.isDirectory(themePath))
+ addBundleFileSizes(themePath, totalBytes);
+
+ // Add sizes for the app
+ addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes);
+
+ print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data));
+
+ var dict = new CFMutableDictionary();
+
+ dict.setValueForKey("executable", totalBytes.executable);
+ dict.setValueForKey("data", totalBytes.data);
+ dict.setValueForKey("mhtml", totalBytes.mhtml);
+
+ plist.setValueForKey("CPApplicationSize", dict);
+
+ FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" });
+}
+
+function addBundleFileSizes(bundlePath, totalBytes)
+{
+ var bundleName = FILE.basename(bundlePath),
+ environment = bundleName === "Foundation" ? "Objj" : "Browser",
+ bundlePath = FILE.join(bundlePath, environment + ".environment");
+
+ if (FILE.isDirectory(bundlePath))
+ {
+ var filename = bundleName + ".sj",
+ filePath = new FILE.Path(FILE.join(bundlePath, filename));
+
+ if (filePath.exists())
+ totalBytes.executable += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt"));
+
+ if (filePath.exists())
+ totalBytes.data += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt"));
+
+ if (filePath.exists())
+ totalBytes.mhtml += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt"));
+
+ if (filePath.exists())
+ totalBytes.mhtml += filePath.size();
+ }
+}
diff --git a/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.cib b/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.cib
new file mode 100644
index 000000000..59202e3a3
--- /dev/null
+++ b/Tests/Manual/CPSplitViewDivider/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;21E;D;K;6;CP$UIDd;2;22E;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;36E;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;D;K;6;CP$UIDd;2;54E;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;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;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;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;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;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;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;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;98E;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;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;3;123E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;D;K;6;CP$UIDd;3;135E;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;57E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;3;107E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;3;116E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;127E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;3;131E;D;K;6;CP$UIDd;2;11E;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;136E;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;137E;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;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;131E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;125E;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;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;133E;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;135E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;134E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;142E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;120E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;143E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;117E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;144E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;61E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;11E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;145E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;146E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;74E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;147E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;75E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;148E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;76E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;149E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;150E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;123E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;151E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;77E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;152E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;72E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;153E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;55E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;154E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;110E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;155E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;109E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;156E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;84E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;157E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;87E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;158E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;83E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;159E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;99E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;160E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;86E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;161E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;85E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;162E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;98E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;163E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;80E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;164E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;91E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;165E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;95E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;166E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;81E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;167E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;100E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;168E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;118E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;169E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;113E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;170E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;114E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;171E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;101E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;172E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;104E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;173E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;105E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;174E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;106E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;1;0E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;175E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;3;129E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;3;135E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;136E;E;D;K;10;$classnameS;6;CPMenuK;8;$classesA;S;6;CPMenuS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;177E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;178E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;179E;E;D;K;10;$classnameS;10;CPMenuItemK;8;$classesA;S;10;CPMenuItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;180E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;60E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;60E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;180E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;183E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;184E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;185E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;189E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;190E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;191E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;60E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;192E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;193E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;67E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;67E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;193E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;194E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;195E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;196E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;197E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;198E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;199E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;71E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;71E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;199E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;200E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;201E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;202E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;71E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;203E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;204E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;205E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;206E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;207E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;208E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;210E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;211E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;79E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;79E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;211E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;212E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;213E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;214E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;215E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;216E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;217E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;218E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;219E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;220E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;221E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;222E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;223E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;224E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;225E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;226E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;90E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;90E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;226E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;227E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;228E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;229E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;230E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;231E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;232E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;233E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;234E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;235E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;236E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;237E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;238E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;239E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;240E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;90E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;241E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;242E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;2;97E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;2;97E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;242E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;243E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;244E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;245E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;246E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;247E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;248E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;249E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;97E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;250E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;103E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;103E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;250E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;251E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;252E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;229E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;230E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;253E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;232E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;233E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;254E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;16;CPMenuItemTagKeyD;K;6;CP$UIDd;3;235E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;103E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;236E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;209E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;255E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;108E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;108E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;79E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;255E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;256E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;257E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;258E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;108E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;259E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;112E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;112E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;259E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;260E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;261E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;262E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;263E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;264E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;112E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;265E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;116E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;116E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;265E;K;13;CPMenuNameKeyD;K;6;CP$UIDd;3;266E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;267E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;268E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;116E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;269E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;270E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;116E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;24;CPMenuItemIsSeparatorKeyD;K;6;CP$UIDd;3;186E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;187E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;22;CPMenuItemIsEnabledKeyD;K;6;CP$UIDd;3;188E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;116E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;271E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;116E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;272E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;3;122E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;3;181E;K;20;CPMenuItemSubmenuKeyD;K;6;CP$UIDd;3;122E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;2;57E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;14;CPMenuTitleKeyD;K;6;CP$UIDd;3;272E;K;14;CPMenuItemsKeyD;K;6;CP$UIDd;3;273E;E;D;K;6;$classD;K;6;CP$UIDd;2;58E;K;18;CPMenuItemTitleKeyD;K;6;CP$UIDd;3;274E;K;19;CPMenuItemTargetKeyD;K;6;CP$UIDd;1;0E;K;19;CPMenuItemActionKeyD;K;6;CP$UIDd;1;0E;K;17;CPMenuItemMenuKeyD;K;6;CP$UIDd;3;122E;K;26;CPMenuItemKeyEquivalentKeyD;K;6;CP$UIDd;3;275E;K;38;CPMenuItemKeyEquivalentModifierMaskKeyD;K;6;CP$UIDd;3;182E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;124E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;276E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;277E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;278E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;279E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;280E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;238E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;265E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;3;127E;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;3;126E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;282E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;282E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;283E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;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;3;128E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;286E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;287E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;127E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;288E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;289E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;290E;K;6;$afontD;K;6;CP$UIDd;3;292E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;281E;K;11;$aalignmentD;K;6;CP$UIDd;3;232E;K;7;$aimageD;K;6;CP$UIDd;3;294E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;281E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;295E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;281E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;296E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;297E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;187E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;188E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;298E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;281E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;186E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;232E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;281E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPSplitViewK;8;$classesA;S;11;CPSplitViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;127E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;299E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;300E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;301E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;127E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;302E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;303E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPSplitViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;24;CPSplitViewIsVerticalKeyD;K;6;CP$UIDd;3;186E;K;28;CPSplitViewIsPaneSplitterKeyD;K;6;CP$UIDd;3;188E;K;26;CPSplitViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;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;3;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;131E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;304E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;304E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;131E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;3;132E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;131E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;281E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;307E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;308E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;131E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;305E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;284E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;285E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;285E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;188E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;28;_CPCibCustomViewClassNameKeyD;K;6;CP$UIDd;3;306E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;309E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;125E;E;E;S;8;delegateS;9;splitViewS;9;theWindowS;8;viewLeftS;9;viewRightS;15;arrangeInFront:S;19;performMiniaturize:S;29;orderFrontStandardAboutPanel:S;13;openDocument:S;13;performClose:S;13;saveDocument:S;15;saveDocumentAs:S;12;newDocument:S;9;showHelp:S;22;revertDocumentToSaved:S;21;clearRecentDocuments:S;10;terminate:S;13;stopSpeaking:S;14;startSpeaking:S;5;copy:S;10;selectAll:S;4;cut:S;14;checkSpelling:S;7;delete:S;6;paste:S;15;showGuessPanel:S;5;undo:S;23;performFindPanelAction:S;29;centerSelectionInVisibleArea:S;5;redo:S;30;toggleContinuousSpellChecking:S;12;performZoom:S;19;toggleToolbarShown:S;31;runToolbarCustomizationPalette:S;22;toggleGrammarChecking:S;24;toggleSmartInsertDelete:S;33;toggleAutomaticQuoteSubstitution:S;29;toggleAutomaticLinkDetection:S;18;clickChangeButton:S;9;AMainMenuS;11;_CPMainMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;3;111E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;121E;E;E;S;14;NewApplicationS;14;submenuAction:d;7;1048576S;18;_CPApplicationMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;E;E;S;20;About NewApplicationT;S;0;F;S;12;Preferences…S;1;,S;19;Quit NewApplicationS;1;qS;4;FileD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;E;E;S;3;NewS;1;nS;5;Open…S;1;oS;11;Open RecentS;22;_CPRecentDocumentsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;72E;E;E;S;10;Clear MenuS;5;CloseS;1;wS;4;SaveS;1;sS;8;Save As…S;1;Sd;7;1179648S;15;Revert to SavedS;4;EditD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;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;2;86E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;3;102E;D;K;6;CP$UIDd;3;107E;E;E;S;4;UndoS;1;zS;4;RedoS;1;ZS;3;CutS;1;xS;4;CopyS;1;cS;5;PasteS;1;vS;6;DeleteS;10;Select AllS;1;aS;4;FindD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;2;95E;E;E;S;5;Find…d;1;1S;1;fS;9;Find Nextd;1;2S;1;gS;13;Find Previousd;1;3S;1;GS;22;Use Selection for Findd;1;7S;1;eS;17;Jump to SelectionS;1;jS;20;Spelling and GrammarD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;98E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;D;K;6;CP$UIDd;3;101E;E;E;S;14;Show Spelling…S;1;:S;14;Check SpellingS;1;;S;27;Check Spelling While TypingS;27;Check Grammar With SpellingS;13;SubstitutionsD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;104E;D;K;6;CP$UIDd;3;105E;D;K;6;CP$UIDd;3;106E;E;E;S;16;Smart Copy/PasteS;12;Smart QuotesS;11;Smart LinksS;6;SpeechD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;109E;D;K;6;CP$UIDd;3;110E;E;E;S;14;Start SpeakingS;13;Stop SpeakingS;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;3;114E;E;E;S;12;Show ToolbarS;1;td;7;1572864S;18;Customize Toolbar…S;6;WindowS;14;_CPWindowsMenuD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;117E;D;K;6;CP$UIDd;3;118E;D;K;6;CP$UIDd;3;119E;D;K;6;CP$UIDd;3;120E;E;E;S;8;MinimizeS;1;mS;4;ZoomS;18;Bring All to FrontS;4;HelpD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;123E;E;E;S;19;NewApplication HelpS;1;?S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;131E;E;E;S;6;normalS;6;{1, 1}S;21;{{203, 20}, {75, 25}}S;18;{{0, 0}, {75, 25}}d;2;32S;6;buttonS;27;bordered+controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;291E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;310E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;296E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;186E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;188E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;186E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;293E;K;4;nameD;K;6;CP$UIDd;3;311E;K;12;defaultValueD;K;6;CP$UIDd;3;313E;K;5;stateD;K;6;CP$UIDd;3;314E;K;5;valueD;K;6;CP$UIDd;3;315E;E;d;1;4d;2;-1S;6;Changed;2;14S;22;{{20, 54}, {440, 286}}S;20;{{0, 0}, {440, 286}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;133E;D;K;6;CP$UIDd;3;134E;E;E;d;2;18S;9;splitviewS;20;{{0, 0}, {223, 286}}d;1;8S;6;CPViewS;22;{{224, 0}, {216, 286}}S;20;{{0, 0}, {216, 286}}S;13;AppControllerS;28;_CPFontSystemFacePlaceholderS;5;imageD;K;10;$classnameS;6;CPNullK;8;$classesA;S;6;CPNullS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;312E;E;S;11;highlightedD;K;6;$classD;K;6;CP$UIDd;3;291E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;316E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;317E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;188E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;188E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;188E;E;S;18;.AppleSystemUIFontd;2;13E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.xib b/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.xib
new file mode 100644
index 000000000..866ffea6d
--- /dev/null
+++ b/Tests/Manual/CPSplitViewDivider/Resources/MainMenu.xib
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPSplitViewDivider/index-debug.html b/Tests/Manual/CPSplitViewDivider/index-debug.html
new file mode 100644
index 000000000..8040f8aa7
--- /dev/null
+++ b/Tests/Manual/CPSplitViewDivider/index-debug.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CPSplitViewDivider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPSplitViewDivider/index.html b/Tests/Manual/CPSplitViewDivider/index.html
new file mode 100644
index 000000000..44d7516fa
--- /dev/null
+++ b/Tests/Manual/CPSplitViewDivider/index.html
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CPSplitViewDivider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPSplitViewDivider/main.j b/Tests/Manual/CPSplitViewDivider/main.j
new file mode 100644
index 000000000..ac6b1c92c
--- /dev/null
+++ b/Tests/Manual/CPSplitViewDivider/main.j
@@ -0,0 +1,18 @@
+/*
+ * AppController.j
+ * CPSplitViewDivider
+ *
+ * Created by You on January 12, 2016.
+ * Copyright 2016, Your Company All rights reserved.
+ */
+
+@import
+@import
+
+@import "AppController.j"
+
+
+function main(args, namedArgs)
+{
+ CPApplicationMain(args, namedArgs);
+}
diff --git a/Tests/Manual/CPTabViewBindings/AppController.j b/Tests/Manual/CPTabViewBindings/AppController.j
new file mode 100644
index 000000000..2a8c8c81e
--- /dev/null
+++ b/Tests/Manual/CPTabViewBindings/AppController.j
@@ -0,0 +1,77 @@
+/*
+ * AppController.j
+ * CPTabViewBindings
+ *
+ * Created by You on February 25, 2015.
+ * Copyright 2015, Your Company All rights reserved.
+ */
+
+@import
+@import
+
+CPLogRegister(CPLogConsole);
+
+var ITEM_NUMBER = 0;
+
+@implementation ArrayController : CPArrayController
+
+- (id)newObject
+{
+ var n = ITEM_NUMBER++;
+ var item = [[CPTabViewItem alloc] initWithIdentifier:@"Item" + n];
+ [item setLabel:@"Item " + n];
+ var view = [[CPView alloc] initWithFrame:CGRectMake(0,0,100,100)];
+ [view setBackgroundColor:[CPColor randomColor]];
+ [item setView:view];
+
+ return item;
+}
+
+@end
+
+@implementation AppController : CPObject
+{
+ @outlet CPWindow theWindow;
+ @outlet CPTabView tabView;
+ @outlet ArrayController arrayController;
+}
+
+- (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.
+
+ [tabView bind:CPContentBinding toObject:arrayController withKeyPath:@"arrangedObjects" options:nil];
+ [tabView bind:CPSelectionIndexesBinding toObject:arrayController withKeyPath:@"selectionIndexes" options:nil];
+ [tabView bind:CPSelectedIndexBinding toObject:arrayController withKeyPath:@"selectedIndex" options:nil];
+ // In this case, we want the window from Cib to become our full browser window
+ [theWindow setFullPlatformWindow:YES];
+}
+
+- (@action)preserveSelection:(id)sender
+{
+ [arrayController setPreservesSelection:[sender state]];
+}
+
+- (@action)avoidsEmpty:(id)sender
+{
+ [arrayController setAvoidsEmptySelection:[sender state]];
+}
+
+- (@action)selectsInserted:(id)sender
+{
+ [arrayController setSelectsInsertedObjects:[sender state]];
+}
+
+- (@action)usesMultipleValuesMarker:(id)sender
+{
+ [arrayController setAlwaysUsesMultipleValuesMarker:[sender state]];
+}
+
+@end
diff --git a/Tests/Manual/CPTabViewBindings/Info.plist b/Tests/Manual/CPTabViewBindings/Info.plist
new file mode 100644
index 000000000..7cf056cf4
--- /dev/null
+++ b/Tests/Manual/CPTabViewBindings/Info.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ Main cib file base name
+ MainMenu.cib
+ CPBundleName
+ CPTabViewBindings
+ CPBundleVersion
+ 1.0
+ CPHumanReadableCopyright
+ Copyright © 2015, Your Company All rights reserved.
+
+
diff --git a/Tests/Manual/CPTabViewBindings/Jakefile b/Tests/Manual/CPTabViewBindings/Jakefile
new file mode 100644
index 000000000..aa6cc29d1
--- /dev/null
+++ b/Tests/Manual/CPTabViewBindings/Jakefile
@@ -0,0 +1,184 @@
+/*
+ * Jakefile
+ * CPTabViewBindings
+ *
+ * Created by You on February 25, 2015.
+ * Copyright 2015, 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"),
+ projectName = "CPTabViewBindings";
+
+app (projectName, function(task)
+{
+ ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks";
+
+ if (configuration === "Debug")
+ ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration);
+
+ task.setBuildIntermediatesPath(FILE.join("Build", "CPTabViewBindings.build", configuration));
+ task.setBuildPath(FILE.join("Build", configuration));
+
+ task.setProductName("CPTabViewBindings");
+ task.setIdentifier("com.yourcompany.CPTabViewBindings");
+ task.setVersion("1.0");
+ task.setAuthor("Your Company");
+ task.setEmail("feedback @nospam@ yourcompany.com");
+ task.setSummary("CPTabViewBindings");
+ task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**")));
+ task.setResources(new FileList("Resources/**"));
+ task.setIndexFilePath("index.html");
+ task.setInfoPlistPath("Info.plist");
+
+ if (configuration === "Debug")
+ task.setCompilerFlags("-DDEBUG -g");
+ else
+ task.setCompilerFlags("-O");
+});
+
+task ("default", [projectName], function()
+{
+ printResults(configuration);
+});
+
+task ("build", ["default"], function()
+{
+ updateApplicationSize();
+});
+
+task ("debug", function()
+{
+ configuration = ENV["CONFIGURATION"] = "Debug";
+ JAKE.subjake(["."], "build", ENV);
+});
+
+task ("release", function()
+{
+ configuration = ENV["CONFIGURATION"] = "Release";
+ JAKE.subjake(["."], "build", ENV);
+});
+
+task ("run", ["debug"], function()
+{
+ OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]);
+});
+
+task ("run-release", ["release"], function()
+{
+ OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]);
+});
+
+task ("deploy", ["release"], function()
+{
+ FILE.mkdirs(FILE.join("Build", "Deployment", projectName));
+ OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]);
+ printResults("Deployment")
+});
+
+task ("desktop", ["release"], function()
+{
+ FILE.mkdirs(FILE.join("Build", "Desktop", projectName));
+ require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPTabViewBindings.app"));
+ printResults("Desktop")
+});
+
+task ("run-desktop", ["desktop"], function()
+{
+ OS.system([FILE.join("Build", "Desktop", projectName, "CPTabViewBindings.app", "Contents", "MacOS", "NativeHost"), "-i"]);
+});
+
+function printResults(configuration)
+{
+ print("----------------------------");
+ print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName));
+ print("----------------------------");
+}
+
+function updateApplicationSize()
+{
+ print("Calculating application file sizes...");
+
+ var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }),
+ format = CFPropertyList.sniffedFormatOfString(contents),
+ plist = CFPropertyList.propertyListFromString(contents),
+ totalBytes = {executable:0, data:0, mhtml:0};
+
+ // Get the size of all framework executables and sprite data
+ var frameworksDir = "Frameworks";
+
+ if (configuration === "Debug")
+ frameworksDir = FILE.join(frameworksDir, "Debug");
+
+ var frameworks = FILE.list(frameworksDir);
+
+ frameworks.forEach(function(framework)
+ {
+ if (framework !== "Source")
+ addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes);
+ });
+
+ // Read in the default theme name, and attempt to get its size
+ var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2",
+ themePath = nil;
+
+ if (themeName === "Aristo" || themeName === "Aristo2")
+ themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend");
+ else
+ themePath = FILE.join("Frameworks", "Resources", themeName + ".blend");
+
+ if (FILE.isDirectory(themePath))
+ addBundleFileSizes(themePath, totalBytes);
+
+ // Add sizes for the app
+ addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes);
+
+ print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data));
+
+ var dict = new CFMutableDictionary();
+
+ dict.setValueForKey("executable", totalBytes.executable);
+ dict.setValueForKey("data", totalBytes.data);
+ dict.setValueForKey("mhtml", totalBytes.mhtml);
+
+ plist.setValueForKey("CPApplicationSize", dict);
+
+ FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" });
+}
+
+function addBundleFileSizes(bundlePath, totalBytes)
+{
+ var bundleName = FILE.basename(bundlePath),
+ environment = bundleName === "Foundation" ? "Objj" : "Browser",
+ bundlePath = FILE.join(bundlePath, environment + ".environment");
+
+ if (FILE.isDirectory(bundlePath))
+ {
+ var filename = bundleName + ".sj",
+ filePath = new FILE.Path(FILE.join(bundlePath, filename));
+
+ if (filePath.exists())
+ totalBytes.executable += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt"));
+
+ if (filePath.exists())
+ totalBytes.data += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt"));
+
+ if (filePath.exists())
+ totalBytes.mhtml += filePath.size();
+
+ filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt"));
+
+ if (filePath.exists())
+ totalBytes.mhtml += filePath.size();
+ }
+}
diff --git a/Tests/Manual/CPTabViewBindings/Resources/MainMenu.cib b/Tests/Manual/CPTabViewBindings/Resources/MainMenu.cib
new file mode 100644
index 000000000..f2e54cdc3
--- /dev/null
+++ b/Tests/Manual/CPTabViewBindings/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;21E;D;K;6;CP$UIDd;2;22E;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;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;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;32E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;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;1;0E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;72E;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;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;2;73E;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;2;74E;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;2;70E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;76E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;55E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;70E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;48E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;62E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;63E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;70E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;67E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;70E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;83E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;66E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;70E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;84E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;68E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;70E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;85E;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;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;69E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;86E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;87E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;88E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;48E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;91E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;87E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;92E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;93E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;94E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;95E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;96E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;2;97E;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;42E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;72E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;98E;K;31;CPCibBindingConnectorBindingKeyD;K;6;CP$UIDd;2;99E;K;31;CPCibBindingConnectorKeyPathKeyD;K;6;CP$UIDd;2;99E;K;31;CPCibBindingConnectorOptionsKeyD;K;6;CP$UIDd;3;100E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;73E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;33E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;3;101E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;3;102E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;3;103E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;3;104E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;3;105E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;3;106E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;3;107E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;36E;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;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;114E;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;2;37E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;116E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;119E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;120E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;40E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;3;121E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;51E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;50E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;3;122E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;3;122E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;3;122E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;3;122E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;3;123E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;3;123E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;3;123E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;3;124E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;3;125E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;3;108E;E;D;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;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;127E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;128E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;38E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;129E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;132E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;42E;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;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;127E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;127E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;3;131E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;133E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;12;$agrid-colorD;K;6;CP$UIDd;3;134E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;135E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;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;137E;K;30;CPTableViewIntercellSpacingKeyD;K;6;CP$UIDd;3;138E;K;37;CPTableViewSelectionHighlightStyleKeyD;K;6;CP$UIDd;3;108E;K;37;CPTableViewColumnAutoresizingStyleKeyD;K;6;CP$UIDd;3;136E;K;31;CPTableViewMultipleSelectionKeyD;K;6;CP$UIDd;3;123E;K;28;CPTableViewEmptySelectionKeyD;K;6;CP$UIDd;3;123E;K;30;CPTableViewColumnReorderingKeyD;K;6;CP$UIDd;3;123E;K;28;CPTableViewColumnResizingKeyD;K;6;CP$UIDd;3;123E;K;29;CPTableViewColumnSelectionKeyD;K;6;CP$UIDd;3;123E;K;26;CPTableViewTableColumnsKeyD;K;6;CP$UIDd;3;139E;K;23;CPTableViewGridColorKeyD;K;6;CP$UIDd;3;134E;K;27;CPTableViewGridStyleMaskKeyD;K;6;CP$UIDd;3;108E;K;39;CPTableViewUsesAlternatingBackgroundKeyD;K;6;CP$UIDd;3;113E;K;34;CPTableViewAlternatingRowColorsKeyD;K;6;CP$UIDd;1;0E;K;24;CPTableViewCornerViewKeyD;K;6;CP$UIDd;3;141E;K;24;CPTableViewHeaderViewKeyD;K;6;CP$UIDd;2;53E;K;26;CPTableViewAutosaveNameKeyD;K;6;CP$UIDd;1;0E;K;35;CPTableViewArchivedReusableViewsKeyD;K;6;CP$UIDd;3;142E;E;D;K;10;$classnameS;13;CPTableColumnK;8;$classesA;S;13;CPTableColumnS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;26;CPTableColumnIdentifierKeyD;K;6;CP$UIDd;3;143E;K;21;CPTableColumnWidthKeyD;K;6;CP$UIDd;3;144E;K;24;CPTableColumnMinWidthKeyD;K;6;CP$UIDd;3;145E;K;24;CPTableColumnMaxWidthKeyD;K;6;CP$UIDd;3;146E;K;26;CPTableColumnHeaderViewKeyD;K;6;CP$UIDd;3;148E;K;24;CPTableColumnDataViewKeyD;K;6;CP$UIDd;3;149E;K;28;CPTableColumnResizingMaskKeyD;K;6;CP$UIDd;3;150E;K;24;CPTableColumnIsHiddenKeyD;K;6;CP$UIDd;3;113E;K;26;CPTableColumnIsEditableKeyD;K;6;CP$UIDd;3;123E;K;28;CPSortDescriptorPrototypeKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;15;CPTableCellViewK;8;$classesA;S;15;CPTableCellViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;151E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;152E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;153E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;154E;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;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;155E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;156E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;46E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;157E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;159E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;136E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;162E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;163E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;113E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;113E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;113E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;165E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;136E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;113E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;113E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;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;2;49E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;166E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;167E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;38E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;168E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;170E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;171E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;172E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;38E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;173E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;113E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;174E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;49E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;175E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;176E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;38E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;168E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;3;169E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;170E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;171E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;177E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;38E;K;18;CPControlActionKeyD;K;6;CP$UIDd;3;178E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;3;123E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;3;174E;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;2;52E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;121E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;179E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;179E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;121E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;180E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;181E;K;29;CPTableHeaderViewTableViewKeyD;K;6;CP$UIDd;2;42E;E;D;K;10;$classnameS;9;CPTabViewK;8;$classesA;S;9;CPTabViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;54E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;182E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;183E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;184E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;3;185E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;57E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;3;108E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;3;161E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTabViewItemK;8;$classesA;S;13;CPTabViewItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;186E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;187E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;58E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;55E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;188E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;189E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;129E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;190E;E;D;K;6;$classD;K;6;CP$UIDd;2;56E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;191E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;192E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;60E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;188E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;189E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;193E;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;61E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;194E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;195E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;196E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;197E;K;6;$afontD;K;6;CP$UIDd;3;198E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;125E;K;7;$aimageD;K;6;CP$UIDd;3;200E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;201E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;202E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;203E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;61E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;204E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;205E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;196E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;197E;K;6;$afontD;K;6;CP$UIDd;3;206E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;125E;K;7;$aimageD;K;6;CP$UIDd;3;207E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;208E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;202E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;203E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;108E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;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;64E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;209E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;213E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;174E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;214E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;174E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;174E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;215E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;216E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;174E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;217E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;174E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;174E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;218E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;212E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;219E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;174E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;220E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;174E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;174E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;221E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;210E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;211E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;159E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;108E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;222E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;108E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;223E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;202E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;3;113E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;174E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;174E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;123E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;125E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;3;108E;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;47E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;36E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;224E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;225E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;36E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;226E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;125E;K;11;$aalignmentD;K;6;CP$UIDd;3;136E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;227E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;123E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;202E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;136E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;228E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;125E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;136E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;3;229E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;113E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;113E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;123E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;230E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;28;CPObjectControllerContentKeyD;K;6;CP$UIDd;1;0E;K;36;CPObjectControllerObjectClassNameKeyD;K;6;CP$UIDd;3;231E;K;31;CPObjectControllerIsEditableKeyD;K;6;CP$UIDd;3;123E;K;49;CPObjectControllerAutomaticallyPreparesContentKeyD;K;6;CP$UIDd;3;123E;K;37;CPArrayControllerAvoidsEmptySelectionD;K;6;CP$UIDd;3;123E;K;49;CPArrayControllerClearsFilterPredicateOnInsertionD;K;6;CP$UIDd;3;123E;K;41;CPArrayControllerFilterRestrictsInsertionD;K;6;CP$UIDd;3;123E;K;35;CPArrayControllerPreservesSelectionD;K;6;CP$UIDd;3;123E;K;39;CPArrayControllerSelectsInsertedObjectsD;K;6;CP$UIDd;3;123E;K;47;CPArrayControllerAlwaysUsesMultipleValuesMarkerD;K;6;CP$UIDd;3;113E;K;47;CPArrayControllerAutomaticallyRearrangesObjectsD;K;6;CP$UIDd;3;113E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;3;232E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;3;233E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;S;8;delegateS;15;arrayControllerS;7;tabViewS;9;theWindowS;9;textFieldS;4;add:S;7;remove:S;18;preserveSelection:S;16;selectsInserted:S;12;avoidsEmpty:S;25;usesMultipleValuesMarker:S;22;value: selection.labelS;5;valueS;15;selection.labelD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;E;E;S;24;value: objectValue.labelS;17;objectValue.labelD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;E;E;S;24;content: arrangedObjectsS;7;contentS;15;arrangedObjectsD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;E;E;S;34;selectionIndexes: selectionIndexesS;16;selectionIndexesD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;E;E;S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 388}, {813, 249}}S;22;{{0, 0}, {1680, 1027}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {813, 249}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;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;S;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{20, 20}, {108, 185}}S;20;{{0, 0}, {108, 185}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;3;124E;E;E;d;2;36S;10;scrollviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;234E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;235E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;236E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;38E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;168E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;237E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;53E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;38E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;38E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;239E;E;d;1;2S;20;{{1, 1}, {106, 167}}S;20;{{0, 0}, {106, 167}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;d;2;18D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;240E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;9;tableviewD;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;242E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;1;4d;2;31S;6;{3, 2}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;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;140E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;108E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;243E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;243E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;244E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;245E;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;K;32;AutomaticTableColumnIdentifier.0D;K;6;CP$UIDd;3;247E;E;E;S;32;AutomaticTableColumnIdentifier.0d;3;103d;2;40d;4;1000D;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;147E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;248E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;249E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;6;$afontD;K;6;CP$UIDd;3;250E;K;16;$atext-alignmentD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;251E;K;38;_CPTableColumnHeaderViewStringValueKeyD;K;6;CP$UIDd;3;252E;K;32;_CPTableColumnHeaderViewImageKeyD;K;6;CP$UIDd;1;0E;K;31;_CPTableColumnHeaderViewFontKeyD;K;6;CP$UIDd;3;253E;E;D;K;6;$classD;K;6;CP$UIDd;2;47E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;238E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;238E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;158E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;254E;K;6;$afontD;K;6;CP$UIDd;3;161E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;136E;K;11;$aalignmentD;K;6;CP$UIDd;3;108E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;255E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;256E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;257E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;3;108E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;3;164E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;123E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;123E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;3;113E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;131E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;136E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;108E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;3;113E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;3;113E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;d;1;3S;19;{{1, 1}, {103, 31}}S;19;{{0, 0}, {103, 31}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;18;{{2, 0}, {99, 17}}S;18;{{0, 0}, {99, 17}}d;2;34S;9;textfieldS;18;controlSizeRegularD;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;258E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;259E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;15;Table View Celld;2;-1D;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;260E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;E;S;20;{{1, 51}, {223, 15}}S;19;{{0, 0}, {223, 15}}d;1;8d;11;-2147483648S;8;scrollerS;27;controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;29;_horizontalScrollerDidScroll:d;1;1S;22;{{224, 66}, {15, 102}}S;19;{{0, 0}, {15, 102}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;_verticalScrollerDidScroll:S;19;{{0, 0}, {106, 25}}S;14;tableHeaderRowD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;23;{{129, 14}, {450, 200}}S;20;{{0, 0}, {450, 200}}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;57E;D;K;6;CP$UIDd;2;59E;E;E;S;1;1S;3;TabS;22;{{10, 33}, {430, 154}}S;20;{{0, 0}, {430, 154}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;1;2S;4;ViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{102, 208}, {26, 25}}S;18;{{0, 0}, {26, 25}}S;6;buttonS;27;bordered+controlSizeRegularD;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;261E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;262E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;113E;E;D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;263E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;264E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;265E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;0;d;2;14S;21;{{72, 208}, {24, 25}}S;18;{{0, 0}, {24, 25}}D;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;258E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;266E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;3;199E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;263E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;267E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;268E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{590, 17}, {214, 21}}S;19;{{0, 0}, {214, 21}}S;9;check-boxS;27;controlSizeRegular+selectedD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;19;Preserves SelectionS;22;{{590, 72}, {214, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;Avoids Empty SelectionS;22;{{590, 44}, {214, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;24;Selects Inserted ObjectsS;23;{{590, 103}, {214, 21}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;Uses Mutliple Values MarkerS;23;{{591, 131}, {207, 22}}S;19;{{0, 0}, {207, 22}}S;47;bezeled+controlSizeRegular+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;269E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;241E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;E;S;23;Tab View Item SelectionS;13;AppControllerS;13;CPTabViewItemS;15;ArrayControllerS;17;CPArrayControllerS;21;{{1, 168}, {106, 17}}S;19;{{0, 0}, {106, 17}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;S;16;{{0, 0}, {0, 0}}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;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;E;E;S;5;colorD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;270E;D;K;6;CP$UIDd;3;174E;E;E;S;18;{{0, 0}, {14, 25}}S;10;cornerviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;5;CPCibK;8;$classesA;S;5;CPCibS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;246E;K;16;CPCibDataFileKeyD;K;6;CP$UIDd;3;271E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;273E;E;E;S;12;columnHeaderD;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;258E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;274E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;6;LabelsD;K;6;$classD;K;6;CP$UIDd;3;160E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;275E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;276E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;123E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;3;113E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;3;123E;E;S;41;controlSizeRegular+editable+tableDataViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;9;Text Celld;4;3072S;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;277E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;277E;D;K;6;CP$UIDd;3;174E;E;E;S;5;Ariald;1;9S;7;CPImageS;13;CPAddTemplateD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;K;9;frameworkD;K;6;CP$UIDd;3;202E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;202E;K;4;sizeD;K;6;CP$UIDd;3;279E;E;E;d;2;16S;16;CPRemoveTemplateD;K;6;$classD;K;6;CP$UIDd;2;89E;K;10;CP.objectsD;K;9;frameworkD;K;6;CP$UIDd;3;202E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;202E;K;4;sizeD;K;6;CP$UIDd;3;280E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;D;K;6;CP$UIDd;3;174E;E;E;f;3;0.8S;8716;MjgwTlBMSVNUOzEuMDtEO0s7NDskdG9wRDtLOzE4O0NQQ2liT2JqZWN0RGF0YUtleUQ7Szs2O0NQJFVJRGQ7MTsyRTtFO0s7ODskb2JqZWN0c0E7Uzs1OyRudWxsRDtLOzEwOyRjbGFzc25hbWVTOzE2O19DUENpYk9iamVjdERhdGFLOzg7JGNsYXNzZXNBO1M7MTY7X0NQQ2liT2JqZWN0RGF0YVM7ODtDUE9iamVjdEU7RTtEO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzE7MUU7SzsyODtfQ1BDaWJPYmplY3REYXRhTmFtZXNLZXlzS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MzA7X0NQQ2liT2JqZWN0RGF0YU5hbWVzVmFsdWVzS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MzA7X0NQQ2liT2JqZWN0RGF0YUNsYXNzZXNLZXlzS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MzI7X0NQQ2liT2JqZWN0RGF0YUNsYXNzZXNWYWx1ZXNLZXlEO0s7NjtDUCRVSURkOzE7MEU7SzszMDtfQ1BDaWJPYmplY3REYXRhQ29ubmVjdGlvbnNLZXlEO0s7NjtDUCRVSURkOzE7NEU7SzsyODtfQ1BDaWJPYmplY3REYXRhRnJhbWV3b3JrS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MjY7X0NQQ2liT2JqZWN0RGF0YU5leHRPaWRLZXlEO0s7NjtDUCRVSURkOzE7NUU7SzszMDtfQ1BDaWJPYmplY3REYXRhT2JqZWN0c0tleXNLZXlEO0s7NjtDUCRVSURkOzE7NkU7SzszMjtfQ1BDaWJPYmplY3REYXRhT2JqZWN0c1ZhbHVlc0tleUQ7Szs2O0NQJFVJRGQ7MTs3RTtLOzI2O19DUENpYk9iamVjdERhdGFPaWRLZXlzS2V5RDtLOzY7Q1AkVUlEZDsxOzhFO0s7Mjg7X0NQQ2liT2JqZWN0RGF0YU9pZFZhbHVlc0tleUQ7Szs2O0NQJFVJRGQ7MTs5RTtLOzI4O19DUENpYk9iamVjdERhdGFGaWxlT3duZXJLZXlEO0s7NjtDUCRVSURkOzI7MTFFO0s7MzM7X0NQQ2liT2JqZWN0RGF0YVZpc2libGVXaW5kb3dzS2V5RDtLOzY7Q1AkVUlEZDsyOzEzRTtFO0Q7SzsxMDskY2xhc3NuYW1lUzs3O0NQQXJyYXlLOzg7JGNsYXNzZXNBO1M7NztDUEFycmF5Uzs4O0NQT2JqZWN0RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0Q7Szs2O0NQJFVJRGQ7MjsxNUU7RDtLOzY7Q1AkVUlEZDsyOzE3RTtFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsxOzNFO0s7MTA7Q1Aub2JqZWN0c0E7RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0Q7Szs2O0NQJFVJRGQ7MjsxOUU7RDtLOzY7Q1AkVUlEZDsyOzIxRTtEO0s7NjtDUCRVSURkOzE7MEU7RDtLOzY7Q1AkVUlEZDsyOzIyRTtFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsxOzNFO0s7MTA7Q1Aub2JqZWN0c0E7RDtLOzY7Q1AkVUlEZDsyOzExRTtEO0s7NjtDUCRVSURkOzI7MTlFO0Q7Szs2O0NQJFVJRGQ7MjsyMUU7RDtLOzY7Q1AkVUlEZDsyOzExRTtFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsxOzNFO0s7MTA7Q1Aub2JqZWN0c0E7RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0U7RTtEO0s7MTA7JGNsYXNzbmFtZVM7MTg7X0NQQ2liQ3VzdG9tT2JqZWN0Szs4OyRjbGFzc2VzQTtTOzE4O19DUENpYkN1c3RvbU9iamVjdFM7ODtDUE9iamVjdEU7RTtEO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzI7MTBFO0s7Mjc7X0NQQ2liQ3VzdG9tT2JqZWN0Q2xhc3NOYW1lRDtLOzY7Q1AkVUlEZDsyOzIzRTtFO0Q7SzsxMDskY2xhc3NuYW1lUzs1O0NQU2V0Szs4OyRjbGFzc2VzQTtTOzU7Q1BTZXRTOzg7Q1BPYmplY3RFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsyOzEyRTtLOzE1O0NQU2V0T2JqZWN0c0tleUQ7Szs2O0NQJFVJRGQ7MjsyNEU7RTtEO0s7MTA7JGNsYXNzbmFtZVM7MjA7Q1BDaWJPdXRsZXRDb25uZWN0b3JLOzg7JGNsYXNzZXNBO1M7MjA7Q1BDaWJPdXRsZXRDb25uZWN0b3JTOzE0O0NQQ2liQ29ubmVjdG9yUzs4O0NQT2JqZWN0RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MjsxNEU7SzsyNDtfQ1BDaWJDb25uZWN0b3JTb3VyY2VLZXlEO0s7NjtDUCRVSURkOzI7MTlFO0s7Mjk7X0NQQ2liQ29ubmVjdG9yRGVzdGluYXRpb25LZXlEO0s7NjtDUCRVSURkOzI7MjFFO0s7MjM7X0NQQ2liQ29ubmVjdG9yTGFiZWxLZXlEO0s7NjtDUCRVSURkOzI7MjVFO0U7RDtLOzEwOyRjbGFzc25hbWVTOzIxO0NQQ2liQmluZGluZ0Nvbm5lY3Rvcks7ODskY2xhc3Nlc0E7UzsyMTtDUENpYkJpbmRpbmdDb25uZWN0b3JTOzE0O0NQQ2liQ29ubmVjdG9yUzs4O0NQT2JqZWN0RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MjsxNkU7SzsyNDtfQ1BDaWJDb25uZWN0b3JTb3VyY2VLZXlEO0s7NjtDUCRVSURkOzI7MjFFO0s7Mjk7X0NQQ2liQ29ubmVjdG9yRGVzdGluYXRpb25LZXlEO0s7NjtDUCRVSURkOzI7MTlFO0s7MjM7X0NQQ2liQ29ubmVjdG9yTGFiZWxLZXlEO0s7NjtDUCRVSURkOzI7MjZFO0s7MzE7Q1BDaWJCaW5kaW5nQ29ubmVjdG9yQmluZGluZ0tleUQ7Szs2O0NQJFVJRGQ7MjsyN0U7SzszMTtDUENpYkJpbmRpbmdDb25uZWN0b3JLZXlQYXRoS2V5RDtLOzY7Q1AkVUlEZDsyOzI4RTtLOzMxO0NQQ2liQmluZGluZ0Nvbm5lY3Rvck9wdGlvbnNLZXlEO0s7NjtDUCRVSURkOzI7MzBFO0U7RDtLOzEwOyRjbGFzc25hbWVTOzE1O0NQVGFibGVDZWxsVmlld0s7ODskY2xhc3Nlc0E7UzsxNTtDUFRhYmxlQ2VsbFZpZXdTOzY7Q1BWaWV3UzsxMTtDUFJlc3BvbmRlclM7ODtDUE9iamVjdEU7RTtEO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzI7MThFO0s7MTg7Q1BSZXNwb25kZXJNZW51S2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MTI7Q1BWaWV3VGFnS2V5RDtLOzY7Q1AkVUlEZDsyOzMxRTtLOzE0O0NQVmlld0ZyYW1lS2V5RDtLOzY7Q1AkVUlEZDsyOzMyRTtLOzE1O0NQVmlld0JvdW5kc0tleUQ7Szs2O0NQJFVJRGQ7MjszM0U7SzsxNztDUFZpZXdTdWJ2aWV3c0tleUQ7Szs2O0NQJFVJRGQ7MjszNEU7SzsyMjtDUFZpZXdBdXRvcmVzaXppbmdNYXNrRDtLOzY7Q1AkVUlEZDsyOzM1RTtLOzE5O0NQVmlld1RoZW1lQ2xhc3NLZXlEO0s7NjtDUCRVSURkOzE7MEU7SzsxOTtDUFZpZXdUaGVtZVN0YXRlS2V5RDtLOzY7Q1AkVUlEZDsyOzM2RTtLOzIwO0NQUmV1c2VJZGVudGlmaWVyS2V5RDtLOzY7Q1AkVUlEZDsyOzM3RTtLOzE0O0NQVmlld1NjYWxlS2V5RDtLOzY7Q1AkVUlEZDsyOzM4RTtLOzE4O0NQVmlld1NpemVTY2FsZUtleUQ7Szs2O0NQJFVJRGQ7MjszOEU7SzsxNztDUFZpZXdJc1NjYWxlZEtleUQ7Szs2O0NQJFVJRGQ7MjszOUU7SzsxOTtDUFZpZXdBcHBlYXJhbmNlS2V5RDtLOzY7Q1AkVUlEZDsxOzBFO0s7MjI7Q1BWaWV3VHJhY2tpbmdBcmVhc0tleUQ7Szs2O0NQJFVJRGQ7Mjs0MEU7RTtEO0s7MTA7JGNsYXNzbmFtZVM7MTE7Q1BUZXh0RmllbGRLOzg7JGNsYXNzZXNBO1M7MTE7Q1BUZXh0RmllbGRTOzk7Q1BDb250cm9sUzs2O0NQVmlld1M7MTE7Q1BSZXNwb25kZXJTOzg7Q1BPYmplY3RFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsyOzIwRTtLOzI3O0NQUmVzcG9uZGVyTmV4dFJlc3BvbmRlcktleUQ7Szs2O0NQJFVJRGQ7MjsxOUU7SzsxODtDUFJlc3BvbmRlck1lbnVLZXlEO0s7NjtDUCRVSURkOzE7MEU7SzsxMjtDUFZpZXdUYWdLZXlEO0s7NjtDUCRVSURkOzI7MzFFO0s7MTQ7Q1BWaWV3RnJhbWVLZXlEO0s7NjtDUCRVSURkOzI7NDFFO0s7MTU7Q1BWaWV3Qm91bmRzS2V5RDtLOzY7Q1AkVUlEZDsyOzQyRTtLOzE4O0NQVmlld1N1cGVydmlld0tleUQ7Szs2O0NQJFVJRGQ7MjsxOUU7SzsyMjtDUFZpZXdBdXRvcmVzaXppbmdNYXNrRDtLOzY7Q1AkVUlEZDsyOzQzRTtLOzE5O0NQVmlld1RoZW1lQ2xhc3NLZXlEO0s7NjtDUCRVSURkOzI7NDRFO0s7MTk7Q1BWaWV3VGhlbWVTdGF0ZUtleUQ7Szs2O0NQJFVJRGQ7Mjs0NUU7Szs2OyRhZm9udEQ7Szs2O0NQJFVJRGQ7Mjs0N0U7SzsxNzskYWxpbmUtYnJlYWstbW9kZUQ7Szs2O0NQJFVJRGQ7Mjs0OEU7SzsxMTskYWFsaWdubWVudEQ7Szs2O0NQJFVJRGQ7Mjs0OEU7SzsxNDtDUFZpZXdTY2FsZUtleUQ7Szs2O0NQJFVJRGQ7MjszOEU7SzsxODtDUFZpZXdTaXplU2NhbGVLZXlEO0s7NjtDUCRVSURkOzI7MzhFO0s7MTc7Q1BWaWV3SXNTY2FsZWRLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7MTk7Q1BWaWV3QXBwZWFyYW5jZUtleUQ7Szs2O0NQJFVJRGQ7MTswRTtLOzIyO0NQVmlld1RyYWNraW5nQXJlYXNLZXlEO0s7NjtDUCRVSURkOzI7NDlFO0s7MzU7Q1BDb250cm9sU2VuZHNBY3Rpb25PbkVuZEVkaXRpbmdLZXlEO0s7NjtDUCRVSURkOzI7NTBFO0s7MTc7Q1BDb250cm9sVmFsdWVLZXlEO0s7NjtDUCRVSURkOzI7NTFFO0s7MjQ7Q1BDb250cm9sU2VuZEFjdGlvbk9uS2V5RDtLOzY7Q1AkVUlEZDsyOzQ4RTtLOzIzO0NQQ29udHJvbENvbnRyb2xTaXplS2V5RDtLOzY7Q1AkVUlEZDsyOzMxRTtLOzMzO0NQQ29udHJvbEJhc2VXcml0dGluZ0RpcmVjdGlvbktleUQ7Szs2O0NQJFVJRGQ7Mjs1MkU7SzsyNDtDUFRleHRGaWVsZElzRWRpdGFibGVLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7MjY7Q1BUZXh0RmllbGRJc1NlbGVjdGFibGVLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7Mjk7Q1BUZXh0RmllbGREcmF3c0JhY2tncm91bmRLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7Mjk7Q1BUZXh0RmllbGRCYWNrZ3JvdW5kQ29sb3JLZXlEO0s7NjtDUCRVSURkOzI7NTRFO0s7Mjc7Q1BUZXh0RmllbGRMaW5lQnJlYWtNb2RlS2V5RDtLOzY7Q1AkVUlEZDsyOzQ4RTtLOzIzO0NQVGV4dEZpZWxkQWxpZ25tZW50S2V5RDtLOzY7Q1AkVUlEZDsyOzQ4RTtLOzMxO0NQVGV4dEZpZWxkUGxhY2Vob2xkZXJTdHJpbmdLZXlEO0s7NjtDUCRVSURkOzE7MEU7SzsyOTtDUFRleHRGaWVsZFVzZXNTaW5nbGVMaW5lTW9kZUQ7Szs2O0NQJFVJRGQ7MjszOUU7SzsxNjtDUFRleHRGaWVsZFdyYXBzRDtLOzY7Q1AkVUlEZDsyOzM5RTtLOzE4O0NQVGV4dEZpZWxkU2Nyb2xsc0Q7Szs2O0NQJFVJRGQ7MjszOUU7RTtEO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzI7MTBFO0s7Mjc7X0NQQ2liQ3VzdG9tT2JqZWN0Q2xhc3NOYW1lRDtLOzY7Q1AkVUlEZDsyOzU1RTtFO1M7ODtDUE9iamVjdEQ7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0U7RTtTOzk7dGV4dEZpZWxkUzsyNDt2YWx1ZTogb2JqZWN0VmFsdWUubGFiZWxTOzU7dmFsdWVTOzE3O29iamVjdFZhbHVlLmxhYmVsRDtLOzEwOyRjbGFzc25hbWVTOzEyO0NQRGljdGlvbmFyeUs7ODskY2xhc3Nlc0E7UzsxMjtDUERpY3Rpb25hcnlTOzg7Q1BPYmplY3RFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsyOzI5RTtLOzEwO0NQLm9iamVjdHNEO0U7RTtkOzE7MFM7MTk7e3sxLCAxfSwgezEwMywgMzF9fVM7MTk7e3swLCAwfSwgezEwMywgMzF9fUQ7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0Q7Szs2O0NQJFVJRGQ7MjsyMUU7RTtFO2Q7MjsxOFM7Njtub3JtYWxTOzMyO0F1dG9tYXRpY1RhYmxlQ29sdW1uSWRlbnRpZmllci4wUzs2O3sxLCAxfUY7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsxOzNFO0s7MTA7Q1Aub2JqZWN0c0E7RTtFO1M7MTg7e3syLCAwfSwgezk5LCAxN319UzsxODt7ezAsIDB9LCB7OTksIDE3fX1kOzI7MzRTOzk7dGV4dGZpZWxkUzsxODtjb250cm9sU2l6ZVJlZ3VsYXJEO0s7MTA7JGNsYXNzbmFtZVM7NjtDUEZvbnRLOzg7JGNsYXNzZXNBO1M7NjtDUEZvbnRTOzg7Q1BPYmplY3RFO0U7RDtLOzY7JGNsYXNzRDtLOzY7Q1AkVUlEZDsyOzQ2RTtLOzEzO0NQRm9udE5hbWVLZXlEO0s7NjtDUCRVSURkOzI7NTZFO0s7MTM7Q1BGb250U2l6ZUtleUQ7Szs2O0NQJFVJRGQ7Mjs1N0U7SzsxNTtDUEZvbnRJc0JvbGRLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7MTc7Q1BGb250SXNJdGFsaWNLZXlEO0s7NjtDUCRVSURkOzI7MzlFO0s7MTc7Q1BGb250SXNTeXN0ZW1LZXlEO0s7NjtDUCRVSURkOzI7MzlFO0U7ZDsxOzREO0s7NjskY2xhc3NEO0s7NjtDUCRVSURkOzE7M0U7SzsxMDtDUC5vYmplY3RzQTtFO0U7VDtTOzE1O1RhYmxlIFZpZXcgQ2VsbGQ7MjstMUQ7SzsxMDskY2xhc3NuYW1lUzs3O0NQQ29sb3JLOzg7JGNsYXNzZXNBO1M7NztDUENvbG9yUzs4O0NQT2JqZWN0RTtFO0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7Mjs1M0U7SzsyMDtDUENvbG9yQ29tcG9uZW50c0tleUQ7Szs2O0NQJFVJRGQ7Mjs1OEU7SzsxOTtDUFZpZXdUaGVtZUNsYXNzS2V5RDtLOzY7Q1AkVUlEZDsyOzU5RTtLOzE5O0NQVmlld1RoZW1lU3RhdGVLZXlEO0s7NjtDUCRVSURkOzI7MzZFO0U7UzsxMztDUEFwcGxpY2F0aW9uUzsyOTsuSGVsdmV0aWNhIE5ldWUgRGVza0ludGVyZmFjZWQ7MjsxM0Q7Szs2OyRjbGFzc0Q7Szs2O0NQJFVJRGQ7MTszRTtLOzEwO0NQLm9iamVjdHNBO0Q7Szs2O0NQJFVJRGQ7Mjs2MEU7RDtLOzY7Q1AkVUlEZDsyOzYwRTtEO0s7NjtDUCRVSURkOzI7NjBFO0Q7Szs2O0NQJFVJRGQ7Mjs2MUU7RTtFO1M7NTtjb2xvcmY7MTg7MC42ODYyNzQ1MDk4MDM5MjE2ZDsxOzFFO0s7OTskYXJjaGl2ZXJTOzE1O0NQS2V5ZWRBcmNoaXZlcks7ODskdmVyc2lvblM7NjsxMDAwMDBFOw==D;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;272E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;3;148E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;281E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;282E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;3;148E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;129E;K;17;CPViewHitTestsKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;111E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;3;112E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;3;113E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;3;283E;E;d;2;11S;28;_CPFontSystemFacePlaceholderd;2;12f;18;0.6862745098039216D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;284E;E;D;K;6;$classD;K;6;CP$UIDd;3;278E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;284E;E;S;18;{{5, 0}, {-10, 0}}S;18;{{0, 0}, {-10, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{"width":0,"height":0}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPTabViewBindings/Resources/MainMenu.xib b/Tests/Manual/CPTabViewBindings/Resources/MainMenu.xib
new file mode 100644
index 000000000..3d3c97519
--- /dev/null
+++ b/Tests/Manual/CPTabViewBindings/Resources/MainMenu.xib
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPTabViewBindings/index-debug.html b/Tests/Manual/CPTabViewBindings/index-debug.html
new file mode 100644
index 000000000..d167acc92
--- /dev/null
+++ b/Tests/Manual/CPTabViewBindings/index-debug.html
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CPTabViewBindings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPTabViewBindings/index.html b/Tests/Manual/CPTabViewBindings/index.html
new file mode 100644
index 000000000..65e579ad1
--- /dev/null
+++ b/Tests/Manual/CPTabViewBindings/index.html
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CPTabViewBindings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPTabViewBindings/main.j b/Tests/Manual/CPTabViewBindings/main.j
new file mode 100644
index 000000000..4cfee11cb
--- /dev/null
+++ b/Tests/Manual/CPTabViewBindings/main.j
@@ -0,0 +1,18 @@
+/*
+ * AppController.j
+ * CPTabViewBindings
+ *
+ * Created by You on February 25, 2015.
+ * Copyright 2015, Your Company All rights reserved.
+ */
+
+@import
+@import
+
+@import "AppController.j"
+
+
+function main(args, namedArgs)
+{
+ CPApplicationMain(args, namedArgs);
+}
diff --git a/Tests/Manual/CPTabViewNib/AppController.j b/Tests/Manual/CPTabViewNib/AppController.j
index 1cda4e413..c88a47d07 100644
--- a/Tests/Manual/CPTabViewNib/AppController.j
+++ b/Tests/Manual/CPTabViewNib/AppController.j
@@ -5,46 +5,88 @@
* Created by Alexander Ljungberg on November 5, 2010.
* Copyright 2010, WireLoad, LLC All rights reserved.
*/
-
+@import
@import
+CPLogRegister(CPLogConsole);
+
@implementation AppController : CPObject
{
CPWindow theWindow; //this "outlet" is connected automatically by the Cib
@outlet CPTabView nibTabView;
@outlet CPTabView nibTabViewEmpty;
+ @outlet CPViewController viewController;
+ @outlet CPStepper insertStepper;
+ @outlet CPStepper removeStepper;
+ @outlet CPButton fromViewController;
+}
+
+- (IBAction)insertTabViewItem:(id)sender
+{
+ var idx = [insertStepper intValue],
+ item;
+
+ if ([fromViewController state])
+ item = [CPTabViewItem tabViewItemWithViewController:viewController];
+ else
+ {
+ item = [[CPTabViewItem alloc] initWithIdentifier:@"Insert" + idx];
+ var view = [[CPView alloc] initWithFrame:CGRectMakeZero()];
+ [view setBackgroundColor:[CPColor randomColor]];
+ [item setView:view];
+ [item setLabel:@"Insert" + idx];
+ }
+
+ [nibTabView insertTabViewItem:item atIndex:idx];
+}
+
+- (IBAction)removeTabViewItem:(id)sender
+{
+ var idx = [removeStepper intValue],
+ item = [nibTabView tabViewItemAtIndex:idx];
+
+ [nibTabView removeTabViewItem:item];
}
- (IBAction)changeView:(id)sender
{
- var item = [nibTabView selectedTabViewItem],
- view = [[CPView alloc] initWithFrame:CGRectMakeZero()];
-
- [view setBackgroundColor:[CPColor redColor]];
+ var item = [nibTabView selectedTabViewItem];
+ var view = [[CPView alloc] initWithFrame:CGRectMakeZero()];
+ [view setBackgroundColor:[CPColor randomColor]];
[item setView:view];
}
- (void)awakeFromCib
{
- var item = [[CPTabViewItem alloc] initWithIdentifier:@"item"],
- view = [[CPView alloc] initWithFrame:CGRectMakeZero()];
-
- [item setView:view];
- [item setLabel:@"item"];
-
- [nibTabViewEmpty addTabViewItem:item];
-
[theWindow setFullPlatformWindow:YES];
+/*
+ var item = [[CPTabViewItem alloc] initWithIdentifier:@"item"];
+ [item setLabel:@"item"];
+ [nibTabViewEmpty addTabViewItem:item];
+*/
+}
+
+- (BOOL)tabView:(CPTabView)aTabView shouldSelectTabViewItem:(CPTabViewItem)tabViewItem
+{
+ var result = ([tabViewItem identifier] != @"unselectable");
+ CPLog.debug(_cmd + [tabViewItem label] + " =" + result);
+
+ return result;
+}
+
+- (void)tabView:(CPTabView)tabView willSelectTabViewItem:(CPTabViewItem)tabViewItem
+{
+ CPLog.debug(_cmd + [tabViewItem label]);
}
- (void)tabView:(CPTabView)aTabView didSelectTabViewItem:(CPTabViewItem)tabViewItem
{
- CPLogConsole(_cmd + [tabViewItem label]);
+ CPLog.debug(_cmd + [tabViewItem label]);
}
-- (void)tabView:(CPTabView)aTabView shouldSelectTabViewItem:(CPTabViewItem)tabViewItem
+- (void)tabViewDidChangeNumberOfTabViewItems:(CPTabView)tabView
{
- return [tabViewItem identifier] != @"unselectable";
+ CPLog.debug(_cmd + [tabView numberOfTabViewItems]);
}
@end
diff --git a/Tests/Manual/CPTabViewNib/Resources/MainMenu.cib b/Tests/Manual/CPTabViewNib/Resources/MainMenu.cib
index f275954fa..83fa94ca4 100644
--- a/Tests/Manual/CPTabViewNib/Resources/MainMenu.cib
+++ b/Tests/Manual/CPTabViewNib/Resources/MainMenu.cib
@@ -1 +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;21E;D;K;6;CP$UIDd;2;22E;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;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;1;0E;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;1;0E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;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;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;34E;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;34E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;11E;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;2;46E;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;2;47E;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;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;34E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;29E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;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;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;42E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;45E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;46E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;24E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;53E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;54E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;55E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;56E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;57E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;58E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;59E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;27E;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;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;61E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;61E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;62E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;E;D;K;10;$classnameS;9;CPTabViewK;8;$classesA;S;9;CPTabViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;65E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;66E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;67E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;2;68E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;60E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;2;70E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;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;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;71E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;72E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;70E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;78E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;80E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;80E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;80E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;82E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;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;32E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;84E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;73E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;85E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;86E;K;6;$afontD;K;6;CP$UIDd;2;87E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;60E;K;11;$aalignmentD;K;6;CP$UIDd;2;75E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;60E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;76E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;88E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;89E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;80E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;90E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;60E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;77E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;75E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;60E;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;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;91E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;66E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;92E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;93E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;2;94E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;43E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;60E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;2;70E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTabViewItemK;8;$classesA;S;13;CPTabViewItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;2;95E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;2;96E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;37E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;99E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;E;D;K;10;$classnameS;8;CPSliderK;8;$classesA;S;8;CPSliderS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;100E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;103E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;3;104E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;60E;K;11;$aalignmentD;K;6;CP$UIDd;2;60E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;76E;K;19;CPSliderMinValueKeyD;K;6;CP$UIDd;2;60E;K;19;CPSliderMaxValueKeyD;K;6;CP$UIDd;3;106E;K;23;CPSliderAltIncrValueKeyD;K;6;CP$UIDd;2;60E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;107E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;108E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;41E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;97E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;41E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;110E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;111E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;41E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;74E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;2;70E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;75E;K;11;$aalignmentD;K;6;CP$UIDd;2;76E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;77E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;79E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;77E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;77E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;77E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;113E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;75E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;76E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;35E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;114E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;44E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;60E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;115E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;98E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;34E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;116E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;117E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;E;E;S;8;delegateS;10;nibTabViewS;15;nibTabViewEmptyS;20;takeDoubleValueFrom:S;11;changeView:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{110, 71}, {950, 390}}S;22;{{0, 0}, {1680, 1028}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {950, 390}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;E;E;d;2;18S;6;normalS;22;{{478, 6}, {454, 344}}S;20;{{0, 0}, {454, 344}}d;2;51D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;69E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;118E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;119E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;77E;E;S;23;{{597, 359}, {216, 17}}S;19;{{0, 0}, {216, 17}}d;2;13S;9;textfieldd;1;2d;1;4T;S;33;A Tab View Item Sould be Selectedd;4;3072F;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;81E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;120E;E;S;23;{{159, 355}, {162, 25}}S;19;{{0, 0}, {162, 25}}S;6;buttonS;8;borderedD;K;6;$classD;K;6;CP$UIDd;2;69E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;118E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;119E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;77E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;77E;E;S;20;Replace Current ViewS;0;d;2;14S;21;{{13, 6}, {454, 344}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;d;2;54D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;40E;E;E;S;1;1S;3;TabS;22;{{10, 33}, {434, 298}}S;20;{{0, 0}, {434, 298}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;E;E;S;21;{{166, 34}, {92, 21}}S;18;{{0, 0}, {92, 21}}d;2;45S;6;sliderD;K;6;$classD;K;6;CP$UIDd;2;69E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;121E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;122E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;80E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;80E;E;d;2;50d;3;100S;12;unselectableS;14;Not SelectableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;22;{{165, 26}, {104, 29}}S;19;{{0, 0}, {104, 29}}S;28;bezeled+editable+placeholderD;K;6;$classD;K;6;CP$UIDd;2;81E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;123E;E;S;4;ViewS;22;{{10, 13}, {434, 298}}d;1;8S;13;AppControllerS;28;_CPFontSystemFacePlaceholderd;2;-1D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;124E;D;K;6;CP$UIDd;3;125E;E;E;S;9;Helveticad;2;12D;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;125E;D;K;6;CP$UIDd;3;125E;D;K;6;CP$UIDd;3;125E;E;E;f;18;0.6862745098039216d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
+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;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;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;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;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;1;0E;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;1;0E;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;1;0E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;62E;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;64E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;67E;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;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;35E;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;46E;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;46E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;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;2;68E;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;2;69E;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;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;71E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;62E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;72E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;64E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;73E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;46E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;74E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;37E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;75E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;60E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;76E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;65E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;67E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;77E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;46E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;37E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;70E;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;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;45E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;78E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;64E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;63E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;56E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;80E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;57E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;65E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;81E;E;D;K;6;$classD;K;6;CP$UIDd;2;25E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;60E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;58E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;79E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;68E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;32E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;82E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;83E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;84E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;85E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;86E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;87E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;88E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;35E;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;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;90E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;90E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;91E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;E;D;K;10;$classnameS;9;CPTabViewK;8;$classesA;S;9;CPTabViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;96E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;97E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;98E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;2;99E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;39E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;89E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;3;101E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;13;CPTabViewItemK;8;$classesA;S;13;CPTabViewItemS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;102E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;40E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;105E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;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;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;40E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;106E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;107E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;40E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;102E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;116E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;117E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;119E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;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;44E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;120E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;121E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;122E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;123E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;124E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;125E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;95E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;89E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;113E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;112E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;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;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;127E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;97E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;128E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPTabViewItemsKeyD;K;6;CP$UIDd;3;129E;K;24;CPTabViewSelectedItemKeyD;K;6;CP$UIDd;2;53E;K;16;CPTabViewTypeKeyD;K;6;CP$UIDd;2;89E;K;16;CPTabViewFontKeyD;K;6;CP$UIDd;3;101E;K;20;CPTabViewDelegateKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;130E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;131E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;48E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;132E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;48E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;133E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;134E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;48E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;131E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;3;135E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;136E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;1;0E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;51E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;137E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;51E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;138E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;139E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;51E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;136E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;26;CPTabViewItemIdentifierKeyD;K;6;CP$UIDd;1;0E;K;21;CPTabViewItemLabelKeyD;K;6;CP$UIDd;3;140E;K;21;CPTabViewItemImageKeyD;K;6;CP$UIDd;3;142E;K;20;CPTabViewItemViewKeyD;K;6;CP$UIDd;2;54E;K;23;CPTabViewItemAuxViewKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;34E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;46E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;103E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;104E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;143E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;92E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;93E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;54E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;144E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;145E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;54E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;140E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;111E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;146E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;147E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;122E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;123E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;148E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;125E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;95E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;89E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;113E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;112E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;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;44E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;149E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;150E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;122E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;123E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;151E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;125E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;95E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;126E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;89E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;113E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;112E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;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;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;152E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;153E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;154E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;112E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;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;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;155E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;156E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;157E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;158E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;159E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;160E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;113E;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;61E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;161E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;162E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;163E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;111E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;16;$aimage-positionD;K;6;CP$UIDd;3;112E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;164E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;3;125E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;95E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;3;159E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;3;159E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;3;113E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;3;112E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;89E;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;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;165E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;166E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;109E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;3;112E;K;17;$aline-break-modeD;K;6;CP$UIDd;3;112E;K;6;$afontD;K;6;CP$UIDd;3;101E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;3;113E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;154E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;111E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;95E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;95E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;3;115E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;3;112E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;3;112E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;95E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;95E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;59E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;89E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;167E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;156E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;108E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;3;157E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;3;110E;K;11;$aalignmentD;K;6;CP$UIDd;2;89E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;94E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;94E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;95E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;89E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;158E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;89E;K;18;CPStepperIncrementD;K;6;CP$UIDd;3;159E;K;17;CPStepperMaxValueD;K;6;CP$UIDd;3;160E;K;19;CPStepperAutorepeatD;K;6;CP$UIDd;3;113E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;168E;E;D;K;10;$classnameS;16;CPViewControllerK;8;$classesA;S;16;CPViewControllerS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;66E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;23;CPViewControllerViewKeyD;K;6;CP$UIDd;1;0E;K;24;CPViewControllerTitleKeyD;K;6;CP$UIDd;3;169E;K;26;CPViewControllerCibNameKeyD;K;6;CP$UIDd;3;170E;K;25;CPViewControllerBundleKeyD;K;6;CP$UIDd;1;0E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;33E;E;E;S;8;delegateS;21;initialFirstResponderS;18;fromViewControllerS;13;insertStepperS;10;nibTabViewS;15;nibTabViewEmptyS;13;removeStepperS;14;viewControllerS;11;changeView:S;17;takeIntValueFrom:S;18;insertTabViewItem:S;18;removeTabViewItem:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1946157056S;23;{{110, 20}, {950, 440}}S;22;{{0, 0}, {1680, 1027}}d;2;15S;6;Windowd;1;0S;20;{{0, 0}, {950, 440}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;43E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;62E;E;E;d;2;18S;6;normalS;6;{1, 1}F;S;23;{{478, 48}, {454, 345}}S;20;{{0, 0}, {454, 345}}d;2;51D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;E;E;D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;100E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;171E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;118E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;95E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;95E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;95E;E;S;6;Item 0S;22;{{10, 33}, {434, 299}}S;20;{{0, 0}, {434, 299}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;S;22;{{200, 133}, {39, 17}}S;18;{{0, 0}, {39, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;1;4d;1;2T;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;114E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;172E;E;S;23;{{596, 409}, {218, 17}}S;19;{{0, 0}, {218, 17}}d;2;13S;33;A Tab View Item Sould be SelectedS;23;{{159, 408}, {162, 25}}S;19;{{0, 0}, {162, 25}}S;6;buttonS;27;bordered+controlSizeRegularS;20;Replace Current ViewS;0;d;2;14S;22;{{13, 48}, {454, 345}}d;2;54D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;50E;E;E;S;1;1S;3;TabD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;E;E;S;22;{{200, 133}, {22, 17}}S;18;{{0, 0}, {22, 17}}S;12;unselectableS;14;Not SelectableD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;52E;E;E;S;22;{{172, 133}, {91, 17}}S;18;{{0, 0}, {91, 17}}S;4;ViewD;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;141E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;173E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;174E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;176E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;55E;E;E;S;22;{{200, 133}, {29, 17}}S;18;{{0, 0}, {29, 17}}S;21;{{20, 11}, {182, 25}}S;19;{{0, 0}, {182, 25}}S;25;InsertTabViewItemAtIndex:S;22;{{460, 11}, {192, 25}}S;19;{{0, 0}, {192, 25}}S;25;removeTabViewItemAtIndex:S;21;{{655, 12}, {27, 20}}S;18;{{0, 0}, {27, 20}}S;1;0S;18;{{685, 9}, {0, 0}}S;16;{{0, 0}, {0, 0}}S;7;stepperd;5;65540d;1;1d;3;100S;22;{{285, 13}, {159, 21}}S;19;{{0, 0}, {159, 21}}S;9;check-boxS;20;From View controllerS;21;{{200, 13}, {27, 19}}S;18;{{0, 0}, {27, 19}}S;19;{{226, 10}, {0, 0}}S;13;AppControllerS;15;VIEW CONTROLLERS;11;TabViewItemS;29;.Helvetica Neue DeskInterfaceD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;177E;D;K;6;CP$UIDd;3;159E;E;E;S;7;CPImageS;13;CPAddTemplateD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;175E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;179E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;125E;K;9;frameworkD;K;6;CP$UIDd;3;125E;E;E;f;18;0.6862745098039216D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;178E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;180E;E;S;22;{"width":0,"height":0}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib b/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib
index 22f32b7e1..a7ab1ba3b 100644
--- a/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib
+++ b/Tests/Manual/CPTabViewNib/Resources/MainMenu.xib
@@ -1,39 +1,37 @@
-
+
1050
- 11D50
- 2166
- 1138.32
- 568.00
+ 14C109
+ 6751
+ 1344.72
+ 757.30
-
-
+
-
283
- {{478, 40}, {454, 344}}
+ {{478, 47}, {454, 345}}
-
- YES
-
+
+
+
+
+ 274
+
+
+
+ 268
+ {{198, 149}, {43, 17}}
+
+
+
+ _NS:526
+ {251, 750}
+ YES
+
+ 68157504
+ 272630784
+ Item 0
+
+ _NS:526
+
+
+
+
+ NO
+ 1
+
+
+ {{10, 33}, {434, 299}}
+
+
+
+
+ Item 0
+
+
+
+
+
0
YES
YES
+
+
+
@@ -212,11 +265,10 @@
{{594, 14}, {222, 17}}
-
_NS:3944
YES
- 68288064
+ 68157504
272630784
A Tab View Item Sould be Selected
@@ -230,6 +282,8 @@
+ NO
+ 1
@@ -241,37 +295,210 @@
_NS:687
YES
- 67239424
+ 67108864
134217728
Replace Current View
_NS:687
- -2038284033
+ -2038284288
129
200
25
+ NO
-
- {950, 390}
+
+
+ 268
+ {{198, 408}, {31, 19}}
+
+
+
+ _NS:526
+ {251, 750}
+ YES
+
+ 68157504
+ 138413056
+ 0
+
+ _NS:526
+
+
+
+
+ NO
+ 1
+
+
+
+ 268
+ {{223, 405}, {19, 27}}
+
+
+
+ _NS:1592
+ YES
+
+ 786464
+ 0
+ _NS:1592
+
+ 100
+ 1
+ YES
+
+ NO
+
+
+
+ 268
+ {{14, 401}, {194, 32}}
+
+
+
+ _NS:9
+ YES
+
+ 67108864
+ 134217728
+ InsertTabViewItemAtIndex:
+
+ _NS:9
+
+ -2038284288
+ 129
+
+
+ 200
+ 25
+
+ NO
+
+
+
+ 268
+ {{454, 401}, {204, 32}}
+
+
+
+ _NS:9
+ YES
+
+ 67108864
+ 134217728
+ removeTabViewItemAtIndex:
+
+ _NS:9
+
+ -2038284288
+ 129
+
+
+ 200
+ 25
+
+ NO
+
+
+
+ 268
+ {{653, 408}, {31, 20}}
+
+
+
+ _NS:526
+ {251, 750}
+ YES
+
+ 68157504
+ 138413056
+ 0
+
+ _NS:526
+
+
+
+
+ NO
+ 1
+
+
+
+ 268
+ {{682, 406}, {19, 27}}
+
+
+
+ _NS:1592
+ YES
+
+ 786464
+ 0
+ _NS:1592
+
+ 100
+ 1
+ YES
+
+ NO
+
+
+
+ 268
+ {{286, 408}, {149, 18}}
+
+
+
+ _NS:9
+ YES
+
+ 67108864
+ 268435456
+ From View controller
+
+ _NS:9
+
+ 1211912448
+ 2
+
+ NSImage
+ NSSwitch
+
+
+ NSSwitch
+
+
+
+ 200
+ 25
+
+ NO
+
+
+ {950, 440}
-
+
- {{0, 0}, {1680, 1028}}
+ {{0, 0}, {1680, 1027}}
{10000000000000, 10000000000000}
YES
AppController
-
+
+ TabViewItem
+ VIEW CONTROLLER
+ 0
+
+
-
- YES
+
delegate
@@ -280,6 +507,14 @@
451
+
+
+ initialFirstResponder
+
+
+
+ 492
+
changeView:
@@ -305,12 +540,52 @@
486
-
- takeDoubleValueFrom:
-
-
+
+ viewController
+
+
- 458
+ 494
+
+
+
+ insertStepper
+
+
+
+ 513
+
+
+
+ insertTabViewItem:
+
+
+
+ 514
+
+
+
+ removeTabViewItem:
+
+
+
+ 523
+
+
+
+ removeStepper
+
+
+
+ 524
+
+
+
+ fromViewController
+
+
+
+ 527
@@ -328,152 +603,136 @@
487
-
+
+
+ takeIntValueFrom:
+
+
+
+ 512
+
+
+
+ takeIntValueFrom:
+
+
+
+ 522
+
+
-
- YES
+
0
-
- YES
-
+
-2
-
+
File's Owner
-1
-
+
First Responder
-3
-
+
Application
371
-
- YES
+
-
-
+
+
372
-
- YES
+
-
+
+
+
+
+
+
+
+
450
-
+
460
-
- YES
+
-
+
461
-
- YES
+
-
+
462
-
- YES
+
-
+
463
-
- YES
-
-
+
+
+
464
-
- YES
-
-
+
+
+
-
- 452
-
-
- YES
-
-
-
-
-
- 453
-
-
-
-
- 456
-
-
- YES
-
-
-
-
-
- 457
-
-
-
465
-
- YES
-
+
+
+
475
-
- YES
+
-
+
@@ -484,10 +743,9 @@
479
-
- YES
+
-
+
@@ -498,157 +756,323 @@
488
-
- YES
+
-
+
489
+
+
+
-
-
-
- YES
-
- YES
- -1.IBPluginDependency
- -2.IBPluginDependency
- -3.IBPluginDependency
- 371.IBPluginDependency
- 371.IBWindowTemplateEditedContentRect
- 371.NSWindowTemplate.visibleAtLaunch
- 372.IBPluginDependency
- 450.IBPluginDependency
- 452.IBPluginDependency
- 453.IBPluginDependency
- 456.IBPluginDependency
- 457.IBPluginDependency
- 460.IBPluginDependency
- 461.IBPluginDependency
- 462.IBPluginDependency
- 463.IBPluginDependency
- 464.IBPluginDependency
- 465.IBPluginDependency
- 475.IBPluginDependency
- 476.IBPluginDependency
- 479.IBPluginDependency
- 480.IBPluginDependency
- 488.IBPluginDependency
- 489.IBPluginDependency
-
-
- YES
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- com.apple.InterfaceBuilder.CocoaPlugin
- {{209, 447}, {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
-
-
-
- YES
-
-
+
+ 490
+
+
+
+
+
+
+
+ 491
+
+
+
+
+
+
+
+ 493
+
+
+
+
+ 495
+
+
+
+
+
+
+
+ 496
+
+
+
+
+ 497
+
+
+
+
+
+
+
+ 498
+
+
+
+
+ 499
+
+
+
+
+
+
+
+ 500
+
+
+
+
+ 502
+
+
+
+
+
+
+
+ 503
+
+
+
+
+ 506
+
+
+
+
+
+
+
+ 507
+
+
+
+
+ 508
+
+
+
+
+
+
+
+ 509
+
+
+
+
+ 510
+
+
+
+
+
+
+
+ 511
+
+
+
+
+ 515
+
+
+
+
+
+
+
+ 516
+
+
+
+
+ 518
+
+
+
+
+
+
+
+ 519
+
+
+
+
+
+
+
+ 520
+
+
+
+
+ 521
+
+
+
+
+ 525
+
+
+
+
+
+
+
+ 526
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {458, 371}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{209, 447}, {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
+
+
-
- YES
-
-
-
+
- 489
+ 527
-
- YES
+
AppController
NSObject
-
- changeView:
- id
-
-
- changeView:
-
+
+ id
+ id
+ id
+
+
+
changeView:
id
-
-
- YES
-
- YES
- nibTabView
- nibTabViewEmpty
+
+ insertTabViewItem:
+ id
-
- YES
- NSTabView
- NSTabView
+
+ removeTabViewItem:
+ id
-
-
- YES
-
- YES
- nibTabView
- nibTabViewEmpty
+
+
+ NSButton
+ NSStepper
+ NSTabView
+ NSTabView
+ NSStepper
+ NSViewController
+
+
+
+ fromViewController
+ NSButton
-
- YES
-
- nibTabView
- NSTabView
-
-
- nibTabViewEmpty
- NSTabView
-
+
+ insertStepper
+ NSStepper
-
+
+ nibTabView
+ NSTabView
+
+
+ nibTabViewEmpty
+ NSTabView
+
+
+ removeStepper
+ NSStepper
+
+
+ viewController
+ NSViewController
+
+
IBProjectSource
- ./Classes/AppController.h
+ ../.XcodeSupport/AppController.h
-
+
0
IBCocoaFramework
+ NO
com.apple.InterfaceBuilder.CocoaPlugin.macosx
com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
-
+
YES
3
+
+ {11, 11}
+ {15, 15}
+
diff --git a/Tests/Manual/CPTabViewNib/Resources/TabViewItem.cib b/Tests/Manual/CPTabViewNib/Resources/TabViewItem.cib
new file mode 100644
index 000000000..722b30f60
--- /dev/null
+++ b/Tests/Manual/CPTabViewNib/Resources/TabViewItem.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;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;16E;D;K;6;CP$UIDd;2;18E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;1;0E;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;18E;D;K;6;CP$UIDd;2;20E;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;2;21E;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;2;22E;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;2;18E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;23E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;24E;E;D;K;10;$classnameS;18;_CPCibClassSwapperK;8;$classesA;S;18;_CPCibClassSwapperS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;26E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;26E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;28E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;29E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;30E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;30E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;31E;K;30;_CPCibClassSwapperClassNameKeyD;K;6;CP$UIDd;2;32E;K;38;_CPCibClassSwapperOriginalClassNameKeyD;K;6;CP$UIDd;2;32E;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;19E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;18E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;25E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;33E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;34E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;18E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;35E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;36E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;37E;K;11;$aalignmentD;K;6;CP$UIDd;2;38E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;38E;K;6;$afontD;K;6;CP$UIDd;2;40E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;30E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;30E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;31E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;41E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;42E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;43E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;25E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;31E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;31E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;31E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;45E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;38E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;38E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;31E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;31E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;41E;E;S;16;CPViewControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;4;viewS;13;CPApplicationd;1;0S;20;{{0, 0}, {406, 263}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;E;E;d;2;18S;6;normalS;6;{1, 1}F;S;6;CPViewS;22;{{93, 118}, {220, 22}}S;19;{{0, 0}, {220, 22}}d;2;36S;9;textfieldS;26;bezeled+controlSizeRegulard;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;39E;K;13;CPFontNameKeyD;K;6;CP$UIDd;2;46E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;47E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;31E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;31E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;31E;E;T;S;28;CPViewController TabViewItemd;1;4D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;44E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;48E;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;2;49E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;49E;E;E;d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPTabViewNib/Resources/TabViewItem.xib b/Tests/Manual/CPTabViewNib/Resources/TabViewItem.xib
new file mode 100644
index 000000000..529e412f1
--- /dev/null
+++ b/Tests/Manual/CPTabViewNib/Resources/TabViewItem.xib
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib b/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib
index 22af82e0c..20abaefa2 100644
--- a/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib
+++ b/Tests/Manual/CPTextViewCibTest/Resources/MainMenu.cib
@@ -1 +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;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;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;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;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;11E;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;2;34E;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;2;35E;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;2;33E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;29E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;37E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;21E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;33E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;34E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;39E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;40E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;41E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;42E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;43E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;44E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;45E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;23E;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;22E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;47E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;48E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;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;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;52E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;53E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;54E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;55E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;56E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;27E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;32E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;31E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;57E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;57E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;57E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;57E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;58E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;51E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;51E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;59E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;60E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;46E;E;D;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;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;61E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;62E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;63E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;64E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;66E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;29E;E;D;K;10;$classnameS;10;CPTextViewK;8;$classesA;S;10;CPTextViewS;6;CPTextS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;62E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;62E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;64E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;66E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;2;67E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;23;CPTextViewIsEditableKeyD;K;6;CP$UIDd;2;58E;K;25;CPTextViewIsSelectableKeyD;K;6;CP$UIDd;2;58E;K;23;CPTextViewIsRichTextKeyD;K;6;CP$UIDd;2;58E;K;21;CPTextViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;22;CPTextViewContainerKeyD;K;6;CP$UIDd;2;69E;K;32;CPTextViewInsertionPointColorKeyD;K;6;CP$UIDd;2;70E;K;35;CPTextViewSelectedTextAttributesKeyD;K;6;CP$UIDd;2;72E;K;23;CPTextViewAllowsUndoKeyD;K;6;CP$UIDd;2;58E;K;26;CPTextViewUsesFontPanelKeyD;K;6;CP$UIDd;2;58E;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;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;73E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;74E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;75E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;77E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;78E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;46E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;25E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;79E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;80E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;51E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;81E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;82E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;83E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;75E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;77E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;78E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;46E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;25E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;84E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;80E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;58E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;81E;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;2;85E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;E;E;S;8;delegateS;8;textViewS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;E;E;S;6;normalS;6;{1, 1}F;S;22;{{20, 20}, {448, 320}}S;20;{{0, 0}, {448, 320}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;59E;E;E;d;2;36S;10;scrollviewd;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;86E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;86E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;E;d;1;2S;20;{{1, 1}, {446, 318}}S;20;{{0, 0}, {446, 318}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;d;2;18D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;87E;E;S;6;vfokrtD;K;10;$classnameS;15;CPTextContainerK;8;$classesA;S;15;CPTextContainerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;68E;K;22;CPTextContainerSizeKeyD;K;6;CP$UIDd;2;88E;K;31;CPTextContainerLayoutManagerKeyD;K;6;CP$UIDd;2;90E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;10;CP.objectsD;K;7;NSColorD;K;6;CP$UIDd;2;70E;K;17;NSBackgroundColorD;K;6;CP$UIDd;2;92E;E;E;S;23;{{-100, 405}, {87, 15}}S;18;{{0, 0}, {87, 15}}d;1;8d;11;-2147483648S;8;scrollerS;27;controlSizeRegular+disabledS;29;_horizontalScrollerDidScroll:d;1;4d;1;1S;23;{{223, 186}, {15, 133}}S;19;{{0, 0}, {15, 133}}S;27;_verticalScrollerDidScroll:S;13;AppControllerS;16;{{0, 0}, {0, 0}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;81E;E;E;S;15;{446, 10000000}D;K;10;$classnameS;15;CPLayoutManagerK;8;$classesA;S;15;CPLayoutManagerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;89E;K;29;CPLayoutManagerTextStorageKeyD;K;6;CP$UIDd;2;94E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;81E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;95E;E;D;K;10;$classnameS;13;CPTextStorageK;8;$classesA;S;13;CPTextStorageS;25;CPMutableAttributedStringS;18;CPAttributedStringS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;93E;K;24;CPAttributedStringStringD;K;6;CP$UIDd;2;96E;K;24;CPAttributedStringRangesD;K;6;CP$UIDd;2;97E;K;28;CPAttributedStringAttributesD;K;6;CP$UIDd;2;98E;E;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;2;99E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;2;81E;E;E;S;21;Je suis un CPTextViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;101E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;102E;E;E;f;12;0.6666666667D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;100E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;2;71E;K;10;CP.objectsD;K;30;CPForegroundColorAttributeNameD;K;6;CP$UIDd;3;104E;K;19;CPFontAttributeNameD;K;6;CP$UIDd;3;106E;K;29;CPParagraphStyleAttributeNameD;K;6;CP$UIDd;3;108E;E;E;S;26;{"location":0,"length":21}D;K;6;$classD;K;6;CP$UIDd;2;65E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;109E;E;D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;105E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;110E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;111E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;51E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;51E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;51E;E;D;K;10;$classnameS;16;CPParagraphStyleK;8;$classesA;S;16;CPParagraphStyleS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;107E;K;28;CPParagraphStyleAlignmentKeyD;K;6;CP$UIDd;2;80E;K;27;CPParagraphStyleTabStopsKeyD;K;6;CP$UIDd;1;0E;K;38;CPParagraphStyleFirstLineHeadIndentKeyD;K;6;CP$UIDd;2;46E;K;29;CPParagraphStyleHeadIndentKeyD;K;6;CP$UIDd;2;46E;K;29;CPParagraphStyleTailIndentKeyD;K;6;CP$UIDd;2;46E;K;35;CPParagraphStyleParagraphSpacingKeyD;K;6;CP$UIDd;2;46E;K;36;CPParagraphStyleMinimumLineHeightKeyD;K;6;CP$UIDd;2;46E;K;36;CPParagraphStyleMaximumLineHeightKeyD;K;6;CP$UIDd;2;46E;K;30;CPParagraphStyleLineSpacingKeyD;K;6;CP$UIDd;2;46E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;3;112E;D;K;6;CP$UIDd;3;113E;D;K;6;CP$UIDd;2;81E;E;E;S;29;.Helvetica Neue DeskInterfaced;2;11f;12;0.3049308391f;12;0.3742420204E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
+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;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;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;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;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;11E;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;2;34E;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;2;35E;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;2;33E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;29E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;37E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;21E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;38E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;29E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;33E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;36E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;34E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;39E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;40E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;41E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;42E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;43E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;44E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;45E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;23E;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;22E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;47E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;47E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;48E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;52E;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;2;24E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;23E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;53E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;54E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;55E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;23E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;56E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;58E;K;23;CPScrollViewContentViewD;K;6;CP$UIDd;2;27E;K;29;CPScrollViewHeaderClipViewKeyD;K;6;CP$UIDd;1;0E;K;21;CPScrollViewVScrollerD;K;6;CP$UIDd;2;32E;K;21;CPScrollViewHScrollerD;K;6;CP$UIDd;2;31E;K;23;CPScrollViewVLineScrollD;K;6;CP$UIDd;2;59E;K;23;CPScrollViewVPageScrollD;K;6;CP$UIDd;2;59E;K;23;CPScrollViewHLineScrollD;K;6;CP$UIDd;2;59E;K;23;CPScrollViewHPageScrollD;K;6;CP$UIDd;2;59E;K;24;CPScrollViewHasVScrollerD;K;6;CP$UIDd;2;60E;K;24;CPScrollViewHasHScrollerD;K;6;CP$UIDd;2;51E;K;29;CPScrollViewAutohidesScrollerD;K;6;CP$UIDd;2;51E;K;25;CPScrollViewCornerViewKeyD;K;6;CP$UIDd;1;0E;K;31;CPScrollViewBottomCornerViewKeyD;K;6;CP$UIDd;2;61E;K;25;CPScrollViewBorderTypeKeyD;K;6;CP$UIDd;2;62E;K;28;CPScrollViewScrollerStyleKeyD;K;6;CP$UIDd;1;0E;K;32;CPScrollViewScrollerKnobStyleKeyD;K;6;CP$UIDd;2;46E;E;D;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;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;63E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;64E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;66E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;68E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;69E;K;24;CPScrollViewDocumentViewD;K;6;CP$UIDd;2;29E;E;D;K;10;$classnameS;10;CPTextViewK;8;$classesA;S;10;CPTextViewS;6;CPTextS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;27E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;70E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;70E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;27E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;66E;K;21;CPViewBackgroundColorD;K;6;CP$UIDd;2;68E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;20;CPReuseIdentifierKeyD;K;6;CP$UIDd;2;71E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;72E;K;23;CPTextViewIsEditableKeyD;K;6;CP$UIDd;2;60E;K;25;CPTextViewIsSelectableKeyD;K;6;CP$UIDd;2;60E;K;23;CPTextViewIsRichTextKeyD;K;6;CP$UIDd;2;60E;K;21;CPTextViewDelegateKeyD;K;6;CP$UIDd;1;0E;K;22;CPTextViewContainerKeyD;K;6;CP$UIDd;2;74E;K;32;CPTextViewInsertionPointColorKeyD;K;6;CP$UIDd;2;75E;K;35;CPTextViewSelectedTextAttributesKeyD;K;6;CP$UIDd;2;77E;K;23;CPTextViewAllowsUndoKeyD;K;6;CP$UIDd;2;60E;K;26;CPTextViewUsesFontPanelKeyD;K;6;CP$UIDd;2;60E;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;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;78E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;79E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;80E;K;17;CPViewIsHiddenKeyD;K;6;CP$UIDd;2;81E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;84E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;46E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;25E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;85E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;86E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;51E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;87E;K;18;CPScrollerStyleKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;30E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;46E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;88E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;89E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;80E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;82E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;83E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;90E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;46E;K;18;CPControlTargetKeyD;K;6;CP$UIDd;2;25E;K;18;CPControlActionKeyD;K;6;CP$UIDd;2;91E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;86E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;1;0E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;1;0E;K;23;CPScrollerIsVerticalKeyD;K;6;CP$UIDd;2;60E;K;24;CPScrollerKnobProportionD;K;6;CP$UIDd;2;87E;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;2;92E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;E;E;S;8;delegateS;8;textViewS;9;theWindowS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 128}, {480, 360}}S;21;{{0, 0}, {1440, 878}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {480, 360}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;25E;E;E;S;6;normalS;6;{1, 1}F;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;22;{{20, 20}, {448, 320}}S;20;{{0, 0}, {448, 320}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;61E;E;E;d;2;36S;10;scrollviewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;d;2;10T;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;93E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;50E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;50E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;51E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;22;CPViewTrackingAreasKeyD;K;6;CP$UIDd;2;94E;E;d;1;2S;20;{{1, 1}, {431, 318}}S;20;{{0, 0}, {431, 318}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;29E;E;E;d;2;18D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;2;95E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;20;{{0, 0}, {446, 318}}S;6;vfokrtD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;15;CPTextContainerK;8;$classesA;S;15;CPTextContainerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;73E;K;22;CPTextContainerSizeKeyD;K;6;CP$UIDd;2;97E;K;31;CPTextContainerLayoutManagerKeyD;K;6;CP$UIDd;2;99E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;100E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;E;D;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;10;CP.objectsD;K;7;NSColorD;K;6;CP$UIDd;2;75E;K;17;NSBackgroundColorD;K;6;CP$UIDd;3;101E;E;E;S;23;{{-100, 405}, {87, 15}}S;18;{{0, 0}, {87, 15}}d;1;8d;11;-2147483648S;8;scrollerS;27;controlSizeRegular+disabledD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;29;_horizontalScrollerDidScroll:d;1;4d;1;1S;23;{{223, 186}, {15, 133}}S;19;{{0, 0}, {15, 133}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;27;_verticalScrollerDidScroll:S;13;AppControllerS;16;{{0, 0}, {0, 0}}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;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;87E;E;E;S;5;colorS;15;{446, 10000000}D;K;10;$classnameS;15;CPLayoutManagerK;8;$classesA;S;15;CPLayoutManagerS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;98E;K;29;CPLayoutManagerTextStorageKeyD;K;6;CP$UIDd;3;103E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;87E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;67E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;104E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;E;D;K;10;$classnameS;13;CPTextStorageK;8;$classesA;S;13;CPTextStorageS;25;CPMutableAttributedStringS;18;CPAttributedStringS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;102E;K;24;CPAttributedStringStringD;K;6;CP$UIDd;3;105E;K;24;CPAttributedStringRangesD;K;6;CP$UIDd;3;106E;K;28;CPAttributedStringAttributesD;K;6;CP$UIDd;3;107E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;3;108E;D;K;6;CP$UIDd;2;87E;E;E;S;21;Je suis un CPTextViewD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;110E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;111E;E;E;f;12;0.6666666667D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;109E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;112E;E;D;K;6;$classD;K;6;CP$UIDd;2;76E;K;10;CP.objectsD;K;30;CPForegroundColorAttributeNameD;K;6;CP$UIDd;3;113E;K;19;CPFontAttributeNameD;K;6;CP$UIDd;3;115E;K;29;CPParagraphStyleAttributeNameD;K;6;CP$UIDd;3;117E;E;E;S;26;{"location":0,"length":21}D;K;6;$classD;K;6;CP$UIDd;2;67E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;118E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;96E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;49E;E;D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;114E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;119E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;120E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;51E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;51E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;51E;E;D;K;10;$classnameS;16;CPParagraphStyleK;8;$classesA;S;16;CPParagraphStyleS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;116E;K;28;CPParagraphStyleAlignmentKeyD;K;6;CP$UIDd;2;86E;K;27;CPParagraphStyleTabStopsKeyD;K;6;CP$UIDd;1;0E;K;38;CPParagraphStyleFirstLineHeadIndentKeyD;K;6;CP$UIDd;2;46E;K;29;CPParagraphStyleHeadIndentKeyD;K;6;CP$UIDd;2;46E;K;29;CPParagraphStyleTailIndentKeyD;K;6;CP$UIDd;2;46E;K;35;CPParagraphStyleParagraphSpacingKeyD;K;6;CP$UIDd;2;46E;K;36;CPParagraphStyleMinimumLineHeightKeyD;K;6;CP$UIDd;2;46E;K;36;CPParagraphStyleMaximumLineHeightKeyD;K;6;CP$UIDd;2;46E;K;30;CPParagraphStyleLineSpacingKeyD;K;6;CP$UIDd;2;46E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;3;121E;D;K;6;CP$UIDd;3;122E;D;K;6;CP$UIDd;2;87E;E;E;S;18;.AppleSystemUIFontd;2;11f;12;0.3049308391f;12;0.3742420204E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPURLConnectionAsyncTest/AppController.j b/Tests/Manual/CPURLConnectionAsyncTest/AppController.j
new file mode 100644
index 000000000..41015b003
--- /dev/null
+++ b/Tests/Manual/CPURLConnectionAsyncTest/AppController.j
@@ -0,0 +1,210 @@
+/*
+ * AppController.j
+ * CPURLConnectionAsyncTest
+ *
+ * Created by You on February 1, 2012.
+ * Copyright 2012, Your Company All rights reserved.
+
+ This test needs to be at the root of your Web Server (http://localhost/CPURLConnectionAsyncTest/) and with php enabled.
+ For each test, we start 3 async connections and we setup the resulting operations to be dependant one from each other. The connection received after the smallest delay is dependant on a connection received with a longer delay.
+ We test that dedendant operations are perfomed before their dependencies.
+ We also test that in the completionHandler(response, data, error), the data and error params are mututally exclusive.*/
+
+@import
+@import
+CPLogRegister(CPLogConsole);
+
+@implementation AppController : CPObject
+{
+ @outlet CPTextField testField;
+ CPWindow theWindow; //this "outlet" is connected automatically by the Cib
+ CPOperationQueue queue;
+ CPArray results;
+}
+
+- (void)applicationDidFinishLaunching:(CPNotification)aNotification
+{
+ // This is called when the application is done loading.
+}
+
+- (CPURLConnection)startAsyncConnection:(CPInteger)idx responseStatus:(CPInteger)aStatus delay:(CPInteger)aDelay isLast:(BOOL)isLast
+{
+ var resourcePath = [[CPBundle mainBundle] resourcePath],
+ url = [CPURL URLWithString:[CPString stringWithFormat:@"%@delayed.php?sleep=%@&status=%@", resourcePath, aDelay, aStatus]],
+ request = [CPURLRequest requestWithURL:url];
+
+ return [self startAsyncConnection:idx request:request isLast:isLast];
+}
+
+- (CPURLConnection)startAsyncConnection:(CPInteger)idx request:(CPURLRequest)request isLast:(BOOL)isLast
+{
+ var connection = [CPURLConnection sendAsynchronousRequest:request queue:queue completionHandler:function (response, data, error)
+ {
+ var status;
+
+ if (error == nil)
+ error = [CPNull null];
+
+ if (data == nil)
+ data = [CPNull null];
+
+ if (response == nil)
+ status = -1;
+ else
+ status = [response statusCode];
+
+ CPLog.debug([request URL] + "\nRESPONSE:" + response + "\nDATA:" + data + "\nERROR:" + [error description]);
+
+ [results addObject:@{"conn_id":idx, "data":data, "status":status, "error":error}];
+
+ // We received all the responses to the connections we launched (3).
+ if ([results count] == 3)
+ {
+ var test = [self testResults];
+ [testField setStringValue:((test) ? "Test passed" : @"Test failed")];
+ }
+ }];
+
+ return connection;
+}
+
+- (BOOL)testResults
+{
+ if ([results count] !== 3)
+ return NO;
+
+ // In theses tests, we send connections 1,2,3 and we expect the operations to be performed in reverse order: 3,2,1 because of the dependencies we set up.
+ if (![[results valueForKey:@"conn_id"] isEqualToArray:@[3,2,1]])
+ return NO;
+
+ var nul = [CPNull null];
+
+ for (var i = 0; i < [results count]; i++)
+ {
+ var res = [results objectAtIndex:i],
+ noData = [res objectForKey:@"data"] == nul,
+ noError = [res objectForKey:@"error"] == nul;
+
+ if (noData == noError)
+ return NO;
+ }
+
+ return YES;
+}
+
+- (IBAction)test1:(id)sender
+{
+ results = @[];
+ queue = [[CPOperationQueue alloc] init];
+ [testField setStringValue:@"Waiting for response ..."];
+
+ var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES],
+ connection2 = [self startAsyncConnection:2 responseStatus:200 delay:2 isLast:NO],
+ connection3 = [self startAsyncConnection:3 responseStatus:200 delay:3 isLast:NO];
+
+ [[connection1 operation] addDependency:[connection2 operation]];
+ [[connection2 operation] addDependency:[connection3 operation]];
+}
+
+- (IBAction)test2:(id)sender
+{
+ results = @[];
+ queue = [[CPOperationQueue alloc] init];
+ [testField setStringValue:@"Waiting for response ..."];
+
+ var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES],
+ connection2 = [self startAsyncConnection:2 responseStatus:404 delay:2 isLast:NO],
+ connection3 = [self startAsyncConnection:3 responseStatus:200 delay:3 isLast:NO];
+
+ [[connection1 operation] addDependency:[connection2 operation]];
+ [[connection2 operation] addDependency:[connection3 operation]];
+}
+
+- (IBAction)test3:(id)sender
+{
+ results = @[];
+ queue = [[CPOperationQueue alloc] init];
+ [testField setStringValue:@"Waiting for response ..."];
+
+ var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES],
+ connection2 = [self startAsyncConnection:2 responseStatus:200 delay:2 isLast:NO],
+ connection3 = [self startAsyncConnection:3 responseStatus:404 delay:3 isLast:NO];
+
+ [[connection1 operation] addDependency:[connection2 operation]];
+ [[connection2 operation] addDependency:[connection3 operation]];
+}
+
+- (IBAction)test4:(id)sender
+{
+ results = @[];
+ queue = [[CPOperationQueue alloc] init];
+ [testField setStringValue:@"Waiting for response ..."];
+
+ var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES],
+ connection2 = [self startAsyncConnection:2 responseStatus:403 delay:2 isLast:NO],
+ connection3 = [self startAsyncConnection:3 responseStatus:404 delay:3 isLast:NO];
+
+ [[connection1 operation] addDependency:[connection2 operation]];
+ [[connection2 operation] addDependency:[connection3 operation]];
+}
+
+- (IBAction)test5:(id)sender
+{
+ results = @[];
+ queue = [[CPOperationQueue alloc] init];
+ [testField setStringValue:@"Waiting for response ..."];
+
+ var connection1 = [self startAsyncConnection:1 responseStatus:404 delay:1 isLast:YES],
+ connection2 = [self startAsyncConnection:2 responseStatus:1000 delay:2 isLast:NO],
+ connection3 = [self startAsyncConnection:3 responseStatus:404 delay:3 isLast:NO];
+
+ [[connection1 operation] addDependency:[connection2 operation]];
+ [[connection2 operation] addDependency:[connection3 operation]];
+}
+
+- (IBAction)test6:(id)sender
+{
+ results = @[];
+ queue = [[CPOperationQueue alloc] init];
+ [testField setStringValue:@"Waiting for response ..."];
+
+ var request = [CPURLRequest requestWithURL:"dummy"],
+ connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES],
+ connection2 = [self startAsyncConnection:2 request:request isLast:NO],
+ connection3 = [self startAsyncConnection:3 request:request isLast:NO];
+
+ [[connection1 operation] addDependency:[connection2 operation]];
+ [[connection2 operation] addDependency:[connection3 operation]];
+}
+
+- (IBAction)test7:(id)sender
+{
+ results = @[];
+ queue = [[CPOperationQueue alloc] init];
+
+ var resourcePath = [[CPBundle mainBundle] resourcePath],
+ url = [CPURL URLWithString:[CPString stringWithFormat:@"%@delayed.php?sleep=%@&status=%@", resourcePath, 10, 200]],
+ timeoutrequest = [CPURLRequest requestWithURL:url cachePolicy:CPURLRequestUseProtocolCachePolicy timeoutInterval:3],
+ nourl = [CPURLRequest requestWithURL:@"nourl"];
+
+ [testField setStringValue:@"Waiting for response ..."];
+
+ var connection1 = [self startAsyncConnection:1 responseStatus:200 delay:1 isLast:YES],
+ connection2 = [self startAsyncConnection:2 request:nourl isLast:NO],
+ connection3 = [self startAsyncConnection:3 request:timeoutrequest isLast:NO];
+
+ [[connection1 operation] addDependency:[connection2 operation]];
+ [[connection2 operation] addDependency:[connection3 operation]];
+}
+
+- (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.
+
+ // In this case, we want the window from Cib to become our full browser window
+ [theWindow setFullPlatformWindow:YES];
+}
+
+@end
\ No newline at end of file
diff --git a/Tests/Manual/Issue-1357-fix/Info.plist b/Tests/Manual/CPURLConnectionAsyncTest/Info.plist
similarity index 52%
rename from Tests/Manual/Issue-1357-fix/Info.plist
rename to Tests/Manual/CPURLConnectionAsyncTest/Info.plist
index 55e6ab70e..8abee9439 100644
--- a/Tests/Manual/Issue-1357-fix/Info.plist
+++ b/Tests/Manual/CPURLConnectionAsyncTest/Info.plist
@@ -2,11 +2,9 @@
- CPApplicationDelegateClass
- AppController
+ Main cib file base name
+ MainMenu.cib
CPBundleName
- CPViewNoDisplayAfterHidingAndResizeBug
- CPPrincipalClass
- CPApplication
+ CPURLConnectionAsyncTest
diff --git a/Tests/Manual/Issue-1357-fix/Jakefile b/Tests/Manual/CPURLConnectionAsyncTest/Jakefile
similarity index 51%
rename from Tests/Manual/Issue-1357-fix/Jakefile
rename to Tests/Manual/CPURLConnectionAsyncTest/Jakefile
index bb12b2e12..8012b7016 100644
--- a/Tests/Manual/Issue-1357-fix/Jakefile
+++ b/Tests/Manual/CPURLConnectionAsyncTest/Jakefile
@@ -1,9 +1,9 @@
/*
* Jakefile
- * CPViewNoDisplayAfterHidingAndResizeBug
+ * CPURLConnectionAsyncTest
*
- * Created by You on February 24, 2013.
- * Copyright 2013, Your Company All rights reserved.
+ * Created by You on February 1, 2012.
+ * Copyright 2012, Your Company All rights reserved.
*/
var ENV = require("system").env,
@@ -15,21 +15,22 @@ var ENV = require("system").env,
configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug",
OS = require("os");
-app ("CPViewNoDisplayAfterHidingAndResizeBug", function(task)
+app ("CPURLConnectionAsyncTest", function(task)
{
- task.setBuildIntermediatesPath(FILE.join("Build", "CPViewNoDisplayAfterHidingAndResizeBug.build", configuration));
+ task.setBuildIntermediatesPath(FILE.join("Build", "CPURLConnectionAsyncTest.build", configuration));
task.setBuildPath(FILE.join("Build", configuration));
- task.setProductName("CPViewNoDisplayAfterHidingAndResizeBug");
- task.setIdentifier("com.yourcompany.CPViewNoDisplayAfterHidingAndResizeBug");
+ task.setProductName("CPURLConnectionAsyncTest");
+ task.setIdentifier("com.yourcompany.CPURLConnectionAsyncTest");
task.setVersion("1.0");
task.setAuthor("Your Company");
task.setEmail("feedback @nospam@ yourcompany.com");
- task.setSummary("CPViewNoDisplayAfterHidingAndResizeBug");
+ task.setSummary("CPURLConnectionAsyncTest");
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");
@@ -37,7 +38,7 @@ app ("CPViewNoDisplayAfterHidingAndResizeBug", function(task)
task.setCompilerFlags("-O");
});
-task ("default", ["CPViewNoDisplayAfterHidingAndResizeBug"], function()
+task ("default", ["CPURLConnectionAsyncTest"], function()
{
printResults(configuration);
});
@@ -58,36 +59,36 @@ task ("release", function()
task ("run", ["debug"], function()
{
- OS.system(["open", FILE.join("Build", "Debug", "CPViewNoDisplayAfterHidingAndResizeBug", "index.html")]);
+ OS.system(["open", FILE.join("Build", "Debug", "CPURLConnectionAsyncTest", "index.html")]);
});
task ("run-release", ["release"], function()
{
- OS.system(["open", FILE.join("Build", "Release", "CPViewNoDisplayAfterHidingAndResizeBug", "index.html")]);
+ OS.system(["open", FILE.join("Build", "Release", "CPURLConnectionAsyncTest", "index.html")]);
});
task ("deploy", ["release"], function()
{
- FILE.mkdirs(FILE.join("Build", "Deployment", "CPViewNoDisplayAfterHidingAndResizeBug"));
- OS.system(["press", "-f", FILE.join("Build", "Release", "CPViewNoDisplayAfterHidingAndResizeBug"), FILE.join("Build", "Deployment", "CPViewNoDisplayAfterHidingAndResizeBug")]);
+ FILE.mkdirs(FILE.join("Build", "Deployment", "CPURLConnectionAsyncTest"));
+ OS.system(["press", "-f", FILE.join("Build", "Release", "CPURLConnectionAsyncTest"), FILE.join("Build", "Deployment", "CPURLConnectionAsyncTest")]);
printResults("Deployment")
});
task ("desktop", ["release"], function()
{
- FILE.mkdirs(FILE.join("Build", "Desktop", "CPViewNoDisplayAfterHidingAndResizeBug"));
- require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPViewNoDisplayAfterHidingAndResizeBug"), FILE.join("Build", "Desktop", "CPViewNoDisplayAfterHidingAndResizeBug", "CPViewNoDisplayAfterHidingAndResizeBug.app"));
+ FILE.mkdirs(FILE.join("Build", "Desktop", "CPURLConnectionAsyncTest"));
+ require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "CPURLConnectionAsyncTest"), FILE.join("Build", "Desktop", "CPURLConnectionAsyncTest", "CPURLConnectionAsyncTest.app"));
printResults("Desktop")
});
task ("run-desktop", ["desktop"], function()
{
- OS.system([FILE.join("Build", "Desktop", "CPViewNoDisplayAfterHidingAndResizeBug", "CPViewNoDisplayAfterHidingAndResizeBug.app", "Contents", "MacOS", "NativeHost"), "-i"]);
+ OS.system([FILE.join("Build", "Desktop", "CPURLConnectionAsyncTest", "CPURLConnectionAsyncTest.app", "Contents", "MacOS", "NativeHost"), "-i"]);
});
function printResults(configuration)
{
print("----------------------------");
- print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPViewNoDisplayAfterHidingAndResizeBug"));
+ print(configuration+" app built at path: "+FILE.join("Build", configuration, "CPURLConnectionAsyncTest"));
print("----------------------------");
}
diff --git a/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.cib b/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.cib
new file mode 100644
index 000000000..51021f140
--- /dev/null
+++ b/Tests/Manual/CPURLConnectionAsyncTest/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;19E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;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;26E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;41E;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;28E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;11E;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;2;42E;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;2;43E;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;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;44E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;37E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;45E;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;41E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;28E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;46E;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;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;32E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;47E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;33E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;48E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;34E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;49E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;35E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;38E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;39E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;40E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;41E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;42E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;27E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;54E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;55E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;56E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;57E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;58E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;59E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;60E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;30E;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;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;62E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;62E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;63E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;64E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;67E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;2;76E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;79E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;83E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;2;84E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;85E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;86E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;2;87E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;88E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;89E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;2;90E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;2;91E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;K;24;CPButtonPeriodicDelayKeyD;K;6;CP$UIDd;1;0E;K;27;CPButtonPeriodicIntervalKeyD;K;6;CP$UIDd;1;0E;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;36E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;92E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;93E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;94E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;95E;K;11;$aalignmentD;K;6;CP$UIDd;2;77E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;72E;K;6;$afontD;K;6;CP$UIDd;2;96E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;82E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;66E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;66E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;66E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;98E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;72E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;77E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;66E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;66E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;82E;E;D;K;6;$classD;K;6;CP$UIDd;2;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;99E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;3;100E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;101E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;102E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;3;103E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;104E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;31E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;30E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;61E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;105E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;68E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;30E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;69E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;70E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;71E;K;11;$aalignmentD;K;6;CP$UIDd;2;72E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;61E;K;6;$afontD;K;6;CP$UIDd;2;74E;K;7;$aimageD;K;6;CP$UIDd;3;106E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;65E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;65E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;66E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;61E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;77E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;61E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;78E;K;16;CPButtonTitleKeyD;K;6;CP$UIDd;3;107E;K;25;CPButtonAlternateTitleKeyD;K;6;CP$UIDd;2;80E;K;27;CPButtonAllowsMixedStateKeyD;K;6;CP$UIDd;2;66E;K;23;CPButtonHighlightsByKeyD;K;6;CP$UIDd;2;81E;K;23;CPButtonShowsStateByKeyD;K;6;CP$UIDd;2;61E;K;32;CPButtonImageDimsWhenDisabledKeyD;K;6;CP$UIDd;2;82E;K;24;CPButtonImagePositionKeyD;K;6;CP$UIDd;2;72E;K;28;CPButtonKeyEquivalentMaskKeyD;K;6;CP$UIDd;2;61E;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;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;108E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;28E;E;E;S;8;delegateS;9;testFieldS;9;theWindowS;6;test1:S;6;test2:S;6;test3:S;6;test4:S;6;test5:S;6;test6:S;6;test7:S;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1879048192S;24;{{335, 171}, {934, 466}}S;22;{{0, 0}, {1680, 1027}}d;1;7S;6;Windowd;1;0S;20;{{0, 0}, {934, 466}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;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;E;E;S;6;normalS;6;{1, 1}F;S;20;{{23, 20}, {65, 25}}S;18;{{0, 0}, {65, 25}}d;2;36S;6;buttonS;27;bordered+controlSizeRegulard;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;73E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;109E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;110E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;66E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;d;1;4d;2;-1S;6;Test 1S;0;d;2;14T;S;20;{{23, 53}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 2S;20;{{23, 86}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 3S;21;{{23, 119}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 4S;22;{{136, 22}, {308, 17}}S;19;{{0, 0}, {308, 17}}S;9;textfieldS;30;controlSizeRegular+placeholderD;K;6;$classD;K;6;CP$UIDd;2;73E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;109E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;110E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;82E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;66E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;97E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;114E;E;S;21;{{23, 152}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 5S;21;{{23, 185}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 6S;21;{{23, 217}, {65, 25}}D;K;6;$classD;K;6;CP$UIDd;2;75E;K;4;nameD;K;6;CP$UIDd;3;111E;K;12;defaultValueD;K;6;CP$UIDd;1;0E;K;5;stateD;K;6;CP$UIDd;3;112E;K;5;valueD;K;6;CP$UIDd;3;113E;E;S;6;Test 7S;13;AppControllerS;29;.Helvetica Neue DeskInterfaced;2;13S;5;imageS;11;highlightedD;K;6;$classD;K;6;CP$UIDd;2;73E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;109E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;110E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;66E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;66E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;115E;D;K;6;CP$UIDd;3;116E;E;E;f;18;0.6862745098039216d;1;1E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;
\ No newline at end of file
diff --git a/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.xib b/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.xib
new file mode 100644
index 000000000..e00e18294
--- /dev/null
+++ b/Tests/Manual/CPURLConnectionAsyncTest/Resources/MainMenu.xib
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/CPURLConnectionAsyncTest/Resources/delayed.php b/Tests/Manual/CPURLConnectionAsyncTest/Resources/delayed.php
new file mode 100755
index 000000000..b8bffe20a
--- /dev/null
+++ b/Tests/Manual/CPURLConnectionAsyncTest/Resources/delayed.php
@@ -0,0 +1,17 @@
+
\ No newline at end of file
diff --git a/Tests/Manual/CPURLConnectionAsyncTest/Resources/spinner.gif b/Tests/Manual/CPURLConnectionAsyncTest/Resources/spinner.gif
new file mode 100644
index 000000000..06dbc2bc2
Binary files /dev/null and b/Tests/Manual/CPURLConnectionAsyncTest/Resources/spinner.gif differ
diff --git a/Tests/Manual/Issue-1357-fix/index-debug.html b/Tests/Manual/CPURLConnectionAsyncTest/index-debug.html
similarity index 78%
rename from Tests/Manual/Issue-1357-fix/index-debug.html
rename to Tests/Manual/CPURLConnectionAsyncTest/index-debug.html
index 636db06c8..a441ea9b2 100644
--- a/Tests/Manual/Issue-1357-fix/index-debug.html
+++ b/Tests/Manual/CPURLConnectionAsyncTest/index-debug.html
@@ -1,38 +1,33 @@
-
-
+
+
-
+
-
-
+
-
+
+
-
-
+
+
-
-
-
- CPViewNoDisplayAfterHidingAndResizeBug
+ CPURLConnectionAsyncTest
-
+
+
+
+
+
+
+
diff --git a/Tests/Manual/TrackingArea/index.html b/Tests/Manual/TrackingArea/index.html
new file mode 100644
index 000000000..cc1a78e03
--- /dev/null
+++ b/Tests/Manual/TrackingArea/index.html
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TrackingArea
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/Manual/TrackingArea/main.j b/Tests/Manual/TrackingArea/main.j
new file mode 100644
index 000000000..4cbeeb386
--- /dev/null
+++ b/Tests/Manual/TrackingArea/main.j
@@ -0,0 +1,18 @@
+/*
+ * AppController.j
+ * TrackingArea
+ *
+ * Created by You on November 2, 2015.
+ * Copyright 2015, Your Company All rights reserved.
+ */
+
+@import
+@import
+
+@import "AppController.j"
+
+
+function main(args, namedArgs)
+{
+ CPApplicationMain(args, namedArgs);
+}
diff --git a/Tests/Objective-J/Preprocessor/BehaviorTests/MethodTest.j b/Tests/Objective-J/Preprocessor/BehaviorTests/MethodTest.j
index 99aef883b..7df299459 100644
--- a/Tests/Objective-J/Preprocessor/BehaviorTests/MethodTest.j
+++ b/Tests/Objective-J/Preprocessor/BehaviorTests/MethodTest.j
@@ -80,4 +80,59 @@
[self assert:-6 equals:[testClass void:10 in:4]];
}
+- (void)testMethodName
+{
+ var method = class_getInstanceMethod(MathClass, @selector(sqrt:));
+
+ [self assert:method_getName(method) equals:@"sqrt:"];
+}
+
+- (void)testMethodNoOfArguments
+{
+ var method = class_getInstanceMethod(MathClass, @selector(five));
+
+ [self assert:method_getNumberOfArguments(method) equals:2];
+
+ method = class_getInstanceMethod(MathClass, @selector(multiply:));
+ [self assert:method_getNumberOfArguments(method) equals:3];
+
+ method = class_getInstanceMethod(MathClass, @selector(multiply:with:));
+ [self assert:method_getNumberOfArguments(method) equals:4];
+}
+
+- (void)testMethodTypes
+{
+ var theClass = objj_allocateClassPair(CPObject, RAND() + "");
+
+ objj_registerClassPair(theClass);
+ class_addMethod(theClass, @"myMethod:", function() { }, ["void", "CPNumber"]);
+ class_addMethod(theClass, @"myMethod2:", function() { }, ["int", "float"]);
+ class_addMethod(theClass, @"myMethod3:", function() { });
+ [theClass new];
+
+ var method = class_getInstanceMethod(theClass, @selector(myMethod:));
+
+ [self assert:method_copyReturnType(method) equals:@"void" message:@"Return type of method 'myMethod:'"];
+ [self assert:method_copyArgumentType(method, 0) equals:@"id"];
+ [self assert:method_copyArgumentType(method, 1) equals:@"SEL"];
+ [self assert:method_copyArgumentType(method, 2) equals:@"CPNumber"];
+ [self assertTrue:method_copyArgumentType(method, 3) === nil];
+ [self assert:method_getNumberOfArguments(method) equals:3];
+
+ method = class_getInstanceMethod(theClass, @selector(myMethod2:));
+ [self assert:method_copyReturnType(method) equals:@"int" message:@"Return type of method 'myMethod2:'"];
+ [self assert:method_copyArgumentType(method, 0) equals:@"id"];
+ [self assert:method_copyArgumentType(method, 1) equals:@"SEL"];
+ [self assert:method_copyArgumentType(method, 2) equals:@"float"];
+ [self assertTrue:method_copyArgumentType(method, 3) === nil];
+ [self assert:method_getNumberOfArguments(method) equals:3];
+
+ method = class_getInstanceMethod(theClass, @selector(myMethod3:));
+ [self assertTrue:method_copyReturnType(method) == nil];
+ [self assert:method_copyArgumentType(method, 0) equals:@"id"];
+ [self assert:method_copyArgumentType(method, 1) equals:@"SEL"];
+ [self assertTrue:method_copyArgumentType(method, 2) === nil];
+ [self assert:method_getNumberOfArguments(method) equals:3];
+}
+
@end
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js
index ae78cbb53..faa0a5474 100644
--- a/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/accessors.js
@@ -5,7 +5,7 @@ if(!the_class){
throw new SyntaxError("*** Could not find definition for class \"TestClass\"");
}
var meta_class=the_class.isa;
-class_addIvars(the_class,[new objj_ivar("ivar")]);
+class_addIvars(the_class,[new objj_ivar("ivar","Type")]);
class_addMethods(the_class,[new objj_method(sel_getUid("ivar"),function $TestClass__ivar(_1,_2){
return _1.ivar;
},["Type"]),new objj_method(sel_getUid("setIvar:"),function $TestClass__setIvar_(_3,_4,_5){
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js
index 8cf16dc3b..622661139 100644
--- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-multiple-ivars.js
@@ -1,6 +1,6 @@
var the_class = objj_allocateClassPair(Nil, "TestClass"),
meta_class = the_class.isa;
-class_addIvars(the_class,[new objj_ivar("ivar"), new objj_ivar("array"), new objj_ivar("string"), new objj_ivar("integer")]);
+class_addIvars(the_class,[new objj_ivar("ivar","Type"), new objj_ivar("array","CPArray"), new objj_ivar("string","CPString"), new objj_ivar("integer","int")]);
objj_registerClassPair(the_class);
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js
index 165c23dc8..a0327a8c8 100644
--- a/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Class/root-class-one-ivar.js
@@ -2,6 +2,6 @@
var the_class = objj_allocateClassPair(Nil, "TestClass"),
meta_class = the_class.isa;
-class_addIvars(the_class,[new objj_ivar("ivar")]);
+class_addIvars(the_class,[new objj_ivar("ivar","Type")]);
objj_registerClassPair(the_class);
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector-inlined.js
new file mode 100644
index 000000000..bae53d471
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/colon-selector-inlined.js
@@ -0,0 +1,2 @@
+
+(object==null?null:(object.isa.method_msgSend[":"]||_objj_forward)(object,":",argument));
\ No newline at end of file
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver-inlined.js
new file mode 100644
index 000000000..b629b2a0b
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/complex-receiver-inlined.js
@@ -0,0 +1,2 @@
+var a=0;
+((___r1=a++<2?small_target:big_target),___r1==null?null:(___r1.isa.method_msgSend["doStuff"]||_objj_forward)(___r1,"doStuff"));
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector-inlined.js
new file mode 100644
index 000000000..fe6d6d930
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/keyword-in-selector-inlined.js
@@ -0,0 +1 @@
+(object==null?null:(object.isa.method_msgSend["for:in:nil:"]||_objj_forward)(object,"for:in:nil:",a,b,nil));
\ No newline at end of file
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters-inlined.js
new file mode 100644
index 000000000..a28089dda
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/multiple-parameters-inlined.js
@@ -0,0 +1,2 @@
+
+(object==null?null:(object.isa.method_msgSend["label:label2:label3:label4:"]||_objj_forward)(object,"label:label2:label3:label4:",argument,argument2,argument3,argument4));
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters-inlined.js
new file mode 100644
index 000000000..50c8b1a87
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/no-parameters-inlined.js
@@ -0,0 +1,2 @@
+(CPArray.isa.method_msgSend["new"]||_objj_forward)(CPArray,"new");
+(object==null?null:(object.isa.method_msgSend["message"]||_objj_forward)(object,"message"));
\ No newline at end of file
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter-inlined.js
new file mode 100644
index 000000000..970155db6
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/one-parameter-inlined.js
@@ -0,0 +1,2 @@
+(CPArray.isa.method_msgSend["arrayWithArray:"]||_objj_forward)(CPArray,"arrayWithArray:",[]);
+(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",argument));
\ No newline at end of file
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver-inlined.js
new file mode 100644
index 000000000..1235ab1bc
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/self-as-receiver-inlined.js
@@ -0,0 +1,11 @@
+var the_class=objj_allocateClassPair(Nil,"MyClass"),meta_class=the_class.isa;
+objj_registerClassPair(the_class);
+class_addMethods(the_class,[new objj_method(sel_getUid("mySelector"),function $MyClass__mySelector(_1,_2){
+(_1.isa.method_msgSend["init"]||_objj_forward)(_1,"init");
+_1=nil;
+(_1==null?null:(_1.isa.method_msgSend["init"]||_objj_forward)(_1,"init"));
+},["id"]),new objj_method(sel_getUid("mySelector2"),function $MyClass__mySelector2(_3,_4){
+(_3.isa.method_msgSend["init"]||_objj_forward)(_3,"init");
+eval("self = null;");
+(_3==null?null:(_3.isa.method_msgSend["init"]||_objj_forward)(_3,"init"));
+},["id"])]);
\ No newline at end of file
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument-inlined.js
new file mode 100644
index 000000000..e3159dd7c
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Messages/ternary-operator-argument-inlined.js
@@ -0,0 +1,4 @@
+
+(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
+(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
+(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return-inlined.js b/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return-inlined.js
new file mode 100644
index 000000000..523b97db5
--- /dev/null
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Misc/parenthesis-return-inlined.js
@@ -0,0 +1,3 @@
+x=function(){
+return (someIval==null?null:(someIval.isa.method_msgSend["someMethod"]||_objj_forward)(someIval,"someMethod"));
+};
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js b/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js
index 778d931d6..b73f3c35f 100644
--- a/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js
+++ b/Tests/Objective-J/Preprocessor/OutputTests/Misc/ref-self.js
@@ -1,5 +1,5 @@
{var the_class = objj_allocateClassPair(Nil, "TC"),
-meta_class = the_class.isa;class_addIvars(the_class, [new objj_ivar("_control")]);objj_registerClassPair(the_class);
+meta_class = the_class.isa;class_addIvars(the_class, [new objj_ivar("_control","id")]);objj_registerClassPair(the_class);
class_addMethods(the_class, [new objj_method(sel_getUid("a"), function $TC__a(self, _cmd)
{
function(__input) { if (arguments.length) return self._control = __input; return self._control; };
diff --git a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j
index fcd96ba3c..34150d7f2 100644
--- a/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j
+++ b/Tests/Objective-J/Preprocessor/OutputTests/OutputTest.j
@@ -43,18 +43,28 @@ var FILENAMES = [
class_addMethod(self, testSelector, function(self, _cmd)
{
- var filePath = FILE.join(FILE.dirname(module.path), filename + ".j"),
+ var d = FILE.dirname(module.path),
+ filePath = FILE.join(d, filename + ".j"),
unpreprocessed = FILE.read(filePath, { charset:"UTF-8" }),
preprocessed,
- correct = FILE.read(FILE.join(FILE.dirname(module.path), filename + ".js"));
+ preprocessedInlined,
+ correct = FILE.read(FILE.join(d, filename + ".js")),
+ p = FILE.join(d, filename + "-inlined.js"),
+ correctInlined = FILE.exists(p) ? FILE.read(p) : correct; // Get inlined version if it exists. Otherwise use the regular one.
[self assertNoThrow:function() {
- preprocessed = ObjectiveJ.ObjJAcornCompiler.compileToExecutable(unpreprocessed).code();
+ preprocessed = ObjectiveJ.ObjJAcornCompiler.compileToExecutable(unpreprocessed, nil, ObjectiveJ.ObjJAcornCompiler.Flags.IncludeDebugSymbols | ObjectiveJ.ObjJAcornCompiler.Flags.IncludeTypeSignatures).code();
preprocessed = compressor.compress(preprocessed, { charset : "UTF-8", useServer : true });
correct = compressor.compress(correct, { charset : "UTF-8", useServer : true });
+
+ // Get an Inlined version
+ preprocessedInlined = ObjectiveJ.ObjJAcornCompiler.compileToExecutable(unpreprocessed, nil, ObjectiveJ.ObjJAcornCompiler.Flags.IncludeDebugSymbols | ObjectiveJ.ObjJAcornCompiler.Flags.InlineMsgSend | ObjectiveJ.ObjJAcornCompiler.Flags.IncludeTypeSignatures).code();
+ preprocessedInlined = compressor.compress(preprocessedInlined, { charset : "UTF-8", useServer : true });
+ correctInlined = compressor.compress(correctInlined, { charset : "UTF-8", useServer : true });
}];
[self assert:correct equals:preprocessed];
+ [self assert:correctInlined equals:preprocessedInlined];
});
})();
}
diff --git a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj
index 2783085e1..350946963 100644
--- a/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj
+++ b/Tools/XcodeCapp/XcodeCapp.xcodeproj/project.pbxproj
@@ -29,12 +29,8 @@
6824CDF01B0E9F1400F73447 /* XCCOperationError.m in Sources */ = {isa = PBXBuildFile; fileRef = 6824CDEF1B0E9F1400F73447 /* XCCOperationError.m */; };
6841F2441AF98CE600CFE60E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2431AF98CE600CFE60E /* main.m */; };
6841F2461AF98CE600CFE60E /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6841F2451AF98CE600CFE60E /* Images.xcassets */; };
- 6841F2651AF98DCB00CFE60E /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2601AF98DCB00CFE60E /* DDASLLogger.m */; };
- 6841F2661AF98DCB00CFE60E /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2621AF98DCB00CFE60E /* DDLog.m */; };
- 6841F2671AF98DCB00CFE60E /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2641AF98DCB00CFE60E /* DDTTYLogger.m */; };
6841F26C1AF98DDD00CFE60E /* mod_pbxproj.py in Resources */ = {isa = PBXBuildFile; fileRef = 6841F2691AF98DDD00CFE60E /* mod_pbxproj.py */; };
6841F26E1AF98DDD00CFE60E /* pbxprojModifier.py in Resources */ = {isa = PBXBuildFile; fileRef = 6841F26B1AF98DDD00CFE60E /* pbxprojModifier.py */; };
- 6841F2781AF98FA300CFE60E /* DDLogLevel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6841F2771AF98FA300CFE60E /* DDLogLevel.m */; };
6841F27C1AF990C300CFE60E /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 6841F27A1AF990C300CFE60E /* Debug.xcconfig */; };
6841F27D1AF990C300CFE60E /* Release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 6841F27B1AF990C300CFE60E /* Release.xcconfig */; };
6841F2A51AF9932300CFE60E /* project.pbxproj in Resources */ = {isa = PBXBuildFile; fileRef = 6841F28A1AF9932300CFE60E /* project.pbxproj */; };
@@ -89,17 +85,9 @@
6841F2401AF98CE600CFE60E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
6841F2431AF98CE600CFE60E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
6841F2451AF98CE600CFE60E /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ../Images.xcassets; sourceTree = ""; };
- 6841F25F1AF98DCB00CFE60E /* DDASLLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDASLLogger.h; sourceTree = ""; };
- 6841F2601AF98DCB00CFE60E /* DDASLLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDASLLogger.m; sourceTree = ""; };
- 6841F2611AF98DCB00CFE60E /* DDLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLog.h; sourceTree = ""; };
- 6841F2621AF98DCB00CFE60E /* DDLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLog.m; sourceTree = ""; };
- 6841F2631AF98DCB00CFE60E /* DDTTYLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTTYLogger.h; sourceTree = ""; };
- 6841F2641AF98DCB00CFE60E /* DDTTYLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTTYLogger.m; sourceTree = ""; };
6841F2691AF98DDD00CFE60E /* mod_pbxproj.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = mod_pbxproj.py; sourceTree = ""; };
6841F26B1AF98DDD00CFE60E /* pbxprojModifier.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = pbxprojModifier.py; sourceTree = ""; };
6841F2741AF98F6F00CFE60E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
- 6841F2761AF98FA300CFE60E /* DDLogLevel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDLogLevel.h; sourceTree = ""; };
- 6841F2771AF98FA300CFE60E /* DDLogLevel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDLogLevel.m; sourceTree = ""; };
6841F2791AF9902B00CFE60E /* XcodeCapp-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "XcodeCapp-Prefix.pch"; sourceTree = ""; };
6841F27A1AF990C300CFE60E /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
6841F27B1AF990C300CFE60E /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
@@ -150,7 +138,6 @@
isa = PBXGroup;
children = (
0275390E1B227D6700F6D824 /* YRKSpinningProgressIndicator */,
- 6841F25E1AF98DCB00CFE60E /* Lumberjack */,
);
name = Externals;
sourceTree = "";
@@ -246,19 +233,6 @@
name = "Supporting Files";
sourceTree = "";
};
- 6841F25E1AF98DCB00CFE60E /* Lumberjack */ = {
- isa = PBXGroup;
- children = (
- 6841F25F1AF98DCB00CFE60E /* DDASLLogger.h */,
- 6841F2601AF98DCB00CFE60E /* DDASLLogger.m */,
- 6841F2611AF98DCB00CFE60E /* DDLog.h */,
- 6841F2621AF98DCB00CFE60E /* DDLog.m */,
- 6841F2631AF98DCB00CFE60E /* DDTTYLogger.h */,
- 6841F2641AF98DCB00CFE60E /* DDTTYLogger.m */,
- );
- path = Lumberjack;
- sourceTree = "";
- };
6841F2681AF98DDD00CFE60E /* Scripts */ = {
isa = PBXGroup;
children = (
@@ -287,8 +261,6 @@
6841F2B81AFA83E900CFE60E /* XCCUserDefaults.h */,
6841F2BD1AFA965300CFE60E /* XCCTaskLauncher.h */,
6841F2BE1AFA965300CFE60E /* XCCTaskLauncher.m */,
- 6841F2761AF98FA300CFE60E /* DDLogLevel.h */,
- 6841F2771AF98FA300CFE60E /* DDLogLevel.m */,
6815BBE91AFC24430030D8BB /* XcodeProjectCloser.h */,
6815BBEA1AFC24430030D8BB /* XcodeProjectCloser.m */,
6863FBA11AFD55A900040C8E /* XCCFSEventLogUtils.h */,
@@ -409,7 +381,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 6841F2781AF98FA300CFE60E /* DDLogLevel.m in Sources */,
68B6BF321B1E2546003B265B /* XCCPPXOperation.m in Sources */,
021B94701B20E31F00F12DDA /* XCCSettingsViewController.m in Sources */,
0255B8401B1F71FB000CA4BC /* AppDelegate.m in Sources */,
@@ -417,7 +388,6 @@
6841F2BF1AFA965300CFE60E /* XCCTaskLauncher.m in Sources */,
027539111B227D7500F6D824 /* YRKSpinningProgressIndicator.m in Sources */,
6841F2C41AFABD7200CFE60E /* XCCCappuccinoProject.m in Sources */,
- 6841F2661AF98DCB00CFE60E /* DDLog.m in Sources */,
686ACD311B16397F0089EB03 /* XCCCappuccinoProjectController.m in Sources */,
021B946C1B20D71200F12DDA /* XCCErrorsViewController.m in Sources */,
021B94651B20CECA00F12DDA /* XCCOperationsViewController.m in Sources */,
@@ -430,12 +400,10 @@
686C69711B0FAE620095BB3C /* XCCOperationErrorHeaderDataView.m in Sources */,
6824CDF01B0E9F1400F73447 /* XCCOperationError.m in Sources */,
021B94751B21112500F12DDA /* XCCWelcomeView.m in Sources */,
- 6841F2671AF98DCB00CFE60E /* DDTTYLogger.m in Sources */,
6841F2441AF98CE600CFE60E /* main.m in Sources */,
6824CDDA1B0D5AA700F73447 /* XCCOperationDataView.m in Sources */,
6841F2CA1AFADEBC00CFE60E /* XCCSourcesFinderOperation.m in Sources */,
681ADE8F1B0D032C00FC8E08 /* XCCPath.m in Sources */,
- 6841F2651AF98DCB00CFE60E /* DDASLLogger.m in Sources */,
6841F2B71AFA83D500CFE60E /* XCCUserDefaults.m in Sources */,
6824CDEA1B0E9CDB00F73447 /* XCCOperationErrorDataView.m in Sources */,
);
diff --git a/Tools/XcodeCapp/XcodeCapp/AppDelegate.m b/Tools/XcodeCapp/XcodeCapp/AppDelegate.m
index cc53ac681..e405bbfd1 100644
--- a/Tools/XcodeCapp/XcodeCapp/AppDelegate.m
+++ b/Tools/XcodeCapp/XcodeCapp/AppDelegate.m
@@ -19,7 +19,6 @@
{
NSDictionary *appDefaults = @{
XCCUserDefaultsAutoOpenXcodeProject: @YES,
- XCCUserDefaultsLogLevel: @LOG_LEVEL_WARN,
XCCUserDefaultsMaxNumberOfConcurrentOperations: @20
};
@@ -40,26 +39,6 @@
self->statusItem.length = self->imageStatusInactive.size.width + 12;
}
-- (void)_initLogging
-{
-#if DEBUG
- [DDLog addLogger:[DDTTYLogger sharedInstance]];
- [[DDTTYLogger sharedInstance] setColorsEnabled:YES];
- [DDLogLevel setLogLevel:LOG_LEVEL_VERBOSE];
-#else
- [DDLog addLogger:[DDASLLogger sharedInstance]];
-
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- int logLevel = (int)[defaults integerForKey:XCCUserDefaultsLogLevel];
- NSUInteger modifiers = [NSEvent modifierFlags];
-
- if (modifiers & NSAlternateKeyMask)
- logLevel = LOG_LEVEL_VERBOSE;
-
- [DDLogLevel setLogLevel:logLevel];
-#endif
-}
-
- (void)_initOperationQueue
{
self.mainOperationQueue = [NSOperationQueue new];
@@ -116,12 +95,11 @@
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
- DDLogVerbose(@"\n******************************\n** XcodeCapp started **\n******************************\n");
+ NSLog(@"\n******************************\n** XcodeCapp started **\n******************************\n");
self.version = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"];
[self _initUserDefaults];
- [self _initLogging];
[self _initOperationQueue];
[self _initStatusItem];
@@ -132,7 +110,7 @@
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app
{
- DDLogVerbose(@"Stop listening to all projects");
+ NSLog(@"Stop listening to all projects");
[self.mainWindowController notifyCappuccinoControllersApplicationIsClosing];
[[NSUserDefaults standardUserDefaults] synchronize];
@@ -141,7 +119,7 @@
- (void)applicationWillTerminate:(NSNotification *)aNotification
{
- DDLogVerbose(@"\n******************************\n** XcodeCapp stopped **\n******************************\n");
+ NSLog(@"\n******************************\n** XcodeCapp stopped **\n******************************\n");
}
- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
diff --git a/Tools/XcodeCapp/XcodeCapp/DDLogLevel.h b/Tools/XcodeCapp/XcodeCapp/DDLogLevel.h
deleted file mode 100644
index e1c80eb82..000000000
--- a/Tools/XcodeCapp/XcodeCapp/DDLogLevel.h
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// DDLogLevel.h
-// XcodeCapp
-//
-// Created by Aparajita on 4/29/13.
-// Copyright (c) 2013 Cappuccino Project. All rights reserved.
-//
-
-#import
-
-extern int ddLogLevel;
-
-@interface DDLogLevel : NSObject
-
-+ (void)setLogLevel:(int)logLevel;
-
-@end
diff --git a/Tools/XcodeCapp/XcodeCapp/DDLogLevel.m b/Tools/XcodeCapp/XcodeCapp/DDLogLevel.m
deleted file mode 100644
index a0fb829b1..000000000
--- a/Tools/XcodeCapp/XcodeCapp/DDLogLevel.m
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// DDLog.m
-// XcodeCapp
-//
-// Created by Aparajita on 4/29/13.
-// Copyright (c) 2013 Cappuccino Project. All rights reserved.
-//
-
-#import "DDLogLevel.h"
-
-
-int ddLogLevel = LOG_LEVEL_OFF;
-
-
-@implementation DDLogLevel
-
-+ (int)ddLogLevel
-{
- return ddLogLevel;
-}
-
-+ (void)setLogLevel:(int)logLevel
-{
- ddLogLevel = logLevel;
-}
-
-@end
diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.h b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.h
deleted file mode 100755
index 0f2e9633e..000000000
--- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#import
-#import
-
-#import "DDLog.h"
-
-/**
- * Welcome to Cocoa Lumberjack!
- *
- * The project page has a wealth of documentation if you have any questions.
- * https://github.com/robbiehanson/CocoaLumberjack
- *
- * If you're new to the project you may wish to read the "Getting Started" wiki.
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
- *
- *
- * This class provides a logger for the Apple System Log facility.
- *
- * As described in the "Getting Started" page,
- * the traditional NSLog() function directs it's output to two places:
- *
- * - Apple System Log
- * - StdErr (if stderr is a TTY) so log statements show up in Xcode console
- *
- * To duplicate NSLog() functionality you can simply add this logger and a tty logger.
- * However, if you instead choose to use file logging (for faster performance),
- * you may choose to use a file logger and a tty logger.
-**/
-
-@interface DDASLLogger : DDAbstractLogger
-{
- aslclient client;
-}
-
-+ (DDASLLogger *)sharedInstance;
-
-// Inherited from DDAbstractLogger
-
-// - (id )logFormatter;
-// - (void)setLogFormatter:(id )formatter;
-
-@end
diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m
deleted file mode 100755
index 540efada1..000000000
--- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDASLLogger.m
+++ /dev/null
@@ -1,99 +0,0 @@
-#import "DDASLLogger.h"
-
-#import
-
-/**
- * Welcome to Cocoa Lumberjack!
- *
- * The project page has a wealth of documentation if you have any questions.
- * https://github.com/robbiehanson/CocoaLumberjack
- *
- * If you're new to the project you may wish to read the "Getting Started" wiki.
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
-**/
-
-#if ! __has_feature(objc_arc)
-#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-
-@implementation DDASLLogger
-
-static DDASLLogger *sharedInstance;
-
-/**
- * The runtime sends initialize to each class in a program exactly one time just before the class,
- * or any class that inherits from it, is sent its first message from within the program. (Thus the
- * method may never be invoked if the class is not used.) The runtime sends the initialize message to
- * classes in a thread-safe manner. Superclasses receive this message before their subclasses.
- *
- * This method may also be called directly (assumably by accident), hence the safety mechanism.
-**/
-+ (void)initialize
-{
- static BOOL initialized = NO;
- if (!initialized)
- {
- initialized = YES;
-
- sharedInstance = [[DDASLLogger alloc] init];
- }
-}
-
-+ (DDASLLogger *)sharedInstance
-{
- return sharedInstance;
-}
-
-- (instancetype)init
-{
- if (sharedInstance != nil)
- {
- return nil;
- }
-
- if ((self = [super init]))
- {
- // A default asl client is provided for the main thread,
- // but background threads need to create their own client.
-
- client = asl_open(NULL, "com.apple.console", 0);
- }
- return self;
-}
-
-- (void)logMessage:(DDLogMessage *)logMessage
-{
- NSString *logMsg = logMessage->logMsg;
-
- if (formatter)
- {
- logMsg = [formatter formatLogMessage:logMessage];
- }
-
- if (logMsg)
- {
- const char *msg = [logMsg UTF8String];
-
- int aslLogLevel;
- switch (logMessage->logLevel)
- {
- // Note: By default ASL will filter anything above level 5 (Notice).
- // So our mappings shouldn't go above that level.
-
- case 1 : aslLogLevel = ASL_LEVEL_CRIT; break;
- case 2 : aslLogLevel = ASL_LEVEL_ERR; break;
- case 3 : aslLogLevel = ASL_LEVEL_WARNING; break;
- default : aslLogLevel = ASL_LEVEL_NOTICE; break;
- }
-
- asl_log(client, NULL, aslLogLevel, "%s", msg);
- }
-}
-
-- (NSString *)loggerName
-{
- return @"cocoa.lumberjack.aslLogger";
-}
-
-@end
diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h
deleted file mode 100755
index c24a5e4e2..000000000
--- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.h
+++ /dev/null
@@ -1,596 +0,0 @@
-#import
-
-/**
- * Welcome to Cocoa Lumberjack!
- *
- * The project page has a wealth of documentation if you have any questions.
- * https://github.com/robbiehanson/CocoaLumberjack
- *
- * If you're new to the project you may wish to read the "Getting Started" wiki.
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
- *
- * Otherwise, here is a quick refresher.
- * There are three steps to using the macros:
- *
- * Step 1:
- * Import the header in your implementation file:
- *
- * #import "DDLog.h"
- *
- * Step 2:
- * Define your logging level in your implementation file:
- *
- * // Log levels: off, error, warn, info, verbose
- * static const int ddLogLevel = LOG_LEVEL_VERBOSE;
- *
- * Step 3:
- * Replace your NSLog statements with DDLog statements according to the severity of the message.
- *
- * NSLog(@"Fatal error, no dohickey found!"); -> DDLogError(@"Fatal error, no dohickey found!");
- *
- * DDLog works exactly the same as NSLog.
- * This means you can pass it multiple variables just like NSLog.
-**/
-
-
-@class DDLogMessage;
-
-@protocol DDLogger;
-@protocol DDLogFormatter;
-
-/**
- * This is the single macro that all other macros below compile into.
- * This big multiline macro makes all the other macros easier to read.
-**/
-
-#define LOG_MACRO(isAsynchronous, lvl, flg, ctx, atag, fnct, frmt, ...) \
- [DDLog log:isAsynchronous \
- level:lvl \
- flag:flg \
- context:ctx \
- file:__FILE__ \
- function:fnct \
- line:__LINE__ \
- tag:atag \
- format:(frmt), ##__VA_ARGS__]
-
-/**
- * Define the Objective-C and C versions of the macro.
- * These automatically inject the proper function name for either an objective-c method or c function.
- *
- * We also define shorthand versions for asynchronous and synchronous logging.
-**/
-
-#define LOG_OBJC_MACRO(async, lvl, flg, ctx, frmt, ...) \
- LOG_MACRO(async, lvl, flg, ctx, nil, sel_getName(_cmd), frmt, ##__VA_ARGS__)
-
-#define LOG_C_MACRO(async, lvl, flg, ctx, frmt, ...) \
- LOG_MACRO(async, lvl, flg, ctx, nil, __FUNCTION__, frmt, ##__VA_ARGS__)
-
-#define SYNC_LOG_OBJC_MACRO(lvl, flg, ctx, frmt, ...) \
- LOG_OBJC_MACRO( NO, lvl, flg, ctx, frmt, ##__VA_ARGS__)
-
-#define ASYNC_LOG_OBJC_MACRO(lvl, flg, ctx, frmt, ...) \
- LOG_OBJC_MACRO(YES, lvl, flg, ctx, frmt, ##__VA_ARGS__)
-
-#define SYNC_LOG_C_MACRO(lvl, flg, ctx, frmt, ...) \
- LOG_C_MACRO( NO, lvl, flg, ctx, frmt, ##__VA_ARGS__)
-
-#define ASYNC_LOG_C_MACRO(lvl, flg, ctx, frmt, ...) \
- LOG_C_MACRO(YES, lvl, flg, ctx, frmt, ##__VA_ARGS__)
-
-/**
- * Define version of the macro that only execute if the logLevel is above the threshold.
- * The compiled versions essentially look like this:
- *
- * if (logFlagForThisLogMsg & ddLogLevel) { execute log message }
- *
- * As shown further below, Lumberjack actually uses a bitmask as opposed to primitive log levels.
- * This allows for a great amount of flexibility and some pretty advanced fine grained logging techniques.
- *
- * Note that when compiler optimizations are enabled (as they are for your release builds),
- * the log messages above your logging threshold will automatically be compiled out.
- *
- * (If the compiler sees ddLogLevel declared as a constant, the compiler simply checks to see if the 'if' statement
- * would execute, and if not it strips it from the binary.)
- *
- * We also define shorthand versions for asynchronous and synchronous logging.
-**/
-
-#define LOG_MAYBE(async, lvl, flg, ctx, fnct, frmt, ...) \
- do { if(lvl & flg) LOG_MACRO(async, lvl, flg, ctx, nil, fnct, frmt, ##__VA_ARGS__); } while(0)
-
-#define LOG_OBJC_MAYBE(async, lvl, flg, ctx, frmt, ...) \
- LOG_MAYBE(async, lvl, flg, ctx, sel_getName(_cmd), frmt, ##__VA_ARGS__)
-
-#define LOG_C_MAYBE(async, lvl, flg, ctx, frmt, ...) \
- LOG_MAYBE(async, lvl, flg, ctx, __FUNCTION__, frmt, ##__VA_ARGS__)
-
-#define SYNC_LOG_OBJC_MAYBE(lvl, flg, ctx, frmt, ...) \
- LOG_OBJC_MAYBE( NO, lvl, flg, ctx, frmt, ##__VA_ARGS__)
-
-#define ASYNC_LOG_OBJC_MAYBE(lvl, flg, ctx, frmt, ...) \
- LOG_OBJC_MAYBE(YES, lvl, flg, ctx, frmt, ##__VA_ARGS__)
-
-#define SYNC_LOG_C_MAYBE(lvl, flg, ctx, frmt, ...) \
- LOG_C_MAYBE( NO, lvl, flg, ctx, frmt, ##__VA_ARGS__)
-
-#define ASYNC_LOG_C_MAYBE(lvl, flg, ctx, frmt, ...) \
- LOG_C_MAYBE(YES, lvl, flg, ctx, frmt, ##__VA_ARGS__)
-
-/**
- * Define versions of the macros that also accept tags.
- *
- * The DDLogMessage object includes a 'tag' ivar that may be used for a variety of purposes.
- * It may be used to pass custom information to loggers or formatters.
- * Or it may be used by 3rd party extensions to the framework.
- *
- * Thes macros just make it a little easier to extend logging functionality.
-**/
-
-#define LOG_OBJC_TAG_MACRO(async, lvl, flg, ctx, tag, frmt, ...) \
- LOG_MACRO(async, lvl, flg, ctx, tag, sel_getName(_cmd), frmt, ##__VA_ARGS__)
-
-#define LOG_C_TAG_MACRO(async, lvl, flg, ctx, tag, frmt, ...) \
- LOG_MACRO(async, lvl, flg, ctx, tag, __FUNCTION__, frmt, ##__VA_ARGS__)
-
-#define LOG_TAG_MAYBE(async, lvl, flg, ctx, tag, fnct, frmt, ...) \
- do { if(lvl & flg) LOG_MACRO(async, lvl, flg, ctx, tag, fnct, frmt, ##__VA_ARGS__); } while(0)
-
-#define LOG_OBJC_TAG_MAYBE(async, lvl, flg, ctx, tag, frmt, ...) \
- LOG_TAG_MAYBE(async, lvl, flg, ctx, tag, sel_getName(_cmd), frmt, ##__VA_ARGS__)
-
-#define LOG_C_TAG_MAYBE(async, lvl, flg, ctx, tag, frmt, ...) \
- LOG_TAG_MAYBE(async, lvl, flg, ctx, tag, __FUNCTION__, frmt, ##__VA_ARGS__)
-
-/**
- * Define the standard options.
- *
- * We default to only 4 levels because it makes it easier for beginners
- * to make the transition to a logging framework.
- *
- * More advanced users may choose to completely customize the levels (and level names) to suite their needs.
- * For more information on this see the "Custom Log Levels" page:
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels
- *
- * Advanced users may also notice that we're using a bitmask.
- * This is to allow for custom fine grained logging:
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/FineGrainedLogging
- *
- * -- Flags --
- *
- * Typically you will use the LOG_LEVELS (see below), but the flags may be used directly in certain situations.
- * For example, say you have a lot of warning log messages, and you wanted to disable them.
- * However, you still needed to see your error and info log messages.
- * You could accomplish that with the following:
- *
- * static const int ddLogLevel = LOG_FLAG_ERROR | LOG_FLAG_INFO;
- *
- * Flags may also be consulted when writing custom log formatters,
- * as the DDLogMessage class captures the individual flag that caused the log message to fire.
- *
- * -- Levels --
- *
- * Log levels are simply the proper bitmask of the flags.
- *
- * -- Booleans --
- *
- * The booleans may be used when your logging code involves more than one line.
- * For example:
- *
- * if (LOG_VERBOSE) {
- * for (id sprocket in sprockets)
- * DDLogVerbose(@"sprocket: %@", [sprocket description])
- * }
- *
- * -- Async --
- *
- * Defines the default asynchronous options.
- * The default philosophy for asynchronous logging is very simple:
- *
- * Log messages with errors should be executed synchronously.
- * After all, an error just occurred. The application could be unstable.
- *
- * All other log messages, such as debug output, are executed asynchronously.
- * After all, if it wasn't an error, then it was just informational output,
- * or something the application was easily able to recover from.
- *
- * -- Changes --
- *
- * You are strongly discouraged from modifying this file.
- * If you do, you make it more difficult on yourself to merge future bug fixes and improvements from the project.
- * Instead, create your own MyLogging.h or ApplicationNameLogging.h or CompanyLogging.h
- *
- * For an example of customizing your logging experience, see the "Custom Log Levels" page:
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels
-**/
-
-#define LOG_FLAG_ERROR (1 << 0) // 0...0001
-#define LOG_FLAG_WARN (1 << 1) // 0...0010
-#define LOG_FLAG_INFO (1 << 2) // 0...0100
-#define LOG_FLAG_VERBOSE (1 << 3) // 0...1000
-
-#define LOG_LEVEL_OFF 0
-#define LOG_LEVEL_ERROR (LOG_FLAG_ERROR) // 0...0001
-#define LOG_LEVEL_WARN (LOG_FLAG_ERROR | LOG_FLAG_WARN) // 0...0011
-#define LOG_LEVEL_INFO (LOG_FLAG_ERROR | LOG_FLAG_WARN | LOG_FLAG_INFO) // 0...0111
-#define LOG_LEVEL_VERBOSE (LOG_FLAG_ERROR | LOG_FLAG_WARN | LOG_FLAG_INFO | LOG_FLAG_VERBOSE) // 0...1111
-
-#define LOG_ERROR (ddLogLevel & LOG_FLAG_ERROR)
-#define LOG_WARN (ddLogLevel & LOG_FLAG_WARN)
-#define LOG_INFO (ddLogLevel & LOG_FLAG_INFO)
-#define LOG_VERBOSE (ddLogLevel & LOG_FLAG_VERBOSE)
-
-#define LOG_ASYNC_ENABLED YES
-
-#define LOG_ASYNC_ERROR ( NO && LOG_ASYNC_ENABLED)
-#define LOG_ASYNC_WARN (YES && LOG_ASYNC_ENABLED)
-#define LOG_ASYNC_INFO (YES && LOG_ASYNC_ENABLED)
-#define LOG_ASYNC_VERBOSE (YES && LOG_ASYNC_ENABLED)
-
-#define DDLogError(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_ERROR, ddLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__)
-#define DDLogWarn(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_WARN, ddLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__)
-#define DDLogInfo(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_INFO, ddLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__)
-#define DDLogVerbose(frmt, ...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE, ddLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__)
-
-#define DDLogCError(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_ERROR, ddLogLevel, LOG_FLAG_ERROR, 0, frmt, ##__VA_ARGS__)
-#define DDLogCWarn(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_WARN, ddLogLevel, LOG_FLAG_WARN, 0, frmt, ##__VA_ARGS__)
-#define DDLogCInfo(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_INFO, ddLogLevel, LOG_FLAG_INFO, 0, frmt, ##__VA_ARGS__)
-#define DDLogCVerbose(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_VERBOSE, ddLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__)
-
-/**
- * The THIS_FILE macro gives you an NSString of the file name.
- * For simplicity and clarity, the file name does not include the full path or file extension.
- *
- * For example: DDLogWarn(@"%@: Unable to find thingy", THIS_FILE) -> @"MyViewController: Unable to find thingy"
-**/
-
-NSString *DDExtractFileNameWithoutExtension(const char *filePath, BOOL copy);
-
-#define THIS_FILE (DDExtractFileNameWithoutExtension(__FILE__, NO))
-
-/**
- * The THIS_METHOD macro gives you the name of the current objective-c method.
- *
- * For example: DDLogWarn(@"%@ - Requires non-nil strings") -> @"setMake:model: requires non-nil strings"
- *
- * Note: This does NOT work in straight C functions (non objective-c).
- * Instead you should use the predefined __FUNCTION__ macro.
-**/
-
-#define THIS_METHOD NSStringFromSelector(_cmd)
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@interface DDLog : NSObject
-
-/**
- * Provides access to the underlying logging queue.
- * This may be helpful to Logger classes for things like thread synchronization.
-**/
-
-+ (dispatch_queue_t)loggingQueue;
-
-/**
- * Logging Primitive.
- *
- * This method is used by the macros above.
- * It is suggested you stick with the macros as they're easier to use.
-**/
-
-+ (void)log:(BOOL)synchronous
- level:(int)level
- flag:(int)flag
- context:(int)context
- file:(const char *)file
- function:(const char *)function
- line:(int)line
- tag:(id)tag
- format:(NSString *)format, ... __attribute__ ((format (__NSString__, 9, 10)));
-
-/**
- * Logging Primitive.
- *
- * This method can be used if you have a prepared va_list.
-**/
-
-+ (void)log:(BOOL)asynchronous
- level:(int)level
- flag:(int)flag
- context:(int)context
- file:(const char *)file
- function:(const char *)function
- line:(int)line
- tag:(id)tag
- format:(NSString *)format
- args:(va_list)argList;
-
-
-/**
- * Since logging can be asynchronous, there may be times when you want to flush the logs.
- * The framework invokes this automatically when the application quits.
-**/
-
-+ (void)flushLog;
-
-/**
- * Loggers
- *
- * If you want your log statements to go somewhere,
- * you should create and add a logger.
-**/
-
-+ (void)addLogger:(id )logger;
-+ (void)removeLogger:(id )logger;
-
-+ (void)removeAllLoggers;
-
-/**
- * Registered Dynamic Logging
- *
- * These methods allow you to obtain a list of classes that are using registered dynamic logging,
- * and also provides methods to get and set their log level during run time.
-**/
-
-+ (NSArray *)registeredClasses;
-+ (NSArray *)registeredClassNames;
-
-+ (int)logLevelForClass:(Class)aClass;
-+ (int)logLevelForClassWithName:(NSString *)aClassName;
-
-+ (void)setLogLevel:(int)logLevel forClass:(Class)aClass;
-+ (void)setLogLevel:(int)logLevel forClassWithName:(NSString *)aClassName;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@protocol DDLogger
-@required
-
-- (void)logMessage:(DDLogMessage *)logMessage;
-
-/**
- * Formatters may optionally be added to any logger.
- *
- * If no formatter is set, the logger simply logs the message as it is given in logMessage,
- * or it may use its own built in formatting style.
-**/
-- (id )logFormatter;
-- (void)setLogFormatter:(id )formatter;
-
-@optional
-
-/**
- * Since logging is asynchronous, adding and removing loggers is also asynchronous.
- * In other words, the loggers are added and removed at appropriate times with regards to log messages.
- *
- * - Loggers will not receive log messages that were executed prior to when they were added.
- * - Loggers will not receive log messages that were executed after they were removed.
- *
- * These methods are executed in the logging thread/queue.
- * This is the same thread/queue that will execute every logMessage: invocation.
- * Loggers may use these methods for thread synchronization or other setup/teardown tasks.
-**/
-- (void)didAddLogger;
-- (void)willRemoveLogger;
-
-/**
- * Some loggers may buffer IO for optimization purposes.
- * For example, a database logger may only save occasionaly as the disk IO is slow.
- * In such loggers, this method should be implemented to flush any pending IO.
- *
- * This allows invocations of DDLog's flushLog method to be propogated to loggers that need it.
- *
- * Note that DDLog's flushLog method is invoked automatically when the application quits,
- * and it may be also invoked manually by the developer prior to application crashes, or other such reasons.
-**/
-- (void)flush;
-
-/**
- * Each logger is executed concurrently with respect to the other loggers.
- * Thus, a dedicated dispatch queue is used for each logger.
- * Logger implementations may optionally choose to provide their own dispatch queue.
-**/
-- (dispatch_queue_t)loggerQueue;
-
-/**
- * If the logger implementation does not choose to provide its own queue,
- * one will automatically be created for it.
- * The created queue will receive its name from this method.
- * This may be helpful for debugging or profiling reasons.
-**/
-- (NSString *)loggerName;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@protocol DDLogFormatter
-@required
-
-/**
- * Formatters may optionally be added to any logger.
- * This allows for increased flexibility in the logging environment.
- * For example, log messages for log files may be formatted differently than log messages for the console.
- *
- * For more information about formatters, see the "Custom Formatters" page:
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters
- *
- * The formatter may also optionally filter the log message by returning nil,
- * in which case the logger will not log the message.
-**/
-- (NSString *)formatLogMessage:(DDLogMessage *)logMessage;
-
-@optional
-
-/**
- * A single formatter instance can be added to multiple loggers.
- * These methods provides hooks to notify the formatter of when it's added/removed.
- *
- * This is primarily for thread-safety.
- * If a formatter is explicitly not thread-safe, it may wish to throw an exception if added to multiple loggers.
- * Or if a formatter has potentially thread-unsafe code (e.g. NSDateFormatter),
- * it could possibly use these hooks to switch to thread-safe versions of the code.
-**/
-- (void)didAddToLogger:(id )logger;
-- (void)willRemoveFromLogger:(id )logger;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@protocol DDRegisteredDynamicLogging
-
-/**
- * Implement these methods to allow a file's log level to be managed from a central location.
- *
- * This is useful if you'd like to be able to change log levels for various parts
- * of your code from within the running application.
- *
- * Imagine pulling up the settings for your application,
- * and being able to configure the logging level on a per file basis.
- *
- * The implementation can be very straight-forward:
- *
- * + (int)ddLogLevel
- * {
- * return ddLogLevel;
- * }
- *
- * + (void)ddSetLogLevel:(int)logLevel
- * {
- * ddLogLevel = logLevel;
- * }
-**/
-
-+ (int)ddLogLevel;
-+ (void)ddSetLogLevel:(int)logLevel;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * The DDLogMessage class encapsulates information about the log message.
- * If you write custom loggers or formatters, you will be dealing with objects of this class.
-**/
-
-typedef NS_OPTIONS(NSUInteger, DDLogMessageOptions)
-{
- DDLogMessageCopyFile = 1 << 0,
- DDLogMessageCopyFunction = 1 << 1,
-};
-
-@interface DDLogMessage : NSObject
-{
-
-// The public variables below can be accessed directly (for speed).
-// For example: logMessage->logLevel
-
-@public
- int logLevel;
- int logFlag;
- int logContext;
- NSString *logMsg;
- NSDate *timestamp;
- char *file;
- char *function;
- int lineNumber;
- mach_port_t machThreadID;
- char *queueLabel;
- NSString *threadName;
-
- // For 3rd party extensions to the framework, where flags and contexts aren't enough.
- id tag;
-
- // For 3rd party extensions that manually create DDLogMessage instances.
- DDLogMessageOptions options;
-}
-
-/**
- * Standard init method for a log message object.
- * Used by the logging primitives. (And the macros use the logging primitives.)
- *
- * If you find need to manually create logMessage objects, there is one thing you should be aware of:
- *
- * If no flags are passed, the method expects the file and function parameters to be string literals.
- * That is, it expects the given strings to exist for the duration of the object's lifetime,
- * and it expects the given strings to be immutable.
- * In other words, it does not copy these strings, it simply points to them.
- * This is due to the fact that __FILE__ and __FUNCTION__ are usually used to specify these parameters,
- * so it makes sense to optimize and skip the unnecessary allocations.
- * However, if you need them to be copied you may use the options parameter to specify this.
- * Options is a bitmask which supports DDLogMessageCopyFile and DDLogMessageCopyFunction.
-**/
-- (instancetype)initWithLogMsg:(NSString *)logMsg
- level:(int)logLevel
- flag:(int)logFlag
- context:(int)logContext
- file:(const char *)file
- function:(const char *)function
- line:(int)line
- tag:(id)tag
- options:(DDLogMessageOptions)optionsMask;
-
-/**
- * Returns the threadID as it appears in NSLog.
- * That is, it is a hexadecimal value which is calculated from the machThreadID.
-**/
-@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *threadID;
-
-/**
- * Convenience property to get just the file name, as the file variable is generally the full file path.
- * This method does not include the file extension, which is generally unwanted for logging purposes.
-**/
-@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *fileName;
-
-/**
- * Returns the function variable in NSString form.
-**/
-@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *methodName;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * The DDLogger protocol specifies that an optional formatter can be added to a logger.
- * Most (but not all) loggers will want to support formatters.
- *
- * However, writting getters and setters in a thread safe manner,
- * while still maintaining maximum speed for the logging process, is a difficult task.
- *
- * To do it right, the implementation of the getter/setter has strict requiremenets:
- * - Must NOT require the logMessage method to acquire a lock.
- * - Must NOT require the logMessage method to access an atomic property (also a lock of sorts).
- *
- * To simplify things, an abstract logger is provided that implements the getter and setter.
- *
- * Logger implementations may simply extend this class,
- * and they can ACCESS THE FORMATTER VARIABLE DIRECTLY from within their logMessage method!
-**/
-
-@interface DDAbstractLogger : NSObject
-{
- id formatter;
-
- dispatch_queue_t loggerQueue;
-}
-
-@property (NS_NONATOMIC_IOSONLY, strong) id logFormatter;
-
-@end
diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m
deleted file mode 100755
index ed21455fd..000000000
--- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDLog.m
+++ /dev/null
@@ -1,1067 +0,0 @@
-#import "DDLog.h"
-
-#import
-#import
-#import
-#import
-#import
-
-
-/**
- * Welcome to Cocoa Lumberjack!
- *
- * The project page has a wealth of documentation if you have any questions.
- * https://github.com/robbiehanson/CocoaLumberjack
- *
- * If you're new to the project you may wish to read the "Getting Started" wiki.
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
- *
-**/
-
-#if ! __has_feature(objc_arc)
-#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-// Does ARC support support GCD objects?
-// It does if the minimum deployment target is iOS 6+ or Mac OS X 8+
-
-#if TARGET_OS_IPHONE
-
- // Compiling for iOS
-
- #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 // iOS 6.0 or later
- #define NEEDS_DISPATCH_RETAIN_RELEASE 0
- #else // iOS 5.X or earlier
- #define NEEDS_DISPATCH_RETAIN_RELEASE 1
- #endif
-
-#else
-
- // Compiling for Mac OS X
-
- #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 // Mac OS X 10.8 or later
- #define NEEDS_DISPATCH_RETAIN_RELEASE 0
- #else
- #define NEEDS_DISPATCH_RETAIN_RELEASE 1 // Mac OS X 10.7 or earlier
- #endif
-
-#endif
-
-// We probably shouldn't be using DDLog() statements within the DDLog implementation.
-// But we still want to leave our log statements for any future debugging,
-// and to allow other developers to trace the implementation (which is a great learning tool).
-//
-// So we use a primitive logging macro around NSLog.
-// We maintain the NS prefix on the macros to be explicit about the fact that we're using NSLog.
-
-#define DD_DEBUG NO
-
-#define NSLogDebug(frmt, ...) do{ if(DD_DEBUG) NSLog((frmt), ##__VA_ARGS__); } while(0)
-
-// Specifies the maximum queue size of the logging thread.
-//
-// Since most logging is asynchronous, its possible for rogue threads to flood the logging queue.
-// That is, to issue an abundance of log statements faster than the logging thread can keepup.
-// Typically such a scenario occurs when log statements are added haphazardly within large loops,
-// but may also be possible if relatively slow loggers are being used.
-//
-// This property caps the queue size at a given number of outstanding log statements.
-// If a thread attempts to issue a log statement when the queue is already maxed out,
-// the issuing thread will block until the queue size drops below the max again.
-
-#define LOG_MAX_QUEUE_SIZE 1000 // Should not exceed INT32_MAX
-
-
-@interface DDLoggerNode : NSObject {
-@public
- id logger;
- dispatch_queue_t loggerQueue;
-}
-
-+ (DDLoggerNode *)nodeWithLogger:(id )logger loggerQueue:(dispatch_queue_t)loggerQueue;
-
-@end
-
-
-@interface DDLog (PrivateAPI)
-
-+ (void)lt_addLogger:(id )logger;
-+ (void)lt_removeLogger:(id )logger;
-+ (void)lt_removeAllLoggers;
-+ (void)lt_log:(DDLogMessage *)logMessage;
-+ (void)lt_flush;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDLog
-
-// An array used to manage all the individual loggers.
-// The array is only modified on the loggingQueue/loggingThread.
-static NSMutableArray *loggers;
-
-// All logging statements are added to the same queue to ensure FIFO operation.
-static dispatch_queue_t loggingQueue;
-
-// Individual loggers are executed concurrently per log statement.
-// Each logger has it's own associated queue, and a dispatch group is used for synchrnoization.
-static dispatch_group_t loggingGroup;
-
-// In order to prevent to queue from growing infinitely large,
-// a maximum size is enforced (LOG_MAX_QUEUE_SIZE).
-static dispatch_semaphore_t queueSemaphore;
-
-// Minor optimization for uniprocessor machines
-static unsigned int numProcessors;
-
-/**
- * The runtime sends initialize to each class in a program exactly one time just before the class,
- * or any class that inherits from it, is sent its first message from within the program. (Thus the
- * method may never be invoked if the class is not used.) The runtime sends the initialize message to
- * classes in a thread-safe manner. Superclasses receive this message before their subclasses.
- *
- * This method may also be called directly (assumably by accident), hence the safety mechanism.
-**/
-+ (void)initialize
-{
- static BOOL initialized = NO;
- if (!initialized)
- {
- initialized = YES;
-
- loggers = [[NSMutableArray alloc] initWithCapacity:4];
-
- NSLogDebug(@"DDLog: Using grand central dispatch");
-
- loggingQueue = dispatch_queue_create("cocoa.lumberjack", NULL);
- loggingGroup = dispatch_group_create();
-
- queueSemaphore = dispatch_semaphore_create(LOG_MAX_QUEUE_SIZE);
-
- // Figure out how many processors are available.
- // This may be used later for an optimization on uniprocessor machines.
-
- host_basic_info_data_t hostInfo;
- mach_msg_type_number_t infoCount;
-
- infoCount = HOST_BASIC_INFO_COUNT;
- host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, &infoCount);
-
- unsigned int result = (unsigned int)(hostInfo.max_cpus);
- unsigned int one = (unsigned int)(1);
-
- numProcessors = MAX(result, one);
-
- NSLogDebug(@"DDLog: numProcessors = %u", numProcessors);
-
-
- #if TARGET_OS_IPHONE
- NSString *notificationName = @"UIApplicationWillTerminateNotification";
- #else
- NSString *notificationName = @"NSApplicationWillTerminateNotification";
- #endif
-
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(applicationWillTerminate:)
- name:notificationName
- object:nil];
- }
-}
-
-/**
- * Provides access to the logging queue.
-**/
-+ (dispatch_queue_t)loggingQueue
-{
- return loggingQueue;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Notifications
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-+ (void)applicationWillTerminate:(NSNotification *)notification
-{
- [self flushLog];
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Logger Management
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-+ (void)addLogger:(id )logger
-{
- if (logger == nil) return;
-
- dispatch_async(loggingQueue, ^{ @autoreleasepool {
-
- [self lt_addLogger:logger];
- }});
-}
-
-+ (void)removeLogger:(id )logger
-{
- if (logger == nil) return;
-
- dispatch_async(loggingQueue, ^{ @autoreleasepool {
-
- [self lt_removeLogger:logger];
- }});
-}
-
-+ (void)removeAllLoggers
-{
- dispatch_async(loggingQueue, ^{ @autoreleasepool {
-
- [self lt_removeAllLoggers];
- }});
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Master Logging
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-+ (void)queueLogMessage:(DDLogMessage *)logMessage asynchronously:(BOOL)asyncFlag
-{
- // We have a tricky situation here...
- //
- // In the common case, when the queueSize is below the maximumQueueSize,
- // we want to simply enqueue the logMessage. And we want to do this as fast as possible,
- // which means we don't want to block and we don't want to use any locks.
- //
- // However, if the queueSize gets too big, we want to block.
- // But we have very strict requirements as to when we block, and how long we block.
- //
- // The following example should help illustrate our requirements:
- //
- // Imagine that the maximum queue size is configured to be 5,
- // and that there are already 5 log messages queued.
- // Let us call these 5 queued log messages A, B, C, D, and E. (A is next to be executed)
- //
- // Now if our thread issues a log statement (let us call the log message F),
- // it should block before the message is added to the queue.
- // Furthermore, it should be unblocked immediately after A has been unqueued.
- //
- // The requirements are strict in this manner so that we block only as long as necessary,
- // and so that blocked threads are unblocked in the order in which they were blocked.
- //
- // Returning to our previous example, let us assume that log messages A through E are still queued.
- // Our aforementioned thread is blocked attempting to queue log message F.
- // Now assume we have another separate thread that attempts to issue log message G.
- // It should block until log messages A and B have been unqueued.
-
-
- // We are using a counting semaphore provided by GCD.
- // The semaphore is initialized with our LOG_MAX_QUEUE_SIZE value.
- // Everytime we want to queue a log message we decrement this value.
- // If the resulting value is less than zero,
- // the semaphore function waits in FIFO order for a signal to occur before returning.
- //
- // A dispatch semaphore is an efficient implementation of a traditional counting semaphore.
- // Dispatch semaphores call down to the kernel only when the calling thread needs to be blocked.
- // If the calling semaphore does not need to block, no kernel call is made.
-
- dispatch_semaphore_wait(queueSemaphore, DISPATCH_TIME_FOREVER);
-
- // We've now sure we won't overflow the queue.
- // It is time to queue our log message.
-
- dispatch_block_t logBlock = ^{ @autoreleasepool {
-
- [self lt_log:logMessage];
- }};
-
- if (asyncFlag)
- dispatch_async(loggingQueue, logBlock);
- else
- dispatch_sync(loggingQueue, logBlock);
-}
-
-+ (void)log:(BOOL)asynchronous
- level:(int)level
- flag:(int)flag
- context:(int)context
- file:(const char *)file
- function:(const char *)function
- line:(int)line
- tag:(id)tag
- format:(NSString *)format, ...
-{
- va_list args;
- if (format)
- {
- va_start(args, format);
-
- NSString *logMsg = [[NSString alloc] initWithFormat:format arguments:args];
- DDLogMessage *logMessage = [[DDLogMessage alloc] initWithLogMsg:logMsg
- level:level
- flag:flag
- context:context
- file:file
- function:function
- line:line
- tag:tag
- options:0];
-
- [self queueLogMessage:logMessage asynchronously:asynchronous];
-
- va_end(args);
- }
-}
-
-+ (void)log:(BOOL)asynchronous
- level:(int)level
- flag:(int)flag
- context:(int)context
- file:(const char *)file
- function:(const char *)function
- line:(int)line
- tag:(id)tag
- format:(NSString *)format
- args:(va_list)args
-{
- if (format)
- {
- NSString *logMsg = [[NSString alloc] initWithFormat:format arguments:args];
- DDLogMessage *logMessage = [[DDLogMessage alloc] initWithLogMsg:logMsg
- level:level
- flag:flag
- context:context
- file:file
- function:function
- line:line
- tag:tag
- options:0];
-
- [self queueLogMessage:logMessage asynchronously:asynchronous];
- }
-}
-
-+ (void)flushLog
-{
- dispatch_sync(loggingQueue, ^{ @autoreleasepool {
-
- [self lt_flush];
- }});
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Registered Dynamic Logging
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-+ (BOOL)isRegisteredClass:(Class)class
-{
- SEL getterSel = @selector(ddLogLevel);
- SEL setterSel = @selector(ddSetLogLevel:);
-
-#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
-
- // Issue #6 (GoogleCode) - Crashes on iOS 4.2.1 and iPhone 4
- //
- // Crash caused by class_getClassMethod(2).
- //
- // "It's a bug with UIAccessibilitySafeCategory__NSObject so it didn't pop up until
- // users had VoiceOver enabled [...]. I was able to work around it by searching the
- // result of class_copyMethodList() instead of calling class_getClassMethod()"
-
- BOOL result = NO;
-
- unsigned int methodCount, i;
- Method *methodList = class_copyMethodList(object_getClass(class), &methodCount);
-
- if (methodList != NULL)
- {
- BOOL getterFound = NO;
- BOOL setterFound = NO;
-
- for (i = 0; i < methodCount; ++i)
- {
- SEL currentSel = method_getName(methodList[i]);
-
- if (currentSel == getterSel)
- {
- getterFound = YES;
- }
- else if (currentSel == setterSel)
- {
- setterFound = YES;
- }
-
- if (getterFound && setterFound)
- {
- result = YES;
- break;
- }
- }
-
- free(methodList);
- }
-
- return result;
-
-#else
-
- // Issue #24 (GitHub) - Crashing in in ARC+Simulator
- //
- // The method +[DDLog isRegisteredClass] will crash a project when using it with ARC + Simulator.
- // For running in the Simulator, it needs to execute the non-iOS code.
-
- Method getter = class_getClassMethod(class, getterSel);
- Method setter = class_getClassMethod(class, setterSel);
-
- if ((getter != NULL) && (setter != NULL))
- {
- return YES;
- }
-
- return NO;
-
-#endif
-}
-
-+ (NSArray *)registeredClasses
-{
- int numClasses, i;
-
- // We're going to get the list of all registered classes.
- // The Objective-C runtime library automatically registers all the classes defined in your source code.
- //
- // To do this we use the following method (documented in the Objective-C Runtime Reference):
- //
- // int objc_getClassList(Class *buffer, int bufferLen)
- //
- // We can pass (NULL, 0) to obtain the total number of
- // registered class definitions without actually retrieving any class definitions.
- // This allows us to allocate the minimum amount of memory needed for the application.
-
- numClasses = objc_getClassList(NULL, 0);
-
- // The numClasses method now tells us how many classes we have.
- // So we can allocate our buffer, and get pointers to all the class definitions.
-
- Class *classes = (Class *)malloc(sizeof(Class) * numClasses);
-
- numClasses = objc_getClassList(classes, numClasses);
-
- // We can now loop through the classes, and test each one to see if it is a DDLogging class.
-
- NSMutableArray *result = [NSMutableArray arrayWithCapacity:numClasses];
-
- for (i = 0; i < numClasses; i++)
- {
- Class class = classes[i];
-
- if ([self isRegisteredClass:class])
- {
- [result addObject:class];
- }
- }
-
- free(classes);
-
- return result;
-}
-
-+ (NSArray *)registeredClassNames
-{
- NSArray *registeredClasses = [self registeredClasses];
- NSMutableArray *result = [NSMutableArray arrayWithCapacity:[registeredClasses count]];
-
- for (Class class in registeredClasses)
- {
- [result addObject:NSStringFromClass(class)];
- }
-
- return result;
-}
-
-+ (int)logLevelForClass:(Class)aClass
-{
- if ([self isRegisteredClass:aClass])
- {
- return [aClass ddLogLevel];
- }
-
- return -1;
-}
-
-+ (int)logLevelForClassWithName:(NSString *)aClassName
-{
- Class aClass = NSClassFromString(aClassName);
-
- return [self logLevelForClass:aClass];
-}
-
-+ (void)setLogLevel:(int)logLevel forClass:(Class)aClass
-{
- if ([self isRegisteredClass:aClass])
- {
- [aClass ddSetLogLevel:logLevel];
- }
-}
-
-+ (void)setLogLevel:(int)logLevel forClassWithName:(NSString *)aClassName
-{
- Class aClass = NSClassFromString(aClassName);
-
- [self setLogLevel:logLevel forClass:aClass];
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Logging Thread
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * This method should only be run on the logging thread/queue.
-**/
-+ (void)lt_addLogger:(id )logger
-{
- // Add to loggers array.
- // Need to create loggerQueue if loggerNode doesn't provide one.
-
- dispatch_queue_t loggerQueue = NULL;
-
- if ([logger respondsToSelector:@selector(loggerQueue)])
- {
- // Logger may be providing its own queue
-
- loggerQueue = [logger loggerQueue];
- }
-
- if (loggerQueue == nil)
- {
- // Automatically create queue for the logger.
- // Use the logger name as the queue name if possible.
-
- const char *loggerQueueName = NULL;
- if ([logger respondsToSelector:@selector(loggerName)])
- {
- loggerQueueName = [[logger loggerName] UTF8String];
- }
-
- loggerQueue = dispatch_queue_create(loggerQueueName, NULL);
- }
-
- DDLoggerNode *loggerNode = [DDLoggerNode nodeWithLogger:logger loggerQueue:loggerQueue];
- [loggers addObject:loggerNode];
-
- if ([logger respondsToSelector:@selector(didAddLogger)])
- {
- dispatch_async(loggerNode->loggerQueue, ^{ @autoreleasepool {
-
- [logger didAddLogger];
- }});
- }
-}
-
-/**
- * This method should only be run on the logging thread/queue.
-**/
-+ (void)lt_removeLogger:(id )logger
-{
- // Find associated loggerNode in list of added loggers
-
- DDLoggerNode *loggerNode = nil;
-
- for (DDLoggerNode *node in loggers)
- {
- if (node->logger == logger)
- {
- loggerNode = node;
- break;
- }
- }
-
- if (loggerNode == nil)
- {
- NSLogDebug(@"DDLog: Request to remove logger which wasn't added");
- return;
- }
-
- // Notify logger
-
- if ([logger respondsToSelector:@selector(willRemoveLogger)])
- {
- dispatch_async(loggerNode->loggerQueue, ^{ @autoreleasepool {
-
- [logger willRemoveLogger];
- }});
- }
-
- // Remove from loggers array
-
- [loggers removeObject:loggerNode];
-}
-
-/**
- * This method should only be run on the logging thread/queue.
-**/
-+ (void)lt_removeAllLoggers
-{
- // Notify all loggers
-
- for (DDLoggerNode *loggerNode in loggers)
- {
- if ([loggerNode->logger respondsToSelector:@selector(willRemoveLogger)])
- {
- dispatch_async(loggerNode->loggerQueue, ^{ @autoreleasepool {
-
- [loggerNode->logger willRemoveLogger];
- }});
- }
- }
-
- // Remove all loggers from array
-
- [loggers removeAllObjects];
-}
-
-/**
- * This method should only be run on the logging thread/queue.
-**/
-+ (void)lt_log:(DDLogMessage *)logMessage
-{
- // Execute the given log message on each of our loggers.
-
- if (numProcessors > 1)
- {
- // Execute each logger concurrently, each within its own queue.
- // All blocks are added to same group.
- // After each block has been queued, wait on group.
- //
- // The waiting ensures that a slow logger doesn't end up with a large queue of pending log messages.
- // This would defeat the purpose of the efforts we made earlier to restrict the max queue size.
-
- for (DDLoggerNode *loggerNode in loggers)
- {
- dispatch_group_async(loggingGroup, loggerNode->loggerQueue, ^{ @autoreleasepool {
-
- [loggerNode->logger logMessage:logMessage];
-
- }});
- }
-
- dispatch_group_wait(loggingGroup, DISPATCH_TIME_FOREVER);
- }
- else
- {
- // Execute each logger serialy, each within its own queue.
-
- for (DDLoggerNode *loggerNode in loggers)
- {
- dispatch_sync(loggerNode->loggerQueue, ^{ @autoreleasepool {
-
- [loggerNode->logger logMessage:logMessage];
-
- }});
- }
- }
-
- // If our queue got too big, there may be blocked threads waiting to add log messages to the queue.
- // Since we've now dequeued an item from the log, we may need to unblock the next thread.
-
- // We are using a counting semaphore provided by GCD.
- // The semaphore is initialized with our LOG_MAX_QUEUE_SIZE value.
- // When a log message is queued this value is decremented.
- // When a log message is dequeued this value is incremented.
- // If the value ever drops below zero,
- // the queueing thread blocks and waits in FIFO order for us to signal it.
- //
- // A dispatch semaphore is an efficient implementation of a traditional counting semaphore.
- // Dispatch semaphores call down to the kernel only when the calling thread needs to be blocked.
- // If the calling semaphore does not need to block, no kernel call is made.
-
- dispatch_semaphore_signal(queueSemaphore);
-}
-
-/**
- * This method should only be run on the background logging thread.
-**/
-+ (void)lt_flush
-{
- // All log statements issued before the flush method was invoked have now been executed.
- //
- // Now we need to propogate the flush request to any loggers that implement the flush method.
- // This is designed for loggers that buffer IO.
-
- for (DDLoggerNode *loggerNode in loggers)
- {
- if ([loggerNode->logger respondsToSelector:@selector(flush)])
- {
- dispatch_group_async(loggingGroup, loggerNode->loggerQueue, ^{ @autoreleasepool {
-
- [loggerNode->logger flush];
-
- }});
- }
- }
-
- dispatch_group_wait(loggingGroup, DISPATCH_TIME_FOREVER);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark Utilities
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-NSString *DDExtractFileNameWithoutExtension(const char *filePath, BOOL copy)
-{
- if (filePath == NULL) return nil;
-
- char *lastSlash = NULL;
- char *lastDot = NULL;
-
- char *p = (char *)filePath;
-
- while (*p != '\0')
- {
- if (*p == '/')
- lastSlash = p;
- else if (*p == '.')
- lastDot = p;
-
- p++;
- }
-
- char *subStr;
- NSUInteger subLen;
-
- if (lastSlash)
- {
- if (lastDot)
- {
- // lastSlash -> lastDot
- subStr = lastSlash + 1;
- subLen = lastDot - subStr;
- }
- else
- {
- // lastSlash -> endOfString
- subStr = lastSlash + 1;
- subLen = p - subStr;
- }
- }
- else
- {
- if (lastDot)
- {
- // startOfString -> lastDot
- subStr = (char *)filePath;
- subLen = lastDot - subStr;
- }
- else
- {
- // startOfString -> endOfString
- subStr = (char *)filePath;
- subLen = p - subStr;
- }
- }
-
- if (copy)
- {
- return [[NSString alloc] initWithBytes:subStr
- length:subLen
- encoding:NSUTF8StringEncoding];
- }
- else
- {
- // We can take advantage of the fact that __FILE__ is a string literal.
- // Specifically, we don't need to waste time copying the string.
- // We can just tell NSString to point to a range within the string literal.
-
- return [[NSString alloc] initWithBytesNoCopy:subStr
- length:subLen
- encoding:NSUTF8StringEncoding
- freeWhenDone:NO];
- }
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDLoggerNode
-
-- (instancetype)initWithLogger:(id )aLogger loggerQueue:(dispatch_queue_t)aLoggerQueue
-{
- if ((self = [super init]))
- {
- logger = aLogger;
-
- if (aLoggerQueue) {
- loggerQueue = aLoggerQueue;
- #if NEEDS_DISPATCH_RETAIN_RELEASE
- dispatch_retain(loggerQueue);
- #endif
- }
- }
- return self;
-}
-
-+ (DDLoggerNode *)nodeWithLogger:(id )logger loggerQueue:(dispatch_queue_t)loggerQueue
-{
- return [[DDLoggerNode alloc] initWithLogger:logger loggerQueue:loggerQueue];
-}
-
-- (void)dealloc
-{
- #if NEEDS_DISPATCH_RETAIN_RELEASE
- if (loggerQueue) dispatch_release(loggerQueue);
- #endif
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDLogMessage
-
-static char *dd_str_copy(const char *str)
-{
- if (str == NULL) return NULL;
-
- size_t length = strlen(str);
- char * result = malloc(length + 1);
- strncpy(result, str, length);
- result[length] = 0;
-
- return result;
-}
-
-- (instancetype)initWithLogMsg:(NSString *)msg
- level:(int)level
- flag:(int)flag
- context:(int)context
- file:(const char *)aFile
- function:(const char *)aFunction
- line:(int)line
- tag:(id)aTag
- options:(DDLogMessageOptions)optionsMask
-{
- if ((self = [super init]))
- {
- logMsg = msg;
- logLevel = level;
- logFlag = flag;
- logContext = context;
- lineNumber = line;
- tag = aTag;
- options = optionsMask;
-
- if (options & DDLogMessageCopyFile)
- file = dd_str_copy(aFile);
- else
- file = (char *)aFile;
-
- if (options & DDLogMessageCopyFunction)
- file = dd_str_copy(aFunction);
- else
- function = (char *)aFunction;
-
- timestamp = [[NSDate alloc] init];
-
- machThreadID = pthread_mach_thread_np(pthread_self());
-
- queueLabel = dd_str_copy(dispatch_queue_get_label(dispatch_get_current_queue()));
-
- threadName = [[NSThread currentThread] name];
- }
- return self;
-}
-
-- (NSString *)threadID
-{
- return [[NSString alloc] initWithFormat:@"%x", machThreadID];
-}
-
-- (NSString *)fileName
-{
- return DDExtractFileNameWithoutExtension(file, NO);
-}
-
-- (NSString *)methodName
-{
- if (function == NULL)
- return nil;
- else
- return @(function);
-}
-
-- (void)dealloc
-{
- if (file && (options & DDLogMessageCopyFile))
- free(file);
-
- if (function && (options & DDLogMessageCopyFunction))
- free(function);
-
- if (queueLabel)
- free(queueLabel);
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDAbstractLogger
-
-- (instancetype)init
-{
- if ((self = [super init]))
- {
- const char *loggerQueueName = NULL;
- if ([self respondsToSelector:@selector(loggerName)])
- {
- loggerQueueName = [[self loggerName] UTF8String];
- }
-
- loggerQueue = dispatch_queue_create(loggerQueueName, NULL);
- }
- return self;
-}
-
-- (void)dealloc
-{
- #if NEEDS_DISPATCH_RETAIN_RELEASE
- if (loggerQueue) dispatch_release(loggerQueue);
- #endif
-}
-
-- (void)logMessage:(DDLogMessage *)logMessage
-{
- // Override me
-}
-
-- (id )logFormatter
-{
- // This method must be thread safe and intuitive.
- // Therefore if somebody executes the following code:
- //
- // [logger setLogFormatter:myFormatter];
- // formatter = [logger logFormatter];
- //
- // They would expect formatter to equal myFormatter.
- // This functionality must be ensured by the getter and setter method.
- //
- // The thread safety must not come at a cost to the performance of the logMessage method.
- // This method is likely called sporadically, while the logMessage method is called repeatedly.
- // This means, the implementation of this method:
- // - Must NOT require the logMessage method to acquire a lock.
- // - Must NOT require the logMessage method to access an atomic property (also a lock of sorts).
- //
- // Thread safety is ensured by executing access to the formatter variable on the loggerQueue.
- // This is the same queue that the logMessage method operates on.
- //
- // Note: The last time I benchmarked the performance of direct access vs atomic property access,
- // direct access was over twice as fast on the desktop and over 6 times as fast on the iPhone.
- //
- //
- // loggerQueue : Our own private internal queue that the logMessage method runs on.
- // Operations are added to this queue from the global loggingQueue.
- //
- // loggingQueue : The queue that all log messages go through before they arrive in our loggerQueue.
- //
- // It is important to note that, while the loggerQueue is used to create thread-safety for our formatter,
- // changes to the formatter variable are queued through the loggingQueue.
- //
- // Since this will obviously confuse the hell out of me later, here is a better description.
- // Imagine the following code:
- //
- // DDLogVerbose(@"log msg 1");
- // DDLogVerbose(@"log msg 2");
- // [logger setFormatter:myFormatter];
- // DDLogVerbose(@"log msg 3");
- //
- // Our intuitive requirement means that the new formatter will only apply to the 3rd log message.
- // But notice what happens if we have asynchronous logging enabled for verbose mode.
- //
- // Log msg 1 starts executing asynchronously on the loggingQueue.
- // The loggingQueue executes the log statement on each logger concurrently.
- // That means it executes log msg 1 on our loggerQueue.
- // While log msg 1 is executing, log msg 2 gets added to the loggingQueue.
- // Then the user requests that we change our formatter.
- // So at this exact moment, our queues look like this:
- //
- // loggerQueue : executing log msg 1, nil
- // loggingQueue : executing log msg 1, log msg 2, nil
- //
- // So direct access to the formatter is only available if requested from the loggerQueue.
- // In all other circumstances we need to go through the loggingQueue to get the proper value.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- return formatter;
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- __block id result;
-
- dispatch_sync(globalLoggingQueue, ^{
- dispatch_sync(loggerQueue, ^{
- result = formatter;
- });
- });
-
- return result;
- }
-}
-
-- (void)setLogFormatter:(id )logFormatter
-{
- // The design of this method is documented extensively in the logFormatter message (above in code).
-
- dispatch_block_t block = ^{ @autoreleasepool {
-
- if (formatter != logFormatter)
- {
- if ([formatter respondsToSelector:@selector(willRemoveFromLogger:)]) {
- [formatter willRemoveFromLogger:self];
- }
-
- formatter = logFormatter;
-
- if ([formatter respondsToSelector:@selector(didAddToLogger:)]) {
- [formatter didAddToLogger:self];
- }
- }
- }};
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (dispatch_queue_t)loggerQueue
-{
- return loggerQueue;
-}
-
-- (NSString *)loggerName
-{
- return NSStringFromClass([self class]);
-}
-
-@end
diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.h b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.h
deleted file mode 100755
index 4cbd2e8e9..000000000
--- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.h
+++ /dev/null
@@ -1,167 +0,0 @@
-#import
-#if TARGET_OS_IPHONE
-#import
-#else
-#import
-#endif
-
-#import "DDLog.h"
-
-/**
- * Welcome to Cocoa Lumberjack!
- *
- * The project page has a wealth of documentation if you have any questions.
- * https://github.com/robbiehanson/CocoaLumberjack
- *
- * If you're new to the project you may wish to read the "Getting Started" wiki.
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
- *
- *
- * This class provides a logger for Terminal output or Xcode console output,
- * depending on where you are running your code.
- *
- * As described in the "Getting Started" page,
- * the traditional NSLog() function directs it's output to two places:
- *
- * - Apple System Log (so it shows up in Console.app)
- * - StdErr (if stderr is a TTY, so log statements show up in Xcode console)
- *
- * To duplicate NSLog() functionality you can simply add this logger and an asl logger.
- * However, if you instead choose to use file logging (for faster performance),
- * you may choose to use only a file logger and a tty logger.
-**/
-
-@interface DDTTYLogger : DDAbstractLogger
-{
- NSCalendar *calendar;
- NSUInteger calendarUnitFlags;
-
- NSString *appName;
- char *app;
- size_t appLen;
-
- NSString *processID;
- char *pid;
- size_t pidLen;
-
- BOOL colorsEnabled;
- NSMutableArray *colorProfilesArray;
- NSMutableDictionary *colorProfilesDict;
-}
-
-+ (DDTTYLogger *)sharedInstance;
-
-/* Inherited from the DDLogger protocol:
- *
- * Formatters may optionally be added to any logger.
- *
- * If no formatter is set, the logger simply logs the message as it is given in logMessage,
- * or it may use its own built in formatting style.
- *
- * More information about formatters can be found here:
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters
- *
- * The actual implementation of these methods is inherited from DDAbstractLogger.
-
-- (id )logFormatter;
-- (void)setLogFormatter:(id )formatter;
-
-*/
-
-/**
- * Want to use different colors for different log levels?
- * Enable this property.
- *
- * If you run the application via the Terminal (not Xcode),
- * the logger will map colors to xterm-256color or xterm-color (if available).
- *
- * Xcode does NOT natively support colors in the Xcode debugging console.
- * You'll need to install the XcodeColors plugin to see colors in the Xcode console.
- * https://github.com/robbiehanson/XcodeColors
- *
- * The default value if NO.
-**/
-@property (readwrite, assign) BOOL colorsEnabled;
-
-/**
- * The default color set (foregroundColor, backgroundColor) is:
- *
- * - LOG_FLAG_ERROR = (red, nil)
- * - LOG_FLAG_WARN = (orange, nil)
- *
- * You can customize the colors however you see fit.
- * Please note that you are passing a flag, NOT a level.
- *
- * GOOD : [ttyLogger setForegroundColor:pink backgroundColor:nil forFlag:LOG_FLAG_INFO]; // <- Good :)
- * BAD : [ttyLogger setForegroundColor:pink backgroundColor:nil forFlag:LOG_LEVEL_INFO]; // <- BAD! :(
- *
- * LOG_FLAG_INFO = 0...00100
- * LOG_LEVEL_INFO = 0...00111 <- Would match LOG_FLAG_INFO and LOG_FLAG_WARN and LOG_FLAG_ERROR
- *
- * If you run the application within Xcode, then the XcodeColors plugin is required.
- *
- * If you run the application from a shell, then DDTTYLogger will automatically map the given color to
- * the closest available color. (xterm-256color or xterm-color which have 256 and 16 supported colors respectively.)
- *
- * This method invokes setForegroundColor:backgroundColor:forFlag:context: and passes the default context (0).
-**/
-#if TARGET_OS_IPHONE
-- (void)setForegroundColor:(UIColor *)txtColor backgroundColor:(UIColor *)bgColor forFlag:(int)mask;
-#else
-- (void)setForegroundColor:(NSColor *)txtColor backgroundColor:(NSColor *)bgColor forFlag:(int)mask;
-#endif
-
-/**
- * Just like setForegroundColor:backgroundColor:flag, but allows you to specify a particular logging context.
- *
- * A logging context is often used to identify log messages coming from a 3rd party framework,
- * although logging context's can be used for many different functions.
- *
- * Logging context's are explained in further detail here:
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomContext
-**/
-#if TARGET_OS_IPHONE
-- (void)setForegroundColor:(UIColor *)txtColor backgroundColor:(UIColor *)bgColor forFlag:(int)mask context:(int)ctxt;
-#else
-- (void)setForegroundColor:(NSColor *)txtColor backgroundColor:(NSColor *)bgColor forFlag:(int)mask context:(int)ctxt;
-#endif
-
-/**
- * Similar to the methods above, but allows you to map DDLogMessage->tag to a particular color profile.
- * For example, you could do something like this:
- *
- * static NSString *const PurpleTag = @"PurpleTag";
- *
- * #define DDLogPurple(frmt, ...) LOG_OBJC_TAG_MACRO(NO, 0, 0, 0, PurpleTag, frmt, ##__VA_ARGS__)
- *
- * And then in your applicationDidFinishLaunching, or wherever you configure Lumberjack:
- *
- * #if TARGET_OS_IPHONE
- * UIColor *purple = [UIColor colorWithRed:(64/255.0) green:(0/255.0) blue:(128/255.0) alpha:1.0];
- * #else
- * NSColor *purple = [NSColor colorWithCalibratedRed:(64/255.0) green:(0/255.0) blue:(128/255.0) alpha:1.0];
- *
- * [[DDTTYLogger sharedInstance] setForegroundColor:purple backgroundColor:nil forTag:PurpleTag];
- * [DDLog addLogger:[DDTTYLogger sharedInstance]];
- *
- * This would essentially give you a straight NSLog replacement that prints in purple:
- *
- * DDLogPurple(@"I'm a purple log message!");
-**/
-#if TARGET_OS_IPHONE
-- (void)setForegroundColor:(UIColor *)txtColor backgroundColor:(UIColor *)bgColor forTag:(id )tag;
-#else
-- (void)setForegroundColor:(NSColor *)txtColor backgroundColor:(NSColor *)bgColor forTag:(id )tag;
-#endif
-
-/**
- * Clearing color profiles.
-**/
-- (void)clearColorsForFlag:(int)mask;
-- (void)clearColorsForFlag:(int)mask context:(int)context;
-- (void)clearColorsForTag:(id )tag;
-- (void)clearColorsForAllFlags;
-- (void)clearColorsForAllTags;
-- (void)clearAllColors;
-
-@end
diff --git a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m b/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m
deleted file mode 100755
index 599240e43..000000000
--- a/Tools/XcodeCapp/XcodeCapp/Lumberjack/DDTTYLogger.m
+++ /dev/null
@@ -1,1480 +0,0 @@
-#import "DDTTYLogger.h"
-
-#import
-#import
-
-/**
- * Welcome to Cocoa Lumberjack!
- *
- * The project page has a wealth of documentation if you have any questions.
- * https://github.com/robbiehanson/CocoaLumberjack
- *
- * If you're new to the project you may wish to read the "Getting Started" wiki.
- * https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
-**/
-
-#if ! __has_feature(objc_arc)
-#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
-#endif
-
-// We probably shouldn't be using DDLog() statements within the DDLog implementation.
-// But we still want to leave our log statements for any future debugging,
-// and to allow other developers to trace the implementation (which is a great learning tool).
-//
-// So we use primitive logging macros around NSLog.
-// We maintain the NS prefix on the macros to be explicit about the fact that we're using NSLog.
-
-#define LOG_LEVEL 2
-
-#define NSLogError(frmt, ...) do{ if(LOG_LEVEL >= 1) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogWarn(frmt, ...) do{ if(LOG_LEVEL >= 2) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogInfo(frmt, ...) do{ if(LOG_LEVEL >= 3) NSLog((frmt), ##__VA_ARGS__); } while(0)
-#define NSLogVerbose(frmt, ...) do{ if(LOG_LEVEL >= 4) NSLog((frmt), ##__VA_ARGS__); } while(0)
-
-// Xcode does NOT natively support colors in the Xcode debugging console.
-// You'll need to install the XcodeColors plugin to see colors in the Xcode console.
-// https://github.com/robbiehanson/XcodeColors
-//
-// The following is documentation from the XcodeColors project:
-//
-//
-// How to apply color formatting to your log statements:
-//
-// To set the foreground color:
-// Insert the ESCAPE_SEQ into your string, followed by "fg124,12,255;" where r=124, g=12, b=255.
-//
-// To set the background color:
-// Insert the ESCAPE_SEQ into your string, followed by "bg12,24,36;" where r=12, g=24, b=36.
-//
-// To reset the foreground color (to default value):
-// Insert the ESCAPE_SEQ into your string, followed by "fg;"
-//
-// To reset the background color (to default value):
-// Insert the ESCAPE_SEQ into your string, followed by "bg;"
-//
-// To reset the foreground and background color (to default values) in one operation:
-// Insert the ESCAPE_SEQ into your string, followed by ";"
-
-#define XCODE_COLORS_ESCAPE_SEQ "\033["
-
-#define XCODE_COLORS_RESET_FG XCODE_COLORS_ESCAPE_SEQ "fg;" // Clear any foreground color
-#define XCODE_COLORS_RESET_BG XCODE_COLORS_ESCAPE_SEQ "bg;" // Clear any background color
-#define XCODE_COLORS_RESET XCODE_COLORS_ESCAPE_SEQ ";" // Clear any foreground or background color
-
-// Some simple defines to make life easier on ourself
-
-#if TARGET_OS_IPHONE
- #define MakeColor(r, g, b) [UIColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f]
-#else
- #define MakeColor(r, g, b) [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f]
-#endif
-
-#if TARGET_OS_IPHONE
- #define OSColor UIColor
-#else
- #define OSColor NSColor
-#endif
-
-// If running in a shell, not all RGB colors will be supported.
-// In this case we automatically map to the closest available color.
-// In order to provide this mapping, we have a hard-coded set of the standard RGB values available in the shell.
-// However, not every shell is the same, and Apple likes to think different even when it comes to shell colors.
-//
-// Map to standard Terminal.app colors (1), or
-// map to standard xterm colors (0).
-
-#define MAP_TO_TERMINAL_APP_COLORS 1
-
-
-@interface DDTTYLoggerColorProfile : NSObject {
-@public
- int mask;
- int context;
-
- uint8_t fg_r;
- uint8_t fg_g;
- uint8_t fg_b;
-
- uint8_t bg_r;
- uint8_t bg_g;
- uint8_t bg_b;
-
- NSUInteger fgCodeIndex;
- NSString *fgCodeRaw;
-
- NSUInteger bgCodeIndex;
- NSString *bgCodeRaw;
-
- char fgCode[24];
- size_t fgCodeLen;
-
- char bgCode[24];
- size_t bgCodeLen;
-
- char resetCode[8];
- size_t resetCodeLen;
-}
-
-- (instancetype)initWithForegroundColor:(OSColor *)fgColor backgroundColor:(OSColor *)bgColor flag:(int)mask context:(int)ctxt NS_DESIGNATED_INITIALIZER;
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#pragma mark -
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDTTYLogger
-
-static BOOL isaTTY;
-static BOOL isaColorTTY;
-static BOOL isaColor256TTY;
-static BOOL isaXcodeColorTTY;
-
-static NSArray *codes_fg = nil;
-static NSArray *codes_bg = nil;
-static NSArray *colors = nil;
-
-static DDTTYLogger *sharedInstance;
-
-/**
- * Initializes the colors array, as well as the codes_fg and codes_bg arrays, for 16 color mode.
- *
- * This method is used when the application is running from within a shell that only supports 16 color mode.
- * This method is not invoked if the application is running within Xcode, or via normal UI app launch.
-**/
-+ (void)initialize_colors_16
-{
- if (codes_fg || codes_bg || colors) return;
-
- NSMutableArray *m_codes_fg = [NSMutableArray arrayWithCapacity:16];
- NSMutableArray *m_codes_bg = [NSMutableArray arrayWithCapacity:16];
- NSMutableArray *m_colors = [NSMutableArray arrayWithCapacity:16];
-
- // In a standard shell only 16 colors are supported.
- //
- // More information about ansi escape codes can be found online.
- // http://en.wikipedia.org/wiki/ANSI_escape_code
-
- [m_codes_fg addObject:@"30m"]; // normal - black
- [m_codes_fg addObject:@"31m"]; // normal - red
- [m_codes_fg addObject:@"32m"]; // normal - green
- [m_codes_fg addObject:@"33m"]; // normal - yellow
- [m_codes_fg addObject:@"34m"]; // normal - blue
- [m_codes_fg addObject:@"35m"]; // normal - magenta
- [m_codes_fg addObject:@"36m"]; // normal - cyan
- [m_codes_fg addObject:@"37m"]; // normal - gray
- [m_codes_fg addObject:@"1;30m"]; // bright - darkgray
- [m_codes_fg addObject:@"1;31m"]; // bright - red
- [m_codes_fg addObject:@"1;32m"]; // bright - green
- [m_codes_fg addObject:@"1;33m"]; // bright - yellow
- [m_codes_fg addObject:@"1;34m"]; // bright - blue
- [m_codes_fg addObject:@"1;35m"]; // bright - magenta
- [m_codes_fg addObject:@"1;36m"]; // bright - cyan
- [m_codes_fg addObject:@"1;37m"]; // bright - white
-
- [m_codes_bg addObject:@"40m"]; // normal - black
- [m_codes_bg addObject:@"41m"]; // normal - red
- [m_codes_bg addObject:@"42m"]; // normal - green
- [m_codes_bg addObject:@"43m"]; // normal - yellow
- [m_codes_bg addObject:@"44m"]; // normal - blue
- [m_codes_bg addObject:@"45m"]; // normal - magenta
- [m_codes_bg addObject:@"46m"]; // normal - cyan
- [m_codes_bg addObject:@"47m"]; // normal - gray
- [m_codes_bg addObject:@"1;40m"]; // bright - darkgray
- [m_codes_bg addObject:@"1;41m"]; // bright - red
- [m_codes_bg addObject:@"1;42m"]; // bright - green
- [m_codes_bg addObject:@"1;43m"]; // bright - yellow
- [m_codes_bg addObject:@"1;44m"]; // bright - blue
- [m_codes_bg addObject:@"1;45m"]; // bright - magenta
- [m_codes_bg addObject:@"1;46m"]; // bright - cyan
- [m_codes_bg addObject:@"1;47m"]; // bright - white
-
-#if MAP_TO_TERMINAL_APP_COLORS
-
- // Standard Terminal.app colors:
- //
- // These are the default colors used by Apple's Terminal.app.
-
- [m_colors addObject:MakeColor( 0, 0, 0)]; // normal - black
- [m_colors addObject:MakeColor(194, 54, 33)]; // normal - red
- [m_colors addObject:MakeColor( 37, 188, 36)]; // normal - green
- [m_colors addObject:MakeColor(173, 173, 39)]; // normal - yellow
- [m_colors addObject:MakeColor( 73, 46, 225)]; // normal - blue
- [m_colors addObject:MakeColor(211, 56, 211)]; // normal - magenta
- [m_colors addObject:MakeColor( 51, 187, 200)]; // normal - cyan
- [m_colors addObject:MakeColor(203, 204, 205)]; // normal - gray
- [m_colors addObject:MakeColor(129, 131, 131)]; // bright - darkgray
- [m_colors addObject:MakeColor(252, 57, 31)]; // bright - red
- [m_colors addObject:MakeColor( 49, 231, 34)]; // bright - green
- [m_colors addObject:MakeColor(234, 236, 35)]; // bright - yellow
- [m_colors addObject:MakeColor( 88, 51, 255)]; // bright - blue
- [m_colors addObject:MakeColor(249, 53, 248)]; // bright - magenta
- [m_colors addObject:MakeColor( 20, 240, 240)]; // bright - cyan
- [m_colors addObject:MakeColor(233, 235, 235)]; // bright - white
-
-#else
-
- // Standard xterm colors:
- //
- // These are the default colors used by most xterm shells.
-
- [m_colors addObject:MakeColor( 0, 0, 0)]; // normal - black
- [m_colors addObject:MakeColor(205, 0, 0)]; // normal - red
- [m_colors addObject:MakeColor( 0, 205, 0)]; // normal - green
- [m_colors addObject:MakeColor(205, 205, 0)]; // normal - yellow
- [m_colors addObject:MakeColor( 0, 0, 238)]; // normal - blue
- [m_colors addObject:MakeColor(205, 0, 205)]; // normal - magenta
- [m_colors addObject:MakeColor( 0, 205, 205)]; // normal - cyan
- [m_colors addObject:MakeColor(229, 229, 229)]; // normal - gray
- [m_colors addObject:MakeColor(127, 127, 127)]; // bright - darkgray
- [m_colors addObject:MakeColor(255, 0, 0)]; // bright - red
- [m_colors addObject:MakeColor( 0, 255, 0)]; // bright - green
- [m_colors addObject:MakeColor(255, 255, 0)]; // bright - yellow
- [m_colors addObject:MakeColor( 92, 92, 255)]; // bright - blue
- [m_colors addObject:MakeColor(255, 0, 255)]; // bright - magenta
- [m_colors addObject:MakeColor( 0, 255, 255)]; // bright - cyan
- [m_colors addObject:MakeColor(255, 255, 255)]; // bright - white
-
-#endif
-
- codes_fg = [m_codes_fg copy];
- codes_bg = [m_codes_bg copy];
- colors = [m_colors copy];
-
- NSAssert([codes_fg count] == [codes_bg count], @"Invalid colors/codes array(s)");
- NSAssert([codes_fg count] == [colors count], @"Invalid colors/codes array(s)");
-}
-
-/**
- * Initializes the colors array, as well as the codes_fg and codes_bg arrays, for 256 color mode.
- *
- * This method is used when the application is running from within a shell that supports 256 color mode.
- * This method is not invoked if the application is running within Xcode, or via normal UI app launch.
-**/
-+ (void)initialize_colors_256
-{
- if (codes_fg || codes_bg || colors) return;
-
- NSMutableArray *m_codes_fg = [NSMutableArray arrayWithCapacity:(256-16)];
- NSMutableArray *m_codes_bg = [NSMutableArray arrayWithCapacity:(256-16)];
- NSMutableArray *m_colors = [NSMutableArray arrayWithCapacity:(256-16)];
-
- #if MAP_TO_TERMINAL_APP_COLORS
-
- // Standard Terminal.app colors:
- //
- // These are the colors the Terminal.app uses in xterm-256color mode.
- // In this mode, the terminal supports 256 different colors, specified by 256 color codes.
- //
- // The first 16 color codes map to the original 16 color codes supported by the earlier xterm-color mode.
- // These are actually configurable, and thus we ignore them for the purposes of mapping,
- // as we can't rely on them being constant. They are largely duplicated anyway.
- //
- // The next 216 color codes are designed to run the spectrum, with several shades of every color.
- // While the color codes are standardized, the actual RGB values for each color code is not.
- // Apple's Terminal.app uses different RGB values from that of a standard xterm.
- // Apple's choices in colors are designed to be a little nicer on the eyes.
- //
- // The last 24 color codes represent a grayscale.
- //
- // Unfortunately, unlike the standard xterm color chart,
- // Apple's RGB values cannot be calculated using a simple formula (at least not that I know of).
- // Also, I don't know of any ways to programmatically query the shell for the RGB values.
- // So this big giant color chart had to be made by hand.
- //
- // More information about ansi escape codes can be found online.
- // http://en.wikipedia.org/wiki/ANSI_escape_code
-
- // Colors
-
- [m_colors addObject:MakeColor( 47, 49, 49)];
- [m_colors addObject:MakeColor( 60, 42, 144)];
- [m_colors addObject:MakeColor( 66, 44, 183)];
- [m_colors addObject:MakeColor( 73, 46, 222)];
- [m_colors addObject:MakeColor( 81, 50, 253)];
- [m_colors addObject:MakeColor( 88, 51, 255)];
-
- [m_colors addObject:MakeColor( 42, 128, 37)];
- [m_colors addObject:MakeColor( 42, 127, 128)];
- [m_colors addObject:MakeColor( 44, 126, 169)];
- [m_colors addObject:MakeColor( 56, 125, 209)];
- [m_colors addObject:MakeColor( 59, 124, 245)];
- [m_colors addObject:MakeColor( 66, 123, 255)];
-
- [m_colors addObject:MakeColor( 51, 163, 41)];
- [m_colors addObject:MakeColor( 39, 162, 121)];
- [m_colors addObject:MakeColor( 42, 161, 162)];
- [m_colors addObject:MakeColor( 53, 160, 202)];
- [m_colors addObject:MakeColor( 45, 159, 240)];
- [m_colors addObject:MakeColor( 58, 158, 255)];
-
- [m_colors addObject:MakeColor( 31, 196, 37)];
- [m_colors addObject:MakeColor( 48, 196, 115)];
- [m_colors addObject:MakeColor( 39, 195, 155)];
- [m_colors addObject:MakeColor( 49, 195, 195)];
- [m_colors addObject:MakeColor( 32, 194, 235)];
- [m_colors addObject:MakeColor( 53, 193, 255)];
-
- [m_colors addObject:MakeColor( 50, 229, 35)];
- [m_colors addObject:MakeColor( 40, 229, 109)];
- [m_colors addObject:MakeColor( 27, 229, 149)];
- [m_colors addObject:MakeColor( 49, 228, 189)];
- [m_colors addObject:MakeColor( 33, 228, 228)];
- [m_colors addObject:MakeColor( 53, 227, 255)];
-
- [m_colors addObject:MakeColor( 27, 254, 30)];
- [m_colors addObject:MakeColor( 30, 254, 103)];
- [m_colors addObject:MakeColor( 45, 254, 143)];
- [m_colors addObject:MakeColor( 38, 253, 182)];
- [m_colors addObject:MakeColor( 38, 253, 222)];
- [m_colors addObject:MakeColor( 42, 253, 252)];
-
- [m_colors addObject:MakeColor(140, 48, 40)];
- [m_colors addObject:MakeColor(136, 51, 136)];
- [m_colors addObject:MakeColor(135, 52, 177)];
- [m_colors addObject:MakeColor(134, 52, 217)];
- [m_colors addObject:MakeColor(135, 56, 248)];
- [m_colors addObject:MakeColor(134, 53, 255)];
-
- [m_colors addObject:MakeColor(125, 125, 38)];
- [m_colors addObject:MakeColor(124, 125, 125)];
- [m_colors addObject:MakeColor(122, 124, 166)];
- [m_colors addObject:MakeColor(123, 124, 207)];
- [m_colors addObject:MakeColor(123, 122, 247)];
- [m_colors addObject:MakeColor(124, 121, 255)];
-
- [m_colors addObject:MakeColor(119, 160, 35)];
- [m_colors addObject:MakeColor(117, 160, 120)];
- [m_colors addObject:MakeColor(117, 160, 160)];
- [m_colors addObject:MakeColor(115, 159, 201)];
- [m_colors addObject:MakeColor(116, 158, 240)];
- [m_colors addObject:MakeColor(117, 157, 255)];
-
- [m_colors addObject:MakeColor(113, 195, 39)];
- [m_colors addObject:MakeColor(110, 194, 114)];
- [m_colors addObject:MakeColor(111, 194, 154)];
- [m_colors addObject:MakeColor(108, 194, 194)];
- [m_colors addObject:MakeColor(109, 193, 234)];
- [m_colors addObject:MakeColor(108, 192, 255)];
-
- [m_colors addObject:MakeColor(105, 228, 30)];
- [m_colors addObject:MakeColor(103, 228, 109)];
- [m_colors addObject:MakeColor(105, 228, 148)];
- [m_colors addObject:MakeColor(100, 227, 188)];
- [m_colors addObject:MakeColor( 99, 227, 227)];
- [m_colors addObject:MakeColor( 99, 226, 253)];
-
- [m_colors addObject:MakeColor( 92, 253, 34)];
- [m_colors addObject:MakeColor( 96, 253, 103)];
- [m_colors addObject:MakeColor( 97, 253, 142)];
- [m_colors addObject:MakeColor( 88, 253, 182)];
- [m_colors addObject:MakeColor( 93, 253, 221)];
- [m_colors addObject:MakeColor( 88, 254, 251)];
-
- [m_colors addObject:MakeColor(177, 53, 34)];
- [m_colors addObject:MakeColor(174, 54, 131)];
- [m_colors addObject:MakeColor(172, 55, 172)];
- [m_colors addObject:MakeColor(171, 57, 213)];
- [m_colors addObject:MakeColor(170, 55, 249)];
- [m_colors addObject:MakeColor(170, 57, 255)];
-
- [m_colors addObject:MakeColor(165, 123, 37)];
- [m_colors addObject:MakeColor(163, 123, 123)];
- [m_colors addObject:MakeColor(162, 123, 164)];
- [m_colors addObject:MakeColor(161, 122, 205)];
- [m_colors addObject:MakeColor(161, 121, 241)];
- [m_colors addObject:MakeColor(161, 121, 255)];
-
- [m_colors addObject:MakeColor(158, 159, 33)];
- [m_colors addObject:MakeColor(157, 158, 118)];
- [m_colors addObject:MakeColor(157, 158, 159)];
- [m_colors addObject:MakeColor(155, 157, 199)];
- [m_colors addObject:MakeColor(155, 157, 239)];
- [m_colors addObject:MakeColor(154, 156, 255)];
-
- [m_colors addObject:MakeColor(152, 193, 40)];
- [m_colors addObject:MakeColor(151, 193, 113)];
- [m_colors addObject:MakeColor(150, 193, 153)];
- [m_colors addObject:MakeColor(150, 192, 193)];
- [m_colors addObject:MakeColor(148, 192, 232)];
- [m_colors addObject:MakeColor(149, 191, 253)];
-
- [m_colors addObject:MakeColor(146, 227, 28)];
- [m_colors addObject:MakeColor(144, 227, 108)];
- [m_colors addObject:MakeColor(144, 227, 147)];
- [m_colors addObject:MakeColor(144, 227, 187)];
- [m_colors addObject:MakeColor(142, 226, 227)];
- [m_colors addObject:MakeColor(142, 225, 252)];
-
- [m_colors addObject:MakeColor(138, 253, 36)];
- [m_colors addObject:MakeColor(137, 253, 102)];
- [m_colors addObject:MakeColor(136, 253, 141)];
- [m_colors addObject:MakeColor(138, 254, 181)];
- [m_colors addObject:MakeColor(135, 255, 220)];
- [m_colors addObject:MakeColor(133, 255, 250)];
-
- [m_colors addObject:MakeColor(214, 57, 30)];
- [m_colors addObject:MakeColor(211, 59, 126)];
- [m_colors addObject:MakeColor(209, 57, 168)];
- [m_colors addObject:MakeColor(208, 55, 208)];
- [m_colors addObject:MakeColor(207, 58, 247)];
- [m_colors addObject:MakeColor(206, 61, 255)];
-
- [m_colors addObject:MakeColor(204, 121, 32)];
- [m_colors addObject:MakeColor(202, 121, 121)];
- [m_colors addObject:MakeColor(201, 121, 161)];
- [m_colors addObject:MakeColor(200, 120, 202)];
- [m_colors addObject:MakeColor(200, 120, 241)];
- [m_colors addObject:MakeColor(198, 119, 255)];
-
- [m_colors addObject:MakeColor(198, 157, 37)];
- [m_colors addObject:MakeColor(196, 157, 116)];
- [m_colors addObject:MakeColor(195, 156, 157)];
- [m_colors addObject:MakeColor(195, 156, 197)];
- [m_colors addObject:MakeColor(194, 155, 236)];
- [m_colors addObject:MakeColor(193, 155, 255)];
-
- [m_colors addObject:MakeColor(191, 192, 36)];
- [m_colors addObject:MakeColor(190, 191, 112)];
- [m_colors addObject:MakeColor(189, 191, 152)];
- [m_colors addObject:MakeColor(189, 191, 191)];
- [m_colors addObject:MakeColor(188, 190, 230)];
- [m_colors addObject:MakeColor(187, 190, 253)];
-
- [m_colors addObject:MakeColor(185, 226, 28)];
- [m_colors addObject:MakeColor(184, 226, 106)];
- [m_colors addObject:MakeColor(183, 225, 146)];
- [m_colors addObject:MakeColor(183, 225, 186)];
- [m_colors addObject:MakeColor(182, 225, 225)];
- [m_colors addObject:MakeColor(181, 224, 252)];
-
- [m_colors addObject:MakeColor(178, 255, 35)];
- [m_colors addObject:MakeColor(178, 255, 101)];
- [m_colors addObject:MakeColor(177, 254, 141)];
- [m_colors addObject:MakeColor(176, 254, 180)];
- [m_colors addObject:MakeColor(176, 254, 220)];
- [m_colors addObject:MakeColor(175, 253, 249)];
-
- [m_colors addObject:MakeColor(247, 56, 30)];
- [m_colors addObject:MakeColor(245, 57, 122)];
- [m_colors addObject:MakeColor(243, 59, 163)];
- [m_colors addObject:MakeColor(244, 60, 204)];
- [m_colors addObject:MakeColor(242, 59, 241)];
- [m_colors addObject:MakeColor(240, 55, 255)];
-
- [m_colors addObject:MakeColor(241, 119, 36)];
- [m_colors addObject:MakeColor(240, 120, 118)];
- [m_colors addObject:MakeColor(238, 119, 158)];
- [m_colors addObject:MakeColor(237, 119, 199)];
- [m_colors addObject:MakeColor(237, 118, 238)];
- [m_colors addObject:MakeColor(236, 118, 255)];
-
- [m_colors addObject:MakeColor(235, 154, 36)];
- [m_colors addObject:MakeColor(235, 154, 114)];
- [m_colors addObject:MakeColor(234, 154, 154)];
- [m_colors addObject:MakeColor(232, 154, 194)];
- [m_colors addObject:MakeColor(232, 153, 234)];
- [m_colors addObject:MakeColor(232, 153, 255)];
-
- [m_colors addObject:MakeColor(230, 190, 30)];
- [m_colors addObject:MakeColor(229, 189, 110)];
- [m_colors addObject:MakeColor(228, 189, 150)];
- [m_colors addObject:MakeColor(227, 189, 190)];
- [m_colors addObject:MakeColor(227, 189, 229)];
- [m_colors addObject:MakeColor(226, 188, 255)];
-
- [m_colors addObject:MakeColor(224, 224, 35)];
- [m_colors addObject:MakeColor(223, 224, 105)];
- [m_colors addObject:MakeColor(222, 224, 144)];
- [m_colors addObject:MakeColor(222, 223, 184)];
- [m_colors addObject:MakeColor(222, 223, 224)];
- [m_colors addObject:MakeColor(220, 223, 253)];
-
- [m_colors addObject:MakeColor(217, 253, 28)];
- [m_colors addObject:MakeColor(217, 253, 99)];
- [m_colors addObject:MakeColor(216, 252, 139)];
- [m_colors addObject:MakeColor(216, 252, 179)];
- [m_colors addObject:MakeColor(215, 252, 218)];
- [m_colors addObject:MakeColor(215, 251, 250)];
-
- [m_colors addObject:MakeColor(255, 61, 30)];
- [m_colors addObject:MakeColor(255, 60, 118)];
- [m_colors addObject:MakeColor(255, 58, 159)];
- [m_colors addObject:MakeColor(255, 56, 199)];
- [m_colors addObject:MakeColor(255, 55, 238)];
- [m_colors addObject:MakeColor(255, 59, 255)];
-
- [m_colors addObject:MakeColor(255, 117, 29)];
- [m_colors addObject:MakeColor(255, 117, 115)];
- [m_colors addObject:MakeColor(255, 117, 155)];
- [m_colors addObject:MakeColor(255, 117, 195)];
- [m_colors addObject:MakeColor(255, 116, 235)];
- [m_colors addObject:MakeColor(254, 116, 255)];
-
- [m_colors addObject:MakeColor(255, 152, 27)];
- [m_colors addObject:MakeColor(255, 152, 111)];
- [m_colors addObject:MakeColor(254, 152, 152)];
- [m_colors addObject:MakeColor(255, 152, 192)];
- [m_colors addObject:MakeColor(254, 151, 231)];
- [m_colors addObject:MakeColor(253, 151, 253)];
-
- [m_colors addObject:MakeColor(255, 187, 33)];
- [m_colors addObject:MakeColor(253, 187, 107)];
- [m_colors addObject:MakeColor(252, 187, 148)];
- [m_colors addObject:MakeColor(253, 187, 187)];
- [m_colors addObject:MakeColor(254, 187, 227)];
- [m_colors addObject:MakeColor(252, 186, 252)];
-
- [m_colors addObject:MakeColor(252, 222, 34)];
- [m_colors addObject:MakeColor(251, 222, 103)];
- [m_colors addObject:MakeColor(251, 222, 143)];
- [m_colors addObject:MakeColor(250, 222, 182)];
- [m_colors addObject:MakeColor(251, 221, 222)];
- [m_colors addObject:MakeColor(252, 221, 252)];
-
- [m_colors addObject:MakeColor(251, 252, 15)];
- [m_colors addObject:MakeColor(251, 252, 97)];
- [m_colors addObject:MakeColor(249, 252, 137)];
- [m_colors addObject:MakeColor(247, 252, 177)];
- [m_colors addObject:MakeColor(247, 253, 217)];
- [m_colors addObject:MakeColor(254, 255, 255)];
-
- // Grayscale
-
- [m_colors addObject:MakeColor( 52, 53, 53)];
- [m_colors addObject:MakeColor( 57, 58, 59)];
- [m_colors addObject:MakeColor( 66, 67, 67)];
- [m_colors addObject:MakeColor( 75, 76, 76)];
- [m_colors addObject:MakeColor( 83, 85, 85)];
- [m_colors addObject:MakeColor( 92, 93, 94)];
-
- [m_colors addObject:MakeColor(101, 102, 102)];
- [m_colors addObject:MakeColor(109, 111, 111)];
- [m_colors addObject:MakeColor(118, 119, 119)];
- [m_colors addObject:MakeColor(126, 127, 128)];
- [m_colors addObject:MakeColor(134, 136, 136)];
- [m_colors addObject:MakeColor(143, 144, 145)];
-
- [m_colors addObject:MakeColor(151, 152, 153)];
- [m_colors addObject:MakeColor(159, 161, 161)];
- [m_colors addObject:MakeColor(167, 169, 169)];
- [m_colors addObject:MakeColor(176, 177, 177)];
- [m_colors addObject:MakeColor(184, 185, 186)];
- [m_colors addObject:MakeColor(192, 193, 194)];
-
- [m_colors addObject:MakeColor(200, 201, 202)];
- [m_colors addObject:MakeColor(208, 209, 210)];
- [m_colors addObject:MakeColor(216, 218, 218)];
- [m_colors addObject:MakeColor(224, 226, 226)];
- [m_colors addObject:MakeColor(232, 234, 234)];
- [m_colors addObject:MakeColor(240, 242, 242)];
-
- // Color codes
-
- int index = 16;
-
- while (index < 256)
- {
- [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]];
- [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]];
-
- index++;
- }
-
- #else
-
- // Standard xterm colors:
- //
- // These are the colors xterm shells use in xterm-256color mode.
- // In this mode, the shell supports 256 different colors, specified by 256 color codes.
- //
- // The first 16 color codes map to the original 16 color codes supported by the earlier xterm-color mode.
- // These are generally configurable, and thus we ignore them for the purposes of mapping,
- // as we can't rely on them being constant. They are largely duplicated anyway.
- //
- // The next 216 color codes are designed to run the spectrum, with several shades of every color.
- // The last 24 color codes represent a grayscale.
- //
- // While the color codes are standardized, the actual RGB values for each color code is not.
- // However most standard xterms follow a well known color chart,
- // which can easily be calculated using the simple formula below.
- //
- // More information about ansi escape codes can be found online.
- // http://en.wikipedia.org/wiki/ANSI_escape_code
-
- int index = 16;
-
- int r; // red
- int g; // green
- int b; // blue
-
- int ri; // r increment
- int gi; // g increment
- int bi; // b increment
-
- // Calculate xterm colors (using standard algorithm)
-
- int r = 0;
- int g = 0;
- int b = 0;
-
- for (ri = 0; ri < 6; ri++)
- {
- r = (ri == 0) ? 0 : 95 + (40 * (ri - 1));
-
- for (gi = 0; gi < 6; gi++)
- {
- g = (gi == 0) ? 0 : 95 + (40 * (gi - 1));
-
- for (bi = 0; bi < 6; bi++)
- {
- b = (bi == 0) ? 0 : 95 + (40 * (bi - 1));
-
- [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]];
- [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]];
- [m_colors addObject:MakeColor(r, g, b)];
-
- index++;
- }
- }
- }
-
- // Calculate xterm grayscale (using standard algorithm)
-
- r = 8;
- g = 8;
- b = 8;
-
- while (index < 256)
- {
- [m_codes_fg addObject:[NSString stringWithFormat:@"38;5;%dm", index]];
- [m_codes_bg addObject:[NSString stringWithFormat:@"48;5;%dm", index]];
- [m_colors addObject:MakeColor(r, g, b)];
-
- r += 10;
- g += 10;
- b += 10;
-
- index++;
- }
-
- #endif
-
- codes_fg = [m_codes_fg copy];
- codes_bg = [m_codes_bg copy];
- colors = [m_colors copy];
-
- NSAssert([codes_fg count] == [codes_bg count], @"Invalid colors/codes array(s)");
- NSAssert([codes_fg count] == [colors count], @"Invalid colors/codes array(s)");
-}
-
-+ (void)getRed:(CGFloat *)rPtr green:(CGFloat *)gPtr blue:(CGFloat *)bPtr fromColor:(OSColor *)color
-{
- #if TARGET_OS_IPHONE
-
- // iOS
-
- if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)])
- {
- [color getRed:rPtr green:gPtr blue:bPtr alpha:NULL];
- }
- else
- {
- // The method getRed:green:blue:alpha: was only available starting iOS 5.
- // So in iOS 4 and earlier, we have to jump through hoops.
-
- CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
-
- unsigned char pixel[4];
- CGContextRef context = CGBitmapContextCreate(&pixel, 1, 1, 8, 4, rgbColorSpace, kCGImageAlphaNoneSkipLast);
-
- CGContextSetFillColorWithColor(context, [color CGColor]);
- CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
-
- if (rPtr) { *rPtr = pixel[0] / 255.0f; }
- if (gPtr) { *gPtr = pixel[1] / 255.0f; }
- if (bPtr) { *bPtr = pixel[2] / 255.0f; }
-
- CGContextRelease(context);
- CGColorSpaceRelease(rgbColorSpace);
- }
-
- #else
-
- // Mac OS X
-
- [color getRed:rPtr green:gPtr blue:bPtr alpha:NULL];
-
- #endif
-}
-
-/**
- * Maps the given color to the closest available color supported by the shell.
- * The shell may support 256 colors, or only 16.
- *
- * This method loops through the known supported color set, and calculates the closest color.
- * The array index of that color, within the colors array, is then returned.
- * This array index may also be used as the index within the codes_fg and codes_bg arrays.
-**/
-+ (NSUInteger)codeIndexForColor:(OSColor *)inColor
-{
- CGFloat inR, inG, inB;
- [self getRed:&inR green:&inG blue:&inB fromColor:inColor];
-
- NSUInteger bestIndex = 0;
- CGFloat lowestDistance = 100.0f;
-
- NSUInteger i = 0;
- for (OSColor *color in colors)
- {
- // Calculate Euclidean distance (lower value means closer to given color)
-
- CGFloat r, g, b;
- [self getRed:&r green:&g blue:&b fromColor:color];
-
- #if CGFLOAT_IS_DOUBLE
- CGFloat distance = sqrt(pow(r-inR, 2.0) + pow(g-inG, 2.0) + pow(b-inB, 2.0));
- #else
- CGFloat distance = sqrtf(powf(r-inR, 2.0f) + powf(g-inG, 2.0f) + powf(b-inB, 2.0f));
- #endif
-
- NSLogVerbose(@"DDTTYLogger: %3lu : %.3f,%.3f,%.3f & %.3f,%.3f,%.3f = %.6f",
- (unsigned long)i, inR, inG, inB, r, g, b, distance);
-
- if (distance < lowestDistance)
- {
- bestIndex = i;
- lowestDistance = distance;
-
- NSLogVerbose(@"DDTTYLogger: New best index = %lu", (unsigned long)bestIndex);
- }
-
- i++;
- }
-
- return bestIndex;
-}
-
-/**
- * The runtime sends initialize to each class in a program exactly one time just before the class,
- * or any class that inherits from it, is sent its first message from within the program. (Thus the
- * method may never be invoked if the class is not used.) The runtime sends the initialize message to
- * classes in a thread-safe manner. Superclasses receive this message before their subclasses.
- *
- * This method may also be called directly (assumably by accident), hence the safety mechanism.
-**/
-+ (void)initialize
-{
- static BOOL initialized = NO;
- if (!initialized)
- {
- initialized = YES;
-
- isaTTY = isatty(STDERR_FILENO);
-
- char *term = getenv("TERM");
- if (term)
- {
- if (strcasestr(term, "color") != NULL)
- {
- isaColorTTY = YES;
- isaColor256TTY = (strcasestr(term, "256") != NULL);
-
- if (isaColor256TTY)
- [self initialize_colors_256];
- else
- [self initialize_colors_16];
- }
- }
- else
- {
- // Xcode does NOT natively support colors in the Xcode debugging console.
- // You'll need to install the XcodeColors plugin to see colors in the Xcode console.
- //
- // PS - Please read the header file before diving into the source code.
-
- char *xcode_colors = getenv("XcodeColors");
- if (xcode_colors && (strcmp(xcode_colors, "YES") == 0))
- {
- isaXcodeColorTTY = YES;
- }
- }
-
- NSLogInfo(@"DDTTYLogger: isaColorTTY = %@", (isaColorTTY ? @"YES" : @"NO"));
- NSLogInfo(@"DDTTYLogger: isaColor256TTY: %@", (isaColor256TTY ? @"YES" : @"NO"));
- NSLogInfo(@"DDTTYLogger: isaXcodeColorTTY: %@", (isaXcodeColorTTY ? @"YES" : @"NO"));
-
- sharedInstance = [[DDTTYLogger alloc] init];
- }
-}
-
-+ (DDTTYLogger *)sharedInstance
-{
- return sharedInstance;
-}
-
-- (instancetype)init
-{
- if (sharedInstance != nil)
- {
- return nil;
- }
-
- if ((self = [super init]))
- {
- if (isaTTY)
- {
- calendar = [NSCalendar autoupdatingCurrentCalendar];
-
- calendarUnitFlags = 0;
- calendarUnitFlags |= NSCalendarUnitYear;
- calendarUnitFlags |= NSCalendarUnitMonth;
- calendarUnitFlags |= NSCalendarUnitDay;
- calendarUnitFlags |= NSCalendarUnitHour;
- calendarUnitFlags |= NSCalendarUnitMinute;
- calendarUnitFlags |= NSCalendarUnitSecond;
-
- // Initialze 'app' variable (char *)
-
- appName = [[NSProcessInfo processInfo] processName];
-
- appLen = [appName lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
- app = (char *)malloc(appLen + 1);
-
- [appName getCString:app maxLength:(appLen+1) encoding:NSUTF8StringEncoding];
-
- // Initialize 'pid' variable (char *)
-
- processID = [NSString stringWithFormat:@"%i", (int)getpid()];
-
- pidLen = [processID lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
- pid = (char *)malloc(pidLen + 1);
-
- [processID getCString:pid maxLength:(pidLen+1) encoding:NSUTF8StringEncoding];
-
- // Initialize color stuff
-
- colorsEnabled = NO;
- colorProfilesArray = [[NSMutableArray alloc] initWithCapacity:8];
- colorProfilesDict = [[NSMutableDictionary alloc] initWithCapacity:8];
- }
- }
- return self;
-}
-
-- (void)loadDefaultColorProfiles
-{
- [self setForegroundColor:MakeColor(214, 57, 30) backgroundColor:nil forFlag:LOG_FLAG_ERROR];
- [self setForegroundColor:MakeColor(204, 121, 32) backgroundColor:nil forFlag:LOG_FLAG_WARN];
-}
-
-- (BOOL)colorsEnabled
-{
- // The design of this method is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- return colorsEnabled;
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- __block BOOL result;
-
- dispatch_sync(globalLoggingQueue, ^{
- dispatch_sync(loggerQueue, ^{
- result = colorsEnabled;
- });
- });
-
- return result;
- }
-}
-
-- (void)setColorsEnabled:(BOOL)newColorsEnabled
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- colorsEnabled = newColorsEnabled;
-
- if ([colorProfilesArray count] == 0) {
- [self loadDefaultColorProfiles];
- }
- }};
-
- // The design of the setter logic below is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (void)setForegroundColor:(OSColor *)txtColor backgroundColor:(OSColor *)bgColor forFlag:(int)mask
-{
- [self setForegroundColor:txtColor backgroundColor:bgColor forFlag:mask context:0];
-}
-
-- (void)setForegroundColor:(OSColor *)txtColor backgroundColor:(OSColor *)bgColor forFlag:(int)mask context:(int)ctxt
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- DDTTYLoggerColorProfile *newColorProfile =
- [[DDTTYLoggerColorProfile alloc] initWithForegroundColor:txtColor
- backgroundColor:bgColor
- flag:mask
- context:ctxt];
-
- NSLogInfo(@"DDTTYLogger: newColorProfile: %@", newColorProfile);
-
- NSUInteger i = 0;
- for (DDTTYLoggerColorProfile *colorProfile in colorProfilesArray)
- {
- if ((colorProfile->mask == mask) && (colorProfile->context == ctxt))
- {
- break;
- }
-
- i++;
- }
-
- if (i < [colorProfilesArray count])
- colorProfilesArray[i] = newColorProfile;
- else
- [colorProfilesArray addObject:newColorProfile];
- }};
-
- // The design of the setter logic below is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (void)setForegroundColor:(OSColor *)txtColor backgroundColor:(OSColor *)bgColor forTag:(id )tag
-{
- NSAssert([(id )tag conformsToProtocol:@protocol(NSCopying)], @"Invalid tag");
-
- dispatch_block_t block = ^{ @autoreleasepool {
-
- DDTTYLoggerColorProfile *newColorProfile =
- [[DDTTYLoggerColorProfile alloc] initWithForegroundColor:txtColor
- backgroundColor:bgColor
- flag:0
- context:0];
-
- NSLogInfo(@"DDTTYLogger: newColorProfile: %@", newColorProfile);
-
- colorProfilesDict[tag] = newColorProfile;
- }};
-
- // The design of the setter logic below is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (void)clearColorsForFlag:(int)mask
-{
- [self clearColorsForFlag:mask context:0];
-}
-
-- (void)clearColorsForFlag:(int)mask context:(int)context
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- NSUInteger i = 0;
- for (DDTTYLoggerColorProfile *colorProfile in colorProfilesArray)
- {
- if ((colorProfile->mask == mask) && (colorProfile->context == context))
- {
- break;
- }
-
- i++;
- }
-
- if (i < [colorProfilesArray count])
- {
- [colorProfilesArray removeObjectAtIndex:i];
- }
- }};
-
- // The design of the setter logic below is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (void)clearColorsForTag:(id )tag
-{
- NSAssert([(id )tag conformsToProtocol:@protocol(NSCopying)], @"Invalid tag");
-
- dispatch_block_t block = ^{ @autoreleasepool {
-
- [colorProfilesDict removeObjectForKey:tag];
- }};
-
- // The design of the setter logic below is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (void)clearColorsForAllFlags
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- [colorProfilesArray removeAllObjects];
- }};
-
- // The design of the setter logic below is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (void)clearColorsForAllTags
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- [colorProfilesDict removeAllObjects];
- }};
-
- // The design of the setter logic below is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (void)clearAllColors
-{
- dispatch_block_t block = ^{ @autoreleasepool {
-
- [colorProfilesArray removeAllObjects];
- [colorProfilesDict removeAllObjects];
- }};
-
- // The design of the setter logic below is taken from the DDAbstractLogger implementation.
- // For documentation please refer to the DDAbstractLogger implementation.
-
- dispatch_queue_t currentQueue = dispatch_get_current_queue();
- if (currentQueue == loggerQueue)
- {
- block();
- }
- else
- {
- dispatch_queue_t globalLoggingQueue = [DDLog loggingQueue];
- NSAssert(currentQueue != globalLoggingQueue, @"Core architecture requirement failure");
-
- dispatch_async(globalLoggingQueue, ^{
- dispatch_async(loggerQueue, block);
- });
- }
-}
-
-- (void)logMessage:(DDLogMessage *)logMessage
-{
- if (!isaTTY) return;
-
- NSString *logMsg = logMessage->logMsg;
- BOOL isFormatted = NO;
-
- if (formatter)
- {
- logMsg = [formatter formatLogMessage:logMessage];
- isFormatted = logMsg != logMessage->logMsg;
- }
-
- if (logMsg)
- {
- // Search for a color profile associated with the log message
-
- DDTTYLoggerColorProfile *colorProfile = nil;
-
- if (colorsEnabled)
- {
- if (logMessage->tag)
- {
- colorProfile = colorProfilesDict[logMessage->tag];
- }
- if (colorProfile == nil)
- {
- for (DDTTYLoggerColorProfile *cp in colorProfilesArray)
- {
- if ((logMessage->logFlag & cp->mask) && (logMessage->logContext == cp->context))
- {
- colorProfile = cp;
- break;
- }
- }
- }
- }
-
- // Convert log message to C string.
- //
- // We use the stack instead of the heap for speed if possible.
- // But we're extra cautious to avoid a stack overflow.
-
- NSUInteger msgLen = [logMsg lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
- const BOOL useStack = msgLen < (1024 * 4);
-
- char msgStack[useStack ? (msgLen + 1) : 1]; // Analyzer doesn't like zero-size array, hence the 1
- char *msg = useStack ? msgStack : (char *)malloc(msgLen + 1);
-
- [logMsg getCString:msg maxLength:(msgLen + 1) encoding:NSUTF8StringEncoding];
-
- // Write the log message to STDERR
-
- if (isFormatted)
- {
- // The log message has already been formatted.
-
- struct iovec v[4];
-
- if (colorProfile)
- {
- v[0].iov_base = colorProfile->fgCode;
- v[0].iov_len = colorProfile->fgCodeLen;
-
- v[3].iov_base = colorProfile->resetCode;
- v[3].iov_len = colorProfile->resetCodeLen;
- }
- else
- {
- v[0].iov_base = "";
- v[0].iov_len = 0;
-
- v[3].iov_base = "";
- v[3].iov_len = 0;
- }
-
- v[1].iov_base = (char *)msg;
- v[1].iov_len = msgLen;
-
- v[2].iov_base = "\n";
- v[2].iov_len = (msg[msgLen] == '\n') ? 0 : 1;
-
- writev(STDERR_FILENO, v, 4);
- }
- else
- {
- // The log message is unformatted, so apply standard NSLog style formatting.
-
- int len;
-
- // Calculate timestamp.
- // The technique below is faster than using NSDateFormatter.
-
- NSDateComponents *components = [calendar components:calendarUnitFlags fromDate:logMessage->timestamp];
-
- NSTimeInterval epoch = [logMessage->timestamp timeIntervalSinceReferenceDate];
- int milliseconds = (int)((epoch - floor(epoch)) * 1000);
-
- char ts[24];
- len = snprintf(ts, 24, "%04ld-%02ld-%02ld %02ld:%02ld:%02ld:%03d", // yyyy-MM-dd HH:mm:ss:SSS
- (long)components.year,
- (long)components.month,
- (long)components.day,
- (long)components.hour,
- (long)components.minute,
- (long)components.second, milliseconds);
-
- size_t tsLen = MIN(24-1, len);
-
- // Calculate thread ID
- //
- // How many characters do we need for the thread id?
- // logMessage->machThreadID is of type mach_port_t, which is an unsigned int.
- //
- // 1 hex char = 4 bits
- // 8 hex chars for 32 bit, plus ending '\0' = 9
-
- char tid[9];
- len = snprintf(tid, 9, "%x", logMessage->machThreadID);
-
- size_t tidLen = MIN(9-1, len);
-
- // Here is our format: "%s %s[%i:%s] %s", timestamp, appName, processID, threadID, logMsg
-
- struct iovec v[12];
-
- if (colorProfile)
- {
- v[0].iov_base = colorProfile->fgCode;
- v[0].iov_len = colorProfile->fgCodeLen;
-
- v[11].iov_base = colorProfile->resetCode;
- v[11].iov_len = colorProfile->resetCodeLen;
- }
- else
- {
- v[0].iov_base = "";
- v[0].iov_len = 0;
-
- v[11].iov_base = "";
- v[11].iov_len = 0;
- }
-
- v[1].iov_base = ts;
- v[1].iov_len = tsLen;
-
- v[2].iov_base = " ";
- v[2].iov_len = 1;
-
- v[3].iov_base = app;
- v[3].iov_len = appLen;
-
- v[4].iov_base = "[";
- v[4].iov_len = 1;
-
- v[5].iov_base = pid;
- v[5].iov_len = pidLen;
-
- v[6].iov_base = ":";
- v[6].iov_len = 1;
-
- v[7].iov_base = tid;
- v[7].iov_len = MIN((size_t)8, tidLen); // snprintf doesn't return what you might think
-
- v[8].iov_base = "] ";
- v[8].iov_len = 2;
-
- v[9].iov_base = (char *)msg;
- v[9].iov_len = msgLen;
-
- v[10].iov_base = "\n";
- v[10].iov_len = (msg[msgLen] == '\n') ? 0 : 1;
-
- writev(STDERR_FILENO, v, 12);
- }
-
- if (!useStack) {
- free(msg);
- }
- }
-}
-
-- (NSString *)loggerName
-{
- return @"cocoa.lumberjack.ttyLogger";
-}
-
-@end
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-@implementation DDTTYLoggerColorProfile
-
-- (instancetype)initWithForegroundColor:(OSColor *)fgColor backgroundColor:(OSColor *)bgColor flag:(int)aMask context:(int)ctxt
-{
- if ((self = [super init]))
- {
- mask = aMask;
- context = ctxt;
-
- CGFloat r, g, b;
-
- if (fgColor)
- {
- [DDTTYLogger getRed:&r green:&g blue:&b fromColor:fgColor];
-
- fg_r = (uint8_t)(r * 255.0f);
- fg_g = (uint8_t)(g * 255.0f);
- fg_b = (uint8_t)(b * 255.0f);
- }
- if (bgColor)
- {
- [DDTTYLogger getRed:&r green:&g blue:&b fromColor:bgColor];
-
- bg_r = (uint8_t)(r * 255.0f);
- bg_g = (uint8_t)(g * 255.0f);
- bg_b = (uint8_t)(b * 255.0f);
- }
-
- if (fgColor && isaColorTTY)
- {
- // Map foreground color to closest available shell color
-
- fgCodeIndex = [DDTTYLogger codeIndexForColor:fgColor];
- fgCodeRaw = codes_fg[fgCodeIndex];
-
- NSString *escapeSeq = @"\033[";
-
- NSUInteger len1 = [escapeSeq lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
- NSUInteger len2 = [fgCodeRaw lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-
- [escapeSeq getCString:(fgCode) maxLength:(len1+1) encoding:NSUTF8StringEncoding];
- [fgCodeRaw getCString:(fgCode+len1) maxLength:(len2+1) encoding:NSUTF8StringEncoding];
-
- fgCodeLen = len1+len2;
- }
- else if (fgColor && isaXcodeColorTTY)
- {
- // Convert foreground color to color code sequence
-
- const char *escapeSeq = XCODE_COLORS_ESCAPE_SEQ;
-
- int result = snprintf(fgCode, 24, "%sfg%u,%u,%u;", escapeSeq, fg_r, fg_g, fg_b);
- fgCodeLen = MIN(result, (24-1));
- }
- else
- {
- // No foreground color or no color support
-
- fgCode[0] = '\0';
- fgCodeLen = 0;
- }
-
- if (bgColor && isaColorTTY)
- {
- // Map background color to closest available shell color
-
- bgCodeIndex = [DDTTYLogger codeIndexForColor:bgColor];
- bgCodeRaw = codes_bg[bgCodeIndex];
-
- NSString *escapeSeq = @"\033[";
-
- NSUInteger len1 = [escapeSeq lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
- NSUInteger len2 = [bgCodeRaw lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-
- [escapeSeq getCString:(bgCode) maxLength:(len1+1) encoding:NSUTF8StringEncoding];
- [bgCodeRaw getCString:(bgCode+len1) maxLength:(len2+1) encoding:NSUTF8StringEncoding];
-
- bgCodeLen = len1+len2;
- }
- else if (bgColor && isaXcodeColorTTY)
- {
- // Convert background color to color code sequence
-
- const char *escapeSeq = XCODE_COLORS_ESCAPE_SEQ;
-
- int result = snprintf(bgCode, 24, "%sbg%u,%u,%u;", escapeSeq, bg_r, bg_g, bg_b);
- bgCodeLen = MIN(result, (24-1));
- }
- else
- {
- // No background color or no color support
-
- bgCode[0] = '\0';
- bgCodeLen = 0;
- }
-
- if (isaColorTTY)
- {
- resetCodeLen = snprintf(resetCode, 8, "\033[0m");
- }
- else if (isaXcodeColorTTY)
- {
- resetCodeLen = snprintf(resetCode, 8, XCODE_COLORS_RESET);
- }
- else
- {
- resetCode[0] = '\0';
- resetCodeLen = 0;
- }
- }
- return self;
-}
-
-- (NSString *)description
-{
- return [NSString stringWithFormat:
- @"",
- self, mask, context, fg_r, fg_g, fg_b, bg_r, bg_g, bg_b, fgCodeRaw, bgCodeRaw];
-}
-
-@end
diff --git a/Tools/XcodeCapp/XcodeCapp/SettingsView.xib b/Tools/XcodeCapp/XcodeCapp/SettingsView.xib
index cbb0a9ae5..c1ee8516e 100644
--- a/Tools/XcodeCapp/XcodeCapp/SettingsView.xib
+++ b/Tools/XcodeCapp/XcodeCapp/SettingsView.xib
@@ -1,9 +1,9 @@
-
+
-
+
@@ -28,16 +28,15 @@
-
+
-
+
-
-
-
+
-
@@ -76,36 +71,32 @@
-
+
-
@@ -113,9 +104,8 @@
-
+
-
@@ -123,29 +113,17 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
@@ -156,21 +134,20 @@
-
+
-
+
-
+
-
-
+
@@ -190,128 +167,120 @@
-
-
-
+
-
-
+
-
-
+
-
-
+
-
+
-
-
+
-
+
-
-
+
-
+
-
-
+
-
+
-
-
+
-
+
-
-
+
-
+
-
-
+
-
+
-
-
+
-
-
+
-
+
+
+
+
+
+
+
+
+
-
-
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.m b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.m
index ffedcf1f4..8cc491b89 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProject.m
@@ -16,7 +16,9 @@ static NSDictionary* XCCCappuccinoProjectDefaultSettings;
static NSString * const XCCSlashReplacement = @"::";
static NSPredicate * XCCDirectoriesToIgnorePredicate = nil;
-static NSString * const XCCDirectoriesToIgnorePattern = @"^(?:Build|F(?:rameworks|oundation)|AppKit|Objective-J|(?:Browser|CommonJS)\\.environment|Resources|XcodeSupport|.+\\.xcodeproj)$";
+static NSPredicate * XCCXcodeCappNibToIgnorePredicate = nil;
+static NSString * const XCCDirectoriesToIgnorePattern = @"^(?:Build|F(?:rameworks|oundation)|AppKit|Objective-J|(?:Browser|CommonJS)\\.environment|XcodeSupport|.+\\.xcodeproj)$";
+static NSString * const XCCXcodeCappNibToIgnorePattern = @"^/Applications/XcodeCapp.app/.*$";
static NSArray *XCCCappuccinoProjectDefaultIgnoredPaths = nil;
@@ -51,6 +53,7 @@ NSString * const XCCCappuccinoProjectLastEventIDKey = @"XCCCappuccinoPro
NSNumber *appCompatibilityVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:XCCCompatibilityVersionKey];
XCCDirectoriesToIgnorePredicate = [NSPredicate predicateWithFormat:@"SELF matches %@", XCCDirectoriesToIgnorePattern];
+ XCCXcodeCappNibToIgnorePredicate = [NSPredicate predicateWithFormat:@"SELF matches %@", XCCXcodeCappNibToIgnorePattern];
XCCCappuccinoProjectDefaultSettings = @{XCCCompatibilityVersionKey: appCompatibilityVersion,
XCCCappuccinoProcessCappLintKey: @NO,
@@ -129,7 +132,11 @@ NSString * const XCCCappuccinoProjectLastEventIDKey = @"XCCCappuccinoPro
+ (BOOL)pathMatchesIgnoredPaths:(NSString*)aPath cappuccinoProjectIgnoredPathPredicates:(NSMutableArray*)cappuccinoProjectIgnoredPathPredicates
{
BOOL ignore = NO;
-
+
+ // This is a bit tricky, is to avoid to fetch nib of a compiled XcodeCapp
+ if ([XCCXcodeCappNibToIgnorePredicate evaluateWithObject:aPath])
+ return YES;
+
for (NSDictionary *ignoreInfo in cappuccinoProjectIgnoredPathPredicates)
{
BOOL matches = [ignoreInfo[@"predicate"] evaluateWithObject:aPath];
@@ -242,7 +249,7 @@ NSString * const XCCCappuccinoProjectLastEventIDKey = @"XCCCappuccinoPro
if (![self shouldIgnoreDirectoryNamed:filename] && ![self pathMatchesIgnoredPaths:path cappuccinoProjectIgnoredPathPredicates:aCappuccinoProject.ignoredPathPredicates])
{
- DDLogVerbose(@"Watching symlinked directory: %@", path);
+ NSLog(@"Watching symlinked directory: %@", path);
[pathsToWatch addObject:path];
}
@@ -393,11 +400,11 @@ NSString * const XCCCappuccinoProjectLastEventIDKey = @"XCCCappuccinoPro
NSArray *parsedPaths = [XCCCappuccinoProject parseIgnorePaths:ignoredPatterns basePath:self.projectPath];
[self.ignoredPathPredicates addObjectsFromArray:parsedPaths];
- DDLogVerbose(@"Content of xcodecapp-ignorepath correctly updated %@", self.ignoredPathPredicates);
+ NSLog(@"Content of xcodecapp-ignorepath correctly updated %@", self.ignoredPathPredicates);
}
@catch(NSException *exception)
{
- DDLogVerbose(@"Content of xcodecapp-ignorepath does not math the expected input");
+ NSLog(@"Content of xcodecapp-ignorepath does not math the expected input");
self.ignoredPathPredicates = [@[] mutableCopy];
}
}
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.m b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.m
index d49fca923..28aaff1b1 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectController.m
@@ -115,7 +115,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
if (![self _projectPathExists] || self.cappuccinoProject.status == XCCCappuccinoProjectStatusListening)
return;
- DDLogInfo(@"Start to listen project: %@", self.cappuccinoProject.projectPath);
+ NSLog(@"Start to listen project: %@", self.cappuccinoProject.projectPath);
[self _synchronizeXcodeSupport];
@@ -166,7 +166,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
- (void)_synchronizeXcodeSupport
{
- DDLogInfo(@"Synchronize project: %@", self.cappuccinoProject.projectPath);
+ NSLog(@"Synchronize project: %@", self.cappuccinoProject.projectPath);
[self _reinitializeProjectController];
[self _reinitializeTaskLauncher];
@@ -202,11 +202,11 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
if (projectCompatibilityVersion == nil)
{
- DDLogVerbose(@"No compatibility version in project");
+ NSLog(@"No compatibility version in project");
return NO;
}
- DDLogVerbose(@"XcodeCapp/project compatibility version: %0.1f/%0.1f", projectCompatibilityVersion.doubleValue, appCompatibilityVersion);
+ NSLog(@"XcodeCapp/project compatibility version: %0.1f/%0.1f", projectCompatibilityVersion.doubleValue, appCompatibilityVersion);
return projectCompatibilityVersion.doubleValue >= appCompatibilityVersion;
}
@@ -227,7 +227,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
[content writeToFile:pbxPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
- DDLogInfo(@"Xcode support project created at: %@", self.cappuccinoProject.XcodeProjectPath);
+ NSLog(@"Xcode support project created at: %@", self.cappuccinoProject.XcodeProjectPath);
}
- (void)_removeXcodeProject
@@ -246,7 +246,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
[self.cappuccinoProject saveSettings];
- DDLogInfo(@".XcodeSupport directory created at: %@", self.cappuccinoProject.supportPath);
+ NSLog(@".XcodeSupport directory created at: %@", self.cappuccinoProject.supportPath);
}
- (void)_removeXcodeSupportDirectory
@@ -311,7 +311,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
- (void)_updateXcodeSupportFilesWithModifiedPaths:(NSArray *)modifiedPaths
{
- DDLogVerbose(@"Modified files: %@", modifiedPaths);
+ NSLog(@"Modified files: %@", modifiedPaths);
for (NSString *path in modifiedPaths)
{
@@ -328,7 +328,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
- (void)_updateXcodeSupportFilesWithRenamedDirectories:(NSArray *)directories
{
- DDLogVerbose(@"Renamed directories: %@", directories);
+ NSLog(@"Renamed directories: %@", directories);
NSFileManager *fm = [NSFileManager defaultManager];
@@ -851,7 +851,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
FSEventStreamScheduleWithRunLoop(self->stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
FSEventStreamStart(self->stream);
- DDLogVerbose(@"FSEventStream started for paths: %@", pathsToWatch);
+ NSLog(@"FSEventStream started for paths: %@", pathsToWatch);
}
- (void)_stopFSEventStream
@@ -874,7 +874,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
self->stream = NULL;
- DDLogVerbose(@"FSEventStream stopped");
+ NSLog(@"FSEventStream stopped");
}
- (void)_handleFSEventsWithPaths:(NSArray *)paths flags:(const FSEventStreamEventFlags[])eventFlags ids:(const FSEventStreamEventId[])eventIds
@@ -895,7 +895,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
if (rootChanged || needRescan)
{
- DDLogVerbose(@"Watched path changed: %@", path);
+ NSLog(@"Watched path changed: %@", path);
[self _handleProjectPathChange:path];
return;
@@ -905,7 +905,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
if (isHistoryDoneSentinalEvent)
{
- DDLogVerbose(@"History done sentinal event");
+ NSLog(@"History done sentinal event");
continue;
}
@@ -913,7 +913,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
if (isMountEvent)
{
- DDLogVerbose(@"Volume %@: %@", (flags & kFSEventStreamEventFlagMount) ? @"mounted" : @"unmounted", path);
+ NSLog(@"Volume %@: %@", (flags & kFSEventStreamEventFlagMount) ? @"mounted" : @"unmounted", path);
continue;
}
@@ -936,7 +936,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
![XCCCappuccinoProject shouldIgnoreDirectoryNamed:path.lastPathComponent] &&
![XCCCappuccinoProject pathMatchesIgnoredPaths:path cappuccinoProjectIgnoredPathPredicates:self.cappuccinoProject.ignoredPathPredicates])
{
- DDLogVerbose(@"Renamed directory: %@", path);
+ NSLog(@"Renamed directory: %@", path);
[renamedDirectories addObject:path];
}
@@ -947,7 +947,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
(created || modified || renamed || removed || inodeMetaModified) &&
[XCCCappuccinoProject isSourceFile:path cappuccinoProject:self.cappuccinoProject])
{
- DDLogVerbose(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]);
+ NSLog(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]);
if ([fm fileExistsAtPath:path])
{
@@ -973,7 +973,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
}
else if ((isFile || isSymlink) && (renamed || removed) && !(modified || created) && [XCCCappuccinoProject isCibFile:path])
{
- DDLogVerbose(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]);
+ NSLog(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]);
// If a cib is deleted, mark its xib as needing update so the cib is regenerated
NSString *xibPath = [path.stringByDeletingPathExtension stringByAppendingPathExtension:@"xib"];
@@ -988,7 +988,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
(created || modified || renamed || removed || inodeMetaModified) &&
[XCCCappuccinoProject isXCCIgnoreFile:path cappuccinoProject:self.cappuccinoProject])
{
- DDLogVerbose(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]);
+ NSLog(@"FSEvent accepted: %@ (%@)", path, [XCCFSEventLogUtils dumpFSEventFlags:flags]);
[self.cappuccinoProject reloadXcodeCappIgnoreFile];
}
@@ -1137,7 +1137,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
- (void)reinitializeProjectFromSettings
{
- DDLogVerbose(@"Saving Cappuccino configuration project %@", self.cappuccinoProject.projectPath);
+ NSLog(@"Saving Cappuccino configuration project %@", self.cappuccinoProject.projectPath);
[self _cancelAllProjectRelatedOperations];
[self.cappuccinoProject saveSettings];
@@ -1152,7 +1152,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
if (previousStatus == XCCCappuccinoProjectStatusListening)
[self _startListeningToProject];
- DDLogVerbose(@"Cappuccino configuration project %@ has been saved", self.cappuccinoProject.projectPath);
+ NSLog(@"Cappuccino configuration project %@ has been saved", self.cappuccinoProject.projectPath);
}
- (void)applicationIsClosing
@@ -1199,7 +1199,7 @@ void fsevents_callback(ConstFSEventStreamRef streamRef, void *userData, size_t n
if (exists && isDirectory)
{
- DDLogVerbose(@"Opening Xcode project at: %@", self.cappuccinoProject.XcodeProjectPath);
+ NSLog(@"Opening Xcode project at: %@", self.cappuccinoProject.XcodeProjectPath);
isOpened = [[NSWorkspace sharedWorkspace] openFile:self.cappuccinoProject.XcodeProjectPath];
}
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m
index 524205f90..82da11a05 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m
@@ -93,6 +93,7 @@ static NSColor * XCCCappuccinoProjectDataViewColorError;
self->boxStatus.fillColor = XCCCappuccinoProjectDataViewColorStopped;
self->buttonSwitchStatus.image = self.backgroundStyle == NSBackgroundStyleDark ? [NSImage imageNamed:@"run-white"] : [NSImage imageNamed:@"run"];
self->operationsProgressIndicator.hidden = YES;
+ [self->operationsProgressIndicator stopAnimation:self];
break;
case XCCCappuccinoProjectStatusListening:
@@ -103,6 +104,7 @@ static NSColor * XCCCappuccinoProjectDataViewColorError;
{
self->operationsProgressIndicator.hidden = YES;
[self->operationsProgressIndicator setNeedsDisplay:YES];
+ [self->operationsProgressIndicator stopAnimation:self];
}
else if (self.controller.operationsTotal <= 4)
{
@@ -115,6 +117,7 @@ static NSColor * XCCCappuccinoProjectDataViewColorError;
self->operationsProgressIndicator.hidden = NO;
self->operationsProgressIndicator.indeterminate = NO;
self->operationsProgressIndicator.currentValue = self.controller.operationsProgress;
+ [self->operationsProgressIndicator startAnimation:self];
[self->operationsProgressIndicator setNeedsDisplay:YES];
}
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.h b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.h
index 52a79e8ae..0fcd79557 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.h
+++ b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.h
@@ -18,6 +18,7 @@
}
@property XCCCappuccinoProjectController *cappuccinoProjectController;
+@property BOOL selected;
- (void)selectItem:(id)anItem;
- (void)reload;
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.m b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.m
index 8fdf3ac89..10d71a5de 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCErrorsViewController.m
@@ -54,6 +54,9 @@
- (void)reload
{
+ if (!_selected)
+ return;
+
[self->errorOutlineView reloadData];
[self->errorOutlineView expandItem:nil expandChildren:YES];
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCMainController.m b/Tools/XcodeCapp/XcodeCapp/XCCMainController.m
index 31d074be0..847d9aa5e 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCMainController.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCMainController.m
@@ -125,13 +125,13 @@
- (void)_restoreLastSelectedProject
{
- DDLogVerbose(@"Start : selecting last selected project");
+ NSLog(@"Start : selecting last selected project");
NSString *lastSelectedProjectPath = [[NSUserDefaults standardUserDefaults] valueForKey:XCCUserDefaultsSelectedProjectPath];
[self _selectCappuccinoProjectControllerWithPath:lastSelectedProjectPath];
- DDLogVerbose(@"Stop : selecting last selected project");
+ NSLog(@"Stop : selecting last selected project");
}
- (void)_selectCappuccinoProjectControllerWithPath:(NSString*)aCappuccinoProjectPath
@@ -155,7 +155,7 @@
- (void)_restoreManagedProjects
{
- DDLogVerbose(@"restore managed projects");
+ NSLog(@"restore managed projects");
self.cappuccinoProjectControllers = [@[] mutableCopy];
NSArray *projectHistory = [[NSUserDefaults standardUserDefaults] arrayForKey:XCCUserDefaultsManagedProjects];
@@ -164,11 +164,11 @@
for (NSString *path in projectHistory)
{
- DDLogVerbose(@"Checking previously managed project at path: %@", path);
+ NSLog(@"Checking previously managed project at path: %@", path);
if (![fm fileExistsAtPath:path isDirectory:nil])
{
[missingProjects addObject:path];
- DDLogVerbose(@"Not found: project at path: %@", path);
+ NSLog(@"Not found: project at path: %@", path);
continue;
}
@@ -197,7 +197,7 @@
[controller switchProjectListeningStatus:self];
}
- DDLogVerbose(@"managed projects restored");
+ NSLog(@"managed projects restored");
}
- (void)_saveSelectedProject
@@ -344,11 +344,26 @@
[self _setTextColor:[NSColor colorWithCalibratedRed:107.0/255.0 green:148.0/255.0 blue:236.0/255.0 alpha:1.0] forButton:sender];
if (sender == self->buttonSelectConfigurationTab)
+ {
+ [_operationsViewController setSelected:NO];
+ [_errorsViewController setSelected:NO];
[self->tabViewProject selectTabViewItemAtIndex:0];
- if (sender == self->buttonSelectErrorsTab)
+ }
+ else if (sender == self->buttonSelectErrorsTab)
+ {
+ [_operationsViewController setSelected:NO];
+ [_errorsViewController setSelected:YES];
[self->tabViewProject selectTabViewItemAtIndex:1];
- if (sender == self->buttonSelectOperationsTab)
+ [_errorsViewController reload];
+ }
+ else if (sender == self->buttonSelectOperationsTab)
+ {
+ [_operationsViewController setSelected:YES];
+ [_errorsViewController setSelected:NO];
[self->tabViewProject selectTabViewItemAtIndex:2];
+ [_operationsViewController reload];
+ }
+
}
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.h b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.h
index 2b2cdc799..3353e3c2f 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.h
+++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.h
@@ -20,6 +20,7 @@
}
@property XCCCappuccinoProjectController *cappuccinoProjectController;
+@property BOOL selected;
- (void)reload;
- (IBAction)cancelAllOperations:(id)sender;
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.m b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.m
index 61d4e3747..8db695a22 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCOperationsViewController.m
@@ -56,6 +56,9 @@
- (void)reload
{
+ if (!_selected)
+ return;
+
[self->operationTableView reloadData];
[self _showMaskingView:![self.cappuccinoProjectController projectRelatedOperations].count];
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.m b/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.m
index 1a47b3122..bdddd1757 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCPPXOperation.m
@@ -69,7 +69,7 @@ NSString * const XCCPBXOperationDidEndNotification = @"XCCPbxCreationDidEndNotif
{
[self dispatchNotificationName:XCCPBXOperationDidStartNotification];
- DDLogVerbose(@"Pbx creation started: %@", self.cappuccinoProject.projectPath);
+ NSLog(@"Pbx creation started: %@", self.cappuccinoProject.projectPath);
@try
{
@@ -88,7 +88,7 @@ NSString * const XCCPBXOperationDidEndNotification = @"XCCPbxCreationDidEndNotif
shouldLaunchTask = YES;
}
- DDLogVerbose(@"PBX: path to %@ : %@", action, paths);
+ NSLog(@"PBX: path to %@ : %@", action, paths);
}
if (shouldLaunchTask)
@@ -109,7 +109,7 @@ NSString * const XCCPBXOperationDidEndNotification = @"XCCPbxCreationDidEndNotif
@catch (NSException *exception)
{
[self dispatchNotificationName:XCCPbxCreationGenerateErrorNotification];
- DDLogVerbose(@"Pbx creation failed: %@", exception);
+ NSLog(@"Pbx creation failed: %@", exception);
}
@finally
{
@@ -117,10 +117,11 @@ NSString * const XCCPBXOperationDidEndNotification = @"XCCPbxCreationDidEndNotif
self.completionBlock = ^{
[weakOperation dispatchNotificationName:XCCPBXOperationDidEndNotification];
+ [weakOperation setCompletionBlock:nil];
};
}
- DDLogVerbose(@"Pbx creation ended: %@", self.cappuccinoProject.projectPath);
+ NSLog(@"Pbx creation ended: %@", self.cappuccinoProject.projectPath);
}
@end
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.m b/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.m
index c16cfe606..7e02e0732 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCSourceProcessingOperation.m
@@ -91,7 +91,7 @@ NSString * const XCCNib2CibDidEndNotification = @"XCCNib2C
- (NSDictionary*)_launchTaskWithCommand:(NSString*)aCommand arguments:(NSArray*)arguments
{
- DDLogVerbose(@"Running processing task: %@ on file: %@", aCommand, self.sourcePath);
+ NSLog(@"Running processing task: %@ on file: %@", aCommand, self.sourcePath);
self->task = [self->taskLauncher taskWithCommand:aCommand arguments:arguments];
@@ -184,7 +184,7 @@ NSString * const XCCNib2CibDidEndNotification = @"XCCNib2C
- (void)main
{
- DDLogVerbose(@"Conversion started: %@", self.sourcePath);
+ NSLog(@"Conversion started: %@", self.sourcePath);
[self dispatchNotificationName:XCCConversionDidStartNotification];
@@ -211,7 +211,7 @@ NSString * const XCCNib2CibDidEndNotification = @"XCCNib2C
}
@catch (NSException *exception)
{
- DDLogVerbose(@"Conversion failed: %@", exception);
+ NSLog(@"Conversion failed: %@", exception);
}
@finally
{
@@ -219,10 +219,11 @@ NSString * const XCCNib2CibDidEndNotification = @"XCCNib2C
self.completionBlock = ^{
[weakOperation dispatchNotificationName:XCCConversionDidEndNotification];
+ [weakOperation setCompletionBlock:nil];
};
}
- DDLogVerbose(@"Conversion ended: %@", self.sourcePath);
+ NSLog(@"Conversion ended: %@", self.sourcePath);
}
@end
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.m b/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.m
index 844eb7a4b..d72357337 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCSourcesFinderOperation.m
@@ -36,7 +36,7 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
#pragma mark - Utilities
- (NSArray *)_findSourceFilesAtProjectPath:(NSString *)aProjectPath
-{
+{
NSError *error = NULL;
NSString *projectPath = [self.cappuccinoProject.projectPath stringByAppendingPathComponent:aProjectPath];
NSFileManager *fm = [NSFileManager defaultManager];
@@ -80,7 +80,7 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
{
if ([XCCCappuccinoProject shouldIgnoreDirectoryNamed:filename])
{
- DDLogVerbose(@"%@: ignored symlinked directory: %@", self.cappuccinoProject.name, projectRelativePath);
+ NSLog(@"%@: ignored symlinked directory: %@", self.cappuccinoProject.name, projectRelativePath);
continue;
}
@@ -92,7 +92,7 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
if (![realPath hasPrefix:fullProjectPath] && ![XCCCappuccinoProject pathMatchesIgnoredPaths:fullProjectPath cappuccinoProjectIgnoredPathPredicates:self.cappuccinoProject.ignoredPathPredicates])
{
- DDLogVerbose(@"%@: symlinked directory: %@ -> %@", self.cappuccinoProject.name, projectRelativePath, realPath);
+ NSLog(@"%@: symlinked directory: %@ -> %@", self.cappuccinoProject.name, projectRelativePath, realPath);
NSMutableDictionary *info = [self operationInformations];
info[@"sourcePath"] = realPath;
@@ -101,12 +101,13 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
[self dispatchNotificationName:XCCNeedSourceToProjectPathMappingNotification userInfo:info];
}
else
- DDLogVerbose(@"%@: ignored symlinked directory: %@", self.cappuccinoProject.name, projectRelativePath);
+ NSLog(@"%@: ignored symlinked directory: %@", self.cappuccinoProject.name, projectRelativePath);
}
- DDLogVerbose(@"%@: found directory. checking for source files: %@", self.cappuccinoProject.name, filename);
-
+ NSLog(@"%@: found directory. checking for source files: %@", self.cappuccinoProject.name, filename);
+
[sourcePaths addObjectsFromArray:[self _findSourceFilesAtProjectPath:projectRelativePath]];
+
continue;
}
@@ -117,7 +118,7 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
if ([XCCCappuccinoProject isObjjFile:filename] || [XCCCappuccinoProject isXibFile:filename])
{
- DDLogVerbose(@"%@: found source file: %@", self.cappuccinoProject.name, filename);
+ NSLog(@"%@: found source file: %@", self.cappuccinoProject.name, filename);
NSString *processedPath;
@@ -130,7 +131,7 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
[sourcePaths addObject:projectSourcePath];
}
}
-
+
return sourcePaths;
}
@@ -139,7 +140,7 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
- (void)main
{
- DDLogVerbose(@"Finding source files started");
+ NSLog(@"Finding source files started");
NSArray *sourcesPaths;
@@ -151,7 +152,7 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
}
@catch (NSException *exception)
{
- DDLogVerbose(@"Finding source files failed: %@", exception);
+ NSLog(@"Finding source files failed: %@", exception);
}
@finally
{
@@ -160,10 +161,11 @@ NSString * const XCCNeedSourceToProjectPathMappingNotification = @"XCCNeedSource
self.completionBlock = ^{
[weakOperation dispatchNotificationName:XCCSourcesFinderOperationDidEndNotification userInfo:@{@"cappuccinoProject": weakOperation.cappuccinoProject, @"sourcePaths" : weakSourcesPaths}];
+ [weakOperation setCompletionBlock:nil];
};
}
- DDLogVerbose(@"Finding source files ended");
+ NSLog(@"Finding source files ended");
}
@end
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.m b/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.m
index 318fa2caf..fccecd51c 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCTaskLauncher.m
@@ -29,7 +29,7 @@
[self.binaryPaths addObject:@"/usr/local/narwhal/bin"];
[self.binaryPaths addObject:@"~/narwhal/bin"];
- DDLogError(@"Init task manager with environements %@", self.binaryPaths);
+ NSLog(@"Init task manager with environements %@", self.binaryPaths);
NSMutableArray *paths = [self.binaryPaths mutableCopy];
@@ -59,13 +59,13 @@
if ([taskResult[@"status"] integerValue] != 0)
{
- DDLogError(@"Could not find executable in PATH: %@", self.environment[@"PATH"]);
+ NSLog(@"Could not find executable in PATH: %@", self.environment[@"PATH"]);
return NO;
}
self.executablePaths = (NSMutableDictionary*)[NSJSONSerialization JSONObjectWithData:[taskResult[@"response"] dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
- DDLogVerbose(@"Executable paths: %@", self.executablePaths);
+ NSLog(@"Executable paths: %@", self.executablePaths);
return YES;
}
@@ -145,13 +145,13 @@
{
[aTask launch];
- DDLogVerbose(@"Task launched: %@\n%@", aTask.launchPath, aTask.arguments);
+ NSLog(@"Task launched: %@\n%@", aTask.launchPath, aTask.arguments);
if (returnType != kTaskReturnTypeNone)
{
[aTask waitUntilExit];
- DDLogVerbose(@"Task exited: %@\n%@\nExit code:%d", aTask.launchPath, aTask.arguments, aTask.terminationStatus);
+ NSLog(@"Task exited: %@\n%@\nExit code:%d", aTask.launchPath, aTask.arguments, aTask.terminationStatus);
NSData *data = nil;
@@ -203,11 +203,11 @@
[task launch];
- DDLogVerbose(@"Task launched: %@\n%@", launchPath, arguments);
+ NSLog(@"Task launched: %@\n%@", launchPath, arguments);
[task waitUntilExit];
- DDLogVerbose(@"Task exited: %@:%d", launchPath, task.terminationStatus);
+ NSLog(@"Task exited: %@:%d", launchPath, task.terminationStatus);
NSNumber *status = @(task.terminationStatus);
NSData *data = nil;
@@ -230,7 +230,7 @@
NSData *data = [notification userInfo][NSFileHandleNotificationDataItem];
NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
- DDLogVerbose(@"Jake receive data\n %@", string);
+ NSLog(@"Jake receive data\n %@", string);
[[notification object] readInBackgroundAndNotify];
}
@@ -240,7 +240,7 @@
NSData *data = [notification userInfo][NSFileHandleNotificationDataItem];
NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
- DDLogVerbose(@"Jake receive error\%@", string);
+ NSLog(@"Jake receive error\%@", string);
}
@end
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.h b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.h
index bd416e4f2..d7bde1639 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.h
+++ b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.h
@@ -13,7 +13,6 @@
extern NSString * const XCCUserDefaultsAutoOpenXcodeProject;
extern NSString * const XCCUserDefaultsManagedProjects;
-extern NSString * const XCCUserDefaultsLogLevel;
extern NSString * const XCCUserDefaultsSelectedProjectPath;
extern NSString * const XCCUserDefaultsMaxNumberOfConcurrentOperations;
diff --git a/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.m b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.m
index 9cc4470a4..f4c86a06a 100644
--- a/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.m
+++ b/Tools/XcodeCapp/XcodeCapp/XCCUserDefaults.m
@@ -10,6 +10,5 @@
NSString * const XCCUserDefaultsAutoOpenXcodeProject = @"XCCUserDefaultsAutoOpenXcodeProject";
NSString * const XCCUserDefaultsManagedProjects = @"XCCUserDefaultsManagedProjects";
-NSString * const XCCUserDefaultsLogLevel = @"XCCUserDefaultsLogLevel";
NSString * const XCCUserDefaultsSelectedProjectPath = @"XCCUserDefaultsSelectedProjectPath";
NSString * const XCCUserDefaultsMaxNumberOfConcurrentOperations = @"XCCUserDefaultsMaxNumberOfConcurrentOperations";
\ No newline at end of file
diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeCapp-Prefix.pch b/Tools/XcodeCapp/XcodeCapp/XcodeCapp-Prefix.pch
index 92f4e2158..c3ac0cfad 100644
--- a/Tools/XcodeCapp/XcodeCapp/XcodeCapp-Prefix.pch
+++ b/Tools/XcodeCapp/XcodeCapp/XcodeCapp-Prefix.pch
@@ -4,13 +4,4 @@
#ifdef __OBJC__
#import
- #import "DDLog.h"
-
-#if DEBUG
- #import "DDTTYLogger.h"
-#else
- #import "DDASLLogger.h"
-#endif
-
- #import "DDLogLevel.h"
#endif
diff --git a/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m b/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m
index d6d8f165d..0a3a31b49 100644
--- a/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m
+++ b/Tools/XcodeCapp/XcodeCapp/XcodeProjectCloser.m
@@ -28,12 +28,17 @@ static const char *kCloseXcodeProjectScript =
@implementation XcodeProjectCloser
+ (void)closeXcodeProjectForProject:(NSString *)projectPath
-{
- NSString *format = @(kCloseXcodeProjectScript);
- NSString *source = [NSString stringWithFormat:format, projectPath];
- NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
-
- [script executeAndReturnError:nil];
+{
+ NSString *format = @(kCloseXcodeProjectScript);
+ NSString *source = [NSString stringWithFormat:format, projectPath];
+ NSString *arguments = [NSString stringWithFormat:@"-e %@", source];
+ NSTask *task = [[NSTask alloc] init];
+
+ [task setLaunchPath:@"/usr/bin/osascript"];
+ [task setArguments:[NSArray arrayWithObjects:arguments, nil]];
+ [task launch];
+
+ NSLog(@"Osascript launched for the project %@", projectPath);
}
@end
diff --git a/Tools/capp/Resources/Templates/Application/Jakefile b/Tools/capp/Resources/Templates/Application/Jakefile
index 08a8c0c8b..a25464947 100644
--- a/Tools/capp/Resources/Templates/Application/Jakefile
+++ b/Tools/capp/Resources/Templates/Application/Jakefile
@@ -40,7 +40,7 @@ app (projectName, function(task)
if (configuration === "Debug")
task.setCompilerFlags("-DDEBUG -g");
else
- task.setCompilerFlags("-O");
+ task.setCompilerFlags("-O2");
});
task ("default", [projectName], function()
diff --git a/Tools/capp/Resources/Templates/Application/index-debug.html b/Tools/capp/Resources/Templates/Application/index-debug.html
index d862fd07e..652466be6 100644
--- a/Tools/capp/Resources/Templates/Application/index-debug.html
+++ b/Tools/capp/Resources/Templates/Application/index-debug.html
@@ -33,6 +33,18 @@